From b3d33a0df1ae6b3f9b15880e784ec62212304401 Mon Sep 17 00:00:00 2001 From: Seth R Johnson Date: Sun, 12 Oct 2025 15:13:24 -0400 Subject: [PATCH] Use uppercase for enums --- celerpy/conf/settings.py | 17 +++--------- celerpy/model.py | 57 +++++++++++++++++++++++++++++----------- celerpy/visualize.py | 6 ++--- test/test_model.py | 8 ++++++ test/test_visualize.py | 8 +++--- 5 files changed, 60 insertions(+), 36 deletions(-) diff --git a/celerpy/conf/settings.py b/celerpy/conf/settings.py index b3ac935..6f18abd 100644 --- a/celerpy/conf/settings.py +++ b/celerpy/conf/settings.py @@ -1,25 +1,16 @@ # Copyright 2024 UT-Battelle, LLC, and other Celeritas developers. # See the top-level LICENSE file for details. # SPDX-License-Identifier: Apache-2.0 -from enum import StrEnum from typing import Optional from pydantic import DirectoryPath from pydantic_settings import BaseSettings, SettingsConfigDict - -class LogLevel(StrEnum): - """Minimum verbosity level for logging.""" - - debug = "debug" - info = "info" - warning = "warning" - error = "error" - critical = "critical" +from celerpy.model import LogLevel class Settings(BaseSettings): - """Global settings for Celeritas front end. + """Global environment settings for Celeritas front end. Settings can be changed by setting environment variables such as ``CELER_PREFIX_PATH`` (case insensitive). @@ -45,10 +36,10 @@ class Settings(BaseSettings): g4org_verbose: bool = False "Filename base to export converted Geant4 geometry" - log: LogLevel = LogLevel.info + log: LogLevel = LogLevel.INFO "World log level" - log_local: LogLevel = LogLevel.warning + log_local: LogLevel = LogLevel.WARNING "Self log level" prefix_path: Optional[DirectoryPath] = None diff --git a/celerpy/model.py b/celerpy/model.py index 1363638..d60594b 100644 --- a/celerpy/model.py +++ b/celerpy/model.py @@ -3,7 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 """Manage models used for JSON I/O with Celeritas.""" -from enum import Enum +from enum import StrEnum, auto from typing import Annotated, Literal, Optional from pydantic import ( @@ -30,28 +30,53 @@ class _Model(BaseModel): model_config = ConfigDict(use_attribute_docstrings=True) -# celer-geo/Types.hh -class GeometryEngine(Enum): - """Geometry model implementation for execution and rendering.""" +# corecel/Types.hh +class MemSpace(StrEnum): + """Memory/execution space.""" - geant4 = "geant4" - vecgeom = "vecgeom" - orange = "orange" + HOST = auto() # CPU + DEVICE = auto() # GPU + + # Backward compatibility + host = HOST + device = DEVICE # corecel/Types.hh -class MemSpace(Enum): - """Memory/execution space.""" +class UnitSystem(StrEnum): + CGS = auto() + SI = auto() + CLHEP = auto() - host = "host" # CPU - device = "device" # GPU + # Backward compatibility + cgs = CGS + si = SI + clhep = CLHEP -# corecel/Types.hh -class UnitSystem(Enum): - cgs = "cgs" - si = "si" - clhep = "clhep" +# corecel/io/LoggerTypes.hh +class LogLevel(StrEnum): + """Minimum verbosity level for logging.""" + + DEBUG = auto() + INFO = auto() + WARNING = auto() + ERROR = auto() + CRITICAL = auto() + + +# celer-geo/Types.hh +class GeometryEngine(StrEnum): + """Geometry model implementation for execution and rendering.""" + + GEANT4 = auto() + VECGEOM = auto() + ORANGE = auto() + + # Backward compatibility + geant4 = GEANT4 + vecgeom = VECGEOM + orange = ORANGE # celer-geo/GeoInput.hh diff --git a/celerpy/visualize.py b/celerpy/visualize.py index 1c0a472..b4f29c1 100644 --- a/celerpy/visualize.py +++ b/celerpy/visualize.py @@ -68,9 +68,9 @@ def _register_cmaps(): UNIT_LENGTH = { - model.UnitSystem.cgs: "cm", - model.UnitSystem.clhep: "mm", - model.UnitSystem.si: "m", + model.UnitSystem.CGS: "cm", + model.UnitSystem.CLHEP: "mm", + model.UnitSystem.SI: "m", } diff --git a/test/test_model.py b/test/test_model.py index a053cb0..865e04d 100644 --- a/test/test_model.py +++ b/test/test_model.py @@ -7,6 +7,14 @@ from celerpy import model +def test_enum_lowercase(): + # NOTE: no deprecation warning issued :'( + result = model.GeometryEngine.geant4 + assert result == model.GeometryEngine.GEANT4 + + assert model.GeometryEngine("geant4") == model.GeometryEngine.GEANT4 + + def test_model_setup(tmp_path): gdml_file = tmp_path / "foo.gdml" gdml_file.write_text("") diff --git a/test/test_visualize.py b/test/test_visualize.py index de670e3..651511f 100644 --- a/test/test_visualize.py +++ b/test/test_visualize.py @@ -15,9 +15,9 @@ settings.prefix_path = local_path / "mock-prefix" settings.prefix_path = Path(__file__).parent / "mock-prefix" -settings.log = LogLevel.debug -settings.log_local = LogLevel.warning settings.g4org_verbose = True +settings.log = LogLevel.DEBUG +settings.log_local = LogLevel.WARNING def test_CelerGeo(): @@ -27,12 +27,12 @@ def test_CelerGeo(): cg.trace() (result, img) = cg.trace( model.ImageInput(upper_right=[1, 1, 0], vertical_pixels=4), - geometry=model.GeometryEngine.orange, + geometry=model.GeometryEngine.ORANGE, ) assert isinstance(result, model.TraceOutput) assert img.shape == (4, 4) assert img.dtype == np.int32 - (result, img) = cg.trace(geometry=model.GeometryEngine.orange) + (result, img) = cg.trace(geometry=model.GeometryEngine.ORANGE) assert isinstance(result, model.TraceOutput) assert img.shape == (4, 4) (result, img) = cg.trace(geometry=model.GeometryEngine.geant4)