@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
package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/__init__.py
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
from .merge_based import NanoparticleConfiguration, NanoparticleBuilder
|
|
2
|
-
from .ase_based import ASEBasedNanoparticleConfiguration, ASEBasedNanoparticleBuilder
|
|
3
|
-
from .enums import NanoparticleShapesEnum
|
|
4
|
-
from .helpers import (
|
|
5
|
-
create_nanoparticle_by_shape,
|
|
6
|
-
create_nanoparticle_from_material,
|
|
7
|
-
create_nanoparticle_by_shape_from_element,
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
__all__ = [
|
|
11
|
-
"NanoparticleConfiguration",
|
|
12
|
-
"NanoparticleBuilder",
|
|
13
|
-
"ASEBasedNanoparticleConfiguration",
|
|
14
|
-
"ASEBasedNanoparticleBuilder",
|
|
15
|
-
"NanoparticleShapesEnum",
|
|
16
|
-
"create_nanoparticle_by_shape",
|
|
17
|
-
"create_nanoparticle_from_material",
|
|
18
|
-
"create_nanoparticle_by_shape_from_element",
|
|
19
|
-
]
|
package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/analyzer.py
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
from typing import List, Union
|
|
2
|
-
|
|
3
|
-
import numpy as np
|
|
4
|
-
|
|
5
|
-
from .....analyze import BaseMaterialAnalyzer
|
|
6
|
-
from .....entities.coordinate import SphereCoordinateCondition, CoordinateCondition
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class NanoparticleMaterialAnalyzer(BaseMaterialAnalyzer):
|
|
10
|
-
orientation_z: List[int] = [0, 0, 1]
|
|
11
|
-
vacuum_padding: float = 10.0
|
|
12
|
-
coordinate_condition: Union[SphereCoordinateCondition, CoordinateCondition] = SphereCoordinateCondition()
|
|
13
|
-
|
|
14
|
-
def _calculate_max_dimension_from_condition(self) -> float:
|
|
15
|
-
if isinstance(self.coordinate_condition, SphereCoordinateCondition):
|
|
16
|
-
return 2.0 * self.coordinate_condition.radius
|
|
17
|
-
|
|
18
|
-
return self.vacuum_padding
|
|
19
|
-
|
|
20
|
-
def _get_cartesian_lattice_dimensions(self) -> List[float]:
|
|
21
|
-
"""
|
|
22
|
-
Get the Cartesian dimensions of the unit cell lattice vectors.
|
|
23
|
-
"""
|
|
24
|
-
lattice_vectors = self.material.lattice.vector_arrays
|
|
25
|
-
return [np.linalg.norm(vector) for vector in lattice_vectors]
|
|
26
|
-
|
|
27
|
-
@property
|
|
28
|
-
def supercell_to_fit_nanoparticle(self) -> List[List[int]]:
|
|
29
|
-
"""
|
|
30
|
-
Calculate the supercell size needed to fit the nanoparticle.
|
|
31
|
-
This calculates how many unit cells are needed in each direction to contain
|
|
32
|
-
the nanoparticle defined by the coordinate condition.
|
|
33
|
-
"""
|
|
34
|
-
max_dimension = self._calculate_max_dimension_from_condition()
|
|
35
|
-
|
|
36
|
-
lattice_dimensions = self._get_cartesian_lattice_dimensions()
|
|
37
|
-
|
|
38
|
-
nx = max(1, int(np.ceil(max_dimension / lattice_dimensions[0])))
|
|
39
|
-
ny = max(1, int(np.ceil(max_dimension / lattice_dimensions[1])))
|
|
40
|
-
nz = max(1, int(np.ceil(max_dimension / lattice_dimensions[2])))
|
|
41
|
-
|
|
42
|
-
return [[nx, 0, 0], [0, ny, 0], [0, 0, nz]]
|
|
43
|
-
|
|
44
|
-
@property
|
|
45
|
-
def supercell_for_vacuum(self) -> List[List[int]]:
|
|
46
|
-
"""
|
|
47
|
-
Calculate the supercell size that includes vacuum padding on all sides.
|
|
48
|
-
This is used to create the final cell with appropriate vacuum space.
|
|
49
|
-
"""
|
|
50
|
-
nanoparticle_supercell = self.supercell_to_fit_nanoparticle
|
|
51
|
-
|
|
52
|
-
# Get base dimensions from nanoparticle supercell
|
|
53
|
-
nx_base = nanoparticle_supercell[0][0]
|
|
54
|
-
ny_base = nanoparticle_supercell[1][1]
|
|
55
|
-
nz_base = nanoparticle_supercell[2][2]
|
|
56
|
-
|
|
57
|
-
# Get lattice dimensions
|
|
58
|
-
lattice_dimensions = self._get_cartesian_lattice_dimensions()
|
|
59
|
-
|
|
60
|
-
# Calculate additional cells needed for vacuum padding on each side
|
|
61
|
-
# We need padding on both sides, so total padding = 2 * vacuum_padding
|
|
62
|
-
vacuum_cells_x = max(1, int(np.ceil(2 * self.vacuum_padding / lattice_dimensions[0])))
|
|
63
|
-
vacuum_cells_y = max(1, int(np.ceil(2 * self.vacuum_padding / lattice_dimensions[1])))
|
|
64
|
-
vacuum_cells_z = max(1, int(np.ceil(2 * self.vacuum_padding / lattice_dimensions[2])))
|
|
65
|
-
|
|
66
|
-
# Total supercell size = nanoparticle size + vacuum padding
|
|
67
|
-
nx_total = nx_base + vacuum_cells_x
|
|
68
|
-
ny_total = ny_base + vacuum_cells_y
|
|
69
|
-
nz_total = nz_base + vacuum_cells_z
|
|
70
|
-
|
|
71
|
-
return [[nx_total, 0, 0], [0, ny_total, 0], [0, 0, nz_total]]
|
|
72
|
-
|
|
73
|
-
@property
|
|
74
|
-
def xy_supercell_matrix_to_fit_nanoparticle(self) -> List[List[int]]:
|
|
75
|
-
"""
|
|
76
|
-
Get the 2D supercell matrix for the xy plane to fit the nanoparticle.
|
|
77
|
-
"""
|
|
78
|
-
supercell_3d = self.supercell_to_fit_nanoparticle
|
|
79
|
-
return [[supercell_3d[0][0], 0], [0, supercell_3d[1][1]]]
|
|
80
|
-
|
|
81
|
-
@property
|
|
82
|
-
def number_of_layers_to_fit_nanoparticle(self) -> int:
|
|
83
|
-
"""
|
|
84
|
-
Get the number of layers (z-direction repetitions) needed to fit the nanoparticle.
|
|
85
|
-
"""
|
|
86
|
-
return self.supercell_to_fit_nanoparticle[2][2]
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
from typing import Callable, Dict
|
|
2
|
-
|
|
3
|
-
from .configuration import ASEBasedNanoparticleConfiguration
|
|
4
|
-
from ..enums import NanoparticleShapesEnum
|
|
5
|
-
from ......analyze import get_chemical_formula_empirical
|
|
6
|
-
from ......build_components import MaterialWithBuildMetadata, BaseSingleBuilder
|
|
7
|
-
from ......build_components.mixins import ConvertGeneratedItemsASEAtomsMixin
|
|
8
|
-
from ......third_party import ASEAtoms
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class ASEBasedNanoparticleBuilder(ConvertGeneratedItemsASEAtomsMixin, BaseSingleBuilder):
|
|
12
|
-
"""
|
|
13
|
-
Generalized builder for creating nanoparticles based on ASE cluster tools.
|
|
14
|
-
Passes configuration parameters directly to the ASE constructors.
|
|
15
|
-
"""
|
|
16
|
-
|
|
17
|
-
_ConfigurationType: type(ASEBasedNanoparticleConfiguration) = ASEBasedNanoparticleConfiguration # type: ignore
|
|
18
|
-
_GeneratedItemType: type(ASEAtoms) = ASEAtoms # type: ignore
|
|
19
|
-
|
|
20
|
-
@staticmethod
|
|
21
|
-
def _get_ase_nanoparticle_parameters(config: ASEBasedNanoparticleConfiguration) -> Dict:
|
|
22
|
-
parameters = config.parameters or {}
|
|
23
|
-
parameters["symbol"] = config.element
|
|
24
|
-
return parameters
|
|
25
|
-
|
|
26
|
-
@classmethod
|
|
27
|
-
def _get_ase_nanoparticle_constructor(cls, config: ASEBasedNanoparticleConfiguration) -> Callable[..., ASEAtoms]:
|
|
28
|
-
constructor = NanoparticleShapesEnum.get_ase_constructor(config.shape.value)
|
|
29
|
-
return constructor
|
|
30
|
-
|
|
31
|
-
@staticmethod
|
|
32
|
-
def _set_ase_cell(atoms: ASEAtoms, vacuum: float) -> ASEAtoms:
|
|
33
|
-
"""
|
|
34
|
-
Set the cell of an ASE atoms object to a cubic box with vacuum padding around the nanoparticle.
|
|
35
|
-
"""
|
|
36
|
-
max_dimension_along_x = abs(atoms.positions[:, 0]).max()
|
|
37
|
-
box_size = 2 * max_dimension_along_x + vacuum
|
|
38
|
-
atoms.set_cell([box_size, box_size, box_size], scale_atoms=False)
|
|
39
|
-
atoms.center()
|
|
40
|
-
return atoms
|
|
41
|
-
|
|
42
|
-
def _generate(self, configuration: ASEBasedNanoparticleConfiguration) -> MaterialWithBuildMetadata:
|
|
43
|
-
parameters = self._get_ase_nanoparticle_parameters(configuration)
|
|
44
|
-
constructor = self._get_ase_nanoparticle_constructor(configuration)
|
|
45
|
-
nanoparticle_without_cell = constructor(**parameters)
|
|
46
|
-
nanoparticle = self._set_ase_cell(nanoparticle_without_cell, configuration.vacuum_padding)
|
|
47
|
-
|
|
48
|
-
return MaterialWithBuildMetadata.create(self._convert_generated_item(nanoparticle))
|
|
49
|
-
|
|
50
|
-
def _update_material_name(
|
|
51
|
-
self, material: MaterialWithBuildMetadata, configuration: ASEBasedNanoparticleConfiguration
|
|
52
|
-
) -> MaterialWithBuildMetadata:
|
|
53
|
-
material.name = f"{get_chemical_formula_empirical(material)} {configuration.shape.value.capitalize()}"
|
|
54
|
-
return material
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
from typing import Dict, Optional
|
|
2
|
-
|
|
3
|
-
from ......build_components import BaseConfigurationPydantic
|
|
4
|
-
from ..enums import NanoparticleShapesEnum
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class ASEBasedNanoparticleConfiguration(BaseConfigurationPydantic):
|
|
8
|
-
"""
|
|
9
|
-
Configuration for building a nanoparticle with bottom-up approach from atoms.
|
|
10
|
-
|
|
11
|
-
Attributes:
|
|
12
|
-
shape (NanoparticleShapes): The desired shape of the nanoparticle.
|
|
13
|
-
parameters (dict): Dictionary of parameters to pass to the corresponding ASE constructor.
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
shape: NanoparticleShapesEnum
|
|
17
|
-
parameters: Optional[Dict] = None
|
|
18
|
-
element: str
|
|
19
|
-
vacuum_padding: float = 10.0
|
package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/enums.py
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
from enum import Enum
|
|
2
|
-
from typing import Callable
|
|
3
|
-
|
|
4
|
-
from .....third_party import (
|
|
5
|
-
ASEIcosahedron,
|
|
6
|
-
ASEOctahedron,
|
|
7
|
-
ASEDecahedron,
|
|
8
|
-
ASESimpleCubic,
|
|
9
|
-
ASEFaceCenteredCubic,
|
|
10
|
-
ASEBodyCenteredCubic,
|
|
11
|
-
ASEHexagonalClosedPacked,
|
|
12
|
-
ASEWulffConstruction,
|
|
13
|
-
ASEAtoms,
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class NanoparticleShapesEnum(str, Enum):
|
|
18
|
-
"""
|
|
19
|
-
Enum for supported nanoparticle shapes.
|
|
20
|
-
"""
|
|
21
|
-
|
|
22
|
-
ICOSAHEDRON = "icosahedron"
|
|
23
|
-
OCTAHEDRON = "octahedron"
|
|
24
|
-
DECAHEDRON = "decahedron"
|
|
25
|
-
SIMPLE_CUBIC = "simple_cubic"
|
|
26
|
-
FACE_CENTERED_CUBIC = "face_centered_cubic"
|
|
27
|
-
BODY_CENTERED_CUBIC = "body_centered_cubic"
|
|
28
|
-
HEXAGONAL_CLOSED_PACKED = "hexagonal_closed_packed"
|
|
29
|
-
WULFF_CONSTRUCTION = "wulff_construction"
|
|
30
|
-
|
|
31
|
-
@staticmethod
|
|
32
|
-
def get_ase_constructor(shape: str) -> Callable[..., ASEAtoms]:
|
|
33
|
-
return {
|
|
34
|
-
"icosahedron": ASEIcosahedron,
|
|
35
|
-
"octahedron": ASEOctahedron,
|
|
36
|
-
"decahedron": ASEDecahedron,
|
|
37
|
-
"simple_cubic": ASESimpleCubic,
|
|
38
|
-
"face_centered_cubic": ASEFaceCenteredCubic,
|
|
39
|
-
"body_centered_cubic": ASEBodyCenteredCubic,
|
|
40
|
-
"hexagonal_closed_packed": ASEHexagonalClosedPacked,
|
|
41
|
-
"ase_wulff_construction": ASEWulffConstruction,
|
|
42
|
-
}[shape]
|
package/src/py/mat3ra/made/tools/build/pristine_structures/zero_dimensional/nanoparticle/helpers.py
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
from types import SimpleNamespace
|
|
2
|
-
from typing import Union
|
|
3
|
-
|
|
4
|
-
from mat3ra.made.material import Material
|
|
5
|
-
from . import (
|
|
6
|
-
NanoparticleConfiguration,
|
|
7
|
-
NanoparticleBuilder,
|
|
8
|
-
NanoparticleShapesEnum,
|
|
9
|
-
ASEBasedNanoparticleConfiguration,
|
|
10
|
-
ASEBasedNanoparticleBuilder,
|
|
11
|
-
)
|
|
12
|
-
from .analyzer import NanoparticleMaterialAnalyzer
|
|
13
|
-
from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.helpers import create_slab
|
|
14
|
-
from ....defective_structures.two_dimensional.island.helpers import CoordinateConditionType
|
|
15
|
-
from .....analyze.other import get_closest_site_id_from_coordinate
|
|
16
|
-
from .....build_components import MaterialWithBuildMetadata
|
|
17
|
-
from .....build_components.entities.auxiliary.zero_dimensional.void_region.configuration import VoidRegionConfiguration
|
|
18
|
-
from .....entities.coordinate import SphereCoordinateCondition
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def create_nanoparticle_from_material(
|
|
22
|
-
material: Union[Material, MaterialWithBuildMetadata],
|
|
23
|
-
condition: Union[
|
|
24
|
-
SphereCoordinateCondition,
|
|
25
|
-
CoordinateConditionType,
|
|
26
|
-
] = SphereCoordinateCondition(),
|
|
27
|
-
orientation_z=None,
|
|
28
|
-
center_around_atom: bool = True,
|
|
29
|
-
use_cartesian_coordinates: bool = True,
|
|
30
|
-
vacuum_padding: float = 10.0,
|
|
31
|
-
) -> MaterialWithBuildMetadata:
|
|
32
|
-
"""
|
|
33
|
-
Create a nanoparticle by applying a coordinate condition to a crystal.
|
|
34
|
-
|
|
35
|
-
Args:
|
|
36
|
-
material: The crystal material from which the nanoparticle is created.
|
|
37
|
-
condition: The coordinate condition that defines the nanoparticle shape.
|
|
38
|
-
orientation_z: The orientation of the crystallographic axis in the z-direction.
|
|
39
|
-
center_around_atom: Whether to center the condition around an atom close to the center in the material.
|
|
40
|
-
use_cartesian_coordinates: Whether the condition supplied is in Cartesian coordinates.
|
|
41
|
-
vacuum_padding: Padding for vacuum space around the nanoparticle.
|
|
42
|
-
|
|
43
|
-
Returns:
|
|
44
|
-
MaterialWithBuildMetadata: The nanoparticle material with build metadata.
|
|
45
|
-
"""
|
|
46
|
-
|
|
47
|
-
if orientation_z is None:
|
|
48
|
-
orientation_z = [0, 0, 1]
|
|
49
|
-
analyzer = NanoparticleMaterialAnalyzer(
|
|
50
|
-
material=material,
|
|
51
|
-
orientation_z=orientation_z,
|
|
52
|
-
vacuum_padding=vacuum_padding,
|
|
53
|
-
coordinate_condition=condition,
|
|
54
|
-
)
|
|
55
|
-
|
|
56
|
-
repetitions_z = analyzer.number_of_layers_to_fit_nanoparticle
|
|
57
|
-
xy_supercell = analyzer.xy_supercell_matrix_to_fit_nanoparticle
|
|
58
|
-
|
|
59
|
-
if len(orientation_z) != 3:
|
|
60
|
-
raise ValueError("orientation_z must have exactly three elements.")
|
|
61
|
-
slab = create_slab(
|
|
62
|
-
material,
|
|
63
|
-
miller_indices=tuple(orientation_z), # type: ignore
|
|
64
|
-
number_of_layers=repetitions_z,
|
|
65
|
-
xy_supercell_matrix=xy_supercell,
|
|
66
|
-
vacuum=0,
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
# Find an atom close to center, to apply the condition around it
|
|
70
|
-
if center_around_atom:
|
|
71
|
-
slab.to_cartesian()
|
|
72
|
-
center_coordinate = slab.basis.cell.convert_point_to_cartesian([0.5, 0.5, 0.5])
|
|
73
|
-
center_id_at_site = get_closest_site_id_from_coordinate(slab, center_coordinate, use_cartesian_coordinates=True)
|
|
74
|
-
center_coordinate = slab.basis.coordinates.get_element_value_by_index(center_id_at_site)
|
|
75
|
-
condition.center_coordinate = center_coordinate
|
|
76
|
-
|
|
77
|
-
void_region_config = VoidRegionConfiguration(
|
|
78
|
-
crystal=slab,
|
|
79
|
-
coordinate_condition=condition,
|
|
80
|
-
use_cartesian_coordinates=use_cartesian_coordinates,
|
|
81
|
-
)
|
|
82
|
-
config = NanoparticleConfiguration(merge_components=[slab, void_region_config])
|
|
83
|
-
|
|
84
|
-
nanoparticle = NanoparticleBuilder().get_material(config)
|
|
85
|
-
return nanoparticle
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
def create_nanoparticle_by_shape(
|
|
89
|
-
crystal: Union[Material, MaterialWithBuildMetadata],
|
|
90
|
-
shape: NanoparticleShapesEnum,
|
|
91
|
-
parameters: Union[dict, SimpleNamespace],
|
|
92
|
-
):
|
|
93
|
-
"""
|
|
94
|
-
Create a nanoparticle from a crystal material by specifying its shape and parameters.
|
|
95
|
-
|
|
96
|
-
Provide the crystal which first element nad lattice constant will be used to create the nanoparticle.
|
|
97
|
-
|
|
98
|
-
"""
|
|
99
|
-
|
|
100
|
-
# TODO: should done in analyzer
|
|
101
|
-
element = crystal.basis.elements.values[0]
|
|
102
|
-
lattice_constant = crystal.lattice.a
|
|
103
|
-
|
|
104
|
-
return create_nanoparticle_by_shape_from_element(
|
|
105
|
-
element=element, shape=shape, lattice_constant=lattice_constant, parameters=parameters
|
|
106
|
-
)
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
def create_nanoparticle_by_shape_from_element(
|
|
110
|
-
element: str,
|
|
111
|
-
lattice_constant: float,
|
|
112
|
-
shape: NanoparticleShapesEnum,
|
|
113
|
-
parameters: Union[dict, SimpleNamespace],
|
|
114
|
-
):
|
|
115
|
-
"""
|
|
116
|
-
Create a nanoparticle from a specified element, lattice constant, shape, and parameters.
|
|
117
|
-
The shape is defined by the NanoparticleShapesEnum, and parameters are passed directly to the ASE constructor.
|
|
118
|
-
"""
|
|
119
|
-
if not isinstance(parameters, SimpleNamespace):
|
|
120
|
-
parameters = SimpleNamespace(**parameters)
|
|
121
|
-
if not hasattr(parameters, "latticeconstant"):
|
|
122
|
-
parameters.latticeconstant = lattice_constant
|
|
123
|
-
|
|
124
|
-
config = ASEBasedNanoparticleConfiguration(shape=shape, parameters=parameters.__dict__, element=element)
|
|
125
|
-
builder = ASEBasedNanoparticleBuilder()
|
|
126
|
-
nanoparticles = builder.get_material(config)
|
|
127
|
-
return nanoparticles
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
from typing import Dict, Type, Union
|
|
2
|
-
|
|
3
|
-
from mat3ra.made.material import Material
|
|
4
|
-
from .configuration import NanoparticleConfiguration
|
|
5
|
-
from .....defective_structures.zero_dimensional.point_defect.vacancy.builder import VacancyDefectBuilder
|
|
6
|
-
from ......analyze import get_chemical_formula_empirical
|
|
7
|
-
from ......build_components import MaterialWithBuildMetadata
|
|
8
|
-
from ......build_components.entities.auxiliary.zero_dimensional.void_region.builder import VoidRegionBuilder
|
|
9
|
-
from ......build_components.entities.auxiliary.zero_dimensional.void_region.configuration import VoidRegionConfiguration
|
|
10
|
-
from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.builder import SlabBuilder
|
|
11
|
-
from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.configuration import SlabConfiguration
|
|
12
|
-
from ......build_components.operations.core.combinations.merge import MergeBuilder
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class NanoparticleBuilder(VacancyDefectBuilder, MergeBuilder):
|
|
16
|
-
"""
|
|
17
|
-
Builder class for creating a nanoparticle by merging a slab with a void region.
|
|
18
|
-
"""
|
|
19
|
-
|
|
20
|
-
@property
|
|
21
|
-
def merge_component_types_conversion_map(self) -> Dict[Type, Type]:
|
|
22
|
-
return {
|
|
23
|
-
SlabConfiguration: SlabBuilder,
|
|
24
|
-
VoidRegionConfiguration: VoidRegionBuilder,
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
def _update_material_name(
|
|
28
|
-
self, material: Union[Material, MaterialWithBuildMetadata], configuration: NanoparticleConfiguration
|
|
29
|
-
) -> Material:
|
|
30
|
-
formula = get_chemical_formula_empirical(material)
|
|
31
|
-
|
|
32
|
-
material.name = f"{formula} {configuration.void_region_configuration.condition_name} Nanoparticle"
|
|
33
|
-
return material
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
|
-
from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import MergeMethodsEnum
|
|
4
|
-
|
|
5
|
-
from ......build_components.entities.auxiliary.zero_dimensional.void_region.configuration import VoidRegionConfiguration
|
|
6
|
-
from mat3ra.made.tools.build.pristine_structures.two_dimensional.slab.configuration import SlabConfiguration
|
|
7
|
-
from ......build_components.operations.core.combinations.merge.configuration import MergeConfiguration
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class NanoparticleConfiguration(MergeConfiguration):
|
|
11
|
-
merge_components: List = [SlabConfiguration, VoidRegionConfiguration]
|
|
12
|
-
merge_method: MergeMethodsEnum = MergeMethodsEnum.REPLACE
|
|
13
|
-
|
|
14
|
-
@property
|
|
15
|
-
def void_region_configuration(self) -> VoidRegionConfiguration:
|
|
16
|
-
return self.merge_components[1]
|
|
File without changes
|
|
File without changes
|
package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/__init__.py
DELETED
|
File without changes
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
from .passivation_material_analyzer import PassivationMaterialAnalyzer
|
|
2
|
-
from .surface_passivation_material_analyzer import SurfacePassivationMaterialAnalyzer
|
|
3
|
-
from .coordination_based_passivation_material_analyzer import CoordinationBasedPassivationMaterialAnalyzer
|
|
4
|
-
|
|
5
|
-
__all__ = [
|
|
6
|
-
"PassivationMaterialAnalyzer",
|
|
7
|
-
"SurfacePassivationMaterialAnalyzer",
|
|
8
|
-
"CoordinationBasedPassivationMaterialAnalyzer",
|
|
9
|
-
]
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
|
-
import numpy as np
|
|
4
|
-
|
|
5
|
-
from ......analyze.material import MaterialWithCrystalSites
|
|
6
|
-
from ......bond_directions.bond_directions import BondDirections
|
|
7
|
-
from ......bond_directions.bond_directions_templates_for_element import BondDirectionsTemplatesForElement
|
|
8
|
-
|
|
9
|
-
from .surface_passivation_material_analyzer import SurfacePassivationMaterialAnalyzer
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class CoordinationBasedPassivationMaterialAnalyzer(SurfacePassivationMaterialAnalyzer):
|
|
13
|
-
"""
|
|
14
|
-
Builder for passivating material surfaces based on coordination number analysis.
|
|
15
|
-
|
|
16
|
-
This builder analyzes atomic coordination environments and reconstructs missing bonds
|
|
17
|
-
using templates derived from fully coordinated atoms. It works by:
|
|
18
|
-
|
|
19
|
-
1. Finding undercoordinated atoms that need passivation
|
|
20
|
-
2. Creating bond vector templates for each element type by:
|
|
21
|
-
- Collecting vectors from atoms with the highest valid coordination
|
|
22
|
-
- Grouping similar vector arrangements into unique templates
|
|
23
|
-
3. Reconstructing missing bonds by:
|
|
24
|
-
- Matching existing bonds against templates
|
|
25
|
-
- Finding the best-matching template for each atom
|
|
26
|
-
- Adding missing bond vectors from the template
|
|
27
|
-
4. Placing passivant atoms (typically H) along the reconstructed bond vectors
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
coordination_threshold: int = 3 # The coordination number threshold for an atom to be considered undercoordinated.
|
|
31
|
-
number_of_bonds_to_passivate: int = 1 # The maximum number of bonds to passivate for each undercoordinated atom.
|
|
32
|
-
symmetry_tolerance: float = 0.1 # The tolerance for symmetry comparison of vectors for bonds.
|
|
33
|
-
|
|
34
|
-
@property
|
|
35
|
-
def material_with_crystal_sites(self) -> MaterialWithCrystalSites:
|
|
36
|
-
material_with_crystal_sites = MaterialWithCrystalSites.from_material(material=self.material)
|
|
37
|
-
material_with_crystal_sites.analyze()
|
|
38
|
-
return material_with_crystal_sites
|
|
39
|
-
|
|
40
|
-
@property
|
|
41
|
-
def undercoordinated_atoms_indices(self):
|
|
42
|
-
return self.material_with_crystal_sites.get_undercoordinated_atom_indices(
|
|
43
|
-
cutoff=self.shadowing_radius,
|
|
44
|
-
coordination_threshold=self.coordination_threshold,
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
@property
|
|
48
|
-
def bonds_templates(self) -> List[BondDirectionsTemplatesForElement]:
|
|
49
|
-
"""
|
|
50
|
-
Find unique bond directions based on the material's crystal sites.
|
|
51
|
-
|
|
52
|
-
Returns:
|
|
53
|
-
List[BondDirectionsTemplatesForElement]: A list of unique bond direction templates.
|
|
54
|
-
"""
|
|
55
|
-
# TODO: bonds_templates will be passed from the self in the "controlled" version of this class
|
|
56
|
-
return self.material_with_crystal_sites.find_unique_bond_directions()
|
|
57
|
-
|
|
58
|
-
@property
|
|
59
|
-
def reconstructed_bonds(self) -> List[BondDirections]:
|
|
60
|
-
"""
|
|
61
|
-
Find missing bonds for all sites based on the bond templates.
|
|
62
|
-
|
|
63
|
-
Returns:
|
|
64
|
-
List[BondDirections]: A list of reconstructed bond directions for each atom.
|
|
65
|
-
"""
|
|
66
|
-
return self.material_with_crystal_sites.find_missing_bonds_for_all_sites(
|
|
67
|
-
bond_templates_list=self.bonds_templates,
|
|
68
|
-
max_bonds_to_add=self.number_of_bonds_to_passivate,
|
|
69
|
-
angle_tolerance=self.symmetry_tolerance,
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
def _normalize_and_convert_bond_vector(self, bond_vector):
|
|
73
|
-
"""
|
|
74
|
-
Normalize a bond vector and convert it to crystal coordinates.
|
|
75
|
-
Args:
|
|
76
|
-
bond_vector: The bond vector to normalize and convert.
|
|
77
|
-
|
|
78
|
-
Returns:
|
|
79
|
-
numpy.ndarray: The normalized bond vector in crystal coordinates, or None if the vector is zero.
|
|
80
|
-
"""
|
|
81
|
-
bond_vector_np = np.array(bond_vector)
|
|
82
|
-
if np.linalg.norm(bond_vector_np) == 0:
|
|
83
|
-
return None
|
|
84
|
-
normalized_bond = bond_vector_np / np.linalg.norm(bond_vector_np) * self.bond_length
|
|
85
|
-
return self.material.basis.cell.convert_point_to_crystal(normalized_bond)
|
|
86
|
-
|
|
87
|
-
@property
|
|
88
|
-
def passivant_coordinates(
|
|
89
|
-
self,
|
|
90
|
-
):
|
|
91
|
-
"""
|
|
92
|
-
Calculate the coordinates for placing passivating atoms based on reconstructed bonds.
|
|
93
|
-
|
|
94
|
-
Args:
|
|
95
|
-
self (PassivationConfiguration): Configuration for passivation.
|
|
96
|
-
|
|
97
|
-
Returns:
|
|
98
|
-
list: Coordinates where passivants should be added.
|
|
99
|
-
"""
|
|
100
|
-
passivant_coordinates = []
|
|
101
|
-
|
|
102
|
-
for idx in self.undercoordinated_atoms_indices:
|
|
103
|
-
for bond_vector in self.reconstructed_bonds[idx]:
|
|
104
|
-
normalized_bond_crystal = self._normalize_and_convert_bond_vector(bond_vector)
|
|
105
|
-
if normalized_bond_crystal is None:
|
|
106
|
-
continue
|
|
107
|
-
passivant_coordinates.append(
|
|
108
|
-
np.array(self.material.basis.coordinates.get_element_value_by_index(idx))
|
|
109
|
-
+ np.array(normalized_bond_crystal)
|
|
110
|
-
)
|
|
111
|
-
|
|
112
|
-
return passivant_coordinates
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
|
-
from ......analyze.slab import SlabMaterialAnalyzer
|
|
4
|
-
from ..enums import SurfaceTypesEnum
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class PassivationMaterialAnalyzer(SlabMaterialAnalyzer):
|
|
8
|
-
passivant: str = "H"
|
|
9
|
-
bond_length: float = 1.0
|
|
10
|
-
surface: SurfaceTypesEnum = SurfaceTypesEnum.TOP
|
|
11
|
-
|
|
12
|
-
@property
|
|
13
|
-
def passivant_coordinates(self) -> List[List[float]]:
|
|
14
|
-
raise NotImplementedError(
|
|
15
|
-
"This method should be implemented in subclasses to return passivant coordinates based on the surface type."
|
|
16
|
-
)
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import numpy as np
|
|
2
|
-
|
|
3
|
-
from ......analyze.other import get_surface_atom_indices
|
|
4
|
-
from ..enums import SurfaceTypesEnum
|
|
5
|
-
|
|
6
|
-
from .passivation_material_analyzer import PassivationMaterialAnalyzer
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class SurfacePassivationMaterialAnalyzer(PassivationMaterialAnalyzer):
|
|
10
|
-
shadowing_radius: float = 2.5
|
|
11
|
-
depth: float = 5.0
|
|
12
|
-
|
|
13
|
-
@property
|
|
14
|
-
def passivant_coordinates(
|
|
15
|
-
self,
|
|
16
|
-
):
|
|
17
|
-
"""
|
|
18
|
-
Calculate the coordinates for placing passivants based on the specified surface type.
|
|
19
|
-
|
|
20
|
-
Args:
|
|
21
|
-
self (SurfacePassivationConfiguration): Configuration for passivation.
|
|
22
|
-
|
|
23
|
-
Returns:
|
|
24
|
-
list: Coordinates where passivants should be added.
|
|
25
|
-
"""
|
|
26
|
-
surface_atoms_indices = get_surface_atom_indices(self.material, self.surface, self.shadowing_radius, self.depth)
|
|
27
|
-
surface_atoms_coordinates = [
|
|
28
|
-
self.material.basis.coordinates.get_element_value_by_index(i) for i in surface_atoms_indices
|
|
29
|
-
]
|
|
30
|
-
bond_vector = [0, 0, self.bond_length] if self.surface == SurfaceTypesEnum.TOP else [0, 0, -self.bond_length]
|
|
31
|
-
passivant_bond_vector_crystal = self.material.basis.cell.convert_point_to_crystal(bond_vector)
|
|
32
|
-
return (np.array(surface_atoms_coordinates) + np.array(passivant_bond_vector_crystal)).tolist()
|
package/src/py/mat3ra/made/tools/build/processed_structures/two_dimensional/passivation/builder.py
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
from typing import Dict, Type
|
|
2
|
-
|
|
3
|
-
from .....build_components import MaterialWithBuildMetadata
|
|
4
|
-
from .....build_components.entities.core.zero_dimensional.atom.builder import AtomAtCoordinateBuilder
|
|
5
|
-
from .....build_components.entities.core.zero_dimensional.atom.configuration import AtomAtCoordinateConfiguration
|
|
6
|
-
from .....build_components.operations.core.combinations.merge import MergeBuilder
|
|
7
|
-
|
|
8
|
-
from .configuration import PassivationConfiguration
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class PassivationBuilder(MergeBuilder):
|
|
12
|
-
@property
|
|
13
|
-
def merge_component_types_conversion_map(self) -> Dict[Type, Type]:
|
|
14
|
-
return {
|
|
15
|
-
AtomAtCoordinateConfiguration: AtomAtCoordinateBuilder,
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
def _update_material_name(
|
|
19
|
-
self, material: MaterialWithBuildMetadata, configuration: PassivationConfiguration
|
|
20
|
-
) -> MaterialWithBuildMetadata:
|
|
21
|
-
material_name = configuration.material.name
|
|
22
|
-
material.name = f"{material_name}, {configuration.passivant}-passivated"
|
|
23
|
-
return material
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
from typing import List, Union
|
|
2
|
-
|
|
3
|
-
from mat3ra.esse.models.materials_category.processed_structures.two_dimensional.passivation.configuration import (
|
|
4
|
-
PassivationConfigurationSchema,
|
|
5
|
-
)
|
|
6
|
-
from mat3ra.esse.models.materials_category_components.operations.core.combinations.merge import MergeMethodsEnum
|
|
7
|
-
|
|
8
|
-
from mat3ra.made.material import Material
|
|
9
|
-
from .....build_components import MaterialWithBuildMetadata
|
|
10
|
-
from .....build_components.entities.core.zero_dimensional.atom.configuration import AtomAtCoordinateConfiguration
|
|
11
|
-
from .....build_components.operations.core.combinations.merge.configuration import MergeConfiguration
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class PassivationConfiguration(MergeConfiguration, PassivationConfigurationSchema):
|
|
15
|
-
"""
|
|
16
|
-
Configuration for a passivation.
|
|
17
|
-
|
|
18
|
-
Args:
|
|
19
|
-
merge_components (List[Material, AtomAtCoordinateConfiguration]): The components to merge.
|
|
20
|
-
passivant (str): The passivating element.
|
|
21
|
-
bond_length (float): The bond length.
|
|
22
|
-
"""
|
|
23
|
-
|
|
24
|
-
merge_components: List[Union[Material, MaterialWithBuildMetadata, AtomAtCoordinateConfiguration]]
|
|
25
|
-
merge_method: MergeMethodsEnum = MergeMethodsEnum.ADD
|
|
26
|
-
passivant: str = "H"
|
|
27
|
-
bond_length: float = 1.0
|
|
28
|
-
|
|
29
|
-
@property
|
|
30
|
-
def material(self) -> MaterialWithBuildMetadata:
|
|
31
|
-
return self.merge_components[0]
|