From 750df8eb61b2f0d1209faf9928ab6de86e77cfbe Mon Sep 17 00:00:00 2001 From: VsevolodX Date: Tue, 17 Feb 2026 16:52:47 -0800 Subject: [PATCH 1/9] update: add properties enum (claude) --- src/py/mat3ra/prode/__init__.py | 54 +++++++++++++++++++++++++++++++-- tests/py/test_sample.py | 14 +++------ 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/src/py/mat3ra/prode/__init__.py b/src/py/mat3ra/prode/__init__.py index 5e1f4cb..255d52e 100644 --- a/src/py/mat3ra/prode/__init__.py +++ b/src/py/mat3ra/prode/__init__.py @@ -1,6 +1,54 @@ -import numpy as np +from enum import Enum -def get_length(vec: np.ndarray) -> float: - return float(np.linalg.norm(vec)) +class ExternalSource(str, Enum): + materials_project = "MaterialsProject" + icsd = "ICSD" + + +class PropertyType(str, Enum): + scalar = "scalar" + non_scalar = "non-scalar" + tensor = "tensor" + object = "object" + + +class PropertyName(str, Enum): + pressure = "pressure" + total_force = "total_force" + total_energy = "total_energy" + surface_energy = "surface_energy" + convergence_electronic = "convergence_electronic" + convergence_ionic = "convergence_ionic" + fermi_energy = "fermi_energy" + zero_point_energy = "zero_point_energy" + total_energy_contributions = "total_energy_contributions" + atomic_forces = "atomic_forces" + atomic_constraints = "atomic_constraints" + stress_tensor = "stress_tensor" + density_of_states = "density_of_states" + band_structure = "band_structure" + band_gaps = "band_gaps" + phonon_dispersions = "phonon_dispersions" + phonon_dos = "phonon_dos" + final_structure = "final_structure" + is_relaxed = "is_relaxed" + workflow_pyml_predict = "workflow:pyml_predict" + file_content = "file_content" + magnetic_moments = "magnetic_moments" + reaction_energy_barrier = "reaction_energy_barrier" + reaction_energy_profile = "reaction_energy_profile" + potential_profile = "potential_profile" + wavefunction_amplitude = "wavefunction_amplitude" + charge_density_profile = "charge_density_profile" + jupyter_notebook_endpoint = "jupyter_notebook_endpoint" + average_potential_profile = "average_potential_profile" + valence_band_offset = "valence_band_offset" + ionization_potential = "ionization_potential" + pseudopotential = "pseudopotential" + boundary_conditions = "boundary_conditions" + dielectric_tensor = "dielectric_tensor" + hubbard_u = "hubbard_u" + hubbard_v_nn = "hubbard_v_nn" + hubbard_v = "hubbard_v" diff --git a/tests/py/test_sample.py b/tests/py/test_sample.py index 315f171..f3135ec 100644 --- a/tests/py/test_sample.py +++ b/tests/py/test_sample.py @@ -1,12 +1,8 @@ -import numpy as np +import mat3ra.prode as prode -from mat3ra.prode import get_length - -def test_get_length(): - """Test that get_length returns correct type and value.""" - vec = np.array([1, 2]) - result = get_length(vec) - assert isinstance(result, float) - assert np.isclose(result, np.sqrt(5)) +def test_property_name_enum(): + result = prode.PropertyName.band_gaps + assert result == "band_gaps" + assert isinstance(result, str) From 228a2e70eacbdcb0ea489f30d09a424f304aa203 Mon Sep 17 00:00:00 2001 From: VsevolodX Date: Wed, 18 Feb 2026 10:53:10 -0800 Subject: [PATCH 2/9] update: sort properties --- src/py/mat3ra/prode/__init__.py | 88 +++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 31 deletions(-) diff --git a/src/py/mat3ra/prode/__init__.py b/src/py/mat3ra/prode/__init__.py index 255d52e..2f447fe 100644 --- a/src/py/mat3ra/prode/__init__.py +++ b/src/py/mat3ra/prode/__init__.py @@ -1,54 +1,80 @@ from enum import Enum +from types import SimpleNamespace class ExternalSource(str, Enum): - materials_project = "MaterialsProject" icsd = "ICSD" + materials_project = "MaterialsProject" + materials_project_legacy = "MaterialsProjectLegacy" class PropertyType(str, Enum): - scalar = "scalar" non_scalar = "non-scalar" - tensor = "tensor" object = "object" + scalar = "scalar" + tensor = "tensor" -class PropertyName(str, Enum): +class ScalarPropertyName(str, Enum): + fermi_energy = "fermi_energy" + ionization_potential = "ionization_potential" pressure = "pressure" - total_force = "total_force" - total_energy = "total_energy" + reaction_energy_barrier = "reaction_energy_barrier" surface_energy = "surface_energy" + total_energy = "total_energy" + total_force = "total_force" + valence_band_offset = "valence_band_offset" + zero_point_energy = "zero_point_energy" + + +class NonScalarPropertyName(str, Enum): + average_potential_profile = "average_potential_profile" + band_gaps = "band_gaps" + band_structure = "band_structure" + charge_density_profile = "charge_density_profile" convergence_electronic = "convergence_electronic" convergence_ionic = "convergence_ionic" - fermi_energy = "fermi_energy" - zero_point_energy = "zero_point_energy" - total_energy_contributions = "total_energy_contributions" - atomic_forces = "atomic_forces" - atomic_constraints = "atomic_constraints" - stress_tensor = "stress_tensor" density_of_states = "density_of_states" - band_structure = "band_structure" - band_gaps = "band_gaps" - phonon_dispersions = "phonon_dispersions" - phonon_dos = "phonon_dos" + dielectric_tensor = "dielectric_tensor" + file_content = "file_content" final_structure = "final_structure" + hubbard_u = "hubbard_u" + hubbard_v = "hubbard_v" + hubbard_v_nn = "hubbard_v_nn" is_relaxed = "is_relaxed" - workflow_pyml_predict = "workflow:pyml_predict" - file_content = "file_content" - magnetic_moments = "magnetic_moments" - reaction_energy_barrier = "reaction_energy_barrier" - reaction_energy_profile = "reaction_energy_profile" + jupyter_notebook_endpoint = "jupyter_notebook_endpoint" + phonon_dispersions = "phonon_dispersions" + phonon_dos = "phonon_dos" potential_profile = "potential_profile" + reaction_energy_profile = "reaction_energy_profile" wavefunction_amplitude = "wavefunction_amplitude" - charge_density_profile = "charge_density_profile" - jupyter_notebook_endpoint = "jupyter_notebook_endpoint" - average_potential_profile = "average_potential_profile" - valence_band_offset = "valence_band_offset" - ionization_potential = "ionization_potential" - pseudopotential = "pseudopotential" + workflow_pyml_predict = "workflow:pyml_predict" + + +class TensorPropertyName(str, Enum): + atomic_forces = "atomic_forces" + magnetic_moments = "magnetic_moments" + stress_tensor = "stress_tensor" + + +class ObjectPropertyName(str, Enum): + total_energy_contributions = "total_energy_contributions" + + +class ProtoPropertyName(str, Enum): + atomic_constraints = "atomic_constraints" boundary_conditions = "boundary_conditions" - dielectric_tensor = "dielectric_tensor" - hubbard_u = "hubbard_u" - hubbard_v_nn = "hubbard_v_nn" - hubbard_v = "hubbard_v" + +class MetaPropertyName(str, Enum): + pseudopotential = "pseudopotential" + + +PropertyEnum = SimpleNamespace( + scalar=ScalarPropertyName, + non_scalar=NonScalarPropertyName, + tensor=TensorPropertyName, + object=ObjectPropertyName, + proto=ProtoPropertyName, + meta=MetaPropertyName, +) From 5b2e02ddbaf5dd473f0acaf1e1d76ddadc6bb184 Mon Sep 17 00:00:00 2001 From: VsevolodX Date: Wed, 18 Feb 2026 11:05:06 -0800 Subject: [PATCH 3/9] update: sort properties 2 --- src/py/mat3ra/prode/__init__.py | 2 +- tests/py/test_sample.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/py/mat3ra/prode/__init__.py b/src/py/mat3ra/prode/__init__.py index 2f447fe..77d2644 100644 --- a/src/py/mat3ra/prode/__init__.py +++ b/src/py/mat3ra/prode/__init__.py @@ -70,7 +70,7 @@ class MetaPropertyName(str, Enum): pseudopotential = "pseudopotential" -PropertyEnum = SimpleNamespace( +PropertyName = SimpleNamespace( scalar=ScalarPropertyName, non_scalar=NonScalarPropertyName, tensor=TensorPropertyName, diff --git a/tests/py/test_sample.py b/tests/py/test_sample.py index f3135ec..bff6286 100644 --- a/tests/py/test_sample.py +++ b/tests/py/test_sample.py @@ -2,7 +2,7 @@ def test_property_name_enum(): - result = prode.PropertyName.band_gaps + result = prode.PropertyName.non_scalar.band_gaps assert result == "band_gaps" assert isinstance(result, str) From b8038c7bfd4c61e898e4413ec2fb800c9db31550 Mon Sep 17 00:00:00 2001 From: VsevolodX Date: Mon, 23 Feb 2026 10:45:29 -0800 Subject: [PATCH 4/9] update: use esse --- pyproject.toml | 2 + src/py/mat3ra/prode/__init__.py | 87 +++++++++------------------------ 2 files changed, 26 insertions(+), 63 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7f47cd3..8828c5d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,6 +21,8 @@ classifiers = [ ] dependencies = [ "numpy", + "mat3ra-esse @ git+https://github.com/Exabyte-io/esse.git@b0ea876b2e7be4bfaa12fa8e48f50f58d27746e5" + ] [project.optional-dependencies] diff --git a/src/py/mat3ra/prode/__init__.py b/src/py/mat3ra/prode/__init__.py index 77d2644..c75018e 100644 --- a/src/py/mat3ra/prode/__init__.py +++ b/src/py/mat3ra/prode/__init__.py @@ -1,73 +1,33 @@ from enum import Enum from types import SimpleNamespace - -class ExternalSource(str, Enum): - icsd = "ICSD" - materials_project = "MaterialsProject" - materials_project_legacy = "MaterialsProjectLegacy" - - -class PropertyType(str, Enum): - non_scalar = "non-scalar" - object = "object" - scalar = "scalar" - tensor = "tensor" - - -class ScalarPropertyName(str, Enum): - fermi_energy = "fermi_energy" - ionization_potential = "ionization_potential" - pressure = "pressure" - reaction_energy_barrier = "reaction_energy_barrier" - surface_energy = "surface_energy" - total_energy = "total_energy" - total_force = "total_force" - valence_band_offset = "valence_band_offset" - zero_point_energy = "zero_point_energy" - - -class NonScalarPropertyName(str, Enum): - average_potential_profile = "average_potential_profile" - band_gaps = "band_gaps" - band_structure = "band_structure" - charge_density_profile = "charge_density_profile" - convergence_electronic = "convergence_electronic" - convergence_ionic = "convergence_ionic" - density_of_states = "density_of_states" - dielectric_tensor = "dielectric_tensor" - file_content = "file_content" - final_structure = "final_structure" - hubbard_u = "hubbard_u" - hubbard_v = "hubbard_v" - hubbard_v_nn = "hubbard_v_nn" - is_relaxed = "is_relaxed" - jupyter_notebook_endpoint = "jupyter_notebook_endpoint" - phonon_dispersions = "phonon_dispersions" - phonon_dos = "phonon_dos" - potential_profile = "potential_profile" - reaction_energy_profile = "reaction_energy_profile" - wavefunction_amplitude = "wavefunction_amplitude" - workflow_pyml_predict = "workflow:pyml_predict" - - -class TensorPropertyName(str, Enum): - atomic_forces = "atomic_forces" - magnetic_moments = "magnetic_moments" - stress_tensor = "stress_tensor" - - -class ObjectPropertyName(str, Enum): - total_energy_contributions = "total_energy_contributions" +from mat3ra.esse import ( + ExternalSource, + PropertyType, + ScalarPropertyName, + NonScalarPropertyName, + TensorPropertyName, + ObjectPropertyName, + ProtoPropertyName, + MetaPropertyName, +) -class ProtoPropertyName(str, Enum): - atomic_constraints = "atomic_constraints" - boundary_conditions = "boundary_conditions" +class AllPropertyName(str, Enum): + """All property names combined from all categories""" + pass -class MetaPropertyName(str, Enum): - pseudopotential = "pseudopotential" +for enum_class in [ + ScalarPropertyName, + NonScalarPropertyName, + TensorPropertyName, + ObjectPropertyName, + ProtoPropertyName, + MetaPropertyName, +]: + for item in enum_class: + setattr(AllPropertyName, item.name, item.value) PropertyName = SimpleNamespace( @@ -77,4 +37,5 @@ class MetaPropertyName(str, Enum): object=ObjectPropertyName, proto=ProtoPropertyName, meta=MetaPropertyName, + all=AllPropertyName, ) From df6bc12a2d697efc9ffdaf8ad6f3f7036f3f1852 Mon Sep 17 00:00:00 2001 From: VsevolodX Date: Mon, 23 Feb 2026 10:50:26 -0800 Subject: [PATCH 5/9] update: add pkgutil --- src/py/mat3ra/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/py/mat3ra/__init__.py b/src/py/mat3ra/__init__.py index e69de29..8db66d3 100644 --- a/src/py/mat3ra/__init__.py +++ b/src/py/mat3ra/__init__.py @@ -0,0 +1 @@ +__path__ = __import__("pkgutil").extend_path(__path__, __name__) From 95d27de2904fd225f2327b6c3cd20aa39cb086af Mon Sep 17 00:00:00 2001 From: VsevolodX Date: Mon, 23 Feb 2026 11:23:24 -0800 Subject: [PATCH 6/9] update: run tests --- pyproject.toml | 2 +- src/py/mat3ra/prode/__init__.py | 2 +- tests/py/test_sample.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8828c5d..51b8cd3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ classifiers = [ "Operating System :: OS Independent", ] dependencies = [ - "numpy", + "pydantic>=2.7.1", "mat3ra-esse @ git+https://github.com/Exabyte-io/esse.git@b0ea876b2e7be4bfaa12fa8e48f50f58d27746e5" ] diff --git a/src/py/mat3ra/prode/__init__.py b/src/py/mat3ra/prode/__init__.py index c75018e..4faef3c 100644 --- a/src/py/mat3ra/prode/__init__.py +++ b/src/py/mat3ra/prode/__init__.py @@ -1,7 +1,7 @@ from enum import Enum from types import SimpleNamespace -from mat3ra.esse import ( +from mat3ra.esse.models.properties_directory.enum_options import ( ExternalSource, PropertyType, ScalarPropertyName, diff --git a/tests/py/test_sample.py b/tests/py/test_sample.py index bff6286..78e5215 100644 --- a/tests/py/test_sample.py +++ b/tests/py/test_sample.py @@ -3,6 +3,6 @@ def test_property_name_enum(): result = prode.PropertyName.non_scalar.band_gaps - assert result == "band_gaps" - assert isinstance(result, str) + assert result.value == "band_gaps" + assert isinstance(result.value, str) From c25bb665e71a70885b7c74fb77a6425c1bc74b44 Mon Sep 17 00:00:00 2001 From: VsevolodX Date: Mon, 23 Feb 2026 11:29:39 -0800 Subject: [PATCH 7/9] update: esse --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 51b8cd3..1dc85c8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,7 @@ classifiers = [ ] dependencies = [ "pydantic>=2.7.1", - "mat3ra-esse @ git+https://github.com/Exabyte-io/esse.git@b0ea876b2e7be4bfaa12fa8e48f50f58d27746e5" + "mat3ra-esse @ git+https://github.com/Exabyte-io/esse.git@475db10730b8fd8c756eea3a81612f9623a6a94c" ] From cb79e58bd75ed05920e7614ae02029a172ce9fac Mon Sep 17 00:00:00 2001 From: VsevolodX Date: Tue, 24 Feb 2026 17:28:02 -0800 Subject: [PATCH 8/9] update: use ESSE --- pyproject.toml | 2 +- src/py/mat3ra/prode/__init__.py | 42 ++++++++++++++++----------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 1dc85c8..8239693 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,7 @@ classifiers = [ ] dependencies = [ "pydantic>=2.7.1", - "mat3ra-esse @ git+https://github.com/Exabyte-io/esse.git@475db10730b8fd8c756eea3a81612f9623a6a94c" + "mat3ra-esse" ] diff --git a/src/py/mat3ra/prode/__init__.py b/src/py/mat3ra/prode/__init__.py index 4faef3c..c3405a1 100644 --- a/src/py/mat3ra/prode/__init__.py +++ b/src/py/mat3ra/prode/__init__.py @@ -4,38 +4,38 @@ from mat3ra.esse.models.properties_directory.enum_options import ( ExternalSource, PropertyType, - ScalarPropertyName, - NonScalarPropertyName, - TensorPropertyName, - ObjectPropertyName, - ProtoPropertyName, - MetaPropertyName, + ScalarPropertyEnum, + NonScalarPropertyEnum, + TensorPropertyEnum, + ObjectPropertyEnum, + ProtoPropertyEnum, + MetaPropertyEnum, ) -class AllPropertyName(str, Enum): +class AllPropertyEnum(str, Enum): """All property names combined from all categories""" pass for enum_class in [ - ScalarPropertyName, - NonScalarPropertyName, - TensorPropertyName, - ObjectPropertyName, - ProtoPropertyName, - MetaPropertyName, + ScalarPropertyEnum, + NonScalarPropertyEnum, + TensorPropertyEnum, + ObjectPropertyEnum, + ProtoPropertyEnum, + MetaPropertyEnum, ]: for item in enum_class: - setattr(AllPropertyName, item.name, item.value) + setattr(AllPropertyEnum, item.name, item.value) PropertyName = SimpleNamespace( - scalar=ScalarPropertyName, - non_scalar=NonScalarPropertyName, - tensor=TensorPropertyName, - object=ObjectPropertyName, - proto=ProtoPropertyName, - meta=MetaPropertyName, - all=AllPropertyName, + scalar=ScalarPropertyEnum, + non_scalar=NonScalarPropertyEnum, + tensor=TensorPropertyEnum, + object=ObjectPropertyEnum, + proto=ProtoPropertyEnum, + meta=MetaPropertyEnum, + all=AllPropertyEnum, ) From b5fcb95bfdd7205921c6d044671ce1cd52319c65 Mon Sep 17 00:00:00 2001 From: VsevolodX Date: Tue, 24 Feb 2026 17:38:27 -0800 Subject: [PATCH 9/9] update: remove unused --- src/py/mat3ra/prode/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/py/mat3ra/prode/__init__.py b/src/py/mat3ra/prode/__init__.py index c3405a1..dd7d36b 100644 --- a/src/py/mat3ra/prode/__init__.py +++ b/src/py/mat3ra/prode/__init__.py @@ -2,8 +2,6 @@ from types import SimpleNamespace from mat3ra.esse.models.properties_directory.enum_options import ( - ExternalSource, - PropertyType, ScalarPropertyEnum, NonScalarPropertyEnum, TensorPropertyEnum,