Source code for doped.utils.legacy_pmg

"""
This code has been copied over from pymatgen==2022.7.25, as it was deleted in
later versions.

This is a temporary measure while refactoring to use the new pymatgen-analysis-
defects package takes place.
"""
import copy

from monty.json import MSONable
from pymatgen.analysis.structure_matcher import StructureMatcher


[docs]class PointDefectComparator(MSONable): """ A class that matches pymatgen Point Defect objects even if their Cartesian coordinates are different (compares sublattices for the defect). NOTE: for defect complexes (more than a single defect), this comparator will break. """ def __init__(self, check_charge=False, check_primitive_cell=False, check_lattice_scale=False): """ Args: check_charge (bool): Gives option to check if charges are identical. Default is False (different charged defects can be same) check_primitive_cell (bool): Gives option to compare different supercells of bulk_structure, rather than directly compare supercell sizes Default is False (requires bulk_structure in each defect to be same size) check_lattice_scale (bool): Gives option to scale volumes of structures to each other identical lattice constants. Default is False (enforces same lattice constants in both structures). """ self.check_charge = check_charge self.check_primitive_cell = check_primitive_cell self.check_lattice_scale = check_lattice_scale
[docs] def are_equal(self, d1, d2): """ Args: d1: First defect. A pymatgen Defect object. d2: Second defect. A pymatgen Defect object. Returns: True if defects are identical in type and sublattice. """ if not isinstance(d1, d2.__class__): return False if d1.site.specie != d2.site.specie: return False sm = StructureMatcher( ltol=0.01, primitive_cell=self.check_primitive_cell, scale=self.check_lattice_scale, ) if not sm.fit(d1.structure, d2.structure): return False d1 = copy.deepcopy(d1) d2 = copy.deepcopy(d2) return sm.fit(d1.defect_structure, d2.defect_structure) # edited by SK to work with new pmg