def test_Coset(): g = geo.Symmetry(nb.Matrix([[1, 0, 2, -1], [0, -2, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]])) tg = geo.Transgen(geo.Dif(nb.Matrix([[1], [0], [0], [0]])), geo.Dif(nb.Matrix([[0], [1], [0], [0]])), geo.Dif(nb.Matrix([[0], [0], [2], [0]]))) tg1 = geo.Transgen(geo.Dif(nb.Matrix([[1], [0], [0], [0]])), geo.Dif(nb.Matrix([[0], [1], [0], [0]])), geo.Dif(nb.Matrix([[0], [0], [2], [0]]))) assert tg == tg1 c = geo.Coset(g, tg) assert c.__str__() == \ "{x+2z,-2y,z+1}\n"\ " 1 0 0 \n"\ " 0 1 0 \n"\ " 0 0 2 " c = geo.Coset(g, geo.canonical) assert c.__str__() == "{x+2z,-2y,z}" g = geo.Symmetry(nb.Matrix([[ 1, 0, 0, 0.5], [ 0, 1, 0, 0], [ 0, 0, 1, 0], [ 0, 0, 0, 1]])) c = geo.Coset(g, geo.canonical) g2 = geo.Symmetry(nb.Matrix([[ 1, 0, 0, -0.5], [ 0, 1, 0, 0], [ 0, 0, 1, 0], [ 0, 0, 0, 1]])) p1 = geo.Pos(nb.Matrix([[0.3], [0], [0], [1]])) p2 = geo.Pos(nb.Matrix([[0.8], [0], [0], [1]])) assert c.coset_representant_for_pos(p1) == g assert c.coset_representant_for_pos(p2) == g2
def test_Spacegroup(): transgen = geo.canonical c1 = geo.Coset(geo.Symmetry(nb.Matrix.onematrix(4)), transgen) c2 = geo.Coset( geo.Symmetry( nb.Matrix([[-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])), transgen) sg = geo.Spacegroup(transgen, [c1, c2]) assert sg.__str__() == \ "Spacegroup \n"\ "---------- \n"\ " canonical \n"\ " x,y,z\n"\ " -x,-y,-z" transgen = geo.Transgen(geo.Dif(nb.Matrix([[1], [0], [0], [0]])), geo.Dif(nb.Matrix([[0], [1], [0], [0]])), geo.Dif(nb.Matrix([[0], [0], [2], [0]]))) c1 = geo.Coset(geo.Symmetry(nb.Matrix.onematrix(4)), transgen) c2 = geo.Coset( geo.Symmetry( nb.Matrix([[-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])), transgen) sg = geo.Spacegroup(transgen, [c1, c2]) assert sg.__str__() == \ " Spacegroup \n"\ " ---------- \n"\ "Transgen / 1 \ / 0 \ / 0 \ \n"\ " | 0 | | 1 | | 0 | \n"\ " \ 0 / \ 0 / \ 2 / \n"\ " x,y,z\n"\ " -x,-y,-z" sg = geo.Spacegroup(geo.canonical, [ geo.Coset(geo.Symmetry(nb.Matrix.onematrix(4)), geo.canonical), geo.Coset( geo.Symmetry( nb.Matrix([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])), geo.canonical) ]) transformation = geo.Transformation( nb.Matrix([[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])) sg1 = transformation**sg sg2 = geo.Spacegroup(transformation**geo.canonical, [ geo.Coset(geo.Symmetry(nb.Matrix.onematrix(4)), geo.canonical), geo.Coset( geo.Symmetry( nb.Matrix([[-1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])), geo.canonical) ]) assert sg.is_really_a_spacegroup() == True sg_error = geo.Spacegroup(geo.canonical, [ geo.Coset(geo.Symmetry(nb.Matrix.onematrix(4)), geo.canonical), geo.Coset( geo.Symmetry( nb.Matrix([[1, 0, 0, fr.Fraction(1, 4)], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])), geo.canonical) ]) assert sg_error.is_really_a_spacegroup() == False
def test_Transgen(): tg = geo.Transgen(geo.Dif(nb.Matrix([[1], [0], [0], [0]])), geo.Dif(nb.Matrix([[0], [0], [2], [0]])), geo.Dif(nb.Matrix([[0], [3], [0], [0]]))) assert tg.__str__() == "Transgen / 1 \ / 0 \ / 0 \ \n"\ " | 0 | | 0 | | 3 |\n"\ " \ 0 / \ 2 / \ 0 / "
def test_Atom(): atom1 = cr.Atom("Cs1", "Cs", fs("p 0 0 0")) assert atom1.has_color == False assert atom1.__str__() == \ "Atom Cs1 Cs Pos / 0 \ \n" \ " | 0 |\n" \ " \ 0 / " assert (atom1 + "hallo").name == atom1.name + "hallo" atom2 = cr.Atom("Cs2", "Cs", fs("p 0 0 0")) assert atom2 == atom1 assert hash(atom2) == hash(atom1) assert {atom2} == {atom1} atom3 = cr.Atom("Cs3", "Cs", fs("p0.1 0 0")) assert atom3 != atom1 atom4 = cr.Atom("Cs1", "Fe", fs("p 0 0 0")) assert atom4 != atom1 atom5 = cr.Atom("Cs1", "Cs", fs("p 0.1234 0 0")) atom6 = cr.Atom("Cs2", "Cs", fs("p 0.1234000000001 0 0")) assert hash(atom5) == hash(atom6) assert atom5 == atom6 atom = cr.Atom("Cl1", "Cl", fs("p 1/2 1/2 1/2")) transformation = fs("O->(0,0,0) \n" "then\n" "a' = a \n" "b' = 2b \n" "c' = c") atom_trans = cr.Atom("Cl1", "Cl", fs("p 1/2 1/4 1/2")) assert (transformation ** atom).__str__() == atom_trans.__str__() sym = fs("-x+1/2,-y+1/2, z") atom_sym = cr.Atom("Cl1", "Cl", fs("p0 0 1/2")) assert (sym ** atom).__str__() == atom_sym.__str__() coset = fs("{x, -y, z+1}") atom = cr.Atom("Cl1", "Cl", fs("p 1/2 1/4 1/2")) atom1 = coset ** atom atom2 = cr.Atom("Cl1", "Cl", fs("p 1/2 3/4 1/2")) assert atom1.__str__() == atom2.__str__() transgen = geo.Transgen(fs("d 1 0 0"), fs("d 0 1 0"), fs("d 0 0 2")) atom = cr.Atom("Cl1", "Cl", fs("p 1/2 5/4 -1/2")) atom1 = atom % transgen atom2 = cr.Atom("Cl1", "Cl", fs("p 1/2 1/4 3/2")) assert atom1 == atom2 d = fs("d 1/2 0 0") atom1 = cr.Atom("Cl1", "Cl", fs("p 0 0 0")) atom2 = cr.Atom("Cl1", "Cl", fs("p 1/2 0 0")) atom3 = atom1 + d assert atom2 == atom3
def test_operations(): # Here I want to test all operations between equal and different types. # It shall be as follows: # # * | Symmetry Transformation Transgen Coset Pos Dif Metric Spacegroup # ---------------------------------------------------------------------------------------------- # Symmetry | Symmetry - - - - - - - # Transformation | - Transformation - - - - - - # Transgen | - - - - - - - - # Coset | - - - Coset - - - - # Pos | - - - - - - - - # Dif | - - - - - - - - # Metric | - - - - - - - - # Spacegroup | - - - - - - - - # # # ** | Symmetry Transformation Transgen Coset Pos Dif Metric Spacegroup # ----------------------------------------------------------------------------------------------- # Symmetry | - - - - Pos Dif - - # Transformation | Symmetry - Transgen Coset Pos Dif Metric Spacegroup # Transgen | - - - - - - - - # Coset | - - - - Pos Dif - - # Pos | - - - - - - - - # Dif | - - - - - - - - # Metric | - - - - - - - - # Spacegroup | - - - - - - - - # # # % | Symmetry Transformation Transgen Coset Pos Dif Metric Spacegroup # --------------------------------------------------------------------------------------------- # Symmetry | - - Symmetry - - - - - # Transformation | - - - - - - - - # Transgen | - - - - - - - - # Coset | - - Coset - - - - - # Pos | - - Pos - - - - - # Dif | - - Dif - - - - - # Metric | - - - - - - - - # Spacegroup | - - Spacegroup - - - - - # Coset needs some pow()-declarations, so first I test everything else: symmetry = geo.Symmetry(nb.Matrix([[-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])) transformation = geo.Transformation(nb.Matrix([[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 2, 0], [0, 0, 0, 1]])) transgen = geo.canonical pos = geo.Pos(nb.Matrix([[1], [2], [3], [1]])) dif = geo.Dif(nb.Matrix([[4], [5], [6], [0]])) metric = geo.Metric(nb.Matrix([[4, 0, 0, 0], [0, 9, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])) spacegroup = geo.Spacegroup(geo.canonical, [geo.Coset(geo.Symmetry(nb.Matrix.onematrix(4)), geo.canonical), geo.Coset(geo.Symmetry(nb.Matrix([[-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])), geo.canonical)]) # * : #==== # symmetry * symmetry: assert isinstance(symmetry * symmetry, geo.Symmetry) # transformation * transformation assert isinstance(transformation * transformation, geo.Transformation) # **: #==== # symmetry ** pos: assert isinstance(symmetry ** pos, geo.Pos) # symmetry ** dif: assert isinstance(symmetry ** dif, geo.Dif) # transformation ** symmetry: assert isinstance(transformation ** symmetry, geo.Symmetry) # transformation ** transgen: assert isinstance(transformation ** transgen, geo.Transgen) # transformation ** pos: assert isinstance(transformation ** pos, geo.Pos) # transformation ** dif: assert isinstance(transformation ** dif, geo.Dif) # transformation ** metric: assert isinstance(transformation ** metric, geo.Metric) # transformation ** spacegroup: assert isinstance(transformation ** spacegroup, geo.Spacegroup) # %: #=== # symmetry % transgen: assert isinstance(symmetry % transgen, geo.Symmetry) # pos % transgen: assert isinstance(pos % transgen, geo.Pos) transgen1 = geo.Transgen(geo.Dif(nb.Matrix([[1], [0], [0], [0]])), geo.Dif(nb.Matrix([[0], [1], [0], [0]])), geo.Dif(nb.Matrix([[0], [0], [2], [0]]))) pos1 = geo.Pos(nb.Matrix([[0], [0], [fr.Fraction(3, 2)], [1]])) pos1_ = geo.Pos(nb.Matrix([[0], [0], [fr.Fraction(3, 2)], [1]])) assert pos1 % transgen1 == pos1_ transgen1 = geo.Transgen(geo.Dif(nb.Matrix([[0], [0], [2], [0]])), geo.Dif(nb.Matrix([[0], [1], [0], [0]])), geo.Dif(nb.Matrix([[1], [0], [0], [0]]))) pos1 = geo.Pos(nb.Matrix([[0], [0], [fr.Fraction(3, 2)], [1]])) pos1_ = geo.Pos(nb.Matrix([[0], [0], [fr.Fraction(3, 2)], [1]])) assert pos1 % transgen1 == pos1_ # dif % transgen: assert isinstance(dif % transgen, geo.Dif) transgen1 = geo.Transgen(geo.Dif(nb.Matrix([[0], [0], [2], [0]])), geo.Dif(nb.Matrix([[0], [1], [0], [0]])), geo.Dif(nb.Matrix([[1], [0], [0], [0]]))) dif1 = geo.Dif(nb.Matrix([[0], [0], [fr.Fraction(3, 2)], [0]])) dif1_ = geo.Dif(nb.Matrix([[0], [0], [fr.Fraction(3, 2)], [0]])) assert dif1 % transgen1 == dif1_ # spacegroup % transgen: assert isinstance(spacegroup % transgen, geo.Spacegroup) # Here comes Coset: #================== coset = geo.Coset(symmetry, transgen) # coset * coset: assert isinstance(coset * coset, geo.Coset) # coset ** pos: assert isinstance(coset ** pos, geo.Pos) # coset ** dif: assert isinstance(coset ** dif, geo.Dif) # coset % transgen: assert isinstance(coset % transgen, geo.Coset) transgen1 = geo.Transgen(geo.Dif(nb.Matrix([[0], [0], [2], [0]])), geo.Dif(nb.Matrix([[0], [1], [0], [0]])), geo.Dif(nb.Matrix([[1], [0], [0], [0]]))) coset1 = geo.Coset(geo.Symmetry(nb.Matrix([[1, 0, 0, fr.Fraction(3, 2)], [0, 1, 0, fr.Fraction(3, 2)], [0, 0, 1, fr.Fraction(7, 2)], [0, 0, 0, 1]])), transgen1) coset1_ = geo.Coset(geo.Symmetry(nb.Matrix([[1, 0, 0, fr.Fraction(1, 2)], [0, 1, 0, fr.Fraction(1, 2)], [0, 0, 1, fr.Fraction(3, 2)], [0, 0, 0, 1]])), transgen1) assert coset1 % transgen1 == coset1_