U
    L?h:o                     @   sl   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ddd d ggksjt|jdgkszt|jdkst|jdgkst|d|d  |jddd d ggkst|jdgkst|jdkst|jdgkst|d|d  |jddddgd d ddgd d ddggks,t|jdddgksBt|jdksRt|jdddgksht|d|d |d  | |  |jddddgd d ddgddddggkst|jdddgkst|jdkst|jdddgkst|d|d  |jddddgddddgddddgddd d gddd d ggksDt|jdddddgks^t|jdksnt|jdddddgkst|d|d  |jddddgddddgddddgddd d gddd d ggkst|jdddddgkst|jdkst|jdddddgkst|d|d |d  | |  |jddddgddddgddddgd dd d gddd d ggkst|jdddddgkst|jdkst|jdddgkstt| |d |d || d g}t||| g}|d||  |jdd d dgd ddd ggks$t|jddgks8t|jdksHt|jddgks\t|d|d  |jddd dgdddd ggkst|jddgkst|jdkst|jddgkst|d|d  |jddddgddddgd d ddggkst|jdddgkst|jdks,t|jdddgksBt|d|| d  |jddddgddddgd d ddggkst|jdddgkst|jdkst|jdddgkst|d|d  |jddddgddddgd d ddggkst|jdddgkst|jdks$t|jdddgks:t|d|d  |jddddgddddgd d ddggksxt|jdddgkst|jdkst|jdddgkst|d|| d  |jddddgddddgddddgd ddd gdd d dggks
t|jdddddgks$t|jdks4t|jdddddgksNt|d|d  |jddddgddddgddddgddddgdd d dggkst|jdddddgkst|jdkst|jddddgkstd S )	Nx, y   r               )	r   r   r   Zscan_and_filltableAssertionErrorpnomega)Fxyfc r   \/var/www/html/venv/lib/python3.8/site-packages/sympy/combinatorics/tests/test_coset_table.pytest_scan_1   s    ,. ."
 
"
 
 "
 
 $$....BBr   c                 C   sl  t d\} }}t| |d |d |d |d  | | g}t||g}|  |  t||g}|  |  ddddgddddgddddgg}|j|kst|j|kstt d\} }}}	t| |	d | |	 |d  |d | | |d  |d |	 | |	d  g}
t|
g }|  t|
g }|  ddddddgg}|j|ksRt|j|ksbtt d	\} }}t| |d
 |d
 || d |d |d  d |d |d  d g}t||g}|  |  t||g}|  |  ddddgddddgdddd
