U
    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AssertionErrorZhasdegreer   )aGbg r&   N/tmp/pip-unpacked-wheel-6t8vlncq/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   r/   h  )r   listr   generater    lensortsorted)r"   r%   r$   r#   Zv1Zv2r&   r&   r'   test_generate'   s.      $&r7   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   <   r8   r   c                 S   s   g | ]}t |qS r&   r   r+   r&   r&   r'   r.   c   s     z#test_stabilizer.<locals>.<listcomp>Tr0   ))r   r   r   r   r   r   r   r8   r9   r:   
                              )r   r   r   r   r   r   rJ   r   r9   r:   rA   rB   rC   rD   rE   rF   rG   r8   rH   rI   )r   r   r   r   r   r   r   r8   r:   rI   rG   rB   rC   rD   rE   rF   r9   rH   rA   rJ   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;   r2   r3   Zbasic_stabilizers)SHr"   r$   r#   ZG0	gens_cubegensG2ZG2_1vr&   r&   r'   test_stabilizerX   s.    

(

2
rR   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   rA   r   )r   r   r8   r   )r   r   r   )r   r   r8   )r   r   rB   )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   r8   r   r   r   )r   Zcentralizerr   r2   rangerT   r    r   r   r   r   r   generate_diminoappendr!   )rL   rY   trivrV   rU   rZ   gpgp2elementselementsmallr&   r&   r'   test_centralizer   sL      
rf   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   r8   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>Tr0   0   )r   r3   
coset_rankr    Zcoset_unrank)rN   rO   r#   rU   hZrk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   r1   Tc                    s   g | ]} | |  qS r&   r&   )r,   rU   trrQ   r&   r'   r.      s     z%test_coset_factor.<locals>.<listcomp>)r   r   Zcoset_factorr    rh   r;   r*   containsZbasic_transversalsrmulr]   r4   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=   identityr2   r]   r   )r"   r$   r%   r#   ZtransversalZslpsrU   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     r@   c                 S   s   g | ]}t |qS r&   r   r+   r&   r&   r'   r.     s     rC   c                 S   s   g | ]}t |qS r&   r   r+   r&   r&   r'   r.     s        Frt   )r   r;   r    	is_normalnormal_closurer=   rT   r   )Zgens_s5G1Zgens_a5rP   Zgens3G3G4Zgens5ZG5ZG6ZI5p1p2Zp3Zid_rM   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    rT   r   r   r   )r"   r%   r   rP   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   r8   r   c                 S   s   g | ]}t |qS r&   r   r+   r&   r&   r'   r.   Y  s     z)test_derived_subgroup.<locals>.<listcomp>rC   )r   r   derived_subgroupr;   r    r   rT   )r"   r$   r#   rZ   rN   rO   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   rA   )r   r   Zis_solvabler    r   sylow_subgroup)r"   r$   r#   PrL   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    rT   r   r
   )rO   Zgens1r   Zgens2rP   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=   rT   )r#   r   rP   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   @   rC   r   T    F)r   r   r;   r    r!   r4   r|   r   )rZ   rV   r#   rM   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#   rM   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      r9   r   r   r   )r   Zschreier_vectorr    r   r   )r#   rQ   rM   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   rB   r   r8   r   r   )r   r~   r   er   r   r   r   )_random_prec_nr:   _random_prec)r   Z_random_pr_initZ_random_gensr    Z	random_prr   )rV   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 )NrA   FT)Zonly_alt)Zonly_symr   r   r   r   r   r8   r9   r:   r   r   )N_epsr   r   r   r   r   r   r   r8   r9   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#   rL   r   r   rY   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   )rV   Zblock_systemrU   rL   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 )NrA   r   )r   Zmax_divr    )rL   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   Tr8   r   r   r   r   r   r   r   F)r   Zis_primitiver    r   r   r   )rL   rZ   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    )rL   Z
_random_elr   r%   ri   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    )permrZ   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   )
r6   r   r   rp   r    r   r   Zschreier_sims_randomr   r=   )rL   rp   strong_gensrV   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   )rL   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   r8   )rp   rO   rB   )rO   )r   r   schreier_sims_incrementalr   r    r   r   r   r=   ro   r   )r}   ZTrivialGrouprp   r   rL   rV   rY   rO   Zgen0r   rZ   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_subgroupr8   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_searchrT   r    rK   r   r=   r   )rU   rW   rX   Z	prop_trueZprop_fix_pointsZ	prop_evenrL   rY   rZ   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 )NrA   rF   r   )r   r&   r&   r&   r'   test_subgroup_search  s    r   c                   C   s   t d tddd d S )Nr   rG   rH   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   rT   r   r   r   r2   r^   r_   r!   )rL   r}   closurerY   rU   rV   rZ   ra   rc   rd   re   rb   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   r8   r   r   )	r   r   derived_seriesrT   r    r   r   r   r   r`   rU   rY   rL   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_seriesrT   r    r   r   r4   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   r8   r   r   r   )	r   r   r   Z
commutatorrT   r    r   r   r	   )rL   r`   rY   rU   rV   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   r8   rA   F)r   r	   Zis_nilpotentr    r   )rU   rZ   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   r2   r   r    )rU   r`   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    rK   r_   rT   )rL   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   r8   r   r   r   r   r   )r   r   Z	make_permr2   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   rc   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   r8   r   r   r9   r:   rA   rB   )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   subgrouprT   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-   rO   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   rC   r:   r9   rA      Q      rw   rI   )r-   r   )r   r   r   r;   r    r   r   r]   r   r4   r   )r   rL   explengthrU   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_presentationr4   r=   r   r;   )r   r#   Zchkr&   r&   r'   _strong_test  s    z'test_presentation.<locals>._strong_testr   r   r   r   r   r8   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   r8   FT)r   r   Zis_elementaryr    r   r   r   )r"   r#   r$   rq   rM   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   r8   r   r   r   Fr   r   r9   r:   rA   rB   rC   rD   rE   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   r8   rC   r      )	r	   Zabelian_invariantsr    r   r   r   r   r   r   )r#   rL   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   r9   )r   r   Zcomposition_seriesr   r    r   r4   r   r   r   r   )r"   r$   r#   Zcomp_seriesrL   rY   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    )rL   r   rZ   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_classesr4   r    r   )rL   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_cosetrM   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(   r7   r<   r?   rR   r[   rf   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-	
&