
    g:o                     l    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 Ze
d        Zd Zd	 Zy
)    )FpGroup)
CosetTablecoset_enumeration_rcoset_enumeration_c)modified_coset_enumeration_r)
free_group)slowc                     t        d      \  } }}t        | |dz  |dz  |dz  |dz  z  |z  |z  g      }t        ||g      }|j                  d|       |j                  g dgk(  sJ |j
                  dgk(  sJ |j                  dk(  sJ |j                  dgk(  sJ |j                  d|dz         |j                  g dgk(  sJ |j
                  dgk(  sJ |j                  dk(  sJ |j                  dgk(  sJ |j                  d|dz         |j                  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 |j                  d|dz  |dz  z  |z  |z         |j                  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 |j                  d|dz         |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 |j                  d|dz         |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 |j                  d|dz  |dz  z  |z  |z         |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 t        | |dz  |dz  ||z  dz  g      }t        |||z  g      }|j                  d||z         |j                  g dg dgk(  sJ |j
                  ddgk(  sJ |j                  dk(  sJ |j                  ddgk(  sJ |j                  d|dz         |j                  g dg dgk(  sJ |j
                  ddgk(  sJ |j                  dk(  sJ |j                  ddgk(  sJ |j                  d|dz         |j                  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 |j                  d||z  dz         |j                  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 |j                  d|dz         |j                  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 |j                  d|dz         |j                  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 |j                  d||z  dz         |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 |j                  d|dz         |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 y )$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cs        _/var/www/openai/venv/lib/python3.12/site-packages/sympy/combinatorics/tests/test_coset_table.pytest_scan_1r!      sl    GAq!AqD!Q$2aeAa01A1qcAOOAq77)****331#::33!8O877qc>>OOAq!t77)****331#::33!8O877qc>>OOAq!t77|%79KLLLL33)33!8O877iOOAq"uQU{1}Q'77|%7FFFF33)33!8O877iOOAq!t77|\< 24 4 4 433/!!!33!8O877o%%%OOAq!t77|\< 24 4 4 433/!!!33!8O877o%%%OOAq"uQU{1}Q'77|\<!#57 7 7 733/!!!33!8O877i 	AqD!Q$1q)*A1qseAOOAqs77)+=>>>>331a&==33!8O877q!fOOAq!t778888331a&==33!8O877q!fOOAq!t77|\3EFFFF33)33!8O877iOOA!ax 77|\3EFFFF33)33!8O877iOOAq!t77|\3EFFFF33)33!8O877iOOAq!t77|\3EFFFF33)33!8O877iOOA!ax 77|\<ASUghhhh33/!!!33!8O877o%%%OOAq!t77|\<Oabbbb33/!!!33!8O877l"""    c                     t        d      \  } }}t        | |dz  |dz  |dz  |dz  z  |z  |z  g      }t        ||g      }|j                          |j	                          t        ||g      }|j                          |j	                          g dg dg dg}|j                  |k(  sJ |j                  |k(  sJ t        d      \  } }}}	t        | |	dz  |z  |	z  |dz  z  |dz  |z  |z  |dz  z  |dz  |	z  |z  |	dz  z  g      }
t        |
g       }|j                          t        |
g       }|j                          g d	g}|j                  |k(  sJ |j                  |k(  sJ t        d
      \  } }}t        | |dz  |dz  ||z  dz  |dz  |dz  z  dz  |dz  |dz  z  dz  g      }t        ||g      }|j                          |j	                          t        ||g      }|j                          |j	                          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(  sJ |j                  |k(  sJ t        d
      \  } }}t        | |dz  |dz  ||z  dz  |dz  |z  dz  |dz  |z  dz  ||dz  z  dz  |dz  |dz  z  dz  |dz  |z  |z  |z  dz  ||dz  z  |z  |z  dz  g	      }t        ||g      }t        ||g      }d}t        t        |j                              D ]  }|j                  |   |k(  s|dz  } |dk(  sJ d}t        t        |j                              D ]  }|j                  |   |k(  s|dz  } |dk(  sJ t        | |dz  |dz  z  |z  |z  |dz  z  |z  |z  |dz  z  |dz  |dz  z  |z  |z  |dz  z  |z  |z  |dz  z  g      }t        ||g      }|j                          |j	                          t        ||g      }|j                          |j	                          g dg}|j                  |k(  sJ |j                  |k(  sJ y (  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            )r4      r%   r   )r&   r         )   r6   r   r1   )r2   r%   r5      )r7         r&   )   r'   r&      )r'          !   )r@   "   r,   r'   )r)   r-   #   rB   )rB   $   %   r)   )r=   r*   r)   r<   )r*   &   '   r-   )r,   rF   rE   r+   )(   r.   r+   )   )*   r,   rA   +   ),   rB   r-   -   )r.   .   /   rA   )rA   0   1   r.   )2   r/   r4   3   )4   r4   r/   rP   )r0   rQ   5   6   )rU   7   8   r0   )rH   r1   r0   rG   )r1   r;   r:   r8   )r9   r3   r2   r2   )r3   9   :   ;   )rZ   <   rR   r3   )r5   rS   =   r6   )r6   >   ?   r5   )@   r7   r@   A   )rO   r@   r7   r\   )r]   r8   rU   B   )C   rU   r8   D   )rX   r9   rZ   E   )F   rZ   r9   r^   )r:   r_   G   H   )rg   I   rc   r:   )r;   rH   J   K   )rj   L   r=   r;   )r>   r<   M   N   )O   rl   r<   rD   )rE   r=   rk   P   )rm   Q   R   r>   )rJ   r?   r>   rI   )r?   S   T   U   )rt   V   r`   r?   )rC   rK   W   X   )rw   Y   Z   rC   )rL   rD   rC   rK   )rD   rq   rp   rn   )ro   ri   rH   rE   )rF   rI   [   \   )r{   ]   rL   rF   )rM   rG   ^   _   )`   r}   rG   rW   )a   rz   rI   rq   )rr   rJ   b   c   )d   r   rJ   rN   )e   rv   rK   ry   )rq   rL   r|   r   )r~   f   g   rM   )h   rN   rM   i   )rN   j   k   r   )r\   l   m   rO   )r   rP   rO   r   )rP   n   o   rS   )rR   r   r   rQ   )p   rT   rQ   q   )r   rR   r[   s   )t   r\   rS   u   )rT   v   w   r[   )r[   re   ra   rT   )rV   rb   x   y   )r   z   {   rV   )r   rW   rV   r   )rW   r   r   r   )rd   |   }   rX   )r   rY   rX   r   )rY   ~         )r   r   rd   rY   )ra         r]   )r   r^   r]   r   )r^   r   r   re   )r`   r   r   r_   )   rf   r_      )   r`   ru      )   ra   re      )rc   r   r   rb   )   r   rb      )r   rc   rh   r   )   rd   r      )rf         ru   )ru         rf   )   rg   rj      )   rj   rg   r   )rh   r      r   )r         rh   )ri         r}   )r}      r   ri   )rk   r      rl   )rl         rk   )   rm   rt      )r   rt   rm   r   )r   rn   rw      )   rw   rn      )r   ro   r{      )   r{   ro   r   )rp   r         )r      r   rp   )r   r   r   rr   )r   rs   rr   r   )rs            )r      r   rs   )rv         r|   )r|   r   r   rv   )rx   r         )r         rx   )ry   ry   rx   r   )rz         r   )r      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   r1  r0  r   )  r   r     )r3  r   r   r2  )  r   r     )r       r   )r   r   r   r   )r   r   r   r   )r        r   )r  r  r  r   )r5  r   r   r4  )r   !  "  #  )rB  $  r   r   )r   %  &  r   )r7  r   r   r6  )r   '  (  r   )r   r   )  rH  )rH  *  +  r   )r9  r   r   r8  )r   rE  rD  r   )r   rG  rF  r   )r;  r   r   r:  )r   ,  -  r   )r   r/  r.  r   ).  r   r   /  )0  r   r   1  )r   r)  r(  r   )2  r   r   3  )rN  r   r   rM  )4  r   r   5  )6  r   r   7  )r   rL  rK  r   )rP  r   r   rO  )8  r   rC  9  ):  rH  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   ra  I  r   )r   J  K  r   )L  r   r   M  )r]  r   r   rh  )ri  r   r   N  )O  r   r   P  )re  r   r   Q  )R  r   r   rj  )r   rk  S  r  )r  T  ro  r   )r   U  V  rC  )rC  W  rl  r   )r   X  Y  r   )r   rq  rm  r   )r   rn  Z  r  )r  [  \  r   )r   ]  ^  r   )r   _  rp  r   )`  r   r   a  )r~  r   r   rf  )rg  r   r   rb  )b  r   r   c  )r|  r   r  d  )e  r  r   rx  )f  r   r  g  )h  r  r   r}  )rw  r   r
  i  )j  r
  r   r{  )r   r  k  l  )r  m  r  r   )r   r  n  o  )r  p  r  r   )r   r  q  r  )r  s  t  r   )rR  r  r   rQ  )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    )rs  r  r  ry  )rz  r  r  r  )  r  r    )  r  rB    )rv  rB  r  rr  )r  r  r    )  r  r  r  )r  r  r    )  r  r  r  )r  r  r    )  r  r    )r  r  r    )  r  r  r  )r  r      )r    r  r  )r  r#      )r    r  r  )r  r      )  r  r  r  )r   r  r    )r    r4  r  )r  r      )r    r  r  )r  r&      )r    r3  r  )r  r4  r  r  )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    rR  r(  )r)  rN    r  )r*  r      )r    r  r*  )r+  rR  r  r  )r,  r:      )r    r7  r,  )r  r  rN  r.  )r/  rO      )r    r;  r/  )r0  r6      )r    r9  r0  )r1  r3  r  r  )r<  r2      )  r  r2  r?  )r@  r5      )  r  r5  r=  )  r  r6  rE  )rF  r7  r    )r>  r8      )  r  r8  rJ  )rE  r9  r  r  )r  r  r:  rF  )rK  r;  r    )r      r<  )rT  r=  r<  rS  )r=      r  )r      r>  )rV  r?  r>  rU  )r?  r  r  r  )r  r  r  r@  )rX  rA  r@  rW  )rA        )r    r  rA  )rD  rU      )r    rZ  rD  )rG  rS      )r    rV  rG  )rI  rY      )r      rI  )rZ  rJ  rI  rY  )rJ  r  r  r  )r  r  rO  rK  )rL  rW      )r    rT  rL  )r[  rM      )  r  rM  rd  )rt  rP      )  r  rP  r\  )rc  rQ      )  r  rQ  r  )  r  rS  r  )r  rT  r    )  r  rU  r  )r  rV  r  r  )r  r  rW  r  )r  rX      )  r  rX  ru  )  r  rY  r  )r  rZ  r  r  )r    r  r[  )r  r\  r[  r  )r\  r    r   )rh  r  r  r]  )r  r^  r]  r  )r^  r  r  ra  )r`  r  r  r_  )r  rb  r_  r  )r  r`  rg  r  )r  rh  ra  r  )rb  r  r  rg  )r    r  rc  )r  rd  rc  r  )rd  r  r  r  )rp  r  r  re  )r  rf  re  r  )rf  r  r  r~  )rm  r  r  ri  )r  rj  ri  r  )rj  r  r  rq  )rl  r  r  rk  )r  rr  rk  r  )r  rl  rv  r  )r  rm  rq  r  )ro  r  r  rn  )r  ry  rn  r  )r  ro  rs  r  )r  rp  r~  r  )rr  r  r  rv  )ry  r  r  rs  )r  r  r  rt  )r  ru  rt  r  )ru  r
    r	  )r  r  r  rw  )r  rx  rw  r  )rx  r  r  r  )r  r  r  rz  )r  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  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table4s                         r    test_coset_enumerationr)  ~   sv     GAq!AqD!Q$2aeAa01A
