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 cosetfromstr(string): string = re.sub('[{}]', ' ', string) # string = string.replace('{', ' ') # string = string.replace('}', ' ') return geo.Coset(fromstr(string), geo.canonical)
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_