@mat3ra/made 2026.8.13-0 → 2026.8.26-0
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.
- package/package.json +9 -5
- package/.babelrc +0 -10
- package/.eslintrc.json +0 -11
- package/.gitattributes +0 -1
- package/.husky/post-checkout +0 -3
- package/.husky/post-commit +0 -3
- package/.husky/post-merge +0 -3
- package/.husky/pre-commit +0 -6
- package/.husky/pre-push +0 -3
- package/.mocharc.json +0 -5
- package/.pre-commit-config.yaml +0 -26
- package/.prettierignore +0 -2
- package/.prettierrc +0 -6
- package/AGENTS.md +0 -133
- package/MANIFEST.in +0 -1
- package/data/constants.json +0 -13
- package/data/reciprocal_paths.json +0 -111
- package/images/made/tools/tools_diagram_general.png +0 -3
- package/images/made/tools/tools_diagram_interface.png +0 -3
- package/pyproject.toml +0 -123
- package/scripts/generate-mixins.ts +0 -28
- package/src/__init__.py +0 -0
- package/src/js/Material.ts +0 -618
- package/src/js/basis/basis.ts +0 -634
- package/src/js/basis/constrained_basis.ts +0 -115
- package/src/js/basis/coordinates.ts +0 -92
- package/src/js/basis/elements.ts +0 -24
- package/src/js/basis/helpers.ts +0 -20
- package/src/js/basis/labels.ts +0 -6
- package/src/js/cell/cell.ts +0 -149
- package/src/js/cell/conventional_cell.ts +0 -86
- package/src/js/cell/primitive_cell.ts +0 -166
- package/src/js/constants/molecule.ts +0 -18
- package/src/js/constants.ts +0 -4
- package/src/js/constraints/constraints.ts +0 -45
- package/src/js/generated/MaterialSchemaMixin.ts +0 -79
- package/src/js/lattice/lattice.ts +0 -308
- package/src/js/lattice/lattice_types.ts +0 -134
- package/src/js/lattice/reciprocal/lattice_reciprocal.ts +0 -206
- package/src/js/lattice/reciprocal/paths.ts +0 -39
- package/src/js/lattice/reciprocal/symmetry_points.ts +0 -886
- package/src/js/lattice/unit_cell.ts +0 -66
- package/src/js/made.ts +0 -62
- package/src/js/parsers/cif.ts +0 -25
- package/src/js/parsers/errors.ts +0 -6
- package/src/js/parsers/espresso.ts +0 -29
- package/src/js/parsers/native_format_parsers.ts +0 -52
- package/src/js/parsers/parsers.ts +0 -13
- package/src/js/parsers/poscar.ts +0 -218
- package/src/js/parsers/xyz.ts +0 -190
- package/src/js/parsers/xyz_combinatorial_basis.ts +0 -268
- package/src/js/tools/basis.ts +0 -131
- package/src/js/tools/cell.ts +0 -40
- package/src/js/tools/index.ts +0 -11
- package/src/js/tools/material.ts +0 -64
- package/src/js/tools/supercell.ts +0 -89
- package/src/js/tools/surface.ts +0 -213
- package/src/py/__init__.py +0 -0
- package/src/py/mat3ra/__init__.py +0 -1
- package/src/py/mat3ra/made/__init__.py +0 -7
- package/src/py/mat3ra/made/basis/__init__.py +0 -255
- package/src/py/mat3ra/made/basis/coordinates.py +0 -43
- package/src/py/mat3ra/made/cell/__init__.py +0 -55
- package/src/py/mat3ra/made/cell/primitive_cell.py +0 -156
- package/src/py/mat3ra/made/data_helper.py +0 -5
- package/src/py/mat3ra/made/lattice.py +0 -195
- package/src/py/mat3ra/made/material.py +0 -135
- package/src/py/mat3ra/made/metadata.py +0 -45
- package/src/py/mat3ra/made/reciprocal/__init__.py +0 -5
- package/src/py/mat3ra/made/reciprocal/lattice_reciprocal.py +0 -147
- package/src/py/mat3ra/made/reciprocal/paths.py +0 -30
- package/src/py/mat3ra/made/reciprocal/symmetry_points.py +0 -385
- package/src/py/mat3ra/made/tools/README.md +0 -173
- package/src/py/mat3ra/made/tools/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/analyze/__init__.py +0 -31
- package/src/py/mat3ra/made/tools/analyze/basis/__init__.py +0 -3
- package/src/py/mat3ra/made/tools/analyze/basis/analyzer.py +0 -50
- package/src/py/mat3ra/made/tools/analyze/build_metadata_analyzer.py +0 -32
- package/src/py/mat3ra/made/tools/analyze/build_metadata_analyzer_factory.py +0 -31
- package/src/py/mat3ra/made/tools/analyze/coordination.py +0 -56
- package/src/py/mat3ra/made/tools/analyze/crystal_site/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/analyze/crystal_site/adatom_crystal_site_material_analyzer.py +0 -35
- package/src/py/mat3ra/made/tools/analyze/crystal_site/adatom_material_analyzer.py +0 -49
- package/src/py/mat3ra/made/tools/analyze/crystal_site/crystal_site_analyzer.py +0 -65
- package/src/py/mat3ra/made/tools/analyze/crystal_site/voronoi_crystal_site_analyzer.py +0 -47
- package/src/py/mat3ra/made/tools/analyze/enums.py +0 -33
- package/src/py/mat3ra/made/tools/analyze/fingerprint/__init__.py +0 -4
- package/src/py/mat3ra/made/tools/analyze/fingerprint/layers/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/analyze/fingerprint/layers/layered_fingerprint_along_axis.py +0 -83
- package/src/py/mat3ra/made/tools/analyze/fingerprint/layers/unique_element_string_per_layer.py +0 -9
- package/src/py/mat3ra/made/tools/analyze/interface/__init__.py +0 -20
- package/src/py/mat3ra/made/tools/analyze/interface/commensurate.py +0 -156
- package/src/py/mat3ra/made/tools/analyze/interface/enums.py +0 -60
- package/src/py/mat3ra/made/tools/analyze/interface/grain_boundary.py +0 -80
- package/src/py/mat3ra/made/tools/analyze/interface/simple.py +0 -251
- package/src/py/mat3ra/made/tools/analyze/interface/twisted_nanoribbons.py +0 -91
- package/src/py/mat3ra/made/tools/analyze/interface/utils/__init__.py +0 -77
- package/src/py/mat3ra/made/tools/analyze/interface/utils/holders.py +0 -14
- package/src/py/mat3ra/made/tools/analyze/interface/utils/vector.py +0 -56
- package/src/py/mat3ra/made/tools/analyze/interface/zsl.py +0 -259
- package/src/py/mat3ra/made/tools/analyze/interface_material.py +0 -45
- package/src/py/mat3ra/made/tools/analyze/lattice/__init__.py +0 -2
- package/src/py/mat3ra/made/tools/analyze/lattice/analyzer.py +0 -126
- package/src/py/mat3ra/made/tools/analyze/lattice/helpers.py +0 -31
- package/src/py/mat3ra/made/tools/analyze/lattice_lines.py +0 -30
- package/src/py/mat3ra/made/tools/analyze/lattice_planes.py +0 -192
- package/src/py/mat3ra/made/tools/analyze/lattice_swap_analyzer.py +0 -105
- package/src/py/mat3ra/made/tools/analyze/material.py +0 -276
- package/src/py/mat3ra/made/tools/analyze/other.py +0 -434
- package/src/py/mat3ra/made/tools/analyze/rdf.py +0 -74
- package/src/py/mat3ra/made/tools/analyze/slab.py +0 -76
- package/src/py/mat3ra/made/tools/analyze/solid_solution_analyzer.py +0 -171
- package/src/py/mat3ra/made/tools/analyze/terrace.py +0 -105
- package/src/py/mat3ra/made/tools/analyze/utils.py +0 -162
- package/src/py/mat3ra/made/tools/bond_directions/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/bond_directions/bond_directions.py +0 -150
- package/src/py/mat3ra/made/tools/bond_directions/bond_directions_for_element_list.py +0 -7
- package/src/py/mat3ra/made/tools/bond_directions/bond_directions_templates_enum.py +0 -8
- package/src/py/mat3ra/made/tools/bond_directions/bond_directions_templates_for_element.py +0 -16
- package/src/py/mat3ra/made/tools/build/__init__.py +0 -25
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/heterostructure/__init__.py +0 -7
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/heterostructure/helpers.py +0 -59
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/heterostructure/types.py +0 -26
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/heterostructure/utils.py +0 -139
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/__init__.py +0 -47
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/__init__.py +0 -11
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/build_parameters.py +0 -5
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/builder.py +0 -164
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/configuration.py +0 -48
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/base/helpers.py +0 -134
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/commensurate/__init__.py +0 -6
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/commensurate/helpers.py +0 -157
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/enums.py +0 -7
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/twisted/__init__.py +0 -7
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/twisted/configuration.py +0 -13
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/twisted/helpers.py +0 -70
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/utils.py +0 -87
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/zsl/__init__.py +0 -6
- package/src/py/mat3ra/made/tools/build/compound_pristine_structures/two_dimensional/interface/zsl/helpers.py +0 -129
- package/src/py/mat3ra/made/tools/build/defective_structures/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/build_parameters.py +0 -12
- package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/builder.py +0 -17
- package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/configuration.py +0 -40
- package/src/py/mat3ra/made/tools/build/defective_structures/one_dimensional/grain_boundary_linear/helpers.py +0 -82
- package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/__init__.py +0 -1
- package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/__init__.py +0 -9
- package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/builder.py +0 -37
- package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/configuration.py +0 -30
- package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/enums.py +0 -8
- package/src/py/mat3ra/made/tools/build/defective_structures/three_dimensional/solid_solution/helpers.py +0 -76
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/builder.py +0 -11
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/configuration.py +0 -18
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/helpers.py +0 -137
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/types.py +0 -22
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/grain_boundary_planar/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/grain_boundary_planar/builder.py +0 -28
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/grain_boundary_planar/configuration.py +0 -55
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/grain_boundary_planar/helpers.py +0 -75
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/island/builder.py +0 -15
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/island/configuration.py +0 -16
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/island/helpers.py +0 -116
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/terrace/build_parameters.py +0 -10
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/terrace/builder.py +0 -30
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/terrace/configuration.py +0 -11
- package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/terrace/helpers.py +0 -78
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/pair_defect/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/pair_defect/builder.py +0 -31
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/pair_defect/configuration.py +0 -45
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/pair_defect/helpers.py +0 -80
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/__init__.py +0 -40
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/atom_placement_method_enum.py +0 -14
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/base/__init__.py +0 -7
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/base/builder.py +0 -42
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/base/configuration.py +0 -27
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/complex_defect_type_enum.py +0 -5
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/factories.py +0 -69
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/helpers.py +0 -92
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/__init__.py +0 -7
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/builder.py +0 -8
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/configuration.py +0 -29
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/helpers.py +0 -48
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/interstitial/interstitial_placement_method_enum.py +0 -8
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/point_defect_type_enum.py +0 -8
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/__init__.py +0 -7
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/builder.py +0 -6
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/configuration.py +0 -41
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/helpers.py +0 -43
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/substitutional/substitution_placement_method_enum.py +0 -7
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/types.py +0 -24
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/__init__.py +0 -7
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/builder.py +0 -19
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/configuration.py +0 -27
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/helpers.py +0 -42
- package/src/py/mat3ra/made/tools/build/defective_structures/zero_dimensional/point_defect/vacancy/vacancy_placement_method_enum.py +0 -7
- package/src/py/mat3ra/made/tools/build/pristine_structures/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/pristine_structures/three_dimensional/ideal_crystal/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/pristine_structures/three_dimensional/ideal_crystal/builder.py +0 -80
- package/src/py/mat3ra/made/tools/build/pristine_structures/three_dimensional/ideal_crystal/configurations.py +0 -22
- package/src/py/mat3ra/made/tools/build/pristine_structures/three_dimensional/ideal_crystal/helpers.py +0 -40
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/__init__.py +0 -29
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/build_parameters.py +0 -5
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/builders.py +0 -56
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/configuration.py +0 -33
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanoribbon/helpers.py +0 -76
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/__init__.py +0 -11
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/build_parameters.py +0 -9
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/builders.py +0 -83
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/configuration.py +0 -35
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/nanotape/helpers.py +0 -62
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/__init__.py +0 -9
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/build_parameters.py +0 -8
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/builder.py +0 -42
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/configuration.py +0 -99
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/helpers.py +0 -95
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/termination_utils.py +0 -14
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab/utils.py +0 -61
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab_strained_supercell/builder.py +0 -22
- package/src/py/mat3ra/made/tools/build/pristine_structures/two_dimensional/slab_strained_supercell/configuration.py +0 -17
- package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/__init__.py +0 -19
- package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/analyzer.py +0 -86
- package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/ase_based/__init__.py +0 -7
- package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/ase_based/builder.py +0 -54
- package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/ase_based/configuration.py +0 -19
- package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/enums.py +0 -42
- package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/helpers.py +0 -127
- package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/merge_based/__init__.py +0 -7
- package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/merge_based/builder.py +0 -33
- package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/merge_based/configuration.py +0 -16
- package/src/py/mat3ra/made/tools/build/processed_structures/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/analyzers/__init__.py +0 -9
- package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/analyzers/coordination_based_passivation_material_analyzer.py +0 -112
- package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/analyzers/passivation_material_analyzer.py +0 -16
- package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/analyzers/surface_passivation_material_analyzer.py +0 -32
- package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/builder.py +0 -23
- package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/configuration.py +0 -31
- package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/enums.py +0 -7
- package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/helpers.py +0 -151
- package/src/py/mat3ra/made/tools/build_components/__init__.py +0 -10
- package/src/py/mat3ra/made/tools/build_components/entities/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/one_dimensional/miller_indices_2d.py +0 -0
- package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/two_dimensional/miller_indices.py +0 -18
- package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/two_dimensional/termination.py +0 -33
- package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/crystal_site/__init__.py +0 -2
- package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/crystal_site/crystal_site.py +0 -24
- package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/crystal_site/crystal_site_list.py +0 -9
- package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/point_defect_site/builder.py +0 -32
- package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/point_defect_site/configuration.py +0 -14
- package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/void_region/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/void_region/builder.py +0 -29
- package/src/py/mat3ra/made/tools/build_components/entities/auxiliary/zero_dimensional/void_region/configuration.py +0 -19
- package/src/py/mat3ra/made/tools/build_components/entities/core/two_dimensional/vacuum/builder.py +0 -48
- package/src/py/mat3ra/made/tools/build_components/entities/core/two_dimensional/vacuum/configuration.py +0 -17
- package/src/py/mat3ra/made/tools/build_components/entities/core/zero_dimensional/atom/builder.py +0 -25
- package/src/py/mat3ra/made/tools/build_components/entities/core/zero_dimensional/atom/configuration.py +0 -8
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/base_builder/__init__.py +0 -16
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/base_builder/base_configuration_pydantic.py +0 -5
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/base_builder/base_single_builder.py +0 -87
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/base_builder/build_parameters.py +0 -5
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/__init__.py +0 -4
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/builder.py +0 -46
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/configuration.py +0 -19
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/edge_types.py +0 -51
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines/helpers.py +0 -58
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines_unique_repeated/__init__.py +0 -4
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines_unique_repeated/builder.py +0 -42
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/one_dimensional/crystal_lattice_lines_unique_repeated/configuration.py +0 -21
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/three_dimensional/supercell/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/three_dimensional/supercell/configuration.py +0 -11
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/three_dimensional/supercell/helpers.py +0 -38
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/__init__.py +0 -24
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/__init__.py +0 -7
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/builder.py +0 -62
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/configuration.py +0 -14
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/atomic_layers_unique_repeated/helpers.py +0 -42
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/crystal_lattice_planes/__init__.py +0 -7
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/crystal_lattice_planes/builder.py +0 -39
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/crystal_lattice_planes/configuration.py +0 -24
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/slab_stack/__init__.py +0 -10
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/slab_stack/builder.py +0 -36
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/slab_stack/configuration.py +0 -31
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/two_dimensional/slab_stack/helpers.py +0 -80
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/zero_dimensional/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build_components/entities/reusable/zero_dimensional/coordinates_shape_enum.py +0 -8
- package/src/py/mat3ra/made/tools/build_components/metadata/__init__.py +0 -2
- package/src/py/mat3ra/made/tools/build_components/metadata/build_metadata.py +0 -7
- package/src/py/mat3ra/made/tools/build_components/metadata/material_build_metadata.py +0 -35
- package/src/py/mat3ra/made/tools/build_components/metadata/material_with_build_metadata.py +0 -8
- package/src/py/mat3ra/made/tools/build_components/mixins/__init__.py +0 -2
- package/src/py/mat3ra/made/tools/build_components/mixins/convert_generated_items_ase_atoms_mixin.py +0 -8
- package/src/py/mat3ra/made/tools/build_components/mixins/convert_generated_items_pymatgen_structure_mixin.py +0 -8
- package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/__init__.py +0 -0
- package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/enums.py +0 -11
- package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/merge/__init__.py +0 -6
- package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/merge/build_parameters.py +0 -18
- package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/merge/builder.py +0 -93
- package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/merge/configuration.py +0 -20
- package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/stack/builder.py +0 -83
- package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/stack/configuration.py +0 -24
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/__init__.py +0 -15
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/build_parameters.py +0 -5
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/builders/base.py +0 -33
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/builders/isometric.py +0 -25
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/configuration.py +0 -24
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/__init__.py +0 -13
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/atomic_mass_dependent_function_holder.py +0 -32
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/function_holder.py +0 -80
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/maxwell_boltzmann.py +0 -39
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/perturbation_function_holder.py +0 -45
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/functions/sine_wave_perturbation_function_holder.py +0 -29
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/helpers.py +0 -83
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/strain/__init__.py +0 -5
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/strain/builder.py +0 -25
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/strain/configuration.py +0 -23
- package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/strain/helpers.py +0 -49
- package/src/py/mat3ra/made/tools/build_components/utils.py +0 -44
- package/src/py/mat3ra/made/tools/calculate/__init__.py +0 -149
- package/src/py/mat3ra/made/tools/calculate/ase/__init__.py +0 -133
- package/src/py/mat3ra/made/tools/calculate/ase/constraints.py +0 -91
- package/src/py/mat3ra/made/tools/calculate/calculators/__init__.py +0 -4
- package/src/py/mat3ra/made/tools/calculate/calculators/interface_material_calculator.py +0 -70
- package/src/py/mat3ra/made/tools/calculate/calculators/interface_material_calculator_parameters.py +0 -14
- package/src/py/mat3ra/made/tools/calculate/calculators/material_calculator.py +0 -32
- package/src/py/mat3ra/made/tools/calculate/calculators/material_calculator_parameters.py +0 -17
- package/src/py/mat3ra/made/tools/calculate/interaction_functions.py +0 -23
- package/src/py/mat3ra/made/tools/convert/__init__.py +0 -286
- package/src/py/mat3ra/made/tools/convert/interface_parts_enum.py +0 -9
- package/src/py/mat3ra/made/tools/convert/utils.py +0 -96
- package/src/py/mat3ra/made/tools/entities/__init__.py +0 -5
- package/src/py/mat3ra/made/tools/entities/coordinate/__init__.py +0 -14
- package/src/py/mat3ra/made/tools/entities/coordinate/box_coordinate_condition.py +0 -15
- package/src/py/mat3ra/made/tools/entities/coordinate/coordinate_condition.py +0 -16
- package/src/py/mat3ra/made/tools/entities/coordinate/coordinate_functions.py +0 -158
- package/src/py/mat3ra/made/tools/entities/coordinate/cylinder_coordinate_condition.py +0 -17
- package/src/py/mat3ra/made/tools/entities/coordinate/plane_coordinate_condition.py +0 -14
- package/src/py/mat3ra/made/tools/entities/coordinate/sphere_coordinate_condition.py +0 -15
- package/src/py/mat3ra/made/tools/entities/coordinate/triangular_prism_coordinate_condition.py +0 -26
- package/src/py/mat3ra/made/tools/entities/termination_holder.py +0 -12
- package/src/py/mat3ra/made/tools/helpers.py +0 -168
- package/src/py/mat3ra/made/tools/modify.py +0 -627
- package/src/py/mat3ra/made/tools/operations/core/binary.py +0 -106
- package/src/py/mat3ra/made/tools/operations/core/unary.py +0 -170
- package/src/py/mat3ra/made/tools/operations/core/utils.py +0 -138
- package/src/py/mat3ra/made/tools/operations/reusable/unary.py +0 -53
- package/src/py/mat3ra/made/tools/optimize.py +0 -55
- package/src/py/mat3ra/made/tools/third_party.py +0 -69
- package/src/py/mat3ra/made/tools/utils.py +0 -182
- package/src/py/mat3ra/made/utils.py +0 -144
- package/tests/.gitattributes +0 -1
- package/tests/fixtures/AsGe-basis.json +0 -3
- package/tests/fixtures/C2H4-translated.json +0 -3
- package/tests/fixtures/C2H4.json +0 -3
- package/tests/fixtures/FeLiSi-basis.json +0 -3
- package/tests/fixtures/FeO.json +0 -3
- package/tests/fixtures/Ge2-basis.json +0 -3
- package/tests/fixtures/Graphene.json +0 -3
- package/tests/fixtures/Graphene.poscar +0 -3
- package/tests/fixtures/H2+H-final.json +0 -3
- package/tests/fixtures/H2+H-image.json +0 -3
- package/tests/fixtures/H2+H-initial.json +0 -3
- package/tests/fixtures/H2O.poscar +0 -3
- package/tests/fixtures/LiFeSi-basis-labels.json +0 -3
- package/tests/fixtures/LiFeSi-basis.json +0 -3
- package/tests/fixtures/Na.json +0 -3
- package/tests/fixtures/Na4Cl4-cartesian.json +0 -3
- package/tests/fixtures/Na4Cl4.json +0 -3
- package/tests/fixtures/Na4Cl4.poscar +0 -3
- package/tests/fixtures/Ni-hex.json +0 -3
- package/tests/fixtures/Ni-hex.poscar +0 -3
- package/tests/fixtures/OSi-basis.json +0 -3
- package/tests/fixtures/Si-hex.poscar +0 -3
- package/tests/fixtures/Si-pwscf.in +0 -3
- package/tests/fixtures/Si-slab.json +0 -3
- package/tests/fixtures/Si-supercell.json +0 -3
- package/tests/fixtures/Si2-basis-repeated.json +0 -3
- package/tests/fixtures/Si2-basis.json +0 -3
- package/tests/fixtures/Zr1H23Zr1H1.json +0 -3
- package/tests/fixtures/Zr1H23Zr1H1.poscar +0 -3
- package/tests/fixtures/atomic-constraints.json +0 -3
- package/tests/fixtures/hashes.json +0 -3
- package/tests/fixtures/si-slab-100.json +0 -3
- package/tests/fixtures/si-slab-111-0-vacuum.json +0 -3
- package/tests/fixtures/si-slab-111-0.5-vacuum-gamma-120.json +0 -3
- package/tests/fixtures/si-slab-111-0.5-vacuum-ratio.json +0 -3
- package/tests/fixtures/si-standata.json +0 -3
- package/tests/js/basis/basis.ts +0 -247
- package/tests/js/cell/cell.ts +0 -182
- package/tests/js/cell/primitive_cell.ts +0 -21
- package/tests/js/constraints/constraints.ts +0 -11
- package/tests/js/fixtures.ts +0 -123
- package/tests/js/lattice/lattice.ts +0 -43
- package/tests/js/lattice/lattice_reciprocal.ts +0 -104
- package/tests/js/material/material.ts +0 -161
- package/tests/js/parsers/espresso.ts +0 -12
- package/tests/js/parsers/native_formats.ts +0 -35
- package/tests/js/parsers/poscar.ts +0 -89
- package/tests/js/parsers/xyz.ts +0 -33
- package/tests/js/parsers/xyz_combinatorial_basis.ts +0 -156
- package/tests/js/register-esse-schemas.cjs +0 -10
- package/tests/js/setup.ts +0 -6
- package/tests/js/tools/basis.ts +0 -22
- package/tests/js/tools/supercell.ts +0 -58
- package/tests/js/tools/surface.ts +0 -111
- package/tests/py/conftest.py +0 -34
- package/tests/py/mat3ra/debug_utils.py +0 -75
- package/tests/py/unit/__init__.py +0 -0
- package/tests/py/unit/fixtures/__init__.py +0 -0
- package/tests/py/unit/fixtures/adatom.py +0 -60
- package/tests/py/unit/fixtures/bulk.py +0 -162
- package/tests/py/unit/fixtures/cuts.py +0 -118
- package/tests/py/unit/fixtures/grain_boundary.py +0 -875
- package/tests/py/unit/fixtures/interface/commensurate.py +0 -498
- package/tests/py/unit/fixtures/interface/gaas_dia.py +0 -837
- package/tests/py/unit/fixtures/interface/gr_ni_111_top_hcp.py +0 -123
- package/tests/py/unit/fixtures/interface/simple.py +0 -84
- package/tests/py/unit/fixtures/interface/twisted_nanoribbons.py +0 -131
- package/tests/py/unit/fixtures/interface/zsl.py +0 -756
- package/tests/py/unit/fixtures/island.py +0 -336
- package/tests/py/unit/fixtures/merge.py +0 -147
- package/tests/py/unit/fixtures/monolayer.py +0 -46
- package/tests/py/unit/fixtures/nanoparticle.py +0 -116
- package/tests/py/unit/fixtures/nanoribbon/__init__.py +0 -0
- package/tests/py/unit/fixtures/nanoribbon/armchair.py +0 -102
- package/tests/py/unit/fixtures/nanoribbon/nanoribbon.py +0 -145
- package/tests/py/unit/fixtures/nanoribbon/zigzag.py +0 -54
- package/tests/py/unit/fixtures/pair_defects.py +0 -41
- package/tests/py/unit/fixtures/passivated/nanoribbon.py +0 -69
- package/tests/py/unit/fixtures/passivated/slab.py +0 -58
- package/tests/py/unit/fixtures/point_defects.py +0 -158
- package/tests/py/unit/fixtures/slab.py +0 -606
- package/tests/py/unit/fixtures/strain.py +0 -42
- package/tests/py/unit/fixtures/supercell.py +0 -64
- package/tests/py/unit/fixtures/terrace.py +0 -70
- package/tests/py/unit/fixtures/thrid_party/ase_atoms.py +0 -13
- package/tests/py/unit/test_analyze_lattice_planes.py +0 -131
- package/tests/py/unit/test_cell.py +0 -104
- package/tests/py/unit/test_data_files.py +0 -68
- package/tests/py/unit/test_lattice.py +0 -103
- package/tests/py/unit/test_lattice_type_extended.py +0 -53
- package/tests/py/unit/test_material.py +0 -158
- package/tests/py/unit/test_operations.py +0 -126
- package/tests/py/unit/test_primitive_cell.py +0 -118
- package/tests/py/unit/test_reciprocal_lattice.py +0 -86
- package/tests/py/unit/test_reciprocal_paths.py +0 -64
- package/tests/py/unit/test_symmetry_points.py +0 -151
- package/tests/py/unit/test_tools_analyze.py +0 -219
- package/tests/py/unit/test_tools_analyze_basis.py +0 -105
- package/tests/py/unit/test_tools_analyze_interface.py +0 -223
- package/tests/py/unit/test_tools_analyze_interface_material.py +0 -63
- package/tests/py/unit/test_tools_analyze_interface_zsl.py +0 -187
- package/tests/py/unit/test_tools_analyze_lattice.py +0 -74
- package/tests/py/unit/test_tools_analyze_swap.py +0 -80
- package/tests/py/unit/test_tools_build.py +0 -158
- package/tests/py/unit/test_tools_build_defect/__init__.py +0 -0
- package/tests/py/unit/test_tools_build_defect/test_adatom.py +0 -84
- package/tests/py/unit/test_tools_build_defect/test_island.py +0 -45
- package/tests/py/unit/test_tools_build_defect/test_pair_defect.py +0 -84
- package/tests/py/unit/test_tools_build_defect/test_point_defect.py +0 -196
- package/tests/py/unit/test_tools_build_defect/test_slab_stack.py +0 -30
- package/tests/py/unit/test_tools_build_defect/test_solid_solution.py +0 -90
- package/tests/py/unit/test_tools_build_defect/test_terrace.py +0 -44
- package/tests/py/unit/test_tools_build_grain_boundary.py +0 -133
- package/tests/py/unit/test_tools_build_heterostructure.py +0 -46
- package/tests/py/unit/test_tools_build_interface.py +0 -292
- package/tests/py/unit/test_tools_build_interface_zsl.py +0 -263
- package/tests/py/unit/test_tools_build_maxwell_disorder.py +0 -123
- package/tests/py/unit/test_tools_build_metadata.py +0 -79
- package/tests/py/unit/test_tools_build_monolayer.py +0 -33
- package/tests/py/unit/test_tools_build_nanoparticle.py +0 -42
- package/tests/py/unit/test_tools_build_nanoribbon.py +0 -45
- package/tests/py/unit/test_tools_build_passivation.py +0 -85
- package/tests/py/unit/test_tools_build_perturbation.py +0 -103
- package/tests/py/unit/test_tools_build_slab.py +0 -382
- package/tests/py/unit/test_tools_build_strain.py +0 -36
- package/tests/py/unit/test_tools_build_supercell.py +0 -47
- package/tests/py/unit/test_tools_calculate.py +0 -67
- package/tests/py/unit/test_tools_convert.py +0 -174
- package/tests/py/unit/test_tools_modify.py +0 -248
- package/tests/py/unit/utils.py +0 -142
- package/tsconfig-transpile.json +0 -3
- package/tsconfig.json +0 -3
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
from typing import List, Optional
|
|
2
|
-
|
|
3
|
-
from mat3ra.made.metadata import BaseMetadata
|
|
4
|
-
from pydantic import Field
|
|
5
|
-
|
|
6
|
-
from .build_metadata import BuildMetadata
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class MaterialBuildMetadata(BaseMetadata):
|
|
10
|
-
# Other metadata fields can be added as needed
|
|
11
|
-
build: List[BuildMetadata] = Field([])
|
|
12
|
-
|
|
13
|
-
def get_latest_build_metadata(self) -> BuildMetadata:
|
|
14
|
-
if not self.build:
|
|
15
|
-
raise ValueError("No metadata.build on the material.")
|
|
16
|
-
return self.build[-1]
|
|
17
|
-
|
|
18
|
-
def get_build_metadata_of_type(self, configuration_type: str) -> Optional[BuildMetadata]:
|
|
19
|
-
"""
|
|
20
|
-
Returns the first build configuration of the specified type.
|
|
21
|
-
Args:
|
|
22
|
-
configuration_type (str): The type of configuration to search for.
|
|
23
|
-
Returns:
|
|
24
|
-
Optional[dict]: The build configuration if found, otherwise None.
|
|
25
|
-
"""
|
|
26
|
-
for build_step in reversed(self.build):
|
|
27
|
-
if build_step.configuration.get("type") == configuration_type:
|
|
28
|
-
return BuildMetadata(
|
|
29
|
-
configuration=build_step.configuration, build_parameters=build_step.build_parameters
|
|
30
|
-
)
|
|
31
|
-
return None
|
|
32
|
-
|
|
33
|
-
def add_build_metadata_step(self, configuration: dict, build_parameters: Optional[dict] = None) -> None:
|
|
34
|
-
build_metadata = BuildMetadata(configuration=configuration, build_parameters=build_parameters)
|
|
35
|
-
self.build.append(build_metadata)
|
|
File without changes
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
from enum import Enum
|
|
2
|
-
|
|
3
|
-
from .....build.defective_structures.zero_dimensional.point_defect.atom_placement_method_enum import (
|
|
4
|
-
AtomPlacementMethodEnum,
|
|
5
|
-
)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class AdatomPlacementMethodEnum(Enum):
|
|
9
|
-
EXACT_COORDINATE = AtomPlacementMethodEnum.EXACT_COORDINATE
|
|
10
|
-
EQUIDISTANT = AtomPlacementMethodEnum.EQUIDISTANT
|
|
11
|
-
NEW_CRYSTAL_SITE = AtomPlacementMethodEnum.NEW_CRYSTAL_SITE
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
|
-
from mat3ra.made.tools.build_components.entities.reusable.base_builder import BaseBuilderParameters
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class MergeBuilderParameters(BaseBuilderParameters):
|
|
7
|
-
"""
|
|
8
|
-
Parameters for merging materials.
|
|
9
|
-
|
|
10
|
-
Args:
|
|
11
|
-
material_name: Optional name for the merged material.
|
|
12
|
-
distance_tolerance: Tolerance for resolving overlapping coordinates.
|
|
13
|
-
merge_dangerously: If True, allows merging even if lattices are different.
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
material_name: Optional[str] = "New Material"
|
|
17
|
-
distance_tolerance: float = 0.1
|
|
18
|
-
merge_dangerously: bool = False
|
package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/merge/builder.py
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
from typing import Any, Dict, List, Optional, Type
|
|
2
|
-
|
|
3
|
-
from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import MergeMethodsEnum
|
|
4
|
-
from mat3ra.made.tools.build_components.entities.reusable.base_builder import BaseSingleBuilder, TypeConfiguration
|
|
5
|
-
|
|
6
|
-
from ......operations.core.binary import merge
|
|
7
|
-
from ..... import MaterialWithBuildMetadata
|
|
8
|
-
from .....entities.core.two_dimensional.vacuum.configuration import VacuumConfiguration
|
|
9
|
-
from .build_parameters import MergeBuilderParameters
|
|
10
|
-
from .configuration import MergeConfiguration
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class MergeBuilder(BaseSingleBuilder):
|
|
14
|
-
"""
|
|
15
|
-
Builder class for merging materials based on parameters.
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
_ConfigurationType: Type[MergeConfiguration] = MergeConfiguration
|
|
19
|
-
_BuildParametersType: Type[MergeBuilderParameters] = MergeBuilderParameters
|
|
20
|
-
_DefaultBuildParameters: MergeBuilderParameters = MergeBuilderParameters()
|
|
21
|
-
|
|
22
|
-
@property
|
|
23
|
-
def merge_component_types_conversion_map(self) -> Dict[Type, Type]:
|
|
24
|
-
return {}
|
|
25
|
-
|
|
26
|
-
@property
|
|
27
|
-
def merge_component_types_conversion_pre_process_map(self) -> Dict[Type, Any]:
|
|
28
|
-
return {}
|
|
29
|
-
|
|
30
|
-
def _merge_component_to_material(
|
|
31
|
-
self,
|
|
32
|
-
merge_component_configuration_or_material: Any,
|
|
33
|
-
configuration: MergeConfiguration,
|
|
34
|
-
merge_component_build_parameters: Any = None,
|
|
35
|
-
) -> Optional[MaterialWithBuildMetadata]:
|
|
36
|
-
builder = self.merge_component_types_conversion_map.get(type(merge_component_configuration_or_material))
|
|
37
|
-
pre_process_function = self.merge_component_types_conversion_pre_process_map.get(
|
|
38
|
-
type(merge_component_configuration_or_material), lambda x, y: x
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
if builder:
|
|
42
|
-
merge_component_configuration_or_material = pre_process_function(
|
|
43
|
-
merge_component_configuration_or_material, configuration
|
|
44
|
-
)
|
|
45
|
-
return builder(build_parameters=merge_component_build_parameters).get_material(
|
|
46
|
-
merge_component_configuration_or_material
|
|
47
|
-
)
|
|
48
|
-
elif isinstance(merge_component_configuration_or_material, VacuumConfiguration):
|
|
49
|
-
raise ValueError("Merge with VacuumConfiguration is not supported by design.")
|
|
50
|
-
else:
|
|
51
|
-
return merge_component_configuration_or_material
|
|
52
|
-
|
|
53
|
-
def _merge_by_method(
|
|
54
|
-
self,
|
|
55
|
-
materials: List[MaterialWithBuildMetadata],
|
|
56
|
-
parameters: MergeBuilderParameters,
|
|
57
|
-
method: MergeMethodsEnum = MergeMethodsEnum.ADD,
|
|
58
|
-
) -> MaterialWithBuildMetadata:
|
|
59
|
-
if method not in MergeMethodsEnum:
|
|
60
|
-
raise ValueError(f"Unknown merge method: {method}")
|
|
61
|
-
return merge(
|
|
62
|
-
materials=materials,
|
|
63
|
-
merge_method=method,
|
|
64
|
-
material_name=parameters.material_name or materials[0].name,
|
|
65
|
-
distance_tolerance=parameters.distance_tolerance,
|
|
66
|
-
merge_dangerously=parameters.merge_dangerously,
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
def _generate(self, configuration: TypeConfiguration) -> MaterialWithBuildMetadata:
|
|
70
|
-
materials = []
|
|
71
|
-
for component in configuration.merge_components:
|
|
72
|
-
material = self._merge_component_to_material(component, configuration)
|
|
73
|
-
if material is not None:
|
|
74
|
-
materials.append(material)
|
|
75
|
-
|
|
76
|
-
if len(materials) == 0:
|
|
77
|
-
raise ValueError("No valid materials found after processing merge components")
|
|
78
|
-
|
|
79
|
-
if len(materials) == 1:
|
|
80
|
-
return materials[0]
|
|
81
|
-
|
|
82
|
-
# Optimization: when there are many materials to merge, combine all non-first
|
|
83
|
-
# materials into one before merging with the base to avoid N sequential merges.
|
|
84
|
-
if len(materials) > 2:
|
|
85
|
-
base = materials[0]
|
|
86
|
-
combined = materials[1]
|
|
87
|
-
for m in materials[2:]:
|
|
88
|
-
combined.basis.add_atoms_from_another_basis(m.basis)
|
|
89
|
-
materials = [base, combined]
|
|
90
|
-
|
|
91
|
-
parameters = self.build_parameters or self._DefaultBuildParameters
|
|
92
|
-
merge_method = getattr(configuration, "merge_method", None)
|
|
93
|
-
return self._merge_by_method(materials, parameters, merge_method)
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
from typing import Any, List
|
|
2
|
-
|
|
3
|
-
from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import (
|
|
4
|
-
MergeMethodsEnum,
|
|
5
|
-
MergeSchema,
|
|
6
|
-
)
|
|
7
|
-
from mat3ra.made.tools.build_components.entities.reusable.base_builder import BaseConfigurationPydantic
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class MergeConfiguration(MergeSchema, BaseConfigurationPydantic):
|
|
11
|
-
"""
|
|
12
|
-
Parameters for merging materials.
|
|
13
|
-
|
|
14
|
-
Args:
|
|
15
|
-
merge_components: List of materials or configurations to merge.
|
|
16
|
-
merge_method: Method to use for merging
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
merge_components: List[Any]
|
|
20
|
-
merge_method: MergeMethodsEnum
|
package/src/py/mat3ra/made/tools/build_components/operations/core/combinations/stack/builder.py
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
from typing import Any, Optional, Type
|
|
2
|
-
|
|
3
|
-
from mat3ra.esse.models.core.reusable.axis_enum import AxisEnum
|
|
4
|
-
from mat3ra.made.material import Material
|
|
5
|
-
from mat3ra.made.utils import adjust_material_cell_to_set_gap_along_direction
|
|
6
|
-
|
|
7
|
-
from ......build_components import MaterialWithBuildMetadata
|
|
8
|
-
from ......operations.core.binary import stack
|
|
9
|
-
from .....entities.core.two_dimensional.vacuum.builder import VacuumBuilder
|
|
10
|
-
from .....entities.core.two_dimensional.vacuum.configuration import VacuumConfiguration
|
|
11
|
-
from .....entities.reusable.base_builder import BaseSingleBuilder, TypeConfiguration
|
|
12
|
-
from .configuration import StackConfiguration
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class StackNComponentsBuilder(BaseSingleBuilder):
|
|
16
|
-
_ConfigurationType: Type[StackConfiguration] = StackConfiguration
|
|
17
|
-
_StackComponentTypes = [MaterialWithBuildMetadata, VacuumConfiguration]
|
|
18
|
-
|
|
19
|
-
@property
|
|
20
|
-
def stack_component_types_conversion_map(self):
|
|
21
|
-
return {
|
|
22
|
-
VacuumConfiguration: VacuumBuilder,
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
@property
|
|
26
|
-
def stack_component_types_conversion_pre_process_map(self):
|
|
27
|
-
return {
|
|
28
|
-
VacuumConfiguration: self.vacuum_configuration_set_crystal,
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
def vacuum_configuration_set_crystal(
|
|
32
|
-
self, vacuum_configuration: VacuumConfiguration, stack_configuration: StackConfiguration
|
|
33
|
-
) -> VacuumConfiguration:
|
|
34
|
-
# NOTE: we assume that the first component in the stack is used to define the vacuum crystal
|
|
35
|
-
vacuum_prototype_crystal = stack_configuration.stack_components[0]
|
|
36
|
-
vacuum_configuration.crystal = self._stack_component_to_material(vacuum_prototype_crystal, stack_configuration)
|
|
37
|
-
return vacuum_configuration
|
|
38
|
-
|
|
39
|
-
def _stack_component_to_material(
|
|
40
|
-
self,
|
|
41
|
-
stack_component_configuration_or_material: Any,
|
|
42
|
-
configuration: StackConfiguration,
|
|
43
|
-
stack_component_build_parameters: Any = None,
|
|
44
|
-
) -> Optional[MaterialWithBuildMetadata]:
|
|
45
|
-
cache = getattr(self, "_stack_component_cache", None)
|
|
46
|
-
cache_key = id(stack_component_configuration_or_material)
|
|
47
|
-
if cache is not None and cache_key in cache:
|
|
48
|
-
return cache[cache_key]
|
|
49
|
-
|
|
50
|
-
builder = self.stack_component_types_conversion_map.get(type(stack_component_configuration_or_material))
|
|
51
|
-
pre_process_function = self.stack_component_types_conversion_pre_process_map.get(
|
|
52
|
-
type(stack_component_configuration_or_material), lambda x, y: x
|
|
53
|
-
)
|
|
54
|
-
if builder:
|
|
55
|
-
stack_component_configuration_or_material = pre_process_function(
|
|
56
|
-
stack_component_configuration_or_material, configuration
|
|
57
|
-
)
|
|
58
|
-
result = builder(build_parameters=stack_component_build_parameters).get_material(
|
|
59
|
-
stack_component_configuration_or_material
|
|
60
|
-
)
|
|
61
|
-
else:
|
|
62
|
-
result = stack_component_configuration_or_material
|
|
63
|
-
|
|
64
|
-
if cache is not None:
|
|
65
|
-
cache[cache_key] = result
|
|
66
|
-
return result
|
|
67
|
-
|
|
68
|
-
def _generate(self, configuration: TypeConfiguration) -> Material:
|
|
69
|
-
self._stack_component_cache: Optional[dict] = {}
|
|
70
|
-
try:
|
|
71
|
-
materials = []
|
|
72
|
-
for index, stack_component_config in enumerate(configuration.stack_components):
|
|
73
|
-
material = self._stack_component_to_material(stack_component_config, configuration)
|
|
74
|
-
gap = configuration.get_gap_by_id(index)
|
|
75
|
-
if gap is not None:
|
|
76
|
-
material = adjust_material_cell_to_set_gap_along_direction(material, gap, configuration.direction)
|
|
77
|
-
materials.append(material)
|
|
78
|
-
# Filter out None values in case some stack components are V
|
|
79
|
-
materials = [m for m in materials if m is not None]
|
|
80
|
-
stacked_material = stack(materials, configuration.direction or AxisEnum.z)
|
|
81
|
-
return stacked_material
|
|
82
|
-
finally:
|
|
83
|
-
self._stack_component_cache = None
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
from typing import Any, List
|
|
2
|
-
|
|
3
|
-
from mat3ra.code.array_with_ids import ArrayWithIds
|
|
4
|
-
from mat3ra.esse.models.core.reusable.axis_enum import AxisEnum
|
|
5
|
-
from mat3ra.esse.models.materials_category_components.operations.core.combinations.stack import StackSchema
|
|
6
|
-
|
|
7
|
-
from .....entities.reusable.base_builder import BaseConfigurationPydantic
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class StackConfiguration(StackSchema, BaseConfigurationPydantic):
|
|
11
|
-
type: str = "StackConfiguration"
|
|
12
|
-
|
|
13
|
-
stack_components: List[Any] # Configuration objects only, no Materials
|
|
14
|
-
gaps: ArrayWithIds = ArrayWithIds.from_values([])
|
|
15
|
-
direction: AxisEnum = AxisEnum.z
|
|
16
|
-
|
|
17
|
-
def __init__(self, **data):
|
|
18
|
-
gaps = data.get("gaps", [])
|
|
19
|
-
if not isinstance(gaps, ArrayWithIds):
|
|
20
|
-
data["gaps"] = ArrayWithIds.from_values(gaps)
|
|
21
|
-
super().__init__(**data)
|
|
22
|
-
|
|
23
|
-
def get_gap_by_id(self, gap_id: int) -> float:
|
|
24
|
-
return self.gaps.get_element_value_by_index(gap_id)
|
package/src/py/mat3ra/made/tools/build_components/operations/core/modifications/perturb/__init__.py
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
from .functions import (
|
|
2
|
-
AtomicMassDependentFunctionHolder,
|
|
3
|
-
FunctionHolder,
|
|
4
|
-
MaxwellBoltzmannDisplacementHolder,
|
|
5
|
-
PerturbationFunctionHolder,
|
|
6
|
-
SineWavePerturbationFunctionHolder,
|
|
7
|
-
)
|
|
8
|
-
|
|
9
|
-
__all__ = [
|
|
10
|
-
"AtomicMassDependentFunctionHolder",
|
|
11
|
-
"FunctionHolder",
|
|
12
|
-
"MaxwellBoltzmannDisplacementHolder",
|
|
13
|
-
"PerturbationFunctionHolder",
|
|
14
|
-
"SineWavePerturbationFunctionHolder",
|
|
15
|
-
]
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
from typing import Any, Type
|
|
2
|
-
|
|
3
|
-
from mat3ra.made.tools.build_components.entities.reusable.base_builder import BaseSingleBuilder
|
|
4
|
-
|
|
5
|
-
from .......modify import translate_to_z_level, wrap_to_unit_cell
|
|
6
|
-
from .......operations.core.unary import perturb
|
|
7
|
-
from ...... import MaterialWithBuildMetadata
|
|
8
|
-
from ..build_parameters import PerturbationBuildParameters
|
|
9
|
-
from ..configuration import PerturbationConfiguration
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class PerturbationBuilder(BaseSingleBuilder):
|
|
13
|
-
_ConfigurationType: Type[PerturbationConfiguration] = PerturbationConfiguration
|
|
14
|
-
_BuildParametersType: Type[PerturbationBuildParameters] = PerturbationBuildParameters
|
|
15
|
-
_DefaultBuildParameters: PerturbationBuildParameters = PerturbationBuildParameters()
|
|
16
|
-
_PostProcessParametersType: Any = None
|
|
17
|
-
|
|
18
|
-
def _generate(self, configuration: PerturbationConfiguration) -> MaterialWithBuildMetadata:
|
|
19
|
-
new_material = translate_to_z_level(configuration.material, "center").clone()
|
|
20
|
-
new_material = perturb(
|
|
21
|
-
new_material,
|
|
22
|
-
configuration.perturbation_function_holder,
|
|
23
|
-
configuration.use_cartesian_coordinates,
|
|
24
|
-
)
|
|
25
|
-
new_material = wrap_to_unit_cell(new_material)
|
|
26
|
-
return new_material
|
|
27
|
-
|
|
28
|
-
def _update_material_name(
|
|
29
|
-
self, material: MaterialWithBuildMetadata, configuration: PerturbationConfiguration
|
|
30
|
-
) -> MaterialWithBuildMetadata:
|
|
31
|
-
perturbation_details = f"Perturbation: {configuration.perturbation_function_holder.function_str}"
|
|
32
|
-
material.name = f"{material.name} ({perturbation_details})"
|
|
33
|
-
return material
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
from .......operations.core.unary import edit_cell
|
|
2
|
-
from ...... import MaterialWithBuildMetadata
|
|
3
|
-
from ..configuration import PerturbationConfiguration
|
|
4
|
-
from .base import PerturbationBuilder
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class IsometricPerturbationBuilder(PerturbationBuilder):
|
|
8
|
-
def _generate(self, configuration: PerturbationConfiguration) -> MaterialWithBuildMetadata:
|
|
9
|
-
new_material = configuration.material.clone()
|
|
10
|
-
renormalized_coordinates = [
|
|
11
|
-
configuration.perturbation_function_holder.normalize_coordinates(coord)
|
|
12
|
-
for coord in new_material.basis.coordinates.values
|
|
13
|
-
]
|
|
14
|
-
new_material.set_coordinates(renormalized_coordinates)
|
|
15
|
-
|
|
16
|
-
configuration.material = new_material
|
|
17
|
-
|
|
18
|
-
new_material = super()._generate(configuration)
|
|
19
|
-
|
|
20
|
-
new_lattice_vectors = [
|
|
21
|
-
configuration.perturbation_function_holder.normalize_coordinates(vector)
|
|
22
|
-
for vector in new_material.lattice.vector_arrays
|
|
23
|
-
]
|
|
24
|
-
renormalized_material = edit_cell(new_material, new_lattice_vectors)
|
|
25
|
-
return renormalized_material
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
from typing import Union
|
|
2
|
-
|
|
3
|
-
from mat3ra.made.material import Material
|
|
4
|
-
from mat3ra.made.tools.build_components.entities.reusable.base_builder import BaseConfigurationPydantic
|
|
5
|
-
|
|
6
|
-
from ..... import MaterialWithBuildMetadata
|
|
7
|
-
from .functions import FunctionHolder, PerturbationFunctionHolder, SineWavePerturbationFunctionHolder
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class PerturbationConfiguration(BaseConfigurationPydantic):
|
|
11
|
-
"""
|
|
12
|
-
Configuration for a geometrical perturbation.
|
|
13
|
-
|
|
14
|
-
Args:
|
|
15
|
-
material (Material): The Material object.
|
|
16
|
-
perturbation_function_holder (PerturbationFunctionHolder): The perturbation function holder.
|
|
17
|
-
use_cartesian_coordinates (bool): Whether to use cartesian coordinates
|
|
18
|
-
"""
|
|
19
|
-
|
|
20
|
-
material: Union[Material, MaterialWithBuildMetadata]
|
|
21
|
-
perturbation_function_holder: Union[
|
|
22
|
-
SineWavePerturbationFunctionHolder, PerturbationFunctionHolder, FunctionHolder
|
|
23
|
-
] = SineWavePerturbationFunctionHolder()
|
|
24
|
-
use_cartesian_coordinates: bool = True
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
from .atomic_mass_dependent_function_holder import AtomicMassDependentFunctionHolder
|
|
2
|
-
from .function_holder import FunctionHolder
|
|
3
|
-
from .maxwell_boltzmann import MaxwellBoltzmannDisplacementHolder
|
|
4
|
-
from .perturbation_function_holder import PerturbationFunctionHolder
|
|
5
|
-
from .sine_wave_perturbation_function_holder import SineWavePerturbationFunctionHolder
|
|
6
|
-
|
|
7
|
-
__all__ = [
|
|
8
|
-
"AtomicMassDependentFunctionHolder",
|
|
9
|
-
"FunctionHolder",
|
|
10
|
-
"MaxwellBoltzmannDisplacementHolder",
|
|
11
|
-
"PerturbationFunctionHolder",
|
|
12
|
-
"SineWavePerturbationFunctionHolder",
|
|
13
|
-
]
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
from typing import Any, List, Optional, Union
|
|
2
|
-
|
|
3
|
-
import sympy as sp
|
|
4
|
-
from mat3ra.periodic_table.helpers import get_atomic_mass_from_element
|
|
5
|
-
|
|
6
|
-
from .function_holder import FunctionHolder
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class AtomicMassDependentFunctionHolder(FunctionHolder):
|
|
10
|
-
variables: List[str] = ["x", "y", "z", "m"]
|
|
11
|
-
|
|
12
|
-
def __init__(
|
|
13
|
-
self,
|
|
14
|
-
function: Union[sp.Expr, str] = sp.Symbol("f"),
|
|
15
|
-
variables: Optional[List[str]] = None,
|
|
16
|
-
**data: Any,
|
|
17
|
-
):
|
|
18
|
-
if variables is None:
|
|
19
|
-
expr = self._to_expr(function)
|
|
20
|
-
vs = sorted(expr.free_symbols, key=lambda s: s.name)
|
|
21
|
-
variables = [str(v) for v in vs] or ["x", "y", "z", "m"]
|
|
22
|
-
|
|
23
|
-
super().__init__(function=function, variables=variables, **data)
|
|
24
|
-
|
|
25
|
-
@staticmethod
|
|
26
|
-
def get_atomic_mass(coordinate: List[float], material) -> float:
|
|
27
|
-
if material is None:
|
|
28
|
-
raise ValueError("Material is required to extract atomic mass")
|
|
29
|
-
|
|
30
|
-
atom_id = material.basis.coordinates.get_element_id_by_value(coordinate)
|
|
31
|
-
element = material.basis.elements.get_element_value_by_index(atom_id)
|
|
32
|
-
return get_atomic_mass_from_element(element)
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
from typing import Any, Callable, List, Optional, Union
|
|
2
|
-
|
|
3
|
-
import sympy as sp
|
|
4
|
-
from mat3ra.code.entity import InMemoryEntityPydantic
|
|
5
|
-
from mat3ra.made.utils import AXIS_TO_INDEX_MAP
|
|
6
|
-
from pydantic import field_serializer
|
|
7
|
-
from sympy import parse_expr
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def default_function() -> sp.Expr:
|
|
11
|
-
return sp.Symbol("f")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class FunctionHolder(InMemoryEntityPydantic):
|
|
15
|
-
variables: List[str] = ["x"]
|
|
16
|
-
symbols: List[sp.Symbol] = sp.symbols(variables)
|
|
17
|
-
function: sp.Expr = sp.Symbol("f")
|
|
18
|
-
function_numeric: Callable = sp.lambdify(sp.symbols(variables), sp.Symbol("f"), modules=["numpy"])
|
|
19
|
-
derivatives_numeric: dict = {}
|
|
20
|
-
|
|
21
|
-
def __init__(self, function: Union[sp.Expr, str], variables: Optional[List[str]] = None, **data: Any):
|
|
22
|
-
# normalize string → Expr
|
|
23
|
-
expr = self._to_expr(function)
|
|
24
|
-
|
|
25
|
-
# if no variables list given, infer from free symbols (defaults to x,y,z)
|
|
26
|
-
if variables is None:
|
|
27
|
-
vs = sorted(expr.free_symbols, key=lambda s: s.name)
|
|
28
|
-
variables = [str(v) for v in vs] or ["x", "y", "z"]
|
|
29
|
-
super().__init__(**data)
|
|
30
|
-
|
|
31
|
-
self.variables = variables
|
|
32
|
-
self.symbols = sp.symbols(variables)
|
|
33
|
-
self.function = expr
|
|
34
|
-
|
|
35
|
-
self.function_numeric = sp.lambdify(self.symbols, self.function, modules=["numpy"])
|
|
36
|
-
self.derivatives_numeric = {
|
|
37
|
-
var: sp.lambdify(sp.symbols(variables), sp.diff(self.function, var), modules=["numpy"])
|
|
38
|
-
for var in self.variables
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
@staticmethod
|
|
42
|
-
def _to_expr(expr_or_str: Union[sp.Expr, str]) -> sp.Expr:
|
|
43
|
-
if isinstance(expr_or_str, sp.Expr):
|
|
44
|
-
return expr_or_str
|
|
45
|
-
if isinstance(expr_or_str, str):
|
|
46
|
-
# We can swap in sympy.sympify for slightly laxer parsing,
|
|
47
|
-
# or configure parse_expr with custom transformations.
|
|
48
|
-
return parse_expr(expr_or_str, evaluate=True)
|
|
49
|
-
raise TypeError(f"Expected sympy.Expr or str, got {type(expr_or_str)}")
|
|
50
|
-
|
|
51
|
-
@property
|
|
52
|
-
def function_str(self) -> str:
|
|
53
|
-
return str(self.function)
|
|
54
|
-
|
|
55
|
-
def apply_function(self, coordinate: List[float], **kwargs: Any) -> float:
|
|
56
|
-
values = [coordinate[AXIS_TO_INDEX_MAP[var]] for var in self.variables]
|
|
57
|
-
return self.function_numeric(*values)
|
|
58
|
-
|
|
59
|
-
def calculate_derivative(self, coordinate: List[float], axis: str) -> float:
|
|
60
|
-
if axis in self.variables:
|
|
61
|
-
values = [coordinate[AXIS_TO_INDEX_MAP[var]] for var in self.variables]
|
|
62
|
-
return self.derivatives_numeric[axis](*values)
|
|
63
|
-
else:
|
|
64
|
-
return 0
|
|
65
|
-
|
|
66
|
-
@field_serializer("function")
|
|
67
|
-
def serialize_function(self, value: sp.Expr) -> str:
|
|
68
|
-
return str(value)
|
|
69
|
-
|
|
70
|
-
@field_serializer("symbols")
|
|
71
|
-
def serialize_symbols(self, value: List[sp.Symbol]) -> List[str]:
|
|
72
|
-
return [str(symbol) for symbol in value]
|
|
73
|
-
|
|
74
|
-
@field_serializer("function_numeric")
|
|
75
|
-
def serialize_function_numeric(self, value: Callable) -> str:
|
|
76
|
-
return "lambdified_function"
|
|
77
|
-
|
|
78
|
-
@field_serializer("derivatives_numeric")
|
|
79
|
-
def serialize_derivatives_numeric(self, value: dict) -> dict:
|
|
80
|
-
return {k: "lambdified_derivative" for k, v in value.items()}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
from typing import Any, List, Optional
|
|
2
|
-
|
|
3
|
-
import numpy as np
|
|
4
|
-
from pydantic import Field, model_validator
|
|
5
|
-
|
|
6
|
-
from .atomic_mass_dependent_function_holder import AtomicMassDependentFunctionHolder
|
|
7
|
-
|
|
8
|
-
DEFAULT_DISORDER_PARAMETER = 1.0
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class MaxwellBoltzmannDisplacementHolder(AtomicMassDependentFunctionHolder):
|
|
12
|
-
disorder_parameter: float = Field(
|
|
13
|
-
default=DEFAULT_DISORDER_PARAMETER,
|
|
14
|
-
exclude=True,
|
|
15
|
-
description="Disorder parameter. Can be viewed as effective temperature in eV.",
|
|
16
|
-
)
|
|
17
|
-
random_seed: Optional[int] = Field(default=None, exclude=True)
|
|
18
|
-
random_state: Any = Field(default=None, exclude=True)
|
|
19
|
-
is_mass_used: bool = Field(default=True, exclude=True)
|
|
20
|
-
|
|
21
|
-
@model_validator(mode="after")
|
|
22
|
-
def setup_random_state(self):
|
|
23
|
-
if self.random_state is None:
|
|
24
|
-
self.random_state = np.random.RandomState(self.random_seed) if self.random_seed is not None else np.random
|
|
25
|
-
return self
|
|
26
|
-
|
|
27
|
-
def apply_function(self, coordinate, material=None) -> List[float]:
|
|
28
|
-
if material is None:
|
|
29
|
-
raise ValueError("MaxwellBoltzmannDisplacementHolder requires 'material' kwargs")
|
|
30
|
-
|
|
31
|
-
if self.is_mass_used:
|
|
32
|
-
mass = self.get_atomic_mass(coordinate, material)
|
|
33
|
-
variance = self.disorder_parameter / mass
|
|
34
|
-
else:
|
|
35
|
-
variance = self.disorder_parameter
|
|
36
|
-
|
|
37
|
-
std_dev = np.sqrt(variance)
|
|
38
|
-
displacement = self.random_state.normal(0.0, std_dev, size=3)
|
|
39
|
-
return displacement.tolist()
|