a!
%CLLNCOO%
a!
%CLLNCOO%L,7F9999 I&JAq!Q	QU1WQYq"u_aeAgai2oq"uQwqyBG	HB
b"
%CLLN
b"
%CLLN !F9999  GAq!
!adAqD1Q3(QT!Q$YNQT!Q$YNK
LC
cA3
'CLLNCOO%
cA3
'CLLNCOO%s#l s#s#s# s# 	s#
 s# s# s# s# s# s# s# s# s# s# s#  !s#" #s#$ %s#& 's#( )s#* +s#, -s#. /s#0 1s#2 3s#4 5s#6 7s#8 9s#: ;s#< =s#> ?s#@ As#B Cs#D Es#F Gs#H Is#J Ks#L Ms#N Os#P Qs#R Ss#T Us#V Ws#X Ys#Z [s#\ ]s#^ _s#` as#b cs#d es#f gs#h is#j ks#l ms#n os#p qs#r ss#t us#v ws#x ys#z {s#| }s#~ s#@ As#B Cs#D Es#F Gs#H Is#J Ks#L Ms#N  Os#P  Qs#R !Ss#T  Us#V  Ws#X  Ys#Z  [s#\  ]s#^  _s#`  as#b  cs#d es#f  gs#h !is#j  ks#l  ms#n  os#p  qs#r !ss#t  us#v  ws#x  ys#z  {s#|  }s#~  s#@  As#B  Cs#D  Es#F !Gs#H  Is#J !Ks#L  Ms#N  Os#P  Qs#R  Ss#T !Us#V !Ws#X  Ys#Z  [s#\  ]s#^  _s#`  as#b  cs#d  es#f  gs#h  is#j  ks#l !ms#n !os#p  qs#r  ss#t !us#v !ws#x  ys#z  {s#| !}s#~ !s#@ As#B  Cs#D  Es#F !Gs#H !Is#J !Ks#L !Ms#N !Os#P !Qs#R !Ss#T !Us#V "Ws#X "Ys#Z "[s#\ "]s#^ "_s#` "as#b "cs#d "es#f "gs#h "is#j "ks#l "ms#n "os#p "qs#r "ss#t "us#v "ws#x "ys#z "{s#| "}s#~ "s#@ "As#B "Cs#D "Es#F "Gs#H "Is#J "Ks#L "Ms#N "Os#P "Qs#R "Ss#T "Us#V "Ws#X "Ys#Z "[s#\ "]s#^ "_s#` "as#b "cs#d "es#f "gs#h "is#j "ks#l "ms#n "os#p "qs#r "ss#t "us#v "ws#x "ys#z "{s#| "}s#~ "s#@ "As#B "Cs#D "Es#F "Gs#H "Is#J "Ks#L "Ms#N "Os#P "Qs#R "Ss#T "Us#V "Ws#X "Ys#Z "[s#\ "]s#^ "_s#` "as#b "cs#d "es#f "gs#h "is#j "ks#l "ms#n "os#p "qs#r "ss#t "us#v "ws#x "ys#z "{s#| "}s#~ "s#@ "As#B "Cs#D "Es#F "Gs#H "Is#J "Ks#L "Ms#N "Os#P "Qs#R "Ss#T "Us#V "Ws#X "Ys#Z "[s#\ "]s#^ "_s#` "as#b "cs#d "es#f "gs#h "is#j "ks#l "ms#n "os#p "qs#r "ss#t "us#v "ws#x "ys#z "{s#| "}s#~ "s#@ "As#B "Cs#D "Es#F "Gs#H "Is#J "Ks#L "Ms#N "Os#P "Qs#R "Ss#T "Us#V "Ws#X "Ys#Z "[s#\ "]s#^ "_s#` "as#b "cs#d "es#f "gs#h "is#j "ks#l "ms#n "os#p "qs#r "ss#t "us#v "ws#x "ys#z "{s#| "}s#~ "s#@	 "A	s#B	 "C	s#D	 "E	s#F	 "G	s#H	 "I	s#J	 "K	s#L	 "M	s#N	 "O	s#P	 "Q	s#R	 "S	s#T	 "U	s#V	 "W	s#X	 "Y	s#Z	 "[	s#\	 "]	s#^	 "_	s#`	 "a	s#b	 "c	s#d	 "e	s#f	 "g	s#h	 "i	s#j	 "k	s#l	 "m	s#n	 "o	s#p	 "q	s#r	 "s	s#t	 "u	s#v	 "w	s#x	 "y	s#z	 "{	s#|	 "}	s#~	 "	s#@
 "A
s#B
 "C
s#D
 "E
s#F
 "G
s#H
 "I
s#J
 "K
s#L
 "M
s#N
 "O
s#P
 "Q
s#R
 "S
s#T
 "U
s#V
 "W
s#X
 "Y
s#Z
 "[
s#\
 "]
s#^
 "_
s#`
 "a
s#b
 "c
s#d
 "e
s#f
 "g
s#h
 "i
s#j
 "k
s#l
 "m
s#n
 "o
s#p
 "q
s#r
 "s
s#t
 "u
s#v
 "w
s#x
 "y
s#z
 "{
s#|
 "}
s#~
 "
s#@ "As#B "Cs#D "Es#F "Gs#H "Is#J "Ks#L "Ms#N "Os#P "Qs#R "Ss#T "Us#V "Ws#X "Ys#Z "[s#\ "]s#^ "_s#` "as#b "cs#d "es#f "gs#h "is#j "ks#l "ms#n "os#p "qs#r "ss#t "us#v "ws#x "ys#z "{s#| "}s#~ "s#@ "As#B "Cs#D "Es#F "Gs#H "Is#J "Ks#L "Ms#N "Os#P "Qs#R "Ss#T "Us#V "Ws#X "Ys#Z "[s#\ "]s#^ "_s#` "as#b "cs#d "es#f "gs#h "is#j "ks#l "ms#n "os#p "qs#r "ss#t "us#v "ws#x "ys#z "{s#| "}s#~ "s#@ "As#B "Cs#D "Es#F "Gs#H "Is#J "Ks#L "Ms#N "Os#P "Qs#R "Ss#T "Us#V "Ws#X "Ys#Z "[s#\ "]s#^ "_s#` "as#b "cs#d "es#f "gs#h "is#j "ks#l "ms#n "os#p "qs#r "ss#t "us#v "ws#x "ys#z "{s#| "}s#~ "s#@ "As#B "Cs#D "Es#F "Gs#H "Is#J "Ks#L "Ms#N "Os#P "Qs#R "Ss#T "Us#V "Ws#X "Ys#Z "[s#\ "]s#^ "_s#` "as#b "cs#d "es#f "gs#h "is#j "ks#l "ms#n "os#p "qs#r "ss#t "us#v "ws#x "ys#z "{s#| "}s#~ "s#@ "As#B "Cs#D "Es#F "Gs#H "Is#J "Ks#L "Ms#N "Os#P "Qs#R "Ss#T "Us#V "Ws#X "Ys#Z "[s#\ "]s#^ "_s#` "as#b "cs#d "es#f "gs#Fj 9999  GAq!A1adQqS1Hq"uQwlQT!VaKq!tVaK!Q$q!t)a!R%'!)A+)9AaeGAIaK!;KM NE
eaS
)C
eaS
)CG3suu:558q=qLG  d??G3suu:558q=qLG  d?? 	ArE!R%KM!OArE)!+A-ae3QU1b5[]1_QU5J15LQ5NqRTu5TUVA
a!
%CLLNCOO%
a!
%CLLNCOO%^F9999r"   c                     t        d      \  } }}}t        | |dz  |dz  |dz  ||z  dz  |dz  |dz  z  |dz  z  |z  |dz  |dz  z  |dz  z  |z  g      }|||dz  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                          |j                          |j                  d d |k(  sJ y )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   r0   r1   )r   r   r   r'   r2   r3   )r+   r4   r5   r6   r7   r   )r8   r9   r:   r;   r   r7   )r   r)   r   r/   r5   r;   )r)   r,   r,   r   r<   r=   r)   )r   r   r   max_stack_sizer   r  r  r   )r   r  r   r   r   Htable0r  s           r    test_look_aheadr.    s    I&JAq!QArE1a4A!axAaeArE1A!1CQT!R%ZPQSUPUEUVWEWXYA	
Aq!tA  #$$"%%$%	'F !#J
a
#CLLNCOO%99Tr?f$$$r"   c            
      `
   t        d      \  } }}t        | |dz  |dz  ||z  dz  g      }||z  |dz  |dz  z  |z  |z  |z  g}t        ||      }|j                  d|       |j                  j
                  }|j                  j                  d   }|j                  j                  d   }|j                  |dddgd|ddggk(  sJ |j                  g d	g d
gk(  sJ |j                  d|       |j                  g d	g dg dgk(  sJ |j                  |dddg||ddgd|ddggk(  sJ |j                  d|dz  |j                  j
                  d       |j                  ||ddg||ddg||ddggk(  sJ |j                  g dg dg dgk(  sJ |j                  d||z  |j                  j                  d   d       |j                  ||d|dz  g|||dg||ddggk(  sJ |j                  g dg dg dgk(  sJ |j                  d|dz         |j                  g dg dg dg dgk(  sJ |j                  ||d|dz  g|||dg||d|gdd|dggk(  sJ |j                  d|dz  |dz  z  |z  |z  |z  |j                  j                  d          |j                  g dg dg dg dgk(  sJ |j                  ||d|dz  g|||dg||d|g||dz  |dggk(  sJ |j                  d||z  dz  |j                  j
                         |j                  g dg dg dg dgk(  sJ |j                  |||dz  |dz  g|||dg||d|g||dz  ||ggk(  sJ |j                  d|       |j                  g dg dg dg dg dgk(  sJ |j                  |||dz  |dz  g|||dg||||g||dz  ||gddd|ggk(  sJ |j                  d|dz  |j                  j
                         |j                  g dg dg dg dg dgk(  sJ |j                  |||dz  |dz  g|||||dz  z  g||||g||dz  ||gdd||dz  z  |ggk(  sJ |j                  d||z  dz  |j                  j
                         |j                  g dg dg dg dg dgk(  sJ |j                  |||dz  |dz  g|||||dz  z  g||||g||dz  ||g||dz  z  ||dz  z  ||dz  z  |ggk(  sJ t        | |dz  |dz  |dz  |dz  z  |z  |z  g      }t        ||g      }t        ||g      }	|	j                  |j                  k(  sJ y)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,  Cr3  a_0a_1C_ms
             r    test_modified_methodsr;    s     GAq!AqD!Q$1q)*A	
1aeArEk!mAoa A1aAavvH
&&

A
C
&&

A
C33HdD$/8T402 2 2 277,-/ / / / a77,*-/ / / / 33HdD$/xt48T402 2 2 2 OOAq!tQVV__5O933Hhd3$5$57 7 7 7 77)**, , , , OOAqsAFF--a0uO=33Hhc2g6xd3xt46 6 6 6 77'*, , , , aB77''-/ / / / 33Hhc2g6xd3xx84402 2 2 2
 OOAq"uQU{1}Qq(!&&*;*;A*>?77''') ) ) ) 33Hhc2g6xd3xx8#r'8T24 4 4 4
 OOA!ax177|''$& & & & 33HhRb9xd3xx8#r'8S13 3 3 3
 a77|'$$-	/ / / /
 33HhRb9xd3x8<#r'8S14x0	2 2 2 2 OOAq!tQVV__-77|\<Oabbbb33HhRb9xc#r'k:x8<#r'8S14S"Wh7	9 9 9 9 OOA!ax177|$$$$	& & & &
 33HhRb9xc#r'k:x8<#r'8S1b[#c2g+s37{HE	G G G G 	AqD!Q$2aeAa01AAs#A
&q1#
.C99r"   N)sympy.combinatorics.fp_groupsr   sympy.combinatorics.coset_tabler   r   r   r   sympy.combinatorics.free_groupsr   sympy.testing.pytestr	   r!   r)  r.  r;   r"   r    <module>rA     sI    1> > H 6 %e#P t tn%(o r"   