emmet-core 0.87.0.dev3__tar.gz → 0.87.0.dev5__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 (221) hide show
  1. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/PKG-INFO +1 -1
  2. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/material.py +2 -2
  3. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/tasks.py +1 -2
  4. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/thermo.py +1 -1
  5. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/computed_entries_adapter.py +29 -17
  6. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/phase_diagram_adapter.py +6 -0
  7. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/typing.py +29 -9
  8. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/vasp/material.py +14 -11
  9. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet_core.egg-info/PKG-INFO +1 -1
  10. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/dev_scripts/gen_api_field_test.py +0 -0
  11. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/dev_scripts/generate_enums.py +0 -0
  12. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/dev_scripts/generate_identifier_exclude_list.py +0 -0
  13. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/__init__.py +0 -0
  14. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/_forbidden_alpha_id.py +0 -0
  15. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/_general_store.py +0 -0
  16. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/_messages.py +0 -0
  17. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/_user_settings.py +0 -0
  18. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/absorption.py +0 -0
  19. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/alloys.py +0 -0
  20. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/arrow.py +0 -0
  21. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/band_theory.py +0 -0
  22. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/base.py +0 -0
  23. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/bonds.py +0 -0
  24. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/charge_density.py +0 -0
  25. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/chemenv.py +0 -0
  26. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/corrected_entries.py +0 -0
  27. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/defect.py +0 -0
  28. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/disorder.py +0 -0
  29. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/dois.py +0 -0
  30. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/elasticity.py +0 -0
  31. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/elasticity_legacy.py +0 -0
  32. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/electrode.py +0 -0
  33. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/electronic_structure.py +0 -0
  34. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/eos.py +0 -0
  35. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/feff/__init__.py +0 -0
  36. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/feff/task.py +0 -0
  37. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/fermi.py +0 -0
  38. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/find_structure.py +0 -0
  39. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/formula_autocomplete.py +0 -0
  40. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/grain_boundary.py +0 -0
  41. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/magnetism.py +0 -0
  42. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/material_property.py +0 -0
  43. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/math.py +0 -0
  44. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/ml.py +0 -0
  45. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/mobility/__init__.py +0 -0
  46. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/mobility/migrationgraph.py +0 -0
  47. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/molecules/__init__.py +0 -0
  48. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/molecules/atomic.py +0 -0
  49. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/molecules/bonds.py +0 -0
  50. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/molecules/electric.py +0 -0
  51. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/molecules/metal_binding.py +0 -0
  52. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/molecules/molecule_property.py +0 -0
  53. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/molecules/orbitals.py +0 -0
  54. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/molecules/redox.py +0 -0
  55. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/molecules/summary.py +0 -0
  56. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/molecules/thermo.py +0 -0
  57. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/molecules/trajectory.py +0 -0
  58. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/molecules/vibration.py +0 -0
  59. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/molecules_jcesr.py +0 -0
  60. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/mpcomplete.py +0 -0
  61. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/mpid.py +0 -0
  62. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/mpid_ext.py +0 -0
  63. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/neb.py +0 -0
  64. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/openff/__init__.py +0 -0
  65. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/openff/tasks.py +0 -0
  66. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/openmm/__init__.py +0 -0
  67. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/openmm/calculations.py +0 -0
  68. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/openmm/tasks.py +0 -0
  69. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/optimade.py +0 -0
  70. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/oxidation_states.py +0 -0
  71. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/phonon.py +0 -0
  72. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/polar.py +0 -0
  73. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/provenance.py +0 -0
  74. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/py.typed +0 -0
  75. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/qc_tasks.py +0 -0
  76. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/qchem/__init__.py +0 -0
  77. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/qchem/calc_types/__init__.py +0 -0
  78. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/qchem/calc_types/calc_types.py +0 -0
  79. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/qchem/calc_types/calc_types.yaml +0 -0
  80. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/qchem/calc_types/em_utils.py +0 -0
  81. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/qchem/calc_types/enums.py +0 -0
  82. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/qchem/calc_types/utils.py +0 -0
  83. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/qchem/calculation.py +0 -0
  84. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/qchem/molecule.py +0 -0
  85. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/qchem/task.py +0 -0
  86. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/robocrys.py +0 -0
  87. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/settings.py +0 -0
  88. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/similarity.py +0 -0
  89. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/spectrum.py +0 -0
  90. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/structure.py +0 -0
  91. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/structure_group.py +0 -0
  92. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/substrates.py +0 -0
  93. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/summary.py +0 -0
  94. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/surface_properties.py +0 -0
  95. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/symmetry.py +0 -0
  96. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/synthesis/__init__.py +0 -0
  97. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/synthesis/core.py +0 -0
  98. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/synthesis/materials.py +0 -0
  99. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/synthesis/operations.py +0 -0
  100. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/synthesis/reaction.py +0 -0
  101. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/task.py +0 -0
  102. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/testing_utils.py +0 -0
  103. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/trajectory.py +0 -0
  104. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/__init__.py +0 -0
  105. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/enums.py +0 -0
  106. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/__init__.py +0 -0
  107. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/alloy_adapter.py +0 -0
  108. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/bader.py +0 -0
  109. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/balanced_reaction_adapter.py +0 -0
  110. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/bandstructure_symm_line_adapter.py +0 -0
  111. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/compatibility_adapter.py +0 -0
  112. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/composition_adapter.py +0 -0
  113. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/defect_adapter.py +0 -0
  114. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/diffraction_pattern_adapter.py +0 -0
  115. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/dos_adapter.py +0 -0
  116. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/electrode_adapter.py +0 -0
  117. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/element_adapter.py +0 -0
  118. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/grain_boundary_adapter.py +0 -0
  119. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/ir_dielectric_tensor_adapter.py +0 -0
  120. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/kpoint_adapter.py +0 -0
  121. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/kpoints_adapter.py +0 -0
  122. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/lattice_adapter.py +0 -0
  123. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/mixing_scheme_adapter.py +0 -0
  124. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/outcar_adapter.py +0 -0
  125. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/phonon_adapter.py +0 -0
  126. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/poscar_adapter.py +0 -0
  127. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/properties.py +0 -0
  128. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/sites_adapter.py +0 -0
  129. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/species_adapter.py +0 -0
  130. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/structure_adapter.py +0 -0
  131. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/structure_graph_adapter.py +0 -0
  132. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/structure_matcher_adapter.py +0 -0
  133. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/trajectory_adapter.py +0 -0
  134. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/types/pymatgen_types/xas_adapter.py +0 -0
  135. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/utils.py +0 -0
  136. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/vasp/__init__.py +0 -0
  137. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/vasp/calc_types/__init__.py +0 -0
  138. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/vasp/calc_types/calc_types.yaml +0 -0
  139. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/vasp/calc_types/enums.py +0 -0
  140. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/vasp/calc_types/utils.py +0 -0
  141. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/vasp/calculation.py +0 -0
  142. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/vasp/models.py +0 -0
  143. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/vasp/task_valid.py +0 -0
  144. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/vasp/utils.py +0 -0
  145. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/vasp/validation.py +0 -0
  146. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/vasp/validation_legacy.py +0 -0
  147. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/xas.py +0 -0
  148. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet/core/xrd.py +0 -0
  149. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet_core.egg-info/SOURCES.txt +0 -0
  150. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet_core.egg-info/dependency_links.txt +0 -0
  151. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet_core.egg-info/requires.txt +0 -0
  152. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/emmet_core.egg-info/top_level.txt +0 -0
  153. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/pyproject.toml +0 -0
  154. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/requirements/deployment.txt +0 -0
  155. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/requirements/ubuntu-latest_py3.11.txt +0 -0
  156. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/requirements/ubuntu-latest_py3.11_extras.txt +0 -0
  157. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/requirements/ubuntu-latest_py3.12.txt +0 -0
  158. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/requirements/ubuntu-latest_py3.12_extras.txt +0 -0
  159. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/requirements/ubuntu-latest_py3.13.txt +0 -0
  160. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/requirements/ubuntu-latest_py3.13_extras.txt +0 -0
  161. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/setup.cfg +0 -0
  162. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/__init__.py +0 -0
  163. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/conftest.py +0 -0
  164. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/conftest_qchem.py +0 -0
  165. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/mobility/test_migrationgraph.py +0 -0
  166. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/molecules/__init__.py +0 -0
  167. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/molecules/test_atomic.py +0 -0
  168. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/molecules/test_bonds.py +0 -0
  169. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/molecules/test_electric.py +0 -0
  170. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/molecules/test_metal_binding.py +0 -0
  171. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/molecules/test_mol_thermo.py +0 -0
  172. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/molecules/test_orbitals.py +0 -0
  173. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/molecules/test_redox.py +0 -0
  174. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/molecules/test_summary.py +0 -0
  175. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/molecules/test_trajectory.py +0 -0
  176. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/molecules/test_vibration.py +0 -0
  177. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/openmm_md/__init__.py +0 -0
  178. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/openmm_md/test_tasks.py +0 -0
  179. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/qchem/__init__.py +0 -0
  180. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/qchem/test_calc_types.py +0 -0
  181. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/qchem/test_molecules.py +0 -0
  182. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/qchem/test_qchem.py +0 -0
  183. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_absorption.py +0 -0
  184. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_arrow.py +0 -0
  185. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_band_theory.py +0 -0
  186. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_calculation.py +0 -0
  187. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_chemenv.py +0 -0
  188. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_defects.py +0 -0
  189. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_elasticity.py +0 -0
  190. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_electrodes.py +0 -0
  191. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_electronic_structure.py +0 -0
  192. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_magnetism.py +0 -0
  193. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_ml.py +0 -0
  194. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_model_fields.py +0 -0
  195. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_molecule_metadata.py +0 -0
  196. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_mpid.py +0 -0
  197. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_mpid_ext.py +0 -0
  198. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_neb.py +0 -0
  199. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_optimade.py +0 -0
  200. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_oxidation_states.py +0 -0
  201. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_phonon.py +0 -0
  202. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_polar.py +0 -0
  203. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_provenance.py +0 -0
  204. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_qc_task.py +0 -0
  205. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_robocrys.py +0 -0
  206. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_settings.py +0 -0
  207. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_similarity.py +0 -0
  208. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_structure_group.py +0 -0
  209. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_structure_metadata.py +0 -0
  210. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_task.py +0 -0
  211. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_thermo.py +0 -0
  212. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_trajectory.py +0 -0
  213. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_utils.py +0 -0
  214. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_xas.py +0 -0
  215. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/test_xrd.py +0 -0
  216. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/types/test_enums.py +0 -0
  217. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/types/test_typing.py +0 -0
  218. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/vasp/test_calc_types.py +0 -0
  219. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/vasp/test_materials.py +0 -0
  220. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/vasp/test_utils.py +0 -0
  221. {emmet_core-0.87.0.dev3 → emmet_core-0.87.0.dev5}/tests/vasp/test_vasp.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: emmet-core
