def test_equality_of_sqs_objects(): """SQS structures with different underlying crystal structures are equivalent iff sublattice models are equivalent.""" config = [['A', 'B'], ['A']] occupancy = [[0.5, 0.5], [1]] site_ratios = [3, 1] # Use same sublattice for different underlying structures. Should be equal s1 = PRLStructure(Lattice.hexagonal(1, 2), ['Mg', 'Mg'], [[0, 0, 0], [0.3333, 0.66666, 0.5]], sublattice_configuration=config, sublattice_occupancies=occupancy, sublattice_site_ratios=site_ratios) s2 = PRLStructure(Lattice.cubic(1), ['Fe'], [[0, 0, 0]], sublattice_configuration=config, sublattice_occupancies=occupancy, sublattice_site_ratios=site_ratios) assert s1 == s2 # Use same underlying crystal structures, but different sublattice configurations. Should be not equal s1.sublattice_site_ratios = [2, 1] assert s1 != s2 s1.sublattice_site_ratios = site_ratios s1.sublattice_occupancies = [[0.25, 0.5], [1]] assert s1 != s2 s1.sublattice_occupancies = occupancy s1.sublattice_configuration = [['A', 'A'], ['A']] assert s1 != s2 s1.sublattice_configuration = config assert s1 == s2
def test_equality_of_sqs_objects_with_different_indexing(): """SQS structures that are the same, but indexed differently should be equal.""" # TODO: implement this behavior in SQS.__eq__ config_1 = [['A', 'B'], ['A']] occupancy_1 = [[0.25, 0.75], [1]] site_ratios_1 = [3, 1] config_2 = [['A'], ['A', 'B']] occupancy_2 = [[1], [0.25, 0.75]] site_ratios_2 = [1, 3] s1 = PRLStructure(Lattice.hexagonal(1, 2), ['Mg', 'Mg'], [[0, 0, 0], [0.3333, 0.66666, 0.5]], sublattice_configuration=config_1, sublattice_occupancies=occupancy_1, sublattice_site_ratios=site_ratios_1) s2 = PRLStructure(Lattice.hexagonal(1, 2), ['Mg', 'Mg'], [[0, 0, 0], [0.3333, 0.66666, 0.5]], sublattice_configuration=config_2, sublattice_occupancies=occupancy_2, sublattice_site_ratios=site_ratios_2) assert s1 == s2
def get_lattice(kind): if kind == "hcp": latt = Lattice( np.array([[1, 0, 0], [0.5, np.sqrt(3) / 2, 0], [0, 0, 2 * np.sqrt(6) / 3]])) coords = [[0, 0, 0], [1 / 3, 1 / 3, 0.5]] else: coords = [[0, 0, 0]] if kind == "sc": latt = Lattice(np.eye(3)) elif kind == "fcc": latt = Lattice(np.array([[0, 1, 1], [1, 0, 1], [1, 1, 0]])) elif kind == "bcc": latt = Lattice(np.array([[-1, 1, 1], [1, -1, 1], [1, 1, -1]])) elif kind == "hex": latt = Lattice.hexagonal(1, 2 * np.sqrt(6) / 3) elif kind == "tet": latt = Lattice(np.diag([1, 1, 1.2])) struct = Structure(latt, [DummySpecie("X")] * len(coords), coords) return struct