U
    L?h                     @   s  d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZ d dlmZmZmZmZ d dlmZ d dlmZmZ d dlmZmZmZ d d	lmZmZmZ ej Z d
d Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd Z)dd Z*dd Z+d d! Z,d"d# Z-d$d% Z.d&d' Z/ed(d) Z0d*d+ Z1d,d- Z2d.d/ Z3d0d1 Z4d2d3 Z5d4d5 Z6d6d7 Z7d8d9 Z8d:d; Z9d<d= Z:d>d? Z;d@dA Z<dBdC Z=dDdE Z>dFdG Z?dHdI Z@edJdK ZAdLdM ZBdNdO ZCdPdQ ZDdRdS ZEdTdU ZFdVdW ZGdXdY ZHdZd[ ZId\d] ZJd^d_ ZKd`da ZLdbdc ZMddde ZNdfdg ZOdhdi ZPdjdk ZQedldm ZRdndo ZSdpdq ZTdrds ZUdtdu ZVdvdw ZWdxdy ZXdzd{ ZYd|d} ZZd~d Z[dd Z\dd Z]dd Z^dd Z_dS )    )Tuple)rubik_cube_generators)is_isomorphic)SymmetricGroupCyclicGroupDihedralGroupAlternatingGroupAbelianGroup
RubikGroup)PermutationGroup_orbit_transversalCosetSymmetricPermutationGroupPermutation)tetrahedroncube)_verify_bsgs_verify_centralizer_verify_normal_closure)skipXFAILslowc                  C   s   t ddg} t| g}|js tt dddg} t dddg}t| |g}|jrRtt| g}|| sjt||rxtt ddddddg} t dddddg}t| |jt| |j  krdksn ttt ddd}td||std S )N   r                  )r   r   
is_abelianAssertionErrorhasdegreer   )aGbg r'   \/var/www/html/venv/lib/python3.8/site-packages/sympy/combinatorics/tests/test_perm_groups.pytest_has   s&    





r)   c               	   C   s  t ddg} tt| g }|t ddgt ddggks>ttttt d dks^tt| gjdd}t|t ddgt ddggkstt dddg} t dddg}t| |g}| }dd t|D }|  |dddgdddgdddgdddgdddgdddggkstt|jdd	d
}|t|ks@tt ddddddg} t ddddddg}t| |gjd	d}tt|dkstd S )Nr   r   )r   r   Zdimino)methodr   c                 S   s   g | ]
}|j qS r'   )
array_form.0pr'   r'   r(   
<listcomp>2   s     z!test_generate.<locals>.<listcomp>T)r*   afr   r   r   r0   h  )r   listr   generater    lensortsorted)r#   r&   r%   r$   Zv1Zv2r'   r'   r(   test_generate'   s.      $&r8   c                  C   sj   t ddddddddd	d
g
} t dddddddd	d
dg
}t| |g}| dksTtt  dksftd S )Nr   r   r   r   r   r   r         	   i )r   r   orderr    )r#   r%   r&   r'   r'   r(   
test_order>   s
    r=   c                  C   s   t ddd} t ddd}t ddd}t ddd}t| |}t||}t|| }t| |}||ksdt|j|jkstt||st||kst||st||kstd S )Nr   r   r   r   )r   r   r    
generatorsequals)Zp_1Zp_2Zp_3Zp_4Zg_1Zg_2Zg_3Zg_4r'   r'   r(   test_equalityF   s    



r@   c               
   C   sx  t d} | d}|jtdgks&ttddddddg}tddddddg}t||g}|d}| dksttdddddddd	gdddddddd	gg}d
d |D }t|}|d}| d	kst|d}	t|	jdd}
|
ddddddd	dgddddddd	dggkstd}dd |D }t|}|d}| dksNtt d} dd | j	D d	dgksttd S )Nr   r   r   r   r   r   <   r9   r   c                 S   s   g | ]}t |qS r'   r   r,   r'   r'   r(   r/   c   s     z#test_stabilizer.<locals>.<listcomp>Tr1   ))r   r   r   r   r   r   r   r9   r:   r;   
                              )r   r   r   r   r   r   rK   r   r:   r;   rB   rC   rD   rE   rF   rG   rH   r9   rI   rJ   )r   r   r   r   r   r   r   r9   r;   rJ   rH   rC   rD   rE   rF   rG   r:   rI   rB   rK   c                 S   s   g | ]}t |qS r'   r   r,   r'   r'   r(   r/   p   s     i c                 S   s   g | ]}|  qS r'   )r<   )r-   r$   r'   r'   r(   r/   u   s     )