3
- Version: 0.87.0.dev3
3
+ Version: 0.87.0.dev5
4
4
  Summary: Core Emmet Library
5
5
  Author-email: The Materials Project <feedback@materialsproject.org>
6
6
  License: Modified BSD
@@ -16,7 +16,7 @@ from emmet.core.types.pymatgen_types.structure_adapter import (
16
16
  MoleculeType,
17
17
  StructureType,
18
18
  )
19
- from emmet.core.types.typing import DateTimeType, IdentifierType
19
+ from emmet.core.types.typing import DateTimeType, IdentifierType, MaterialIdentifierType
20
20
 
21
21
  if TYPE_CHECKING:
22
22
 
@@ -46,7 +46,7 @@ class BasePropertyMetadata(StructureMetadata, EmmetBaseModel):
46
46
  extended, not used directly
47
47
  """
48
48
 
49
- material_id: IdentifierType | None = Field(
49
+ material_id: MaterialIdentifierType | None = Field(
50
50
  None,
51
51
  description="The Materials Project ID of the material, used as a universal reference across property documents."
52
52
  "This comes in the form: mp-******.",
@@ -316,8 +316,7 @@ class CoreTaskDoc(StructureMetadata):
316
316
  )
317
317
  task_id: IdentifierType | None = Field(
318
318
  None,
319
- description="The (task) ID of this calculation, used as a universal reference across property documents."
320
- "This comes in the form: mp-******.",
319
+ description="The (task) ID of this calculation, used as a universal reference across property documents.",
321
320
  )
322
321
  task_type: TaskType | CalcType | None = Field(
323
322
  None, description="The type of calculation."
@@ -38,7 +38,7 @@ class DecompositionProduct(BaseModel):
38
38
  )
39
39
  amount: float | None = Field(
40
40
  None,
41
- description="The amount of the decomposed material by formula units this this material decomposes to.",
41
+ description="The amount of the decomposed material by formula units this material decomposes to.",
42
42
  )
43
43
 
44
44
 
@@ -1,15 +1,17 @@
1
1
  from typing import Annotated, Any, TypeVar
2
2
 
3
3
  import orjson
4
- from pydantic import BeforeValidator, WrapSerializer
4
+ from pydantic import BeforeValidator, TypeAdapter, WrapSerializer
5
5
  from pymatgen.entries.computed_entries import ComputedEntry, ComputedStructureEntry
6
6
  from typing_extensions import NotRequired, TypedDict
7
7
 
8
+ from emmet.core.mpid_ext import ThermoID
8
9
  from emmet.core.types.pymatgen_types.element_adapter import ElementType
9
10
  from emmet.core.types.pymatgen_types.structure_adapter import (
10
- TypedStructureDict,
11
+ StructureType,
11
12
  pop_empty_structure_keys,
12
13
  )
14
+ from emmet.core.types.typing import IdentifierType, MaterialIdentifierType
13
15
  from emmet.core.vasp.calculation import PotcarSpec
14
16
 
15
17
  # TypedEnergyAdjustmentDict = TypedDict(
@@ -59,20 +61,20 @@ from emmet.core.vasp.calculation import PotcarSpec
59
61
 
60
62
 
61
63
  class TypedCEDataDict(TypedDict):
62
- oxide_type: str
63
- aspherical: bool
64
- last_updated: str
65
- task_id: str
66
- material_id: str
67
- oxidation_states: dict[ElementType, float]
68
- license: str
69
- run_type: str
64
+ oxide_type: NotRequired[str | None]
65
+ aspherical: NotRequired[bool | None]
66
+ last_updated: NotRequired[str | None]
67
+ task_id: NotRequired[IdentifierType | None]
68
+ material_id: NotRequired[MaterialIdentifierType | None]
69
+ oxidation_states: NotRequired[dict[ElementType, float] | None]
70
+ license: NotRequired[str | None]
71
+ run_type: NotRequired[str | None]
70
72
 
71
73
 
72
74
  class TypedCEParameterDict(TypedDict):
73
- potcar_spec: list[PotcarSpec]
74
- run_type: str
75
- is_hubbard: bool
75
+ potcar_spec: NotRequired[list[PotcarSpec] | None]
76
+ run_type: NotRequired[str | None]
77
+ is_hubbard: NotRequired[bool | None]
76
78
  hubbards: NotRequired[dict[str, float] | None] # type: ignore[type-arg]
77
79
 
78
80
 
@@ -83,14 +85,14 @@ TypedComputedEntryDict = TypedDict(
83
85
  "@class": str,
84
86
  "energy": float,
85
87
  "composition": dict[ElementType, float],
86
- "entry_id": str,
88
+ "entry_id": ThermoID,
87
89
  "correction": float,
88
90
  # "energy_adjustments": list[
89
91
  # TypedCompositionEnergyAdjustmentDict
90
92
  # | TypedEnergyAdjustmentDict
91
93
  # | TypedTemperatureEnergyAdjustmentDict
92
94
  # ],
93
- "energy_adjustments": str,
95
+ "energy_adjustments": NotRequired[str | None],
94
96
  "parameters": TypedCEParameterDict,
95
97
  "data": TypedCEDataDict,
96
98
  },
@@ -98,7 +100,7 @@ TypedComputedEntryDict = TypedDict(
98
100
 
99
101
 
100
102
  class TypedComputedStructureEntryDict(TypedComputedEntryDict):
101
- structure: TypedStructureDict
103
+ structure: StructureType
102
104
 
103
105
 
104
106
  ComputedEntryTypeVar = TypeVar(
@@ -116,6 +118,9 @@ ComputedStructureEntryTypeVar = TypeVar(
116
118
 
117
119
 
118
120
  def entry_serializer(entry, nxt, info) -> dict[str, Any]:
121
+ # need to beat pmg serialization to get correct id serialization
122
+ entry.data = TypeAdapter(TypedCEDataDict).dump_python(entry.data)
123
+
119
124
  default_serialized_object = nxt(entry.as_dict(), info)
120
125
 
121
126
  format = info.context.get("format") if info.context else None
@@ -142,11 +147,18 @@ def entry_deserializer(entry: dict[str, Any] | ComputedEntry | ComputedStructure
142
147
  match entry["@class"]:
143
148
  case "ComputedEntry":
144
149
  entry_cls = ComputedEntry
150
+ entry_type = TypedComputedEntryDict
145
151
  case "ComputedStructureEntry":
146
152
  entry_cls = ComputedStructureEntry
153
+ entry_type = TypedComputedStructureEntryDict
147
154
  entry = pop_cse_empty_keys(entry)
148
155
 
149
- if isinstance(entry["energy_adjustments"], str):
156
+ # must be before 'energy_adjustments' deserialization
157
+ entry = TypeAdapter(entry_type).validate_python(entry)
158
+
159
+ if "energy_adjustments" in entry and isinstance(
160
+ entry["energy_adjustments"], str
161
+ ):
150
162
  entry["energy_adjustments"] = orjson.loads(entry["energy_adjustments"])
151
163
 
152
164
  return entry_cls.from_dict(entry) # type: ignore[arg-type]
@@ -101,9 +101,15 @@ def phase_diagram_serializer(phase_diagram, nxt, info) -> dict[str, Any]:
101
101
  entry.as_dict() for entry in default_serialized_object["computed_data"][key]
102
102
  ]
103
103
 
104
+ # ndarray -> list[list[int]]
104
105
  for simplex in default_serialized_object["computed_data"]["simplexes"]:
105
106
  simplex["coords"] = simplex["coords"].tolist()
106
107
 
108
+ # ndarray -> list[list[float]]
109
+ default_serialized_object["computed_data"]["qhull_data"] = (
110
+ default_serialized_object["computed_data"]["qhull_data"].tolist()
111
+ )
112
+
107
113
  format = info.context.get("format") if info.context else None
108
114
  if format == "arrow":
109
115
  phase_diagram_serde(
@@ -11,8 +11,9 @@ from __future__ import annotations
11
11
 
12
12
  import os
13
13
  from datetime import datetime
14
+ from functools import partial
14
15
  from pathlib import Path
15
- from typing import TYPE_CHECKING, Annotated, Union, Any
16
+ from typing import TYPE_CHECKING, Annotated, Any, Union
16
17
 
17
18
  import orjson
18
19
  from pydantic import BeforeValidator, Field, PlainSerializer, WrapSerializer
@@ -52,22 +53,41 @@ for why this separate class is necesary instead of `DateTimeType | None`
52
53
  """
