o
    FZh                     @   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J t g d} t g d}t| |g}|jr'J t| g}|| s3J ||r:J t g d} t g d}t| |jt| |j  krYdks\J  J tt ddd}td||snJ d S )	N   r      r   r   r   r   r   r   r   r            )r   r   r   r   r      r   )r   r   
is_abelianhasdegreer   )aGbg r)   Y/var/www/auris/lib/python3.10/site-packages/sympy/combinatorics/tests/test_perm_groups.pytest_has   s&   





r+   c                  C   sp  t ddg} tt| g }|t ddgt ddggksJ tttt d dks/J t| gjdd}t|t ddgt ddggksJJ t g d} t g d}t| |g}| }dd	 t|D }|  |g d
g dg dg dg dg dgksJ t|jddd}|t|ksJ t g d} t g d}t| |gjdd}tt|dksJ d S )Nr   r   )r   r   Zdimino)methodr   r   c                 S   s   g | ]}|j qS r)   )
array_form.0pr)   r)   r*   
<listcomp>2   s    z!test_generate.<locals>.<listcomp>r   r   r   r   r   r   r   r   r   r   r   r   T)r,   afr   r   r   r   r   r    r   r6   h  )r   listr   generatelensortsorted)r%   r(   r'   r&   v1v2r)   r)   r*   test_generate'   s*     $ 
rA   c                  C   sJ   t g d} t g d}t| |g}| dksJ t  dks#J d S )N)
r   r   r   r   r   r    r!         	   )
r   r   r   r   r    r!   rB   rC   rD   r   i r   )r   r   order)r%   r'   r(   r)   r)   r*   
test_order>   s
   rF   c                  C   s   t ddd} t ddd}t ddd}t ddd}t| |}t||}t|| }t| |}||ks2J |j|jks:J ||sAJ ||ksGJ ||sNJ ||ksTJ d S )Nr   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   



rI   c                  C   s2  t d} | d}|jtdgksJ tg d}tg d}t||g}|d}| dks2J g dg dg}d	d
 |D }t|}|d}| dksRJ |d}	t|	jdd}
|
g dg dgkskJ d}dd
 |D }t|}|d}| dksJ t d} dd
 | jD ddgksJ d S )Nr   r   r   r   r7   <   r   r   r    rB   r   r   r   r!   r   r   r   r   r    rB   r   r!   c                 S      g | ]}t |qS r)   r   r.   r)   r)   r*   r1   c       z#test_stabilizer.<locals>.<listcomp>r!   Tr8   )r   r   r   r   r   r    r!   rB   )r   r   r   r   rB   r    r!   r   ))r   r   r   r   r    r   r!   rB   rC   rD   
                              )r   r   r   r   r   r    rX   r!   rC   rD   rO   rP   rQ   rR   rS   rT   rU   rB   rV   rW   )r   r   r   r   r   r    r!   rB   rD   rW   rU   rP   rQ   rR   rS   rT   rC   rV   rO   rX   c                 S   rM   r)   r   r.   r)   r)   r*   r1   p   rN   i r   c                 S   s   g | ]}|  qS r)   )rE   )r/   r&   r)   r)   r*   r1   u   rN   )	r   
