diff --git a/src/sage/algebras/quantum_groups/quantum_group_gap.py b/src/sage/algebras/quantum_groups/quantum_group_gap.py index b901c3b8225..300b24fc779 100644 --- a/src/sage/algebras/quantum_groups/quantum_group_gap.py +++ b/src/sage/algebras/quantum_groups/quantum_group_gap.py @@ -1,3 +1,4 @@ +# sage.doctest: optional - gap_package_quagroup """ Quantum Groups Using GAP's QuaGroup Package @@ -57,8 +58,8 @@ def __init__(self, parent, libgap_elt): EXAMPLES:: - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: TestSuite(Q.an_element()).run() # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: TestSuite(Q.an_element()).run() """ self._libgap = libgap(libgap_elt) Element.__init__(self, parent) @@ -69,13 +70,13 @@ def _repr_(self): EXAMPLES:: - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: Q.an_element() # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: Q.an_element() 1 + (q)*F[a1] + E[a1] + (q^2-1-q^-2 + q^-4)*[ K1 ; 2 ] + K1 + (-q^-1 + q^-3)*K1[ K1 ; 1 ] - sage: Q = QuantumGroup(['D',4]) # optional - gap_packages - sage: Q.F_simple() # optional - gap_packages + sage: Q = QuantumGroup(['D',4]) + sage: Q.F_simple() Finite family {1: F[a1], 2: F[a2], 3: F[a3], 4: F[a4]} """ # We add some space between the terms @@ -99,13 +100,13 @@ def _latex_(self): EXAMPLES:: - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: latex(Q.an_element()) # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: latex(Q.an_element()) 1+{(q)} F_{\alpha_{1}}+E_{\alpha_{1}}+{(q^{2}-1-q^{-2}+q^{-4})} [ K_{1} ; 2 ]+K_{1}+{(-q^{-1}+q^{-3})} K_{1}[ K_{1} ; 1 ] - sage: Q = QuantumGroup(['D',4]) # optional - gap_packages - sage: latex(list(Q.F_simple())) # optional - gap_packages + sage: Q = QuantumGroup(['D',4]) + sage: latex(list(Q.F_simple())) \left[F_{\alpha_{1}}, F_{\alpha_{2}}, F_{\alpha_{3}}, F_{\alpha_{4}}\right] """ @@ -135,9 +136,9 @@ def __reduce__(self): EXAMPLES:: - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: x = Q.an_element() # optional - gap_packages - sage: loads(dumps(x)) == x # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: x = Q.an_element() + sage: loads(dumps(x)) == x True """ data = self._libgap.ExtRepOfObj() @@ -154,9 +155,9 @@ def __hash__(self): EXAMPLES:: - sage: Q = QuantumGroup(['B',3]) # optional - gap_packages - sage: x = Q.an_element() # optional - gap_packages - sage: hash(x) == hash(x.gap()) # optional - gap_packages + sage: Q = QuantumGroup(['B',3]) + sage: x = Q.an_element() + sage: hash(x) == hash(x.gap()) True """ return hash(self._libgap) @@ -167,17 +168,17 @@ def _richcmp_(self, other, op): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: x = Q.an_element() # optional - gap_packages - sage: F1, F12, F2 = Q.F() # optional - gap_packages - sage: q = Q.q() # optional - gap_packages - sage: x == F1 # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: x = Q.an_element() + sage: F1, F12, F2 = Q.F() + sage: q = Q.q() + sage: x == F1 False - sage: x != F1 # optional - gap_packages + sage: x != F1 True - sage: F2 * F1 # optional - gap_packages + sage: F2 * F1 (q)*F[a1]*F[a2] + F[a1+a2] - sage: F2 * F1 == q * F1 * F2 + F12 # optional - gap_packages + sage: F2 * F1 == q * F1 * F2 + F12 True """ return richcmp(self._libgap, other._libgap, op) @@ -188,9 +189,9 @@ def gap(self): EXAMPLES:: - sage: Q = QuantumGroup(['B',3]) # optional - gap_packages - sage: x = Q.an_element() # optional - gap_packages - sage: x.gap() # optional - gap_packages + sage: Q = QuantumGroup(['B',3]) + sage: x = Q.an_element() + sage: x.gap() 1+(q)*F1+E1+(q^4-1-q^-4+q^-8)*[ K1 ; 2 ]+K1+(-q^-2+q^-6)*K1[ K1 ; 1 ] """ return self._libgap @@ -203,9 +204,9 @@ def _add_(self, other): EXAMPLES:: - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: F1, F2 = Q.F_simple() # optional - gap_packages - sage: F1 * F2 + F2 * F1 # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: F1, F2 = Q.F_simple() + sage: F1 * F2 + F2 * F1 (q^3 + 1)*F[a1]*F[a2] + F[a1+a2] """ return self.__class__(self.parent(), self._libgap + other._libgap) @@ -216,9 +217,9 @@ def _sub_(self, other): EXAMPLES:: - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: F1, F2 = Q.F_simple() # optional - gap_packages - sage: F1 * F2 - F2 * F1 # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: F1, F2 = Q.F_simple() + sage: F1 * F2 - F2 * F1 (-q^3 + 1)*F[a1]*F[a2] + (-1)*F[a1+a2] """ return self.__class__(self.parent(), self._libgap - other._libgap) @@ -229,17 +230,17 @@ def _acted_upon_(self, scalar, self_on_left=True): EXAMPLES:: - sage: Q = QuantumGroup(['B',2]) # optional - gap_packages - sage: q = Q.q() # optional - gap_packages - sage: x = Q.one().f_tilde([1,2,1,1,2,2]); x # optional - gap_packages + sage: Q = QuantumGroup(['B',2]) + sage: q = Q.q() + sage: x = Q.one().f_tilde([1,2,1,1,2,2]); x F[a1+a2]^(3) - sage: 3 * x # optional - gap_packages + sage: 3 * x (3)*F[a1+a2]^(3) - sage: x * (5/3) # optional - gap_packages + sage: x * (5/3) (5/3)*F[a1+a2]^(3) - sage: q^-10 * x # optional - gap_packages + sage: q^-10 * x (q^-10)*F[a1+a2]^(3) - sage: (1 + q^2 - q^-1) * x # optional - gap_packages + sage: (1 + q^2 - q^-1) * x (q^2 + 1-q^-1)*F[a1+a2]^(3) """ try: @@ -261,9 +262,9 @@ def e_tilde(self, i): EXAMPLES:: - sage: Q = QuantumGroup(['B',2]) # optional - gap_packages - sage: x = Q.one().f_tilde([1,2,1,1,2,2]) # optional - gap_packages - sage: x.e_tilde([2,2,1,2]) # optional - gap_packages + sage: Q = QuantumGroup(['B',2]) + sage: x = Q.one().f_tilde([1,2,1,1,2,2]) + sage: x.e_tilde([2,2,1,2]) F[a1]^(2) """ # Do not override this method, instead implement _et @@ -288,12 +289,12 @@ def f_tilde(self, i): EXAMPLES:: - sage: Q = QuantumGroup(['B',2]) # optional - gap_packages - sage: Q.one().f_tilde(1) # optional - gap_packages + sage: Q = QuantumGroup(['B',2]) + sage: Q.one().f_tilde(1) F[a1] - sage: Q.one().f_tilde(2) # optional - gap_packages + sage: Q.one().f_tilde(2) F[a2] - sage: Q.one().f_tilde([1,2,1,1,2]) # optional - gap_packages + sage: Q.one().f_tilde([1,2,1,1,2]) F[a1]*F[a1+a2]^(2) """ # Do not override this method, instead implement _ft @@ -321,19 +322,19 @@ class QuantumGroup(UniqueRepresentation, Parent): We verify the Serre relations for type `A_2`:: - sage: Q = algebras.QuantumGroup(['A',2]) # optional - gap_packages - sage: F1,F12,F2 = Q.F() # optional - gap_packages - sage: q = Q.q() # optional - gap_packages - sage: F1^2*F2 - q_binomial(2,1,q) * F1*F2*F1 + F2*F1^2 # optional - gap_packages + sage: Q = algebras.QuantumGroup(['A',2]) + sage: F1,F12,F2 = Q.F() + sage: q = Q.q() + sage: F1^2*F2 - q_binomial(2,1,q) * F1*F2*F1 + F2*F1^2 0 We verify the Serre relations for type `B_2`:: - sage: Q = algebras.QuantumGroup(['B',2]) # optional - gap_packages - sage: F1, F12, F122, F2 = Q.F() # optional - gap_packages - sage: F1^2*F2 - q_binomial(2,1,q^2) * F1*F2*F1 + F2*F1^2 # optional - gap_packages + sage: Q = algebras.QuantumGroup(['B',2]) + sage: F1, F12, F122, F2 = Q.F() + sage: F1^2*F2 - q_binomial(2,1,q^2) * F1*F2*F1 + F2*F1^2 0 - sage: (F2^3*F1 - q_binomial(3,1,q) * F2^2*F1*F2 # optional - gap_packages + sage: (F2^3*F1 - q_binomial(3,1,q) * F2^2*F1*F2 ....: + q_binomial(3,2,q) * F2*F1*F2^2 - F1*F2^3) 0 @@ -348,8 +349,8 @@ def __classcall_private__(cls, cartan_type, q=None): TESTS:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q is QuantumGroup('A2', None) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q is QuantumGroup('A2', None) True """ cartan_type = CartanType(cartan_type) @@ -361,14 +362,14 @@ def __init__(self, cartan_type, q): TESTS:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: TestSuite(Q).run() # long time # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: TestSuite(Q).run() # long time - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: TestSuite(Q).run() # long time # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: TestSuite(Q).run() # long time """ self._cartan_type = cartan_type - GapPackage("QuaGroup", spkg="gap_packages").require() + GapPackage("QuaGroup", spkg="gap_package_quagroup").require() libgap.LoadPackage('QuaGroup') R = libgap.eval('RootSystem("%s",%s)' % (cartan_type.type(), cartan_type.rank())) Q = self._cartan_type.root_system().root_lattice() @@ -397,7 +398,7 @@ def _repr_(self): EXAMPLES:: - sage: QuantumGroup(['A',2]) # optional - gap_packages + sage: QuantumGroup(['A',2]) Quantum Group of type ['A', 2] with q=q """ return "Quantum Group of type {} with q={}".format(self._cartan_type, self._q) @@ -408,10 +409,10 @@ def _latex_(self): EXAMPLES:: - sage: latex(QuantumGroup(['A',3])) # optional - gap_packages + sage: latex(QuantumGroup(['A',3])) U_{q}(A_{3}) - sage: zeta3 = CyclotomicField(3).gen() # optional - gap_packages - sage: latex(QuantumGroup(['G',2], q=zeta3)) # optional - gap_packages + sage: zeta3 = CyclotomicField(3).gen() + sage: latex(QuantumGroup(['G',2], q=zeta3)) U_{\zeta_{3}}(G_2) """ from sage.misc.latex import latex @@ -423,8 +424,8 @@ def gap(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q.gap() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q.gap() QuantumUEA( , Qpar = q ) """ return self._libgap @@ -437,8 +438,8 @@ def cartan_type(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q.cartan_type() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q.cartan_type() ['A', 2] """ return self._cartan_type @@ -449,16 +450,16 @@ def _element_constructor_(self, elt): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q(0) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q(0) 0 - sage: Q(4) # optional - gap_packages + sage: Q(4) (4)*1 - sage: Q(4).parent() is Q # optional - gap_packages + sage: Q(4).parent() is Q True - sage: Q(Q.q()).parent() is Q # optional - gap_packages + sage: Q(Q.q()).parent() is Q True - sage: Q(Q.an_element()) == Q.an_element() # optional - gap_packages + sage: Q(Q.an_element()) == Q.an_element() True """ if not elt: @@ -477,8 +478,8 @@ def one(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q.one() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q.one() 1 """ return self.element_class(self, self._libgap.One()) @@ -490,8 +491,8 @@ def zero(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q.zero() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q.zero() 0 """ return self.element_class(self, self._libgap.ZeroImmutable()) @@ -503,8 +504,8 @@ def gens(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q.gens() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q.gens() (F[a1], F[a1+a2], F[a2], K1, (-q + q^-1)*[ K1 ; 1 ] + K1, K2, (-q + q^-1)*[ K2 ; 1 ] + K2, @@ -520,8 +521,8 @@ def E(self): EXAMPLES:: - sage: Q = QuantumGroup(['B',2]) # optional - gap_packages - sage: list(Q.E()) # optional - gap_packages + sage: Q = QuantumGroup(['B',2]) + sage: list(Q.E()) [E[a1], E[a1+a2], E[a1+2*a2], E[a2]] """ N = len(self._pos_roots) + len(self._cartan_type.index_set()) * 2 @@ -534,8 +535,8 @@ def E_simple(self): EXAMPLES:: - sage: Q = QuantumGroup(['B',2]) # optional - gap_packages - sage: Q.E_simple() # optional - gap_packages + sage: Q = QuantumGroup(['B',2]) + sage: Q.E_simple() Finite family {1: E[a1], 2: E[a2]} """ I = self._cartan_type.index_set() @@ -550,8 +551,8 @@ def F(self): EXAMPLES:: - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: list(Q.F()) # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: list(Q.F()) [F[a1], F[3*a1+a2], F[2*a1+a2], F[3*a1+2*a2], F[a1+a2], F[a2]] """ d = {al: self.gens()[i] for i, al in enumerate(self._pos_roots)} @@ -563,8 +564,8 @@ def F_simple(self): EXAMPLES:: - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: Q.F_simple() # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: Q.F_simple() Finite family {1: F[a1], 2: F[a2]} """ I = self._cartan_type.index_set() @@ -578,10 +579,10 @@ def K(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',3]) # optional - gap_packages - sage: Q.K() # optional - gap_packages + sage: Q = QuantumGroup(['A',3]) + sage: Q.K() Finite family {1: K1, 2: K2, 3: K3} - sage: Q.K_inverse() # optional - gap_packages + sage: Q.K_inverse() Finite family {1: (-q + q^-1)*[ K1 ; 1 ] + K1, 2: (-q + q^-1)*[ K2 ; 1 ] + K2, 3: (-q + q^-1)*[ K3 ; 1 ] + K3} @@ -597,8 +598,8 @@ def K_inverse(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',3]) # optional - gap_packages - sage: Q.K_inverse() # optional - gap_packages + sage: Q = QuantumGroup(['A',3]) + sage: Q.K_inverse() Finite family {1: (-q + q^-1)*[ K1 ; 1 ] + K1, 2: (-q + q^-1)*[ K2 ; 1 ] + K2, 3: (-q + q^-1)*[ K3 ; 1 ] + K3} @@ -615,8 +616,8 @@ def algebra_generators(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: list(Q.algebra_generators()) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: list(Q.algebra_generators()) [F[a1], F[a2], K1, K2, (-q + q^-1)*[ K1 ; 1 ] + K1, (-q + q^-1)*[ K2 ; 1 ] + K2, @@ -641,8 +642,8 @@ def _an_element_(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q.an_element() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q.an_element() 1 + (q)*F[a1] + E[a1] + (q^2-1-q^-2 + q^-4)*[ K1 ; 2 ] + K1 + (-q^-1 + q^-3)*K1[ K1 ; 1 ] """ @@ -656,8 +657,8 @@ def some_elements(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',1]) # optional - gap_packages - sage: Q.some_elements() # optional - gap_packages + sage: Q = QuantumGroup(['A',1]) + sage: Q.some_elements() [1 + (q)*F[a1] + E[a1] + (q^2-1-q^-2 + q^-4)*[ K1 ; 2 ] + K1 + (-q^-1 + q^-3)*K1[ K1 ; 1 ], K1, F[a1], E[a1]] @@ -671,12 +672,12 @@ def q(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',3]) # optional - gap_packages - sage: Q.q() # optional - gap_packages + sage: Q = QuantumGroup(['A',3]) + sage: Q.q() q - sage: zeta3 = CyclotomicField(3).gen() # optional - gap_packages - sage: Q = QuantumGroup(['B',2], q=zeta3) # optional - gap_packages - sage: Q.q() # optional - gap_packages + sage: zeta3 = CyclotomicField(3).gen() + sage: Q = QuantumGroup(['B',2], q=zeta3) + sage: Q.q() zeta3 """ return self._q @@ -690,12 +691,12 @@ def _Hom_(self, Y, category): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: H = Hom(Q, B); H # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: H = Hom(Q, B); H Set of Morphisms from Quantum Group of type ['A', 2] with q=q to Lower Half of Quantum Group of type ['A', 2] with q=q in Category of rings - sage: type(H) # optional - gap_packages + sage: type(H) """ if category is not None and not category.is_subcategory(Rings()): @@ -710,8 +711,8 @@ def highest_weight_module(self, weight): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q.highest_weight_module([1,3]) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q.highest_weight_module([1,3]) Highest weight module of weight Lambda[1] + 3*Lambda[2] of Quantum Group of type ['A', 2] with q=q """ @@ -723,8 +724,8 @@ def lower_half(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q.lower_half() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q.lower_half() Lower Half of Quantum Group of type ['A', 2] with q=q """ return LowerHalfQuantumGroup(self) @@ -749,8 +750,8 @@ def coproduct(self, elt, n=1): EXAMPLES:: - sage: Q = QuantumGroup(['B',2]) # optional - gap_packages - sage: [Q.coproduct(e) for e in Q.E()] # optional - gap_packages + sage: Q = QuantumGroup(['B',2]) + sage: [Q.coproduct(e) for e in Q.E()] [1*(E[a1]1) + 1*(K1E[a1]), 1*(E[a1+a2]1) + 1*(K1*K2E[a1+a2]) + q^2-q^-2*(K2*E[a1]E[a2]), q^4-q^2-1 + q^-2*(E[a1]E[a2]^(2)) + 1*(E[a1+2*a2]1) @@ -758,7 +759,7 @@ def coproduct(self, elt, n=1): + q-q^-1*(K2*E[a1+a2]E[a2]) + q^5-2*q^3 + 2*q^-1-q^-3*(K2[ K2 ; 1 ]*E[a1]E[a2]^(2)), 1*(E[a2]1) + 1*(K2E[a2])] - sage: [Q.coproduct(f, 2) for f in Q.F_simple()] # optional - gap_packages + sage: [Q.coproduct(f, 2) for f in Q.F_simple()] [1*(11F[a1]) + -q^2 + q^-2*(1F[a1][ K1 ; 1 ]) + 1*(1F[a1]K1) + q^4-2 + q^-4*(F[a1][ K1 ; 1 ][ K1 ; 1 ]) + -q^2 + q^-2*(F[a1][ K1 ; 1 ]K1) + -q^2 @@ -787,8 +788,8 @@ def antipode(self, elt): EXAMPLES:: - sage: Q = QuantumGroup(['B',2]) # optional - gap_packages - sage: [Q.antipode(f) for f in Q.F()] # optional - gap_packages + sage: Q = QuantumGroup(['B',2]) + sage: [Q.antipode(f) for f in Q.F()] [(-1)*F[a1]*K1, (-q^6 + q^2)*F[a1]*F[a2]*K1*K2 + (-q^4)*F[a1+a2]*K1*K2, (-q^8 + q^6 + q^4-q^2)*F[a1]*F[a2]^(2)*K1 @@ -815,13 +816,13 @@ def counit(self, elt): EXAMPLES:: - sage: Q = QuantumGroup(['B',2]) # optional - gap_packages - sage: x = Q.an_element()^2 # optional - gap_packages - sage: Q.counit(x) # optional - gap_packages + sage: Q = QuantumGroup(['B',2]) + sage: x = Q.an_element()^2 + sage: Q.counit(x) 4 - sage: Q.counit(Q.one()) # optional - gap_packages + sage: Q.counit(Q.one()) 1 - sage: Q.counit(Q.zero()) # optional - gap_packages + sage: Q.counit(Q.zero()) 0 """ # We need to extract the constant coefficient because the @@ -847,14 +848,14 @@ def _mul_(self, other): EXAMPLES:: - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: F1, F2 = Q.F_simple() # optional - gap_packages - sage: F1 * F2 * F1 * F2 # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: F1, F2 = Q.F_simple() + sage: F1 * F2 * F1 * F2 F[a1]*F[a1+a2]*F[a2] + (q^7 + q^5 + q + q^-1)*F[a1]^(2)*F[a2]^(2) - sage: E1, E2 = Q.E_simple() # optional - gap_packages - sage: F1 * E1 # optional - gap_packages + sage: E1, E2 = Q.E_simple() + sage: F1 * E1 F[a1]*E[a1] - sage: E1 * F1 # optional - gap_packages + sage: E1 * F1 F[a1]*E[a1] + [ K1 ; 1 ] """ return self.__class__(self.parent(), self._libgap * other._libgap) @@ -873,8 +874,8 @@ def bar(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: [gen.bar() for gen in Q.gens()] # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: [gen.bar() for gen in Q.gens()] [F[a1], (q-q^-1)*F[a1]*F[a2] + F[a1+a2], F[a2], @@ -901,8 +902,8 @@ def omega(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: [gen.omega() for gen in Q.gens()] # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: [gen.omega() for gen in Q.gens()] [E[a1], (-q)*E[a1+a2], E[a2], @@ -931,8 +932,8 @@ def tau(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: [gen.tau() for gen in Q.gens()] # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: [gen.tau() for gen in Q.gens()] [F[a1], (-q^2 + 1)*F[a1]*F[a2] + (-q)*F[a1+a2], F[a2], @@ -973,13 +974,13 @@ def braid_group_action(self, braid): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: F1 = Q.F_simple()[1] # optional - gap_packages - sage: F1.braid_group_action([1]) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: F1 = Q.F_simple()[1] + sage: F1.braid_group_action([1]) (q-q^-1)*[ K1 ; 1 ]*E[a1] + (-1)*K1*E[a1] - sage: F1.braid_group_action([1,2]) # optional - gap_packages + sage: F1.braid_group_action([1,2]) F[a2] - sage: F1.braid_group_action([2,1]) # optional - gap_packages + sage: F1.braid_group_action([2,1]) (-q^3 + 3*q-3*q^-1 + q^-3)*[ K1 ; 1 ]*[ K2 ; 1 ]*E[a1]*E[a2] + (q^3-2*q + q^-1)*[ K1 ; 1 ]*[ K2 ; 1 ]*E[a1+a2] + (q^2-2 + q^-2)*[ K1 ; 1 ]*K2*E[a1]*E[a2] @@ -987,9 +988,9 @@ def braid_group_action(self, braid): + (q^2-2 + q^-2)*K1*[ K2 ; 1 ]*E[a1]*E[a2] + (-q^2 + 1)*K1*[ K2 ; 1 ]*E[a1+a2] + (-q + q^-1)*K1*K2*E[a1]*E[a2] + (q)*K1*K2*E[a1+a2] - sage: F1.braid_group_action([1,2,1]) == F1.braid_group_action([2,1,2]) # optional - gap_packages + sage: F1.braid_group_action([1,2,1]) == F1.braid_group_action([2,1,2]) True - sage: F1.braid_group_action([]) == F1 # optional - gap_packages + sage: F1.braid_group_action([]) == F1 True """ if not braid: @@ -1013,17 +1014,17 @@ def _et(self, i): EXAMPLES:: - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: [(g.e_tilde(1), g.e_tilde(2)) for g in Q.F()] # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: [(g.e_tilde(1), g.e_tilde(2)) for g in Q.F()] [(1, 0), (0, F[a1]^(3)), (0, F[a1]^(2)), (0, F[3*a1+a2]), (0, F[a1]), (0, 1)] TESTS:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q.one()._et(1) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q.one()._et(1) 0 - sage: Q.zero().e_tilde(1) # optional - gap_packages + sage: Q.zero().e_tilde(1) 0 """ if not self: # self == 0 @@ -1040,21 +1041,21 @@ def _ft(self, i): EXAMPLES:: - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: [(g._ft(1), g._ft(2)) for g in Q.F()] # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: [(g._ft(1), g._ft(2)) for g in Q.F()] [(F[a1]^(2), F[a1+a2]), (F[a1]*F[3*a1+a2], F[3*a1+2*a2]), (F[a1]*F[2*a1+a2], F[a1+a2]^(2)), (F[a1]*F[3*a1+2*a2], F[a1+a2]^(3)), (F[a1]*F[a1+a2], F[a1+a2]*F[a2]), (F[a1]*F[a2], F[a2]^(2))] - sage: Q.one().f_tilde([1,2,1,1,2,2]) # optional - gap_packages + sage: Q.one().f_tilde([1,2,1,1,2,2]) F[2*a1+a2]*F[a1+a2]*F[a2] TESTS:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q.zero().f_tilde(1) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q.zero().f_tilde(1) 0 """ if not self: # self == 0 @@ -1078,10 +1079,10 @@ def __init__(self, parent, im_gens, check=True): EXAMPLES:: - sage: Q = QuantumGroup(['A',1]) # optional - gap_packages - sage: F, K, Ki, E = Q.gens() # optional - gap_packages - sage: phi = Q.hom([E, Ki, K, F]) # optional - gap_packages - sage: TestSuite(phi).run(skip="_test_category") # optional - gap_packages + sage: Q = QuantumGroup(['A',1]) + sage: F, K, Ki, E = Q.gens() + sage: phi = Q.hom([E, Ki, K, F]) + sage: TestSuite(phi).run(skip="_test_category") """ self._repr_type_str = "Quantum group homomorphism" Morphism.__init__(self, parent) @@ -1097,10 +1098,10 @@ def __reduce__(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',1]) # optional - gap_packages - sage: F, K, Ki, E = Q.gens() # optional - gap_packages - sage: phi = Q.hom([E, Ki, K, F]) # optional - gap_packages - sage: loads(dumps(phi)) == phi # optional - gap_packages + sage: Q = QuantumGroup(['A',1]) + sage: F, K, Ki, E = Q.gens() + sage: phi = Q.hom([E, Ki, K, F]) + sage: loads(dumps(phi)) == phi True """ return (self.parent(), (self._im_gens,)) @@ -1111,18 +1112,18 @@ def _call_(self, val): EXAMPLES:: - sage: Q = QuantumGroup(['A',1]) # optional - gap_packages - sage: F, K, Ki, E = Q.gens() # optional - gap_packages - sage: phi = Q.hom([E, Ki, K, F]) # optional - gap_packages - sage: phi(F) # optional - gap_packages + sage: Q = QuantumGroup(['A',1]) + sage: F, K, Ki, E = Q.gens() + sage: phi = Q.hom([E, Ki, K, F]) + sage: phi(F) E[a1] - sage: phi(E*F) # optional - gap_packages + sage: phi(E*F) F[a1]*E[a1] - sage: phi(F*E) # optional - gap_packages + sage: phi(F*E) F[a1]*E[a1] + [ K1 ; 1 ] - sage: phi(E*K) # optional - gap_packages + sage: phi(E*K) (-q + q^-1)*F[a1]*[ K1 ; 1 ] + F[a1]*K1 - sage: phi(F*E) == phi(F) * phi(E) # optional - gap_packages + sage: phi(F*E) == phi(F) * phi(E) True """ try: @@ -1136,27 +1137,27 @@ def __richcmp__(self, other, op): EXAMPLES:: - sage: Q = QuantumGroup(['A',1]) # optional - gap_packages - sage: F, K, Ki, E = Q.gens() # optional - gap_packages - sage: phi = Q.hom([E, Ki, K, F]) # optional - gap_packages - sage: psi = Q.hom([F, K, Ki, E]) # optional - gap_packages - sage: phi == Q.hom([E, Ki, K, F]) # optional - gap_packages + sage: Q = QuantumGroup(['A',1]) + sage: F, K, Ki, E = Q.gens() + sage: phi = Q.hom([E, Ki, K, F]) + sage: psi = Q.hom([F, K, Ki, E]) + sage: phi == Q.hom([E, Ki, K, F]) True - sage: phi == psi # optional - gap_packages + sage: phi == psi False - sage: psi != Q.hom([F, K, Ki, E]) # optional - gap_packages + sage: psi != Q.hom([F, K, Ki, E]) False - sage: phi != psi # optional - gap_packages + sage: phi != psi True - sage: QB = QuantumGroup(['B',3]) # optional - gap_packages - sage: QC = QuantumGroup(['C',3]) # optional - gap_packages - sage: x = ZZ.one() # optional - gap_packages - sage: phi = QB.hom([x]*len(QB.algebra_generators())) # optional - gap_packages - sage: psi = QC.hom([x]*len(QC.algebra_generators())) # optional - gap_packages - sage: phi.im_gens() == psi.im_gens() # optional - gap_packages + sage: QB = QuantumGroup(['B',3]) + sage: QC = QuantumGroup(['C',3]) + sage: x = ZZ.one() + sage: phi = QB.hom([x]*len(QB.algebra_generators())) + sage: psi = QC.hom([x]*len(QC.algebra_generators())) + sage: phi.im_gens() == psi.im_gens() True - sage: phi == psi # optional - gap_packages + sage: phi == psi False """ if op == op_EQ: @@ -1173,10 +1174,10 @@ def im_gens(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',1]) # optional - gap_packages - sage: F, K, Ki, E = Q.gens() # optional - gap_packages - sage: phi = Q.hom([E, Ki, K, F]) # optional - gap_packages - sage: phi.im_gens() # optional - gap_packages + sage: Q = QuantumGroup(['A',1]) + sage: F, K, Ki, E = Q.gens() + sage: phi = Q.hom([E, Ki, K, F]) + sage: phi.im_gens() (E[a1], (-q + q^-1)*[ K1 ; 1 ] + K1, K1, F[a1]) """ return self._im_gens @@ -1187,10 +1188,10 @@ def _repr_defn(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',1]) # optional - gap_packages - sage: F, K, Ki, E = Q.gens() # optional - gap_packages - sage: phi = Q.hom([E, Ki, K, F]) # optional - gap_packages - sage: print(phi._repr_defn()) # optional - gap_packages + sage: Q = QuantumGroup(['A',1]) + sage: F, K, Ki, E = Q.gens() + sage: phi = Q.hom([E, Ki, K, F]) + sage: print(phi._repr_defn()) F[a1] |--> E[a1] K1 |--> (-q + q^-1)*[ K1 ; 1 ] + K1 (-q + q^-1)*[ K1 ; 1 ] + K1 |--> K1 @@ -1210,21 +1211,21 @@ def __call__(self, im_gens, check=True): EXAMPLES:: - sage: Q = QuantumGroup(['A',1]) # optional - gap_packages - sage: H = Hom(Q, Q) # optional - gap_packages - sage: F, K, Ki, E = Q.gens() # optional - gap_packages - sage: phi = H([E, Ki, K, F]); phi # optional - gap_packages + sage: Q = QuantumGroup(['A',1]) + sage: H = Hom(Q, Q) + sage: F, K, Ki, E = Q.gens() + sage: phi = H([E, Ki, K, F]); phi Quantum group homomorphism endomorphism of Quantum Group of type ['A', 1] with q=q Defn: F[a1] |--> E[a1] K1 |--> (-q + q^-1)*[ K1 ; 1 ] + K1 (-q + q^-1)*[ K1 ; 1 ] + K1 |--> K1 E[a1] |--> F[a1] - sage: H(phi) == phi # optional - gap_packages + sage: H(phi) == phi True - sage: H2 = Hom(Q, Q, Modules(Fields())) # optional - gap_packages - sage: H == H2 # optional - gap_packages + sage: H2 = Hom(Q, Q, Modules(Fields())) + sage: H == H2 False - sage: H2(phi) # optional - gap_packages + sage: H2(phi) Quantum group homomorphism endomorphism of Quantum Group of type ['A', 1] with q=q Defn: F[a1] |--> E[a1] K1 |--> (-q + q^-1)*[ K1 ; 1 ] + K1 @@ -1247,8 +1248,8 @@ def projection_lower_half(Q): EXAMPLES:: sage: from sage.algebras.quantum_groups.quantum_group_gap import projection_lower_half - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: phi = projection_lower_half(Q); phi # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: phi = projection_lower_half(Q); phi Quantum group homomorphism endomorphism of Quantum Group of type ['G', 2] with q=q Defn: F[a1] |--> F[a1] F[a2] |--> F[a2] @@ -1258,11 +1259,11 @@ def projection_lower_half(Q): (-q^3 + q^-3)*[ K2 ; 1 ] + K2 |--> 0 E[a1] |--> 0 E[a2] |--> 0 - sage: all(phi(f) == f for f in Q.F()) # optional - gap_packages + sage: all(phi(f) == f for f in Q.F()) True - sage: all(phi(e) == Q.zero() for e in Q.E()) # optional - gap_packages + sage: all(phi(e) == Q.zero() for e in Q.E()) True - sage: all(phi(K) == Q.zero() for K in Q.K()) # optional - gap_packages + sage: all(phi(K) == Q.zero() for K in Q.K()) True """ I = Q._cartan_type.index_set() @@ -1282,13 +1283,13 @@ def __reduce__(self): EXAMPLES:: - sage: Q = QuantumGroup(['B',2]) # optional - gap_packages - sage: F1, F2 = Q.F_simple() # optional - gap_packages - sage: q = Q.q() # optional - gap_packages - sage: V = Q.highest_weight_module([2,1]) # optional - gap_packages - sage: v = V.highest_weight_vector() # optional - gap_packages - sage: x = (2 - q) * v + F1*v + q*F2*F1*v # optional - gap_packages - sage: loads(dumps(x)) == x # optional - gap_packages + sage: Q = QuantumGroup(['B',2]) + sage: F1, F2 = Q.F_simple() + sage: q = Q.q() + sage: V = Q.highest_weight_module([2,1]) + sage: v = V.highest_weight_vector() + sage: x = (2 - q) * v + F1*v + q*F2*F1*v + sage: loads(dumps(x)) == x True """ return (self.parent(), (self.monomial_coefficients(),)) @@ -1299,24 +1300,24 @@ def _acted_upon_(self, scalar, self_on_left=False): EXAMPLES:: - sage: Q = QuantumGroup(['B',2]) # optional - gap_packages - sage: F1, F2 = Q.F_simple() # optional - gap_packages - sage: q = Q.q() # optional - gap_packages - sage: V = Q.highest_weight_module([2,1]) # optional - gap_packages - sage: v = V.highest_weight_vector() # optional - gap_packages - sage: F1 * v # optional - gap_packages + sage: Q = QuantumGroup(['B',2]) + sage: F1, F2 = Q.F_simple() + sage: q = Q.q() + sage: V = Q.highest_weight_module([2,1]) + sage: v = V.highest_weight_vector() + sage: F1 * v F[a1]*v0 - sage: F2 * v # optional - gap_packages + sage: F2 * v F[a2]*v0 - sage: F1^2 * v # optional - gap_packages + sage: F1^2 * v (q^2 + q^-2)*F[a1]^(2)*v0 - sage: F2^2 * v # optional - gap_packages + sage: F2^2 * v 0*v0 - sage: (F1 * F2) * v # optional - gap_packages + sage: (F1 * F2) * v F[a1]*F[a2]*v0 - sage: F1 * (F2 * v) # optional - gap_packages + sage: F1 * (F2 * v) F[a1]*F[a2]*v0 - sage: (2 - q) * v + F1*v + q*F2*F1*v # optional - gap_packages + sage: (2 - q) * v + F1*v + q*F2*F1*v (-q + 2)*1*v0 + F[a1]*v0 + (q^3)*F[a1]*F[a2]*v0 + (q)*F[a1+a2]*v0 """ try: @@ -1336,12 +1337,12 @@ def _et(self, i): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: v = V.highest_weight_vector() # optional - gap_packages - sage: v._et(1) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: v = V.highest_weight_vector() + sage: v._et(1) 0*v0 - sage: V.zero().e_tilde(1) # optional - gap_packages + sage: V.zero().e_tilde(1) 0*v0 """ if not self: # self == 0 @@ -1356,22 +1357,22 @@ def _ft(self, i): EXAMPLES:: - sage: Q = QuantumGroup(['C',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: v = V.highest_weight_vector() # optional - gap_packages - sage: v._ft(1) # optional - gap_packages + sage: Q = QuantumGroup(['C',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: v = V.highest_weight_vector() + sage: v._ft(1) F[a1]*v0 - sage: v._ft(2) # optional - gap_packages + sage: v._ft(2) F[a2]*v0 - sage: v.f_tilde([1,1]) # optional - gap_packages + sage: v.f_tilde([1,1]) 0*v0 - sage: v.f_tilde([2,2]) # optional - gap_packages + sage: v.f_tilde([2,2]) 0*v0 - sage: v.f_tilde([2,1,1]) # optional - gap_packages + sage: v.f_tilde([2,1,1]) (-q^-3)*F[a1]*F[a1+a2]*v0 + (-q^-4)*F[2*a1+a2]*v0 - sage: v.f_tilde([1,2,2]) # optional - gap_packages + sage: v.f_tilde([1,2,2]) F[a1+a2]*F[a2]*v0 - sage: V.zero().f_tilde(1) # optional - gap_packages + sage: V.zero().f_tilde(1) 0*v0 """ if not self: # self == 0 @@ -1387,14 +1388,14 @@ def monomial_coefficients(self, copy=True): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: v = V.highest_weight_vector() # optional - gap_packages - sage: F1, F2 = Q.F_simple() # optional - gap_packages - sage: q = Q.q() # optional - gap_packages - sage: x = v + F1*v + q*F2*F1*v; x # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: v = V.highest_weight_vector() + sage: F1, F2 = Q.F_simple() + sage: q = Q.q() + sage: x = v + F1*v + q*F2*F1*v; x 1*v0 + F[a1]*v0 + (q^2)*F[a1]*F[a2]*v0 + (q)*F[a1+a2]*v0 - sage: sorted(x.monomial_coefficients().items(), key=str) # optional - gap_packages + sage: sorted(x.monomial_coefficients().items(), key=str) [(0, 1), (1, 1), (3, q^2), (4, q)] """ R = self.parent()._Q.base_ring() @@ -1408,25 +1409,25 @@ def _vector_(self, R=None, order=None, sparse=False): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: v = V.highest_weight_vector() # optional - gap_packages - sage: vector(v) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: v = V.highest_weight_vector() + sage: vector(v) (1, 0, 0, 0, 0, 0, 0, 0) - sage: F1, F2 = Q.F_simple() # optional - gap_packages - sage: q = Q.q() # optional - gap_packages - sage: x = v + F1*v + q*F2*F1*v; x # optional - gap_packages + sage: F1, F2 = Q.F_simple() + sage: q = Q.q() + sage: x = v + F1*v + q*F2*F1*v; x 1*v0 + F[a1]*v0 + (q^2)*F[a1]*F[a2]*v0 + (q)*F[a1+a2]*v0 - sage: vector(x) # optional - gap_packages + sage: vector(x) (1, 1, 0, q^2, q, 0, 0, 0) - sage: v._vector_(sparse=True) # optional - gap_packages + sage: v._vector_(sparse=True) (1, 0, 0, 0, 0, 0, 0, 0) - sage: x._vector_(sparse=True) # optional - gap_packages + sage: x._vector_(sparse=True) (1, 1, 0, q^2, q, 0, 0, 0) - sage: M = V.submodule([V.an_element()]) # optional - gap_packages - sage: M # optional - gap_packages + sage: M = V.submodule([V.an_element()]) + sage: M Free module generated by {0} over Fraction Field of Univariate Polynomial Ring in q over Rational Field """ V = self.parent()._dense_free_module(R) @@ -1456,10 +1457,10 @@ def __init__(self, V, s): EXAMPLES:: sage: from sage.algebras.quantum_groups.quantum_group_gap import CrystalGraphVertex - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: v = CrystalGraphVertex(V, '') # optional - gap_packages - sage: TestSuite(v).run() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: v = CrystalGraphVertex(V, '') + sage: TestSuite(v).run() """ self.V = V self.s = s @@ -1471,10 +1472,10 @@ def __hash__(self): EXAMPLES:: sage: from sage.algebras.quantum_groups.quantum_group_gap import CrystalGraphVertex - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: v = CrystalGraphVertex(V, '') # optional - gap_packages - sage: hash(v) == hash('') # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: v = CrystalGraphVertex(V, '') + sage: hash(v) == hash('') True """ return hash(self.s) @@ -1486,14 +1487,14 @@ def __eq__(self, other): EXAMPLES:: sage: from sage.algebras.quantum_groups.quantum_group_gap import CrystalGraphVertex - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: v = CrystalGraphVertex(V, '') # optional - gap_packages - sage: vp = CrystalGraphVertex(V, '') # optional - gap_packages - sage: v == vp # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: v = CrystalGraphVertex(V, '') + sage: vp = CrystalGraphVertex(V, '') + sage: v == vp True - sage: vpp = CrystalGraphVertex(V, '<1*v0>') # optional - gap_packages - sage: v == vpp # optional - gap_packages + sage: vpp = CrystalGraphVertex(V, '<1*v0>') + sage: v == vpp False """ return isinstance(other, CrystalGraphVertex) and self.s == other.s @@ -1505,9 +1506,9 @@ def _repr_(self): EXAMPLES:: sage: from sage.algebras.quantum_groups.quantum_group_gap import CrystalGraphVertex - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: CrystalGraphVertex(V, '') # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: CrystalGraphVertex(V, '') """ return self.s @@ -1519,10 +1520,10 @@ def _latex_(self): EXAMPLES:: sage: from sage.algebras.quantum_groups.quantum_group_gap import CrystalGraphVertex - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: v = CrystalGraphVertex(V, '') # optional - gap_packages - sage: latex(v) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: v = CrystalGraphVertex(V, '') + sage: latex(v) \langle F_{\alpha_{1} + \alpha_{2}} v_0 \rangle """ # Essentially same as QuaGroupModuleElement._latex_ @@ -1556,9 +1557,9 @@ def __init__(self, Q, category): EXAMPLES:: - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: TestSuite(V).run() # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: TestSuite(V).run() """ self._Q = Q self._libgap_q = Q._libgap_q @@ -1573,11 +1574,11 @@ def _latex_(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: S = T.highest_weight_decomposition()[0] # optional - gap_packages - sage: latex(S) # optional - gap_packages # random (depends on dot2tex) + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: S = T.highest_weight_decomposition()[0] + sage: latex(S) \begin{tikzpicture} ... \end{tikzpicture} @@ -1591,9 +1592,9 @@ def gap(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: V.gap() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: V.gap() <8-dimensional left-module over QuantumUEA( , Qpar = q )> """ @@ -1607,12 +1608,12 @@ def _element_constructor_(self, elt): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: q = Q.q() # optional - gap_packages - sage: V(0) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: q = Q.q() + sage: V(0) 0*v0 - sage: V({1: q^2 - q^-2, 3: 2}) # optional - gap_packages + sage: V({1: q^2 - q^-2, 3: 2}) (q^2-q^-2)*F[a1]*v0 + (2)*F[a1]*F[a2]*v0 """ if not elt: @@ -1628,9 +1629,9 @@ def basis(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: V.basis() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: V.basis() Family (1*v0, F[a1]*v0, F[a2]*v0, F[a1]*F[a2]*v0, F[a1+a2]*v0, F[a1]*F[a1+a2]*v0, F[a1+a2]*F[a2]*v0, F[a1+a2]^(2)*v0) """ @@ -1643,9 +1644,9 @@ def crystal_basis(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: V.crystal_basis() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: V.crystal_basis() Family (1*v0, F[a1]*v0, F[a2]*v0, F[a1]*F[a2]*v0, (q)*F[a1]*F[a2]*v0 + F[a1+a2]*v0, F[a1+a2]*F[a2]*v0, (-q^-2)*F[a1]*F[a1+a2]*v0, (-q^-1)*F[a1+a2]^(2)*v0) @@ -1659,9 +1660,9 @@ def R_matrix(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',1]) # optional - gap_packages - sage: V = Q.highest_weight_module([1]) # optional - gap_packages - sage: V.R_matrix() # optional - gap_packages + sage: Q = QuantumGroup(['A',1]) + sage: V = Q.highest_weight_module([1]) + sage: V.R_matrix() [ 1 0 0 0] [ 0 q -q^2 + 1 0] [ 0 0 q 0] @@ -1680,13 +1681,13 @@ def crystal_graph(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: G = V.crystal_graph(); G # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: G = V.crystal_graph(); G Digraph on 8 vertices - sage: B = crystals.Tableaux(['A',2], shape=[2,1]) # optional - gap_packages - sage: G.is_isomorphic(B.digraph(), edge_labels=True) # optional - gap_packages + sage: B = crystals.Tableaux(['A',2], shape=[2,1]) + sage: G.is_isomorphic(B.digraph(), edge_labels=True) True """ G = self._libgap.CrystalGraph() @@ -1708,9 +1709,9 @@ def zero(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: V.zero() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: V.zero() 0*v0 """ return self.element_class(self, self._libgap.ZeroImmutable()) @@ -1727,10 +1728,10 @@ def __classcall_private__(cls, Q, weight): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: La = Q.cartan_type().root_system().weight_lattice().fundamental_weights() # optional - gap_packages - sage: V = Q.highest_weight_module([1,3]) # optional - gap_packages - sage: V is Q.highest_weight_module(La[1]+3*La[2]) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: La = Q.cartan_type().root_system().weight_lattice().fundamental_weights() + sage: V = Q.highest_weight_module([1,3]) + sage: V is Q.highest_weight_module(La[1]+3*La[2]) True """ P = Q._cartan_type.root_system().weight_lattice() @@ -1747,9 +1748,9 @@ def __init__(self, Q, weight): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: TestSuite(V).run() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: TestSuite(V).run() """ self._libgap = Q._libgap.HighestWeightModule(list(weight.to_vector())) self._weight = weight @@ -1762,8 +1763,8 @@ def _repr_(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q.highest_weight_module([1,1]) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q.highest_weight_module([1,1]) Highest weight module of weight Lambda[1] + Lambda[2] of Quantum Group of type ['A', 2] with q=q """ @@ -1775,9 +1776,9 @@ def _latex_(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,2]) # optional - gap_packages - sage: latex(V) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,2]) + sage: latex(V) V(\Lambda_{1} + 2 \Lambda_{2}) """ from sage.misc.latex import latex @@ -1790,9 +1791,9 @@ def highest_weight_vector(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: V.highest_weight_vector() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: V.highest_weight_vector() 1*v0 """ return self.element_class(self, self._libgap.HighestWeightsAndVectors()[1][0][0]) @@ -1805,10 +1806,10 @@ def tensor(self, *V, **options): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: Vp = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: Vp.tensor(V) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: Vp = Q.highest_weight_module([1,0]) + sage: Vp.tensor(V) Highest weight module of weight Lambda[1] of Quantum Group of type ['A', 2] with q=q # Highest weight module of weight Lambda[1] + Lambda[2] of Quantum Group of type ['A', 2] with q=q """ @@ -1824,10 +1825,10 @@ def __init__(self, *modules, **options): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: TestSuite(T).run() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,1]) + sage: T = tensor([V,V]) + sage: TestSuite(T).run() """ Q = modules[0]._Q self._modules = tuple(modules) @@ -1841,10 +1842,10 @@ def _repr_(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: T # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: T Highest weight module of weight Lambda[1] of Quantum Group of type ['A', 2] with q=q # Highest weight module of weight Lambda[1] of Quantum Group of type ['A', 2] with q=q """ @@ -1856,10 +1857,10 @@ def _latex_(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: latex(T) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: latex(T) V(\Lambda_{1}) \otimes V(\Lambda_{1}) """ from sage.misc.latex import latex @@ -1876,10 +1877,10 @@ def _highest_weights_and_vectors(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([0,1]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: T._highest_weights_and_vectors # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([0,1]) + sage: T = tensor([V,V]) + sage: T._highest_weights_and_vectors [ [ [ 0, 2 ], [ 1, 0 ] ], [ [ 1*(1*v01*v0) ], [ -q^-1*(1*v0F3*v0)+1*(F3*v01*v0) ] ] ] """ @@ -1891,10 +1892,10 @@ def highest_weight_vectors(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: T.highest_weight_vectors() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: T.highest_weight_vectors() [1*(1*v01*v0), -q^-1*(1*v0F[a1]*v0) + 1*(F[a1]*v01*v0)] """ return [self.element_class(self, v) @@ -1909,10 +1910,10 @@ def _an_element_(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: T.an_element() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: T.an_element() 1*(1*v01*v0) """ return self.highest_weight_vectors()[0] @@ -1924,10 +1925,10 @@ def highest_weight_decomposition(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: T.highest_weight_decomposition() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: T.highest_weight_decomposition() [Highest weight submodule with weight 2*Lambda[1] generated by 1*(1*v01*v0), Highest weight submodule with weight Lambda[2] generated by -q^-1*(1*v0F[a1]*v0) + 1*(F[a1]*v01*v0)] """ @@ -1941,10 +1942,10 @@ def tensor_factors(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: T.tensor_factors() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: T.tensor_factors() (Highest weight module of weight Lambda[1] of Quantum Group of type ['A', 2] with q=q, Highest weight module of weight Lambda[1] of Quantum Group of type ['A', 2] with q=q) """ @@ -1960,11 +1961,11 @@ def __init__(self, ambient, gen, weight): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: S = T.highest_weight_decomposition()[0] # optional - gap_packages - sage: TestSuite(S).run() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: S = T.highest_weight_decomposition()[0] + sage: TestSuite(S).run() """ self._ambient = ambient # We do not use the generic ambient category since submodules of tensor @@ -1989,10 +1990,10 @@ def _repr_(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: T.highest_weight_decomposition() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: T.highest_weight_decomposition() [Highest weight submodule with weight 2*Lambda[1] generated by 1*(1*v01*v0), Highest weight submodule with weight Lambda[2] @@ -2007,11 +2008,11 @@ def _ambient_basis_map(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: S = T.highest_weight_decomposition()[0] # optional - gap_packages - sage: S._ambient_basis_map # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: S = T.highest_weight_decomposition()[0] + sage: S._ambient_basis_map {0: 1*(1*v01*v0), 1: 1*(1*v0F[a1]*v0) + q^-1*(F[a1]*v01*v0), 2: 1*(F[a1]*v0F[a1]*v0), @@ -2038,11 +2039,11 @@ def ambient(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: S = T.highest_weight_decomposition()[0] # optional - gap_packages - sage: S.ambient() is T # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: S = T.highest_weight_decomposition()[0] + sage: S.ambient() is T True """ return self._ambient @@ -2054,16 +2055,16 @@ def lift(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: S = T.highest_weight_decomposition()[0] # optional - gap_packages - sage: S.lift # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: S = T.highest_weight_decomposition()[0] + sage: S.lift Generic morphism: From: Highest weight submodule with weight 2*Lambda[1] generated by 1*(1*v01*v0) To: Highest weight module ... # Highest weight module ... - sage: x = sum(S.basis()) # optional - gap_packages - sage: x.lift() # optional - gap_packages + sage: x = sum(S.basis()) + sage: x.lift() 1*(1*v01*v0) + 1*(1*v0F[a1]*v0) + 1*(1*v0F[a1+a2]*v0) + q^-1*(F[a1]*v01*v0) + 1*(F[a1]*v0F[a1]*v0) + 1*(F[a1]*v0F[a1+a2]*v0) + q^-1*(F[a1+a2]*v01*v0) @@ -2078,10 +2079,10 @@ def retract(self, elt): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: all(S.retract(S.lift(x)) == x # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: all(S.retract(S.lift(x)) == x ....: for S in T.highest_weight_decomposition() ....: for x in S.basis()) True @@ -2095,13 +2096,13 @@ def highest_weight_vector(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: S = T.highest_weight_decomposition()[1] # optional - gap_packages - sage: u = S.highest_weight_vector(); u # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: S = T.highest_weight_decomposition()[1] + sage: u = S.highest_weight_vector(); u (1)*e.1 - sage: u.lift() # optional - gap_packages + sage: u.lift() -q^-1*(1*v0F[a1]*v0) + 1*(F[a1]*v01*v0) """ I = self._cartan_type.index_set() @@ -2124,16 +2125,16 @@ def crystal_graph(self, use_ambient=True): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages - sage: T = tensor([V,V]) # optional - gap_packages - sage: S = T.highest_weight_decomposition()[1] # optional - gap_packages - sage: G = S.crystal_graph() # optional - gap_packages - sage: sorted(G.vertices(sort=False), key=str) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: V = Q.highest_weight_module([1,0]) + sage: T = tensor([V,V]) + sage: S = T.highest_weight_decomposition()[1] + sage: G = S.crystal_graph() + sage: sorted(G.vertices(sort=False), key=str) [<-q^-1*(1*v0F[a1+a2]*v0) + 1*(F[a1+a2]*v01*v0)>, <-q^-1*(1*v0F[a1]*v0) + 1*(F[a1]*v01*v0)>, <-q^-1*(F[a1]*v0F[a1+a2]*v0) + 1*(F[a1+a2]*v0F[a1]*v0)>] - sage: sorted(S.crystal_graph(False).vertices(sort=False), key=str) # optional - gap_packages + sage: sorted(S.crystal_graph(False).vertices(sort=False), key=str) [<(1)*e.1>, <(1)*e.2>, <(1)*e.3>] """ G = self._libgap.CrystalGraph() @@ -2171,8 +2172,8 @@ def __classcall_private__(cls, Q): EXAMPLES:: sage: from sage.algebras.quantum_groups.quantum_group_gap import LowerHalfQuantumGroup - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q.lower_half() is LowerHalfQuantumGroup(Q) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q.lower_half() is LowerHalfQuantumGroup(Q) True """ from sage.combinat.root_system.cartan_type import CartanType_abstract @@ -2186,9 +2187,9 @@ def __init__(self, Q): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: TestSuite(B).run() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: TestSuite(B).run() """ self._Q = Q self._libgap = Q._libgap @@ -2206,8 +2207,8 @@ def _repr_(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: Q.lower_half() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: Q.lower_half() Lower Half of Quantum Group of type ['A', 2] with q=q """ return "Lower Half of {}".format(self._Q) @@ -2218,8 +2219,8 @@ def _latex_(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: latex(Q.lower_half()) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: latex(Q.lower_half()) U^-_{q}(A_{2}) """ from sage.misc.latex import latex @@ -2231,14 +2232,14 @@ def _element_constructor_(self, elt): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: q = Q.q() # optional - gap_packages - sage: B(0) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: q = Q.q() + sage: B(0) 0 - sage: B(1 + q^2) # optional - gap_packages + sage: B(1 + q^2) (q^2 + 1)*1 - sage: B({(1,2,0): q, (0,0,2): q^2 - 2}) # optional - gap_packages + sage: B({(1,2,0): q, (0,0,2): q^2 - 2}) (q)*F[a1]*F[a1+a2]^(2) + (q^2-2)*F[a2]^(2) """ if not elt: @@ -2257,9 +2258,9 @@ def ambient(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: B.ambient() is Q # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: B.ambient() is Q True """ return self._Q @@ -2271,9 +2272,9 @@ def highest_weight_vector(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: B.highest_weight_vector() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: B.highest_weight_vector() 1 """ return self.element_class(self, self._Q.one()._libgap) @@ -2288,9 +2289,9 @@ def zero(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: B.zero() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: B.zero() 0 """ return self.element_class(self, self._Q._libgap.ZeroImmutable()) @@ -2302,9 +2303,9 @@ def algebra_generators(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: B.algebra_generators() # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: B.algebra_generators() Finite family {1: F[a1], 2: F[a2]} """ F = self._Q.F_simple() @@ -2320,11 +2321,11 @@ def _construct_monomial(self, k): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: B._construct_monomial((1,2,1)) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: B._construct_monomial((1,2,1)) F[a1]*F[a1+a2]^(2)*F[a2] - sage: B._construct_monomial((3,0,1)) # optional - gap_packages + sage: B._construct_monomial((3,0,1)) F[a1]^(3)*F[a2] """ F = libgap.eval('ElementsFamily')(libgap.eval('FamilyObj')(self._libgap)) @@ -2348,16 +2349,16 @@ def basis(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: basis = B.basis(); basis # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: basis = B.basis(); basis Lazy family (monomial(i))_{i in The Cartesian product of (Non negative integers, Non negative integers, Non negative integers)} - sage: basis[1,2,1] # optional - gap_packages + sage: basis[1,2,1] F[a1]*F[a1+a2]^(2)*F[a2] - sage: basis[1,2,4] # optional - gap_packages + sage: basis[1,2,4] F[a1]*F[a1+a2]^(2)*F[a2]^(4) - sage: basis[1,0,4] # optional - gap_packages + sage: basis[1,0,4] F[a1]*F[a2]^(4) """ I = cartesian_product([NonNegativeIntegers()]*len(self._pos_roots)) @@ -2369,9 +2370,9 @@ def _construct_canonical_basis_elts(self, k): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: B._construct_canonical_basis_elts((1,2)) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: B._construct_canonical_basis_elts((1,2)) [F[a1]*F[a2]^(2), (q^2)*F[a1]*F[a2]^(2) + F[a1+a2]*F[a2]] """ B = self._libgap.CanonicalBasis() @@ -2384,14 +2385,14 @@ def canonical_basis_elements(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: C = B.canonical_basis_elements(); C # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: C = B.canonical_basis_elements(); C Lazy family (Canonical basis(i))_{i in The Cartesian product of (Non negative integers, Non negative integers)} - sage: C[2,1] # optional - gap_packages + sage: C[2,1] [F[a1]^(2)*F[a2], F[a1]*F[a1+a2] + (q^2)*F[a1]^(2)*F[a2]] - sage: C[1,2] # optional - gap_packages + sage: C[1,2] [F[a1]*F[a2]^(2), (q^2)*F[a1]*F[a2]^(2) + F[a1+a2]*F[a2]] """ I = cartesian_product([NonNegativeIntegers()]*len(self._cartan_type.index_set())) @@ -2403,11 +2404,11 @@ def lift(self, elt): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: x = B.lift(B.an_element()); x # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: x = B.lift(B.an_element()); x 1 - sage: x.parent() is Q # optional - gap_packages + sage: x.parent() is Q True """ return self._Q.element_class(self._Q, elt._libgap) @@ -2418,12 +2419,12 @@ def retract(self, elt): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: x = Q.an_element(); x # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: x = Q.an_element(); x 1 + (q)*F[a1] + E[a1] + (q^2-1-q^-2 + q^-4)*[ K1 ; 2 ] + K1 + (-q^-1 + q^-3)*K1[ K1 ; 1 ] - sage: B.retract(x) # optional - gap_packages + sage: B.retract(x) 1 + (q)*F[a1] """ return self.element_class(self, self._proj(elt)._libgap) @@ -2438,20 +2439,20 @@ def _acted_upon_(self, scalar, self_on_left=False): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: F1, F2 = Q.F_simple() # optional - gap_packages - sage: v = B.highest_weight_vector(); v # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: F1, F2 = Q.F_simple() + sage: v = B.highest_weight_vector(); v 1 - sage: 2 * v # optional - gap_packages + sage: 2 * v (2)*1 - sage: v * (3/2) # optional - gap_packages + sage: v * (3/2) (3/2)*1 - sage: F1 * v # optional - gap_packages + sage: F1 * v F[a1] - sage: F2 * (F1 * v) # optional - gap_packages + sage: F2 * (F1 * v) (q)*F[a1]*F[a2] + F[a1+a2] - sage: (F1 * v) * F2 # optional - gap_packages + sage: (F1 * v) * F2 F[a1]*F[a2] """ try: @@ -2473,16 +2474,16 @@ def _mul_(self, other): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: F1, F2 = Q.F_simple() # optional - gap_packages - sage: v = B.highest_weight_vector() # optional - gap_packages - sage: f1, f2 = F1 * v, F2 * v # optional - gap_packages - sage: f1 * f2 # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: F1, F2 = Q.F_simple() + sage: v = B.highest_weight_vector() + sage: f1, f2 = F1 * v, F2 * v + sage: f1 * f2 F[a1]*F[a2] - sage: f1^2 * f2 # optional - gap_packages + sage: f1^2 * f2 (q + q^-1)*F[a1]^(2)*F[a2] - sage: f2 * f1^2 * f2 # optional - gap_packages + sage: f2 * f1^2 * f2 (q + q^-1)*F[a1]*F[a1+a2]*F[a2] + (q^4 + 2*q^2 + 1)*F[a1]^(2)*F[a2]^(2) """ @@ -2496,11 +2497,11 @@ def monomial_coefficients(self, copy=True): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: x = B.retract(Q.an_element()); x # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: B = Q.lower_half() + sage: x = B.retract(Q.an_element()); x 1 + (q)*F[a1] - sage: sorted(x.monomial_coefficients().items(), key=str) # optional - gap_packages + sage: sorted(x.monomial_coefficients().items(), key=str) [((0, 0, 0), 1), ((1, 0, 0), q)] """ ext_rep = self._libgap.ExtRepOfObj() @@ -2521,27 +2522,27 @@ def bar(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: F1, F2 = Q.F_simple() # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: x = B(Q.an_element()); x # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: F1, F2 = Q.F_simple() + sage: B = Q.lower_half() + sage: x = B(Q.an_element()); x 1 + (q)*F[a1] - sage: x.bar() # optional - gap_packages + sage: x.bar() 1 + (q^-1)*F[a1] - sage: (F1*x).bar() == F1 * x.bar() # optional - gap_packages + sage: (F1*x).bar() == F1 * x.bar() True - sage: (F2*x).bar() == F2 * x.bar() # optional - gap_packages + sage: (F2*x).bar() == F2 * x.bar() True - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: F1, F2 = Q.F_simple() # optional - gap_packages - sage: q = Q.q() # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: x = B(q^-2*F1*F2^2*F1) # optional - gap_packages - sage: x # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: F1, F2 = Q.F_simple() + sage: q = Q.q() + sage: B = Q.lower_half() + sage: x = B(q^-2*F1*F2^2*F1) + sage: x (q + q^-5)*F[a1]*F[a1+a2]*F[a2] + (q^8 + q^6 + q^2 + 1)*F[a1]^(2)*F[a2]^(2) - sage: x.bar() # optional - gap_packages + sage: x.bar() (q^5 + q^-1)*F[a1]*F[a1+a2]*F[a2] + (q^12 + q^10 + q^6 + q^4)*F[a1]^(2)*F[a2]^(2) """ @@ -2555,27 +2556,27 @@ def tau(self): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: F1, F2 = Q.F_simple() # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: x = B(Q.an_element()); x # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: F1, F2 = Q.F_simple() + sage: B = Q.lower_half() + sage: x = B(Q.an_element()); x 1 + (q)*F[a1] - sage: x.tau() # optional - gap_packages + sage: x.tau() 1 + (q)*F[a1] - sage: (F1*x).tau() == x.tau() * F1.tau() # optional - gap_packages + sage: (F1*x).tau() == x.tau() * F1.tau() True - sage: (F2*x).tau() == x.tau() * F2.tau() # optional - gap_packages + sage: (F2*x).tau() == x.tau() * F2.tau() True - sage: Q = QuantumGroup(['G',2]) # optional - gap_packages - sage: F1, F2 = Q.F_simple() # optional - gap_packages - sage: q = Q.q() # optional - gap_packages - sage: B = Q.lower_half() # optional - gap_packages - sage: x = B(q^-2*F1*F2^2*F1) # optional - gap_packages - sage: x # optional - gap_packages + sage: Q = QuantumGroup(['G',2]) + sage: F1, F2 = Q.F_simple() + sage: q = Q.q() + sage: B = Q.lower_half() + sage: x = B(q^-2*F1*F2^2*F1) + sage: x (q + q^-5)*F[a1]*F[a1+a2]*F[a2] + (q^8 + q^6 + q^2 + 1)*F[a1]^(2)*F[a2]^(2) - sage: x.tau() # optional - gap_packages + sage: x.tau() (q + q^-5)*F[a1]*F[a1+a2]*F[a2] + (q^8 + q^6 + q^2 + 1)*F[a1]^(2)*F[a2]^(2) """ @@ -2594,13 +2595,13 @@ def braid_group_action(self, braid): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: L = Q.lower_half() # optional - gap_packages - sage: v = L.highest_weight_vector().f_tilde([1,2,2,1]); v # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: L = Q.lower_half() + sage: v = L.highest_weight_vector().f_tilde([1,2,2,1]); v F[a1]*F[a1+a2]*F[a2] - sage: v.braid_group_action([1]) # optional - gap_packages + sage: v.braid_group_action([1]) (-q^3-q)*F[a2]^(2) - sage: v.braid_group_action([]) == v # optional - gap_packages + sage: v.braid_group_action([]) == v True """ if not braid: @@ -2625,18 +2626,18 @@ def _et(self, i): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: L = Q.lower_half() # optional - gap_packages - sage: v = L.highest_weight_vector() # optional - gap_packages - sage: v._et(1) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: L = Q.lower_half() + sage: v = L.highest_weight_vector() + sage: v._et(1) 0 - sage: w = v.f_tilde([1,2,1]); w # optional - gap_packages + sage: w = v.f_tilde([1,2,1]); w F[a1]*F[a1+a2] - sage: w._et(1) # optional - gap_packages + sage: w._et(1) F[a1+a2] - sage: w._et(2) # optional - gap_packages + sage: w._et(2) F[a1]^(2) - sage: L.zero().e_tilde(1) # optional - gap_packages + sage: L.zero().e_tilde(1) 0 """ if not self: # self == 0 @@ -2653,12 +2654,12 @@ def _ft(self, i): EXAMPLES:: - sage: Q = QuantumGroup(['A',2]) # optional - gap_packages - sage: L = Q.lower_half() # optional - gap_packages - sage: v = L.highest_weight_vector() # optional - gap_packages - sage: v._ft(1) # optional - gap_packages + sage: Q = QuantumGroup(['A',2]) + sage: L = Q.lower_half() + sage: v = L.highest_weight_vector() + sage: v._ft(1) F[a1] - sage: L.zero().f_tilde(1) # optional - gap_packages + sage: L.zero().f_tilde(1) 0 """ if not self: # self == 0 @@ -2676,9 +2677,9 @@ def _unpickle_generic_element(parent, data): EXAMPLES:: - sage: Q = QuantumGroup(['D',4]) # optional - gap_packages - sage: x = Q.an_element() # optional - gap_packages - sage: loads(dumps(x)) == x # indirect doctest # optional - gap_packages + sage: Q = QuantumGroup(['D',4]) + sage: x = Q.an_element() + sage: loads(dumps(x)) == x # indirect doctest True """ F = libgap.eval('ElementsFamily')(libgap.eval('FamilyObj')(parent._libgap)) diff --git a/src/sage/coding/code_bounds.py b/src/sage/coding/code_bounds.py index 9b82bb74b50..5b9ebedc06e 100644 --- a/src/sage/coding/code_bounds.py +++ b/src/sage/coding/code_bounds.py @@ -255,11 +255,11 @@ def codesize_upper_bound(n, d, q, algorithm=None): 93 sage: codes.bounds.codesize_upper_bound(24,8,2,algorithm="LP") 4096 - sage: codes.bounds.codesize_upper_bound(10,3,2,algorithm="gap") # optional - gap_packages (Guava package) + sage: codes.bounds.codesize_upper_bound(10,3,2,algorithm="gap") # optional - gap_package_guava 85 sage: codes.bounds.codesize_upper_bound(11,3,4,algorithm=None) 123361 - sage: codes.bounds.codesize_upper_bound(11,3,4,algorithm="gap") # optional - gap_packages (Guava package) + sage: codes.bounds.codesize_upper_bound(11,3,4,algorithm="gap") # optional - gap_package_guava 123361 sage: codes.bounds.codesize_upper_bound(11,3,4,algorithm="LP") 109226 @@ -270,7 +270,7 @@ def codesize_upper_bound(n, d, q, algorithm=None): sage: codes.bounds.codesize_upper_bound(19,10,2) 20 - sage: codes.bounds.codesize_upper_bound(19,10,2,algorithm="gap") # optional - gap_packages (Guava package) + sage: codes.bounds.codesize_upper_bound(19,10,2,algorithm="gap") # optional - gap_package_guava 20 Meaningless parameters are rejected:: @@ -379,7 +379,7 @@ def plotkin_upper_bound(n,q,d, algorithm=None): sage: codes.bounds.plotkin_upper_bound(10,2,3) 192 - sage: codes.bounds.plotkin_upper_bound(10,2,3,algorithm="gap") # optional - gap_packages (Guava package) + sage: codes.bounds.plotkin_upper_bound(10,2,3,algorithm="gap") # optional - gap_package_guava 192 """ _check_n_q_d(n, q, d, field_based=False) @@ -430,7 +430,7 @@ def griesmer_upper_bound(n,q,d,algorithm=None): sage: codes.bounds.griesmer_upper_bound(10,2,3) 128 - sage: codes.bounds.griesmer_upper_bound(10,2,3,algorithm="gap") # optional - gap_packages (Guava package) + sage: codes.bounds.griesmer_upper_bound(10,2,3,algorithm="gap") # optional - gap_package_guava 128 TESTS:: @@ -471,7 +471,7 @@ def elias_upper_bound(n,q,d,algorithm=None): sage: codes.bounds.elias_upper_bound(10,2,3) 232 - sage: codes.bounds.elias_upper_bound(10,2,3,algorithm="gap") # optional - gap_packages (Guava package) + sage: codes.bounds.elias_upper_bound(10,2,3,algorithm="gap") # optional - gap_package_guava 232 """ _check_n_q_d(n, q, d, field_based=False) diff --git a/src/sage/coding/code_constructions.py b/src/sage/coding/code_constructions.py index 4a157e6bdad..77c912e907e 100644 --- a/src/sage/coding/code_constructions.py +++ b/src/sage/coding/code_constructions.py @@ -731,7 +731,7 @@ def ToricCode(P,F): [36, 5] linear code over GF(7) sage: C.minimum_distance() 24 - sage: C.minimum_distance(algorithm="guava") # optional - gap_packages (Guava package) + sage: C.minimum_distance(algorithm="guava") # optional - gap_package_guava ... 24 sage: C = codes.ToricCode([[-2,-2],[-1,-2],[-1,-1],[-1,0], @@ -740,7 +740,7 @@ def ToricCode(P,F): [16, 9] linear code over GF(5) sage: C.minimum_distance() 6 - sage: C.minimum_distance(algorithm="guava") # optional - gap_packages (Guava package) + sage: C.minimum_distance(algorithm="guava") # optional - gap_package_guava 6 sage: C = codes.ToricCode([[0,0],[1,1],[1,2],[1,3],[1,4],[2,1], ....: [2,2],[2,3],[3,1],[3,2],[4,1]], GF(8,"a")) diff --git a/src/sage/coding/databases.py b/src/sage/coding/databases.py index 9fd3b43485b..e0c8b6e4068 100644 --- a/src/sage/coding/databases.py +++ b/src/sage/coding/databases.py @@ -35,11 +35,11 @@ def best_linear_code_in_guava(n, k, F): EXAMPLES:: - sage: codes.databases.best_linear_code_in_guava(10,5,GF(2)) # long time; optional - gap_packages (Guava package) + sage: codes.databases.best_linear_code_in_guava(10,5,GF(2)) # long time; optional - gap_package_guava [10, 5] linear code over GF(2) - sage: libgap.LoadPackage('guava') # long time; optional - gap_packages (Guava package) + sage: libgap.LoadPackage('guava') # long time; optional - gap_package_guava ... - sage: libgap.BestKnownLinearCode(10,5,libgap.GF(2)) # long time; optional - gap_packages (Guava package) + sage: libgap.BestKnownLinearCode(10,5,libgap.GF(2)) # long time; optional - gap_package_guava a linear [10,5,4]2..4 shortened code This means that the best possible binary linear code of length 10 and @@ -86,8 +86,8 @@ def bounds_on_minimum_distance_in_guava(n, k, F): EXAMPLES:: - sage: gap_rec = codes.databases.bounds_on_minimum_distance_in_guava(10,5,GF(2)) # optional - gap_packages (Guava package) - sage: gap_rec.Display() # optional - gap_packages (Guava package) + sage: gap_rec = codes.databases.bounds_on_minimum_distance_in_guava(10,5,GF(2)) # optional - gap_package_guava + sage: gap_rec.Display() # optional - gap_package_guava rec( construction := [ , [ [ , diff --git a/src/sage/coding/guava.py b/src/sage/coding/guava.py index 4a529fe762d..e9f0404b458 100644 --- a/src/sage/coding/guava.py +++ b/src/sage/coding/guava.py @@ -60,7 +60,7 @@ def QuasiQuadraticResidueCode(p): EXAMPLES:: - sage: C = codes.QuasiQuadraticResidueCode(11); C # optional - gap_packages (Guava package) + sage: C = codes.QuasiQuadraticResidueCode(11); C # optional - gap_package_guava [22, 11] linear code over GF(2) These are self-orthogonal in general and self-dual when `p \equiv 3 \pmod 4`. @@ -93,9 +93,9 @@ def RandomLinearCodeGuava(n, k, F): EXAMPLES:: - sage: C = codes.RandomLinearCodeGuava(30,15,GF(2)); C # optional - gap_packages (Guava package) + sage: C = codes.RandomLinearCodeGuava(30,15,GF(2)); C # optional - gap_package_guava [30, 15] linear code over GF(2) - sage: C = codes.RandomLinearCodeGuava(10,5,GF(4,'a')); C # optional - gap_packages (Guava package) + sage: C = codes.RandomLinearCodeGuava(10,5,GF(4,'a')); C # optional - gap_package_guava [10, 5] linear code over GF(4) AUTHOR: David Joyner (11-2005) diff --git a/src/sage/coding/linear_code.py b/src/sage/coding/linear_code.py index ae80ec10894..3097b9be81b 100644 --- a/src/sage/coding/linear_code.py +++ b/src/sage/coding/linear_code.py @@ -410,7 +410,7 @@ def __init__(self, base_field, length, default_encoder_name, default_decoder_nam 1 sage: C.is_self_orthogonal() False - sage: print(C.divisor()) #long time + sage: print(C.divisor()) #long time 1 """ from sage.coding.information_set_decoder import LinearCodeInformationSetDecoder @@ -910,12 +910,12 @@ def covering_radius(self): EXAMPLES:: sage: C = codes.HammingCode(GF(2), 5) - sage: C.covering_radius() # optional - gap_packages (Guava package) + sage: C.covering_radius() # optional - gap_package_guava ... 1 sage: C = codes.random_linear_code(GF(263), 5, 1) - sage: C.covering_radius() # optional - gap_packages (Guava package) + sage: C.covering_radius() # optional - gap_package_guava Traceback (most recent call last): ... NotImplementedError: the GAP algorithm that Sage is using @@ -1374,7 +1374,7 @@ def minimum_distance(self, algorithm=None): sage: C.minimum_distance(algorithm="gap") # optional - sage.libs.gap 3 sage: libgap.SetAllInfoLevels(0) # to suppress extra info messages # optional - sage.libs.gap - sage: C.minimum_distance(algorithm="guava") # optional - gap_packages (Guava package) + sage: C.minimum_distance(algorithm="guava") # optional - gap_package_guava ... 3 @@ -1612,13 +1612,13 @@ def permutation_automorphism_group(self, algorithm="partition"): [5, 3] Hamming Code over GF(4) sage: G = C.permutation_automorphism_group(algorithm="partition"); G # optional - sage.groups Permutation Group with generators [(1,3)(4,5), (1,4)(3,5)] - sage: GG = C.permutation_automorphism_group(algorithm="codecan") # long time, optional - sage.groups - sage: GG == G # long time, optional - sage.groups + sage: GG = C.permutation_automorphism_group(algorithm="codecan") # long time, optional - sage.groups + sage: GG == G # long time, optional - sage.groups True - sage: C.permutation_automorphism_group(algorithm="gap") # optional - gap_packages (Guava package) sage.groups + sage: C.permutation_automorphism_group(algorithm="gap") # optional - gap_package_guava sage.groups Permutation Group with generators [(1,3)(4,5), (1,4)(3,5)] sage: C = codes.GolayCode(GF(3), True) - sage: C.permutation_automorphism_group(algorithm="gap") # optional - gap_packages (Guava package) sage.groups + sage: C.permutation_automorphism_group(algorithm="gap") # optional - gap_package_guava sage.groups Permutation Group with generators [(5,7)(6,11)(8,9)(10,12), (4,6,11)(5,8,12)(7,10,9), (3,4)(6,8)(9,11)(10,12), (2,3)(6,11)(8,12)(9,10), (1,2)(5,10)(7,12)(8,9)] @@ -1839,23 +1839,25 @@ def weight_distribution(self, algorithm=None): [1, 0, 0, 30, 15, 18] sage: C = codes.HammingCode(GF(2), 3); C [7, 4] Hamming Code over GF(2) - sage: C.weight_distribution(algorithm="leon") # optional - gap_packages (Guava package) + sage: C.weight_distribution(algorithm="leon") # optional - gap_package_guava [1, 0, 0, 7, 7, 0, 0, 1] sage: C.weight_distribution(algorithm="gap") # optional - sage.libs.gap [1, 0, 0, 7, 7, 0, 0, 1] sage: C.weight_distribution(algorithm="binary") [1, 0, 0, 7, 7, 0, 0, 1] + + sage: # optional - gap_package_guava sage: C = codes.HammingCode(GF(3), 3); C [13, 10] Hamming Code over GF(3) - sage: C.weight_distribution() == C.weight_distribution(algorithm="leon") # optional - gap_packages (Guava package) + sage: C.weight_distribution() == C.weight_distribution(algorithm="leon") True sage: C = codes.HammingCode(GF(5), 2); C [6, 4] Hamming Code over GF(5) - sage: C.weight_distribution() == C.weight_distribution(algorithm="leon") # optional - gap_packages (Guava package) + sage: C.weight_distribution() == C.weight_distribution(algorithm="leon") True sage: C = codes.HammingCode(GF(7), 2); C [8, 6] Hamming Code over GF(7) - sage: C.weight_distribution() == C.weight_distribution(algorithm="leon") # optional - gap_packages (Guava package) + sage: C.weight_distribution() == C.weight_distribution(algorithm="leon") True """ @@ -2001,14 +2003,17 @@ def zeta_polynomial(self, name="T"): sage: C = codes.HammingCode(GF(2), 3) sage: C.zeta_polynomial() 2/5*T^2 + 2/5*T + 1/5 - sage: C = codes.databases.best_linear_code_in_guava(6,3,GF(2)) # optional - gap_packages (Guava package) - sage: C.minimum_distance() # optional - gap_packages (Guava package) + + sage: C = codes.databases.best_linear_code_in_guava(6, 3, GF(2)) # optional - gap_package_guava + sage: C.minimum_distance() # optional - gap_package_guava 3 - sage: C.zeta_polynomial() # optional - gap_packages (Guava package) + sage: C.zeta_polynomial() # optional - gap_package_guava 2/5*T^2 + 2/5*T + 1/5 + sage: C = codes.HammingCode(GF(2), 4) sage: C.zeta_polynomial() 16/429*T^6 + 16/143*T^5 + 80/429*T^4 + 32/143*T^3 + 30/143*T^2 + 2/13*T + 1/13 + sage: F. = GF(4,"z") sage: MS = MatrixSpace(F, 3, 6) sage: G = MS([[1,0,0,1,z,z],[0,1,0,z,1,z],[0,0,1,z,z,1]]) @@ -2601,7 +2606,7 @@ class LinearCodeSyndromeDecoder(Decoder): We build a first syndrome decoder, and pick a ``maximum_error_weight`` smaller than both the covering radius and half the minimum distance:: - sage: D = C.decoder("Syndrome", maximum_error_weight = 1) + sage: D = C.decoder("Syndrome", maximum_error_weight=1) sage: D.decoder_type() {'always-succeed', 'bounded_distance', 'hard-decision'} sage: D.decoding_radius() @@ -2614,7 +2619,7 @@ class LinearCodeSyndromeDecoder(Decoder): ``maximum_error_weight`` is chosen to be bigger than half the minimum distance, but lower than the covering radius:: - sage: D = C.decoder("Syndrome", maximum_error_weight = 3) + sage: D = C.decoder("Syndrome", maximum_error_weight=3) sage: D.decoder_type() {'bounded_distance', 'hard-decision', 'might-error'} sage: D.decoding_radius() @@ -2628,10 +2633,10 @@ class LinearCodeSyndromeDecoder(Decoder): And now, we build a third syndrome decoder, whose ``maximum_error_weight`` is bigger than both the covering radius and half the minimum distance:: - sage: D = C.decoder("Syndrome", maximum_error_weight = 5) # long time - sage: D.decoder_type() # long time + sage: D = C.decoder("Syndrome", maximum_error_weight=5) # long time + sage: D.decoder_type() # long time {'complete', 'hard-decision', 'might-error'} - sage: D.decoding_radius() # long time + sage: D.decoding_radius() # long time 4 In that case, the decoder might still return an unexpected codeword, but diff --git a/src/sage/coding/linear_code_no_metric.py b/src/sage/coding/linear_code_no_metric.py index ce848a94f10..2ae0879fa74 100644 --- a/src/sage/coding/linear_code_no_metric.py +++ b/src/sage/coding/linear_code_no_metric.py @@ -1004,8 +1004,8 @@ def is_self_orthogonal(self): sage: C = codes.HammingCode(GF(2), 3) sage: C.is_self_orthogonal() False - sage: C = codes.QuasiQuadraticResidueCode(11) # optional - gap_packages (Guava package) - sage: C.is_self_orthogonal() # optional - gap_packages (Guava package) + sage: C = codes.QuasiQuadraticResidueCode(11) # optional - gap_package_guava + sage: C.is_self_orthogonal() # optional - gap_package_guava True """ return self.is_subcode(self.dual_code()) diff --git a/src/sage/combinat/designs/block_design.py b/src/sage/combinat/designs/block_design.py index 98774d77a42..057af5c969c 100644 --- a/src/sage/combinat/designs/block_design.py +++ b/src/sage/combinat/designs/block_design.py @@ -245,8 +245,8 @@ def ProjectiveGeometryDesign(n, d, F, algorithm=None, point_coordinates=True, ch Check that the constructor using gap also works:: - sage: BD = designs.ProjectiveGeometryDesign(2, 1, GF(2), algorithm="gap") # optional - gap_packages (design package) - sage: BD.is_t_design(return_parameters=True) # optional - gap_packages (design package) + sage: BD = designs.ProjectiveGeometryDesign(2, 1, GF(2), algorithm="gap") # optional - gap_package_design + sage: BD.is_t_design(return_parameters=True) # optional - gap_package_design (True, (2, 7, 3, 1)) """ try: @@ -934,12 +934,12 @@ def WittDesign(n): EXAMPLES:: - sage: BD = designs.WittDesign(9) # optional - gap_packages (design package) - sage: BD.is_t_design(return_parameters=True) # optional - gap_packages (design package) + sage: BD = designs.WittDesign(9) # optional - gap_package_design + sage: BD.is_t_design(return_parameters=True) # optional - gap_package_design (True, (2, 9, 3, 1)) - sage: BD # optional - gap_packages (design package) + sage: BD # optional - gap_package_design Incidence structure with 9 points and 12 blocks - sage: print(BD) # optional - gap_packages (design package) + sage: print(BD) # optional - gap_package_design Incidence structure with 9 points and 12 blocks """ libgap.load_package("design") diff --git a/src/sage/combinat/designs/database.py b/src/sage/combinat/designs/database.py index 3e095e619ee..ebefb6bc669 100644 --- a/src/sage/combinat/designs/database.py +++ b/src/sage/combinat/designs/database.py @@ -4464,9 +4464,9 @@ def HigmanSimsDesign(): EXAMPLES:: - sage: H = designs.HigmanSimsDesign(); H # optional - gap_packages + sage: H = designs.HigmanSimsDesign(); H # optional - gap_package_design Incidence structure with 176 points and 176 blocks - sage: H.is_t_design(return_parameters=1) # optional - gap_packages + sage: H.is_t_design(return_parameters=1) # optional - gap_package_design (True, (2, 176, 50, 14)) Make sure that the automorphism group of this designs is isomorphic to the @@ -4475,9 +4475,9 @@ def HigmanSimsDesign(): first of those permutation groups acts on 176 points, while the second acts on 100:: - sage: gH = H.automorphism_group() # optional - gap_packages - sage: gG = graphs.HigmanSimsGraph().automorphism_group() # optional - gap_packages - sage: gG.is_isomorphic(gG) # long time # optional - gap_packages + sage: gH = H.automorphism_group() # optional - gap_package_design + sage: gG = graphs.HigmanSimsGraph().automorphism_group() # optional - gap_package_design + sage: gG.is_isomorphic(gG) # long time, optional - gap_package_design True REFERENCE: diff --git a/src/sage/combinat/designs/design_catalog.py b/src/sage/combinat/designs/design_catalog.py index a9572e119c0..8bf7f14fd0b 100644 --- a/src/sage/combinat/designs/design_catalog.py +++ b/src/sage/combinat/designs/design_catalog.py @@ -4,7 +4,7 @@ This module gathers all designs that can be reached through ``designs.``. Example with the Witt design on 24 points:: - sage: designs.WittDesign(24) # optional - gap_packages + sage: designs.WittDesign(24) # optional - gap_package_design Incidence structure with 24 points and 759 blocks Or a Steiner Triple System on 19 points:: diff --git a/src/sage/combinat/designs/incidence_structures.py b/src/sage/combinat/designs/incidence_structures.py index 83927348b05..5252b3be769 100644 --- a/src/sage/combinat/designs/incidence_structures.py +++ b/src/sage/combinat/designs/incidence_structures.py @@ -1075,7 +1075,7 @@ def _libgap_(self): EXAMPLES:: sage: D = IncidenceStructure(4, [[0,2],[1,2,3],[2,3]]) - sage: D._libgap_() # optional - gap_packages + sage: D._libgap_() # optional - gap_package_design rec( blocks := [ [ 1, 3 ], [ 2, 3, 4 ], [ 3, 4 ] ], isBlockDesign := true, v := 4 ) """ @@ -1538,13 +1538,13 @@ def is_t_design(self, t=None, v=None, k=None, l=None, return_parameters=False): Some examples of Witt designs that need the gap database:: - sage: BD = designs.WittDesign(9) # optional - gap_packages - sage: BD.is_t_design(2,9,3,1) # optional - gap_packages + sage: BD = designs.WittDesign(9) # optional - gap_package_design + sage: BD.is_t_design(2,9,3,1) # optional - gap_package_design True - sage: W12 = designs.WittDesign(12) # optional - gap_packages - sage: W12.is_t_design(5,12,6,1) # optional - gap_packages + sage: W12 = designs.WittDesign(12) # optional - gap_package_design + sage: W12.is_t_design(5,12,6,1) # optional - gap_package_design True - sage: W12.is_t_design(4) # optional - gap_packages + sage: W12.is_t_design(4) # optional - gap_package_design True Further examples:: @@ -1797,12 +1797,12 @@ def dual(self, algorithm=None): Incidence structure with 4 points and 3 blocks sage: D.dual() # needs sage.modules Incidence structure with 3 points and 4 blocks - sage: print(D.dual(algorithm="gap")) # optional - gap_packages + sage: print(D.dual(algorithm="gap")) # optional - gap_package_design Incidence structure with 3 points and 4 blocks sage: blocks = [[0,1,2],[0,3,4],[0,5,6],[1,3,5],[1,4,6],[2,3,6],[2,4,5]] sage: BD = IncidenceStructure(7, blocks, name="FanoPlane"); BD Incidence structure with 7 points and 7 blocks - sage: print(BD.dual(algorithm="gap")) # optional - gap_packages + sage: print(BD.dual(algorithm="gap")) # optional - gap_package_design Incidence structure with 7 points and 7 blocks sage: BD.dual() # needs sage.modules Incidence structure with 7 points and 7 blocks diff --git a/src/sage/combinat/designs/twographs.py b/src/sage/combinat/designs/twographs.py index b36d23f0162..5c9a90afbcd 100644 --- a/src/sage/combinat/designs/twographs.py +++ b/src/sage/combinat/designs/twographs.py @@ -278,8 +278,8 @@ def twograph_descendant(G, v, name=None): one of s.r.g.'s from the :mod:`database `:: sage: from sage.combinat.designs.twographs import twograph_descendant - sage: A = graphs.strongly_regular_graph(280,135,70) # optional - gap_packages internet - sage: twograph_descendant(A, 0).is_strongly_regular(parameters=True) # optional - gap_packages internet + sage: A = graphs.strongly_regular_graph(280,135,70) # optional - gap_package_design internet + sage: twograph_descendant(A, 0).is_strongly_regular(parameters=True) # optional - gap_package_design internet (279, 150, 85, 75) TESTS:: diff --git a/src/sage/combinat/posets/posets.py b/src/sage/combinat/posets/posets.py index d37e9676d7c..c21bcc899e1 100644 --- a/src/sage/combinat/posets/posets.py +++ b/src/sage/combinat/posets/posets.py @@ -877,7 +877,7 @@ class FinitePoset(UniqueRepresentation, Parent): Conversion to some other software is possible:: sage: P = posets.TamariLattice(3) - sage: libgap(P) # optional - gap_packages + sage: libgap(P) # optional - gap_package_qpa sage: P = Poset({1:[2],2:[]}) @@ -8828,11 +8828,11 @@ def _libgap_(self): EXAMPLES:: sage: P = posets.TamariLattice(3) - sage: libgap(P) # optional - gap_packages + sage: libgap(P) # optional - gap_package_qpa - sage: A = libgap(GF(2)).PosetAlgebra(P); A # optional - gap_packages + sage: A = libgap(GF(2)).PosetAlgebra(P); A # optional - gap_package_qpa ]/]>, (1 generator)>> - sage: A.Dimension() # optional - gap_packages + sage: A.Dimension() # optional - gap_package_qpa 13 """ from sage.libs.gap.libgap import libgap diff --git a/src/sage/features/gap.py b/src/sage/features/gap.py index 17aabcdca54..a989dcfc1fb 100644 --- a/src/sage/features/gap.py +++ b/src/sage/features/gap.py @@ -68,4 +68,11 @@ def _is_present(self): def all_features(): - return [] + return [GapPackage("atlasrep", spkg="gap_packages"), + GapPackage("design", spkg="gap_packages"), + GapPackage("grape", spkg="gap_packages"), + GapPackage("guava", spkg="gap_packages"), + GapPackage("hap", spkg="gap_packages"), + GapPackage("polycyclic", spkg="gap_packages"), + GapPackage("qpa", spkg="gap_packages"), + GapPackage("quagroup", spkg="gap_packages")] diff --git a/src/sage/graphs/generators/classical_geometries.py b/src/sage/graphs/generators/classical_geometries.py index a770ecdbd28..bf1aa04e933 100644 --- a/src/sage/graphs/generators/classical_geometries.py +++ b/src/sage/graphs/generators/classical_geometries.py @@ -1284,20 +1284,20 @@ def CossidentePenttilaGraph(q): For `q=3` one gets Sims-Gewirtz graph. :: - sage: G = graphs.CossidentePenttilaGraph(3) # optional - gap_packages (grape) - sage: G.is_strongly_regular(parameters=True) # optional - gap_packages (grape) + sage: G = graphs.CossidentePenttilaGraph(3) # optional - gap_package_grape + sage: G.is_strongly_regular(parameters=True) # optional - gap_package_grape (56, 10, 0, 2) For `q>3` one gets new graphs. :: - sage: G = graphs.CossidentePenttilaGraph(5) # optional - gap_packages (grape) - sage: G.is_strongly_regular(parameters=True) # optional - gap_packages (grape) + sage: G = graphs.CossidentePenttilaGraph(5) # optional - gap_package_grape + sage: G.is_strongly_regular(parameters=True) # optional - gap_package_grape (378, 52, 1, 8) TESTS:: - sage: G = graphs.CossidentePenttilaGraph(7) # optional - gap_packages (grape) # long time - sage: G.is_strongly_regular(parameters=True) # optional - gap_packages (grape) # long time + sage: G = graphs.CossidentePenttilaGraph(7) # optional - gap_package_grape, long time + sage: G.is_strongly_regular(parameters=True) # optional - gap_package_grape, long time (1376, 150, 2, 18) sage: graphs.CossidentePenttilaGraph(2) Traceback (most recent call last): diff --git a/src/sage/graphs/generators/distance_regular.pyx b/src/sage/graphs/generators/distance_regular.pyx index 15bd3594185..644e9158612 100644 --- a/src/sage/graphs/generators/distance_regular.pyx +++ b/src/sage/graphs/generators/distance_regular.pyx @@ -103,8 +103,8 @@ def locally_GQ42_distance_transitive_graph(): EXAMPLES:: - sage: G = graphs.locally_GQ42_distance_transitive_graph() # optional - internet gap_packages - sage: G.is_distance_regular(True) # optional - internet gap_packages + sage: G = graphs.locally_GQ42_distance_transitive_graph() # optional - internet gap_package_atlasrep + sage: G.is_distance_regular(True) # optional - internet gap_package_atlasrep ([45, 32, 12, 1, None], [None, 1, 6, 32, 45]) REFERENCES: @@ -217,8 +217,8 @@ def graph_3O73(): EXAMPLES:: - sage: G = graphs.graph_3O73() # optional - internet gap_packages - sage: G.is_distance_regular(True) # optional - internet gap_packages + sage: G = graphs.graph_3O73() # optional - internet gap_package_atlasrep + sage: G.is_distance_regular(True) # optional - internet gap_package_atlasrep ([117, 80, 24, 1, None], [None, 1, 12, 80, 117]) REFERENCES: @@ -272,8 +272,8 @@ def J2Graph(): EXAMPLES:: - sage: G = graphs.J2Graph() # optional - internet gap_packages - sage: G.is_distance_regular(True) # optional - internet gap_packages + sage: G = graphs.J2Graph() # optional - internet gap_package_atlasrep + sage: G.is_distance_regular(True) # optional - internet gap_package_atlasrep ([10, 8, 8, 2, None], [None, 1, 1, 4, 5]) REFERENCES: @@ -295,8 +295,8 @@ def IvanovIvanovFaradjevGraph(): EXAMPLES:: - sage: G = graphs.IvanovIvanovFaradjevGraph() # optional - internet gap_packages - sage: G.is_distance_regular(True) # optional - internet gap_packages + sage: G = graphs.IvanovIvanovFaradjevGraph() # optional - internet gap_package_atlasrep + sage: G.is_distance_regular(True) # optional - internet gap_package_atlasrep ([7, 6, 4, 4, 4, 1, 1, 1, None], [None, 1, 1, 1, 2, 4, 4, 6, 7]) REFERENCES: @@ -1310,7 +1310,7 @@ def GeneralisedDodecagonGraph(const int s, const int t): EXAMPLES:: - sage: # optional - gap_packages internet + sage: # optional - gap_package_atlasrep internet sage: G = graphs.GeneralisedDodecagonGraph(1, 5) sage: G.is_distance_regular(True) ([6, 5, 5, 5, 5, 5, None], [None, 1, 1, 1, 1, 1, 6]) @@ -1335,7 +1335,7 @@ def GeneralisedDodecagonGraph(const int s, const int t): Test all graphs of order `(1, q)`:: - sage: # optional - gap_packages internet + sage: # optional - gap_package_atlasrep internet sage: G = graphs.GeneralisedDodecagonGraph(1, 4) sage: G.is_distance_regular(True) ([5, 4, 4, 4, 4, 4, None], [None, 1, 1, 1, 1, 1, 5]) @@ -1351,7 +1351,7 @@ def GeneralisedDodecagonGraph(const int s, const int t): Now test all graphs of order `(q, 1)`:: - sage: # optional - gap_packages internet + sage: # optional - gap_package_atlasrep internet sage: G = graphs.GeneralisedDodecagonGraph(4, 1) sage: G.is_distance_regular(True) ([8, 4, 4, 4, 4, 4, None], [None, 1, 1, 1, 1, 1, 2]) @@ -1422,8 +1422,8 @@ def GeneralisedOctagonGraph(const int s, const int t): sage: G = graphs.GeneralisedOctagonGraph(1, 4) sage: G.is_distance_regular(True) ([5, 4, 4, 4, None], [None, 1, 1, 1, 5]) - sage: G = graphs.GeneralisedOctagonGraph(2, 4) # optional - gap_packages internet - sage: G.is_distance_regular(True) # optional - gap_packages internet + sage: G = graphs.GeneralisedOctagonGraph(2, 4) # optional - gap_package_atlasrep internet + sage: G.is_distance_regular(True) # optional - gap_package_atlasrep internet ([10, 8, 8, 8, None], [None, 1, 1, 1, 5]) sage: G = graphs.GeneralisedOctagonGraph(5, 1) sage: G.is_distance_regular(True) @@ -1530,8 +1530,8 @@ def GeneralisedHexagonGraph(const int s, const int t): EXAMPLES:: sage: # needs sage.libs.gap - sage: G = graphs.GeneralisedHexagonGraph(5, 5) # optional - gap_packages internet - sage: G.is_distance_regular(True) # optional - gap_packages internet + sage: G = graphs.GeneralisedHexagonGraph(5, 5) # optional - gap_package_atlasrep internet + sage: G.is_distance_regular(True) # optional - gap_package_atlasrep internet ([30, 25, 25, None], [None, 1, 1, 6]) sage: G = graphs.GeneralisedHexagonGraph(7, 1) sage: G.is_distance_regular(True) @@ -1552,7 +1552,7 @@ def GeneralisedHexagonGraph(const int s, const int t): TESTS:: - sage: # optional - gap_packages internet + sage: # optional - gap_package_atlasrep internet sage: G = graphs.GeneralisedHexagonGraph(4, 4) sage: G.is_distance_regular(True) ([20, 16, 16, None], [None, 1, 1, 5]) @@ -1761,9 +1761,9 @@ def _line_graph_generalised_polygon(H): sage: H = _line_graph_generalised_polygon(G) sage: H.is_distance_regular(True) ([16, 8, 8, None], [None, 1, 1, 2]) - sage: G = graphs.GeneralisedHexagonGraph(3, 3) # optional - gap_packages internet - sage: H = _line_graph_generalised_polygon(G) # optional - gap_packages internet - sage: G.is_isomorphic(H) # optional - gap_packages internet + sage: G = graphs.GeneralisedHexagonGraph(3, 3) # optional - gap_package_atlasrep internet + sage: H = _line_graph_generalised_polygon(G) # optional - gap_package_atlasrep internet + sage: G.is_isomorphic(H) # optional - gap_package_atlasrep internet True REFERENCES: @@ -1908,7 +1908,7 @@ def is_classical_parameters_graph(list array): ....: is_classical_parameters_graph sage: is_classical_parameters_graph([68, 64, 1, 17]) # srg not drg # needs sage.combinat False - sage: G = graphs.GossetGraph() # sporadic classical parameters graph + sage: G = graphs.GossetGraph() # sporadic classical parameters graph sage: G.is_distance_regular(True) ([27, 10, 1, None], [None, 1, 10, 27]) sage: is_classical_parameters_graph([27, 10, 1, 1, 10, 27]) # needs sage.combinat @@ -2145,7 +2145,7 @@ def graph_with_classical_parameters(int d, int b, alpha_in, beta_in, int gamma): Symplectic Dual Polar Graph DSp(6, 2): Graph on 135 vertices sage: graph_with_classical_parameters(3, 2, 2, 14, 7) # long time Grassmann graph J_2(6, 3): Graph on 1395 vertices - sage: graph_with_classical_parameters(3, -2, -2, 6, 6) # optional - gap_packages internet + sage: graph_with_classical_parameters(3, -2, -2, 6, 6) # optional - gap_package_atlasrep internet Generalised hexagon of order (2, 8): Graph on 819 vertices """ from sage.rings.rational import Rational @@ -2728,7 +2728,7 @@ def distance_regular_graph(list arr, existence=False, check=True): sage: graphs.distance_regular_graph([3, 2, 2, 1, 2, 1, 1, 2, 2, 3], ....: existence=True) False - sage: graphs.distance_regular_graph([18, 16, 16, 1, 1, 9]) # optional - internet gap_packages + sage: graphs.distance_regular_graph([18, 16, 16, 1, 1, 9]) # optional - internet gap_package_atlasrep Generalised hexagon of order (2, 8): Graph on 819 vertices sage: # needs sage.combinat diff --git a/src/sage/graphs/generators/smallgraphs.py b/src/sage/graphs/generators/smallgraphs.py index e58248f05c8..bb73e4c487e 100644 --- a/src/sage/graphs/generators/smallgraphs.py +++ b/src/sage/graphs/generators/smallgraphs.py @@ -3394,9 +3394,9 @@ def LocalMcLaughlinGraph(): EXAMPLES:: - sage: g = graphs.LocalMcLaughlinGraph(); g # long time # optional - gap_packages + sage: g = graphs.LocalMcLaughlinGraph(); g # long time, optional - gap_package_design Local McLaughlin Graph: Graph on 162 vertices - sage: g.is_strongly_regular(parameters=True) # long time # optional - gap_packages + sage: g.is_strongly_regular(parameters=True) # long time, optional - gap_package_design (162, 56, 10, 24) """ g = McLaughlinGraph() @@ -3677,10 +3677,10 @@ def McLaughlinGraph(): EXAMPLES:: - sage: g = graphs.McLaughlinGraph() # optional gap_packages - sage: g.is_strongly_regular(parameters=True) # optional gap_packages + sage: g = graphs.McLaughlinGraph() # optional - gap_package_design + sage: g.is_strongly_regular(parameters=True) # optional - gap_package_design (275, 112, 30, 56) - sage: set(g.spectrum()) == {112, 2, -28} # optional gap_packages + sage: set(g.spectrum()) == {112, 2, -28} # optional - gap_package_design True """ from sage.combinat.designs.block_design import WittDesign @@ -5129,8 +5129,8 @@ def U42Graph216(): EXAMPLES:: - sage: G=graphs.U42Graph216() # optional - gap_packages (grape) - sage: G.is_strongly_regular(parameters=True) # optional - gap_packages (grape) + sage: G=graphs.U42Graph216() # optional - gap_package_grape + sage: G.is_strongly_regular(parameters=True) # optional - gap_package_grape (216, 40, 4, 8) """ from sage.libs.gap.libgap import libgap @@ -5176,8 +5176,8 @@ def U42Graph540(): EXAMPLES:: - sage: G=graphs.U42Graph540() # optional - gap_packages (grape) - sage: G.is_strongly_regular(parameters=True) # optional - gap_packages (grape) + sage: G = graphs.U42Graph540() # optional - gap_package_grape + sage: G.is_strongly_regular(parameters=True) # optional - gap_package_grape (540, 187, 58, 68) """ from sage.libs.gap.libgap import libgap diff --git a/src/sage/graphs/strongly_regular_db.pyx b/src/sage/graphs/strongly_regular_db.pyx index 338d469e383..ae7eee6f4ea 100644 --- a/src/sage/graphs/strongly_regular_db.pyx +++ b/src/sage/graphs/strongly_regular_db.pyx @@ -915,9 +915,9 @@ def is_cossidente_penttila(int v, int k, int l, int mu): sage: from sage.graphs.strongly_regular_db import is_cossidente_penttila sage: t = is_cossidente_penttila(378, 52, 1, 8); t # needs sage.libs.pari (, 5) - sage: g = t[0](*t[1:]); g # optional - gap_packages # needs sage.libs.pari + sage: g = t[0](*t[1:]); g # optional - gap_package_design, needs sage.libs.pari CossidentePenttila(5): Graph on 378 vertices - sage: g.is_strongly_regular(parameters=True) # optional - gap_packages, needs sage.libs.pari + sage: g.is_strongly_regular(parameters=True) # optional - gap_package_design, needs sage.libs.pari (378, 52, 1, 8) TESTS:: @@ -1507,7 +1507,7 @@ def is_twograph_descendant_of_srg(int v, int k0, int l, int mu): sage: graphs.strongly_regular_graph(279, 150, 85, 75, existence=True) # needs sage.combinat True - sage: graphs.strongly_regular_graph(279, 150, 85, 75).is_strongly_regular(parameters=True) # optional - gap_packages internet + sage: graphs.strongly_regular_graph(279, 150, 85, 75).is_strongly_regular(parameters=True) # optional - gap_package_design internet (279, 150, 85, 75) """ cdef int b, k, s @@ -1654,7 +1654,7 @@ def is_switch_OA_srg(int v, int k, int l, int mu): EXAMPLES:: - sage: graphs.strongly_regular_graph(170, 78, 35, 36) # indirect doctest # needs sage.combinat sage.modules + sage: graphs.strongly_regular_graph(170, 78, 35, 36) # indirect doctest # needs sage.combinat sage.modules Graph on 170 vertices TESTS:: @@ -1922,8 +1922,8 @@ def SRG_100_44_18_20(): EXAMPLES:: sage: from sage.graphs.strongly_regular_db import SRG_100_44_18_20 - sage: G = SRG_100_44_18_20() # long time - sage: G.is_strongly_regular(parameters=True) # long time + sage: G = SRG_100_44_18_20() # long time + sage: G.is_strongly_regular(parameters=True) # long time (100, 44, 18, 20) """ L = ['100', '110', '130', '140', '200', '230', '240', '300', '310', '320', @@ -1944,8 +1944,8 @@ def SRG_100_45_20_20(): EXAMPLES:: sage: from sage.graphs.strongly_regular_db import SRG_100_45_20_20 - sage: G = SRG_100_45_20_20() # long time - sage: G.is_strongly_regular(parameters=True) # long time + sage: G = SRG_100_45_20_20() # long time + sage: G.is_strongly_regular(parameters=True) # long time (100, 45, 20, 20) """ L = ['120', '140', '200', '210', '201', '401', '411', '321', '002', '012', @@ -1998,8 +1998,8 @@ def SRG_120_77_52_44(): EXAMPLES:: sage: from sage.graphs.strongly_regular_db import SRG_120_77_52_44 - sage: G = SRG_120_77_52_44() # optional - gap_packages - sage: G.is_strongly_regular(parameters=True) # optional - gap_packages + sage: G = SRG_120_77_52_44() # optional - gap_package_design + sage: G.is_strongly_regular(parameters=True) # optional - gap_package_design (120, 77, 52, 44) """ from sage.combinat.designs.block_design import WittDesign @@ -2056,8 +2056,8 @@ def SRG_176_49_12_14(): EXAMPLES:: sage: from sage.graphs.strongly_regular_db import SRG_176_49_12_14 - sage: G = SRG_176_49_12_14() # optional - gap_packages # long time - sage: G.is_strongly_regular(parameters=True) # optional - gap_packages # long time + sage: G = SRG_176_49_12_14() # long time, optional - gap_package_design + sage: G.is_strongly_regular(parameters=True) # long time, optional - gap_package_design (176, 49, 12, 14) """ from sage.combinat.designs.database import HigmanSimsDesign @@ -2093,8 +2093,8 @@ def SRG_176_105_68_54(): EXAMPLES:: sage: from sage.graphs.strongly_regular_db import SRG_176_105_68_54 - sage: G = SRG_176_105_68_54() # optional - gap_packages - sage: G.is_strongly_regular(parameters=True) # optional - gap_packages + sage: G = SRG_176_105_68_54() # optional - gap_package_design + sage: G.is_strongly_regular(parameters=True) # optional - gap_package_design (176, 105, 68, 54) """ from sage.combinat.designs.block_design import WittDesign @@ -2191,8 +2191,8 @@ def SRG_253_140_87_65(): EXAMPLES:: sage: from sage.graphs.strongly_regular_db import SRG_253_140_87_65 - sage: G = SRG_253_140_87_65() # optional - gap_packages - sage: G.is_strongly_regular(parameters=True) # optional - gap_packages + sage: G = SRG_253_140_87_65() # optional - gap_package_design + sage: G.is_strongly_regular(parameters=True) # optional - gap_package_design (253, 140, 87, 65) """ from sage.combinat.designs.block_design import WittDesign @@ -2274,8 +2274,8 @@ def SRG_276_140_58_84(): EXAMPLES:: sage: from sage.graphs.strongly_regular_db import SRG_276_140_58_84 - sage: g=SRG_276_140_58_84() # long time # optional - gap_packages - sage: g.is_strongly_regular(parameters=True) # long time # optional - gap_packages + sage: g = SRG_276_140_58_84() # long time, optional - gap_package_design + sage: g.is_strongly_regular(parameters=True) # long time, optional - gap_package_design (276, 140, 58, 84) """ from sage.graphs.generators.smallgraphs import McLaughlinGraph @@ -2303,8 +2303,8 @@ def SRG_280_135_70_60(): EXAMPLES:: sage: from sage.graphs.strongly_regular_db import SRG_280_135_70_60 - sage: g=SRG_280_135_70_60() # long time # optional - internet - sage: g.is_strongly_regular(parameters=True) # long time # optional - internet + sage: g=SRG_280_135_70_60() # long time, optional - internet + sage: g.is_strongly_regular(parameters=True) # long time, optional - internet (280, 135, 70, 60) """ from sage.libs.gap.libgap import libgap @@ -2411,8 +2411,8 @@ def SRG_416_100_36_20(): EXAMPLES:: sage: from sage.graphs.strongly_regular_db import SRG_416_100_36_20 - sage: g = SRG_416_100_36_20() # long time # optional - internet - sage: g.is_strongly_regular(parameters=True) # long time # optional - internet + sage: g = SRG_416_100_36_20() # long time, optional - internet + sage: g.is_strongly_regular(parameters=True) # long time, optional - internet (416, 100, 36, 20) """ from sage.libs.gap.libgap import libgap @@ -2435,8 +2435,8 @@ def SRG_560_208_72_80(): EXAMPLES:: sage: from sage.graphs.strongly_regular_db import SRG_560_208_72_80 - sage: g = SRG_560_208_72_80() # not tested (~2s) - sage: g.is_strongly_regular(parameters=True) # not tested (~2s) + sage: g = SRG_560_208_72_80() # not tested (~2s) + sage: g.is_strongly_regular(parameters=True) # not tested (~2s) (560, 208, 72, 80) """ from sage.libs.gap.libgap import libgap @@ -2675,7 +2675,7 @@ def SRG_1288_792_476_504(): EXAMPLES:: sage: from sage.graphs.strongly_regular_db import SRG_1288_792_476_504 - sage: G = SRG_1288_792_476_504() # long time # needs sage.rings.finite_rings + sage: G = SRG_1288_792_476_504() # long time # needs sage.rings.finite_rings sage: G.is_strongly_regular(parameters=True) # long time # needs sage.rings.finite_rings (1288, 792, 476, 504) """ @@ -2884,7 +2884,7 @@ def strongly_regular_graph(int v, int k, int l, int mu=-1, bint existence=False, Check that all of our constructions are correct - you will need gap_packages spkg installed:: sage: from sage.graphs.strongly_regular_db import apparently_feasible_parameters - sage: for p in sorted(apparently_feasible_parameters(1300)): # not tested + sage: for p in sorted(apparently_feasible_parameters(1300)): # not tested, optional gap_package_design ....: if graphs.strongly_regular_graph(*p,existence=True) is True: ....: try: ....: _ = graphs.strongly_regular_graph(*p) @@ -3124,7 +3124,7 @@ def _build_small_srg_database(): sage: graphs.strongly_regular_graph(81, 50, 31, 30) # needs sage.libs.pari complement(two-intersection set in PG(4,3)): Graph on 81 vertices - sage: graphs.strongly_regular_graph(243, 220, 199, 200) # long time, needs sage.rings.finite_rings + sage: graphs.strongly_regular_graph(243, 220, 199, 200) # long time, needs sage.rings.finite_rings two-weight code: [55, 5] linear code over GF(3): Graph on 243 vertices sage: graphs.strongly_regular_graph(256, 153, 92, 90) # needs sage.combinat complement(two-intersection set in PG(4,4)): Graph on 256 vertices @@ -3132,40 +3132,40 @@ def _build_small_srg_database(): complement(two-intersection set in PG(8,2)): Graph on 256 vertices sage: graphs.strongly_regular_graph(256, 187, 138, 132) # needs sage.combinat complement(two-intersection set in PG(8,2)): Graph on 256 vertices - sage: graphs.strongly_regular_graph(512, 73, 12, 10) # not tested (too long), needs sage.rings.finite_rings + sage: graphs.strongly_regular_graph(512, 73, 12, 10) # not tested (too long), needs sage.rings.finite_rings two-weight code: [219, 9] linear code over GF(2): Graph on 512 vertices - sage: graphs.strongly_regular_graph(512, 219, 106, 84) # long time + sage: graphs.strongly_regular_graph(512, 219, 106, 84) # long time two-intersection set in PG(9,2): Graph on 512 vertices - sage: graphs.strongly_regular_graph(512, 315, 202, 180) # not tested (too long), needs sage.rings.finite_rings + sage: graphs.strongly_regular_graph(512, 315, 202, 180) # not tested (too long), needs sage.rings.finite_rings two-weight code: [70, 9] linear code over GF(2): Graph on 512 vertices - sage: graphs.strongly_regular_graph(625, 364, 213, 210) # long time + sage: graphs.strongly_regular_graph(625, 364, 213, 210) # long time complement(two-intersection set in PG(4,5)): Graph on 625 vertices - sage: graphs.strongly_regular_graph(625, 416, 279, 272) # long time + sage: graphs.strongly_regular_graph(625, 416, 279, 272) # long time complement(two-intersection set in PG(4,5)): Graph on 625 vertices - sage: graphs.strongly_regular_graph(625, 468, 353, 342) # long time + sage: graphs.strongly_regular_graph(625, 468, 353, 342) # long time complement(two-intersection set in PG(4,5)): Graph on 625 vertices - sage: graphs.strongly_regular_graph(729, 336, 153,156) # not tested (too long) + sage: graphs.strongly_regular_graph(729, 336, 153,156) # not tested (too long) two-intersection set in PG(6,3): Graph on 729 vertices - sage: graphs.strongly_regular_graph(729, 420, 243, 240) # not tested (too long) + sage: graphs.strongly_regular_graph(729, 420, 243, 240) # not tested (too long) complement(two-intersection set in PG(6,3)): Graph on 729 vertices - sage: graphs.strongly_regular_graph(729, 448, 277, 272) # not tested (too long) + sage: graphs.strongly_regular_graph(729, 448, 277, 272) # not tested (too long) complement(two-intersection set in PG(6,3)): Graph on 729 vertices - sage: graphs.strongly_regular_graph(729, 476, 313, 306) # not tested (too long) + sage: graphs.strongly_regular_graph(729, 476, 313, 306) # not tested (too long) complement(two-intersection set in PG(6,3)): Graph on 729 vertices - sage: graphs.strongly_regular_graph(729, 532, 391, 380) # not tested (too long) + sage: graphs.strongly_regular_graph(729, 532, 391, 380) # not tested (too long) complement(two-intersection set in PG(6,3)): Graph on 729 vertices - sage: graphs.strongly_regular_graph(729, 560, 433, 420) # not tested (too long) + sage: graphs.strongly_regular_graph(729, 560, 433, 420) # not tested (too long) complement(two-intersection set in PG(6,3)): Graph on 729 vertices Graph on 729 vertices - sage: graphs.strongly_regular_graph(729, 616, 523, 506) # not tested (too long) + sage: graphs.strongly_regular_graph(729, 616, 523, 506) # not tested (too long) complement(two-intersection set in PG(6,3)): Graph on 729 vertices - sage: graphs.strongly_regular_graph(1024, 363, 122, 132)# not tested (too long) + sage: graphs.strongly_regular_graph(1024, 363, 122, 132) # not tested (too long) two-intersection set in PG(5,4): Graph on 1024 vertices - sage: graphs.strongly_regular_graph(1024, 396, 148, 156)# not tested (too long) + sage: graphs.strongly_regular_graph(1024, 396, 148, 156) # not tested (too long) two-intersection set in PG(5,4): Graph on 1024 vertices - sage: graphs.strongly_regular_graph(1024, 429, 176, 182)# not tested (too long) + sage: graphs.strongly_regular_graph(1024, 429, 176, 182) # not tested (too long) two-intersection set in PG(5,4): Graph on 1024 vertices - sage: graphs.strongly_regular_graph(1024, 825, 668, 650)# not tested (too long) + sage: graphs.strongly_regular_graph(1024, 825, 668, 650) # not tested (too long) complement(two-intersection set in PG(10,2)): Graph on 1024 vertices """ from sage.graphs.generators.smallgraphs import McLaughlinGraph diff --git a/src/sage/groups/abelian_gps/abelian_aut.py b/src/sage/groups/abelian_gps/abelian_aut.py index bf54b8a0ad9..86051c72b28 100644 --- a/src/sage/groups/abelian_gps/abelian_aut.py +++ b/src/sage/groups/abelian_gps/abelian_aut.py @@ -55,8 +55,8 @@ Only automorphism groups of finite abelian groups are supported:: - sage: G = AbelianGroupGap([0,2]) # optional gap_packages - sage: autG = G.aut() # optional gap_packages + sage: G = AbelianGroupGap([0,2]) # optional - gap_package_polycyclic + sage: autG = G.aut() # optional - gap_package_polycyclic Traceback (most recent call last): ... ValueError: only finite abelian groups are supported diff --git a/src/sage/groups/abelian_gps/abelian_group.py b/src/sage/groups/abelian_gps/abelian_group.py index 41b0e2c9eca..efa54bac7d1 100644 --- a/src/sage/groups/abelian_gps/abelian_group.py +++ b/src/sage/groups/abelian_gps/abelian_group.py @@ -856,7 +856,7 @@ def _libgap_(self): Requires the optional ``gap_packages`` for infinite groups:: sage: G = AbelianGroup(3, [0,3,4], names="abc") - sage: libgap(G) # optional - gap_packages + sage: libgap(G) # optional - gap_package_polycyclic Pcp-group with orders [ 0, 3, 4 ] """ from sage.libs.gap.libgap import libgap @@ -885,7 +885,7 @@ def _gap_init_(self): sage: G = AbelianGroup(3,[0,3,4], names="abc"); G Multiplicative Abelian group isomorphic to Z x C3 x C4 - sage: G._gap_init_() # optional - gap_packages + sage: G._gap_init_() # optional - gap_package_polycyclic 'AbelianPcpGroup([0, 3, 4])' """ if self.is_finite(): diff --git a/src/sage/groups/abelian_gps/abelian_group_gap.py b/src/sage/groups/abelian_gps/abelian_group_gap.py index fc59eba7941..04ebb9d3ed1 100644 --- a/src/sage/groups/abelian_gps/abelian_group_gap.py +++ b/src/sage/groups/abelian_gps/abelian_group_gap.py @@ -11,7 +11,7 @@ For infinite abelian groups we use the GAP package ``Polycyclic``:: - sage: AbelianGroupGap([3,0]) # optional - gap_packages + sage: AbelianGroupGap([3,0]) # optional - gap_package_polycyclic Abelian group with gap, generator orders (3, 0) AUTHORS: @@ -183,9 +183,9 @@ def order(self): sage: g = G.gens()[0] sage: g.order() 4 - sage: G = AbelianGroupGap([0]) # optional - gap_packages - sage: g = G.gens()[0] # optional - gap_packages - sage: g.order() # optional - gap_packages + sage: G = AbelianGroupGap([0]) # optional - gap_package_polycyclic + sage: g = G.gens()[0] # optional - gap_package_polycyclic + sage: g.order() # optional - gap_package_polycyclic +Infinity """ return self.gap().Order().sage() @@ -197,8 +197,8 @@ class AbelianGroupElement_polycyclic(AbelianGroupElement_gap): TESTS:: sage: from sage.groups.abelian_gps.abelian_group_gap import AbelianGroupGap - sage: G = AbelianGroupGap([4,7,0]) # optional - gap_packages - sage: TestSuite(G.an_element()).run() # optional - gap_packages + sage: G = AbelianGroupGap([4,7,0]) # optional - gap_package_polycyclic + sage: TestSuite(G.an_element()).run() # optional - gap_package_polycyclic """ def exponents(self): r""" @@ -210,18 +210,20 @@ def exponents(self): EXAMPLES:: + sage: # optional - gap_package_polycyclic sage: from sage.groups.abelian_gps.abelian_group_gap import AbelianGroupGap - sage: G = AbelianGroupGap([4,7,0]) # optional - gap_packages - sage: gens = G.gens() # optional - gap_packages - sage: g = gens[0]^2 * gens[1]^4 * gens[2]^8 # optional - gap_packages - sage: g.exponents() # optional - gap_packages + sage: G = AbelianGroupGap([4,7,0]) + sage: gens = G.gens() + sage: g = gens[0]^2 * gens[1]^4 * gens[2]^8 + sage: g.exponents() (2, 4, 8) Efficiently handles very large groups:: - sage: G = AbelianGroupGap([2^30,5^30,0]) # optional - gap_packages - sage: f1, f2, f3 = G.gens() # optional - gap_packages - sage: (f1^12345*f2^123456789).exponents() # optional - gap_packages + sage: # optional - gap_package_polycyclic + sage: G = AbelianGroupGap([2^30,5^30,0]) + sage: f1, f2, f3 = G.gens() + sage: (f1^12345*f2^123456789).exponents() (12345, 123456789, 0) """ return tuple(self.gap().Exponents().sage()) @@ -613,12 +615,14 @@ def subgroup(self, gens): sage: s = S.an_element() sage: g * s f2^2*f3*f5 - sage: G = AbelianGroupGap([3,4,0,2]) # optional - gap_packages - sage: gen = G.gens()[:2] # optional - gap_packages - sage: S = G.subgroup(gen) # optional - gap_packages - sage: g = G.an_element() # optional - gap_packages - sage: s = S.an_element() # optional - gap_packages - sage: g * s # optional - gap_packages + + sage: # optional - gap_package_polycyclic + sage: G = AbelianGroupGap([3,4,0,2]) + sage: gen = G.gens()[:2] + sage: S = G.subgroup(gen) + sage: g = G.an_element() + sage: s = S.an_element() + sage: g * s g1^2*g2^2*g3*g4 TESTS:: @@ -650,7 +654,7 @@ class AbelianGroupGap(AbelianGroup_gap): Abelian group with gap, generator orders (3, 6) sage: AbelianGroupGap([3,6,5]) Abelian group with gap, generator orders (3, 6, 5) - sage: AbelianGroupGap([3,6,0]) # optional - gap_packages + sage: AbelianGroupGap([3,6,0]) # optional - gap_package_polycyclic Abelian group with gap, generator orders (3, 6, 0) .. WARNING:: @@ -777,13 +781,14 @@ def __init__(self, ambient, gens): Check that we are in the correct category:: - sage: G = AbelianGroupGap([2,3,0]) # optional - gap_packages - sage: g = G.gens() # optional - gap_packages - sage: H1 = G.subgroup([g[0],g[1]]) # optional - gap_packages - sage: H1 in Groups().Finite() # optional - gap_packages + sage: # optional - gap_package_polycyclic + sage: G = AbelianGroupGap([2,3,0]) + sage: g = G.gens() + sage: H1 = G.subgroup([g[0],g[1]]) + sage: H1 in Groups().Finite() True - sage: H2 = G.subgroup([g[0],g[2]]) # optional - gap_packages - sage: H2 in Groups().Infinite() # optional - gap_packages + sage: H2 = G.subgroup([g[0],g[2]]) + sage: H2 in Groups().Infinite() True """ gens_gap = tuple([g.gap() for g in gens]) diff --git a/src/sage/groups/perm_gps/permgroup.py b/src/sage/groups/perm_gps/permgroup.py index 965076c0a5f..6e59f4f4b84 100644 --- a/src/sage/groups/perm_gps/permgroup.py +++ b/src/sage/groups/perm_gps/permgroup.py @@ -164,7 +164,7 @@ def load_hap(): EXAMPLES:: - sage: sage.groups.perm_gps.permgroup.load_hap() # optional - gap_packages + sage: sage.groups.perm_gps.permgroup.load_hap() # optional - gap_package_hap """ from sage.features.gap import GapPackage GapPackage("hap", spkg="gap_packages").require() @@ -179,16 +179,17 @@ def hap_decorator(f): EXAMPLES:: + sage: # optional - gap_package_hap sage: from sage.groups.perm_gps.permgroup import hap_decorator sage: def foo(self, n, p=0): print("Done") sage: foo = hap_decorator(foo) - sage: foo(None, 3) #optional - gap_packages + sage: foo(None, 3) Done - sage: foo(None, 3, 0) # optional - gap_packages + sage: foo(None, 3, 0) Done - sage: foo(None, 3, 5) # optional - gap_packages + sage: foo(None, 3, 5) Done - sage: foo(None, 3, 4) #optional - gap_packages + sage: foo(None, 3, 4) Traceback (most recent call last): ... ValueError: p must be 0 or prime @@ -3186,16 +3187,16 @@ def cohomology(self, n, p=0): EXAMPLES:: sage: G = SymmetricGroup(4) - sage: G.cohomology(1,2) # optional - gap_packages + sage: G.cohomology(1,2) # optional - gap_package_hap Multiplicative Abelian group isomorphic to C2 sage: G = SymmetricGroup(3) - sage: G.cohomology(5) # optional - gap_packages + sage: G.cohomology(5) # optional - gap_package_hap Trivial Abelian group - sage: G.cohomology(5,2) # optional - gap_packages + sage: G.cohomology(5,2) # optional - gap_package_hap Multiplicative Abelian group isomorphic to C2 - sage: G.homology(5,3) # optional - gap_packages + sage: G.homology(5,3) # optional - gap_package_hap Trivial Abelian group - sage: G.homology(5,4) # optional - gap_packages + sage: G.homology(5,4) # optional - gap_package_hap Traceback (most recent call last): ... ValueError: p must be 0 or prime @@ -3238,10 +3239,10 @@ def cohomology_part(self, n, p=0): EXAMPLES:: sage: G = SymmetricGroup(5) - sage: G.cohomology_part(7,2) # optional - gap_packages + sage: G.cohomology_part(7,2) # optional - gap_package_hap Multiplicative Abelian group isomorphic to C2 x C2 x C2 sage: G = SymmetricGroup(3) - sage: G.cohomology_part(2,3) # optional - gap_packages + sage: G.cohomology_part(2,3) # optional - gap_package_hap Multiplicative Abelian group isomorphic to C3 AUTHORS: @@ -3282,13 +3283,13 @@ def homology(self, n, p=0): EXAMPLES:: sage: G = SymmetricGroup(5) - sage: G.homology(7) # optional - gap_packages + sage: G.homology(7) # optional - gap_package_hap Multiplicative Abelian group isomorphic to C2 x C2 x C4 x C3 x C5 - sage: G.homology(7,2) # optional - gap_packages + sage: G.homology(7,2) # optional - gap_package_hap Multiplicative Abelian group isomorphic to C2 x C2 x C2 x C2 x C2 - sage: G.homology(7,3) # optional - gap_packages + sage: G.homology(7,3) # optional - gap_package_hap Multiplicative Abelian group isomorphic to C3 - sage: G.homology(7,5) # optional - gap_packages + sage: G.homology(7,5) # optional - gap_package_hap Multiplicative Abelian group isomorphic to C5 REFERENCES: @@ -3320,7 +3321,7 @@ def homology_part(self, n, p=0): EXAMPLES:: sage: G = SymmetricGroup(5) - sage: G.homology_part(7,2) # optional - gap_packages + sage: G.homology_part(7,2) # optional - gap_package_hap Multiplicative Abelian group isomorphic to C2 x C2 x C2 x C2 x C4 AUTHORS: @@ -4739,10 +4740,10 @@ def poincare_series(self, p=2, n=10): EXAMPLES:: sage: G = SymmetricGroup(5) - sage: G.poincare_series(2,10) # optional - gap_packages + sage: G.poincare_series(2,10) # optional - gap_package_hap (x^2 + 1)/(x^4 - x^3 - x + 1) sage: G = SymmetricGroup(3) - sage: G.poincare_series(2,10) # optional - gap_packages + sage: G.poincare_series(2,10) # optional - gap_package_hap -1/(x - 1) AUTHORS: diff --git a/src/sage/groups/perm_gps/permgroup_named.py b/src/sage/groups/perm_gps/permgroup_named.py index 746cd5ddbab..7b3d4947f75 100644 --- a/src/sage/groups/perm_gps/permgroup_named.py +++ b/src/sage/groups/perm_gps/permgroup_named.py @@ -134,7 +134,7 @@ def __classcall__(cls, *args, **kwds): EXAMPLES:: - sage: SymmetricGroup(['a','b']).domain() #indirect doctest + sage: SymmetricGroup(['a','b']).domain() # indirect doctest {'a', 'b'} """ domain = kwds.pop('domain', None) @@ -679,7 +679,7 @@ def __init__(self, domain=None): Alternating group of order 6!/2 as a permutation group sage: G.category() Category of finite enumerated permutation groups - sage: TestSuite(G).run() # long time + sage: TestSuite(G).run() # long time sage: G = AlternatingGroup([1,2,4,5]) sage: G @@ -1063,14 +1063,15 @@ def __init__(self, n): EXAMPLES:: - sage: G = groups.permutation.Janko(1); G # optional - gap_packages internet + sage: G = groups.permutation.Janko(1); G # optional - gap_package_atlasrep internet Janko group J1 of order 175560 as a permutation group TESTS:: - sage: G.category() # optional - gap_packages internet + sage: G.category() # optional - gap_package_atlasrep internet Category of finite enumerated permutation groups - sage: TestSuite(G).run(skip=["_test_enumerated_set_contains", "_test_enumerated_set_iter_list"]) # optional - gap_packages internet + sage: TestSuite(G).run(skip=["_test_enumerated_set_contains", # optional - gap_package_atlasrep internet + ....: "_test_enumerated_set_iter_list"]) """ if n not in [1, 2, 3]: raise ValueError("n must belong to {1,2,3}") @@ -1083,7 +1084,7 @@ def _repr_(self): """ EXAMPLES:: - sage: G = groups.permutation.Janko(1); G # optional - gap_packages internet + sage: G = groups.permutation.Janko(1); G # optional - gap_package_atlasrep internet Janko group J1 of order 175560 as a permutation group """ return "Janko group J%s of order %s as a permutation group" % (self._n, self.order()) @@ -1096,14 +1097,15 @@ def __init__(self): EXAMPLES:: - sage: G = groups.permutation.SuzukiSporadic(); G # optional - gap_packages internet + sage: G = groups.permutation.SuzukiSporadic(); G # optional - gap_package_atlasrep internet Sporadic Suzuki group acting on 1782 points TESTS:: - sage: G.category() # optional - gap_packages internet + sage: G.category() # optional - gap_package_atlasrep internet Category of finite enumerated permutation groups - sage: TestSuite(G).run(skip=["_test_enumerated_set_contains", "_test_enumerated_set_iter_list"]) # optional - gap_packages internet + sage: TestSuite(G).run(skip=["_test_enumerated_set_contains", # optional - gap_package_atlasrep internet + ....: "_test_enumerated_set_iter_list"]) """ libgap.load_package("atlasrep") PermutationGroup_generic.__init__(self, gap_group='AtlasGroup("Suz")') @@ -1112,7 +1114,7 @@ def _repr_(self): """ EXAMPLES:: - sage: G = groups.permutation.SuzukiSporadic(); G # optional - gap_packages internet + sage: G = groups.permutation.SuzukiSporadic(); G # optional - gap_package_atlasrep internet Sporadic Suzuki group acting on 1782 points """ return "Sporadic Suzuki group acting on 1782 points" @@ -1987,7 +1989,7 @@ def _repr_(self): """ TESTS:: - sage: TransitiveGroups() # indirect doctest + sage: TransitiveGroups() # indirect doctest Transitive Groups """ return "Transitive Groups" @@ -2101,7 +2103,7 @@ def __iter__(self): """ EXAMPLES:: - sage: list(TransitiveGroups(5)) # indirect doctest + sage: list(TransitiveGroups(5)) # indirect doctest [Transitive group number 1 of degree 5, Transitive group number 2 of degree 5, Transitive group number 3 of degree 5, @@ -2375,7 +2377,7 @@ class PrimitiveGroupsAll(DisjointUnionEnumeratedSets): The following test is broken, see :trac:`22576`:: - sage: TestSuite(PrimitiveGroups()).run() # known bug # long time + sage: TestSuite(PrimitiveGroups()).run() # known bug, long time """ def __init__(self): """ @@ -2399,7 +2401,7 @@ def _repr_(self): TESTS:: - sage: PrimitiveGroups() # indirect doctest + sage: PrimitiveGroups() # indirect doctest Primitive Groups """ return "Primitive Groups" @@ -2533,7 +2535,7 @@ def __iter__(self): """ EXAMPLES:: - sage: list(PrimitiveGroups(5)) # indirect doctest + sage: list(PrimitiveGroups(5)) # indirect doctest [C(5), D(2*5), AGL(1, 5), A(5), S(5)] """ for n in range(1, self.cardinality() + 1): @@ -2650,7 +2652,7 @@ def __init__(self, n, q, name='a'): sage: G.category() Category of finite enumerated permutation groups - sage: TestSuite(G).run() # long time + sage: TestSuite(G).run() # long time TESTS:: @@ -2718,7 +2720,7 @@ def __init__(self, n, q, name='a'): sage: G.category() Category of finite enumerated permutation groups - sage: TestSuite(G).run() # long time + sage: TestSuite(G).run() # long time TESTS:: @@ -2784,7 +2786,7 @@ def ramification_module_decomposition_hurwitz_curve(self): EXAMPLES:: sage: G = PSL(2,13) - sage: G.ramification_module_decomposition_hurwitz_curve() # random, optional - gap_packages + sage: G.ramification_module_decomposition_hurwitz_curve() # random, optional - gap_packages [0, 7, 7, 12, 12, 12, 13, 15, 14] This means, for example, that the trivial representation does not @@ -2834,7 +2836,7 @@ def ramification_module_decomposition_modular_curve(self): EXAMPLES:: sage: G = PSL(2,7) - sage: G.ramification_module_decomposition_modular_curve() # random, optional - gap_packages + sage: G.ramification_module_decomposition_modular_curve() # random, optional - gap_packages [0, 4, 3, 6, 7, 8] This means, for example, that the trivial representation does not