""" This module deals with partial correlations. It is an attempt to migrate over the partial correlations feature from GeneNetwork1. """ from typing import Sequence from functools import reduce def control_samples(controls: Sequence[dict], sampleslist: Sequence[str]): """ Fetches data for the control traits. This migrates `web/webqtl/correlation/correlationFunction.controlStrain` in GN1, with a few modifications to the arguments passed in. PARAMETERS: controls: A map of sample names to trait data. Equivalent to the `cvals` value in the corresponding source function in GN1. sampleslist: A list of samples. Equivalent to `strainlst` in the corresponding source function in GN1 """ def __process_control__(trait_data): def __process_sample__(acc, sample): if sample in trait_data["data"].keys(): sample_item = trait_data["data"][sample] val = sample_item["value"] if val is not None: return ( acc[0] + (sample,), acc[1] + (val,), acc[2] + (sample_item["variance"],)) return acc return reduce( __process_sample__, sampleslist, (tuple(), tuple(), tuple())) return reduce( lambda acc, item: ( acc[0] + (item[0],), acc[1] + (item[1],), acc[2] + (item[2],), acc[3] + (len(item[0]),), ), [__process_control__(trait_data) for trait_data in controls], (tuple(), tuple(), tuple(), tuple()))