stabilizerrG   r   r   rE   r:   r;   Zbasic_stabilizers)SHr%   r'   r&   ZG0	gens_cubegensG2ZG2_1vr)   r)   r*   test_stabilizerX   s.   




 r`   c                  C   s   dD ]} t | }|  dksJ qdD ]} t | }|  dks%J qdD ]} dD ]}dD ]}t| ||}| |sAJ q0q,q(dD ]} t| }|  dksVJ qFt d	}td
}td}||| |  t||ssJ d S )N)r   r!   rO   r   r   r    rB   r   )r   r   r    )r   r    rB   )r   r   rP   )r   r    rD   r    r   r   )r   centerrE   r	   is_subgroupr   r   r   )iDjkr&   ACr)   r)   r*   test_centerx   s*   rj   c                  C   s  t d} | tttd| sJ td}|tttd|s(J ttg dg}td}|||s?J dD ]0}t |} t|}t	|}t|}| |||fD ]}| |||fD ]}||sot
||soJ qaqYqAt d} t|  }|D ]	}	t
| |	sJ q~td}t| }|D ]	}	t
||	sJ qtd}t| }|D ]	}	t
||	sJ qg }
dD ]}|
t | |
t| |
t| |
t	| q|
D ]}|
D ]}|j|jkrt
||sJ qqd S )Nr   r    )r   r   r   r   r   )r   r    r!   rB   r   r   r   )r   Zcentralizerr   r:   rangerc   r   r   r   r   r   generate_diminoappendr$   )rZ   rh   trivre   rd   ri   gpgp2elementselementsmallr)   r)   r*   test_centralizer   sX     
ru   c                  C   s   g dg dg} dd | D }t |}d}|jddD ]}||}||ks(J |j|dd}||ks5J |d7 }q|d	d u sCJ |||d |d ksSJ d S )
NrK   rL   c                 S   rM   r)   r   r.   r)   r)   r*   r1      rN   z#test_coset_rank.<locals>.<listcomp>r   Tr8   r   0   )r   r;   
coset_rankZcoset_unrank)r\   r]   r&   rd   hZrkZh1r)   r)   r*   test_coset_rank   s   

$ry   c                     s`  t g d} t| g}t g d}||rJ ||d u s!J t g d} t g d}t| |g}| dks;J t g d}||jrIJ ||rPJ t d|v sXJ t g d}||d	|j t j fd
dt	t
|jD  }||ksJ ||t j }||ksJ ||sJ tt g dg}t g d}||g ksJ d S )Nr3   r   r   r7   r9   r   r   r   r   r   r    r   )r   r   r   r   r    r   Tc                    s   g | ]
} | |  qS r)   r)   )r/   rd   trr_   r)   r*   r1      s    z%test_coset_factor.<locals>.<listcomp>r4   )r   r   Zcoset_factorrw   rE   r-   containsZbasic_transversalsrmulrl   r<   base)r%   r&   cr'   r(   dr0   r)   r{   r*   test_coset_factor   s2   
$

r   c                  C   s  t g d} t g d}t| |g}|dh dksJ | h dgks(J | r2|jdds4J |dt g dt g dt g dgksLJ |dd	dt g dfd
t g dfdt g dfgkskJ td}t|j|j	dd	d	d\}}|D ]\}}|| }|j
}	|D ]	}
|j	|
 |	 }	q|	|ksJ q~t ttdddg } t| g}dd | D dgksJ tt }dd | D ddgksJ | s|jddrJ tt dddt dddg}| s|jddsJ tt djdddu sJ d S )Nr   r   r   >   r   r   r   Fstrictr2   r5   Tr   r   r!   )slpd   c                 S   rM   r)   minr/   or)   r)   r*   r1     rN   ztest_orbits.<locals>.<listcomp>c                 S   rM   r)   r   r   r)   r)   r*   r1     rN   r   )r   r   ZorbitorbitsZis_transitiveZorbit_transversalr   r   r$   rG   identityr:   rl   r   )r%   r'   r(   r&   ZtransversalZslpsrd   tr   wsr)   r)   r*   test_orbits   sR   


