o
    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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)   ^/var/www/vscode/kcb/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   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   r7   h  )r   listr   generatelensortsorted)r%   r(   r'   r&   v1v2r)   r)   r*   test_generate'   s*     $ 
rB   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!   rC   rD   rE   r   i r   )r   r   order)r%   r'   r(   r)   r)   r*   
test_order>   s
   rG   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)p_1p_2p_3p_4g_1g_2g_3g_4r)   r)   r*   test_equalityF   s   



rR   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   r8   <   r   r   r    rC   r   r   r   r!   r   r   r   r   r    rC   r   r!   c                 S      g | ]}t |qS r)   r   r/   r)   r)   r*   r2   c       z#test_stabilizer.<locals>.<listcomp>r!   Tr9   )r   r   r   r   r   r    r!   rC   )r   r   r   r   rC   r    r!   r   ))r   r   r   r   r    r   r!   rC   rD   rE   
                              )r   r   r   r   r   r    ra   r!   rD   rE   rX   rY   rZ   r[   r\   r]   r^   rC   r_   r`   )r   r   r   r   r   r    r!   rC   rE   r`   r^   rY   rZ   r[   r\   r]   rD   r_   rX   ra   c                 S   rV   r)   r   r/   r)   r)   r*   r2   p   rW   i r   c                 S   s   g | ]}|  qS r)   )rF   )r0   r&   r)   r)   r*   r2   u   rW   )	r   
stabilizerrH   r   r   rF   r;   r<   basic_stabilizers)SHr%   r'   r&   G0	gens_cubegensG2G2_1vr)   r)   r*   test_stabilizerX   s.   




 rl   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!   rX   r   r   r    rC   r   )r   r   r    )r   r    rC   )r   r   rY   )r   r    rE   r    r   r   )r   centerrF   r	   is_subgroupr   r   r   )iDjkr&   ACr)   r)   r*   test_centerx   s*   rv   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!   rC   r   r   r   )r   centralizerr   r;   rangero   r   r   r   r   r   generate_diminoappendr$   )rd   rt   trivrq   rp   ru   gpgp2elementselementsmallr)   r)   r*   test_centralizer   sX     
r   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 )
NrT   rU   c                 S   rV   r)   r   r/   r)   r)   r*   r2      rW   z#test_coset_rank.<locals>.<listcomp>r   Tr9   r   0   )r   r<   
coset_rankcoset_unrank)rg   rh   r&   rp   hrkh1r)   r)   r*   test_coset_rank   s   

