@sh.add_function(
dsp, inputs_kwargs=True, inputs_defaults=True, outputs=['shifts']
)
def calculate_shifts(labels, reference_name, data, no_sync=False):
"""
Calculates the shifts from the reference data-set.
:param labels:
Reference-labels (i.e., "x", "y") for each data-set.
It is like `{"<set-name>": {"x": "<x-label>", "y": "<y-label>"}, ...}`.
:type labels: collections.defaultdict
:param reference_name:
Reference data-set name.
:type reference_name: str
:param data:
Data-sets.
:type data: dict[str, dict[str, numpy.array]]
:param no_sync:
Skip the data synchronisation?
:type no_sync: bool
:return:
Shifts from the reference data-set.
:rtype: dict[str, float]
"""
keys = [k for k in data if k != reference_name]
if no_sync:
return dict.fromkeys(keys, 0)
data = {k: _get(labels, k, v, 'x', 'y') for k, v in data.items()}
args = sh.selector([reference_name] + keys, data, output_type='list')
return sh.map_list(keys, *_compute_shifts(*args))