mat3ra-esse 2025.4.17.post0__py3-none-any.whl → 2025.4.22.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 (87) 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_3d.py +13 -0
  20. mat3ra/esse/models/core/abstract/kpoint.py +16 -0
  21. mat3ra/esse/models/core/abstract/matrix_3x3.py +17 -0
  22. mat3ra/esse/models/core/abstract/vector_3d.py +13 -0
  23. mat3ra/esse/models/core/abstract/vector_boolean_3d.py +13 -0
  24. mat3ra/esse/models/core/primitive/array_of_ids.py +5 -5
  25. mat3ra/esse/models/core/primitive/object_with_id.py +14 -0
  26. mat3ra/esse/models/core/primitive/object_with_id_and_value.py +20 -0
  27. mat3ra/esse/models/core/reusable/atomic_scalars.py +4 -4
  28. mat3ra/esse/models/core/reusable/atomic_string.py +18 -0
  29. mat3ra/esse/models/core/reusable/atomic_vector.py +20 -0
  30. mat3ra/esse/models/core/reusable/atomic_vectors.py +9 -9
  31. mat3ra/esse/models/core/reusable/band_gap.py +8 -2
  32. mat3ra/esse/models/core/reusable/energy.py +2 -2
  33. mat3ra/esse/models/core/reusable/energy_accuracy_levels/__init__.py +3 -0
  34. mat3ra/esse/models/element.py +6 -6
  35. mat3ra/esse/models/material/__init__.py +68 -46
  36. mat3ra/esse/models/methods_directory/physical/psp/file/__init__.py +129 -0
  37. mat3ra/esse/models/methods_directory/physical/psp/file_data_item/__init__.py +111 -0
  38. mat3ra/esse/models/properties_directory/derived_properties.py +10 -10
  39. mat3ra/esse/models/properties_directory/non_scalar/average_potential_profile.py +2 -2
  40. mat3ra/esse/models/properties_directory/non_scalar/band_gaps.py +12 -3
  41. mat3ra/esse/models/properties_directory/non_scalar/band_structure.py +2 -2
  42. mat3ra/esse/models/properties_directory/non_scalar/density_of_states.py +2 -2
  43. mat3ra/esse/models/properties_directory/non_scalar/phonon_dispersions.py +2 -2
  44. mat3ra/esse/models/properties_directory/non_scalar/phonon_dos.py +2 -2
  45. mat3ra/esse/models/properties_directory/non_scalar/stress_tensor.py +1 -1
  46. mat3ra/esse/models/properties_directory/non_scalar/total_energy_contributions.py +26 -26
  47. mat3ra/esse/models/properties_directory/non_scalar/vibrational_spectrum.py +2 -2
  48. mat3ra/esse/models/properties_directory/scalar/electron_affinity.py +2 -2
  49. mat3ra/esse/models/properties_directory/scalar/fermi_energy.py +2 -2
  50. mat3ra/esse/models/properties_directory/scalar/formation_energy.py +2 -2
  51. mat3ra/esse/models/properties_directory/scalar/ionization_potential.py +2 -2
  52. mat3ra/esse/models/properties_directory/scalar/reaction_energy_barrier.py +2 -2
  53. mat3ra/esse/models/properties_directory/scalar/surface_energy.py +2 -2
  54. mat3ra/esse/models/properties_directory/scalar/total_energy.py +2 -2
  55. mat3ra/esse/models/properties_directory/scalar/valence_band_offset.py +2 -2
  56. mat3ra/esse/models/properties_directory/scalar/zero_point_energy.py +2 -2
  57. mat3ra/esse/models/properties_directory/structural/atomic_forces.py +8 -8
  58. mat3ra/esse/models/properties_directory/structural/basis/__init__.py +38 -16
  59. mat3ra/esse/models/properties_directory/structural/basis/atomic_constraint.py +20 -0
  60. mat3ra/esse/models/properties_directory/structural/basis/atomic_constraints.py +11 -14
  61. mat3ra/esse/models/properties_directory/structural/basis/atomic_constraints_property.py +33 -0
  62. mat3ra/esse/models/properties_directory/structural/basis/atomic_coordinate.py +10 -4
  63. mat3ra/esse/models/properties_directory/structural/basis/atomic_coordinates.py +16 -27
  64. mat3ra/esse/models/properties_directory/structural/basis/atomic_element.py +6 -7
  65. mat3ra/esse/models/properties_directory/structural/basis/atomic_elements.py +27 -0
  66. mat3ra/esse/models/properties_directory/structural/basis/atomic_label.py +11 -5
  67. mat3ra/esse/models/properties_directory/structural/basis/atomic_labels.py +27 -0
  68. mat3ra/esse/models/properties_directory/structural/basis/bonds.py +3 -3
  69. mat3ra/esse/models/properties_directory/structural/basis/units_enum.py +12 -0
  70. mat3ra/esse/models/properties_directory/structural/lattice/__init__.py +16 -16
  71. mat3ra/esse/models/properties_directory/structural/lattice/lattice_vectors.py +10 -11
  72. mat3ra/esse/models/properties_directory/structural/lattice/units/__init__.py +3 -0
  73. mat3ra/esse/models/properties_directory/structural/lattice/units/angle_enum.py +12 -0
  74. mat3ra/esse/models/properties_directory/structural/lattice/units/length_enum.py +12 -0
  75. mat3ra/esse/models/properties_directory/structural/lattice/vectors/__init__.py +26 -0
  76. mat3ra/esse/models/properties_directory/structural/lattice/vectors/units_enum.py +12 -0
  77. mat3ra/esse/models/properties_directory/structural/magnetic_moments.py +8 -8
  78. mat3ra/esse/models/properties_directory/structural/molecular_pattern.py +9 -9
  79. mat3ra/esse/models/properties_directory/structural/patterns/functional_group.py +3 -3
  80. mat3ra/esse/models/properties_directory/structural/patterns/ring.py +3 -3
  81. mat3ra/esse/models/properties_directory/structural/patterns/special_bond.py +3 -3
  82. mat3ra/esse/models/properties_directory/workflow/convergence/ionic.py +2 -2
  83. {mat3ra_esse-2025.4.17.post0.dist-info → mat3ra_esse-2025.4.22.post0.dist-info}/METADATA +1 -1
  84. {mat3ra_esse-2025.4.17.post0.dist-info → mat3ra_esse-2025.4.22.post0.dist-info}/RECORD +87 -49
  85. {mat3ra_esse-2025.4.17.post0.dist-info → mat3ra_esse-2025.4.22.post0.dist-info}/WHEEL +1 -1
  86. {mat3ra_esse-2025.4.17.post0.dist-info → mat3ra_esse-2025.4.22.post0.dist-info}/licenses/LICENSE.md +0 -0
  87. {mat3ra_esse-2025.4.17.post0.dist-info → mat3ra_esse-2025.4.22.post0.dist-info}/top_level.txt +0 -0
