nomad-material-processing 1.0.6__tar.gz → 1.0.7__tar.gz

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.
Files changed (100) hide show
  1. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/PKG-INFO +3 -2
  2. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/mkdocs.yml +14 -15
  3. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/pyproject.toml +2 -1
  4. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/general.py +58 -6
  5. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing.egg-info/PKG-INFO +3 -2
  6. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing.egg-info/SOURCES.txt +3 -0
  7. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing.egg-info/requires.txt +1 -1
  8. nomad_material_processing-1.0.7/src/nomad_material_processing.egg-info/scm_file_list.json +92 -0
  9. nomad_material_processing-1.0.7/src/nomad_material_processing.egg-info/scm_version.json +8 -0
  10. nomad_material_processing-1.0.7/tests/data/test_crystalline_substrate.archive.yaml +4 -0
  11. nomad_material_processing-1.0.7/tests/solution/test_solution_schema.py +203 -0
  12. nomad_material_processing-1.0.7/tests/test_schema.py +29 -0
  13. nomad_material_processing-1.0.6/tests/solution/test_solution_schema.py +0 -198
  14. nomad_material_processing-1.0.6/tests/test_schema.py +0 -15
  15. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/.github/workflows/mkdocs-deploy.yml +0 -0
  16. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/.github/workflows/python-publish.yml +0 -0
  17. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/.github/workflows/python-test.yml +0 -0
  18. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/.gitignore +0 -0
  19. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/.vscode/settings.json +0 -0
  20. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/CITATION.cff +0 -0
  21. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/LICENSE +0 -0
  22. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/README.md +0 -0
  23. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/.gitignore +0 -0
  24. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/favicon.png +0 -0
  25. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/levelsschema.png +0 -0
  26. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/nomad-logo.png +0 -0
  27. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/nomad-plugin-logo.png +0 -0
  28. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/use-built-in-schema-1.png +0 -0
  29. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/use-built-in-schema-2.png +0 -0
  30. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/contact.md +0 -0
  31. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/explanation/data_model.md +0 -0
  32. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/explanation/levelsofschema.md +0 -0
  33. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/explanation/schemas.md +0 -0
  34. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/how_to/develop.md +0 -0
  35. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/how_to/install.md +0 -0
  36. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/how_to/use_this_plugin.md +0 -0
  37. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/how_to/use_this_plugin_old.md +0 -0
  38. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/index.md +0 -0
  39. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/main.py +0 -0
  40. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/references.md +0 -0
  41. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/combinatorial.md +0 -0
  42. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/crystal_growth.md +0 -0
  43. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/epitaxy.md +0 -0
  44. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/general.md +0 -0
  45. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/solution/general.md +0 -0
  46. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/cvd/general.md +0 -0
  47. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/cvd/movpe.md +0 -0
  48. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/general.md +0 -0
  49. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/pvd/general.md +0 -0
  50. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/pvd/mbe.md +0 -0
  51. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/pvd/pld.md +0 -0
  52. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/pvd/sputtering.md +0 -0
  53. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/pvd/thermal.md +0 -0
  54. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas.md +0 -0
  55. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/solution.md +0 -0
  56. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/vapor_depostion.md +0 -0
  57. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/stylesheets/extra.css +0 -0
  58. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/theme/partials/header.html +0 -0
  59. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/tutorial/tutorial.md +0 -0
  60. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/setup.cfg +0 -0
  61. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/setup.py +0 -0
  62. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/__init__.py +0 -0
  63. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/combinatorial.py +0 -0
  64. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/crystal_growth.py +0 -0
  65. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/epitaxy.py +0 -0
  66. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/solution/__init__.py +0 -0
  67. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/solution/general.py +0 -0
  68. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/solution/utils.py +0 -0
  69. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/utils.py +0 -0
  70. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/__init__.py +0 -0
  71. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/cvd/__init__.py +0 -0
  72. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/cvd/general.py +0 -0
  73. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/cvd/movpe.py +0 -0
  74. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/general.py +0 -0
  75. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/pvd/__init__.py +0 -0
  76. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/pvd/general.py +0 -0
  77. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/pvd/mbe.py +0 -0
  78. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/pvd/pld.py +0 -0
  79. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/pvd/sputtering.py +0 -0
  80. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/pvd/thermal.py +0 -0
  81. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing.egg-info/dependency_links.txt +0 -0
  82. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing.egg-info/entry_points.txt +0 -0
  83. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing.egg-info/top_level.txt +0 -0
  84. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/conftest.py +0 -0
  85. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_crystal_growth.archive.yaml +0 -0
  86. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_czochralski_process.archive.yaml +0 -0
  87. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_epitaxy.archive.yaml +0 -0
  88. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_metal_organic_vapor_phase_epitaxy.archive.yaml +0 -0
  89. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_molecular_beam_epitaxy.archive.yaml +0 -0
  90. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_physical_vapor_deposition.archive.yaml +0 -0
  91. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_pulsed_laser_deposition.archive.yaml +0 -0
  92. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_sample_deposition.archive.yaml +0 -0
  93. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_solution.archive.yaml +0 -0
  94. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_solution_component.archive.yaml +0 -0
  95. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_sputter_deposition.archive.yaml +0 -0
  96. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_substrate.archive.yaml +0 -0
  97. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_thermal_evaporation.archive.yaml +0 -0
  98. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_thin_film.archive.yaml +0 -0
  99. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_thin_film_stack.archive.yaml +0 -0
  100. {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_vapor_phase_epitaxy.archive.yaml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nomad-material-processing
3
- Version: 1.0.6
3
+ Version: 1.0.7
4
4
  Summary: A plugin for NOMAD containing base sections for material processing.
5
5
  Author: Andrea Albino, Sebastian Brückner, Michael Götte, Ahmed Ilyas, Sarthak Kapoor, José A. Márquez, Hampus Näsström, Markus Scheidgen
6
6
  Author-email: fairmat@physik.hu-berlin.de
@@ -216,6 +216,7 @@ Classifier: Programming Language :: Python :: 3.10
216
216
  Classifier: Programming Language :: Python :: 3.11
217
217
  Classifier: Programming Language :: Python :: 3.12
218
218
  Classifier: License :: OSI Approved :: Apache Software License
219
+ Requires-Python: >=3.10
219
220
  Description-Content-Type: text/markdown
220
221
  License-File: LICENSE
221
222
  Requires-Dist: nomad-lab>=1.3.14
@@ -223,7 +224,7 @@ Provides-Extra: dev
223
224
  Requires-Dist: pytest; extra == "dev"
224
225
  Requires-Dist: ruff; extra == "dev"
225
226
  Requires-Dist: structlog; extra == "dev"
226
- Requires-Dist: nomad-docs>=0.1.3; extra == "dev"
227
+ Requires-Dist: nomad-docs>=2.0.1; extra == "dev"
227
228
  Requires-Dist: mkdocs; extra == "dev"
228
229
  Requires-Dist: mkdocs-material>=9.0; extra == "dev"
229
230
  Requires-Dist: pymdown-extensions; extra == "dev"
@@ -17,23 +17,23 @@ nav:
17
17
  - Reference:
18
18
  - Glossary: reference/references.md
19
19
  - Schemas:
20
- - reference/schemas/general.md
21
- - reference/schemas/combinatorial.md
22
- - reference/schemas/epitaxy.md
23
- - reference/schemas/crystal_growth.md
20
+ - General: reference/schemas/general.md
21
+ - Combinatorial: reference/schemas/combinatorial.md
22
+ - Epitaxy: reference/schemas/epitaxy.md
23
+ - Crystal Growth: reference/schemas/crystal_growth.md
24
24
  - Solution:
25
- - reference/schemas/solution/general.md
25
+ - General: reference/schemas/solution/general.md
26
26
  - Vapor Deposition:
27
- - reference/schemas/vapor_deposition/general.md
27
+ - General: reference/schemas/vapor_deposition/general.md
28
28
  - CVD:
29
- - reference/schemas/vapor_deposition/cvd/general.md
30
- - reference/schemas/vapor_deposition/cvd/movpe.md
29
+ - General: reference/schemas/vapor_deposition/cvd/general.md
30
+ - MOVPE: reference/schemas/vapor_deposition/cvd/movpe.md
31
31
  - PVD:
32
- - reference/schemas/vapor_deposition/pvd/general.md
33
- - reference/schemas/vapor_deposition/pvd/sputtering.md
34
- - reference/schemas/vapor_deposition/pvd/thermal.md
35
- - reference/schemas/vapor_deposition/pvd/pld.md
36
- - reference/schemas/vapor_deposition/pvd/mbe.md
32
+ - General: reference/schemas/vapor_deposition/pvd/general.md
33
+ - Sputtering: reference/schemas/vapor_deposition/pvd/sputtering.md
34
+ - Thermal Evaporation: reference/schemas/vapor_deposition/pvd/thermal.md
35
+ - Pulsed Laser Deposition: reference/schemas/vapor_deposition/pvd/pld.md
36
+ - Molecular Beam Epitaxy: reference/schemas/vapor_deposition/pvd/mbe.md
37
37
  - Tutorials: tutorial/tutorial.md
38
38
  - Contact: contact.md
39
39
  plugins:
@@ -77,5 +77,4 @@ extra_css:
77
77
  - stylesheets/extra.css
78
78
  extra_javascript:
79
79
  - javascript.js
80
- # - https://polyfill.io/v3/polyfill.min.js?features=es6
81
- - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
80
+ - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
@@ -19,6 +19,7 @@ name = "nomad-material-processing"
19
19
  dynamic = ["version"]
20
20
  description = "A plugin for NOMAD containing base sections for material processing."
21
21
  readme = "README.md"
22
+ requires-python = ">=3.10"
22
23
  authors = [
23
24
  { name = "Andrea Albino" },
24
25
  { name = "Sebastian Brückner" },
@@ -51,7 +52,7 @@ dev = [
51
52
  "pytest",
52
53
  "ruff",
53
54
  "structlog",
54
- "nomad-docs>=0.1.3",
55
+ "nomad-docs>=2.0.1",
55
56
  "mkdocs",
56
57
  "mkdocs-material>=9.0",
57
58
  "pymdown-extensions",
@@ -706,6 +706,29 @@ class CrystalProperties(ArchiveSection):
706
706
  parameters, and the specific arrangement of atoms within the crystal lattice.
707
707
  """
708
708
 
709
+ bravais_lattices = Quantity(
710
+ type=MEnum(
711
+ 'Triclinic',
712
+ 'Monoclinic Primitive',
713
+ 'Monoclinic Base Centered',
714
+ 'Orthorhombic Primitive',
715
+ 'Orthorhombic Base Centered',
716
+ 'Orthorhombic Body Centered',
717
+ 'Orthorhombic Face Centered',
718
+ 'Tetragonal Primitive',
719
+ 'Tetragonal Body Centered',
720
+ 'Cubic Primitive',
721
+ 'Cubic Body Centered',
722
+ 'Cubic Face Centered',
723
+ 'Rhombohedral',
724
+ 'Hexagonal',
725
+ ),
726
+ description='The Bravais lattice of the crystal structure.',
727
+ a_eln=ELNAnnotation(
728
+ component=ELNComponentEnum.EnumEditQuantity,
729
+ ),
730
+ )
731
+
709
732
 
710
733
  class SubstrateCrystalProperties(CrystalProperties):
711
734
  """
@@ -715,21 +738,26 @@ class SubstrateCrystalProperties(CrystalProperties):
715
738
  bravais_lattices = Quantity(
716
739
  type=MEnum(
717
740
  'Triclinic',
718
- 'Monoclinic Simple',
741
+ 'Monoclinic Primitive',
719
742
  'Monoclinic Base Centered',
720
- 'Orthorhombic Simple',
743
+ 'Orthorhombic Primitive',
721
744
  'Orthorhombic Base Centered',
722
745
  'Orthorhombic Body Centered',
723
746
  'Orthorhombic Face Centered',
724
- 'Tetragonal Simple',
747
+ 'Tetragonal Primitive',
725
748
  'Tetragonal Body Centered',
726
- 'Cubic Simple',
749
+ 'Cubic Primitive',
727
750
  'Cubic Body Centered',
728
751
  'Cubic Face Centered',
729
- 'Trigonal',
752
+ 'Rhombohedral',
730
753
  'Hexagonal',
754
+ 'Monoclinic Simple', # Incorrect term, normalizes to Monoclinic Primitive
755
+ 'Orthorhombic Simple', # Incorrect term, norm. to Orthorhombic Primitive
756
+ 'Tetragonal Simple', # Incorrect term, normalizes to Tetragonal Primitive
757
+ 'Cubic Simple', # Incorrect term, normalizes to Cubic Primitive
758
+ 'Trigonal', # Incorrect term, normalizes to Rhombohedral
731
759
  ),
732
- description='The crystal system of the substrate.',
760
+ description='The Bravais lattice of the crystal structure.',
733
761
  a_eln=ELNAnnotation(
734
762
  component=ELNComponentEnum.EnumEditQuantity,
735
763
  ),
@@ -745,6 +773,30 @@ class SubstrateCrystalProperties(CrystalProperties):
745
773
  """,
746
774
  )
747
775
 
776
+ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None:
777
+ """
778
+ The normalizer for the `SubstrateCrystalProperties` class.
779
+
780
+ Args:
781
+ archive (EntryArchive): The archive containing the section that is being
782
+ normalized.
783
+ logger (BoundLogger): A structlog logger.
784
+ """
785
+ old_terminologies = {
786
+ 'Monoclinic Simple': 'Monoclinic Primitive',
787
+ 'Orthorhombic Simple': 'Orthorhombic Primitive',
788
+ 'Tetragonal Simple': 'Tetragonal Primitive',
789
+ 'Cubic Simple': 'Cubic Primitive',
790
+ 'Trigonal': 'Rhombohedral',
791
+ }
792
+ if self.bravais_lattices in old_terminologies:
793
+ logger.warning(
794
+ f"Bravais lattice '{self.bravais_lattices}' is incorrect terminology. "
795
+ f"Normalizing to '{old_terminologies[self.bravais_lattices]}'."
796
+ )
797
+ self.bravais_lattices = old_terminologies[self.bravais_lattices]
798
+ super().normalize(archive, logger)
799
+
748
800
 
749
801
  class ElectronicProperties(ArchiveSection):
750
802
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nomad-material-processing
3
- Version: 1.0.6
3
+ Version: 1.0.7
4
4
  Summary: A plugin for NOMAD containing base sections for material processing.
5
5
  Author: Andrea Albino, Sebastian Brückner, Michael Götte, Ahmed Ilyas, Sarthak Kapoor, José A. Márquez, Hampus Näsström, Markus Scheidgen
6
6
  Author-email: fairmat@physik.hu-berlin.de
@@ -216,6 +216,7 @@ Classifier: Programming Language :: Python :: 3.10
216
216
  Classifier: Programming Language :: Python :: 3.11
217
217
  Classifier: Programming Language :: Python :: 3.12
218
218
  Classifier: License :: OSI Approved :: Apache Software License
219
+ Requires-Python: >=3.10
219
220
  Description-Content-Type: text/markdown
220
221
  License-File: LICENSE
221
222
  Requires-Dist: nomad-lab>=1.3.14
@@ -223,7 +224,7 @@ Provides-Extra: dev
223
224
  Requires-Dist: pytest; extra == "dev"
224
225
  Requires-Dist: ruff; extra == "dev"
225
226
  Requires-Dist: structlog; extra == "dev"
226
- Requires-Dist: nomad-docs>=0.1.3; extra == "dev"
227
+ Requires-Dist: nomad-docs>=2.0.1; extra == "dev"
227
228
  Requires-Dist: mkdocs; extra == "dev"
228
229
  Requires-Dist: mkdocs-material>=9.0; extra == "dev"
229
230
  Requires-Dist: pymdown-extensions; extra == "dev"
@@ -57,6 +57,8 @@ src/nomad_material_processing.egg-info/SOURCES.txt
57
57
  src/nomad_material_processing.egg-info/dependency_links.txt
58
58
  src/nomad_material_processing.egg-info/entry_points.txt
59
59
  src/nomad_material_processing.egg-info/requires.txt
60
+ src/nomad_material_processing.egg-info/scm_file_list.json
61
+ src/nomad_material_processing.egg-info/scm_version.json
60
62
  src/nomad_material_processing.egg-info/top_level.txt
61
63
  src/nomad_material_processing/solution/__init__.py
62
64
  src/nomad_material_processing/solution/general.py
@@ -75,6 +77,7 @@ src/nomad_material_processing/vapor_deposition/pvd/thermal.py
75
77
  tests/conftest.py
76
78
  tests/test_schema.py
77
79
  tests/data/test_crystal_growth.archive.yaml
80
+ tests/data/test_crystalline_substrate.archive.yaml
78
81
  tests/data/test_czochralski_process.archive.yaml
79
82
  tests/data/test_epitaxy.archive.yaml
80
83
  tests/data/test_metal_organic_vapor_phase_epitaxy.archive.yaml
@@ -4,7 +4,7 @@ nomad-lab>=1.3.14
4
4
  pytest
5
5
  ruff
6
6
  structlog
7
- nomad-docs>=0.1.3
7
+ nomad-docs>=2.0.1
8
8
  mkdocs
9
9
  mkdocs-material>=9.0
10
10
  pymdown-extensions
@@ -0,0 +1,92 @@
1
+ {
2
+ "files": [
3
+ ".github/workflows/mkdocs-deploy.yml",
4
+ ".github/workflows/python-publish.yml",
5
+ ".github/workflows/python-test.yml",
6
+ ".gitignore",
7
+ ".vscode/settings.json",
8
+ "CITATION.cff",
9
+ "LICENSE",
10
+ "README.md",
11
+ "docs/assets/.gitignore",
12
+ "docs/assets/favicon.png",
13
+ "docs/assets/levelsschema.png",
14
+ "docs/assets/nomad-logo.png",
15
+ "docs/assets/nomad-plugin-logo.png",
16
+ "docs/assets/use-built-in-schema-1.png",
17
+ "docs/assets/use-built-in-schema-2.png",
18
+ "docs/contact.md",
19
+ "docs/explanation/data_model.md",
20
+ "docs/explanation/levelsofschema.md",
21
+ "docs/explanation/schemas.md",
22
+ "docs/how_to/develop.md",
23
+ "docs/how_to/install.md",
24
+ "docs/how_to/use_this_plugin.md",
25
+ "docs/how_to/use_this_plugin_old.md",
26
+ "docs/index.md",
27
+ "docs/main.py",
28
+ "docs/reference/references.md",
29
+ "docs/reference/schemas.md",
30
+ "docs/reference/schemas/combinatorial.md",
31
+ "docs/reference/schemas/crystal_growth.md",
32
+ "docs/reference/schemas/epitaxy.md",
33
+ "docs/reference/schemas/general.md",
34
+ "docs/reference/schemas/solution/general.md",
35
+ "docs/reference/schemas/vapor_deposition/cvd/general.md",
36
+ "docs/reference/schemas/vapor_deposition/cvd/movpe.md",
37
+ "docs/reference/schemas/vapor_deposition/general.md",
38
+ "docs/reference/schemas/vapor_deposition/pvd/general.md",
39
+ "docs/reference/schemas/vapor_deposition/pvd/mbe.md",
40
+ "docs/reference/schemas/vapor_deposition/pvd/pld.md",
41
+ "docs/reference/schemas/vapor_deposition/pvd/sputtering.md",
42
+ "docs/reference/schemas/vapor_deposition/pvd/thermal.md",
43
+ "docs/reference/solution.md",
44
+ "docs/reference/vapor_depostion.md",
45
+ "docs/stylesheets/extra.css",
46
+ "docs/theme/partials/header.html",
47
+ "docs/tutorial/tutorial.md",
48
+ "mkdocs.yml",
49
+ "pyproject.toml",
50
+ "setup.py",
51
+ "src/nomad_material_processing/__init__.py",
52
+ "src/nomad_material_processing/combinatorial.py",
53
+ "src/nomad_material_processing/crystal_growth.py",
54
+ "src/nomad_material_processing/epitaxy.py",
55
+ "src/nomad_material_processing/general.py",
56
+ "src/nomad_material_processing/solution/__init__.py",
57
+ "src/nomad_material_processing/solution/general.py",
58
+ "src/nomad_material_processing/solution/utils.py",
59
+ "src/nomad_material_processing/utils.py",
60
+ "src/nomad_material_processing/vapor_deposition/__init__.py",
61
+ "src/nomad_material_processing/vapor_deposition/cvd/__init__.py",
62
+ "src/nomad_material_processing/vapor_deposition/cvd/general.py",
63
+ "src/nomad_material_processing/vapor_deposition/cvd/movpe.py",
64
+ "src/nomad_material_processing/vapor_deposition/general.py",
65
+ "src/nomad_material_processing/vapor_deposition/pvd/__init__.py",
66
+ "src/nomad_material_processing/vapor_deposition/pvd/general.py",
67
+ "src/nomad_material_processing/vapor_deposition/pvd/mbe.py",
68
+ "src/nomad_material_processing/vapor_deposition/pvd/pld.py",
69
+ "src/nomad_material_processing/vapor_deposition/pvd/sputtering.py",
70
+ "src/nomad_material_processing/vapor_deposition/pvd/thermal.py",
71
+ "tests/conftest.py",
72
+ "tests/data/test_crystal_growth.archive.yaml",
73
+ "tests/data/test_crystalline_substrate.archive.yaml",
74
+ "tests/data/test_czochralski_process.archive.yaml",
75
+ "tests/data/test_epitaxy.archive.yaml",
76
+ "tests/data/test_metal_organic_vapor_phase_epitaxy.archive.yaml",
77
+ "tests/data/test_molecular_beam_epitaxy.archive.yaml",
78
+ "tests/data/test_physical_vapor_deposition.archive.yaml",
79
+ "tests/data/test_pulsed_laser_deposition.archive.yaml",
80
+ "tests/data/test_sample_deposition.archive.yaml",
81
+ "tests/data/test_solution.archive.yaml",
82
+ "tests/data/test_solution_component.archive.yaml",
83
+ "tests/data/test_sputter_deposition.archive.yaml",
84
+ "tests/data/test_substrate.archive.yaml",
85
+ "tests/data/test_thermal_evaporation.archive.yaml",
86
+ "tests/data/test_thin_film.archive.yaml",
87
+ "tests/data/test_thin_film_stack.archive.yaml",
88
+ "tests/data/test_vapor_phase_epitaxy.archive.yaml",
89
+ "tests/solution/test_solution_schema.py",
90
+ "tests/test_schema.py"
91
+ ]
92
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "1.0.7",
3
+ "distance": 0,
4
+ "node": "gb89a0d1841215fbc2f6a214a288e87469745d484",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-11-06"
8
+ }
@@ -0,0 +1,4 @@
1
+ data:
2
+ m_def: nomad_material_processing.CrystallineSubstrate
3
+ crystal_properties:
4
+ bravais_lattices: Monoclinic Simple
@@ -0,0 +1,203 @@
1
+ import pytest
2
+ from nomad.client import normalize_all, parse
3
+ from nomad.datamodel.metainfo.basesections import (
4
+ PubChemPureSubstanceSection,
5
+ PureSubstanceSection,
6
+ )
7
+ from nomad.units import ureg
8
+
9
+ from nomad_material_processing.solution.general import (
10
+ Solution,
11
+ SolutionComponent,
12
+ SolutionComponentReference,
13
+ )
14
+
15
+
16
+ @pytest.fixture(autouse=True)
17
+ def mock_pubchem(monkeypatch):
18
+ """Use fixed enrichment data without querying PubChem."""
19
+ substances = {
20
+ 'Water': (962, 'H2O', 18.010564684),
21
+ 'Sodium Chloride': (5234, 'ClNa', 57.95862196),
22
+ }
23
+
24
+ def normalize_pubchem(section, archive, logger):
25
+ if section.name not in substances:
26
+ pytest.fail(f'No mocked PubChem data for {section.name!r}.')
27
+ cid, formula, molecular_mass = substances[section.name]
28
+ section.pub_chem_cid = cid
29
+ section.molecular_formula = formula
30
+ section.molecular_mass = molecular_mass * ureg('Da')
31
+
32
+ # Run the parent normalization as
33
+ # PubChemPureSubstanceSection inherits from PureSubstanceSection
34
+ PureSubstanceSection.normalize(section, archive, logger)
35
+
36
+ monkeypatch.setattr(PubChemPureSubstanceSection, 'normalize', normalize_pubchem)
37
+
38
+
39
+ def test_solution_component():
40
+ """
41
+ Test molar concentration calculation for a solution component.
42
+ Test mass calculation.
43
+ """
44
+ archive = parse('tests/data/test_solution_component.archive.yaml')[0]
45
+ archive.data = SolutionComponent(
46
+ volume=1.0 * ureg('l'),
47
+ density=1.0 * ureg('kg/l'),
48
+ pure_substance=PubChemPureSubstanceSection(
49
+ name='Water',
50
+ ),
51
+ )
52
+ normalize_all(archive)
53
+
54
+ volume = 1 * ureg('liter')
55
+ archive.data.calculate_molar_concentration(volume)
56
+
57
+ assert archive.data.mass.to('kg').magnitude == pytest.approx(1.0, rel=1e-3)
58
+ assert archive.data.molar_concentration.calculated_concentration.to(
59
+ 'mol/l'
60
+ ).magnitude == pytest.approx(55.523, rel=1e-3)
61
+
62
+
63
+ def test_solution():
64
+ starter_solution_archive = parse('tests/data/test_solution.archive.yaml')[0]
65
+ water = PubChemPureSubstanceSection(name='Water')
66
+ salt = PubChemPureSubstanceSection(name='Sodium Chloride')
67
+ starter_solution = Solution(
68
+ name='Starter solution',
69
+ components=[
70
+ SolutionComponent(
71
+ volume=0.50 * ureg('l'),
72
+ density=1.0 * ureg('kg/l'),
73
+ pure_substance=water,
74
+ ),
75
+ SolutionComponent(
76
+ mass=0.01 * ureg('kg'),
77
+ pure_substance=salt,
78
+ component_role='Solute',
79
+ ),
80
+ ],
81
+ )
82
+ starter_solution_archive.data = starter_solution
83
+ normalize_all(starter_solution_archive)
84
+ starter_water_concentration = starter_solution_archive.data.solvents[
85
+ 0
86
+ ].molar_concentration.calculated_concentration
87
+ starter_water_amount = starter_solution_archive.data.solvents[0].amount_of_substance
88
+ starter_salt_concentration = starter_solution_archive.data.solutes[
89
+ 0
90
+ ].molar_concentration.calculated_concentration
91
+ starter_salt_mass = starter_solution_archive.data.solutes[0].mass
92
+
93
+ assert starter_water_concentration.to('mol/l').magnitude == pytest.approx(
94
+ 55.523, rel=1e-3
95
+ )
96
+ assert starter_water_amount.to('mol').magnitude == pytest.approx(
97
+ 0.5 * 55.523, rel=1e-3
98
+ )
99
+ assert starter_salt_concentration.to('mol/l').magnitude == pytest.approx(
100
+ 0.345, rel=1e-3
101
+ )
102
+ assert starter_salt_mass.to('kg').magnitude == pytest.approx(0.01, rel=1e-3)
103
+
104
+ ## making the main solution using starter solution
105
+ main_solution_archive = parse('tests/data/test_solution.archive.yaml')[0]
106
+
107
+ # step 1: portioning the starter solution (one fifth)
108
+ main_solution_archive.data = Solution(
109
+ name='Diluted Solution',
110
+ components=[
111
+ SolutionComponentReference(
112
+ system=starter_solution,
113
+ volume=0.1 * ureg('l'),
114
+ ),
115
+ ],
116
+ )
117
+ normalize_all(main_solution_archive)
118
+ assert main_solution_archive.data.solvents[
119
+ 0
120
+ ].molar_concentration.calculated_concentration.to(
121
+ 'mol/l'
122
+ ).magnitude == pytest.approx(
123
+ starter_water_concentration.to('mol/l').magnitude, rel=1e-3
124
+ )
125
+ assert main_solution_archive.data.solvents[0].amount_of_substance.to(
126
+ 'mol'
127
+ ).magnitude == pytest.approx(starter_water_amount.to('mol').magnitude / 5, rel=1e-3)
128
+ assert main_solution_archive.data.solutes[
129
+ 0
130
+ ].molar_concentration.calculated_concentration.to(
131
+ 'mol/l'
132
+ ).magnitude == pytest.approx(
133
+ starter_salt_concentration.to('mol/l').magnitude, rel=1e-3
134
+ )
135
+ assert main_solution_archive.data.solutes[0].mass.to(
136
+ 'kg'
137
+ ).magnitude == pytest.approx(starter_salt_mass.to('kg').magnitude / 5, rel=1e-3)
138
+
139
+ # step 2: diluting the solution (double the volume of water)
140
+ main_solution_archive.data = Solution(
141
+ name='Diluted Solution',
142
+ components=[
143
+ SolutionComponentReference(
144
+ system=starter_solution,
145
+ volume=0.1 * ureg('l'),
146
+ ),
147
+ SolutionComponent(
148
+ volume=0.1 * ureg('l'),
149
+ density=1.0 * ureg('kg/l'),
150
+ pure_substance=water,
151
+ ),
152
+ ],
153
+ )
154
+ normalize_all(main_solution_archive)
155
+ assert main_solution_archive.data.solvents[
156
+ 0
157
+ ].molar_concentration.calculated_concentration.to(
158
+ 'mol/l'
159
+ ).magnitude == pytest.approx(
160
+ starter_water_concentration.to('mol/l').magnitude, rel=1e-3
161
+ )
162
+ assert main_solution_archive.data.solvents[0].amount_of_substance.to(
163
+ 'mol'
164
+ ).magnitude == pytest.approx(
165
+ (starter_water_amount.to('mol').magnitude / 5) * 2, rel=1e-3
166
+ )
167
+ assert main_solution_archive.data.solutes[
168
+ 0
169
+ ].molar_concentration.calculated_concentration.to(
170
+ 'mol/l'
171
+ ).magnitude == pytest.approx(
172
+ starter_salt_concentration.to('mol/l').magnitude / 2, rel=1e-3
173
+ )
174
+ assert main_solution_archive.data.solutes[0].mass.to(
175
+ 'kg'
176
+ ).magnitude == pytest.approx(starter_salt_mass.to('kg').magnitude / 5, rel=1e-3)
177
+
178
+ # finally, quantities in the starter solution should stay the same
179
+ # after all normalizations
180
+ assert starter_solution_archive.data.solvents[
181
+ 0
182
+ ].molar_concentration.calculated_concentration.to(
183
+ 'mol/l'
184
+ ).magnitude == pytest.approx(
185
+ starter_water_concentration.to('mol/l').magnitude, rel=1e-3
186
+ )
187
+ assert starter_solution_archive.data.solvents[0].amount_of_substance.to(
188
+ 'mol'
189
+ ).magnitude == pytest.approx(starter_water_amount.to('mol').magnitude, rel=1e-3)
190
+ assert starter_solution_archive.data.solutes[
191
+ 0
192
+ ].molar_concentration.calculated_concentration.to(
193
+ 'mol/l'
194
+ ).magnitude == pytest.approx(
195
+ starter_salt_concentration.to('mol/l').magnitude, rel=1e-3
196
+ )
197
+ assert starter_solution_archive.data.solutes[0].mass.to(
198
+ 'kg'
199
+ ).magnitude == pytest.approx(starter_salt_mass.to('kg').magnitude, rel=1e-3)
200
+
201
+
202
+ if __name__ == '__main__':
203
+ test_solution()
@@ -0,0 +1,29 @@
1
+ import glob
2
+ import os.path
3
+
4
+ import pytest
5
+ from nomad.client import normalize_all, parse
6
+
7
+ test_files = glob.glob(
8
+ os.path.join(os.path.dirname(__file__), 'data', '*.archive.yaml')
9
+ )
10
+
11
+
12
+ @pytest.mark.parametrize('test_file', test_files)
13
+ def test_schema(test_file):
14
+ entry_archive = parse(test_file)[0]
15
+ normalize_all(entry_archive)
16
+
17
+
18
+ def test_crystalline_substrate_bravais_lattice_normalization():
19
+ test_file = os.path.join(
20
+ os.path.dirname(__file__),
21
+ 'data',
22
+ 'test_crystalline_substrate.archive.yaml',
23
+ )
24
+ entry_archive = parse(test_file)[0]
25
+ normalize_all(entry_archive)
26
+
27
+ assert (
28
+ entry_archive.data.crystal_properties.bravais_lattices == 'Monoclinic Primitive'
29
+ )
@@ -1,198 +0,0 @@
1
- import pytest
2
- from nomad.client import normalize_all, parse
3
- from nomad.datamodel.metainfo.basesections import PubChemPureSubstanceSection
4
- from nomad.units import ureg
5
-
6
- from nomad_material_processing.solution.general import (
7
- Solution,
8
- SolutionComponent,
9
- SolutionComponentReference,
10
- )
11
-
12
-
13
- def test_solution_component():
14
- """
15
- Test molar concentration calculation for a solution component.
16
- Test mass calculation.
17
- """
18
- archive = parse('tests/data/test_solution_component.archive.yaml')[0]
19
- archive.data = SolutionComponent(
20
- volume=1.0 * ureg('l'),
21
- density=1.0 * ureg('kg/l'),
22
- pure_substance=PubChemPureSubstanceSection(
23
- name='Water',
24
- ),
25
- )
26
- normalize_all(archive)
27
-
28
- volume = 1 * ureg('liter')
29
- archive.data.calculate_molar_concentration(volume)
30
-
31
- assert pytest.approx(archive.data.mass, 1e-3) == 1.0 * ureg('kg')
32
- assert pytest.approx(
33
- archive.data.molar_concentration.calculated_concentration, 1e-3
34
- ) == 55.523 * ureg('mol/l')
35
-
36
-
37
- def test_solution():
38
- starter_solution_archive = parse('tests/data/test_solution.archive.yaml')[0]
39
- water = PubChemPureSubstanceSection(name='Water')
40
- salt = PubChemPureSubstanceSection(name='Sodium Chloride')
41
- starter_solution = Solution(
42
- name='Starter solution',
43
- components=[
44
- SolutionComponent(
45
- volume=0.50 * ureg('l'),
46
- density=1.0 * ureg('kg/l'),
47
- pure_substance=water,
48
- ),
49
- SolutionComponent(
50
- mass=0.01 * ureg('kg'),
51
- pure_substance=salt,
52
- component_role='Solute',
53
- ),
54
- ],
55
- )
56
- starter_solution_archive.data = starter_solution
57
- normalize_all(starter_solution_archive)
58
- starter_water_concentration = starter_solution_archive.data.solvents[
59
- 0
60
- ].molar_concentration.calculated_concentration
61
- starter_water_amount = starter_solution_archive.data.solvents[0].amount_of_substance
62
- starter_salt_concentration = starter_solution_archive.data.solutes[
63
- 0
64
- ].molar_concentration.calculated_concentration
65
- starter_salt_mass = starter_solution_archive.data.solutes[0].mass
66
-
67
- assert pytest.approx(starter_water_concentration, 1e-3) == 55.523 * ureg('mol/l')
68
- assert pytest.approx(starter_water_amount, 1e-3) == 0.5 * ureg('l') * 55.523 * ureg(
69
- 'mol/l'
70
- )
71
- assert pytest.approx(starter_salt_concentration, 1e-3) == 0.345 * ureg('mol/l')
72
- assert pytest.approx(starter_salt_mass, 1e-3) == 0.01 * ureg('kg')
73
-
74
- ## making the main solution using starter solution
75
- main_solution_archive = parse('tests/data/test_solution.archive.yaml')[0]
76
-
77
- # step 1: portioning the starter solution (one fifth)
78
- main_solution_archive.data = Solution(
79
- name='Diluted Solution',
80
- components=[
81
- SolutionComponentReference(
82
- system=starter_solution,
83
- volume=0.1 * ureg('l'),
84
- ),
85
- ],
86
- )
87
- normalize_all(main_solution_archive)
88
- assert (
89
- pytest.approx(
90
- main_solution_archive.data.solvents[
91
- 0
92
- ].molar_concentration.calculated_concentration,
93
- 1e-3,
94
- )
95
- == starter_water_concentration
96
- )
97
- assert (
98
- pytest.approx(
99
- main_solution_archive.data.solvents[0].amount_of_substance,
100
- 1e-3,
101
- )
102
- == starter_water_amount / 5
103
- )
104
- assert (
105
- pytest.approx(
106
- main_solution_archive.data.solutes[
107
- 0
108
- ].molar_concentration.calculated_concentration,
109
- 1e-3,
110
- )
111
- == starter_salt_concentration
112
- )
113
- assert (
114
- pytest.approx(main_solution_archive.data.solutes[0].mass, 1e-3)
115
- == starter_salt_mass / 5
116
- )
117
-
118
- # step 2: diluting the solution (double the volume of water)
119
- main_solution_archive.data = Solution(
120
- name='Diluted Solution',
121
- components=[
122
- SolutionComponentReference(
123
- system=starter_solution,
124
- volume=0.1 * ureg('l'),
125
- ),
126
- SolutionComponent(
127
- volume=0.1 * ureg('l'),
128
- density=1.0 * ureg('kg/l'),
129
- pure_substance=water,
130
- ),
131
- ],
132
- )
133
- normalize_all(main_solution_archive)
134
- assert (
135
- pytest.approx(
136
- main_solution_archive.data.solvents[
137
- 0
138
- ].molar_concentration.calculated_concentration,
139
- 1e-3,
140
- )
141
- == starter_water_concentration
142
- )
143
- assert (
144
- pytest.approx(
145
- main_solution_archive.data.solvents[0].amount_of_substance,
146
- 1e-3,
147
- )
148
- == (starter_water_amount / 5) * 2
149
- )
150
- assert (
151
- pytest.approx(
152
- main_solution_archive.data.solutes[
153
- 0
154
- ].molar_concentration.calculated_concentration,
155
- 1e-3,
156
- )
157
- == starter_salt_concentration / 2
158
- )
159
- assert (
160
- pytest.approx(main_solution_archive.data.solutes[0].mass, 1e-3)
161
- == starter_salt_mass / 5
162
- )
163
-
164
- # finally, quantities in the starter solution should stay the same
165
- # after all normalizations
166
- assert (
167
- pytest.approx(
168
- starter_solution_archive.data.solvents[
169
- 0
170
- ].molar_concentration.calculated_concentration,
171
- 1e-3,
172
- )
173
- == starter_water_concentration
174
- )
175
- assert (
176
- pytest.approx(
177
- starter_solution_archive.data.solvents[0].amount_of_substance,
178
- 1e-3,
179
- )
180
- == starter_water_amount
181
- )
182
- assert (
183
- pytest.approx(
184
- starter_solution_archive.data.solutes[
185
- 0
186
- ].molar_concentration.calculated_concentration,
187
- 1e-3,
188
- )
189
- == starter_salt_concentration
190
- )
191
- assert (
192
- pytest.approx(starter_solution_archive.data.solutes[0].mass, 1e-3)
193
- == starter_salt_mass
194
- )
195
-
196
-
197
- if __name__ == '__main__':
198
- test_solution()
@@ -1,15 +0,0 @@
1
- import glob
2
- import os.path
3
-
4
- import pytest
5
- from nomad.client import normalize_all, parse
6
-
7
- test_files = glob.glob(
8
- os.path.join(os.path.dirname(__file__), 'data', '*.archive.yaml')
9
- )
10
-
11
-
12
- @pytest.mark.parametrize('test_file', test_files)
13
- def test_schema(test_file):
14
- entry_archive = parse(test_file)[0]
15
- normalize_all(entry_archive)