diff options
Diffstat (limited to 'pint/facets/measurement/registry.py')
-rw-r--r-- | pint/facets/measurement/registry.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/pint/facets/measurement/registry.py b/pint/facets/measurement/registry.py new file mode 100644 index 0000000..77bde3d --- /dev/null +++ b/pint/facets/measurement/registry.py @@ -0,0 +1,42 @@ +""" + pint.facets.measurement.objects + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + :copyright: 2022 by Pint Authors, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" + + +from __future__ import annotations + +from ...compat import ufloat +from ...util import build_dependent_class, create_class_with_registry +from .objects import Measurement, MeasurementQuantity + + +class MeasurementRegistry: + + _quantity_class = MeasurementQuantity + _measurement_class = Measurement + + def __init_subclass__(cls, **kwargs): + super().__init_subclass__() + + cls.Measurement = build_dependent_class( + cls, "Measurement", "_measurement_class" + ) + + def _init_dynamic_classes(self) -> None: + """Generate subclasses on the fly and attach them to self""" + super()._init_dynamic_classes() + + if ufloat is not None: + self.Measurement = create_class_with_registry(self, self.Measurement) + else: + + def no_uncertainties(*args, **kwargs): + raise RuntimeError( + "Pint requires the 'uncertainties' package to create a Measurement object." + ) + + self.Measurement = no_uncertainties |