summaryrefslogtreecommitdiff
path: root/pint/facets/measurement/registry.py
diff options
context:
space:
mode:
Diffstat (limited to 'pint/facets/measurement/registry.py')
-rw-r--r--pint/facets/measurement/registry.py42
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