44Braid groups are implemented as a particular case of finitely presented groups, 
55but with a lot of specific methods for braids. 
66
7- A braid group can be created by giving the number of strands, and the name of the generators:: 
7+ A braid group can be created by giving the number of strands, and the name 
8+ of the generators:: 
89
910    sage: BraidGroup(3) 
1011    Braid group on 3 strands 
1516    sage: BraidGroup(3,'a,b').gens() 
1617    (a, b) 
1718
18- The elements can be created by operating with the generators, or by passing a list  
19- with the indices of the letters to the group:: 
19+ The elements can be created by operating with the generators, or by passing 
20+ a list  with the indices of the letters to the group::
2021
2122    sage: B.<s0,s1,s2> = BraidGroup(4) 
2223    sage: s0*s1*s0 
8182    GroupMorphismWithGensImages ,
8283)
8384from  sage .groups .free_group  import  FreeGroup , is_FreeGroup 
84- from  sage .groups .perm_gps .permgroup_named  import  SymmetricGroup , SymmetricGroupElement 
85+ from  sage .groups .perm_gps .permgroup_named  import  (SymmetricGroup ,
86+                                                   SymmetricGroupElement )
8587from  sage .libs .gap .libgap  import  libgap 
8688from  sage .matrix .constructor  import  identity_matrix , matrix 
8789from  sage .misc .cachefunc  import  cached_method 
9698from  sage .structure .richcmp  import  rich_to_bool , richcmp 
9799
98100lazy_import ('sage.libs.braiding' ,
99-             ['leftnormalform' , 'rightnormalform' , 'centralizer' , 'supersummitset' , 'greatestcommondivisor' ,
101+             ['leftnormalform' , 'rightnormalform' , 'centralizer' ,
102+              'supersummitset' , 'greatestcommondivisor' ,
100103             'leastcommonmultiple' , 'conjugatingbraid' , 'ultrasummitset' ,
101104             'thurston_type' , 'rigidity' , 'sliding_circuits' , 'send_to_sss' ,
102-              'send_to_uss' , 'send_to_sc' , 'trajectory' , 'cyclic_slidings'   ],
105+              'send_to_uss' , 'send_to_sc' , 'trajectory' , 'cyclic_slidings' ],
103106            feature = sage__libs__braiding ())
104107lazy_import ('sage.knots.knot' , 'Knot' )
105108
@@ -500,7 +503,8 @@ def permutation(self, W=None):
500503        """ 
501504        return  self .coxeter_group_element (W )
502505
503-     def  plot (self , color = 'rainbow' , orientation = 'bottom-top' , gap = 0.05 , aspect_ratio = 1 , axes = False , ** kwds ):
506+     def  plot (self , color = 'rainbow' , orientation = 'bottom-top' , gap = 0.05 ,
507+              aspect_ratio = 1 , axes = False , ** kwds ):
504508        """ 
505509        Plot the braid. 
506510
@@ -632,7 +636,7 @@ def plot(self, color='rainbow', orientation='bottom-top', gap=0.05, aspect_ratio
632636
633637    def  plot3d (self , color = 'rainbow' ):
634638        """ 
635-         Plots  the braid in 3d. 
639+         Plot  the braid in 3d. 
636640
637641        The following option is available: 
638642
@@ -830,6 +834,7 @@ def links_gould_matrix(self, symbolics=False):
830834        r""" 
831835        Return the representation matrix of ``self`` according to the R-matrix 
832836        representation being attached to the quantum superalgebra `\mathfrak{sl}_q(2|1)`. 
837+ 
833838        See [MW2012]_, section 3 and references given there. 
834839
835840        INPUT: 
@@ -861,15 +866,16 @@ def links_gould_matrix(self, symbolics=False):
861866        M  =  rep [0 ][0 ].parent ().one ()
862867        for  i  in  self .Tietze ():
863868            if  i  >  0 :
864-                 M  =  M * rep [i - 1 ][0 ]
869+                 M  =  M   *   rep [i - 1 ][0 ]
865870            if  i  <  0 :
866-                 M  =  M * rep [- i - 1 ][1 ]
871+                 M  =  M   *   rep [- i - 1 ][1 ]
867872        return  M 
868873
869874    @cached_method  
870875    def  links_gould_polynomial (self , varnames = None , use_symbolics = False ):
871876        r""" 
872877        Return the Links-Gould polynomial of the closure of ``self``. 
878+ 
873879        See [MW2012]_, section 3 and references given there. 
874880
875881        INPUT: 
@@ -906,12 +912,13 @@ def links_gould_polynomial(self, varnames=None, use_symbolics=False):
906912        mu  =  rep [ln  -  1 ]  # quantum trace factor 
907913        M  =  mu  *  self .links_gould_matrix (symbolics = use_symbolics )
908914        d1 , d2  =  M .dimensions ()
909-         e  =  d1 // 4 
915+         e  =  d1   //   4 
910916        B  =  M .base_ring ()
911917        R  =  LaurentPolynomialRing (ZZ , varnames )
912918
913919        # partial quantum trace according to I. Marin section 2.5 
914-         part_trace  =  matrix (B , 4 , 4 , lambda  i , j : sum (M [e  *  i  +  k , e  *  j  +  k ] for  k  in  range (e )))
920+         part_trace  =  matrix (B , 4 , 4 , lambda  i , j : sum (M [e  *  i  +  k , e  *  j  +  k ]
921+                                                       for  k  in  range (e )))
915922        ptemp  =  part_trace [0 , 0 ]  # part_trace == psymb*M.parent().one() 
916923        if  use_symbolics :
917924            v1 , v2  =  R .variable_names ()
@@ -922,13 +929,13 @@ def links_gould_polynomial(self, varnames=None, use_symbolics=False):
922929        else :
923930            ltemp  =  ptemp .lift ().constant_coefficient ()
924931            # Since the result of the calculation is known to be a Laurent polynomial 
925-             # in t0 and t1 all exponents of ltemp must be divisable  by 2 
932+             # in t0 and t1 all exponents of ltemp must be divisible  by 2 
926933            L  =  ltemp .parent ()
927934            lred  =  L ({(k [0 ]/ 2 , k [1 ]/ 2 ): v  for  k , v  in  ltemp .monomial_coefficients ().items ()})
928935            t0 , t1  =  R .gens ()
929936            return  lred (t0 , t1 )
930937
931-     def  tropical_coordinates (self ):
938+     def  tropical_coordinates (self )  ->   list :
932939        r""" 
933940        Return the tropical coordinates of ``self`` in the braid group `B_n`. 
934941
@@ -972,7 +979,7 @@ def tropical_coordinates(self):
972979
973980        from  sage .rings .semirings .tropical_semiring  import  TropicalSemiring 
974981        T  =  TropicalSemiring (ZZ )
975-         return  [T (_ ) for  _  in  coord ]
982+         return  [T (c ) for  c  in  coord ]
976983
977984    def  markov_trace (self , variab = None , normalized = True ):
978985        r""" 
@@ -1640,7 +1647,7 @@ def right_normal_form(self):
16401647        B  =  self .parent ()
16411648        return  tuple ([B (b ) for  b  in  rnf [:- 1 ]] +  [B .delta ()** rnf [- 1 ][0 ]])
16421649
1643-     def  centralizer (self ):
1650+     def  centralizer (self )  ->   list :
16441651        """ 
16451652        Return a list of generators of the centralizer of the braid. 
16461653
@@ -1655,7 +1662,7 @@ def centralizer(self):
16551662        B  =  self .parent ()
16561663        return  [B ._element_from_libbraiding (b ) for  b  in  c ]
16571664
1658-     def  super_summit_set (self ):
1665+     def  super_summit_set (self )  ->   list :
16591666        """ 
16601667        Return a list with the super summit set of the braid. 
16611668
@@ -1773,10 +1780,9 @@ def conjugating_braid(self, other):
17731780        cb  =  conjugatingbraid (self , other )
17741781        if  not  cb :
17751782            return  None 
1776-         else :
1777-             B  =  self .parent ()
1778-             cb [0 ][0 ] %=  2 
1779-             return  B ._element_from_libbraiding (cb )
1783+         B  =  self .parent ()
1784+         cb [0 ][0 ] %=  2 
1785+         return  B ._element_from_libbraiding (cb )
17801786
17811787    def  is_conjugated (self , other ) ->  bool :
17821788        """ 
@@ -1893,7 +1899,7 @@ def pure_conjugating_braid(self, other):
18931899        n2  =  len (b2 .Tietze ())
18941900        return  b2  if  n2  <=  n0  else  b0 
18951901
1896-     def  ultra_summit_set (self ):
1902+     def  ultra_summit_set (self )  ->   list :
18971903        """ 
18981904        Return a list with the orbits of the ultra summit set of ``self``. 
18991905
@@ -1922,7 +1928,7 @@ def ultra_summit_set(self):
19221928        B  =  self .parent ()
19231929        return  [[B ._element_from_libbraiding (i ) for  i  in  s ] for  s  in  uss ]
19241930
1925-     def  thurston_type (self ):
1931+     def  thurston_type (self )  ->   str :
19261932        """ 
19271933        Return the thurston_type of ``self``. 
19281934
@@ -2007,7 +2013,7 @@ def rigidity(self):
20072013        """ 
20082014        return  Integer (rigidity (self ))
20092015
2010-     def  sliding_circuits (self ):
2016+     def  sliding_circuits (self )  ->   list :
20112017        """ 
20122018        Return the sliding circuits of the braid. 
20132019
@@ -2304,7 +2310,7 @@ def ultra_summit_set_element(self):
23042310        B  =  self .parent ()
23052311        return  tuple ([B ._element_from_libbraiding (b ) for  b  in  to_uss ])
23062312
2307-     def  sliding_circuits_element (self ):
2313+     def  sliding_circuits_element (self )  ->   tuple :
23082314        r""" 
23092315        Return an element of the braid's sliding circuits, and the conjugating 
23102316        braid. 
@@ -2320,7 +2326,7 @@ def sliding_circuits_element(self):
23202326        B  =  self .parent ()
23212327        return  tuple ([B ._element_from_libbraiding (b ) for  b  in  to_sc ])
23222328
2323-     def  trajectory (self ):
2329+     def  trajectory (self )  ->   list :
23242330        r""" 
23252331        Return the braid's trajectory. 
23262332
@@ -2338,7 +2344,7 @@ def trajectory(self):
23382344        B  =  self .parent ()
23392345        return  [B ._element_from_libbraiding (b ) for  b  in  traj ]
23402346
2341-     def  cyclic_slidings (self ):
2347+     def  cyclic_slidings (self )  ->   list :
23422348        r""" 
23432349        Return the braid's cyclic slidings. 
23442350
@@ -2518,6 +2524,7 @@ def reduced_word(self):
25182524        def  tuple_to_word (q_tuple ):
25192525            return  M .prod (self ._gens [i ]** exp 
25202526                          for  i , exp  in  enumerate (q_tuple ))
2527+ 
25212528        ret  =  {tuple_to_word (q_tuple ): q_factor 
25222529               for  q_tuple , q_factor  in  self .tuples .items () if  q_factor }
25232530        return  self ._algebra ._from_dict (ret , remove_zeros = False )
@@ -2580,7 +2587,7 @@ def eps_monom(q_tuple):
25802587        return  sum (q_factor  *  eps_monom (q_tuple )
25812588                   for  q_tuple , q_factor  in  self .tuples .items ())
25822589
2583-     def  __repr__ (self ):
2590+     def  __repr__ (self )  ->   str :
25842591        r""" 
25852592        String representation of ``self``. 
25862593
@@ -2616,7 +2623,7 @@ class BraidGroup_class(FiniteTypeArtinGroup):
26162623    """ 
26172624    Element  =  Braid 
26182625
2619-     def  __init__ (self , names ):
2626+     def  __init__ (self , names )  ->   None :
26202627        """ 
26212628        Python constructor. 
26222629
@@ -2691,7 +2698,7 @@ def __init__(self, names):
26912698        # For caching hermitian form of unitary Burau representation 
26922699        self ._hermitian_form  =  None 
26932700
2694-     def  __reduce__ (self ):
2701+     def  __reduce__ (self )  ->   tuple :
26952702        """ 
26962703        TESTS:: 
26972704
@@ -2704,7 +2711,7 @@ def __reduce__(self):
27042711        """ 
27052712        return  (BraidGroup_class , (self .variable_names (), ))
27062713
2707-     def  _repr_ (self ):
2714+     def  _repr_ (self )  ->   str :
27082715        """ 
27092716        Return a string representation. 
27102717
@@ -2795,7 +2802,7 @@ def an_element(self):
27952802        """ 
27962803        return  self .gen (0 )
27972804
2798-     def  some_elements (self ):
2805+     def  some_elements (self )  ->   list :
27992806        """ 
28002807        Return a list of some elements of the braid group. 
28012808
@@ -2812,7 +2819,7 @@ def some_elements(self):
28122819        elements_list .append (elements_list [- 1 ]** self .strands ())
28132820        return  elements_list 
28142821
2815-     def  _standard_lift_Tietze (self , p ):
2822+     def  _standard_lift_Tietze (self , p )  ->   tuple :
28162823        """ 
28172824        Helper for :meth:`_standard_lift_Tietze`. 
28182825
@@ -2840,8 +2847,7 @@ def _standard_lift_Tietze(self, p):
28402847            (1, 2, 3, 4, 1, 2) 
28412848        """ 
28422849        G  =  SymmetricGroup (self .strands ())
2843-         pl  =  G (p )
2844-         return  tuple (pl .reduced_word ())
2850+         return  tuple (G (p ).reduced_word ())
28452851
28462852    @cached_method  
28472853    def  _links_gould_representation (self , symbolics = False ):
@@ -2887,8 +2893,9 @@ def _links_gould_representation(self, symbolics=False):
28872893        else :
28882894            from  sage .rings .polynomial .polynomial_ring_constructor  import  PolynomialRing 
28892895            LR  =  LaurentPolynomialRing (ZZ , 's0r, s1r' )
2896+             s0r , s1r  =  LR .gens ()
28902897            PR  =  PolynomialRing (LR , 'Yr' )
2891-             s0r ,  s1r ,  Yr  =  PR .gens_dict_recursive (). values ()
2898+             Yr  =  PR .gen ()
28922899            pqr  =  Yr ** 2  +  (s0r ** 2  -  1 ) *  (s1r ** 2  -  1 )
28932900            BR  =  PR .quotient_ring (pqr )
28942901            s0  =  BR (s0r )
@@ -3453,9 +3460,10 @@ def mirror_involution(self):
34533460        r""" 
34543461        Return the mirror involution of ``self``. 
34553462
3456-         This automorphism maps a braid to another one by replacing each generator 
3457-         in its word by the inverse. In general this is different from the inverse 
3458-         of the braid since the order of the generators in the word is not reversed. 
3463+         This automorphism maps a braid to another one by replacing 
3464+         each generator in its word by the inverse. In general this is 
3465+         different from the inverse of the braid since the order of the 
3466+         generators in the word is not reversed. 
34593467
34603468        EXAMPLES:: 
34613469
@@ -3519,7 +3527,7 @@ def presentation_two_generators(self, isomorphisms=False):
35193527        h2  =  G .hom (codomain = self , im_gens = [self (a ) for  a  in  L2 ], check = False )
35203528        return  (G , h1 , h2 )
35213529
3522-     def  epimorphisms (self , H ):
3530+     def  epimorphisms (self , H )  ->   list :
35233531        r""" 
35243532        Return the epimorphisms from ``self`` to ``H``, up to automorphism of `H` passing 
35253533        through the :meth:`two generator presentation 
@@ -3552,12 +3560,15 @@ def epimorphisms(self, H):
35523560        Gg  =  libgap (G )
35533561        Hg  =  libgap (H )
35543562        gquotients  =  Gg .GQuotients (Hg )
3555-         hom1g  =  libgap .GroupHomomorphismByImagesNC (G0g , Gg , [libgap (hom1 (u )) for  u  in  self .gens ()])
3563+         hom1g  =  libgap .GroupHomomorphismByImagesNC (G0g , Gg ,
3564+                                                    [libgap (hom1 (u ))
3565+                                                     for  u  in  self .gens ()])
35563566        g0quotients  =  [hom1g  *  h  for  h  in  gquotients ]
35573567        res  =  []
35583568        # the following closure is needed to attach a specific value of quo to 
35593569        # each function in the different morphisms 
3560-         fmap  =  lambda  tup : (lambda  a : H (prod (tup [abs (i )- 1 ]** sign (i ) for  i  in  a .Tietze ())))
3570+         fmap  =  lambda  tup : (lambda  a : H (prod (tup [abs (i )- 1 ]** sign (i )
3571+                                              for  i  in  a .Tietze ())))
35613572        for  quo  in  g0quotients :
35623573            tup  =  tuple (H (quo .ImageElm (i .gap ()).sage ()) for  i  in  self .gens ())
35633574            fhom  =  GroupMorphismWithGensImages (HomSpace , fmap (tup ))
@@ -3685,22 +3696,24 @@ class group of the punctured disk.
36853696
36863697        sage: A = B.mapping_class_action(F) 
36873698        sage: A 
3688-         Right action by Braid group on 4 strands on Free Group on generators {x0, x1, x2, x3} 
3699+         Right action by Braid group on 4 strands on Free Group 
3700+         on generators {x0, x1, x2, x3} 
36893701        sage: A(x0, s1) 
36903702        x0 
36913703        sage: A(x1, s1) 
36923704        x1*x2*x1^-1 
36933705        sage: A(x1^-1, s1) 
36943706        x1*x2^-1*x1^-1 
36953707    """ 
3696-     def  __init__ (self , G , M ):
3708+     def  __init__ (self , G , M )  ->   None :
36973709        """ 
36983710        TESTS:: 
36993711
37003712            sage: B = BraidGroup(3) 
37013713            sage: G = FreeGroup('a, b, c') 
37023714            sage: B.mapping_class_action(G) # indirect doctest 
3703-             Right action by Braid group on 3 strands on Free Group on generators {a, b, c} 
3715+             Right action by Braid group on 3 strands on Free Group 
3716+             on generators {a, b, c} 
37043717        """ 
37053718        import  operator 
37063719        Action .__init__ (self , G , M , False , operator .mul )
0 commit comments