gddddgddddgddddgddddgddddgddddgd
dddgddddgddd
dgddddgddddgdd
dd gdd!d"dgd#ddd$gdd%d&d'gd'd(ddgddd)d)gd)d*d+dgd$ddd#gdd,d-dgdd-d,dgd.ddd/gd0dd(d1gd2d)dd3gdd4d5d(gd(d6d7dgd8ddd9gd:ddd7gdd8d;d<gd<d=d>dgd/ddd.gdd"d!dgd dddgdd?d@dAgdAdBd9dgdd:dCdgddDdEdgdFdd'dGgd6d'ddCgdDdd<dHgdId<ddJgd?d dAdKgdLdAd dEgd!dFdMdNgdNdOdJd!gd"d/dPdQgdQdRd$d"gd%d#dSdTgdUdSd#d+gd,d$dRdVgdTdWdXd%gd1d&d%d0gd&dYdZd[gd[d\dGd&gd*d2d]d^gd^d_d`d*gd3d+d*d2gd+dXdWdUgdVdPd/d,gd-d0dadbgdbdcd3d-gd4d.dddegdfddd.d>gdgdad0dXgdYd1dhdigdjdhd1d5gdkd]d2d`gdXd3dcdggdedldmd4gdnd5d4dogd5dpdqdjgdCdrdsd6gdod7d6dngd7dtdud:gd9dudtd8gdvd;d8dwgdxd9dBdygdzdCd:d{gd;d|d}dBgdBdLdHd;gd=dId~dgdddd=gdwd>d=dvgd>dmdldfgdKddd?gdyd@d?dxgd@dddgdddKd@gdHdddDgd{dEdDdzgdEdddLgdGdsdrdFgddMdFdgddGd\dgddHdLdgdJdddIgdd~dIdgddJdOdgddKddgdMddd\gd\dddMgddNdQdgddQdNdgdOddd~gd~dddOgdPddddgdddddPgdRdddSgdSdddRgddTd[dgdd[dTdgddUd^dgdd^dUdgddVdbdgddbdVdgdWdddgddddWgdidqdpdYgddZdYdgdZdddgddddZgd]dddcgdcddd]gd_dddgdddd_gd`d`d_dkgdadddhgdhdddagddedjdgddjdedgddfddgdddfdgddgddgdddgdgddiddgdddidgddkddgdddkdgdldddgddddlgdmdwddgdddodmgdpdnddgdddndsgdtdoddgddddpgdqdddgddddqgdrdzddgddddrgdsdddgdddwdtgdudxddgddd{dugd|dvddgdddvdgdddxdgddyddgdddyd}gdddzdgdd{ddgdddd|gdd}d|dgd}dddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddd dgddddgddddgddddgddddgddddgddddgd	ddd
gddddgddddgddddgddddgd
ddd	gdd ddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgdddd gddddgd!ddd"gdd#d$dgddddgddddgdd%d&dgddddgddddgdd'd(d)gd)d*ddgdÐd+d,dgddddgdd-d.dgddĐd/d/gd/d0d1dgd dddgdd,d+dgdd.d-dgd"ddd!gdd2d3dgddddgd4ddd5gd6ddҐd7gddddgd8ddd9gd5ddǐd4gd:ddd;gd<ddd=gdd3d2dgd7ddd6gd>dd*d?gd@d/dĐdAgdŐdBdCdgdҐdDdEdgdFddɐdGgdHddƐdEgdǐdFdIdgddJdKdgdȐdLdMdgdِdNdGdgdʐdHdOdgdːdPdQdgdRddѐdSgdDdd̐dOgdPddԐdTgdUdd͐dVgdLddאdWgdXddΐdQgdϐdRdYdgddZdVdgdАd[d\d*gd*d]dSdgdӐd^d_dgdؐdXdTdgdՐdUd`dgddadbdgd֐dcdddgdݐdedWdgdfddߐdggdeddڐdMgdNdddIgdhddېdigdcdddjgdkddܐd_gdldddmgdnddސddgd^dddogdpdddbgddfdqdrgdrdsdidgddldtdugdudvdgdgddhdwdxgdxdydzdgd9ddd8gddddgdd{d|dgddndjdgddkdodgdd}d~dgddddgddddgdddmdgddpddgddddgddddgdZddd`gdadddgddddgddd)dgd]d)ddYgd}ddrdgddrddgd{ddudgddudd~gdddxdgddxddgddddgdddd|gddddgddddgd d
ddgdddd gddddgddddgddddgddddgddddgddddgddddgddddgddddgddd
dgddddgddddgdd	ddgddd	dgddddgddddgddddgddddgddddgddd9dgdd5ddgddddgddddgdd9ddgdd!ddgddddgddd5dgdd6ddgddd"dgddddgddd dgddddgd#dddgdddd&gd'dddgdĐddd$gdŐddd,gd-dddgd%ddǐdgdɐdǐdd1gd,d ddgdƐdd!d-gd2d"ddgddːd̐d#gd;d$d#d:gd$d͐dΐdgdȐdϐdАd%gd=d&d%d<gd&d̐dːdgdÐdΐd͐d'gd?d(d'd>gd(dѐdҐdgdӐdԐdd(gd+d<dՐdgd֐dאdAd+gd.d:dؐdgdِdڐd=d.gd0d@dېdgdܐdݐdސd0gdAd1d0d@gd1dАdϐdgdʐdd6d2gd3d>dߐdgddd;d3gdBd4ddgddd4dKgd[d7ddgddd7dCgdJd8ddgddd8dzgddؐd:dgd͐d;ddgddՐd<dgd̐d=dڐdgddߐd>dgdѐd?ddgddd?d\gddېd@dgdАdAdאdgddddBgdՐdCdBdgdCdddgdOdŐd֐dDgdڐdEdDdgdEdِdƐdHgdGdƐdِdFgddIdFdgddGdNdgddOdHdgdIddʐdNgddddJgdؐdKdJdgdKdddgdWdddLgddMdLdgdMdddegdTdddPgddQdPdgdQdddXgdSd֐dŐdRgdǐdYdRdgdאdSd]dgddTdXdgdVdddUgdd`dUdgddVdZdgddWdedgdYdɐdܐd]gd`ddȐdZgdddd[gdېd\d[dgd\dddgdoddd^gdd_d^dgd_dddkgddĐddagddbdadgdbdddpgdjdddcgddddcdgdddddngdgdddfgddqdfdgddgdvdgdidʐddhgddwdhdgddidsdgddjdndgddodkdgdmdddlgddtdldgddmddgdddpdgdqdddvgdvdddqgdsdddwgdwdddsgdtdddgddddtgdydddgddddygdߐdzdydgdzdddgdddd{gdd|d{dgd|dddgdddd}gdd~d}dgd~dddgddddgddddgddddgddddgddӐdÐdgddddgddddgddȐddgddddgdϐdddgdddĐdgddddgdːdddgddܐdɐdgddddgdݐddԐdgddddgdԐdddgddddgddÐdӐdgddddgdΐdddgddddgddddgddddgddddgddddgddddgddҐdѐdgdҐdddgdސdސdݐdgg}|j|ksZt|j|ksjt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r*|d7 }q*|dksZtd}tt	|j
D ]}|j
| |krl|d7 }ql|dkstt| |d |d  | | |d  | | |d  |d |d  | | |d  | | |d  g}t||g}|  |  t||g}|  |  ddddgg}|j|ksXt|j|kshtd S (  Nr	   r
   r   r   r   r   zr, s, tza, b   r   r         	   
                                                                      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   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   {   |   }   ~                                                                                                                                                                                                                                                                                                                                                                                                         i  i  i  i  i  i  i  i  i	  i
  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i   i!  i"  i#  i$  i%  i&  i'  i(  i)  i*  i+  i,  i-  i.  i/  i0  i1  i2  i3  i4  i5  i6  i7  i8  i9  i:  i;  i<  i=  i>  i?  i@  iA  iB  iC  iD  iE  iF  iG  iH  iI  iJ  iK  iL  iM  iN  iO  iP  iQ  iR  iS  iT  iU  iV  iW  iX  iY  iZ  i[  i\  i]  i^  i_  i`  ia  ib  ic  id  ie  if  ig  ih  ii  ij  ik  il  im  in  io  ip  iq  ir  is  it  iu  iv  iw  ix  iy  iz  i{  i|  i}  i~  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i   )r   r   r   compressstandardizer   r   r   rangelenr   )r   r   r   r   ZC_rC_cZtable1rstZE1Ztable2abZCoxZtable3ZB_2_4Zindex_riZindex_cMZtable4r   r   r   test_coset_enumeration~   sl   ,  "L

D  

































































































































































































      x6   f  r%  c                  C   sD  t d\} }}}t| |d |d |d || d |d |d  |d  | |d |d  |d  | g}|||d g}ddd	d	d	d	gdd	ddd