r   c                  C   sP  dd g dg dfD } t | }| dksJ dd g dg dfD }t |}| d	ks2J ||s9J d
d g dg dfD }t |}||rQJ | dksYJ ||j}| d	ksgJ dd g dg dfD }t |}| dksJ ||j}	|	 dksJ ||	sJ ||rJ ||sJ t td}
|
|sJ |
j|	ddsJ tg d}tg d}tg d}tg d}t ||g}t ||g}t |}t |}t |}||sJ ||sJ ||sJ ||sJ ||sJ ||sJ ||rJ ||r&J d S )Nc                 S   rM   r)   r   r.   r)   r)   r*   r1     rN   z"test_is_normal.<locals>.<listcomp>r   r   r   r   r   )r   r   r   r   r   x   c                 S   rM   r)   r   r.   r)   r)   r*   r1     rN   )r   r   r   r   r   )r   r   r   r   r   rJ   c                 S   rM   r)   r   r.   r)   r)   r*   r1     rN   )r   r   r   r   r   r   r   r   r   r   rQ   c                 S   rM   r)   r   r.   r)   r)   r*   r1     rN   )r   r   r   r   r      r   Fr   r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   )r   rE   	is_normalnormal_closurerG   rc   r   )Zgens_s5G1Zgens_a5r^   Zgens3G3G4Zgens5ZG5ZG6ZI5p1p2Zp3Zid_r[   ZH_n1ZH_n2_1ZH_n2_2ZH_idr)   r)   r*   test_is_normal  sR   r   c                  C   s  g dg dg dg dg} dd | g dg D } t g d}dd | d d | dd	 ||d gfD \}}}| |   krO|   krOd
ksRJ  J ||sYJ ||r`J tt ddgg}||rpJ ||dsxJ t||t|sJ tdtd	dsJ tdtdtd dsJ tdtdtd drJ tdtdtd dsJ d S )N)r   r   r   r   r   r    rz   )r   r   r   r   r   r    c                 S   rM   r)   r   r.   r)   r)   r*   r1   ?  rN   ztest_eq.<locals>.<listcomp>)r   r   r   r   r    r   c                 S   rM   r)   )r   )r/   xr)   r)   r*   r1   A  rN   r   r   r!   r   r   r   r    )r   rE   rc   r   r   r   )r%   r(   r   r^   r   r   r)   r)   r*   test_eq<  s   22  $r   c                  C   s   t g d} t g d}t| |g}| }| dksJ ||s%J ||ds-J ||dr5J g dg dg}dd |D }t|}| }| d	ksTJ d S )
N)r   r   r   r   r   )r   r   r   r   r   r   r   rK   rL   c                 S   rM   r)   r   r.   r)   r)   r*   r1   Y  rN   z)test_derived_subgroup.<locals>.<listcomp>rQ   )r   r   derived_subgrouprE   r   rc   )r%   r'   r&   ri   r\   r]   r)   r)   r*   test_derived_subgroupO  s   r   c                  C   s   t g d} t g d}t| |g}|jsJ t| g}|js!J t g d} t g d}t| |g}|jr8J td}|d}|jsFJ d S )Nr5   r4   r   r   rO   r   )r   r   Zis_solvabler   sylow_subgroup)r%   r'   r&   PrZ   r)   r)   r*   test_is_solvable_  s   




r   c                  C   s   t  } | d gdd | dd  D  }t|}| dksJ dd | D }t|}| dks2J ||ds:J | }| d	ksFJ ||dsNJ ||drVJ td
}| dksbJ d S )Nc                 S      g | ]}|d  qS r   r)   r.   r)   r)   r*   r1   p  rN   ztest_rubik1.<locals>.<listcomp>r   l      c                 S   r   r   r)   r.   r)   r)   r*   r1   s  rN   i  
 r   l    @eE r   i08 )r   r   rE   rc   r   r
   )r]   Zgens1r   Zgens2r^   ZC1r&   r)   r)   r*   test_rubik1n  s    r   c                  C   sn   t d tt } |  dksJ t| d d }| dks!J || r(J | |j}|| s5J d S )Ntakes too much timel      pFoA% r   l     !l )r   r   r   rE   r   r   rG   rc   )r&   r   r^   r)   r)   r*   
test_rubik  s   
r   c                  C   s   t d} td}| |  |  }| dksJ |jdksJ t| dks'J |jdu s.J ||  }| dks:J |jdu sAJ d S )Nr   @   rQ   r   T    F)r   r   rE   r$   r<   r   r"   )ri   re   r&   r[   r)   r)   r*   test_direct_product  s   r   c                  C   sT   t d} | ddtg dtg dfv sJ td|  }|dddu s(J d S )	Nr!   r   r   )r   r   r   r    r   r   )r   r   r   r   r   r    r   r    F)r   Z	orbit_repr   r   r&   r[   r)   r)   r*   test_orbit_rep  s   

r   c                  C   sl   t d} dgd }d|d< | d|ksJ td}|dg dks%J td}|d	g d
ks4J d S )N2   r   r      rC   r   )r   r   r   r   r   r   r   r   r   r   )r   r   r   r   )r   Zschreier_vectorr   r   )r&   r_   r[   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 g dks8J ddd
dd}| j|dtg dksMJ d S )Nr!   rP   r   rB   r   r   )r   r   r   er   r    r   r   )_random_prec_n)r   r   r   r   r   r    rD   _random_prec)r   r    r   r   r   r   )r   Z_random_pr_initZ_random_gensZ	random_prr   )re   rnr   r   r)   r)   r*   test_random_pr  s   

r   c                  C   sn  t d} |  du sJ |  du sJ | jdddu sJ | jdddu s(J td}| du s4J |jdddu s>J |jdddu sHJ d}|tdgddgg d	gtg d
ddggtddgddgg dgtdgg dgtdgg dddgg dgtdgg dgtg dddgg dddggtdgg dgtg dg dgtdgddgg dg dgd}|j|ddu sJ td}| du sJ |jdddu sJ |jdddu sJ |tg ddggtdgg d gtg d!g d"gtg d#ddgg d$dggtdgdgdgg d%dgddggtddgg d&gtdgdd'gg d(g d)gtg d*g d+gtg d,dgg d-dd'ggtg d.ddgddgg d/gd}|j|ddu shJ ttdddd0ddddtdddd0dddd} |  du sJ t d} |  du sJ t d1} |  du sJ t d} |   |  du sJ d S )2NrO   FT)Zonly_alt)Zonly_symr   r   r   )r   r!   rB   rC   rD   r   r    )r   rC   rB   r!   r   r    r   rD   r   r    rC   rB   )r   r   r   r   r!   rD   r   )	r   rC   r   rB   r   r   r!   rD   r    )r   rB   rD   r!   )r   r    r   r   )	r   r   r   r    r   rC   r   rD   rB   )r!   rD   rC   )r   r   rB   )	r   r   rD   r   r   rC   r!   r    rB   )r   r    r!   r   )r   r   rB   rC   r   rD   )r   r   r   r    )r   r   rD   )N_epsr   r   r   r   r   r    r!   rB   rC   rD   r   )	r   r!   r   r   rB   rC   r    rD   r   )	r   r    rC   r   rD   r   r   r!   rB   )r   rD   rC   r   r   r    )r   r!   rB   r   )r!   rC   rD   )r   r   rB   r   )r   r!   rD   r   )r   rC   r   rB   r    rD   r   r   rD   )r   rC   r   )r   r   rB   r!   )r   rC   r   rB   r   r   )r   r!   rD   r    )r    rC   rB   )r   r   r   r!   )r   rD   r!   )r   r    rB   size   )r   Z
is_alt_symZ_eval_is_alt_sym_naiver   r   r   r   Z_eval_is_alt_sym_monte_carlo)r&   rZ   r   r   rh   r)   r)   r*   test_is_alt_sym  sh   "r   c               	   C   s   t d} | ddg}tdD ]}|| ||d  ksJ qtd}|ddgg dks/J tjddgg dks=J 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g d
ksnJ |ddgg d
ks{J d S )Nr!   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r    r   r   r   r   r   r   r   r   )r   Zminimal_blockrl   r   Tetrapgroupr   r   )re   Zblock_systemrd   rZ   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} |  g dg dgks J td} |  dgd gks0J t tdd} |  d	u s?J d S )
Nr   r    r   r   r   r   r   )r   r   r   r   r   r   F)r   r   Zminimal_blocksr   )r   r)   r)   r*   test_minimal_blocks	  s   $r   c                  C   s   t d} | jdksJ d S )NrO   r    )r   Zmax_div)rZ   r)   r)   r*   test_max_div  s   r   c                  C   sn   t d} |  du sJ td}| du sJ tddddd}td	d
ddd}t||}| du s5J d S )Nr    TrB   r   r   r   r!   r   r   r   F)r   Zis_primitiver   r   r   )rZ   ri   r%   r'   r&   r)   r)   r*   test_is_primitive  s   
r   c                  C   s\   t d} tg d}d|i}| jd|d}|tg dksJ | d}|ddks,J d S )Nr    )r   r   r   r   r   Zrandr   r   r   )r   r   Zrandom_stab)rZ   Z
_random_elr   r(   rx   r)   r)   r*   test_random_stab%  s   
r   c                  C   sZ   t g d} t| g}|jdksJ t g d}t g d}t||g}|jdks+J d S )Nr5   r   r   r   r   )r   r   Ztransitivity_degree)permri   gen1Zgen2Altr)   r)   r*   test_transitivity_degree/  s   
r   c                  C   s   t tjjddgksJ td} ddg}tg dtg dtg dg}| ||d||fks2J td}dtg d	tg dtg dgi}ddg}tg dtg d
tg dg}|jg |jd|d||fksnJ d S )Nr   r   r   r5   r4   r3   r    r(   r   r   r   r   )	r>   r   r   r   r   r   Zschreier_sims_randomr   rG   )rZ   r   strong_gensre   r   r)   r)   r*   test_schreier_sims_random:  s(   


r   c                  C   s   t d} |   | j}| j}|g dksJ | j||ddd}| ||d}|d g dks0J t| |d |d du s>J |d g dksHJ t| |d |d du sVJ d S )	Nr   r2   r   F)
randomizedr   r3   T)r   Zschreier_simsr   r   Zbaseswapr   )rZ   r   r   Zdeterministicr   r)   r)   r*   test_baseswapL  s    r   c                  C   sL  t g d} t| g}|jg dd\}}t|||du sJ td}|jg dd\}}t|||du s7J td}|jdgd\}}t|||du sNJ td}|jd d  }|d	 }|d }	t|	| }	t||	}t||	}	|jd	dg|d
\}}t|||du sJ t	d}
|
jd	 }|
j|d gd\}}t|
||du sJ d S )Nr   r2   )r   Tr    r   r   rB   r   )r   r]   rP   r   )r]   )
r   r   schreier_sims_incrementalr   r   r   r   rG   r~   r   )r   ZTrivialGroupr   r   rZ   re   rh   r]   Zgen0r   ri   genr)   r)   r*   test_schreier_sims_incrementalZ  s.   



r   c                    sx  dd }fdd} fdddd }t | ||D ]} t| }t| }t| }||}	|	|s4J ||}
|
|s@J |j||d}	|	|sNJ dg|d||s^J dd	g|dd	||srJ dd
g||}d
g||}|j||d|sJ | \}}|jd  |j||d}t	|||jdu sJ fdd|jD sJ qd S )Nc                 S   s   dS )NTr)   r   r)   r)   r*   <lambda>u  s    z"_subgroup_search.<locals>.<lambda>c                    s    fddD kS )Nc                    s   g | ]} |qS r)   r)   )r/   pointr   r)   r*   r1   v  rN   z6_subgroup_search.<locals>.<lambda>.<locals>.<listcomp>r)   r   )pointsr   r*   r   v  s    c                    s   t |  t  | kS N)r~   r   )r(   r)   r*   r   w  rN   c                 S   s   | j S r   )Zis_evenr   r)   r)   r*   r   x  s    )Zinit_subgrouprB   r   r   r    r   )r   r   Tc                    s   g | ]} |d u qS )Tr)   )r/   r   )prop_comm_gr)   r*   r1     s    z$_subgroup_search.<locals>.<listcomp>)
rl   r   r   r   Zsubgroup_searchrc   rY   r   rG   r   )rd   rf   rg   Z	prop_trueZprop_fix_pointsZ	prop_evenrZ   rh   ri   ZSymr   Zfix35Zfix5r   r   Zcomm_gr)   )r(   r   r   r*   _subgroup_searcht  sD   




r   c                   C   s   t ddd d S )NrO   rT   r   )r   r)   r)   r)   r*   test_subgroup_search  s   r   c                   C   s   t d tddd d S )Nr   rU   rV   r   )r   r   r)   r)   r)   r*   test_subgroup_search2  s   r   c                  C   s<  t d} tg d}| |}|jsJ td}|||s"J dD ]!}t |} t|}t|}t|}|||fD ]	}t| |sDJ q;q$t d} t	| 
 }|D ]	}	t| |	s[J qRg }
dD ]}|
t | |
t| |
t| |
t| q`|
D ]}|
D ]}||dr|j|jkrt||sJ qqd S )Nr   r2   r   r   r   r    r    rk   r   )r   r   r   
is_trivialr   rc   r   r   r   r:   rm   rn   r$   )rZ   r   closurerh   rd   re   ri   rp   rr   rs   rt   rq   r)   r)   r*   test_normal_closure  s>   