r   
stabilizerr>   r   r    r   r<   r3   r4   Zbasic_stabilizers)SHr#   r%   r$   ZG0	gens_cubegensG2ZG2_1vr'   r'   r(   test_stabilizerX   s.    

(

2
rS   c                  C   s   dD ] } t | }|  dkstqdD ] } t | }|  dks*tq*dD ]6} dD ],}dD ]"}t| ||}| |s`tq`qXqPdD ] } t| }|  dkstqt d	}td
}td}||| |  t||std S )N)r   r   rB   r   )r   r   r9   r   )r   r   r   )r   r   r9   )r   r   rC   )r   r   r;   r   r   r   )	r   centerr<   r    r	   is_subgroupr   r   r   )iDjkr$   ACr'   r'   r(   test_centerx   s&    r\   c                  C   s  t d} | tttd| s(ttd}|tttd|sPtttddddgg}t	d}|||stdD ]`}t |} t|}t
|}t	|}| |||fD ].}| |||fD ]}||st||stqqqt d} t|  }|D ]}	t| |	s tq td}t| }|D ]}	t||	s0tq0t	d}t| }|D ]}	t||	s`tq`g }
d	D ]>}|
t | |
t| |
t	| |
t
| q|
D ]0}|
D ]$}|j|jkrt||stq̐qd S )
Nr   r   r   r   r   r   )r   r   r   r9   r   r   r   )r   Zcentralizerr   r3   rangerU   r    r   r   r   r   r   generate_diminoappendr"   )rM   rZ   trivrW   rV   r[   gpgp2elementselementsmallr'   r'   r(   test_centralizer   sL      
rg   c               	   C   s   ddddddddgddddddddgg} d	d
 | D }t |}d}|jddD ]<}||}||ksht|j|dd}||kst|d7 }qN|dd kst|||d |d kstd S )Nr   r   r   r9   r   r   r   r   c                 S   s   g | ]}t |qS r'   r   r,   r'   r'   r(   r/      s     z#test_coset_rank.<locals>.<listcomp>Tr1   0   )r   r4   
coset_rankr    Zcoset_unrank)rO   rP   r$   rV   hZrkZh1r'   r'   r(   test_coset_rank   s    (

rk   c                     s  t dddg} t| g}t dddg}||r4t||d ksFtt ddddddg} t ddddddg}t| |g}| dkstt ddddddg}||jrt||rtt d|kstt ddddddg}||d|j t j	 fd	d
t
t|jD  }||ks$t||t j	 }||ksFt||sVttt dddgg}t dddg}||g kstd S )Nr   r   r   r   r   r   r2   Tc                    s   g | ]} | |  qS r'   r'   )r-   rV   trrR   r'   r(   r/      s     z%test_coset_factor.<locals>.<listcomp>)r   r   Zcoset_factorr    ri   r<   r+   containsZbasic_transversalsrmulr^   r5   base)r#   r$   cr%   r&   dr.   r'   rl   r(   test_coset_factor   s2    
$

rs   c                  C   s4  t dddg} t dddg}t| |g}|ddddhks@t| dddhgksXt| rl|jddspt|dt dddgt dddgt dddggkst|dddt dddgfdt dddgfdt dddgfgksttd}t|j	|j
dddd\}}|D ]@\}}|| }|j}	|D ]}
|j
|
 |	 }	q*|	|kstqt ttdd	dg } t| g}d
d | D dgksttt }dd | D ddgkst| s|jddrttt dddt dddg}| s|jddsttt djdddks0td S )Nr   r   r   FstrictTr   )slpd   c                 S   s   g | ]}t |qS r'   minr-   or'   r'   r(   r/     s     ztest_orbits.<locals>.<listcomp>c                 S   s   g | ]}t |qS r'   rx   rz   r'   r'   r(   r/     s     r   )r   r   Zorbitr    orbitsZis_transitiveZorbit_transversalr   r   r"   r>   identityr3   r^   r   )r#   r%   r&   r$   ZtransversalZslpsrV   trv   wsr'   r'   r(   test_orbits   sT     
 

 r   c                  C   s  dd dddddgdddddgfD } t | }| dks>td	d dddddgdddddgfD }t |}| d
ks|t||stdd dddddgdddddgfD }t |}||rt| dkst||j}| d
kstdd dddddgdddddgfD }t |}| dks2t||j}	|	 dksPt||	s`t||rpt||stt td}
|
|st|
j|	ddsttdddddg}tdddddg}tdddddg}tdddddg}t ||g}t ||g}t |}t |}t |}||s8t||sHt||sXt||sht||sxt||st||rt||rtd S )Nc                 S   s   g | ]}t |qS r'   r   r,   r'   r'   r(   r/     s     z"test_is_normal.<locals>.<listcomp>r   r   r   r   r   x   c                 S   s   g | ]}t |qS r'   r   r,   r'   r'   r(   r/     s     rA   c                 S   s   g | ]}t |qS r'   r   r,   r'   r'   r(   r/     s     rD   c                 S   s   g | ]}t |qS r'   r   r,   r'   r'   r(   r/     s        Frt   )r   r<   r    	is_normalnormal_closurer>   rU   r   )Zgens_s5G1Zgens_a5rQ   Zgens3G3G4Zgens5ZG5ZG6ZI5p1Zp2Zp3Zid_rN   ZH_n1ZH_n2_1ZH_n2_2ZH_idr'   r'   r(   test_is_normal  sR    &&&&r   c               	   C   s  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d | ddddddgg D } t ddddddg}d	d | d d | dd ||d gfD \}}}| |   kr|   krd
ksn t||st||rttt ddgg}||rt||ds"tt||t|s<ttdtddsVttdtdtd dsxttdtdtd drttdtdtd dstd S )Nr   r   r   r   r   r   c                 S   s   g | ]}t |qS r'   r   r,   r'   r'   r(   r/   ?  s     ztest_eq.<locals>.<listcomp>c                 S   s   g | ]}t |qS r'   )r   )r-   xr'   r'   r(   r/   A  s     r   )r   r<   r    rU   r   r   r   )r#   r&   r   rQ   r   r   r'   r'   r(   test_eq<  s,    *      20""r   c               	   C   s   t dddddg} t dddddg}t| |g}| }| dksHt||sVt||dsft||drvtddddddddgddddddddgg}d	d
 |D }t|}| }| dkstd S )Nr   r   r   r   r   r   r9   r   c                 S   s   g | ]}t |qS r'   r   r,   r'   r'   r(   r/   Y  s     z)test_derived_subgroup.<locals>.<listcomp>rD   )r   r   derived_subgroupr<   r    r   rU   )r#   r%   r$   r[   rO   rP   r'   r'   r(   test_derived_subgroupO  s    (r   c                  C   s   t dddg} t dddg}t| |g}|js2tt| g}|jsFtt dddddg} t dddddg}t| |g}|jrttd}|d}|jstd S )Nr   r   r   r   r   rB   )r   r   Zis_solvabler    r   sylow_subgroup)r#   r%   r$   PrM   r'   r'   r(   test_is_solvable_  s    