$r   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 )Nr4   r   r   r8   r:   r   r   r   r   r   r    r   )r   r   r   r   r    r   Tc                    s   g | ]
} | |  qS r)   r)   )r0   rp   trrk   r)   r*   r2      s    z%test_coset_factor.<locals>.<listcomp>r5   )r   r   coset_factorr   rF   r.   containsbasic_transversalsrmulry   r=   base)r%   r&   cr'   r(   dr1   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strictr3   r6   Tr   r   r!   )slpd   c                 S   rV   r)   minr0   or)   r)   r*   r2     rW   ztest_orbits.<locals>.<listcomp>c                 S   rV   r)   r   r   r)   r)   r*   r2     rW   r   )r   r   orbitorbitsis_transitiveorbit_transversalr   r   r$   rH   identityr;   ry   r   )r%   r'   r(   r&   transversalslpsrp   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   rV   r)   r   r/   r)   r)   r*   r2     rW   z"test_is_normal.<locals>.<listcomp>r   r   r   r   r   )r   r   r   r   r   x   c                 S   rV   r)   r   r/   r)   r)   r*   r2     rW   )r   r   r   r   r   )r   r   r   r   r   rS   c                 S   rV   r)   r   r/   r)   r)   r*   r2     rW   )r   r   r   r   r   r   r   r   r   r   rZ   c                 S   rV   r)   r   r/   r)   r)   r*   r2     rW   )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   rF   	is_normalnormal_closurerH   ro   r   )gens_s5G1gens_a5ri   gens3G3G4gens5G5G6I5p1p2p3id_re   H_n1H_n2_1H_n2_2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    r   )r   r   r   r   r   r    c                 S   rV   r)   r   r/   r)   r)   r*   r2   ?  rW   ztest_eq.<locals>.<listcomp>)r   r   r   r   r    r   c                 S   rV   r)   )r   )r0   xr)   r)   r*   r2   A  rW   r   r   r!   r   r   r   r    )r   rF   ro   r   r   r   )r%   r(   r   ri   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   rT   rU   c                 S   rV   r)   r   r/   r)   r)   r*   r2   Y  rW   z)test_derived_subgroup.<locals>.<listcomp>rZ   )r   r   derived_subgrouprF   r   ro   )r%   r'   r&   ru   rg   rh   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 )Nr6   r5   r   r   rX   r   )r   r   is_solvabler   sylow_subgroup)r%   r'   r&   Prd   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*   r2   p  rW   ztest_rubik1.<locals>.<listcomp>r   l      c                 S   r   r   r)   r/   r)   r)   r*   r2   s  rW   i  
 r   l    @eE r   i08 )r   r   rF   ro   r   r
   )rh   gens1r   gens2ri   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   rF   r   r   rH   ro   )r&   r   ri   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   @   rZ   r   T    F)r   r   rF   r$   r=   r   r"   )ru   rq   r&   re   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   	orbit_repr   r   r&   re   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      rD   r   )r   r   r   r   r   r   r   r   r   r   )r   r   r   r   )r   schreier_vectorr   r   )r&   rk   re   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!   rY   r   rC   r   r   )r   r   r   er   r    r   r   )_random_prec_n)r   r   r   r   r   r    rE   _random_prec)r   r    r   r   r   r   )r   _random_pr_init_random_gens	random_prr   )rq   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 )2NrX   FT)only_alt)only_symr   r   r   )r   r!   rC   rD   rE   r   r    )r   rD   rC   r!   r   r    r   rE   r   r    rD   rC   )r   r   r   r   r!   rE   r   )	r   rD   r   rC   r   r   r!   rE   r    )r   rC   rE   r!   )r   r    r   r   )	r   r   r   r    r   rD   r   rE   rC   )r!   rE   rD   )r   r   rC   )	r   r   rE   r   r   rD   r!   r    rC   )r   r    r!   r   )r   r   rC   rD   r   rE   )r   r   r   r    )r   r   rE   )N_epsr   r   r   r   r   r    r!   rC   rD   rE   r   )	r   r!   r   r   rC   rD   r    rE   r   )	r   r    rD   r   rE   r   r   r!   rC   )r   rE   rD   r   r   r    )r   r!   rC   r   )r!   rD   rE   )r   r   rC   r   )r   r!   rE   r   )r   rD   r   rC   r    rE   r   r   rE   )r   rD   r   )r   r   rC   r!   )r   rD   r   rC   r   r   )r   r!   rE   r    )r    rD   rC   )r   r   r   r!   )r   rE   r!   )r   r    rC   size   )r   