dgd	dddddgddddddgddddddgddddddgddddddgddddddgddddddgddddd d!gg
}dt_t||}|  |  |jd d |ks@t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/   r0   r1   r2   r3   r4   r5   r6   )	r   r   r   Zmax_stack_sizer   r  r  r   r   )r   r!  r"  r   r   HZ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st|j	ddddgddddggkst|d| |j	ddddgddddgddddggkst|j|dddg||ddgd|ddggks4t|j
d|d |jjd	d
 |j||ddg||ddg||ddggks|t|j	ddddgddddgddddggkst|j
d|| |jjd d	d
 |j||d|d g|||dg||ddggkst|j	ddddgddddgddddggks(t|d|d  |j	ddddgddddgddddgddddggkspt|j||d|d g|||dg||d|gdd|dggkst|
d|d |d  | | | |jjd  |j	ddddgddddgddddgddddggkst|j||d|d g|||dg||d|g||d |dggksRt|
d|| d |jj |j	ddddgddddgddddgddddggkst|j|||d |d g|||dg||d|g||d ||ggkst|d| |j	ddddgddddgddddgddddgddddggks6t|j|||d |d g|||dg||||g||d ||gddd|ggkst|
d|d |jj |j	ddddgddddgddddgddddgddddggkst|j|||d |d g|||||d  g||||g||d ||gdd||d  |ggks:t|
d|| d |jj |j	ddddgddddgddddgddddgddddggkst|j|||d |d g|||||d  g||||g||d ||g||d  ||d  ||d  |ggkstt| |d |d |d |d  | | g}t||g}t||g}	|	j	|j	ksZt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   NF)fillr   )r   r   r   Zmodified_defineZ_grpidentity
generatorsPr   r   Zmodified_scanr   r   )
r   r   r   r   r&  Cr)  Za_0Za_1ZC_mr   r   r   test_modified_methods  s     $




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