r   c                  C   s   t  } | d gdd | dd  D  }t|}| dks>tdd | D }t|}| dksdt||dstt| }| d	kst||dst||drttd
}| dkstd S )Nc                 S   s   g | ]}|d  qS r   r'   r,   r'   r'   r(   r/   p  s     ztest_rubik1.<locals>.<listcomp>r   l      c                 S   s   g | ]}|d  qS r   r'   r,   r'   r'   r(   r/   s  s     i  
 r   l    @eE r   i08 )r   r   r<   r    rU   r   r
   )rP   Zgens1r   Zgens2rQ   ZC1r$   r'   r'   r(   test_rubik1n  s     r   c                  C   sn   t d tt } |  dks"tt| d d }| dksBt|| rPt| |j}|| sjtd S )Ntakes too much timel      pFoA% r   l     !l )	r   r   r   r<   r    r   r   r>   rU   )r$   r   rQ   r'   r'   r(   
test_rubik  s    
r   c                  C   s   t d} td}| |  |  }| dks,t|jdks:tt| dksNt|jdks\t||  }| dkstt|jdkstd S )Nr   @   rD   r   T    F)r   r   r<   r    r"   r5   r|   r   )r[   rW   r$   rN   r'   r'   r(   test_direct_product  s    r   c               	   C   sd   t d} | ddtddddddgtddddddgfks@ttd|  }|dddks`td S )	Nr   r   r   r   r   r   r   F)r   Z	orbit_repr   r    r   r$   rN   r'   r'   r(   test_orbit_rep  s    
r   c               	   C   s|   t d} dgd }d|d< | d|ks,ttd}|dddddddddgksVttd}|dddddgksxtd S )	N2   r   r      r:   r   r   r   )r   Zschreier_vectorr    r   r   )r$   rR   rN   Lr'   r'   r(   test_schreier_vector  s    
"r   c                  C   s   t d} d}d}i }ddddd|d< d	d	d
dd|d
< dddd
d|d< | j|||d | jd dd
dddd	gksxtddd
dd}| j|dtdd	dddd
gkstd S )Nr   rC   r   r9   r   r   )r   r~   r   er   r   r   r   )_random_prec_nr;   _random_prec)r   Z_random_pr_initZ_random_gensr    Z	random_prr   )rW   rnr   r   r'   r'   r(   test_random_pr  s    
r   c                  C   s4  t d} |  dkst|  dks(t| jdddks<t| jdddksPttd}| dksht|jdddks|t|jdddkstd}|tdgddgd	d
dddddggtdddd
ddddgd	dggtddgddgd	dddd
dggtdgd	dddddd
ddg	gtdgdddgdd
gd	dddggtd
gd	ddddddddg	gtd
ddgddgdddgd	dggtdgd	dddddd
ddg	gtddd
dgd	dddddggtdgd
dgddddgd	ddggd}|j|ddksttd}| dkst|jdddkst|jdddks4t|tdd
dddddddg	d	ggtdgd	ddddddd
dg	gtddddddgd	d
ddggtd
ddgddgddddgd	ggtdgdgdgdd
ddgdgd	dggtdd
gd	dddddddggtdgddgdddgd	ddd
ggtddddddgd	d
ddggtdddgdgdddd
gd	dggtddd
gddgddgd	ddggd}|j|ddkstttddddd	ddd
tddddd	ddd
} |  dkstt d} |  dkstt d} |  dkstt d
} |   |  dks0td S )NrB   FT)Zonly_alt)Zonly_symr   r   r   r   r   r9   r:   r;   r   r   )N_epsr   r   r   r   r   r   r   r9   r:   r;   r   size   )	r   Z
is_alt_symr    Z_eval_is_alt_sym_naiver   r   r   r   Z_eval_is_alt_sym_monte_carlo)r$   rM   r   r   rZ   r'   r'   r(   test_is_alt_sym  sh      """"&"""r   c               	   C   s  t d} | ddg}tdD ]}|| ||d  kstqtd}|ddgddddddgksfttjddgddddgkstttddddtdddddd}ttddddddtdddd}|ddgddddddgkst|ddgddddddgkstd S )Nr   r   r   r   r   r   r   )	r   Zminimal_blockr^   r    r   Tetrapgroupr   r   )rW   Zblock_systemrV   rM   ZP1ZP2r'   r'   r(   test_minimal_block  s    " $$"r   c               	   C   s   t tddddtdddddd} |  ddddddgddddddggksPttd} |  dgd gksptt tdd} |  dkstd S )Nr   r   r   r   r   r   F)r   r   Zminimal_blocksr    r   )r   r'   r'   r(   test_minimal_blocks	  s    $,r   c                  C   s   t d} | jdkstd S )NrB   r   )r   Zmax_divr    )rM   r'   r'   r(   test_max_div  s    r   c                  C   sn   t d} |  dksttd}| dks0ttddddd}td	d
ddd}t||}| dksjtd S )Nr   Tr9   r   r   r   r   r   r   r   F)r   Zis_primitiver    r   r   r   )rM   r[   r#   r%   r$   r'   r'   r(   test_is_primitive  s    
r   c                  C   sh   t d} tdddddg}d|i}| jd|d}|tdddddgksJt| d}|ddksdtd S )	Nr   r   r   r   r   r   Zrandr   )r   r   Zrandom_stabr    )rM   Z
_random_elr   r&   rj   r'   r'   r(   test_random_stab%  s    
r   c                  C   sh   t dddg} t| g}|jdks&tt dddddg}t dddddg}t||g}|jdksdtd S )Nr   r   r   r   r   )r   r   Ztransitivity_degreer    )permr[   gen1Zgen2Altr'   r'   r(   test_transitivity_degree/  s    
r   c                  C   s   t tjjddgksttd} ddg}tdddgtdddgtdddgg}| ||d||fksjttd}dtdddgtdddgtdddggi}ddg}tdddgtdddgtdddgg}|jg |j	d|d||fkstd S )Nr   r   r   r   r   r&   r   )
r7   r   r   rp   r    r   r   Zschreier_sims_randomr   r>   )rM   rp   strong_gensrW   r   r'   r'   r(   test_schreier_sims_random:  s(    r   c                  C   s   t d} |   | j}| j}|dddgks.t| j||ddd}| ||d}|d dddgksdtt| |d |d dkst|d dddgkstt| |d |d dkstd S )Nr   r   r   r   F)
randomizedT)r   Zschreier_simsrp   r   r    Zbaseswapr   )rM   rp   r   Zdeterministicr   r'   r'   r(   test_baseswapL  s    r   c                  C   sZ  t dddddg} t| g}|jdddgd\}}t|||dksFttd}|jdddgd\}}t|||dksxttd}|jdgd\}}t|||dksttd	}|jd d  }|d }|d }	t	|	| }	t	||	}t	||	}	|jddg|d
\}}t|||dkstt
d}
|
jd }|
j|d gd\}}t|
||dksVtd S )Nr   r   r   r   r   )rp   Tr   r9   )rp   rP   rC   )rP   )r   r   schreier_sims_incrementalr   r    r   r   r   r>   ro   r   )r}   ZTrivialGrouprp   r   rM   rW   rZ   rP   Zgen0r   r[   genr'   r'   r(   test_schreier_sims_incrementalZ  s.    



r   c                    s~  dd }fdd} fdddd }t | ||D ]B} t| }t| }t| }||}	|	|sjt||}
|
|st|j||d}	|	|stdg|d||stdd	g|dd	||stdd
g||}d
g||}|j||d|s"t| \}}|j	d  |j||d}t
|||j	dks`tfdd|j	D s4tq4d S )Nc                 S   s   dS )NTr'   r   r'   r'   r(   <lambda>u      z"_subgroup_search.<locals>.<lambda>c                    s    fddD kS )Nc                    s   g | ]} |qS r'   r'   )r-   pointr   r'   r(   r/   v  s     z6_subgroup_search.<locals>.<lambda>.<locals>.<listcomp>r'   r   )pointsr   r(   r   v  r   c                    s   t |  t  | kS N)ro   r   )r&   r'   r(   r   w  r   c                 S   s   | j S r   )Zis_evenr   r'   r'   r(   r   x  r   )Zinit_subgroupr9   r   r   r   r   )rp   r   Tc                    s   g | ]} |d kqS )Tr'   )r-   r   )prop_comm_gr'   r(   r/     s     z$_subgroup_search.<locals>.<listcomp>)r^   r   r   r   Zsubgroup_searchrU   r    rL   r   r>   r   )rV   rX   rY   Z	prop_trueZprop_fix_pointsZ	prop_evenrM   rZ   r[   ZSymr   Zfix35Zfix5rp   r   Zcomm_gr'   )r&   r   r   r(   _subgroup_searcht  sB    





r   c                   C   s   t ddd d S )NrB   rG   r   )r   r'   r'   r'   r(   test_subgroup_search  s    r   c                   C   s   t d tddd d S )Nr   rH   rI   r   )r   r   r'   r'   r'   r(   test_subgroup_search2  s    r   c                  C   sH  t d} tdddg}| |}|js*ttd}|||sFtdD ]B}t |} t|}t|}t|}|||fD ]}t	| |sxtqxqJt d} t
|  }|D ]}	t	| |	stqg }
dD ]<}|
t | |
t| |
t| |
t| q|
D ]>}|
D ]2}||dr|j|jkrt	||stqqd S )	Nr   r   r   r   r   r   r   r   r   r]   )r   r   r   
is_trivialr    r   rU   r   r   r   r3   r_   r`   r"   )rM   r}   closurerZ   rV   rW   r[   rb   rd   re   rf   rc   r'   r'   r(   test_normal_closure  s6    

