mat3ra-esse 2025.4.17.post0__py3-none-any.whl → 2025.5.13.post0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mat3ra-esse might be problematic. Click here for more details.

Files changed (101) hide show
  1. mat3ra/esse/data/examples.py +1 -1
  2. mat3ra/esse/data/schemas.py +1 -1
  3. mat3ra/esse/models/apse/db/nist_jarvis/2024_3.13/__init__.py +3 -0
  4. mat3ra/esse/models/apse/db/nist_jarvis/2024_3.13/atoms.py +41 -0
  5. mat3ra/esse/models/apse/db/nist_jarvis/2024_3.13/db_entry.py +55 -0
  6. mat3ra/esse/models/apse/file/applications/espresso/7.2/__init__.py +3 -0
  7. mat3ra/esse/models/apse/file/applications/espresso/7.2/pw.x/__init__.py +3 -0
  8. mat3ra/esse/models/apse/file/applications/espresso/7.2/pw.x/atomic_positions.py +51 -0
  9. mat3ra/esse/models/apse/file/applications/espresso/7.2/pw.x/atomic_species.py +34 -0
  10. mat3ra/esse/models/apse/file/applications/espresso/7.2/pw.x/cell.py +111 -0
  11. mat3ra/esse/models/apse/file/applications/espresso/7.2/pw.x/cell_parameters.py +36 -0
  12. mat3ra/esse/models/apse/file/applications/espresso/7.2/pw.x/control.py +169 -0
  13. mat3ra/esse/models/apse/file/applications/espresso/7.2/pw.x/electrons.py +139 -0
  14. mat3ra/esse/models/apse/file/applications/espresso/7.2/pw.x/hubbard.py +194 -0
  15. mat3ra/esse/models/apse/file/applications/espresso/7.2/pw.x/ions.py +422 -0
  16. mat3ra/esse/models/apse/file/applications/espresso/7.2/pw.x/k_points.py +73 -0
  17. mat3ra/esse/models/apse/file/applications/espresso/7.2/pw.x/system.py +841 -0
  18. mat3ra/esse/models/apse/file/applications/espresso/7.2/pw_x.py +1990 -0
  19. mat3ra/esse/models/core/abstract/coordinate_2d.py +13 -0
  20. mat3ra/esse/models/core/abstract/coordinate_3d.py +13 -0
  21. mat3ra/esse/models/core/abstract/kpoint.py +16 -0
  22. mat3ra/esse/models/core/abstract/matrix_3x3.py +17 -0
  23. mat3ra/esse/models/core/abstract/vector_3d.py +13 -0
  24. mat3ra/esse/models/core/abstract/vector_boolean_3d.py +13 -0
  25. mat3ra/esse/models/core/primitive/array_of_ids.py +5 -5
  26. mat3ra/esse/models/core/primitive/object_with_id.py +14 -0
  27. mat3ra/esse/models/core/primitive/object_with_id_and_value.py +20 -0
  28. mat3ra/esse/models/core/reusable/atomic_scalars.py +4 -4
  29. mat3ra/esse/models/core/reusable/atomic_string.py +18 -0
  30. mat3ra/esse/models/core/reusable/atomic_vector.py +20 -0
  31. mat3ra/esse/models/core/reusable/atomic_vectors.py +9 -9
  32. mat3ra/esse/models/core/reusable/band_gap.py +8 -2
  33. mat3ra/esse/models/core/reusable/energy.py +2 -2
  34. mat3ra/esse/models/core/reusable/energy_accuracy_levels/__init__.py +3 -0
  35. mat3ra/esse/models/element.py +6 -6
  36. mat3ra/esse/models/material/__init__.py +68 -46
  37. mat3ra/esse/models/material/reusable/__init__.py +3 -0
  38. mat3ra/esse/models/material/reusable/repetitions.py +25 -0
  39. mat3ra/esse/models/material/reusable/slab/__init__.py +3 -0
  40. mat3ra/esse/models/material/reusable/slab/enums.py +13 -0
  41. mat3ra/esse/models/material/reusable/slab/miller_indices.py +16 -0
  42. mat3ra/esse/models/material/reusable/slab/number_of_layers.py +16 -0
  43. mat3ra/esse/models/material/reusable/slab/termination.py +18 -0
  44. mat3ra/esse/models/material/reusable/slab/thickness.py +16 -0
  45. mat3ra/esse/models/material/reusable/slab/vacuum.py +16 -0
  46. mat3ra/esse/models/material/reusable/supercell_matrix_2d.py +25 -0
  47. mat3ra/esse/models/material/reusable/supercell_matrix_3d.py +27 -0
  48. mat3ra/esse/models/materials_category/single_material/two_dimensional/slab/__init__.py +3 -0
  49. mat3ra/esse/models/materials_category/single_material/two_dimensional/slab/configuration.py +445 -0
  50. mat3ra/esse/models/methods_directory/physical/psp/file/__init__.py +129 -0
  51. mat3ra/esse/models/methods_directory/physical/psp/file_data_item/__init__.py +111 -0
  52. mat3ra/esse/models/properties_directory/derived_properties.py +13 -13
  53. mat3ra/esse/models/properties_directory/non_scalar/average_potential_profile.py +2 -2
  54. mat3ra/esse/models/properties_directory/non_scalar/band_gaps.py +12 -3
  55. mat3ra/esse/models/properties_directory/non_scalar/band_structure.py +2 -2
  56. mat3ra/esse/models/properties_directory/non_scalar/density_of_states.py +2 -2
  57. mat3ra/esse/models/properties_directory/non_scalar/phonon_dispersions.py +2 -2
  58. mat3ra/esse/models/properties_directory/non_scalar/phonon_dos.py +2 -2
  59. mat3ra/esse/models/properties_directory/non_scalar/stress_tensor.py +1 -1
  60. mat3ra/esse/models/properties_directory/non_scalar/total_energy_contributions.py +50 -50
  61. mat3ra/esse/models/properties_directory/non_scalar/vibrational_spectrum.py +2 -2
  62. mat3ra/esse/models/properties_directory/scalar/electron_affinity.py +2 -2
  63. mat3ra/esse/models/properties_directory/scalar/fermi_energy.py +2 -2
  64. mat3ra/esse/models/properties_directory/scalar/formation_energy.py +2 -2
  65. mat3ra/esse/models/properties_directory/scalar/ionization_potential.py +2 -2
  66. mat3ra/esse/models/properties_directory/scalar/reaction_energy_barrier.py +2 -2
  67. mat3ra/esse/models/properties_directory/scalar/surface_energy.py +2 -2
  68. mat3ra/esse/models/properties_directory/scalar/total_energy.py +2 -2
  69. mat3ra/esse/models/properties_directory/scalar/valence_band_offset.py +2 -2
  70. mat3ra/esse/models/properties_directory/scalar/zero_point_energy.py +2 -2
  71. mat3ra/esse/models/properties_directory/structural/atomic_forces.py +8 -8
  72. mat3ra/esse/models/properties_directory/structural/basis/__init__.py +38 -16
  73. mat3ra/esse/models/properties_directory/structural/basis/atomic_constraint.py +20 -0
  74. mat3ra/esse/models/properties_directory/structural/basis/atomic_constraints.py +11 -14
  75. mat3ra/esse/models/properties_directory/structural/basis/atomic_constraints_property.py +33 -0
  76. mat3ra/esse/models/properties_directory/structural/basis/atomic_coordinate.py +10 -4
  77. mat3ra/esse/models/properties_directory/structural/basis/atomic_coordinates.py +16 -27
  78. mat3ra/esse/models/properties_directory/structural/basis/atomic_element.py +6 -7
  79. mat3ra/esse/models/properties_directory/structural/basis/atomic_elements.py +27 -0
  80. mat3ra/esse/models/properties_directory/structural/basis/atomic_label.py +11 -5
  81. mat3ra/esse/models/properties_directory/structural/basis/atomic_labels.py +27 -0
  82. mat3ra/esse/models/properties_directory/structural/basis/bonds.py +3 -3
  83. mat3ra/esse/models/properties_directory/structural/basis/units_enum.py +12 -0
  84. mat3ra/esse/models/properties_directory/structural/lattice/__init__.py +16 -16
  85. mat3ra/esse/models/properties_directory/structural/lattice/lattice_vectors.py +10 -11
  86. mat3ra/esse/models/properties_directory/structural/lattice/units/__init__.py +3 -0
  87. mat3ra/esse/models/properties_directory/structural/lattice/units/angle_enum.py +12 -0
  88. mat3ra/esse/models/properties_directory/structural/lattice/units/length_enum.py +12 -0
  89. mat3ra/esse/models/properties_directory/structural/lattice/vectors/__init__.py +26 -0
  90. mat3ra/esse/models/properties_directory/structural/lattice/vectors/units_enum.py +12 -0
  91. mat3ra/esse/models/properties_directory/structural/magnetic_moments.py +8 -8
  92. mat3ra/esse/models/properties_directory/structural/molecular_pattern.py +9 -9
  93. mat3ra/esse/models/properties_directory/structural/patterns/functional_group.py +3 -3
  94. mat3ra/esse/models/properties_directory/structural/patterns/ring.py +3 -3
  95. mat3ra/esse/models/properties_directory/structural/patterns/special_bond.py +3 -3
  96. mat3ra/esse/models/properties_directory/workflow/convergence/ionic.py +2 -2
  97. {mat3ra_esse-2025.4.17.post0.dist-info → mat3ra_esse-2025.5.13.post0.dist-info}/METADATA +1 -1
  98. {mat3ra_esse-2025.4.17.post0.dist-info → mat3ra_esse-2025.5.13.post0.dist-info}/RECORD +101 -49
  99. {mat3ra_esse-2025.4.17.post0.dist-info → mat3ra_esse-2025.5.13.post0.dist-info}/WHEEL +1 -1
  100. {mat3ra_esse-2025.4.17.post0.dist-info → mat3ra_esse-2025.5.13.post0.dist-info}/licenses/LICENSE.md +0 -0
  101. {mat3ra_esse-2025.4.17.post0.dist-info → mat3ra_esse-2025.5.13.post0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: core/abstract/coordinate_2d.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List
8
+
9
+ from pydantic import Field, RootModel
10
+
11
+
12
+ class Coordinate2dSchema(RootModel[List[float]]):
13
+ root: List[float] = Field(..., max_length=2, min_length=2, title="coordinate 2d schema")
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: core/abstract/coordinate_3d.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List
8
+
9
+ from pydantic import Field, RootModel
10
+
11
+
12
+ class Coordinate3dSchema(RootModel[List[float]]):
13
+ root: List[float] = Field(..., max_length=3, min_length=3, title="coordinate 3d schema")
@@ -0,0 +1,16 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: core/abstract/kpoint.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List
8
+
9
+ from pydantic import Field, RootModel
10
+
11
+
12
+ class KpointSchema(RootModel[List[float]]):
13
+ root: List[float] = Field(..., max_length=3, min_length=3, title="kpoint schema")
14
+ """
15
+ A k-point is a point in reciprocal space of a crystal.
16
+ """
@@ -0,0 +1,17 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: core/abstract/matrix_3x3.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List
8
+
9
+ from pydantic import Field, RootModel
10
+
11
+
12
+ class ArrayOf3NumberElementsSchema(RootModel[List[float]]):
13
+ root: List[float] = Field(..., title="array of 3 number elements schema")
14
+
15
+
16
+ class Matrix3x3Schema(RootModel[List[ArrayOf3NumberElementsSchema]]):
17
+ root: List[ArrayOf3NumberElementsSchema] = Field(..., max_length=3, min_length=3, title="matrix 3x3 schema")
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: core/abstract/vector_3d.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List
8
+
9
+ from pydantic import Field, RootModel
10
+
11
+
12
+ class Vector3dSchema(RootModel[List[float]]):
13
+ root: List[float] = Field(..., max_length=3, min_length=3, title="vector 3d schema")
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: core/abstract/vector_boolean_3d.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List
8
+
9
+ from pydantic import Field, RootModel
10
+
11
+
12
+ class ESSE(RootModel[List[bool]]):
13
+ root: List[bool] = Field(..., title="vector boolean 3d schema")
@@ -4,20 +4,20 @@
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import List, Optional
7
+ from typing import List
8
8
 
9
9
  from pydantic import BaseModel, Field, RootModel
10
10
 
11
11
 
12
- class AtomicId(BaseModel):
13
- id: Optional[int] = None
12
+ class ObjectWithId(BaseModel):
13
+ id: int
14
14
  """
15
15
  integer id of this entry
16
16
  """
17
17
 
18
18
 
19
- class AtomicIds(RootModel[List[AtomicId]]):
20
- root: List[AtomicId] = Field(..., title="atomic ids")
19
+ class ArrayOfIds(RootModel[List[ObjectWithId]]):
20
+ root: List[ObjectWithId] = Field(..., title="array of ids")
21
21
  """
22
22
  array of objects containing integer id each
23
23
  """
@@ -0,0 +1,14 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: core/primitive/object_with_id.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from pydantic import BaseModel
8
+
9
+
10
+ class ObjectWithId(BaseModel):
11
+ id: int
12
+ """
13
+ integer id of this entry
14
+ """
@@ -0,0 +1,20 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: core/primitive/object_with_id_and_value.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Any
8
+
9
+ from pydantic import BaseModel
10
+
11
+
12
+ class ObjectWithIdAndValueSchema(BaseModel):
13
+ value: Any
14
+ """
15
+ value of this entry
16
+ """
17
+ id: int
18
+ """
19
+ integer id of this entry
20
+ """
@@ -13,16 +13,16 @@ class ScalarSchema(BaseModel):
13
13
  value: float
14
14
 
15
15
 
16
- class AtomicScalarsVectorsSchemaItem(BaseModel):
16
+ class ObjectWithId(BaseModel):
17
17
  value: Optional[ScalarSchema] = Field(None, title="scalar schema")
18
- id: Optional[int] = None
18
+ id: int
19
19
  """
20
20
  integer id of this entry
21
21
  """
22
22
 
23
23
 
24
- class AtomicScalarsVectorsSchema(RootModel[List[AtomicScalarsVectorsSchemaItem]]):
25
- root: List[AtomicScalarsVectorsSchemaItem] = Field(..., title="atomic scalars vectors schema")
24
+ class AtomicScalarsVectorsSchema(RootModel[List[ObjectWithId]]):
25
+ root: List[ObjectWithId] = Field(..., title="atomic scalars vectors schema")
26
26
  """
27
27
  array of objects containing integer id each
28
28
  """
@@ -0,0 +1,18 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: core/reusable/atomic_string.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from pydantic import BaseModel
8
+
9
+
10
+ class AtomicStringSchema(BaseModel):
11
+ value: str
12
+ """
13
+ value of this entry
14
+ """
15
+ id: int
16
+ """
17
+ integer id of this entry
18
+ """
@@ -0,0 +1,20 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: core/reusable/atomic_vector.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List
8
+
9
+ from pydantic import BaseModel, Field
10
+
11
+
12
+ class AtomicVectorSchema(BaseModel):
13
+ value: List[float] = Field(..., max_length=3, min_length=3, title="vector 3d schema")
14
+ """
15
+ value of this entry
16
+ """
17
+ id: int
18
+ """
19
+ integer id of this entry
20
+ """
@@ -4,21 +4,21 @@
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import List, Optional, Union
7
+ from typing import List
8
8
 
9
9
  from pydantic import BaseModel, Field, RootModel
10
10
 
11
11
 
12
- class AtomicVectorsSchemaItem(BaseModel):
13
- value: Optional[Union[List[float], List[bool]]] = Field(None, title="vector schema")
14
- id: Optional[int] = None
12
+ class AtomicVectorSchema(BaseModel):
13
+ value: List[float] = Field(..., max_length=3, min_length=3, title="vector 3d schema")
14
+ """
15
+ value of this entry
16
+ """
17
+ id: int
15
18
  """
16
19
  integer id of this entry
17
20
  """
18
21
 
19
22
 
20
- class AtomicVectorsSchema(RootModel[List[AtomicVectorsSchemaItem]]):
21
- root: List[AtomicVectorsSchemaItem] = Field(..., title="atomic vectors schema")
22
- """
23
- array of objects containing integer id each
24
- """
23
+ class AtomicVectorsSchema(RootModel[List[AtomicVectorSchema]]):
24
+ root: List[AtomicVectorSchema] = Field(..., title="atomic vectors schema")
@@ -26,8 +26,14 @@ class Units(Enum):
26
26
 
27
27
 
28
28
  class BandGapSchema(BaseModel):
29
- kpointConduction: Optional[List[float]] = Field(None, max_length=3, min_length=3, title="point schema")
30
- kpointValence: Optional[List[float]] = Field(None, max_length=3, min_length=3, title="point schema")
29
+ kpointConduction: Optional[List[float]] = Field(None, max_length=3, min_length=3, title="kpoint schema")
30
+ """
31
+ A k-point is a point in reciprocal space of a crystal.
32
+ """
33
+ kpointValence: Optional[List[float]] = Field(None, max_length=3, min_length=3, title="kpoint schema")
34
+ """
35
+ A k-point is a point in reciprocal space of a crystal.
36
+ """
31
37
  eigenvalueConduction: Optional[float] = None
32
38
  """
33
39
  eigenvalue at k-point in conduction band
@@ -20,11 +20,11 @@ class Units(Enum):
20
20
  eV_atom = "eV/atom"
21
21
 
22
22
 
23
- class Units23(Enum):
23
+ class Units24(Enum):
24
24
  eV_A_2 = "eV/A^2"
25
25
 
26
26
 
27
27
  class EnergySchema(BaseModel):
28
28
  name: str
29
- units: Union[Units, Units23]
29
+ units: Union[Units, Units24]
30
30
  value: float
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: schema
3
+ # version: 0.25.5
@@ -33,20 +33,20 @@ class AtomicRadius(BaseModel):
33
33
  value: float
34
34
 
35
35
 
36
- class Name24(Enum):
36
+ class Name31(Enum):
37
37
  electronegativity = "electronegativity"
38
38
 
39
39
 
40
40
  class Electronegativity(BaseModel):
41
- name: Optional[Name24] = None
41
+ name: Optional[Name31] = None
42
42
  value: float
43
43
 
44
44
 
45
- class Name25(Enum):
45
+ class Name32(Enum):
46
46
  ionization_potential = "ionization_potential"
47
47
 
48
48
 
49
- class Units21(Enum):
49
+ class Units22(Enum):
50
50
  kJ_mol = "kJ/mol"
51
51
  eV = "eV"
52
52
  J_mol = "J/mol"
@@ -57,8 +57,8 @@ class Units21(Enum):
57
57
 
58
58
 
59
59
  class IonizationPotential(BaseModel):
60
- name: Optional[Name25] = None
61
- units: Optional[Units21] = None
60
+ name: Optional[Name32] = None
61
+ units: Optional[Units22] = None
62
62
  value: float
63
63
 
64
64
 
@@ -10,52 +10,74 @@ from typing import Any, Dict, List, Literal, Optional, Union
10
10
  from pydantic import BaseModel, Field, RootModel, confloat, conint
11
11
 
12
12
 
13
- class AtomicElements(BaseModel):
14
- id: float
13
+ class AtomicElementSchema(BaseModel):
15
14
  value: str
16
- occurrence: Optional[float] = None
17
15
  """
18
- Occurrence is for fractional occupations
16
+ value of this entry
17
+ """
18
+ id: int
19
+ """
20
+ integer id of this entry
19
21
  """
20
- oxidationState: Optional[float] = None
21
22
 
22
23
 
23
- class AtomicCoordinate(BaseModel):
24
- id: Optional[float] = None
25
- value: Optional[Union[List[float], List[bool]]] = Field(None, title="vector schema")
24
+ class AtomicCoordinateSchema(BaseModel):
25
+ value: List[float] = Field(..., max_length=3, min_length=3, title="coordinate 3d schema")
26
+ """
27
+ value of this entry
28
+ """
29
+ id: int
30
+ """
31
+ integer id of this entry
32
+ """
26
33
 
27
34
 
28
- class Units(Enum):
35
+ class BasisUnitsEnum(Enum):
29
36
  crystal = "crystal"
30
37
  cartesian = "cartesian"
31
38
 
32
39
 
33
- class AtomicLabel(BaseModel):
34
- id: Optional[float] = None
35
- value: Optional[conint(ge=1, le=9)] = Field(None, title="integer positive single digit")
40
+ class AtomicLabelSchema(BaseModel):
41
+ value: Union[Union[int, str, float], conint(ge=1, le=9)]
42
+ """
43
+ value of this entry
44
+ """
45
+ id: int
46
+ """
47
+ integer id of this entry
48
+ """
36
49
 
37
50
 
38
51
  class BasisSchema(BaseModel):
39
- elements: List[AtomicElements]
40
- coordinates: List[AtomicCoordinate]
41
- units: Optional[Units] = "crystal"
42
- labels: Optional[List[AtomicLabel]] = []
52
+ elements: List[AtomicElementSchema] = Field(..., title="atomic elements schema")
53
+ """
54
+ atomic elements schema
55
+ """
56
+ coordinates: List[AtomicCoordinateSchema] = Field(..., title="atomic coordinates schema")
57
+ """
58
+ atomic coordinates schema
59
+ """
60
+ units: Optional[BasisUnitsEnum] = Field("crystal", title="basis units enum")
61
+ labels: Optional[List[AtomicLabelSchema]] = Field(None, title="atomic labels schema")
62
+ """
63
+ atomic labels schema
64
+ """
43
65
 
44
66
 
45
- class Units40(Enum):
67
+ class LatticeVectorsUnitsEnum(Enum):
46
68
  angstrom = "angstrom"
47
69
  bohr = "bohr"
48
70
 
49
71
 
50
- class LatticeExplicitUnit(BaseModel):
72
+ class LatticeVectorsSchema(BaseModel):
73
+ a: List[float] = Field(..., max_length=3, min_length=3, title="vector 3d schema")
74
+ b: List[float] = Field(..., max_length=3, min_length=3, title="vector 3d schema")
75
+ c: List[float] = Field(..., max_length=3, min_length=3, title="vector 3d schema")
51
76
  alat: Optional[float] = 1
52
77
  """
53
78
  lattice parameter for fractional coordinates
54
79
  """
55
- units: Optional[Units40] = "angstrom"
56
- a: List[float] = Field(..., max_length=3, min_length=3, title="array of 3 number elements schema")
57
- b: List[float] = Field(..., max_length=3, min_length=3, title="array of 3 number elements schema")
58
- c: List[float] = Field(..., max_length=3, min_length=3, title="array of 3 number elements schema")
80
+ units: Optional[LatticeVectorsUnitsEnum] = Field("angstrom", title="lattice vectors units enum")
59
81
 
60
82
 
61
83
  class LatticeTypeEnum(Enum):
@@ -75,28 +97,22 @@ class LatticeTypeEnum(Enum):
75
97
  RHL = "RHL"
76
98
 
77
99
 
78
- class Length(Enum):
100
+ class LatticeUnitsLengthEnum(Enum):
79
101
  angstrom = "angstrom"
80
102
  bohr = "bohr"
81
103
 
82
104
 
83
- class Angle(Enum):
105
+ class LatticeUnitsAngleEnum(Enum):
84
106
  degree = "degree"
85
107
  radian = "radian"
86
108
 
87
109
 
88
110
  class LatticeUnitsSchema(BaseModel):
89
- length: Optional[Length] = "angstrom"
90
- angle: Optional[Angle] = "degree"
111
+ length: Optional[LatticeUnitsLengthEnum] = Field("angstrom", title="lattice units length enum")
112
+ angle: Optional[LatticeUnitsAngleEnum] = Field("degree", title="lattice units angle enum")
91
113
 
92
114
 
93
115
  class LatticeSchema(BaseModel):
94
- vectors: Optional[LatticeExplicitUnit] = Field(None, title="lattice explicit unit")
95
- type: Optional[LatticeTypeEnum] = Field("TRI", title="lattice type enum")
96
- units: Optional[LatticeUnitsSchema] = Field(
97
- default_factory=lambda: LatticeUnitsSchema.model_validate({"length": "angstrom", "angle": "degree"}),
98
- title="Lattice units schema",
99
- )
100
116
  a: float
101
117
  """
102
118
  length of the first lattice vector
@@ -121,46 +137,52 @@ class LatticeSchema(BaseModel):
121
137
  """
122
138
  angle between first and third lattice vector
123
139
  """
140
+ vectors: Optional[LatticeVectorsSchema] = Field(None, title="lattice vectors schema")
141
+ type: Optional[LatticeTypeEnum] = Field("TRI", title="lattice type enum")
142
+ units: Optional[LatticeUnitsSchema] = Field(
143
+ default_factory=lambda: LatticeUnitsSchema.model_validate({"length": "angstrom", "angle": "degree"}),
144
+ title="Lattice units schema",
145
+ )
124
146
 
125
147
 
126
148
  class Name(Enum):
127
149
  volume = "volume"
128
150
 
129
151
 
130
- class Units41(Enum):
152
+ class Units(Enum):
131
153
  angstrom_3 = "angstrom^3"
132
154
 
133
155
 
134
156
  class VolumeSchema(BaseModel):
135
157
  name: Literal["0#-datamodel-code-generator-#-object-#-special-#"]
136
- units: Optional[Units41] = None
158
+ units: Optional[Units] = None
137
159
  value: float
138
160
 
139
161
 
140
- class Name46(Enum):
162
+ class Name53(Enum):
141
163
  density = "density"
142
164
 
143
165
 
144
- class Units42(Enum):
166
+ class Units39(Enum):
145
167
  g_cm_3 = "g/cm^3"
146
168
 
147
169
 
148
170
  class DensitySchema(BaseModel):
149
171
  name: Literal["1#-datamodel-code-generator-#-object-#-special-#"]
150
- units: Optional[Units42] = None
172
+ units: Optional[Units39] = None
151
173
  value: float
152
174
 
153
175
 
154
- class Units43(Enum):
176
+ class Units40(Enum):
155
177
  angstrom = "angstrom"
156
178
 
157
179
 
158
180
  class ScalarSchema(BaseModel):
159
- units: Optional[Units43] = None
181
+ units: Optional[Units40] = None
160
182
  value: float
161
183
 
162
184
 
163
- class Name47(Enum):
185
+ class Name54(Enum):
164
186
  symmetry = "symmetry"
165
187
 
166
188
 
@@ -180,7 +202,7 @@ class SymmetrySchema(BaseModel):
180
202
  name: Literal["2#-datamodel-code-generator-#-object-#-special-#"]
181
203
 
182
204
 
183
- class Name48(Enum):
205
+ class Name55(Enum):
184
206
  elemental_ratio = "elemental_ratio"
185
207
 
186
208
 
@@ -193,7 +215,7 @@ class ElementalRatio(BaseModel):
193
215
  """
194
216
 
195
217
 
196
- class Name49(Enum):
218
+ class Name56(Enum):
197
219
  p_norm = "p-norm"
198
220
 
199
221
 
@@ -206,7 +228,7 @@ class PNorm(BaseModel):
206
228
  value: float
207
229
 
208
230
 
209
- class Name50(Enum):
231
+ class Name57(Enum):
210
232
  inchi = "inchi"
211
233
 
212
234
 
@@ -215,7 +237,7 @@ class InChIRepresentationSchema(BaseModel):
215
237
  value: str
216
238
 
217
239
 
218
- class Name51(Enum):
240
+ class Name58(Enum):
219
241
  inchi_key = "inchi_key"
220
242
 
221
243
 
@@ -294,7 +316,7 @@ class FileSourceSchema(BaseModel):
294
316
  """
295
317
 
296
318
 
297
- class Name52(Enum):
319
+ class Name59(Enum):
298
320
  default = "default"
299
321
  atomsTooClose = "atomsTooClose"
300
322
  atomsOverlap = "atomsOverlap"
@@ -307,7 +329,7 @@ class Severity(Enum):
307
329
 
308
330
 
309
331
  class MaterialConsistencyCheckSchema(BaseModel):
310
- name: Name52
332
+ name: Name59
311
333
  """
312
334
  Name of the consistency check that is performed, which is listed in an enum.
313
335
  """
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: schema
3
+ # version: 0.28.5
@@ -0,0 +1,25 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: material/reusable/repetitions.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List, Optional
8
+
9
+ from pydantic import Field, RootModel, conint
10
+
11
+
12
+ class CrystalRepetitionsSchemaItem(RootModel[conint(ge=1)]):
13
+ root: conint(ge=1)
14
+
15
+
16
+ class CrystalRepetitionsSchema(RootModel[Optional[List[CrystalRepetitionsSchemaItem]]]):
17
+ root: Optional[List[CrystalRepetitionsSchemaItem]] = Field(
18
+ default_factory=lambda: [CrystalRepetitionsSchemaItem.model_validate(v) for v in [1, 1, 1]],
19
+ max_length=3,
20
+ min_length=3,
21
+ title="Crystal Repetitions Schema",
22
+ )
23
+ """
24
+ Number of unit cells to repeat in each direction for a crystal structure.
25
+ """
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: schema
3
+ # version: 0.28.5
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: material/reusable/slab/enums.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class SurfaceTypesEnum(Enum):
11
+ top = "top"
12
+ bottom = "bottom"
13
+ both = "both"
@@ -0,0 +1,16 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: material/reusable/slab/miller_indices.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List, Optional
8
+
9
+ from pydantic import Field, RootModel
10
+
11
+
12
+ class MillerIndicesSchema(RootModel[Optional[List[int]]]):
13
+ root: Optional[List[int]] = Field([0, 0, 1], max_length=3, min_length=3, title="Miller Indices Schema")
14
+ """
15
+ Miller indices for crystallographic plane designation
16
+ """
@@ -0,0 +1,16 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: material/reusable/slab/number_of_layers.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Optional
8
+
9
+ from pydantic import Field, RootModel, conint
10
+
11
+
12
+ class NumberOfLayersSchema(RootModel[Optional[conint(ge=1)]]):
13
+ root: Optional[conint(ge=1)] = Field(1, title="number_of_layers Schema")
14
+ """
15
+ Number of atomic layers in a structural component
16
+ """
@@ -0,0 +1,18 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: material/reusable/slab/termination.json
3
+ # version: 0.28.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from pydantic import BaseModel, Field
8
+
9
+
10
+ class TerminationSchema(BaseModel):
11
+ chemical_elements: str = Field(..., title="Chemical Elements")
12
+ """
13
+ Chemical elements at the termination
14
+ """
15
+ space_group_symmetry_label: str = Field(..., title="Space Group Symmetry Label")
16
+ """
17
+ Space group symmetry designation for the termination
18
+ """