Skip to content

Commit 0ba0216

Browse files
committed
Improve constraint and update solver test to use new AddParentDataset
1 parent b2ac285 commit 0ba0216

File tree

2 files changed

+27
-22
lines changed

2 files changed

+27
-22
lines changed

packages/climate-ref-core/src/climate_ref_core/constraints.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -503,8 +503,8 @@ def apply(self, group: pd.DataFrame, data_catalog: pd.DataFrame) -> pd.DataFrame
503503
if set(all_parent_facets).issubset(data_catalog.keys()):
504504
break
505505
else:
506-
# No matching parent_facets
507-
return group
506+
msg = "Missing facets in data catalog to determine parent dataset"
507+
raise ValueError(msg)
508508

509509
# Remove datasets that do not have all parent facets set.
510510
valid_group = group[all_parent_facets].drop_duplicates().dropna(axis="columns")
@@ -519,15 +519,15 @@ def apply(self, group: pd.DataFrame, data_catalog: pd.DataFrame) -> pd.DataFrame
519519
# Add the latest version of the dataset to the selection.
520520
parent_dataset = data_catalog[parent_select]
521521
parent_dataset = parent_dataset[parent_dataset["version"] == parent_dataset["version"].max()]
522-
select[parent_dataset.index] = True
522+
select.loc[parent_dataset.index] = True
523523
else:
524-
# Drop the dataset if no parent dataset is found.
524+
# Drop the child dataset if no parent dataset is found.
525525
logger.debug(
526526
f"Constraint {self} not satisfied because no parent dataset found for "
527527
f"{', '.join(f'{k}={v}' for k, v in dataset.items())}"
528528
)
529-
dataset_facets = {k: (dataset[k],) for k in dataset}
530-
dataset_select = valid_group[list(dataset_facets)].isin(dataset_facets).all(axis="columns")
531-
select[dataset_select] = False
529+
child_facets = {k: (dataset[k],) for k in dataset}
530+
child_select = valid_group[list(child_facets)].isin(child_facets).all(axis="columns")
531+
select.loc[child_select[child_select].index] = False
532532

533533
return data_catalog[select]

packages/climate-ref/tests/unit/test_solver.py

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
solve_executions,
2121
solve_required_executions,
2222
)
23-
from climate_ref_core.constraints import AddSupplementaryDataset, RequireFacets, SelectParentExperiment
23+
from climate_ref_core.constraints import AddParentDataset, AddSupplementaryDataset, RequireFacets
2424
from climate_ref_core.datasets import SourceDatasetType
2525
from climate_ref_core.diagnostics import DataRequirement, FacetFilter
2626

@@ -188,35 +188,40 @@ def test_solver_build_from_db(self, solver):
188188
DataRequirement(
189189
source_type=SourceDatasetType.CMIP6,
190190
filters=(FacetFilter(facets={"variable_id": ("tas", "pr")}),),
191-
constraints=(SelectParentExperiment(),),
191+
constraints=(AddParentDataset(),),
192192
group_by=("variable_id", "experiment_id"),
193193
),
194194
pd.DataFrame(
195195
{
196-
"variable_id": ["tas", "tas"],
197196
"experiment_id": ["ssp119", "historical"],
197+
"grid_label": ["gn", "gn"],
198198
"parent_experiment_id": ["historical", "none"],
199+
"parent_source_id": ["A", "A"],
200+
"parent_variant_label": ["r1i1p1f1", "none"],
201+
"source_id": ["A", "A"],
202+
"table_id": ["Amon", "Amon"],
203+
"variable_id": ["tas", "tas"],
204+
"variant_label": ["r1i1p1f1", "r1i1p1f1"],
205+
"version": ["v20210101", "v20220101"],
199206
}
200207
),
201208
{
202209
(("variable_id", "tas"), ("experiment_id", "ssp119")): pd.DataFrame(
203210
{
211+
"experiment_id": ["ssp119", "historical"],
212+
"grid_label": ["gn", "gn"],
213+
"parent_experiment_id": ["historical", "none"],
214+
"parent_source_id": ["A", "A"],
215+
"parent_variant_label": ["r1i1p1f1", "none"],
216+
"source_id": ["A", "A"],
217+
"table_id": ["Amon", "Amon"],
204218
"variable_id": ["tas", "tas"],
205-
"experiment_id": ["historical", "ssp119"],
206-
},
207-
# The order of the rows is not guaranteed
208-
index=[1, 0],
209-
),
210-
(("variable_id", "tas"), ("experiment_id", "historical")): pd.DataFrame(
211-
{
212-
"variable_id": ["tas", "tas"],
213-
"experiment_id": ["historical"],
219+
"variant_label": ["r1i1p1f1", "r1i1p1f1"],
220+
"version": ["v20210101", "v20220101"],
214221
},
215-
# The order of the rows is not guaranteed
216-
index=[1, 0],
222+
index=[0, 1],
217223
),
218224
},
219-
marks=[pytest.mark.xfail(reason="Parent experiment not implemented")],
220225
id="parent",
221226
),
222227
pytest.param(

0 commit comments

Comments
 (0)