@mat3ra/made 2026.8.7-0 → 2026.8.18-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/dist/js/Material.d.ts +219 -0
- package/dist/js/Material.js +457 -0
- package/dist/js/basis/basis.d.ts +14 -9
- package/dist/js/basis/basis.js +15 -13
- package/dist/js/basis/constrained_basis.d.ts +9 -7
- package/dist/js/basis/constrained_basis.js +4 -4
- package/dist/js/generated/MaterialSchemaMixin.d.ts +5 -0
- package/dist/js/generated/MaterialSchemaMixin.js +69 -0
- package/dist/js/lattice/lattice.d.ts +4 -3
- package/dist/js/lattice/lattice.js +1 -2
- package/dist/js/made.d.ts +12 -12
- package/dist/js/made.js +38 -5
- package/dist/js/parsers/espresso.d.ts +2 -3
- package/dist/js/parsers/espresso.js +0 -1
- package/dist/js/parsers/native_format_parsers.d.ts +9 -8
- package/dist/js/parsers/native_format_parsers.js +6 -6
- package/dist/js/parsers/parsers.d.ts +6 -6
- package/dist/js/parsers/poscar.d.ts +5 -4
- package/dist/js/parsers/poscar.js +3 -2
- package/dist/js/parsers/xyz.d.ts +3 -5
- package/dist/js/parsers/xyz.js +3 -4
- package/dist/js/parsers/xyz_combinatorial_basis.js +3 -1
- package/dist/js/tools/basis.d.ts +1 -1
- package/dist/js/tools/index.d.ts +7 -7
- package/dist/js/tools/material.d.ts +1 -1
- package/dist/js/tools/material.js +8 -7
- package/dist/js/tools/supercell.d.ts +4 -5
- package/dist/js/tools/supercell.js +2 -4
- package/dist/js/tools/surface.d.ts +4 -4
- package/dist/js/tools/surface.js +2 -7
- package/package.json +12 -8
- 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/dist/js/material.d.ts +0 -169
- package/dist/js/material.js +0 -362
- 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/src/__init__.py +0 -0
- package/src/js/basis/basis.ts +0 -621
- package/src/js/basis/constrained_basis.ts +0 -114
- package/src/js/basis/coordinates.ts +0 -93
- 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 -150
- 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/lattice/lattice.ts +0 -306
- package/src/js/lattice/lattice_types.ts +0 -134
- package/src/js/lattice/reciprocal/lattice_reciprocal.ts +0 -193
- 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/material.ts +0 -458
- package/src/js/parsers/cif.ts +0 -25
- package/src/js/parsers/errors.ts +0 -6
- package/src/js/parsers/espresso.ts +0 -30
- package/src/js/parsers/native_format_parsers.ts +0 -51
- package/src/js/parsers/parsers.ts +0 -13
- package/src/js/parsers/poscar.ts +0 -212
- package/src/js/parsers/xyz.ts +0 -187
- package/src/js/parsers/xyz_combinatorial_basis.ts +0 -265
- package/src/js/tools/basis.ts +0 -132
- package/src/js/tools/cell.ts +0 -41
- package/src/js/tools/index.ts +0 -11
- package/src/js/tools/material.ts +0 -62
- package/src/js/tools/supercell.ts +0 -88
- package/src/js/tools/surface.ts +0 -223
- 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 -134
- 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 -120
- package/tests/js/lattice/lattice.ts +0 -43
- package/tests/js/lattice/lattice_reciprocal.ts +0 -104
- package/tests/js/material.test.ts +0 -42
- package/tests/js/parsers/espresso.ts +0 -15
- 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/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 -115
- 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,37 +0,0 @@
|
|
|
1
|
-
from typing import Dict, Type, Union
|
|
2
|
-
|
|
3
|
-
from mat3ra.made.material import Material
|
|
4
|
-
|
|
5
|
-
from .....analyze.other import get_chemical_formula_empirical
|
|
6
|
-
from .....build_components import MaterialWithBuildMetadata, TypeConfiguration
|
|
7
|
-
from .....build_components.entities.auxiliary.zero_dimensional.point_defect_site.builder import PointDefectSiteBuilder
|
|
8
|
-
from .....build_components.entities.auxiliary.zero_dimensional.point_defect_site.configuration import (
|
|
9
|
-
PointDefectSiteConfiguration,
|
|
10
|
-
)
|
|
11
|
-
from .....build_components.operations.core.combinations.merge.builder import MergeBuilder
|
|
12
|
-
from .configuration import SolidSolutionConfiguration
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class SolidSolutionBuilder(MergeBuilder):
|
|
16
|
-
"""Builds a solid solution by merging substitution sites into a supercell."""
|
|
17
|
-
|
|
18
|
-
_ConfigurationType: Type[SolidSolutionConfiguration] = SolidSolutionConfiguration
|
|
19
|
-
|
|
20
|
-
@property
|
|
21
|
-
def merge_component_types_conversion_map(self) -> Dict[Type, Type]:
|
|
22
|
-
return {
|
|
23
|
-
PointDefectSiteConfiguration: PointDefectSiteBuilder,
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
def _update_material_name(
|
|
27
|
-
self, material: Union[Material, MaterialWithBuildMetadata], configuration: TypeConfiguration
|
|
28
|
-
) -> MaterialWithBuildMetadata:
|
|
29
|
-
formula = get_chemical_formula_empirical(material)
|
|
30
|
-
concentration_percentage = configuration.actual_concentration * 100
|
|
31
|
-
source_element = configuration.source_element
|
|
32
|
-
target_element = configuration.target_element
|
|
33
|
-
material.name = (
|
|
34
|
-
f"{formula} - Solid Solution ({source_element}->{target_element} "
|
|
35
|
-
f"{concentration_percentage:.4g}%)"
|
|
36
|
-
)
|
|
37
|
-
return material
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
from typing import List, Union
|
|
2
|
-
|
|
3
|
-
from mat3ra.esse.models.materials_category.defective_structures.three_dimensional.solid_solution.configuration import (
|
|
4
|
-
SolidSolutionConfigurationSchema,
|
|
5
|
-
)
|
|
6
|
-
from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import MergeMethodsEnum
|
|
7
|
-
from mat3ra.made.material import Material
|
|
8
|
-
|
|
9
|
-
from .....build_components import MaterialWithBuildMetadata
|
|
10
|
-
from .....build_components.entities.auxiliary.zero_dimensional.point_defect_site.configuration import (
|
|
11
|
-
PointDefectSiteConfiguration,
|
|
12
|
-
)
|
|
13
|
-
from .....build_components.operations.core.combinations.merge.configuration import MergeConfiguration
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class SolidSolutionConfiguration(MergeConfiguration, SolidSolutionConfigurationSchema):
|
|
17
|
-
"""Configuration for building a solid solution by merging substitution sites.
|
|
18
|
-
|
|
19
|
-
Physical specification: crystal, source_element, target_element, concentrations.
|
|
20
|
-
The merge_components hold the resolved substitution sites.
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
|
-
type: str = "SolidSolutionConfiguration"
|
|
24
|
-
crystal: Union[Material, MaterialWithBuildMetadata]
|
|
25
|
-
source_element: str
|
|
26
|
-
target_element: str
|
|
27
|
-
target_concentration: float
|
|
28
|
-
actual_concentration: float
|
|
29
|
-
merge_components: List[Union[Material, MaterialWithBuildMetadata, PointDefectSiteConfiguration]]
|
|
30
|
-
merge_method: MergeMethodsEnum = MergeMethodsEnum.REPLACE
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
from typing import Optional, Union
|
|
2
|
-
|
|
3
|
-
from mat3ra.esse.models.materials_category_components.entities.core.zero_dimensional.atom import AtomSchema
|
|
4
|
-
from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import MergeMethodsEnum
|
|
5
|
-
from mat3ra.made.material import Material
|
|
6
|
-
|
|
7
|
-
from .....analyze.solid_solution_analyzer import SolidSolutionAnalyzer
|
|
8
|
-
from .....build_components import MaterialWithBuildMetadata
|
|
9
|
-
from .....build_components.entities.auxiliary.zero_dimensional.point_defect_site.configuration import (
|
|
10
|
-
PointDefectSiteConfiguration,
|
|
11
|
-
)
|
|
12
|
-
from .....build_components.entities.reusable.three_dimensional.supercell.helpers import create_supercell
|
|
13
|
-
from .builder import SolidSolutionBuilder
|
|
14
|
-
from .configuration import SolidSolutionConfiguration
|
|
15
|
-
from .enums import SiteSelectionMethodEnum
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def create_solid_solution(
|
|
19
|
-
material: Union[Material, MaterialWithBuildMetadata],
|
|
20
|
-
source_element: str,
|
|
21
|
-
target_element: str,
|
|
22
|
-
concentration: float,
|
|
23
|
-
seed: Optional[int] = None,
|
|
24
|
-
tolerance: float = 0.01,
|
|
25
|
-
max_supercell_cells: int = 128,
|
|
26
|
-
site_selection_method: SiteSelectionMethodEnum = SiteSelectionMethodEnum.UNIFORM,
|
|
27
|
-
) -> MaterialWithBuildMetadata:
|
|
28
|
-
"""
|
|
29
|
-
Create a solid solution by partially substituting one element for another.
|
|
30
|
-
|
|
31
|
-
Automatically determines the optimal supercell size to achieve the target
|
|
32
|
-
concentration, builds the supercell, and performs substitution.
|
|
33
|
-
|
|
34
|
-
Args:
|
|
35
|
-
material (Union[Material, MaterialWithBuildMetadata]): Unit cell crystal.
|
|
36
|
-
source_element (str): Element to partially replace (e.g. "Hf").
|
|
37
|
-
target_element (str): Replacement element (e.g. "Zr").
|
|
38
|
-
concentration (float): Fraction of source_element to replace (0.0-1.0).
|
|
39
|
-
seed (Optional[int]): Random seed for reproducible site selection.
|
|
40
|
-
tolerance (float): Acceptable deviation from target concentration.
|
|
41
|
-
max_supercell_cells (int): Maximum supercell size to search.
|
|
42
|
-
site_selection_method (SiteSelectionMethodEnum): RANDOM or UNIFORM (Farthest Point Sampling).
|
|
43
|
-
|
|
44
|
-
Returns:
|
|
45
|
-
MaterialWithBuildMetadata: Solid solution with full build metadata.
|
|
46
|
-
"""
|
|
47
|
-
analyzer = SolidSolutionAnalyzer(
|
|
48
|
-
material=material,
|
|
49
|
-
source_element=source_element,
|
|
50
|
-
target_element=target_element,
|
|
51
|
-
target_concentration=concentration,
|
|
52
|
-
tolerance=tolerance,
|
|
53
|
-
max_supercell_cells=max_supercell_cells,
|
|
54
|
-
seed=seed,
|
|
55
|
-
site_selection_method=site_selection_method,
|
|
56
|
-
)
|
|
57
|
-
supercell = create_supercell(material, scaling_factor=analyzer.optimal_supercell_dimensions)
|
|
58
|
-
coordinates = supercell.basis.coordinates.values
|
|
59
|
-
site_configurations = [
|
|
60
|
-
PointDefectSiteConfiguration(
|
|
61
|
-
crystal=supercell,
|
|
62
|
-
coordinate=coordinates[site_index],
|
|
63
|
-
element=AtomSchema(chemical_element=target_element),
|
|
64
|
-
)
|
|
65
|
-
for site_index in analyzer.selected_site_indices
|
|
66
|
-
]
|
|
67
|
-
configuration = SolidSolutionConfiguration(
|
|
68
|
-
crystal=material,
|
|
69
|
-
source_element=source_element,
|
|
70
|
-
target_element=target_element,
|
|
71
|
-
target_concentration=concentration,
|
|
72
|
-
actual_concentration=analyzer.actual_concentration,
|
|
73
|
-
merge_components=[supercell] + site_configurations,
|
|
74
|
-
merge_method=MergeMethodsEnum.REPLACE,
|
|
75
|
-
)
|
|
76
|
-
return SolidSolutionBuilder().get_material(configuration)
|
|
File without changes
|
package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/__init__.py
DELETED
|
File without changes
|
package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/builder.py
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
from .configuration import AdatomDefectConfiguration
|
|
2
|
-
from .....build_components.entities.reusable.two_dimensional.slab_stack.builder import SlabStackBuilder
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class AdatomDefectBuilder(SlabStackBuilder):
|
|
6
|
-
_ConfigurationType = AdatomDefectConfiguration
|
|
7
|
-
|
|
8
|
-
def get_name_suffix(self, configuration: AdatomDefectConfiguration) -> str:
|
|
9
|
-
elements = set(configuration.added_component.basis.elements.values)
|
|
10
|
-
elements_str = ", ".join(sorted(elements))
|
|
11
|
-
return f"{elements_str} Adatom"
|
package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/configuration.py
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
from mat3ra.esse.models.materials_category.defective_structures.two_dimensional.adatom.configuration import (
|
|
2
|
-
AdatomDefectConfigurationSchema,
|
|
3
|
-
AxisEnum,
|
|
4
|
-
)
|
|
5
|
-
|
|
6
|
-
from .....build_components.entities.reusable.two_dimensional.slab_stack.configuration import SlabStackConfiguration
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class AdatomDefectConfiguration(SlabStackConfiguration, AdatomDefectConfigurationSchema):
|
|
10
|
-
"""
|
|
11
|
-
Configuration for creating an adatom defect on a slab surface.
|
|
12
|
-
|
|
13
|
-
Args:
|
|
14
|
-
stack_components: List containing [slab, isolated_defect, vacuum].
|
|
15
|
-
"""
|
|
16
|
-
|
|
17
|
-
type: str = "AdatomDefectConfiguration"
|
|
18
|
-
direction: AxisEnum = AxisEnum.z
|
package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/adatom/helpers.py
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
from typing import List, Optional
|
|
2
|
-
|
|
3
|
-
from mat3ra.made.material import Material
|
|
4
|
-
from .builder import AdatomDefectBuilder
|
|
5
|
-
from .configuration import (
|
|
6
|
-
AdatomDefectConfiguration,
|
|
7
|
-
)
|
|
8
|
-
from .types import AdatomDefectDict
|
|
9
|
-
from .....analyze.crystal_site.adatom_crystal_site_material_analyzer import (
|
|
10
|
-
AdatomCrystalSiteMaterialAnalyzer,
|
|
11
|
-
)
|
|
12
|
-
from .....analyze.crystal_site.adatom_material_analyzer import AdatomMaterialAnalyzer
|
|
13
|
-
from .....build_components import MaterialWithBuildMetadata
|
|
14
|
-
from .....build_components.operations.core.combinations.enums import AdatomPlacementMethodEnum
|
|
15
|
-
from .....operations.core.binary import merge
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def get_adatom_defect_analyzer_cls(
|
|
19
|
-
placement_method: str = AdatomPlacementMethodEnum.EXACT_COORDINATE.value,
|
|
20
|
-
):
|
|
21
|
-
if placement_method == AdatomPlacementMethodEnum.EXACT_COORDINATE.value:
|
|
22
|
-
return AdatomMaterialAnalyzer
|
|
23
|
-
elif placement_method == AdatomPlacementMethodEnum.NEW_CRYSTAL_SITE.value:
|
|
24
|
-
return AdatomCrystalSiteMaterialAnalyzer
|
|
25
|
-
else:
|
|
26
|
-
raise ValueError(f"Unsupported placement method: {placement_method}")
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def create_defect_adatom(
|
|
30
|
-
slab: MaterialWithBuildMetadata,
|
|
31
|
-
position_on_surface: List[float],
|
|
32
|
-
distance_z: float = 1.0,
|
|
33
|
-
placement_method: str = AdatomPlacementMethodEnum.EXACT_COORDINATE.value,
|
|
34
|
-
element: Optional[str] = None,
|
|
35
|
-
use_cartesian_coordinates: bool = False,
|
|
36
|
-
) -> Material:
|
|
37
|
-
"""
|
|
38
|
-
Create an adatom defect based on the specified placement method.
|
|
39
|
-
|
|
40
|
-
Args:
|
|
41
|
-
slab: The slab material.
|
|
42
|
-
position_on_surface: Position on the surface [x, y].
|
|
43
|
-
distance_z: Distance above the surface in Angstroms.
|
|
44
|
-
placement_method: Method to place the adatom.
|
|
45
|
-
element: Chemical element for the adatom.
|
|
46
|
-
use_cartesian_coordinates: Whether the position_on_surface is in Cartesian units.
|
|
47
|
-
|
|
48
|
-
Returns:
|
|
49
|
-
Material: The slab with adatom defect.
|
|
50
|
-
"""
|
|
51
|
-
# Reuse the create_multiple_adatom_defects function below
|
|
52
|
-
slab_with_adatom = create_multiple_adatom_defects(
|
|
53
|
-
slab,
|
|
54
|
-
defect_dicts=[
|
|
55
|
-
AdatomDefectDict(
|
|
56
|
-
**{
|
|
57
|
-
"element": element or "Si", # Default to Silicon if no element provided
|
|
58
|
-
"coordinate_2d": position_on_surface,
|
|
59
|
-
"distance_z": distance_z,
|
|
60
|
-
"use_cartesian_coordinates": use_cartesian_coordinates,
|
|
61
|
-
}
|
|
62
|
-
)
|
|
63
|
-
],
|
|
64
|
-
placement_method=placement_method,
|
|
65
|
-
)
|
|
66
|
-
return slab_with_adatom
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def create_multiple_adatom_defects(
|
|
70
|
-
slab: MaterialWithBuildMetadata, defect_dicts: List[AdatomDefectDict], placement_method: str
|
|
71
|
-
) -> Material:
|
|
72
|
-
"""
|
|
73
|
-
Create multiple adatom defects from a list of AdatomDefectDict.
|
|
74
|
-
|
|
75
|
-
Args:
|
|
76
|
-
slab: The slab material.
|
|
77
|
-
defect_dicts: List of adatom dictionaries with keys:
|
|
78
|
-
- element: str (chemical element for the adatom)
|
|
79
|
-
- coordinate: List[float] (position on surface [x, y])
|
|
80
|
-
- distance_z: float (distance above surface in Angstroms)
|
|
81
|
-
- use_cartesian_coordinates: bool (optional, defaults to False)
|
|
82
|
-
Whether the coordinate is in Cartesian units.
|
|
83
|
-
placement_method: Method to place all adatoms (common for all defects).
|
|
84
|
-
Valid values from AtomPlacementMethodEnum:
|
|
85
|
-
- "exact_coordinate" (default): Places atom at exact coordinate
|
|
86
|
-
- "new_crystal_site": Places atom at nearest crystal site
|
|
87
|
-
- "equidistant": Places atom equidistant from nearest atoms
|
|
88
|
-
|
|
89
|
-
Returns:
|
|
90
|
-
Material: The slab with all adatom defects applied.
|
|
91
|
-
"""
|
|
92
|
-
if placement_method not in [e.value for e in AdatomPlacementMethodEnum]:
|
|
93
|
-
raise ValueError(f"Unsupported placement method: {placement_method}")
|
|
94
|
-
|
|
95
|
-
if not defect_dicts:
|
|
96
|
-
return slab
|
|
97
|
-
|
|
98
|
-
all_adatom_configs = []
|
|
99
|
-
analyzer_cls = get_adatom_defect_analyzer_cls(placement_method)
|
|
100
|
-
|
|
101
|
-
last_analyzer = None
|
|
102
|
-
|
|
103
|
-
for defect_dict in defect_dicts:
|
|
104
|
-
coordinate_2d = defect_dict.coordinate_2d
|
|
105
|
-
use_cartesian = defect_dict.use_cartesian_coordinates
|
|
106
|
-
|
|
107
|
-
if use_cartesian:
|
|
108
|
-
coordinate_3d = coordinate_2d + [0.0]
|
|
109
|
-
coordinate_3d_crystal = slab.basis.cell.convert_point_to_crystal(coordinate_3d)
|
|
110
|
-
coordinate_2d = coordinate_3d_crystal[:2]
|
|
111
|
-
|
|
112
|
-
analyzer = analyzer_cls(
|
|
113
|
-
material=slab,
|
|
114
|
-
coordinate_2d=coordinate_2d,
|
|
115
|
-
distance_z=defect_dict.distance_z,
|
|
116
|
-
placement_method=placement_method,
|
|
117
|
-
element=defect_dict.element,
|
|
118
|
-
)
|
|
119
|
-
last_analyzer = analyzer
|
|
120
|
-
all_adatom_configs.append(analyzer.added_component)
|
|
121
|
-
|
|
122
|
-
if not last_analyzer:
|
|
123
|
-
return slab
|
|
124
|
-
|
|
125
|
-
vacuum_configuration = last_analyzer.get_slab_vacuum_configuration()
|
|
126
|
-
|
|
127
|
-
merged_adatoms_component = merge(all_adatom_configs)
|
|
128
|
-
|
|
129
|
-
stack_components = [
|
|
130
|
-
last_analyzer.slab_material_or_configuration_for_stacking,
|
|
131
|
-
merged_adatoms_component,
|
|
132
|
-
vacuum_configuration,
|
|
133
|
-
]
|
|
134
|
-
configuration = AdatomDefectConfiguration(stack_components=stack_components)
|
|
135
|
-
|
|
136
|
-
builder = AdatomDefectBuilder()
|
|
137
|
-
return builder.get_material(configuration)
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel, Field
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class AdatomDefectDict(BaseModel):
|
|
7
|
-
"""
|
|
8
|
-
Pydantic model for adatom defect configurations used with create_multiple_adatom_defects.
|
|
9
|
-
|
|
10
|
-
Required fields:
|
|
11
|
-
element: Chemical element for the adatom
|
|
12
|
-
coordinate: Position on surface as [x, y] list
|
|
13
|
-
distance_z: Distance above surface in Angstroms
|
|
14
|
-
|
|
15
|
-
Optional fields:
|
|
16
|
-
use_cartesian_coordinates: Whether coordinates are in Cartesian units
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
element: str = Field(..., description="Chemical element for the adatom")
|
|
20
|
-
coordinate_2d: List[float] = Field(..., min_items=2, max_items=2, description="Position on surface as [x, y]")
|
|
21
|
-
distance_z: float = Field(..., gt=0, description="Distance above surface in Angstroms")
|
|
22
|
-
use_cartesian_coordinates: bool = False
|
|
File without changes
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
from typing import Type
|
|
2
|
-
|
|
3
|
-
from mat3ra.made.material import Material
|
|
4
|
-
from .configuration import GrainBoundaryPlanarConfiguration
|
|
5
|
-
from ....compound_pristine_structures.two_dimensional.interface import InterfaceBuilder, InterfaceBuilderParameters
|
|
6
|
-
from .....modify import wrap_to_unit_cell
|
|
7
|
-
from .....operations.core.unary import supercell
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class GrainBoundaryPlanarBuilder(InterfaceBuilder):
|
|
11
|
-
"""
|
|
12
|
-
Builder for creating grain boundaries.
|
|
13
|
-
|
|
14
|
-
Uses InterfaceBuilder to create a Z-stacked interface, then transforms the supercell
|
|
15
|
-
to flip the Z direction to X direction for grain boundary orientation.
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
_BuildParametersType: Type[InterfaceBuilderParameters] = InterfaceBuilderParameters
|
|
19
|
-
_DefaultBuildParameters = InterfaceBuilderParameters()
|
|
20
|
-
|
|
21
|
-
def _generate(self, configuration: GrainBoundaryPlanarConfiguration) -> Material:
|
|
22
|
-
interface = super()._generate(configuration)
|
|
23
|
-
rotated_interface = supercell(interface, [[0, 0, 1], [0, 1, 0], [1, 0, 0]])
|
|
24
|
-
wrapped_interface = wrap_to_unit_cell(rotated_interface)
|
|
25
|
-
return wrapped_interface
|
|
26
|
-
|
|
27
|
-
def get_name_suffix(self, configuration: GrainBoundaryPlanarConfiguration) -> str:
|
|
28
|
-
return "Grain Boundary"
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
from typing import List, Optional
|
|
2
|
-
|
|
3
|
-
from mat3ra.code.array_with_ids import ArrayWithIds
|
|
4
|
-
from mat3ra.esse.models.core.reusable.axis_enum import AxisEnum
|
|
5
|
-
# fmt: off
|
|
6
|
-
from mat3ra.esse.models.materials_category.defective_structures.two_dimensional. \
|
|
7
|
-
grain_boundary_planar.configuration import (
|
|
8
|
-
GrainBoundaryPlanarConfigurationSchema,
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
from ....compound_pristine_structures.two_dimensional.interface import InterfaceConfiguration
|
|
12
|
-
from ....pristine_structures.two_dimensional.slab_strained_supercell.configuration import \
|
|
13
|
-
SlabStrainedSupercellConfiguration
|
|
14
|
-
from .....build_components.entities.core.two_dimensional.vacuum.configuration import VacuumConfiguration
|
|
15
|
-
from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.configuration import \
|
|
16
|
-
SlabConfiguration
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class GrainBoundaryPlanarConfiguration(InterfaceConfiguration, GrainBoundaryPlanarConfigurationSchema):
|
|
20
|
-
direction: AxisEnum = AxisEnum.z
|
|
21
|
-
|
|
22
|
-
@property
|
|
23
|
-
def phase_1_configuration(self) -> SlabConfiguration:
|
|
24
|
-
return self.stack_components[0]
|
|
25
|
-
|
|
26
|
-
@property
|
|
27
|
-
def phase_2_configuration(self) -> SlabConfiguration:
|
|
28
|
-
return self.stack_components[1]
|
|
29
|
-
|
|
30
|
-
@property
|
|
31
|
-
def vacuum_configuration(self) -> VacuumConfiguration:
|
|
32
|
-
if len(self.stack_components) > 2:
|
|
33
|
-
return self.stack_components[2]
|
|
34
|
-
return VacuumConfiguration(
|
|
35
|
-
size=0.0, crystal=self.film_configuration.atomic_layers.crystal, direction=self.direction
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
@classmethod
|
|
39
|
-
def from_parameters(
|
|
40
|
-
cls,
|
|
41
|
-
phase_1_configuration: SlabStrainedSupercellConfiguration,
|
|
42
|
-
phase_2_configuration: SlabStrainedSupercellConfiguration,
|
|
43
|
-
xy_shift: Optional[List[float]] = None,
|
|
44
|
-
gaps: Optional[List[float]] = None,
|
|
45
|
-
) -> "GrainBoundaryPlanarConfiguration":
|
|
46
|
-
if xy_shift is None:
|
|
47
|
-
xy_shift = [0.0, 0.0]
|
|
48
|
-
|
|
49
|
-
stack_components = [phase_1_configuration, phase_2_configuration]
|
|
50
|
-
return cls(
|
|
51
|
-
stack_components=stack_components,
|
|
52
|
-
direction=AxisEnum.z,
|
|
53
|
-
xy_shift=xy_shift,
|
|
54
|
-
gaps=ArrayWithIds.from_values(gaps),
|
|
55
|
-
)
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
from typing import Optional, List, Tuple, Union
|
|
2
|
-
|
|
3
|
-
from mat3ra.made.material import Material
|
|
4
|
-
from .builder import GrainBoundaryPlanarBuilder
|
|
5
|
-
from .configuration import GrainBoundaryPlanarConfiguration
|
|
6
|
-
from .....analyze.interface import GrainBoundaryPlanarAnalyzer
|
|
7
|
-
from .....analyze.lattice import get_material_with_conventional_lattice
|
|
8
|
-
from .....build_components import MaterialWithBuildMetadata
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def create_grain_boundary_planar(
|
|
12
|
-
phase_1_material: Union[Material, MaterialWithBuildMetadata],
|
|
13
|
-
phase_2_material: Optional[Material] = None,
|
|
14
|
-
phase_1_miller_indices: Tuple[int, int, int] = (0, 0, 1),
|
|
15
|
-
phase_2_miller_indices: Tuple[int, int, int] = (0, 0, 1),
|
|
16
|
-
phase_1_thickness: int = 1,
|
|
17
|
-
phase_2_thickness: int = 1,
|
|
18
|
-
translation_vector: List[float] = [0.0, 0.0],
|
|
19
|
-
gap: float = 3.0,
|
|
20
|
-
max_area: float = 50.0,
|
|
21
|
-
match_id: int = 0,
|
|
22
|
-
max_area_ratio_tol: float = 0.09,
|
|
23
|
-
max_length_tol: float = 0.03,
|
|
24
|
-
max_angle_tol: float = 0.01,
|
|
25
|
-
use_conventional_cell: bool = True,
|
|
26
|
-
) -> Material:
|
|
27
|
-
"""
|
|
28
|
-
Create a planar grain boundary between two materials with different orientations.
|
|
29
|
-
|
|
30
|
-
Args:
|
|
31
|
-
phase_1_material: The material to use for each phase of the grain boundary
|
|
32
|
-
phase_1_miller_indices: Miller indices for phase 1
|
|
33
|
-
phase_2_miller_indices: Miller indices for phase 2
|
|
34
|
-
phase_1_thickness: Number of layers for phase 1
|
|
35
|
-
phase_2_thickness: Number of layers for phase 2
|
|
36
|
-
translation_vector: Relative shift between phases [x, y, z]
|
|
37
|
-
gap: Gap between phases in Angstroms
|
|
38
|
-
match_id: ZSL match ID to use (0 for first match)
|
|
39
|
-
max_area: Maximum area for ZSL matching
|
|
40
|
-
max_area_ratio_tol: Area ratio tolerance for ZSL matching
|
|
41
|
-
max_length_tol: Length tolerance for ZSL matching
|
|
42
|
-
max_angle_tol: Angle tolerance for ZSL matching
|
|
43
|
-
|
|
44
|
-
Returns:
|
|
45
|
-
Material: The grain boundary material
|
|
46
|
-
"""
|
|
47
|
-
phase_2_material = phase_2_material or phase_1_material
|
|
48
|
-
if use_conventional_cell:
|
|
49
|
-
phase_1_material = get_material_with_conventional_lattice(phase_1_material)
|
|
50
|
-
phase_2_material = get_material_with_conventional_lattice(phase_2_material)
|
|
51
|
-
|
|
52
|
-
analyzer = GrainBoundaryPlanarAnalyzer(
|
|
53
|
-
phase_1_material=phase_1_material,
|
|
54
|
-
phase_2_material=phase_2_material,
|
|
55
|
-
phase_1_miller_indices=phase_1_miller_indices,
|
|
56
|
-
phase_2_miller_indices=phase_2_miller_indices,
|
|
57
|
-
phase_1_thickness=phase_1_thickness,
|
|
58
|
-
phase_2_thickness=phase_2_thickness,
|
|
59
|
-
max_area=max_area,
|
|
60
|
-
max_area_ratio_tol=max_area_ratio_tol,
|
|
61
|
-
max_length_tol=max_length_tol,
|
|
62
|
-
max_angle_tol=max_angle_tol,
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
strained_config = analyzer.get_grain_boundary_configuration_by_match_id(match_id)
|
|
66
|
-
|
|
67
|
-
gb_config = GrainBoundaryPlanarConfiguration.from_parameters(
|
|
68
|
-
phase_1_configuration=strained_config.substrate_configuration,
|
|
69
|
-
phase_2_configuration=strained_config.film_configuration,
|
|
70
|
-
xy_shift=translation_vector,
|
|
71
|
-
gaps=[gap, gap],
|
|
72
|
-
)
|
|
73
|
-
|
|
74
|
-
builder = GrainBoundaryPlanarBuilder()
|
|
75
|
-
return builder.get_material(gb_config)
|
package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/island/builder.py
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
from .configuration import IslandDefectConfiguration
|
|
2
|
-
from .....build_components.entities.reusable.two_dimensional.slab_stack.builder import SlabStackBuilder
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class IslandDefectBuilder(SlabStackBuilder):
|
|
6
|
-
"""
|
|
7
|
-
Builder for creating island defects by merging a slab with a void site.
|
|
8
|
-
The void site defines which atoms to remove from the slab.
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
_ConfigurationType = IslandDefectConfiguration
|
|
12
|
-
|
|
13
|
-
@property
|
|
14
|
-
def name_suffix(self) -> str:
|
|
15
|
-
return "Island"
|
package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/island/configuration.py
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
from mat3ra.esse.models.materials_category.defective_structures.two_dimensional.island.configuration import (
|
|
2
|
-
IslandDefectConfigurationSchema,
|
|
3
|
-
)
|
|
4
|
-
|
|
5
|
-
from .....build_components.entities.reusable.two_dimensional.slab_stack.configuration import SlabStackConfiguration
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class IslandDefectConfiguration(SlabStackConfiguration, IslandDefectConfigurationSchema):
|
|
9
|
-
"""
|
|
10
|
-
Configuration for creating an island defect on a slab surface.
|
|
11
|
-
|
|
12
|
-
Args:
|
|
13
|
-
stack_components: List containing [slab, isolated_island, vacuum].
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
type: str = "IslandDefectConfiguration"
|
package/src/py/mat3ra/made/tools/build/defective_structures/two_dimensional/island/helpers.py
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
from typing import Union, TypeVar
|
|
2
|
-
|
|
3
|
-
from mat3ra.esse.models.core.reusable.axis_enum import AxisEnum
|
|
4
|
-
|
|
5
|
-
from .builder import IslandDefectBuilder
|
|
6
|
-
from .configuration import IslandDefectConfiguration
|
|
7
|
-
from .....analyze.slab import SlabMaterialAnalyzer
|
|
8
|
-
from .....build_components import MaterialWithBuildMetadata
|
|
9
|
-
from .....build_components.entities.core.two_dimensional.vacuum.configuration import VacuumConfiguration
|
|
10
|
-
from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.builder import SlabBuilder
|
|
11
|
-
from .....build_components.entities.reusable.two_dimensional.slab_stack.helpers import (
|
|
12
|
-
recreate_slab_with_fractional_layers,
|
|
13
|
-
)
|
|
14
|
-
from .....build_components.entities.reusable.zero_dimensional.coordinates_shape_enum import CoordinatesShapeEnum
|
|
15
|
-
from .....entities.coordinate import (
|
|
16
|
-
CoordinateCondition,
|
|
17
|
-
CylinderCoordinateCondition,
|
|
18
|
-
SphereCoordinateCondition,
|
|
19
|
-
BoxCoordinateCondition,
|
|
20
|
-
TriangularPrismCoordinateCondition,
|
|
21
|
-
PlaneCoordinateCondition,
|
|
22
|
-
)
|
|
23
|
-
from .....modify import filter_by_condition_on_coordinates
|
|
24
|
-
|
|
25
|
-
CoordinateConditionType = TypeVar("CoordinateConditionType", bound=CoordinateCondition)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def create_defect_island(
|
|
29
|
-
slab: MaterialWithBuildMetadata,
|
|
30
|
-
condition: Union[
|
|
31
|
-
CylinderCoordinateCondition,
|
|
32
|
-
SphereCoordinateCondition,
|
|
33
|
-
BoxCoordinateCondition,
|
|
34
|
-
TriangularPrismCoordinateCondition,
|
|
35
|
-
PlaneCoordinateCondition,
|
|
36
|
-
CoordinateConditionType,
|
|
37
|
-
] = CylinderCoordinateCondition(),
|
|
38
|
-
use_cartesian_coordinates: bool = True,
|
|
39
|
-
number_of_added_layers: Union[int, float] = 1,
|
|
40
|
-
) -> MaterialWithBuildMetadata:
|
|
41
|
-
"""
|
|
42
|
-
Create an island defect using the new IslandDefectConfiguration and IslandDefectBuilder.
|
|
43
|
-
|
|
44
|
-
Args:
|
|
45
|
-
slab: The slab material.
|
|
46
|
-
condition: The coordinate condition that defines the island shape.
|
|
47
|
-
number_of_added_layers: Number of additional layers to add to the slab, from which the island will be created.
|
|
48
|
-
|
|
49
|
-
Returns:
|
|
50
|
-
Material: The slab with island defect.
|
|
51
|
-
"""
|
|
52
|
-
|
|
53
|
-
material_with_additional_layers = recreate_slab_with_fractional_layers(slab, number_of_added_layers)
|
|
54
|
-
|
|
55
|
-
isolated_island = filter_by_condition_on_coordinates(
|
|
56
|
-
material=material_with_additional_layers,
|
|
57
|
-
condition=condition.condition,
|
|
58
|
-
use_cartesian_coordinates=use_cartesian_coordinates,
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
# Create the island defect using IslandDefectBuilder
|
|
62
|
-
analyzer = SlabMaterialAnalyzer(material=slab)
|
|
63
|
-
slab_without_vacuum_configuration = analyzer.slab_configuration_with_no_vacuum
|
|
64
|
-
slab_build_parameters = analyzer.build_parameters
|
|
65
|
-
|
|
66
|
-
new_slab = SlabBuilder(build_parameters=slab_build_parameters).get_material(slab_without_vacuum_configuration)
|
|
67
|
-
|
|
68
|
-
original_vacuum_config = analyzer.get_slab_vacuum_configuration()
|
|
69
|
-
vacuum_config = VacuumConfiguration(
|
|
70
|
-
size=original_vacuum_config.size, crystal=new_slab, direction=original_vacuum_config.direction
|
|
71
|
-
)
|
|
72
|
-
|
|
73
|
-
island_config = IslandDefectConfiguration(
|
|
74
|
-
stack_components=[new_slab, isolated_island, vacuum_config], direction=AxisEnum.z
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
island_builder = IslandDefectBuilder()
|
|
78
|
-
return island_builder.get_material(island_config)
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
def get_coordinate_condition(shape: CoordinatesShapeEnum, dict_params: dict):
|
|
82
|
-
"""
|
|
83
|
-
Returns the appropriate coordinate condition based on the shape provided.
|
|
84
|
-
|
|
85
|
-
Args:
|
|
86
|
-
shape (CoordinatesShapeEnum): Shape of the island (e.g., cylinder, box, etc.).
|
|
87
|
-
dict_params (dict): Parameters for the shape condition.
|
|
88
|
-
|
|
89
|
-
Returns:
|
|
90
|
-
CoordinateCondition: The appropriate condition object.
|
|
91
|
-
"""
|
|
92
|
-
if shape == "cylinder":
|
|
93
|
-
return CylinderCoordinateCondition(
|
|
94
|
-
center_position=dict_params.get("center_position", [0.5, 0.5]),
|
|
95
|
-
radius=dict_params["radius"],
|
|
96
|
-
min_z=dict_params["min_z"],
|
|
97
|
-
max_z=dict_params["max_z"],
|
|
98
|
-
)
|
|
99
|
-
elif shape == "sphere":
|
|
100
|
-
return SphereCoordinateCondition(
|
|
101
|
-
center_coordinate=dict_params.get("center_coordinate", [0.5, 0.5, 0.5]), radius=dict_params["radius"]
|
|
102
|
-
)
|
|
103
|
-
elif shape == "box":
|
|
104
|
-
return BoxCoordinateCondition(
|
|
105
|
-
min_coordinate=dict_params["min_coordinate"], max_coordinate=dict_params["max_coordinate"]
|
|
106
|
-
)
|
|
107
|
-
elif shape == "triangular_prism":
|
|
108
|
-
return TriangularPrismCoordinateCondition(
|
|
109
|
-
position_on_surface_1=dict_params["position_on_surface_1"],
|
|
110
|
-
position_on_surface_2=dict_params["position_on_surface_2"],
|
|
111
|
-
position_on_surface_3=dict_params["position_on_surface_3"],
|
|
112
|
-
min_z=dict_params["min_z"],
|
|
113
|
-
max_z=dict_params["max_z"],
|
|
114
|
-
)
|
|
115
|
-
else:
|
|
116
|
-
raise ValueError(f"Unsupported island shape: {shape}")
|