text: """
  MUV dataset loader.
  """
  from __future__ import division
  from __future__ import unicode_literals
  
  import os
  import logging
  import deepchem
  
  logger = logging.getLogger(__name__)
  
  
  def load_muv(featurizer='ECFP', split='index', reload=True, K=4):
    """Load MUV datasets. Does not do train/test split"""
    # Load MUV dataset
    logger.info("About to load MUV dataset.")
    data_dir = deepchem.utils.get_data_dir()
    if reload:
      save_dir = os.path.join(data_dir, "muv/" + featurizer + "/" + str(split))
  
    dataset_file = os.path.join(data_dir, "muv.csv.gz")
    if not os.path.exists(dataset_file):
      deepchem.utils.download_url(
          'http://deepchem.io.s3-website-us-west-1.amazonaws.com/datasets/muv.csv.gz'
      )
  
    MUV_tasks = sorted([
        'MUV-692', 'MUV-689', 'MUV-846', 'MUV-859', 'MUV-644', 'MUV-548',
        'MUV-852', 'MUV-600', 'MUV-810', 'MUV-712', 'MUV-737', 'MUV-858',
        'MUV-713', 'MUV-733', 'MUV-652', 'MUV-466', 'MUV-832'
    ])
  
    if reload:
      loaded, all_dataset, transformers = deepchem.utils.save.load_dataset_from_disk(
          save_dir)
      if loaded:
        return MUV_tasks, all_dataset, transformers
  
    # Featurize MUV dataset
    logger.info("About to featurize MUV dataset.")
  
    if featurizer == 'ECFP':
      featurizer = deepchem.feat.CircularFingerprint(size=1024)
    elif featurizer == 'GraphConv':
      featurizer = deepchem.feat.ConvMolFeaturizer()
    elif featurizer == 'Weave':
      featurizer = deepchem.feat.WeaveFeaturizer()
    elif featurizer == 'Raw':
      featurizer = deepchem.feat.RawFeaturizer()
  
    loader = deepchem.data.CSVLoader(
        tasks=MUV_tasks, smiles_field="smiles", featurizer=featurizer)
    dataset = loader.featurize(dataset_file)
  
    # Initialize transformers
    transformers = [
        deepchem.trans.BalancingTransformer(transform_w=True, dataset=dataset)
    ]
    logger.info("About to transform data")
    for transformer in transformers:
      dataset = transformer.transform(dataset)
  
    if split == None:
      return MUV_tasks, (dataset, None, None), transformers
  
    splitters = {
        'index': deepchem.splits.IndexSplitter(),
        'random': deepchem.splits.RandomSplitter(),
        'scaffold': deepchem.splits.ScaffoldSplitter(),
        'task': deepchem.splits.TaskSplitter()
    }
    splitter = splitters[split]
    if split == 'task':
      fold_datasets = splitter.k_fold_split(dataset, K)
      all_dataset = fold_datasets
    else:
      train, valid, test = splitter.train_valid_test_split(dataset)
      all_dataset = (train, valid, test)
      if reload:
        deepchem.utils.save.save_dataset_to_disk(save_dir, train, valid, test,
                                                 transformers)
    return MUV_tasks, all_dataset, transformers
  