Source code for sekupy.simulation.loader
from sekupy.preprocessing.base import PreprocessingPipeline, Transformer
from sekupy.preprocessing.mapper import function_mapper
from sekupy.analysis.utils import get_params
from sekupy.io.configuration import read_configuration
import os
from sekupy.dataset.dataset import vstack
import logging
logger = logging.getLogger(__name__)
[docs]
class SimulationLoader(object):
def __init__(self, conf_file, task, name='simulator', **kwargs):
conf = read_configuration(conf_file, task)
conf.update(kwargs)
logger.debug(conf)
data_path = conf['data_path']
if len(data_path) == 1:
data_path = os.path.abspath(os.path.join(conf_file, os.pardir))
conf['data_path'] = data_path
conf['task'] = task
self.conf = conf
self.name = name
[docs]
def fetch(self, n_subjects=10, **kwargs):
ds_merged = []
for i in range(n_subjects):
logger.info("Creating %d/%d dataset" %(i+1, n_subjects))
pipeline = self._get_transformer(**kwargs)
ds = pipeline.transform(ds=None)
ds.sa['subject'] = [i+1 for _ in range(ds.shape[0])]
name = 'subj_simulated-%s'
ds.sa['file'] = [name % (str(i+1)) for _ in range(ds.shape[0])]
ds_merged.append(ds)
ds_merged = vstack(ds_merged, a='all')
ds_merged.a.update(self.conf)
self._ds = ds_merged
return ds_merged
def _get_transformer(self, **options):
if 'pipeline' not in options.keys():
return Transformer()
transformer = []
for key in options['pipeline']:
klass = function_mapper(key)
arg_dict = get_params(options, key)
if key == 'sample_slicer' and 'attr' in arg_dict.keys():
arg_dict = arg_dict['attr']
logger.debug(klass)
objekt = klass(**arg_dict)
transformer.append(objekt)
logger.debug(transformer)
return PreprocessingPipeline(nodes=transformer)
[docs]
def save(self, fname):
if hasattr(self, '_ds'):
ds = self._ds
fname = os.path.join(ds.a.data_path, fname)
_ = ds.save(fname+".gzip", compression='gzip')
return
"""
def load_simulations(path, subj, folder, **kwargs):
ds = h5load(os.path.join(path, subj+'.gzip'))
ds.sa['file'] = [subj for _ in range(ds.shape[0])]
return ds
"""