is_alt_sym_eval_is_alt_sym_naiver   r   r   r   _eval_is_alt_sym_monte_carlo)r&   rd   r   r   rt   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   minimal_blockry   r   Tetrapgroupr   r   )rq   block_systemrp   rd   P1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   minimal_blocksr   )r   r)   r)   r*   test_minimal_blocks	  s   $r   c                  C   s   t d} | jdksJ d S )NrX   r    )r   max_div)rd   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    TrC   r   r   r   r!   r   r   r   F)r   is_primitiver   r   r   )rd   ru   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   randr   r   r   )r   r   random_stab)rd   
_random_elr   r(   r   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 )Nr6   r   r   r   r   )r   r   transitivity_degree)permru   gen1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   r6   r5   r4   r    r(   r   r   r   r   )	r?   r   r   r   r   r   schreier_sims_randomr   rH   )rd   r   strong_gensrq   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   r3   r   F)
randomizedr   r4   T)r   schreier_simsr   r  baseswapr   )rd   r   r  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   r3   )r   Tr    r   r   rC   r   )r   rh   rY   r   )rh   )
r   r   schreier_sims_incrementalr   r   r   r   rH   r   r   )r   TrivialGroupr   r  rd   rq   rt   rh   gen0r  ru   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)   )r0   pointr  r)   r*   r2   v  rW   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  rW   c                 S   s   | j S r  )is_evenr  r)   r)   r*   r  x  s    )init_subgrouprC   r   r   r    r   )r   r  Tc                    s   g | ]} |d u qS )Tr)   )r0   r  )prop_comm_gr)   r*   r2     s    z$_subgroup_search.<locals>.<listcomp>)
ry   r   r   r   subgroup_searchro   rb   r  rH   r   )rp   rr   rs   	prop_trueprop_fix_points	prop_evenrd   rt   ru   Symr	  fix35fix5r   r  comm_gr)   )r(   r  r  r*   _subgroup_searcht  sD   




r(  c                   C   s   t ddd d S )NrX   r]   r   )r(  r)   r)   r)   r*   test_subgroup_search  s   r)  c                   C   s   t d tddd d S )Nr   r^   r_   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   r3   r   r   r   r    r    rw   r   )r   r   r   
is_trivialr   ro   r   r   r   r;   rz   r{   r$   )rd   r   closurert   rp   rq   ru   r}   r   r   r   r~   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 )Nr3   r   r    r!   rC   r   r   r   r   )r   r   derived_seriesro   r   r   r   r,  r|   rp   rt   rd   seriesr)   r)   r*   test_derived_series  s   r3  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 )Nr3   r   r/  r!   r   r   )r   r   lower_central_seriesro   r   r   r=   r1  r)   r)   r*   test_lower_central_series  s   r5  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   r3   r+  rC   r   r    r   )r   r   r   r   r   r    r!   )r   r   r   
commutatorro   r   r   r	   )rd   r|   rt   rp   rq   A1A2r)   r)   r*   test_commutator  s&    

r9  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 )Nrw   r   r    rC   rX   F)r   r	   is_nilpotentr   )rp   ru   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    )ry   r   r   r;   r,  )rp   r|   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   pointwise_stabilizerrH   r   rb   r{   ro   )rd   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   rC   r!   r    r   r   r   r   rC   )r!   rC   r   r   r    r   r   r   )r   r   	make_permr;   ry   r   r)   r)   r)   r*   test_make_perm  s   

rC  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   )sympy.sets.setsrD  r   setr   r   )rD  r1   r)   r)   r*   test_elements%  s   
$rG  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   is_groupr   r)   r)   r)   r*   test_is_group.  s    rI  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   rJ  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   coset_transversalr   r)   r)   r*   test_coset_transvesal8  s   &rL  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   rC   r    r!   )
r   r   r   r   r   r   r   r   r   r   )
r   r    r   r    r!   r   rC   rC   r   r   )
r    r   r    r   r   r!   rD   rD   r!   r!   )
r   r   r   r   rC   rD   r   r   r   r   )
r   r   r   r   r   r   rE   rE   r   r   )
r   r   r   r   r    r    rX   rX   r    r    )
r!   r!   r!   r!   r   r   rY   rY   r   r   )
rE   rX   rD   rX   rY   r   r   r   rC   rC   )
rX   rE   rX   rC   r   rY   r   r   rY   rY   )
rD   rC   rE   rE   rE   rE   r   r   rE   rE   )
rC   rD   rC   rD   rX   rX   r    r    rX   rX   )
rY   rY   rY   rY   rD   rC   r!   r!   rD   rD   )r   r   coset_tabler   r)   r)   r*   test_coset_tableB  s   rN  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   subgroupro   r   r)   r)   r*   test_subgroupO  s   rP  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  )r0   r(   r&   r)   r*   	<genexpr>Y  s    z)test_generator_product.<locals>.<genexpr>)r   r   generator_productallr   )r1   rh   r   r(   r)   rQ  r*   test_generator_productU  s   

