Source code for pycif.plugins.obsoperators.standard.transforms.utils.default_subsimus
import numpy as np
from itertools import groupby
import datetime
import pandas as pd
[docs]
def default_subsimus(all_transforms, mapper):
"""Initialize sub-simulations for each transform for which
sub-simulations are not already defined. By default, the sub-simulations
of a given transform are deduced from the shape of the "input_dates" of
each component/tracer in the outputs.
"""
# Loop over every transform
for transform in all_transforms.attributes:
transf = getattr(all_transforms, transform)
transf_mapper = mapper[transform]
# If sub-simulations already initialized, do nothing
if "subsimus" in transf_mapper:
continue
# Makes sure that all objects are datetime objects
# To do so, turns them into pd.Timestamps then back to datetime
output_subsimus = set([
pd.Timestamp(d).to_pydatetime()
for trid in transf_mapper["outputs"]
for d in list(transf_mapper["outputs"][trid].get(
"input_dates", {}).keys())
])
transf_mapper["subsimus"] = {
ddi: {
"inputs": {
trid_out: {ddi: []}
for trid_out in transf_mapper["inputs"]
if ddi in transf_mapper["inputs"][trid_out].get(
"input_dates", {})
},
"outputs": {
trid_out: {ddi: []}
for trid_out in transf_mapper["outputs"]
if ddi in transf_mapper["outputs"][trid_out].get(
"input_dates", {})
}
}
for ddi in output_subsimus
}