r   c                  C   s   t tg dg} |  d | sJ dD ]}t|}| d |s'J qtd}| }|d tds;J |d tdsFJ |d jsMJ d S )Nr2   r   r    r!   rB   r   r   r   r   )r   r   derived_seriesrc   r   r   r   r   ro   rd   rh   rZ   seriesr)   r)   r*   test_derived_series  s   r   c                  C   s   t tg dg} |  d | sJ dD ]}t|}| d |s'J qtd}| }t|dks8J |d tdsCJ d S )Nr2   r   r   r!   r   r   )r   r   lower_central_seriesrc   r   r   r<   r   r)   r)   r*   test_lower_central_series  s   r   c                  C   s  t d} ttg dg}| |||sJ td}| |||s'J dD ]}t |} t|}t|}| ||| ||sFJ q)t d} tdd}tdd}ttg dg}| |||siJ | |||stJ t d} td}| || |sJ d S )	Nr   r2   r   rB   r   r    r   )r   r   r   r   r   r    r!   )r   r   r   Z
commutatorrc   r   r   r	   )rZ   ro   rh   rd   re   A1A2r)   r)   r*   test_commutator  s&    

r   c                  C   s`   dD ]} t | }t| | d }|jsJ |jsJ qtddd}|js%J tdjdu s.J d S )Nrk   r   r    rB   rO   F)r   r	   Zis_nilpotentr   )rd   ri   ZAbr)   r)   r*   test_is_nilpotent  s   

r   c                  C   s2   t dD ]} tttt | g}|jsJ qd S )Nr    )rl   r   r   r:   r   )rd   ro   r)   r)   r*   test_is_trivial  s   r   c                  C   sn   t d} | dg}|jtdgksJ t d} g }| }dD ]}||}|| | ||s4J qd S )Nr   r   r   r    )r   r   r   r   r   )r   Zpointwise_stabilizerrG   r   rY   rn   rc   )rZ   Zstabr   r   r)   r)   r*   test_pointwise_stabilizer  s   

r   c                   C   sT   t jjdttddtg dksJ t jjdttddtg dks(J d S )Nr    )seed)r   rB   r!   r    r   r   r   r   rB   )r!   rB   r   r   r    r   r   r   )r   r   Z	make_permr:   rl   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J | t|j | tddtdks0J d S )Nr   )	FiniteSetr   r   )Zsympy.sets.setsr   r   setr   rr   )r   r0   r)   r)   r*   test_elements%  s   
$r   c                   C   s6   t tddtddjdu sJ tdjdu sJ d S )Nr   r   r   T)r   r   Zis_groupr   r)   r)   r)   r*   test_is_group.  s    r   c                   C   s*   t  t t ks
J t  dkdu sJ d S )Nr   F)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sXJ d S )Nr    r   r   r   r   r   )r   r   r   Zcoset_transversalr   r)   r)   r*   test_coset_transvesal8  s   &r   c                  C   s   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}| |g d	g d
g dg dg dg dg dg dg dg dg dg dgksVJ d S )Nr   r   r   r   r   rB   r    r!   )
r   r   r   r   r   r   r   r   r   r   )
r   r    r   r    r!   r   rB   rB   r   r   )
r    r   r    r   r   r!   rC   rC   r!   r!   )
r   r   r   r   rB   rC   r   r   r   r   )
r   r   r   r   r   r   rD   rD   r   r   )
r   r   r   r   r    r    rO   rO   r    r    )
r!   r!   r!   r!   r   r   rP   rP   r   r   )
rD   rO   rC   rO   rP   r   r   r   rB   rB   )
rO   rD   rO   rB   r   rP   r   r   rP   rP   )
rC   rB   rD   rD   rD   rD   r   r   rD   rD   )
rB   rC   rB   rC   rO   rO   r    r    rO   rO   )
rP   rP   rP   rP   rC   rB   r!   r!   rC   rC   )r   r   Zcoset_tabler   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J d S )Nr   r   r   r   )r   r   subgrouprc   r   r)   r)   r*   test_subgroupO  s   r   c                     sf   t d tddddd}  | }t fdd|D sJ  j}|D ]}|| }q$|| ks1J d S )	Nr    r   r   r   r   r   c                 3   s    | ]}| j v 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   )r0   r]   r   r(   r)   r   r*   test_generator_productU  s   

r   c               	   C   sh  t tddddtdddddd} | d}| dksJ td} | d}| dks0J t tddddtddddddtdd} | d}| dksSJ | d}| d	ks`J td
} | d}| dksqJ | d}| dks~J | d}| dksJ d}d}tddD ]0}t|} | d}| }|d|  dkrt||ksJ t|}|d7 }qt||ksJ qtd}|d}| |  dksJ | |  d dksJ t	d}|d}| |  dksJ | |  d dksJ td}|jdd}| dksJ td}|jdd}| dks2J d S )Nr   r    r   r   r   r   rQ   rD   rC   rO      Q      r   rW   )r0   r   )
r   r   r   rE   r   r   rl   r   r<   r   )r   rZ   explengthrd   Zlsr&   r)   r)   r*   test_sylow_subgroup`  sZ   $

&








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
}| |s'J td}| |s1J td}| |s;J t tdd	ddtd	ddtdddd	g}||sXJ td}||sbJ tdddd	}tddd	d}tdd}t |||}||sJ d S )Nc                 S   s   |   }| |  kS r   )ZpresentationrE   )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_presentationr<   rG   r   rE   )r   r&   Zchkr)   r)   r*   _strong_test  s   z'test_presentation.<locals>._strong_testr   r   r    r   r   rB   r   r!   )r   r   r   r   r   )r  r  r   r%   r'   r   r)   r)   r*   test_presentation  s&   2(
r  c                  C   sh   t g d} t g d}t| |g}|jdu sJ t g d} t g d}t| |g}|jdu s2J d S )Nr2   r   Tr   r   F)r   r   Zis_polycyclic)r%   r'   r&   r)   r)   r*   test_polycyclic  s   r  c                  C   s   t g d} t| g}|ddu sJ t dddd} t dddd}t| |g}|ddu s3J t d	d
d}t| ||g}|ddu sIJ td	d}|ddu sYJ td	d}|ddu siJ d S )N)r   r    r   r   r   r!   r   rB   Fr   r   r   r   Tr   r    r!   )r   r   Zis_elementaryr   r   r   )r%   r&   r'   r   r[   r)   r)   r*   test_elementary  s   
r  c                  C   s0   t d} | jdu sJ t d} | jdu sJ d S )Nr   Fr    T)r   Z
is_perfectr   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 J d S )Nr   r   r   r   r   )r   r   r   indexr   r)   r)   r*   
test_index  s   r
  c                  C   s`  t d} | js	J tdd} | jsJ tdd} | jrJ td} | js&J td} | jr/J ttdddtddd} | jsAJ ttddddtdddd} | jsVJ ttdtddddtddddtdddd} | jdu sxJ 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sJ tddgdu sJ tddgdu sJ tddgd u sJ tg dd u sJ tg ddu sJ ttddddtdddd} | jsJ | jsJ tt dj } | jdu sJ ttddddtddd	} | jsJ ttddtddtddd	} | jdu s.J d S )Nr   r   rB   r   r   r   Fr    r!   rC   rD   rO   rP   rQ   rR   rS   Tra   )r    rB   rR   )	r   Z	is_cyclicr	   r   r   r   Z_distinct_primes_lemmaZ_is_abelianrG   r   r)   r)   r*   test_cyclic  sj   








