def METHOD_NAME(dataset, seed=200, cvFold=None, nestedCvFolds=None):
    src = dataset['src']
    x_column = dataset['x_column']
    y_column = dataset['y_column']
    transform_type = dataset.get('transform_type')
    if cvFold is not None:
        split = dataset['split'] + '_fold_'+str(cvFold)
    else:
        split = dataset['split']
    if isinstance(split, str):
        # split is the name of the split column with values train, val and test
        df_train, df_val, df_test = read_and_split(src, split_column=split)
    else:
        # split is an array specifying the number of samples for train, val and test set
        df_train, df_val, df_test = read_and_split_by_size(src, split_size_array=split, seed=seed)
    transformer = create_transformer(df_train, transform_y_cols=y_column, transform_x_cols=x_column, transform_type= transform_type)
    # now transform all data
    df_train[x_column] = transformer.transform_x(df_train[x_column])
    df_train[y_column] = transformer.transform_y(df_train[y_column])
    df_val[x_column] = transformer.transform_x(df_val[x_column])
    df_val[y_column] = transformer.transform_y(df_val[y_column])
    df_test[x_column] = transformer.transform_x(df_test[x_column])
    df_test[y_column] = transformer.transform_y(df_test[y_column])
    return (df_train, df_val, df_test, transformer)