
    sh:o                     l    S SK Jr  S SKJrJrJr  S SKJr  S SKJr  S SK	J
r
   S r\
S 5       rS rS	 rg
)    )FpGroup)
CosetTablecoset_enumeration_rcoset_enumeration_c)modified_coset_enumeration_r)
free_group)slowc                  z   [        S5      u  pn[        XS-  US-  US-  US-  -  U-  U-  /5      n[        X1/5      nUR                  SU5        UR                  / SQ/:X  d   eUR
                  S/:X  d   eUR                  S:X  d   eUR                  S/:X  d   eUR                  SUS-  5        UR                  / SQ/:X  d   eUR
                  S/:X  d   eUR                  S:X  d   eUR                  S/:X  d   eUR                  SUS-  5        UR                  / SQ/ SQ/ S	Q/:X  d   eUR
                  / S
Q:X  d   eUR                  S:X  d   eUR                  / S
Q:X  d   eUR                  SUS-  US-  -  U-  U-  5        UR                  / SQ/ SQ/ SQ/:X  d   eUR
                  / S
Q:X  d   eUR                  S:X  d   eUR                  / S
Q:X  d   eUR                  SUS-  5        UR                  / SQ/ SQ/ SQ/ SQ/ SQ/:X  d   eUR
                  / SQ:X  d   eUR                  S:X  d   eUR                  / SQ:X  d   eUR                  SUS-  5        UR                  / SQ/ SQ/ SQ/ SQ/ SQ/:X  d   eUR
                  / SQ:X  d   eUR                  S:X  d   eUR                  / SQ:X  d   eUR                  SUS-  US-  -  U-  U-  5        UR                  / SQ/ SQ/ SQ/ SQ/ SQ/:X  d   eUR
                  / SQ:X  d   eUR                  S:X  d   eUR                  / S
Q:X  d   e[        XS-  US-  X-  S-  /5      n[        X1U-  /5      nUR                  SX-  5        UR                  / SQ/ SQ/:X  d   eUR
                  SS/:X  d   eUR                  S:X  d   eUR                  SS/:X  d   eUR                  SUS-  5        UR                  / SQ/ SQ/:X  d   eUR
                  SS/:X  d   eUR                  S:X  d   eUR                  SS/:X  d   eUR                  SUS-  5        UR                  / SQ/ SQ/ SQ/:X  d   eUR
                  / S
Q:X  d   eUR                  S:X  d   eUR                  / S
Q:X  d   eUR                  SX-  S-  5        UR                  / SQ/ SQ/ SQ/:X  d   eUR
                  / S
Q:X  d   eUR                  S:X  d   eUR                  / S
Q:X  d   eUR                  SUS-  5        UR                  / SQ/ SQ/ SQ/:X  d   eUR
                  / S
Q:X  d   eUR                  S:X  d   eUR                  / S
Q:X  d   eUR                  SUS-  5        UR                  / SQ/ SQ/ SQ/:X  d   eUR
                  / S
Q:X  d   eUR                  S:X  d   eUR                  / S
Q:X  d   eUR                  SX-  S-  5        UR                  / SQ/ SQ/ SQ/ SQ/ SQ/:X  d   eUR
                  / SQ:X  d   eUR                  S:X  d   eUR                  / SQ:X  d   eUR                  SUS-  5        UR                  / SQ/ SQ/ SQ/ S Q/ SQ/:X  d   eUR
                  / S!Q:X  d   eUR                  S":X  d   eUR                  / S#Q:X  d   eg )$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        ~/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/sympy/combinatorics/tests/test_coset_table.pytest_scan_1r!      sZ    GA!qD!Q$2aeAa01A1c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 	qD!Q$q)*A1seAOOAqs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                     [        S5      u  pn[        XS-  US-  US-  US-  -  U-  U-  /5      n[        X1/5      nUR                  5         UR	                  5         [        X1/5      nUR                  5         UR	                  5         / SQ/ SQ/ SQ/nUR                  U:X  d   eUR                  U:X  d   e[        S5      u  pp[        X	S-  U-  U	-  US-  -  US-  U-  U-  US-  -  US-  U	-  U-  U	S-  -  /5      n
[        U
/ 5      nUR                  5         [        U
/ 5      nUR                  5         / S	Q/nUR                  U:X  d   eUR                  U:X  d   e[        S
5      u  pn[        XS-  US-  X-  S-  US-  US-  -  S-  US-  US-  -  S-  /5      n[        X/5      nUR                  5         UR	                  5         [        X/5      nUR                  5         UR	                  5         / / SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ S QP/ S!QP/ S"QP/ S#QP/ S$QP/ S%QP/ S&QP/ S'QP/ S(QP/ S)QP/ S*QP/ S+QP/ S,QP/ S-QP/ S.QP/ S/QP/ S0QP/ S1QP/ S2QP/ S3QP/ S4QP/ S5QP/ S6QP/ S7QP/ S8QP/ S9QP/ S:QP/ S;QP/ S<QP/ S=QP/ S>QP/ S?QP/ S@QP/ SAQP/ SBQP/ SCQP/ SDQP/ SEQP/ SFQP/ SGQP/ SHQP/ SIQP/ SJQP/ SKQP/ SLQP/ SMQP/ SNQP/ SOQP/ SPQP/ SQQP/ SRQP/ SSQP/ STQP/ SUQP/ SVQP/ SWQP/ SXQP/ SYQP/ SZQP/ S[QP/ S\QP/ S]QP/ S^QP/ S_QP/ S`QP/ SaQP/ SbQP/ ScQP/ SdQP/ SeQP/ SfQP/ SgQP/ ShQP/ SiQP/ SjQP/ SkQP/ SlQP/ SmQP/ SnQP/ SoQP/ SpQP/ SqQP/ SrQP/ SsQP/ StQP/ SuQP/ SvQP/ SwQP/ SxQP/ SyQP/ SzQP/ S{QP/ S|QP/ S}QP/ S~QP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ GS QP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GS	QP/ GS
QP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GS QP/ GS!QP/ GS"QP/ GS#QP/ GS$QP/ GS%QP/ GS&QP/ GS'QP/ GS(QP/ GS)QP/ GS*QP/ GS+QP/ GS,QP/ GS-QP/ GS.QP/ GS/QP/ GS0QP/ GS1QP/ GS2QP/ GS3QP/ GS4QP/ GS5QP/ GS6QP/ GS7QP/ GS8QP/ GS9QP/ GS:QP/ GS;QP/ GS<QP/ GS=QP/ GS>QP/ GS?QP/ GS@QP/ GSAQP/ GSBQP/ GSCQP/ GSDQP/ GSEQP/ GSFQP/ GSGQP/ GSHQP/ GSIQP/ GSJQP/ GSKQP/ GSLQP/ GSMQP/ GSNQP/ GSOQP/ GSPQP/ GSQQP/ GSRQP/ GSSQP/ GSTQP/ GSUQP/ GSVQP/ GSWQP/ GSXQP/ GSYQP/ GSZQP/ GS[QP/ GS\QP/ GS]QP/ GS^QP/ GS_QP/ GS`QP/ GSaQP/ GSbQP/ GScQP/ GSdQP/ GSeQP/ GSfQP/ GSgQP/ GShQP/ GSiQP/ GSjQP/ GSkQP/ GSlQP/ GSmQP/ GSnQP/ GSoQP/ GSpQP/ GSqQP/ GSrQP/ GSsQP/ GStQP/ GSuQP/ GSvQP/ GSwQP/ GSxQP/ GSyQP/ GSzQP/ GS{QP/ GS|QP/ GS}QP/ GS~QP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GSQP/ GS QPnUR                  U:X  d   eUR                  U:X  d   e[        S
5      u  pn[        XGS-  UGS-  X-  GS-  US-  U-  GS-  US-  U-  GS-  XS-  -  GS-  US-  US-  -  GS-  US-  U-  U-  U-  GS-  XS-  -  U-  U-  GS-  /	5      n[        UU/5      n[        UU/5      nGSn[        [        UR                  5      5       H  nUR                  U   U:X  d  M  UGS-  nM      UGS:X  d   eGSn[        [        UR                  5      5       H  nUR                  U   U:X  d  M  UGS-  nM      UGS:X  d   e[        XS-  US-  -  U-  U-  US-  -  U-  U-  US-  -  US-  US-  -  U-  U-  US-  -  U-  U-  US-  -  /5      n[        UU/5      nUR                  5         UR	                  5         [        UU/5      nUR                  5         UR	                  5         / GSQ/nUR                  U:X  d   eUR                  U:X  d   eg (  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)  ~   sR     GA!qD!Q$2aeAa01A
a
%CLLNCOO%
a
%CLLNCOO%L,7F9999 I&JA!	U1WQYq"u_aeAgai2oq"uQwqyBG	HB
b"
%CLLN
b"
%CLLN !F9999  GA!
!dAqD13(QT!Q$YNQT!Q$YNK
LC
c3
'CLLNCOO%
c3
'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  GA!A1adQS1Hq"uQwlQT!VaK!tVaK!Q$q!t)a!R%'!)A+)9AeGAIaK!;KM NE
eaS
)C
eaS
)CG3suu:558q=qLG  d??G3suu:558q=qLG  d?? 	rE!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                     [        S5      u  pp#[        XS-  US-  US-  X-  S-  US-  US-  -  US-  -  U-  US-  US-  -  US-  -  U-  /5      nX2US-  /n/ SQ/ S	Q/ S
Q/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/
nS[        l        [	        XE5      nUR                  5         UR                  5         UR                  S S U:X  d   eg )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&JA!rE1a4AaxAaeArE1A!1CQT!R%ZPQSUPUEUVWEWXYA	
q!tA  #$$"%%$%	'F !#J
a
#CLLNCOO%99Tr?f$$$r"   c            
      
   [        S5      u  pn[        XS-  US-  X-  S-  /5      nX-  US-  US-  -  U-  U-  U-  /n[        X45      nUR                  SU5        UR                  R
                  nUR                  R                  S   nUR                  R                  S   nUR                  USSS/SUSS//:X  d   eUR                  / S	Q/ S
Q/:X  d   eUR                  SU5        UR                  / S	Q/ SQ/ SQ/:X  d   eUR                  USSS/XfSS/SUSS//:X  d   eUR                  SUS-  UR                  R
                  SS9  UR                  XfSS/XfSS/XfSS//:X  d   eUR                  / SQ/ SQ/ SQ/:X  d   eUR                  SX-  UR                  R                  S   SS9  UR                  XfSUS-  /XfUS/XfSS//:X  d   eUR                  / SQ/ SQ/ SQ/:X  d   eUR                  SUS-  5        UR                  / SQ/ SQ/ SQ/ SQ/:X  d   eUR                  XfSUS-  /XfUS/XfSU/SSUS//:X  d   eUR                  SUS-  US-  -  U-  U-  U-  UR                  R                  S   5        UR                  / SQ/ SQ/ SQ/ SQ/:X  d   eUR                  XfSUS-  /XfUS/XfSU/XS-  US//:X  d   eUR                  SX-  S-  UR                  R
                  5        UR                  / SQ/ SQ/ SQ/ SQ/:X  d   eUR                  XfUS-  US-  /XfUS/XfSU/XS-  Xh//:X  d   eUR                  SU5        UR                  / SQ/ SQ/ SQ/ SQ/ SQ/:X  d   eUR                  XfUS-  US-  /XfUS/XfXf/XS-  Xh/SSSU//:X  d   eUR                  SUS-  UR                  R
                  5        UR                  / SQ/ SQ/ SQ/ SQ/ SQ/:X  d   eUR                  XfUS-  US-  /XfXwUS-  -  /XfXf/XS-  Xh/SSXS-  -  U//:X  d   eUR                  SX-  S-  UR                  R
                  5        UR                  / SQ/ SQ/ SQ/ SQ/ SQ/:X  d   eUR                  XfUS-  US-  /XfXwUS-  -  /XfXf/XS-  Xh/XxS-  -  XS-  -  XS-  -  U//:X  d   e[        XS-  US-  US-  US-  -  U-  U-  /5      n[        X1/5      n[        X1/5      n	U	R                  UR                  :X  d   eg)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     GA!qD!Q$q)*A	
aeArEk!mAoa A1AavvH
&&

A
C
&&

A
C33HdD$/8T402 2 2 277,-/ / / / a77,*-/ / / / 33HdD$/t48T402 2 2 2 OOAq!tQVV__5O933Hd3$5$57 7 7 7 77)**, , , , OOAqsAFF--a0uO=33Hc2g6d3t46 6 6 6 77'*, , , , aB77''-/ / / / 33Hc2g6d3x84402 2 2 2
 OOAq"uQU{1}Qq(!&&*;*;A*>?77''') ) ) ) 33Hc2g6d3x8r'8T24 4 4 4
 OOAax177|''$& & & & 33HRb9d3x8r'813 3 3 3
 a77|'$$-	/ / / /
 33HRb9d3<r'814x0	2 2 2 2 OOAq!tQVV__-77|\<Oabbbb33HRb9#r'k:<r'814"Wh7	9 9 9 9 OOAax177|$$$$	& & & &
 33HRb9#r'k:<r'81b[#2g+s7{HE	G G G G 	qD!Q$2aeAa01AAs#A
&q#
.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"   