o
    h:o                     @   sn   d dl mZ d dlmZmZmZ d dlmZ d dlmZ d dl	m
Z
 	 dd Ze
dd	 Zd
d Zdd ZdS )    )FpGroup)
CosetTablecoset_enumeration_rcoset_enumeration_c)modified_coset_enumeration_r)
free_group)slowc                  C   s  t d\} }}t| |d |d |d |d  | | g}t||g}|d| |jg dgks3J |jdgks;J |jdksBJ |jdgksJJ |d|d  |jg dgks\J |jdgksdJ |jdkskJ |jdgkssJ |d|d  |jg dg dg d	gksJ |jg d
ksJ |jdksJ |jg d
ksJ |d|d |d  | |  |jg dg dg dgksJ |jg d
ksJ |jdksJ |jg d
ksJ |d|d  |jg dg dg dg dg dgksJ |jg dksJ |jdksJ |jg dksJ |d|d  |jg dg dg dg dg dgks6J |jg dks@J |jdksHJ |jg dksRJ |d|d |d  | |  |jg dg dg dg dg dgksyJ |jg dksJ |jdksJ |jg d
ksJ t| |d |d || d g}t||| g}|d||  |jg dg dgksJ |jddgksJ |jdksJ |jddgksJ |d|d  |jg dg dgksJ |jddgksJ |jdksJ |jddgksJ |d|d  |jg dg dg dgks*J |jg d
ks4J |jdks<J |jg d
ksFJ |d|| d  |jg dg dg dgksaJ |jg d
kskJ |jdkssJ |jg d
ks}J |d|d  |jg dg dg dgksJ |jg d
ksJ |jdksJ |jg d
ksJ |d|d  |jg dg dg dgksJ |jg d
ksJ |jdksJ |jg d
ksJ |d|| d  |jg dg dg dg dg dgksJ |jg dksJ |jdksJ |jg dks$J |d|d  |jg dg dg dg d g dgksCJ |jg d!ksMJ |jd"ksUJ |jg d#ks_J d S )$Nx, y   r   )r   r   NN   r   r   r      )NNr   r   )NNr   r   )r   r   r   r   r   r   r   )r
      r   r   )r   r   NN)r   r
   NN)r   r   r   r
   r      r   r   r   r   Nr   NN)r   r   r   r   r   r   )r   NNr   )Nr   r   N)r   r   Nr   )r   r   r   N)r   r   r   r   )r   r   r   r   )NNr   r   )r
   r   r   r   )Nr   r   N)r   NNr
   )r
   r
   r   r   )r   r   r
   r
   )r   r   r   r
   r
   r   )r   r   r   r
   )r   r   r   scan_and_filltablepnomega)Fxyfc r   ^/var/www/vscode/kcb/lib/python3.10/site-packages/sympy/combinatorics/tests/test_coset_table.pytest_scan_1   s   ,   
  """"..r    c                  C   s  t d\} }}t| |d |d |d |d  | | g}t||g}|  |  t||g}|  |  g dg dg dg}|j|ksKJ |j|ksRJ t d\} }}}	t| |	d | |	 |d  |d | | |d  |d |	 | |	d  g}
t|
g }|  t|
g }|  g d	g}|j|ksJ |j|ksJ t d
\} }}t| |d |d || d |d |d  d |d |d  d g}t||g}|  |  t||g}|  |  g g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGg dHg dIg dJg dKg dLg dMg dNg dOg dPg dQg dRg dSg dTg dUg dVg dWg dXg dYg dZg d[g d\g d]g d^g d_g d`g dag dbg dcg ddg deg dfg dgg dhg dig djg dkg dlg dmg dng dog dpg dqg drg dsg dtg dug dvg dwg dxg dyg dzg d{g d|g d}g d~g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d¢g dâg dĢg dŢg dƢg dǢg dȢg dɢg dʢg dˢg d̢g d͢g d΢g dϢg dТg dѢg dҢg dӢg dԢg dբg d֢g dעg dآg d٢g dڢg dۢg dܢg dݢg dޢg dߢg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g dg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGg dHg dIg dJg dKg dLg dMg dNg dOg dPg dQg dRg dSg dTg dUg dVg dWg dXg dYg dZg d[g d\g d]g d^g d_g d`g dag dbg dcg ddg deg dfg dgg dhg dig djg dkg dlg dmg dng dog dpg dqg drg dsg dtg dug dvg dwg dxg dyg dzg d{g d|g d}g d~g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d¢g dâg dĢg dŢg dƢg dǢg dȢg dɢg dʢg dˢg d̢g d͢g d΢g dϢg dТg dѢg dҢg dӢg dԢg dբg d֢g dעg dآg d٢g dڢg dۢg dܢg dݢg dޢg dߢg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d }|j|k	sJ |j|k	sJ t d
\} }}t| |d |d || d |d | d |d | d ||d  d |d |d  d |d | | | d ||d  | | d g	}t||g}t||g}d}tt|j	D ]}|j	| |k
rF|d7 }
q7|dk
sPJ d}tt|j	D ]}|j	| |k
ri|d7 }
qZ|dk
ssJ t| |d |d  | | |d  | | |d  |d |d  | | |d  | | |d  g}t||g}|  |  t||g}|  |  g dg}|j|k
sJ |j|k
sJ d S (  Nr	   r
   r   r   r   r   zr, s, t)r   r   r   r   r   r   za, b   r   r   )r   r
   r   r   )r   r   r   r"   )r         	   )r%   
      r   )   r   r%      )   r%   r   r'   )r
   r(         )r,         r
   )r"   r   r
   r   )r            )r1      r"   r   )r#   r         )   r3   r   r.   )r/   r"   r2      )r4         r#   )   r$   r#      )r$          !   )r=   "   r)   r$   )r&   r*   #   r?   )r?   $   %   r&   )r:   r'   r&   r9   )r'   &   '   r*   )r)   rC   rB   r(   )(   r+   r(   )   )*   r)   r>   +   ),   r?   r*   -   )r+   .   /   r>   )r>   0   1   r+   )2   r,   r1   3   )4   r1   r,   rM   )r-   rN   5   6   )rR   7   8   r-   )rE   r.   r-   rD   )r.   r8   r7   r5   )r6   r0   r/   r/   )r0   9   :   ;   )rW   <   rO   r0   )r2   rP   =   r3   )r3   >   ?   r2   )@   r4   r=   A   )rL   r=   r4   rY   )rZ   r5   rR   B   )C   rR   r5   D   )rU   r6   rW   E   )F   rW   r6   r[   )r7   r\   G   H   )rd   I   r`   r7   )r8   rE   J   K   )rg   L   r:   r8   )r;   r9   M   N   )O   ri   r9   rA   )rB   r:   rh   P   )rj   Q   R   r;   )rG   r<   r;   rF   )r<   S   T   U   )rq   V   r]   r<   )r@   rH   W   X   )rt   Y   Z   r@   )rI   rA   r@   rH   )rA   rn   rm   rk   )rl   rf   rE   rB   )rC   rF   [   \   )rx   ]   rI   rC   )rJ   rD   ^   _   )`   rz   rD   rT   )a   rw   rF   rn   )ro   rG   b   c   )d   r~   rG   rK   )e   rs   rH   rv   )rn   rI   ry   r}   )r{   f   g   rJ   )h   rK   rJ   i   )rK   j   k   r   )rY   l   m   rL   )r   rM   rL   r   )rM   n   o   rP   )rO   r   r   rN   )p   rQ   rN   q   )r   rO   rX   s   )t   rY   rP   u   )rQ   v   w   rX   )rX   rb   r^   rQ   )rS   r_   x   y   )r   z   {   rS   )r   rT   rS   r   )rT   r   r   r|   )ra   |   }   rU   )r   rV   rU   r   )rV   ~         )r   r   ra   rV   )r^         rZ   )r   r[   rZ   r   )r[   r   r   rb   )r]   r   r   r\   )   rc   r\      )   r]   rr      )   r^   rb      )r`   r   r   r_   )   r   r_      )r   r`   re   r   )   ra   r      )rc         rr   )rr         rc   )   rd   rg      )   rg   rd   r   )re   r      r   )r         re   )rf         rz   )rz      r   rf   )rh   r      ri   )ri         rh   )   rj   rq      )r   rq   rj   r   )r   rk   rt      )   rt   rk      )r   rl   rx      )   rx   rl   r   )rm   r         )r      r   rm   )r   r   r   ro   )r   rp   ro   r   )rp            )r      r   rp   )rs         ry   )ry   r   r   rs   )ru   r         )r         ru   )rv   rv   ru   r   )rw         r~   )r~      r   rw   )   r{   r      )r   r   r{   r   )r   r|   r   r   )   r   r|      )r   r}   r      )   r   r}   r   )   r   r      )   r   r   r   )r   r   r      )   r   r   r   )r   r         )r      r   r   )r   r         )r      r   r   )r   r         )   r   r   r   )r   r   r      )r      r   r   )r   r         )r      r   r   )r   r         )r      r   r   )r   r   r   r   )r   r   r   r   )r   r         )r      r   r   )r   r         )   r   r   r   )   r   r   r   )r   r         )   r   r   r   )   r   r   r   )r   r   r   r   )r         r   )r   r   r   r   )r         r   )r   r         )r         r   )r   r   r   r   )r   r   r   r   )r   r         )r      r   r   )r   r   r   r   )r   r   r   r   )r            )r     r   r   )r   r         )r     r   r   )r   r   r   r   )r   r         )   r	  r   r   )r   r         )   r  r   r   )   r  r   r   )r   r   r     )r   r         )   r  r   r   )r   r   r  r  )r  r   r   r   )r  r   r     )r
        r   )   r   r      )r         r  )r         r   )r  r   r   r  )r       r   )r   r  r  r   )  r   r     )  r   r     )  r   r     )r   	  
  r   )r      r   )r   r   r   r  )r   r  r  r  )r       r   )r"  r   r   r!  )r       r   )r       r   )r$  r   r   r#  )r   r*  r)  r   )r   r  r  r   )  r   r     )  r   r     )  r   r     )r   r.  r-  r   )  r   r     )r0  r   r   r/  )  r   r     )r       r   )r   r   r   r   )r   r   r   r   )r        r   )r  r  r  r   )r2  r   r   r1  )r   !  "  #  )r?  $  r   r   )r   %  &  r   )r4  r   r   r3  )r   '  (  r   )r   r   )  rE  )rE  *  +  r   )r6  r   r   r5  )r   rB  rA  r   )r   rD  rC  r   )r8  r   r   r7  )r   ,  -  r   )r   r,  r+  r   ).  r   r   /  )0  r   r   1  )r   r&  r%  r   )2  r   r   3  )rK  r   r   rJ  )4  r   r   5  )6  r   r   7  )r   rI  rH  r   )rM  r   r   rL  )8  r   r@  9  ):  rE  r   ;  )r   <  =  r   )r   >  ?  r   )@  r   r   A  )B  r   r   r[  )r   r\  C  r   )r   D  E  r   )r   F  G  r   )r   H  r]  r   )r   r^  I  r   )r   J  K  r   )L  r   r   M  )rZ  r   r   re  )rf  r   r   N  )O  r   r   P  )rb  r   r   Q  )R  r   r   rg  )r   rh  S  r  )r  T  rl  r   )r   U  V  r@  )r@  W  ri  r   )r   X  Y  r   )r   rn  rj  r   )r   rk  Z  r	  )r	  [  \  r   )r   ]  ^  r   )r   _  rm  r   )`  r   r   a  )r{  r   r   rc  )rd  r   r   r_  )b  r   r   c  )ry  r   r   d  )e  r   r   ru  )f  r   r  g  )h  r  r   rz  )rt  r   r  i  )j  r  r   rx  )r   r|  k  l  )r  m  r  r   )r   r  n  o  )r  p  r}  r   )r   r~  q  r  )r  s  t  r   )rO  r   r   rN  )r   r(  r'  r  )r   u  v  r  )r  r  r  r   )r  r  r  r  )r  w  x  r  )r  r  r  r  )r  y  z  {  )r  |  r  r  )r  r  }  r  )r  ~    r  )  r
  r    )rp  r  r
  rv  )rw  r  r  r  )  r  r    )  r  r?    )rs  r?  r  ro  )r  r  r    )  r  r  r  )r  r  r    )  r  r  r  )r  r  r    )  r  r    )r  r  r    )  r  r  r  )r  r      )r    r  r  )r  r       )r    r  r  )r  r      )  r  r  r  )r  r  r    )r    r1  r  )r  r      )r    r  r  )r  r#      )r    r0  r  )r  r1  r  r  )r  r  r   r  )r  r!      )r    r$  r  )r%  r      )  r  r  r(  )  r  r!  r*  )r+  r"      )  r  r"  r&  )  r  r#  r.  )r*  r$  r  r  )r    rO  r%  )r&  rK    r  )r'  r      )r    r  r'  )r(  rO  r  r  )r)  r7      )r    r4  r)  )r  r  rK  r+  )r,  rL      )r    r8  r,  )r-  r3      )r    r6  r-  )r.  r0  r  r  )r9  r/      )  r  r/  r<  )r=  r2      )  r  r2  r:  )  r  r3  rB  )rC  r4  r    )r;  r5      )  r  r5  rG  )rB  r6  r  r  )r  r  r7  rC  )rH  r8  r    )r      r9  )rQ  r:  r9  rP  )r:      r  )r      r;  )rS  r<  r;  rR  )r<  r  r  r  )r  r  r  r=  )rU  r>  r=  rT  )r>        )r    r  r>  )rA  rR      )r    rW  rA  )rD  rP      )r    rS  rD  )rF  rV      )r      rF  )rW  rG  rF  rV  )rG  r  r  r  )r  r  rL  rH  )rI  rT      )r    rQ  rI  )rX  rJ      )  r  rJ  ra  )rq  rM      )  r  rM  rY  )r`  rN      )  r  rN  r  )  r  rP  r  )r  rQ  r    )  r  rR  r  )r  rS  r  r  )r  r  rT  r  )r  rU      )  r  rU  rr  )  r  rV  r  )r  rW  r  r  )r    r  rX  )r  rY  rX  r  )rY  r    r  )re  r  r  rZ  )r  r[  rZ  r  )r[  r  r  r^  )r]  r  r  r\  )r  r_  r\  r  )r  r]  rd  r  )r  re  r^  r  )r_  r  r  rd  )r    r  r`  )r  ra  r`  r  )ra  r  r  r  )rm  r  r  rb  )r  rc  rb  r  )rc  r  r  r{  )rj  r  r  rf  )r  rg  rf  r  )rg  r  r  rn  )ri  r  r  rh  )r  ro  rh  r  )r  ri  rs  r  )r  rj  rn  r  )rl  r  r  rk  )r  rv  rk  r  )r  rl  rp  r  )r  rm  r{  r  )ro  r  r  rs  )rv  r  r  rp  )r  r	  r  rq  )r  rr  rq  r  )rr  r    r  )r  r  r  rt  )r  ru  rt  r  )ru  r  r  r  )r  r  r  rw  )r  rx  rw  r  )rx  r  r  r  )r  r  r  ry  )r  rz  ry  r  )rz  r  r  r  )r}  r  r  r|  )r  r  r|  r  )r  r}  r  r  )r  r  r  r~  )r  r  r~  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r      )r    r  r  )r  r  r  r  )r  r  r
  r   )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r   r    )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r	  )r  r  r  r  )r
  r  r  r  )r  r  r  r  )r  r  r  r  )r	  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r
  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r   r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  r   r   r   i   )r   r   r   r   )
r   r   r   compressstandardizer   r   rangelenr   )r   r   r   r   C_rC_ctable1rstE1table2abCoxtable3B_2_4index_riindex_cMtable4r   r   r   test_coset_enumeration~   s  ,L


D
	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 	  
                                               !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _  `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~                                     	    
                                                                                             !    "    #    $    %    &    '    (    )    *    +    ,    -    .    /    0    1    2    3    4    5    6    7    8    9    :    ;    <    =    >    ?    @    A    B    C    D    E    F    G    H    I    J    K    L    M    N    O    P    Q    R    S    T    U    V    W    X    Y    Z    [    \    ]    ^    _    `    a    b    c    d    e    f    g    h    i    j    k    l    m    n    o    p    q    r    s    t    u    v    w    x    y    z    {    |    }    ~                                                         	      
                                                                                                                                           !      "      #      $      %      &      '      (      )      *      +      ,      -      .      /      0      1      2      3      4      5      6      7      8      9      :      ;      <      =      >      ?      @      A      B      C      D      E      F      G      H      I      J      K      L      M      N      O      P      Q      R      S      T      U      V      W      X      Y      Z      [      \      ]      ^      _      `      a      b      c      d      e      f      g      h      i      j      k      l      m      n      o      p      q      r      s      t      u      v      x@T

fr&  c                  C   s   t d\} }}}t| |d |d |d || d |d |d  |d  | |d |d  |d  | g}|||d g}g dg d	g d
g dg dg dg dg dg dg dg
}dt_t||}|  |  |jd d |kswJ d S )Nza, b, cr'   r   r   r
   r   r   )r   r   r   r   r   r   )r
   r   r   r   r"   r#   )r   r$   r%   r&   r'   r(   )r   r   r&   r)   r*   r+   )r,   r   r,   r   r-   r.   )r   r
   r   r$   r/   r0   )r(   r1   r2   r3   r4   r   )r5   r6   r7   r8   r   r4   )r   r&   r   r,   r2   r8   )r&   r)   r)   r   r9   r:   r&   )r   r   r   max_stack_sizer   r  r  r   )r   r  r  r   r   Htable0r  r   r   r   test_look_ahead  s$   Z

r*  c            
   
   C   s  t d\} }}t| |d |d || d g}|| |d |d  | | | g}t||}|d| |jj}|jjd }|jjd }|j|dddgd|ddggksUJ |jg d	g d
gksbJ |d| |jg d	g dg dgksxJ |j|dddg||ddgd|ddggksJ |j	d|d |jjdd |j||ddg||ddg||ddggksJ |jg dg dg dgksJ |j	d|| |jjd dd |j||d|d g|||dg||ddggksJ |jg dg dg dgksJ |d|d  |jg dg dg dg dgksJ |j||d|d g|||dg||d|gdd|dggks2J |	d|d |d  | | | |jjd  |jg dg dg dg dgks]J |j||d|d g|||dg||d|g||d |dggks}J |	d|| d |jj |jg dg dg dg dgksJ |j|||d |d g|||dg||d|g||d ||ggksJ |d| |jg dg dg dg dg dgksJ |j|||d |d g|||dg||||g||d ||gddd|ggksJ |	d|d |jj |jg dg dg dg dg dgks&J |j|||d |d g|||||d  g||||g||d ||gdd||d  |ggksUJ |	d|| d |jj |jg dg dg dg dg dgksyJ |j|||d |d g|||||d  g||||g||d ||g||d  ||d  ||d  |ggksJ t| |d |d |d |d  | | g}t
||g}t||g}	|	j|jksJ dS )z
    Tests for modified coset table methods.
    Example 5.7 from [1] Holt, D., Eick, B., O'Brien
    "Handbook of Computational Group Theory".

    r	   r
   r   r   r   r   r   N)r   NNN)Nr   NN)r   r   NNr   F)fill)r   r   NN)r   r   NN)r   r   Nr   )r   r   r   N)r   r   Nr
   )NNr   N)r
   r
   r   N)r   r   r
   r   )r
   r
   r   r   )r   r   r   r
   )NNNr   )r   r   r   r   )NNr   r   )r   r   r   r   )r   r   r   modified_define_grpidentity
generatorsPr   modified_scanr   r   )
r   r   r   r   r(  Cr.  a_0a_1C_mr   r   r   test_modified_methods  s    $























.









.


",r6  N)sympy.combinatorics.fp_groupsr   sympy.combinatorics.coset_tabler   r   r   r   sympy.combinatorics.free_groupsr   sympy.testing.pytestr   r    r&  r*  r6  r   r   r   r   <module>   s    h
    ;