def dynkin_diagram(self): """ Return the Dynkin diagram corresponding to ``self``. EXAMPLES:: sage: C = CartanMatrix(['A',2]) sage: C.dynkin_diagram() O---O 1 2 A2 sage: C = CartanMatrix(['F',4,1]) sage: C.dynkin_diagram() O---O---O=>=O---O 0 1 2 3 4 F4~ sage: C = CartanMatrix([[2,-4],[-4,2]]) sage: C.dynkin_diagram() Dynkin diagram of rank 2 """ from sage.combinat.root_system.dynkin_diagram import DynkinDiagram if self._cartan_type is not None: return DynkinDiagram(self._cartan_type) from dynkin_diagram import DynkinDiagram_class n = self.nrows() g = DynkinDiagram_class(self) for i in range(n): for j in range(n): if self[i,j] == -1: g.add_edge(i, j) elif self[i,j] < -1: g.add_edge(i, j, -self[i,j]) return g
def dynkin_diagram(self): """ Returns a Dynkin diagram for type B. EXAMPLES:: sage: b = CartanType(['B',3]).dynkin_diagram() sage: b O---O=>=O 1 2 3 B3 sage: sorted(b.edges()) [(1, 2, 1), (2, 1, 1), (2, 3, 2), (3, 2, 1)] sage: b = CartanType(['B',1]).dynkin_diagram() sage: b O 1 B1 sage: sorted(b.edges()) [] """ from dynkin_diagram import DynkinDiagram_class n = self.n g = DynkinDiagram_class(self) for i in range(1, n): g.add_edge(i, i + 1) if n >= 2: g.set_edge_label(n - 1, n, 2) return g
def dynkin_diagram(self): """ Returns the Dynkin diagram of type A. EXAMPLES:: sage: a = CartanType(['A',3]).dynkin_diagram() sage: a O---O---O 1 2 3 A3 sage: sorted(a.edges()) [(1, 2, 1), (2, 1, 1), (2, 3, 1), (3, 2, 1)] TEST:: sage: a = DynkinDiagram(['A',1]) sage: a O 1 A1 sage: a.vertices(), a.edges() ([1], []) """ from dynkin_diagram import DynkinDiagram_class n = self.n g = DynkinDiagram_class(self) for i in range(1, n): g.add_edge(i, i + 1) return g
def dynkin_diagram(self): """ Returns a Dynkin diagram for type reducible. EXAMPLES:: sage: dd = CartanType("A2xB2xF4").dynkin_diagram() sage: dd O---O 1 2 O=>=O 3 4 O---O=>=O---O 5 6 7 8 A2xB2xF4 sage: dd.edges() [(1, 2, 1), (2, 1, 1), (3, 4, 2), (4, 3, 1), (5, 6, 1), (6, 5, 1), (6, 7, 2), (7, 6, 1), (7, 8, 1), (8, 7, 1)] sage: CartanType("F4xA2").dynkin_diagram() O---O=>=O---O 1 2 3 4 O---O 5 6 F4xA2 """ from dynkin_diagram import DynkinDiagram_class relabelling = self._index_relabelling g = DynkinDiagram_class(self) for i in range(len(self._types)): for [e1, e2, l] in self._types[i].dynkin_diagram().edges(): g.add_edge(relabelling[i,e1], relabelling[i,e2], label=l) return g
def dynkin_diagram(t): """ Returns a Dynkin diagram for type reducible. EXAMPLES:: sage: dd = CartanType("A2xB2xF4").dynkin_diagram() sage: dd O---O 1 2 O=>=O 3 4 O---O=>=O---O 5 6 7 8 A2xB2xF4 sage: dd.edges() [(1, 2, 1), (2, 1, 1), (3, 4, 2), (4, 3, 1), (5, 6, 1), (6, 5, 1), (6, 7, 2), (7, 6, 1), (7, 8, 1), (8, 7, 1)] sage: CartanType("F4xA2").dynkin_diagram() O---O=>=O---O 1 2 3 4 O---O 5 6 F4xA2 """ from dynkin_diagram import DynkinDiagram, DynkinDiagram_class g = DynkinDiagram_class(t) for i in range(len(t._types)): for [e1, e2, l] in DynkinDiagram(t._types[i]).edges(): shift = t._rshifts[i] g.add_edge(e1+shift, e2+shift, label=l) return g
def dynkin_diagram(t): """ Returns a Dynkin diagram for type reducible. EXAMPLES:: sage: dd = CartanType("A2xB2xF4").dynkin_diagram() sage: dd O---O 1 2 O=>=O 3 4 O---O=>=O---O 5 6 7 8 A2xB2xF4 sage: dd.edges() [(1, 2, 1), (2, 1, 1), (3, 4, 2), (4, 3, 1), (5, 6, 1), (6, 5, 1), (6, 7, 2), (7, 6, 1), (7, 8, 1), (8, 7, 1)] sage: CartanType("F4xA2").dynkin_diagram() O---O=>=O---O 1 2 3 4 O---O 5 6 F4xA2 """ from dynkin_diagram import DynkinDiagram, DynkinDiagram_class g = DynkinDiagram_class(t) for i in range(len(t._types)): for [e1, e2, l] in DynkinDiagram(t._types[i]).edges(): shift = t._rshifts[i] g.add_edge(e1 + shift, e2 + shift, label=l) return g
def dynkin_diagram(self): """ Returns the Dynkin diagram of type A. EXAMPLES:: sage: a = CartanType(['A',3]).dynkin_diagram() sage: a O---O---O 1 2 3 A3 sage: sorted(a.edges()) [(1, 2, 1), (2, 1, 1), (2, 3, 1), (3, 2, 1)] TEST:: sage: a = DynkinDiagram(['A',1]) sage: a O 1 A1 sage: a.vertices(), a.edges() ([1], []) """ from dynkin_diagram import DynkinDiagram_class n = self.n g = DynkinDiagram_class(self) for i in range(1, n): g.add_edge(i, i+1) return g
def dynkin_diagram(self): """ Returns a Dynkin diagram for type reducible. EXAMPLES:: sage: dd = CartanType("A2xB2xF4").dynkin_diagram() sage: dd O---O 1 2 O=>=O 3 4 O---O=>=O---O 5 6 7 8 A2xB2xF4 sage: dd.edges() [(1, 2, 1), (2, 1, 1), (3, 4, 2), (4, 3, 1), (5, 6, 1), (6, 5, 1), (6, 7, 2), (7, 6, 1), (7, 8, 1), (8, 7, 1)] sage: CartanType("F4xA2").dynkin_diagram() O---O=>=O---O 1 2 3 4 O---O 5 6 F4xA2 """ from dynkin_diagram import DynkinDiagram_class relabelling = self._index_relabelling g = DynkinDiagram_class(self) for i in range(len(self._types)): for [e1, e2, l] in self._types[i].dynkin_diagram().edges(): g.add_edge(relabelling[i, e1], relabelling[i, e2], label=l) return g
def dynkin_diagram(self): """ Returns a Dynkin diagram for type D. EXAMPLES:: sage: d = CartanType(['D',5]).dynkin_diagram(); d O 5 | | O---O---O---O 1 2 3 4 D5 sage: sorted(d.edges()) [(1, 2, 1), (2, 1, 1), (2, 3, 1), (3, 2, 1), (3, 4, 1), (3, 5, 1), (4, 3, 1), (5, 3, 1)] sage: d = CartanType(['D',4]).dynkin_diagram(); d O 4 | | O---O---O 1 2 3 D4 sage: sorted(d.edges()) [(1, 2, 1), (2, 1, 1), (2, 3, 1), (2, 4, 1), (3, 2, 1), (4, 2, 1)] sage: d = CartanType(['D',3]).dynkin_diagram(); d O 3 | | O---O 1 2 D3 sage: sorted(d.edges()) [(1, 2, 1), (1, 3, 1), (2, 1, 1), (3, 1, 1)] sage: d = CartanType(['D',2]).dynkin_diagram(); d O O 1 2 D2 sage: sorted(d.edges()) [] """ from dynkin_diagram import DynkinDiagram_class g = DynkinDiagram_class(self) n = self.n if n >= 3: for i in range(1, n-1): g.add_edge(i, i+1) g.add_edge(n-2, n) return g
def dynkin_diagram(self): """ Returns the extended Dynkin diagram for affine type BC. EXAMPLES:: sage: c = CartanType(['BC',3,2]).dynkin_diagram() sage: c O=<=O---O=<=O 0 1 2 3 BC3~ sage: sorted(c.edges()) [(0, 1, 1), (1, 0, 2), (1, 2, 1), (2, 1, 1), (2, 3, 1), (3, 2, 2)] sage: c = CartanType(["A", 6, 2]).dynkin_diagram() # should be the same as above; did fail at some point! sage: c O=<=O---O=<=O 0 1 2 3 BC3~ sage: sorted(c.edges()) [(0, 1, 1), (1, 0, 2), (1, 2, 1), (2, 1, 1), (2, 3, 1), (3, 2, 2)] sage: c = CartanType(['BC',2,2]).dynkin_diagram() sage: c O=<=O=<=O 0 1 2 BC2~ sage: sorted(c.edges()) [(0, 1, 1), (1, 0, 2), (1, 2, 1), (2, 1, 2)] sage: c = CartanType(['BC',1,2]).dynkin_diagram() sage: c 4 O=<=O 0 1 BC1~ sage: sorted(c.edges()) [(0, 1, 1), (1, 0, 4)] """ from dynkin_diagram import DynkinDiagram_class n = self.n g = DynkinDiagram_class(self) if n == 1: g.add_edge(1, 0, 4) return g g.add_edge(1, 0, 2) for i in range(1, n - 1): g.add_edge(i, i + 1) g.add_edge(n, n - 1, 2) return g
def dynkin_diagram(self): """ Returns the extended Dynkin diagram for affine type C. EXAMPLES:: sage: c = CartanType(['C',3,1]).dynkin_diagram() sage: c O=>=O---O=<=O 0 1 2 3 C3~ sage: sorted(c.edges()) [(0, 1, 2), (1, 0, 1), (1, 2, 1), (2, 1, 1), (2, 3, 1), (3, 2, 2)] """ n = self.n if n == 1: import cartan_type res = cartan_type.CartanType(["A",1,1]).dynkin_diagram() res._cartan_type = self return res from dynkin_diagram import DynkinDiagram_class g = DynkinDiagram_class(self) for i in range(1, n): g.add_edge(i, i+1) g.set_edge_label(n,n-1,2) g.add_edge(0,1,2) return g
def dynkin_diagram(self): """ Returns a Dynkin diagram for type E. EXAMPLES:: sage: e = CartanType(['E',6]).dynkin_diagram() sage: e O 2 | | O---O---O---O---O 1 3 4 5 6 E6 sage: sorted(e.edges()) [(1, 3, 1), (2, 4, 1), (3, 1, 1), (3, 4, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 4, 1), (5, 6, 1), (6, 5, 1)] sage: e = CartanType(['E',7]).dynkin_diagram() sage: e O 2 | | O---O---O---O---O---O 1 3 4 5 6 7 E7 sage: sorted(e.edges()) [(1, 3, 1), (2, 4, 1), (3, 1, 1), (3, 4, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 4, 1), (5, 6, 1), (6, 5, 1), (6, 7, 1), (7, 6, 1)] sage: e = CartanType(['E',8]).dynkin_diagram() sage: e O 2 | | O---O---O---O---O---O---O 1 3 4 5 6 7 8 E8 sage: sorted(e.edges()) [(1, 3, 1), (2, 4, 1), (3, 1, 1), (3, 4, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 4, 1), (5, 6, 1), (6, 5, 1), (6, 7, 1), (7, 6, 1), (7, 8, 1), (8, 7, 1)] """ from dynkin_diagram import DynkinDiagram_class g = DynkinDiagram_class(self) g.add_edge(1,3) g.add_edge(2,4) for i in range(3, self.n): g.add_edge(i, i+1) return g
def dynkin_diagram(self): """ Returns the extended Dynkin diagram for affine type B. EXAMPLES:: sage: b = CartanType(['B',3,1]).dynkin_diagram() sage: b O 0 | | O---O=>=O 1 2 3 B3~ sage: sorted(b.edges()) [(0, 2, 1), (1, 2, 1), (2, 0, 1), (2, 1, 1), (2, 3, 2), (3, 2, 1)] sage: b = CartanType(['B',2,1]).dynkin_diagram(); b O=>=O=<=O 0 2 1 B2~ sage: sorted(b.edges()) [(0, 2, 2), (1, 2, 2), (2, 0, 1), (2, 1, 1)] sage: b = CartanType(['B',1,1]).dynkin_diagram(); b O<=>O 0 1 B1~ sage: sorted(b.edges()) [(0, 1, 2), (1, 0, 2)] """ import cartan_type n = self.n if n == 1: res = cartan_type.CartanType(["A", 1, 1]).dynkin_diagram() res._cartan_type = self return res if n == 2: res = cartan_type.CartanType(["C", 2, 1]).relabel({ 0: 0, 1: 2, 2: 1 }).dynkin_diagram() res._cartan_type = self return res from dynkin_diagram import DynkinDiagram_class g = DynkinDiagram_class(self) for i in range(1, n): g.add_edge(i, i + 1) g.set_edge_label(n - 1, n, 2) g.add_edge(0, 2) return g
def dynkin_diagram(self): """ Returns a Dynkin diagram for type G. EXAMPLES:: sage: g = CartanType(['G',2]).dynkin_diagram() sage: g 3 O=<=O 1 2 G2 sage: sorted(g.edges()) [(1, 2, 1), (2, 1, 3)] """ from dynkin_diagram import DynkinDiagram_class g = DynkinDiagram_class(self) g.add_edge(1,2) g.set_edge_label(2,1,3) return g
def dynkin_diagram(self): """ Returns a Dynkin diagram for type F. EXAMPLES:: sage: f = CartanType(['F',4]).dynkin_diagram() sage: f O---O=>=O---O 1 2 3 4 F4 sage: sorted(f.edges()) [(1, 2, 1), (2, 1, 1), (2, 3, 2), (3, 2, 1), (3, 4, 1), (4, 3, 1)] """ from dynkin_diagram import DynkinDiagram_class g = DynkinDiagram_class(self) for i in range(1, 4): g.add_edge(i, i+1) g.set_edge_label(2,3,2) return g
def dynkin_diagram(self): """ Return the Dynkin diagram corresponding to ``self``. EXAMPLES:: sage: C = CartanMatrix(['A',2]) sage: C.dynkin_diagram() O---O 1 2 A2 sage: C = CartanMatrix(['F',4,1]) sage: C.dynkin_diagram() O---O---O=>=O---O 0 1 2 3 4 F4~ sage: C = CartanMatrix([[2,-4],[-4,2]]) sage: C.dynkin_diagram() Dynkin diagram of rank 2 """ from sage.combinat.root_system.dynkin_diagram import DynkinDiagram if self._cartan_type is not None: return DynkinDiagram(self._cartan_type) from dynkin_diagram import DynkinDiagram_class n = self.nrows() g = DynkinDiagram_class(self) for i in range(n): for j in range(n): if self[i, j] == -1: g.add_edge(i, j) elif self[i, j] < -1: g.add_edge(i, j, -self[i, j]) return g
def dynkin_diagram(self): """ Returns the extended Dynkin diagram for affine type A. EXAMPLES:: sage: a = CartanType(['A',3,1]).dynkin_diagram() sage: a 0 O-------+ | | | | O---O---O 1 2 3 A3~ sage: sorted(a.edges()) [(0, 1, 1), (0, 3, 1), (1, 0, 1), (1, 2, 1), (2, 1, 1), (2, 3, 1), (3, 0, 1), (3, 2, 1)] sage: a = DynkinDiagram(['A',1,1]) sage: a O<=>O 0 1 A1~ sage: sorted(a.edges()) [(0, 1, 2), (1, 0, 2)] """ from dynkin_diagram import DynkinDiagram_class n = self.n g = DynkinDiagram_class(self) if n == 1: g.add_edge(0, 1, 2) g.add_edge(1, 0, 2) else: for i in range(1, n): g.add_edge(i, i+1) g.add_edge(0, 1) g.add_edge(0, n) return g
def dynkin_diagram(self): """ Returns the extended Dynkin diagram for affine type B. EXAMPLES:: sage: b = CartanType(['B',3,1]).dynkin_diagram() sage: b O 0 | | O---O=>=O 1 2 3 B3~ sage: sorted(b.edges()) [(0, 2, 1), (1, 2, 1), (2, 0, 1), (2, 1, 1), (2, 3, 2), (3, 2, 1)] sage: b = CartanType(['B',2,1]).dynkin_diagram(); b O=>=O=<=O 0 2 1 B2~ sage: sorted(b.edges()) [(0, 2, 2), (1, 2, 2), (2, 0, 1), (2, 1, 1)] sage: b = CartanType(['B',1,1]).dynkin_diagram(); b O<=>O 0 1 B1~ sage: sorted(b.edges()) [(0, 1, 2), (1, 0, 2)] """ import cartan_type n = self.n if n == 1: res = cartan_type.CartanType(["A",1,1]).dynkin_diagram() res._cartan_type = self return res if n == 2: res = cartan_type.CartanType(["C",2,1]).relabel({0:0, 1:2, 2:1}).dynkin_diagram() res._cartan_type = self return res from dynkin_diagram import DynkinDiagram_class g = DynkinDiagram_class(self) for i in range(1, n): g.add_edge(i, i+1) g.set_edge_label(n-1, n, 2) g.add_edge(0,2) return g
def dynkin_diagram(self): """ Returns a Dynkin diagram for type D. EXAMPLES:: sage: d = CartanType(['D',5]).dynkin_diagram(); d O 5 | | O---O---O---O 1 2 3 4 D5 sage: sorted(d.edges()) [(1, 2, 1), (2, 1, 1), (2, 3, 1), (3, 2, 1), (3, 4, 1), (3, 5, 1), (4, 3, 1), (5, 3, 1)] sage: d = CartanType(['D',4]).dynkin_diagram(); d O 4 | | O---O---O 1 2 3 D4 sage: sorted(d.edges()) [(1, 2, 1), (2, 1, 1), (2, 3, 1), (2, 4, 1), (3, 2, 1), (4, 2, 1)] sage: d = CartanType(['D',3]).dynkin_diagram(); d O 3 | | O---O 1 2 D3 sage: sorted(d.edges()) [(1, 2, 1), (1, 3, 1), (2, 1, 1), (3, 1, 1)] sage: d = CartanType(['D',2]).dynkin_diagram(); d O O 1 2 D2 sage: sorted(d.edges()) [] """ from dynkin_diagram import DynkinDiagram_class g = DynkinDiagram_class(self) n = self.n if n >= 3: for i in range(1, n - 1): g.add_edge(i, i + 1) g.add_edge(n - 2, n) return g
def dynkin_diagram(self): """ Returns the extended Dynkin diagram for type G. EXAMPLES:: sage: g = CartanType(['G',2,1]).dynkin_diagram() sage: g 3 O=<=O---O 1 2 0 G2~ sage: sorted(g.edges()) [(0, 2, 1), (1, 2, 1), (2, 0, 1), (2, 1, 3)] """ from dynkin_diagram import DynkinDiagram_class g = DynkinDiagram_class(self) g.add_edge(1, 2) g.set_edge_label(2,1,3) g.add_edge(0, 2) return g
def dynkin_diagram(self): """ Returns the extended Dynkin diagram for affine type F. EXAMPLES:: sage: f = CartanType(['F', 4, 1]).dynkin_diagram() sage: f O---O---O=>=O---O 0 1 2 3 4 F4~ sage: sorted(f.edges()) [(0, 1, 1), (1, 0, 1), (1, 2, 1), (2, 1, 1), (2, 3, 2), (3, 2, 1), (3, 4, 1), (4, 3, 1)] """ from dynkin_diagram import DynkinDiagram_class g = DynkinDiagram_class(self) for i in range(1, 4): g.add_edge(i, i+1) g.set_edge_label(2,3,2) g.add_edge(0, 1) return g
def dynkin_diagram(self): """ Returns the extended Dynkin diagram for affine type F. EXAMPLES:: sage: f = DynkinDiagram(['F', 4, 1]) sage: f O---O---O=>=O---O 0 1 2 3 4 F4~ sage: sorted(f.edges()) [(0, 1, 1), (1, 0, 1), (1, 2, 1), (2, 1, 1), (2, 3, 2), (3, 2, 1), (3, 4, 1), (4, 3, 1)] """ from dynkin_diagram import DynkinDiagram_class g = DynkinDiagram_class(self) for i in range(1, 4): g.add_edge(i, i+1) g.set_edge_label(2,3,2) g.add_edge(0, 1) return g
def dynkin_diagram(self): """ Returns a Dynkin diagram for type G. EXAMPLES:: sage: g = CartanType(['G',2]).dynkin_diagram() sage: g 3 O=<=O 1 2 G2 sage: sorted(g.edges()) [(1, 2, 1), (2, 1, 3)] """ from dynkin_diagram import DynkinDiagram_class g = DynkinDiagram_class(self) g.add_edge(1, 2) g.set_edge_label(2, 1, 3) return g
def dynkin_diagram(self): """ Returns a Dynkin diagram for type F. EXAMPLES:: sage: f = DynkinDiagram(['F',4]) sage: f O---O=>=O---O 1 2 3 4 F4 sage: sorted(f.edges()) [(1, 2, 1), (2, 1, 1), (2, 3, 2), (3, 2, 1), (3, 4, 1), (4, 3, 1)] """ from dynkin_diagram import DynkinDiagram_class g = DynkinDiagram_class(self) for i in range(1, 4): g.add_edge(i, i + 1) g.set_edge_label(2, 3, 2) return g
def dynkin_diagram(self): """ Returns the extended Dynkin diagram for affine type E. EXAMPLES:: sage: e = CartanType(['E', 6, 1]).dynkin_diagram() sage: e O 0 | | O 2 | | O---O---O---O---O 1 3 4 5 6 E6~ sage: sorted(e.edges()) [(0, 2, 1), (1, 3, 1), (2, 0, 1), (2, 4, 1), (3, 1, 1), (3, 4, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 4, 1), (5, 6, 1), (6, 5, 1)] sage: e = CartanType(['E', 7, 1]).dynkin_diagram() sage: e O 2 | | O---O---O---O---O---O---O 0 1 3 4 5 6 7 E7~ sage: sorted(e.edges()) [(0, 1, 1), (1, 0, 1), (1, 3, 1), (2, 4, 1), (3, 1, 1), (3, 4, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 4, 1), (5, 6, 1), (6, 5, 1), (6, 7, 1), (7, 6, 1)] sage: e = CartanType(['E', 8, 1]).dynkin_diagram() sage: e O 2 | | O---O---O---O---O---O---O---O 1 3 4 5 6 7 8 0 E8~ sage: sorted(e.edges()) [(0, 8, 1), (1, 3, 1), (2, 4, 1), (3, 1, 1), (3, 4, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 4, 1), (5, 6, 1), (6, 5, 1), (6, 7, 1), (7, 6, 1), (7, 8, 1), (8, 0, 1), (8, 7, 1)] """ from dynkin_diagram import DynkinDiagram_class n = self.n g = DynkinDiagram_class(self) g.add_edge(1, 3) g.add_edge(2, 4) for i in range(3, n): g.add_edge(i, i + 1) if n == 6: g.add_edge(0, 2) elif n == 7: g.add_edge(0, 1) elif n == 8: g.add_edge(0, 8) else: raise ValueError("Invalid Cartan Type for Type E affine") return g
def dynkin_diagram(self): """ Returns the extended Dynkin diagram for affine type E. EXAMPLES:: sage: e = CartanType(['E', 6, 1]).dynkin_diagram() sage: e O 0 | | O 2 | | O---O---O---O---O 1 3 4 5 6 E6~ sage: sorted(e.edges()) [(0, 2, 1), (1, 3, 1), (2, 0, 1), (2, 4, 1), (3, 1, 1), (3, 4, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 4, 1), (5, 6, 1), (6, 5, 1)] sage: e = CartanType(['E', 7, 1]).dynkin_diagram() sage: e O 2 | | O---O---O---O---O---O---O 0 1 3 4 5 6 7 E7~ sage: sorted(e.edges()) [(0, 1, 1), (1, 0, 1), (1, 3, 1), (2, 4, 1), (3, 1, 1), (3, 4, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 4, 1), (5, 6, 1), (6, 5, 1), (6, 7, 1), (7, 6, 1)] sage: e = CartanType(['E', 8, 1]).dynkin_diagram() sage: e O 2 | | O---O---O---O---O---O---O---O 1 3 4 5 6 7 8 0 E8~ sage: sorted(e.edges()) [(0, 8, 1), (1, 3, 1), (2, 4, 1), (3, 1, 1), (3, 4, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 4, 1), (5, 6, 1), (6, 5, 1), (6, 7, 1), (7, 6, 1), (7, 8, 1), (8, 0, 1), (8, 7, 1)] """ from dynkin_diagram import DynkinDiagram_class n = self.n g = DynkinDiagram_class(self) g.add_edge(1, 3) g.add_edge(2, 4) for i in range(3, n): g.add_edge(i, i + 1) if n == 6: g.add_edge(0, 2) elif n == 7: g.add_edge(0, 1) elif n == 8: g.add_edge(0, 8) else: assert False, "Invalid Cartan Type for Type E affine" return g
def dynkin_diagram(self): """ Returns the extended Dynkin diagram for affine type D. EXAMPLES:: sage: d = CartanType(['D', 6, 1]).dynkin_diagram() sage: d 0 O O 6 | | | | O---O---O---O---O 1 2 3 4 5 D6~ sage: sorted(d.edges()) [(0, 2, 1), (1, 2, 1), (2, 0, 1), (2, 1, 1), (2, 3, 1), (3, 2, 1), (3, 4, 1), (4, 3, 1), (4, 5, 1), (4, 6, 1), (5, 4, 1), (6, 4, 1)] sage: d = CartanType(['D', 4, 1]).dynkin_diagram() sage: d O 4 | | O---O---O 1 |2 3 | O 0 D4~ sage: sorted(d.edges()) [(0, 2, 1), (1, 2, 1), (2, 0, 1), (2, 1, 1), (2, 3, 1), (2, 4, 1), (3, 2, 1), (4, 2, 1)] sage: d = CartanType(['D', 3, 1]).dynkin_diagram() sage: d 0 O-------+ | | | | O---O---O 3 1 2 D3~ sage: sorted(d.edges()) [(0, 2, 1), (0, 3, 1), (1, 2, 1), (1, 3, 1), (2, 0, 1), (2, 1, 1), (3, 0, 1), (3, 1, 1)] """ from dynkin_diagram import DynkinDiagram_class n = self.n if n == 3: import cartan_type res = cartan_type.CartanType(["A", 3, 1]).relabel({ 0: 0, 1: 3, 2: 1, 3: 2 }).dynkin_diagram() res._cartan_type = self return res g = DynkinDiagram_class(self) for i in range(1, n - 1): g.add_edge(i, i + 1) g.add_edge(n - 2, n) g.add_edge(0, 2) return g
def dynkin_diagram(self): """ Returns the extended Dynkin diagram for affine type D. EXAMPLES:: sage: d = CartanType(['D', 6, 1]).dynkin_diagram() sage: d 0 O O 6 | | | | O---O---O---O---O 1 2 3 4 5 D6~ sage: sorted(d.edges()) [(0, 2, 1), (1, 2, 1), (2, 0, 1), (2, 1, 1), (2, 3, 1), (3, 2, 1), (3, 4, 1), (4, 3, 1), (4, 5, 1), (4, 6, 1), (5, 4, 1), (6, 4, 1)] sage: d = CartanType(['D', 4, 1]).dynkin_diagram() sage: d O 4 | | O---O---O 1 |2 3 | O 0 D4~ sage: sorted(d.edges()) [(0, 2, 1), (1, 2, 1), (2, 0, 1), (2, 1, 1), (2, 3, 1), (2, 4, 1), (3, 2, 1), (4, 2, 1)] sage: d = CartanType(['D', 3, 1]).dynkin_diagram() sage: d 0 O-------+ | | | | O---O---O 3 1 2 D3~ sage: sorted(d.edges()) [(0, 2, 1), (0, 3, 1), (1, 2, 1), (1, 3, 1), (2, 0, 1), (2, 1, 1), (3, 0, 1), (3, 1, 1)] """ from dynkin_diagram import DynkinDiagram_class n = self.n if n == 3: import cartan_type res = cartan_type.CartanType(["A",3,1]).relabel({0:0, 1:3, 2:1, 3: 2}).dynkin_diagram() res._cartan_type = self return res g = DynkinDiagram_class(self) for i in range(1, n-1): g.add_edge(i, i+1) g.add_edge(n-2,n) g.add_edge(0,2) return g