diff --git a/dagflow/bundles/load_parameters.py b/dagflow/bundles/load_parameters.py index f0b496af620c2b73c650b1bca1d25b19f785db3a..f5e2bf3869f58d7f1a8c6e6687a890b3abb8f31f 100644 --- a/dagflow/bundles/load_parameters.py +++ b/dagflow/bundles/load_parameters.py @@ -202,17 +202,21 @@ def load_parameters(acfg): subkeys = cfg['replicate'] - normpars = [] + normpars = {} for key_general, varcfg in iterate_varcfgs(cfg): + key_general_str = '.'.join(key_general) + varcfg.setdefault(state, True) + + normpars_i = normpars.setdefault(key_general[0], []) for subkey in subkeys: key = key_general + subkey key_str = '.'.join(key) - label = varcfg['label'] + subkey_str = '.'.join(subkey) + + label = varcfg['label'].copy() label['key'] = key_str label.setdefault('text', key_str) - varcfg.setdefault(state, True) - par = Parameters.from_numbers(**varcfg) if par.is_constrained: target = ('constrained', path) @@ -221,22 +225,23 @@ def load_parameters(acfg): else: target = ('free', path) - ret[('parameter_node',)+target+key] = par + ret[('parameter_node',)+target+key] = par - ptarget = ('parameter', target) - for subpar in par.parameters: - ret[ptarget+key] = subpar + ptarget = ('parameter', target) + for subpar in par.parameters: + ret[ptarget+key] = subpar - ntarget = ('parameter', 'normalized', path) - for subpar in par.norm_parameters: - ret[ntarget+key] = subpar + ntarget = ('parameter', 'normalized', path) + for subpar in par.norm_parameters: + ret[ntarget+key] = subpar - normpars.append(subpar) + normpars_i.append(subpar) - if normpars: - ssq = SumSq(f'nuisance for {pathstr}') - (n.output for n in normpars) >> ssq - ssq.close() - ret[('stat', 'nuisance_parts', path)] = ssq + for name, np in normpars.items(): + if np: + ssq = SumSq(f'nuisance for {pathstr}.{name}') + (n.output for n in np) >> ssq + ssq.close() + ret[('stat', 'nuisance_parts', path, name)] = ssq return ret