r   c                  C   s   t tdddgg} |  d | s*tdD ]"}t|}| d |s.tq.td}| }|d tdsxt|d tdst|d jstd S )Nr   r   r   r   r   r9   r   r   )	r   r   derived_seriesrU   r    r   r   r   r   ra   rV   rZ   rM   seriesr'   r'   r(   test_derived_series  s    r   c                  C   s   t tdddgg} |  d | s*tdD ]"}t|}| d |s.tq.td}| }t|dksrt|d tdstd S )Nr   r   r   r   r   )r   r   lower_central_seriesrU   r    r   r   r5   r   r'   r'   r(   test_lower_central_series  s    r   c               	   C   s   t d} ttdddgg}| |||s2ttd}| |||sPtdD ]:}t |} t|}t|}| ||| ||sTtqTt d} tdd}tdd}ttddddddd	gg}| |||st| |||stt d} td}| || |std S )
Nr   r   r   r   r   r9   r   r   r   )	r   r   r   Z
commutatorrU   r    r   r   r	   )rM   ra   rZ   rV   rW   A1A2r'   r'   r(   test_commutator  s&     

r   c                  C   s`   dD ].} t | }t| | d }|js(t|jstqtddd}|jsJttdjdks\td S )Nr]   r   r   r9   rB   F)r   r	   Zis_nilpotentr    r   )rV   r[   ZAbr'   r'   r(   test_is_nilpotent  s    

r   c                  C   s2   t dD ]$} tttt | g}|jstqd S )Nr   )r^   r   r   r3   r   r    )rV   ra   r'   r'   r(   test_is_trivial  s    r   c                  C   sn   t d} | dg}|jtdgks(tt d} g }| }dD ],}||}|| | ||s<tq<d S )Nr   r   r   r   )r   r   r   r   r   )r   Zpointwise_stabilizerr>   r   r    rL   r`   rU   )rM   Zstabr   r   r'   r'   r(   test_pointwise_stabilizer  s    

r   c                
   C   sl   t jjdttddtdddddddd	gks4tt jjdttddtdddddddd	gkshtd S )