""




r  c                  C   s`  t d} | js	J t d} | jsJ tdd} | jsJ td} | jr%J tdd} | jr/J td} | js8J td} | jrAJ ttddddtdddddd} | jsZJ ttddddddtddddddd} | jsuJ ttddtddtdd} | jrJ ttddddddtddddddtddddddd} | jsJ d S )Nr   r   r   r    r!   r   r   )r   Zis_dihedralr	   r   r   r   r   r)   r)   r*   test_dihedral/  sF   











r  c               	   C   s  t ddd} |  g dksJ ttddddtddtddg} |  ddgks,J td} |  g ks8J td} |  dgksEJ td} |  ddgksSJ ttdddddddg} |  dgksiJ td	} | d}| dgks{J ttd
ddtd
dd} |  dgksJ ttd
dtd
dddddddg} |  ddgksJ td} | d}| g dksJ | d}| g dksJ | d}| g dksJ d S )Nr   r   r   )r   r   r   r   r    r!   rB   rQ   r      )
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   )r    r    r    )r	   Zabelian_invariantsr   r   r   r   r   r   )r&   rZ   r)   r)   r*   test_abelian_invariants\  s4   $
&


r  c                  C   s   t ddd} t dd}t| |g}| }|| ksJ td}| d |ks+J t| dks5J td}| d |ksCJ t| dksMJ td}| }t|d tds`J t|d tdskJ |d j	srJ d S )Nr   r   r   r   r   r    rC   )
r   r   Zcomposition_seriesr   r   r<   r   r   r   r   )r%   r'   r&   Zcomp_seriesrZ   rh   r   r)   r)   r*   test_composition_seriesz  s    
r  c                  C   s   t ddd} t dddd}t| |jdu sJ t ddd} t dddd}t| |jdu s.J t dddd} t dddd}t| |jdu sGJ d S )Nr   r   r   r   r   TF)r   r   Zis_symmetric)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sAJ d S )Nr   r   r   r   r   r   )r   r   Zconjugacy_class)rZ   r   ri   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s3J t fdd|D s@J d S )Nr   r   r   r   r   c                 3   s    | ]}| v V  qd S r   r)   )r/   r   Zcomputedr)   r*   r     s    z)test_conjugacy_classes.<locals>.<genexpr>)r   r   Zconjugacy_classesr<   r   )rZ   expectedr)   r  r*   test_conjugacy_classes  s   
r  c            
   	   C   s  t dd} t dd}t| |g}||  }|jsJ |jrJ | }t ddt dddt ddt dt dddt dddg}|D ]}||v sIJ qA| | }|jrSJ |jsXJ | }t dddt dddt ddt dt ddt dddg}|D ]}||v sJ q{tt ddddt ddd}tt dddd}t dddd}	t|	||dd}|jsJ | }t ddddt dt ddddt ddddg}|D ]}||v sJ qd S )Nr   r   r   r   r   +)dir)r   r   Zis_right_cosetZis_left_cosetas_listr   )
r%   r'   r&   Z	rht_cosetZ	list_reprr  ZeleZ
left_cosetr[   r(   r)   r)   r*   test_coset_class  sB   






 r  c                  C   s>   t d} | jdksJ |  dksJ |  tdksJ d S )Nr    r   r   )r   r$   rE   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   r~   r+   rA   rF   rI   r`   rj   ru   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   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-	
&