@@ -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 Units21(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, Units21]
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 Name23(Enum):
37
37
  electronegativity = "electronegativity"
38
38
 
39
39
 
40
40
  class Electronegativity(BaseModel):
41
- name: Optional[Name24] = None
41
+ name: Optional[Name23] = None
42
42
  value: float
43
43
 
44
44
 
45
- class Name25(Enum):
45
+ class Name24(Enum):
46
46
  ionization_potential = "ionization_potential"
47
47
 
48
48
 
49
- class Units21(Enum):
49
+ class Units19(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[Name24] = None
61
+ units: Optional[Units19] = 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 Name45(Enum):
141
163
  density = "density"
142
164
 
143
165
 
144
- class Units42(Enum):
166
+ class Units36(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[Units36] = None
151
173
  value: float
152
174
 
153
175
 
154
- class Units43(Enum):
176
+ class Units37(Enum):
155
177
  angstrom = "angstrom"
156
178
 
157
179
 
158
180
  class ScalarSchema(BaseModel):
159
- units: Optional[Units43] = None
181
+ units: Optional[Units37] = None
160
182
  value: float
161
183
 
162
184
 
163
- class Name47(Enum):
185
+ class Name46(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 Name47(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 Name48(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 Name49(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 Name50(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 Name51(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: Name51
311
333
  """
312
334
  Name of the consistency check that is performed, which is listed in an enum.
313
335
  """
@@ -0,0 +1,129 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: methods_directory/physical/psp/file.json
3
+ # version: 0.25.5
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+ from typing import Any, Dict, List, Optional
9
+
10
+ from pydantic import BaseModel, ConfigDict, Field, confloat, conint, constr
11
+
12
+ from ..Reusable_schema_for_energy_value_with_unit_corresponding_to_a_specific_accuracy_level__e import (
13
+ g,
14
+ )
15
+
16
+
17
+ class Slug(Enum):
18
+ pseudopotential = "pseudopotential"
19
+
20
+
21
+ class Type(Enum):
22
+ us = "us"
23
+ nc = "nc"
24
+ nc_fr = "nc-fr"
25
+ paw = "paw"
26
+ coulomb = "coulomb"
27
+
28
+
29
+ class ExchangeCorrelation(BaseModel):
30
+ approximation: Optional[str] = None
31
+ """
32
+ DFT approximation
33
+ """
34
+ functional: Optional[str] = None
35
+ """
36
+ Exchange correlation functional
37
+ """
38
+ path: Optional[str] = Field(None, title="category path schema")
39
+ """
40
+ TODO: Use regex once schema draft version has been updated
41
+ """
42
+
43
+
44
+ class AtomicOrbitalSchema(BaseModel):
45
+ orbitalName: Optional[constr(pattern=r"^[1-7][sSpPdDfF]$")] = None
46
+ orbitalIndex: Optional[conint(ge=1)] = None
47
+ principalNumber: Optional[conint(ge=1, le=7)] = None
48
+ angularMomentum: Optional[conint(ge=0, le=3)] = None
49
+ occupation: Optional[confloat(ge=0.0, le=14.0)] = None
50
+ """
51
+ Shell occupation
52
+ """
53
+
54
+
55
+ class Name(Enum):
56
+ pseudopotential = "pseudopotential"
57
+
58
+
59
+ class Cutoffs(BaseModel):
60
+ model_config = ConfigDict(
61
+ extra="forbid",
62
+ )
63
+ wavefunction: Optional[List[g.FieldUsedForSuggestedWavefunctionAndChargeDensityCutoffs]] = None
64
+ """
65
+ Energy cutoff values for wavefunction plane wave expansion.
66
+ """
67
+ density: Optional[List[g.FieldUsedForSuggestedWavefunctionAndChargeDensityCutoffs]] = None
68
+ """
69
+ Energy cutoff values for charge density plane wave expansion.
70
+ """
71
+
72
+
73
+ class FileDataItem(BaseModel):
74
+ element: str
75
+ """
76
+ chemical element
77
+ """
78
+ hash: Optional[str] = None
79
+ """
80
+ MD5 hash of the pseudopotential file
81
+ """
82
+ type: Type
83
+ source: str
84
+ """
85
+ explains where this came from
86
+ """
87
+ version: Optional[str] = None
88
+ """
89
+ explains the version of where this came from
90
+ """
91
+ exchangeCorrelation: ExchangeCorrelation
92
+ valenceConfiguration: Optional[List[AtomicOrbitalSchema]] = None
93
+ """
94
+ contains pseudo orbital information, including orbital names and occupations
95
+ """
96
+ path: str
97
+ """
98
+ location of the pseudopotential file on filesystem
99
+ """
100
+ apps: List[str]
101
+ """
102
+ The names of the simulation engines that can use this pseudopotential, e.g. espresso
103
+ """
104
+ filename: Optional[str] = None
105
+ """
106
+ filename of pseudopotential file on filesystem
107
+ """
108
+ name: Optional[Name] = None
109
+ """
110
+ name of the data category
111
+ """
112
+ cutoffs: Optional[Cutoffs] = None
113
+ """
114
+ Suggested cutoff values for wave function and charge density.
115
+ """
116
+
117
+
118
+ class Source(BaseModel):
119
+ info: Optional[Dict[str, Any]] = None
120
+ type: Optional[str] = None
121
+
122
+
123
+ class PseudopotentialFile(BaseModel):
124
+ slug: Optional[Slug] = None
125
+ data: Optional[FileDataItem] = Field(None, title="File data item")
126
+ source: Optional[Source] = None
127
+ """
128
+ TODO: remove in the future
129
+ """