Nr   )seedr   r9   r   r   r   r   r   )r   r   Z	make_permr3   r^   r   r    r'   r'   r'   r(   test_make_perm  s    r   c                  C   sd   ddl m}  tdd}tt|jtdtddhks:t| t|j | tddtdks`td S )Nr   )	FiniteSetr   r   )Zsympy.sets.setsr   r   setr   rd   r    )r   r.   r'   r'   r(   test_elements%  s    
$r   c                   C   s6   t tddtddjdks ttdjdks2td S )Nr   r   r   T)r   r   Zis_groupr    r   r'   r'   r'   r(   test_is_group.  s     r   c                   C   s*   t  t t kstt  dkdks&td S )Nr   F)r   r   r    r'   r'   r'   r(   test_PermutationGroup3  s    r   c                  C   s   t d} ttdddtdddd}| |tdtdddtdddtdddtddddtddddtdddddtdddddtdddddtdddddg
kstd S )Nr   r   r   r   r   r   )r   r   r   Zcoset_transversalr    r   r'   r'   r(   test_coset_transvesal8  s    
    r   c                  C   sr  t tddddtdddtddddtddtdd} t tddddtdd}| |ddddddddddg
ddddddddddg
ddddddd	d	ddg
dddddd	ddddg
ddddddd
d
ddg
ddddddddddg
ddddddddddg
d
dd	dddddddg
dd
ddddddddg
d	dd
d
d
d
ddd
d
g
dd	dd	ddddddg
ddddd	dddd	d	g
gksntd S )Nr   r   r   r   r   r9   r   r   r:   r;   rB   rC   )r   r   Zcoset_tabler    r   r'   r'   r(   test_coset_tableB  s(      ,     r   c                  C   s@   t tdddtddd} | tdddg}|| s<td S )Nr   r   r   r   )r   r   subgrouprU   r    r   r'   r'   r(   test_subgroupO  s    r   c                     sf   t d tddddd}  | }t fdd|D s>t j}|D ]}|| }qH|| ksbtd S )	Nr   r   r   r   r   r   c                 3   s   | ]}| j kV  qd S r   )r   )r-   r&   r$   r'   r(   	<genexpr>Y  s     z)test_generator_product.<locals>.<genexpr>)r   r   Zgenerator_productallr    r}   )r.   rP   r   r&   r'   r   r(   test_generator_productU  s    

r   c               	   C   sx  t tddddtdddddd} | d}| dks>ttd} | d}| dks`tt tddddtddddddtdd} | d}| dkst| d}| d	ksttd
} | d}| dkst| d}| dkst| d}| dkstd}d}tddD ]h}t|} | d}| }|d|  dkr~t	||ksltt	|}|d7 }nt	||ks*tq*td}|d}| |  dkst| |  d dkstt
d}|d}| |  dks
t| |  d dks(ttd}|jdd}| dksNttd}|jdd}| dksttd S )Nr   r   r   r   r   r   rD   r;   r:   rB      Q      rw   rJ   )r.   r   )r   r   r   r<   r    r   r   r^   r   r5   r   )r   rM   explengthrV   Zlsr$   r'   r'   r(   test_sylow_subgroup`  s^    $

  








