diff --git a/LICENCE.txt b/LICENCE.txt index c558188..06e609f 100644 --- a/LICENCE.txt +++ b/LICENCE.txt @@ -1,6 +1,6 @@ steer-core - Dual Licensed -Copyright (c) 2024-2026 Nicholas Siemons +Copyright (c) 2024-2026 Stanford University 1. Open-source license: GNU Affero General Public License v3.0 (AGPL-3.0) See the full AGPL-3.0 license text below. diff --git a/steer_core/Constants/Format.py b/steer_core/Constants/Format.py index 5eba6e1..3986523 100644 --- a/steer_core/Constants/Format.py +++ b/steer_core/Constants/Format.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later ## DateTime format strings diff --git a/steer_core/Constants/Units.py b/steer_core/Constants/Units.py index 2753ffe..a6343c2 100644 --- a/steer_core/Constants/Units.py +++ b/steer_core/Constants/Units.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later ## Unit conversions diff --git a/steer_core/Constants/Universal.py b/steer_core/Constants/Universal.py index caed22c..86f18d4 100644 --- a/steer_core/Constants/Universal.py +++ b/steer_core/Constants/Universal.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later ## Constants diff --git a/steer_core/Constants/__init__.py b/steer_core/Constants/__init__.py index 790d687..ef73709 100644 --- a/steer_core/Constants/__init__.py +++ b/steer_core/Constants/__init__.py @@ -1,3 +1,3 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/steer_core/Data/DataManager.py b/steer_core/Data/DataManager.py index 04c0ab4..17c7ed0 100644 --- a/steer_core/Data/DataManager.py +++ b/steer_core/Data/DataManager.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later from __future__ import annotations diff --git a/steer_core/Data/__init__.py b/steer_core/Data/__init__.py index 1e5bccc..b8fddd4 100644 --- a/steer_core/Data/__init__.py +++ b/steer_core/Data/__init__.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later import os diff --git a/steer_core/Decorators/Coordinates.py b/steer_core/Decorators/Coordinates.py index 10dafff..d6457e2 100644 --- a/steer_core/Decorators/Coordinates.py +++ b/steer_core/Decorators/Coordinates.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later from steer_core.Decorators.General import recalculate diff --git a/steer_core/Decorators/General.py b/steer_core/Decorators/General.py index 4be1533..dfee811 100644 --- a/steer_core/Decorators/General.py +++ b/steer_core/Decorators/General.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later from functools import wraps diff --git a/steer_core/Decorators/__init__.py b/steer_core/Decorators/__init__.py index 790d687..ef73709 100644 --- a/steer_core/Decorators/__init__.py +++ b/steer_core/Decorators/__init__.py @@ -1,3 +1,3 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/steer_core/Mixins/Colors.py b/steer_core/Mixins/Colors.py index b3e51db..98eb5cb 100644 --- a/steer_core/Mixins/Colors.py +++ b/steer_core/Mixins/Colors.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later import numpy as np diff --git a/steer_core/Mixins/Coordinates.py b/steer_core/Mixins/Coordinates.py index ffa76a2..4e7df16 100644 --- a/steer_core/Mixins/Coordinates.py +++ b/steer_core/Mixins/Coordinates.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later import numpy as np diff --git a/steer_core/Mixins/Data.py b/steer_core/Mixins/Data.py index d2b9696..8d21028 100644 --- a/steer_core/Mixins/Data.py +++ b/steer_core/Mixins/Data.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later from copy import deepcopy diff --git a/steer_core/Mixins/DateTime.py b/steer_core/Mixins/DateTime.py index 47272e5..264c684 100644 --- a/steer_core/Mixins/DateTime.py +++ b/steer_core/Mixins/DateTime.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later # steer_core/Mixins/DateTime.py diff --git a/steer_core/Mixins/Datum.py b/steer_core/Mixins/Datum.py index e37ba92..03ae214 100644 --- a/steer_core/Mixins/Datum.py +++ b/steer_core/Mixins/Datum.py @@ -1,10 +1,9 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Mixin providing standard datum property interface with mm/m unit conversion.""" from typing import Tuple -import numpy as np from steer_core.Constants.Units import M_TO_MM, MM_TO_M @@ -60,9 +59,9 @@ def datum(self) -> Tuple[float, float, float]: """Datum position in millimeters.""" self._ensure_datum_exists() return ( - np.round(self._datum[0] * M_TO_MM, 2), - np.round(self._datum[1] * M_TO_MM, 2), - np.round(self._datum[2] * M_TO_MM, 2), + self._datum[0] * M_TO_MM, + self._datum[1] * M_TO_MM, + self._datum[2] * M_TO_MM, ) @datum.setter @@ -104,7 +103,7 @@ def _compute_datum_translation(self, new_datum_mm: Tuple[float, float, float]) - def datum_x(self) -> float: """X-coordinate of datum in millimeters.""" self._ensure_datum_exists() - return np.round(self._datum[0] * M_TO_MM, 2) + return self._datum[0] * M_TO_MM @datum_x.setter def datum_x(self, x: float) -> None: @@ -115,7 +114,7 @@ def datum_x(self, x: float) -> None: def datum_y(self) -> float: """Y-coordinate of datum in millimeters.""" self._ensure_datum_exists() - return np.round(self._datum[1] * M_TO_MM, 2) + return self._datum[1] * M_TO_MM @datum_y.setter def datum_y(self, y: float) -> None: @@ -126,7 +125,7 @@ def datum_y(self, y: float) -> None: def datum_z(self) -> float: """Z-coordinate of datum in millimeters.""" self._ensure_datum_exists() - return np.round(self._datum[2] * M_TO_MM, 2) + return self._datum[2] * M_TO_MM @datum_z.setter def datum_z(self, z: float) -> None: diff --git a/steer_core/Mixins/Dunder.py b/steer_core/Mixins/Dunder.py index d1c6dca..b6fcd9f 100644 --- a/steer_core/Mixins/Dunder.py +++ b/steer_core/Mixins/Dunder.py @@ -1,6 +1,6 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later import typing diff --git a/steer_core/Mixins/Plotter.py b/steer_core/Mixins/Plotter.py index 99e248a..628b677 100644 --- a/steer_core/Mixins/Plotter.py +++ b/steer_core/Mixins/Plotter.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later from __future__ import annotations diff --git a/steer_core/Mixins/Propagation.py b/steer_core/Mixins/Propagation.py index f4c9892..71e2fa4 100644 --- a/steer_core/Mixins/Propagation.py +++ b/steer_core/Mixins/Propagation.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Mixin for update propagation through hierarchical object trees.""" @@ -368,4 +368,22 @@ def __deepcopy__(self, memo): return result - \ No newline at end of file + + + + + + + + + + + + + + + + + + + diff --git a/steer_core/Mixins/Serializer.py b/steer_core/Mixins/Serializer.py index a711c5d..5ea6170 100644 --- a/steer_core/Mixins/Serializer.py +++ b/steer_core/Mixins/Serializer.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later import importlib diff --git a/steer_core/Mixins/TypeChecker.py b/steer_core/Mixins/TypeChecker.py index e18b489..c59680c 100644 --- a/steer_core/Mixins/TypeChecker.py +++ b/steer_core/Mixins/TypeChecker.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later from __future__ import annotations diff --git a/steer_core/Mixins/__init__.py b/steer_core/Mixins/__init__.py index 790d687..ef73709 100644 --- a/steer_core/Mixins/__init__.py +++ b/steer_core/Mixins/__init__.py @@ -1,3 +1,3 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/steer_core/Utils/ControlModes.py b/steer_core/Utils/ControlModes.py index fb94ff7..12831f0 100644 --- a/steer_core/Utils/ControlModes.py +++ b/steer_core/Utils/ControlModes.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Generic utilities for multi-mode dependent property dispatch. diff --git a/steer_core/Utils/CurveComposition.py b/steer_core/Utils/CurveComposition.py index a6edf06..b6f290e 100644 --- a/steer_core/Utils/CurveComposition.py +++ b/steer_core/Utils/CurveComposition.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Generic utilities for composing paired directional curves. diff --git a/steer_core/Utils/CurveProcessing.py b/steer_core/Utils/CurveProcessing.py index b230d08..854ff4c 100644 --- a/steer_core/Utils/CurveProcessing.py +++ b/steer_core/Utils/CurveProcessing.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Generic utilities for processing paired directional curves. diff --git a/steer_core/Utils/__init__.py b/steer_core/Utils/__init__.py index 8c85c70..a06412e 100644 --- a/steer_core/Utils/__init__.py +++ b/steer_core/Utils/__init__.py @@ -1,9 +1,9 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Utility functions for the steer-core package.""" -from typing import Any +from typing import Any, Optional import numpy as np @@ -39,21 +39,25 @@ def is_plotly_trace(obj: object) -> bool: def round_dict_recursive( - obj: Any, precision: int = 2, unit_conversion: float = 1.0 + obj: Any, precision: Optional[int] = 2, unit_conversion: float = 1.0 ) -> Any: """Recursively round values in a nested dictionary. Args: obj: Dictionary or numeric value to round. - precision: Number of decimal places, by default 2. + precision: Number of decimal places, by default 2. If ``None``, apply + ``unit_conversion`` only and do not round. unit_conversion: Multiplicative factor applied before rounding, by default 1.0. Returns: - Rounded dictionary or value. + Rounded dictionary or value (scaled if ``precision`` is ``None``). """ if isinstance(obj, dict): return { k: round_dict_recursive(v, precision, unit_conversion) for k, v in obj.items() } - return np.round(obj * unit_conversion, precision) + scaled = obj * unit_conversion + if precision is None: + return scaled + return np.round(scaled, precision) diff --git a/steer_core/__init__.py b/steer_core/__init__.py index d6d7056..1ee6905 100644 --- a/steer_core/__init__.py +++ b/steer_core/__init__.py @@ -1,7 +1,7 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later -__version__ = "0.2.12" +__version__ = "0.2.15" from .Mixins.Colors import ColorMixin from .Mixins.Coordinates import CoordinateMixin diff --git a/test/conftest.py b/test/conftest.py index 67dd1cc..5639101 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Shared fixtures for steer-core tests.""" diff --git a/test/test_color_mixin.py b/test/test_color_mixin.py index 9c2dd11..6dcf910 100644 --- a/test/test_color_mixin.py +++ b/test/test_color_mixin.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Mixins.Colors.ColorMixin.""" diff --git a/test/test_constants.py b/test/test_constants.py index be21f04..1499ff6 100644 --- a/test/test_constants.py +++ b/test/test_constants.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Constants modules.""" diff --git a/test/test_control_modes.py b/test/test_control_modes.py index 6776e94..63ee93a 100644 --- a/test/test_control_modes.py +++ b/test/test_control_modes.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Utils.ControlModes.""" diff --git a/test/test_coordinate_mixin.py b/test/test_coordinate_mixin.py index 0ac3a2b..bd3ec53 100644 --- a/test/test_coordinate_mixin.py +++ b/test/test_coordinate_mixin.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Mixins.Coordinates.CoordinateMixin.""" diff --git a/test/test_curve_composition.py b/test/test_curve_composition.py index b9f7d06..df3148e 100644 --- a/test/test_curve_composition.py +++ b/test/test_curve_composition.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Utils.CurveComposition — generic paired curve composition.""" diff --git a/test/test_curve_processing.py b/test/test_curve_processing.py index 99cb609..bfa1d07 100644 --- a/test/test_curve_processing.py +++ b/test/test_curve_processing.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Utils.CurveProcessing — generic paired curve utilities.""" diff --git a/test/test_data_manager.py b/test/test_data_manager.py index f8fb1b1..dfd62dc 100644 --- a/test/test_data_manager.py +++ b/test/test_data_manager.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Data.DataManager (mocked HTTP).""" diff --git a/test/test_data_mixin.py b/test/test_data_mixin.py index 3fa0966..8efc9d2 100644 --- a/test/test_data_mixin.py +++ b/test/test_data_mixin.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Mixins.Data.DataMixin.""" diff --git a/test/test_datetime_mixin.py b/test/test_datetime_mixin.py index e8725fb..1c58602 100644 --- a/test/test_datetime_mixin.py +++ b/test/test_datetime_mixin.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Mixins.DateTime.DateTimeMixin.""" diff --git a/test/test_datum_mixin.py b/test/test_datum_mixin.py index c9d1a0d..4116789 100644 --- a/test/test_datum_mixin.py +++ b/test/test_datum_mixin.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Mixins.Datum.DatumMixin.""" diff --git a/test/test_decorators.py b/test/test_decorators.py index 751ddaf..46205e4 100644 --- a/test/test_decorators.py +++ b/test/test_decorators.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Decorators.""" diff --git a/test/test_dunder_mixin.py b/test/test_dunder_mixin.py index 5234dc9..f7ac1e4 100644 --- a/test/test_dunder_mixin.py +++ b/test/test_dunder_mixin.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Mixins.Dunder.DunderMixin.""" diff --git a/test/test_plotter_mixin.py b/test/test_plotter_mixin.py index e1660a6..0458092 100644 --- a/test/test_plotter_mixin.py +++ b/test/test_plotter_mixin.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Mixins.Plotter.PlotterMixin.""" diff --git a/test/test_propagation_mixin.py b/test/test_propagation_mixin.py index 6dfcf58..22180c9 100644 --- a/test/test_propagation_mixin.py +++ b/test/test_propagation_mixin.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Mixins.Propagation.""" diff --git a/test/test_serializer_mixin.py b/test/test_serializer_mixin.py index 8e05b86..c506fc2 100644 --- a/test/test_serializer_mixin.py +++ b/test/test_serializer_mixin.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Mixins.Serializer.SerializerMixin.""" diff --git a/test/test_typechecker_mixin.py b/test/test_typechecker_mixin.py index dc733f7..14fe97e 100644 --- a/test/test_typechecker_mixin.py +++ b/test/test_typechecker_mixin.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Mixins.TypeChecker.ValidationMixin (beyond plotly trace tests).""" diff --git a/test/test_utils.py b/test/test_utils.py index 10315c1..07ad1a2 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for steer_core.Utils.""" @@ -70,3 +70,12 @@ def test_integer_input(self): def test_empty_dict(self): assert round_dict_recursive({}) == {} + + def test_precision_none_scales_without_rounding(self): + assert round_dict_recursive(3.14159265, precision=None) == pytest.approx( + 3.14159265 + ) + result = round_dict_recursive( + {"a": 0.001}, precision=None, unit_conversion=1000.0 + ) + assert result["a"] == pytest.approx(1.0) diff --git a/test/test_validation_mixin.py b/test/test_validation_mixin.py index 3dc6b8b..17d436e 100644 --- a/test/test_validation_mixin.py +++ b/test/test_validation_mixin.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2026 Nicholas Siemons +# SPDX-FileCopyrightText: 2024-2026 Stanford University # SPDX-License-Identifier: AGPL-3.0-or-later import unittest