53
54
 
54
55
 
55
- def _fault_tolerant_id_serde(val: Any, serialize: bool = False) -> Any:
56
+ def _fault_tolerant_id_serde(
57
+ val: Any,
58
+ legacy: bool = False,
59
+ serialize: bool = False,
60
+ **kwargs,
61
+ ) -> Any:
56
62
  """Needed for the API and safe de-/serialization behavior."""
57
63
  try:
58
- alpha_id = AlphaID(val)
64
+ alpha_id = AlphaID(val, **kwargs)
59
65
  if serialize:
60
66
  return str(alpha_id)
61
- return alpha_id.formatted
67
+ return alpha_id.formatted if legacy else alpha_id
62
68
  except Exception:
63
69
  return val
64
70
 
65
71
 
66
- IdentifierType: TypeAlias = Annotated[
67
- Union[MPID, AlphaID],
68
- BeforeValidator(_fault_tolerant_id_serde),
69
- PlainSerializer(lambda x: _fault_tolerant_id_serde(x, serialize=True)),
70
- ]
72
+ _id_base_metadata = (BeforeValidator(_fault_tolerant_id_serde),)
73
+
74
+
75
+ def _make_id_type(render_order, **kwargs) -> Annotated:
76
+ match render_order:
77
+ case 0:
78
+ _order = Union[AlphaID, MPID]
79
+ case 1:
80
+ _order = Union[MPID, AlphaID]
81
+
82
+ return Annotated[
83
+ _order,
84
+ BeforeValidator(partial(_fault_tolerant_id_serde, **kwargs)),
85
+ PlainSerializer(partial(_fault_tolerant_id_serde, serialize=True, **kwargs)),
86
+ ]
87
+
88
+
89
+ IdentifierType: TypeAlias = _make_id_type(0, padlen=8)
90
+ MaterialIdentifierType: TypeAlias = _make_id_type(1, legacy=True, prefix="mp", padlen=8)
71
91
  """MPID / AlphaID serde."""
