diff --git a/ecml_tools/__init__.py b/ecml_tools/__init__.py index 32f3110..af526ba 100644 --- a/ecml_tools/__init__.py +++ b/ecml_tools/__init__.py @@ -5,4 +5,4 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -__version__ = "0.4.7" +__version__ = "0.5.0" diff --git a/ecml_tools/data.py b/ecml_tools/data.py index 15234c5..700e3cf 100644 --- a/ecml_tools/data.py +++ b/ecml_tools/data.py @@ -1043,6 +1043,9 @@ def frequency(self): def source(self, index): return Source(self, index, self.forward.source(index)) + def __repr__(self): + return f"Subset({self.dates[0]}, {self.dates[-1]}, {self.frequency})" + class Select(Forwards): """ @@ -1317,8 +1320,8 @@ def _auto_adjust(datasets, kwargs): """Adjust the datasets for concatenation or joining based on parameters set to 'matching'""" - if kwargs.get("ajust") == "matching": - kwargs.pop("ajust") + if kwargs.get("adjust") == "matching": + kwargs.pop("adjust") for p in ("select", "frequency", "start", "end"): kwargs[p] = "matching" @@ -1327,27 +1330,29 @@ def _auto_adjust(datasets, kwargs): if kwargs.get("select") == "matching": kwargs.pop("select") variables = None + for d in datasets: if variables is None: variables = set(d.variables) else: variables &= set(d.variables) + if len(variables) == 0: raise ValueError("No common variables") adjust["select"] = sorted(variables) - if kwargs.get("frequency") == "matching": - kwargs.pop("frequency") - adjust["frequency"] = max(d.frequency for d in datasets) - if kwargs.get("start") == "matching": kwargs.pop("start") adjust["start"] = max(d.dates[0] for d in datasets).astype(object) if kwargs.get("end") == "matching": kwargs.pop("end") - adjust["end"] = max(d.dates[-1] for d in datasets).astype(object) + adjust["end"] = min(d.dates[-1] for d in datasets).astype(object) + + if kwargs.get("frequency") == "matching": + kwargs.pop("frequency") + adjust["frequency"] = max(d.frequency for d in datasets) if adjust: datasets = [d._subset(**adjust) for d in datasets]