From 61e448034d3c6d8c8140f4a8be1c2ae326011715 Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Fri, 8 Feb 2019 14:09:16 -0500 Subject: [PATCH 1/2] FIX: Pass new variable args as kwargs in split() --- bids/variables/variables.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bids/variables/variables.py b/bids/variables/variables.py index 87cd5301b..9f85c2693 100644 --- a/bids/variables/variables.py +++ b/bids/variables/variables.py @@ -253,8 +253,8 @@ def split(self, grouper): subsets = [] for i, (name, g) in enumerate(data.groupby(grouper)): name = '%s.%s' % (self.name, name) - args = [name, g, getattr(self, 'run_info', None), self.source] - col = self.__class__(*args) + col = self.__class__(name=name, data=g, source=self.source, + run_info=getattr(self, 'run_info', None)) subsets.append(col) return subsets From 687407ac050c431cca8c9afb47c11b2878f665b8 Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Mon, 11 Feb 2019 15:18:31 -0500 Subject: [PATCH 2/2] RF: Always construct variables with kwargs --- bids/analysis/tests/test_transformations.py | 2 +- bids/analysis/transformations/compute.py | 5 ++--- bids/variables/io.py | 14 +++++++------ bids/variables/kollekshuns.py | 2 +- bids/variables/tests/test_variables.py | 3 ++- bids/variables/variables.py | 23 +++++++++++++++------ 6 files changed, 31 insertions(+), 18 deletions(-) diff --git a/bids/analysis/tests/test_transformations.py b/bids/analysis/tests/test_transformations.py index 9db5625f1..21610289a 100644 --- a/bids/analysis/tests/test_transformations.py +++ b/bids/analysis/tests/test_transformations.py @@ -29,7 +29,7 @@ def sparse_run_variable_with_missing_values(): 'amplitude': [1, 1, np.nan, 1] }) run_info = [RunInfo({'subject': '01'}, 20, 2, 'dummy.nii.gz')] - var = SparseRunVariable('var', data, run_info, 'events') + var = SparseRunVariable(name='var', data=data, run_info=run_info, source='events') return BIDSRunVariableCollection([var]) diff --git a/bids/analysis/transformations/compute.py b/bids/analysis/transformations/compute.py index ae51189a9..153bb846d 100644 --- a/bids/analysis/transformations/compute.py +++ b/bids/analysis/transformations/compute.py @@ -52,9 +52,8 @@ def _transform(self, var, model='spm', derivative=False, dispersion=False, convolved = hrf.compute_regressor(vals, model, onsets, fir_delays=fir_delays, min_onset=0) - return DenseRunVariable(var.name, convolved[0], - var.run_info, var.source, - var.sampling_rate) + return DenseRunVariable(name=var.name, values=convolved[0], run_info=var.run_info, + source=var.source, sampling_rate=var.sampling_rate) class Demean(Transformation): diff --git a/bids/variables/io.py b/bids/variables/io.py index d35c32094..288262f6a 100644 --- a/bids/variables/io.py +++ b/bids/variables/io.py @@ -210,7 +210,8 @@ def _load_time_variables(layout, dataset=None, columns=None, scan_length=None, if df.empty: continue - var = SparseRunVariable(col, df, run_info, 'events') + var = SparseRunVariable(name=col, data=df, run_info=run_info, + source='events') run.add_variable(var) # Process confound files @@ -225,8 +226,9 @@ def _load_time_variables(layout, dataset=None, columns=None, scan_length=None, _data = _data.loc[:, conf_cols] for col in _data.columns: sr = 1. / run.repetition_time - var = DenseRunVariable(col, _data[[col]], run_info, - 'regressors', sr) + var = DenseRunVariable(name=col, values=_data[[col]], + run_info=run_info, source='regressors', + sampling_rate=sr) run.add_variable(var) # Process recordinging files @@ -279,8 +281,8 @@ def _load_time_variables(layout, dataset=None, columns=None, scan_length=None, df = pd.DataFrame(values, columns=rf_cols) source = 'physio' if '_physio.tsv' in rf else 'stim' for col in df.columns: - var = DenseRunVariable(col, df[[col]], run_info, source, - freq) + var = DenseRunVariable(name=col, values=df[[col]], run_info=run_info, + source=source, sampling_rate=freq) run.add_variable(var) return dataset @@ -400,6 +402,6 @@ def make_patt(x, regex_search=False): if prepend_type: col_name = '%s.%s' % (suffix, col_name) - node.add_variable(SimpleVariable(col_name, df, suffix)) + node.add_variable(SimpleVariable(name=col_name, data=df, source=suffix)) return dataset diff --git a/bids/variables/kollekshuns.py b/bids/variables/kollekshuns.py index c94ca712d..7b6687b83 100644 --- a/bids/variables/kollekshuns.py +++ b/bids/variables/kollekshuns.py @@ -146,7 +146,7 @@ def from_df(cls, data, entities=None, source='contrast'): _data = pd.DataFrame(data[col].values, columns=['amplitude']) if entities is not None: _data = pd.concat([_data, entities], axis=1, sort=True) - variables.append(SimpleVariable(col, _data, source)) + variables.append(SimpleVariable(name=col, data=_data, source=source)) return BIDSVariableCollection(variables) def clone(self): diff --git a/bids/variables/tests/test_variables.py b/bids/variables/tests/test_variables.py index 74876489c..84d220bfb 100644 --- a/bids/variables/tests/test_variables.py +++ b/bids/variables/tests/test_variables.py @@ -20,7 +20,8 @@ def generate_DEV(name='test', sr=20, duration=480): entities = {e: uuid.uuid4().hex for e in ent_names} image = uuid.uuid4().hex + '.nii.gz' run_info = RunInfo(entities, duration, 2, image) - return DenseRunVariable('test', values, run_info, 'dummy', sr) + return DenseRunVariable(name='test', values=values, run_info=run_info, + source='dummy', sampling_rate=sr) @pytest.fixture diff --git a/bids/variables/variables.py b/bids/variables/variables.py index 9f85c2693..42bb43392 100644 --- a/bids/variables/variables.py +++ b/bids/variables/variables.py @@ -340,8 +340,12 @@ def to_dense(self, sampling_rate): last_ind = onsets[i] run_info = list(self.run_info) - return DenseRunVariable(self.name, ts, run_info, self.source, - sampling_rate) + return DenseRunVariable( + name=self.name, + values=ts, + run_info=run_info, + source=self.source, + sampling_rate=sampling_rate) @classmethod def _merge(cls, variables, name, **kwargs): @@ -398,9 +402,11 @@ def split(self, grouper): ''' values = grouper.values * self.values.values df = pd.DataFrame(values, columns=grouper.columns) - return [DenseRunVariable('%s.%s' % (self.name, name), df[name].values, - self.run_info, self.source, - self.sampling_rate) + return [DenseRunVariable(name='%s.%s' % (self.name, name), + values=df[name].values, + run_info=self.run_info, + source=self.source, + sampling_rate=self.sampling_rate) for i, name in enumerate(df.columns)] def _build_entity_index(self, run_info, sampling_rate): @@ -506,7 +512,12 @@ def _merge(cls, variables, name, sampling_rate=None, **kwargs): values = pd.concat([v.values for v in variables], axis=0, sort=True) run_info = list(chain(*[v.run_info for v in variables])) source = variables[0].source - return DenseRunVariable(name, values, run_info, source, sampling_rate) + return DenseRunVariable( + name=name, + values=values, + run_info=run_info, + source=source, + sampling_rate=sampling_rate) def merge_variables(variables, name=None, **kwargs):