r   c                  C   s  dd } dd }t tddddd	d
ddtdd	dddddd
}| |sNttd}| |sbttd}| |svtt tdd	ddtd	ddtdddd	g}||sttd}||sttdddd	}tddd	d}tdd}t |||}||std S )Nc                 S   s   |   }| |  kS r   )Zpresentationr<   )r   r$   r'   r'   r(   _test  s    z test_presentation.<locals>._testc                 S   s0   |   }t|jt| jk}|o.| |  kS r   )Zstrong_presentationr5   r>   r   r<   )r   r$   Zchkr'   r'   r(   _strong_test  s    z'test_presentation.<locals>._strong_testr   r   r   r   r   r9   r   r   )r   r   r    r   r   r   )r   r   r   r#   r%   rq   r'   r'   r(   test_presentation  s&    2(
r   c                  C   sx   t dddg} t dddg}t| |g}|jdks6tt dddddg} t dddddg}t| |g}|jdksttd S )Nr   r   r   Tr   r   F)r   r   Zis_polycyclicr    )r#   r%   r$   r'   r'   r(   test_polycyclic  s    r   c                  C   s   t dddddddg} t| g}|dd	ks2tt dddd} t dddd}t| |g}|dd
ksptt ddd}t| ||g}|dd	ksttdd}|dd	ksttdd}|dd
kstd S )Nr   r   r   r   r   r   r   r9   FT)r   r   Zis_elementaryr    r   r   r   )r#   r$   r%   rq   rN   r'   r'   r(   test_elementary  s    
r   c                  C   s0   t d} | jdkstt d} | jdks,td S )Nr   Fr   T)r   Z
is_perfectr    r   r'   r'   r(   test_perfect  s    r   c                  C   sD   t tdddtddd} | tdddg}| |dks@td S )Nr   r   r   r   r   )r   r   r   indexr    r   r'   r'   r(   
test_index  s    r   c                  C   st  t d} | jsttdd} | js&ttdd} | jr:ttd} | jsLttd} | jr^tttdddtddd} | jstttddddtdddd} | jstttdtddddtddddtdddd} | jdkstttddddddd	dd
ddddddtdddd	d
dddddddddd} | jsFttddgdks^ttddgdksvttddgd ksttdddgd ksttdddgdkstttddddtdddd} | jst| jsttt dj	 } | jdkstttddddtddd	} | js@tttddtddtddd	} | jdksptd S )Nr   r   r9   r   r   r   Fr   r   r:   r;   rB   rC   rD   rE   rF   T)
r   Z	is_cyclicr    r	   r   r   r   Z_distinct_primes_lemmaZ_is_abelianr>   r   r'   r'   r(   test_cyclic  sj    








""

r   c                  C   sd  t d} | jstt d} | js$ttdd} | js8ttd} | jrJttdd} | jr^ttd} | jspttd} | jrtttddddtdddddd} | jstttddddddtddddddd} | jstttddtddtdd} | jrtttddddddtddddddtddddddd} | js`td S )Nr   r   r   r   r   r   r   )r   Zis_dihedralr    r	   r   r   r   r   r'   r'   r(   test_dihedral/  sH    










 r   c                  C   s  t ddd} |  dddgks"tttddddtddtddg} |  ddgksZttd} |  g ksrttd} |  dgksttd} |  ddgkstttdddddddg} |  dgksttd} | d}| dgkstttd	ddtd	dd} |  dgks&tttd	dtd	dddddddg} |  ddgksbttd
} | d}| ddddddddddg
kst| d}| ddddgkst| d}| dddgkstd S )Nr   r   r   r   r   r   r9   rD   r      )	r	   Zabelian_invariantsr    r   r   r   r   r   r   )r$   rM   r'   r'   r(   test_abelian_invariants\  s4    $
&
&

r   c                  C   s   t ddd} t dd}t| |g}| }|| ks:ttd}| d |ksVtt| dksjttd}| d |kstt| dksttd}| }t	|d tdstt	|d tdst|d j
std S )Nr   r   r   r   r   r   r:   )r   r   Zcomposition_seriesr   r    r   r5   r   r   r   r   )r#   r%   r$   Zcomp_seriesrM   rZ   r   r'   r'   r(   test_composition_seriesz  s     
r   c                  C   s   t ddd} t dddd}t| |jdks.tt ddd} t dddd}t| |jdks\tt dddd} t dddd}t| |jdkstd S )Nr   r   r   r   r   TF)r   r   Zis_symmetricr    )r#   r%   r'   r'   r(   test_is_symmetric  s    r   c                  C   s   t d} tddd}tdddddtdddtdddddtdddtdddtdddtdddtdddh}| ||kstd S )Nr   r   r   r   r   r   )r   r   Zconjugacy_classr    )rM   r   r[   r'   r'   r(   test_conjugacy_class  s     

 

 
r   c                     s   t d} tddhtddddtddtddhtdddtdddhg}|   t|t ksftt fdd|D std S )Nr   r   r   r   r   c                 3   s   | ]}| kV  qd S r   r'   )r-   r   Zcomputedr'   r(   r     s     z)test_conjugacy_classes.<locals>.<genexpr>)r   r   Zconjugacy_classesr5   r    r   )rM   expectedr'   r   r(   test_conjugacy_classes  s    
r   c            
   	   C   s  t dd} t dd}t| |g}||  }|js2t|jr<t| }t ddt dddt ddt dt dddt dddg}|D ]}||kstq| | }|jrt|jst| }t dddt dddt ddt dt ddt dddg}|D ]}||kstqtt ddddt ddd}tt dddd}t dddd}	t|	||dd}|jsbt| }t ddddt dt ddddt ddddg}|D ]}||kstqd S )Nr   r   r   r   r   +)dir)r   r   Zis_right_cosetr    Zis_left_cosetZas_listr   )
r#   r%   r$   Z	rht_cosetZ	list_reprr   ZeleZ
left_cosetrN   r&   r'   r'   r(   test_coset_class  sH    



  


  
 r  c                  C   s>   t d} | jdkst|  dks&t|  tdks:td S )Nr   r   r   )r   r"   r    r<   r}   r   )r#   r'   r'   r(   test_symmetricpermutationgroup  s    r  N)`Zsympy.core.containersr   Zsympy.combinatorics.generatorsr   Z!sympy.combinatorics.homomorphismsr   Z sympy.combinatorics.named_groupsr   r   r   r   r	   r
   Zsympy.combinatorics.perm_groupsr   r   r   r   Z sympy.combinatorics.permutationsr   Zsympy.combinatorics.polyhedronr   r   r   Zsympy.combinatorics.testutilr   r   r   Zsympy.testing.pytestr   r   r   ro   r)   r8   r=   r@   rS   r\   rg   rk   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r'   r'   r'   r(   <module>   s     .#,
>
"
#	
=
!D-	
&