72
92
 
73
93
 
@@ -5,11 +5,12 @@ from typing import Mapping
5
5
  from pydantic import BaseModel, Field
6
6
  from pymatgen.analysis.structure_analyzer import SpacegroupAnalyzer, oxide_type
7
7
  from pymatgen.analysis.structure_matcher import StructureMatcher
8
- from pymatgen.entries.computed_entries import ComputedStructureEntry
9
8
 
10
9
  from emmet.core.base import EmmetMeta
11
10
  from emmet.core.material import MaterialsDoc as CoreMaterialsDoc
12
11
  from emmet.core.material import PropertyOrigin
12
+ from emmet.core.mpid import AlphaID
13
+ from emmet.core.mpid_ext import ThermoID
13
14
  from emmet.core.settings import EmmetSettings
14
15
  from emmet.core.tasks import TaskDoc
15
16
  from emmet.core.types.pymatgen_types.computed_entries_adapter import (
@@ -105,7 +106,7 @@ class MaterialsDoc(CoreMaterialsDoc):
105
106
  if use_statics:
106
107
  possible_mat_ids += [task.task_id for task in statics]
107
108
 
108
- material_id = min(possible_mat_ids)
109
+ material_id = AlphaID(min(possible_mat_ids), prefix="mp")
109
110
 
110
111
  # Always prefer a static over a structure opt
111
112
  structure_task_quality_scores = {"Structure Optimization": 1, "Static": 2}
@@ -207,10 +208,12 @@ class MaterialsDoc(CoreMaterialsDoc):
207
208
 
208
209
  if relevant_calcs:
209
210
  best_task_doc = relevant_calcs[0]
210
- entry = ComputedStructureEntry(
211
- composition=best_task_doc.output.structure.composition,
212
- correction=0.0,
213
- data={
211
+ entry = {
212
+ "@class": "ComputedStructureEntry",
213
+ "@module": "pymatgen.entries.computed_entries",
214
+ "composition": best_task_doc.output.structure.composition,
215
+ "correction": 0.0,
216
+ "data": {
214
217
  "aspherical": best_task_doc.input.parameters.get(
215
218
  "LASPH", False
216
219
  ),
@@ -219,9 +222,9 @@ class MaterialsDoc(CoreMaterialsDoc):
219
222
  "material_id": material_id,
220
223
  "task_id": best_task_doc.task_id,
221
224
  },
222
- energy=best_task_doc.output.energy,
223
- entry_id="{}-{}".format(material_id, rt.value),
224
- parameters={
225
+ "energy": best_task_doc.output.energy,
226
+ "entry_id": ThermoID(identifier=material_id, suffix=rt),
227
+ "parameters": {
225
228
  "hubbards": best_task_doc.input.hubbards,
226
229
  "is_hubbard": best_task_doc.input.is_hubbard,
227
230
  "potcar_spec": (
@@ -231,8 +234,8 @@ class MaterialsDoc(CoreMaterialsDoc):
231
234
  ),
232
235
  "run_type": str(best_task_doc.run_type),
233
236
  },
234
- structure=best_task_doc.output.structure,
235
- )
237
+ "structure": best_task_doc.output.structure,
238
+ }
236
239
  entries[rt] = entry
237
240
 
238
241
  if not any(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: emmet-core
3
- Version: 0.87.0.dev3
3
+ Version: 0.87.0.dev5
4
4
  Summary: Core Emmet Library
5
5
  Author-email: The Materials Project <feedback@materialsproject.org>
6
6
  License: Modified BSD