rU  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   rZ   rE   rD   rX      Q      r   r`   )r1   r   )
r   r   r   rF   r   r   ry   r4  r=   r   )r   rd   explengthrp   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  )presentationrF   )r   r&   r)   r)   r*   _test  s   z test_presentation.<locals>._testc                 S   s0   |   }t|jt| jk}|o| |  kS r  )strong_presentationr=   rH   r  rF   )r   r&   chkr)   r)   r*   _strong_test  s   z'test_presentation.<locals>._strong_testr   r   r    r   r   rC   r   r!   )r   r   r   r   r   )r^  ra  r   r%   r'   r   r)   r)   r*   test_presentation  s&   2(
rb  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 )Nr3   r   Tr   r   F)r   r   is_polycyclic)r%   r'   r&   r)   r)   r*   test_polycyclic  s   rd  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   rC   Fr   r   r   r   Tr   r    r!   )r   r   is_elementaryr   r   r   )r%   r&   r'   r   re   r)   r)   r*   test_elementary  s   
rf  c                  C   s0   t d} | jdu sJ t d} | jdu sJ d S )Nr   Fr    T)r   
is_perfectrQ  r)   r)   r*   test_perfect  s   rh  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   rO  indexr   r)   r)   r*   
test_index  s   rj  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   rC   r   r   r   Fr    r!   rD   rE   rX   rY   rZ   r[   r\   Trm   )r    rC   r[   )	r   	is_cyclicr	   r   r   r   _distinct_primes_lemma_is_abelianrH   rQ  r)   r)   r*   test_cyclic  sj   








""




rn  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   is_dihedralr	   r   r   r   rQ  r)   r)   r*   test_dihedral/  sF   











rp  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!   rC   rZ   r      )
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   )r    r    r    )r	   abelian_invariantsr   r   r   r   r   r   )r&   rd   r)   r)   r*   test_abelian_invariants\  s4   $
&


rs  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    rD   )
r   r   composition_seriesr0  r   r=   r   r   r   r,  )r%   r'   r&   comp_seriesrd   rt   r2  r)   r)   r*   test_composition_seriesz  s    
rv  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   is_symmetric)r%   r'   r)   r)   r*   test_is_symmetric  s   rx  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   conjugacy_class)rd   r   ru   r)   r)   r*   test_conjugacy_class  s   rz  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)   )r0   r   computedr)   r*   rR    s    z)test_conjugacy_classes.<locals>.<genexpr>)r   r   conjugacy_classesr=   rT  )rd   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   is_right_cosetis_left_cosetas_listr   )
r%   r'   r&   	rht_coset	list_reprr~  ele
left_cosetre   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$   rF   r   r   )r%   r)   r)   r*   test_symmetricpermutationgroup  s   r  N)`sympy.core.containersr   sympy.combinatorics.generatorsr   !sympy.combinatorics.homomorphismsr    sympy.combinatorics.named_groupsr   r   r   r   r	   r
   sympy.combinatorics.perm_groupsr   r   r   r    sympy.combinatorics.permutationsr   sympy.combinatorics.polyhedronr   r   r   sympy.combinatorics.testutilr   r   r   sympy.testing.pytestr   r   r   r   r+   rB   rG   rR   rl   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r(  r)  r*  r.  r3  r5  r9  r<  r=  r@  rC  rG  rI  rJ  rL  rN  rP  rU  r\  rb  rd  rf  rh  rj  rn  rp  rs  rv  rx  rz  r  r  r  r)   r)   r)   r*   <module>   s      .#,
>
"
#	
=
!D-	
&