
    sh                     T   S SK Jr  S SKJr  S SKJr  S SKJrJrJ	r	J
r
JrJr  S SKJrJrJrJr  S SKJr  S SKJrJr  S SKJrJrJr  S S	KJrJrJr  \R@                  r S
 r!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S r.S r/\S 5       r0S r1S r2S r3S r4S r5S r6S  r7S! r8S" r9S# r:S$ r;S% r<S& r=S' r>S( r?S) r@\S* 5       rAS+ rBS, rCS- rDS. rES/ rFS0 rGS1 rHS2 rIS3 rJS4 rKS5 rLS6 rMS7 rNS8 rOS9 rPS: rQ\S; 5       rRS< rSS= rTS> rUS? rVS@ rWSA rXSB rYSC rZSD r[SE r\SF r]SG r^SH r_gI)J    )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                  Z   [        SS/5      n [        U /5      nUR                  (       d   e[        / SQ5      n [        / SQ5      n[        X/5      nUR                  (       a   e[        U /5      nUR                  U 5      (       d   eUR                  U5      (       a   e[        / SQ5      n [        / SQ5      n[        X5      R                  [        X5      R                  s=:X  a  S:X  d   e   e[        [        SSS5      5      n[        SU5      R                  U5      (       d   eg )	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gs       ~/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/sympy/combinatorics/tests/test_perm_groups.pytest_hasr+      s   QFA!A<<<IAIA! A||!A5588O8uuQxx<&'AO$AA!((%%+)*+ + + + + 	Q1-.AA;??1    c            	         [        SS/5      n [        [        U /5      R                  5       5      nU[        SS/5      [        SS/5      /:X  d   e[	        [        [        [        S5      5      R                  5       5      5      S:X  d   e[        U /5      R                  SS9n[        U5      [        SS/5      [        SS/5      /:X  d   e[        / SQ5      n [        / SQ5      n[        X/5      nUR                  5       n[        U5       Vs/ s H  oDR
                  PM     nnUR                  5         U/ SQ/ S	Q/ S
Q/ SQ/ SQ/ SQ/:X  d   e[        UR                  SSS95      nU[        U5      :X  d   e[        / SQ5      n [        / SQ5      n[        X/5      R                  SS9n[	        [        U5      5      S:X  d   eg s  snf )Nr   r   )r   r   dimino)methodr   r   r   r   r   r   r   r   r   r   r   r   r   r   T)r/   afr   r   r   r   r    r!   r   r4   h  )r   listr   generatelen
array_formsortsorted)r&   r)   r(   r'   pv1v2s          r*   test_generaterA   '   s   QFAqc"++-.AaV$k1a&&9::::t$[%89BBDEF!KKK!&&h&7A7{Aq6*KA,?@@@@IAIA! A	

A $Q	(1,,B	(GGI)Y	9 ?   	ajjTj2	3B&'A&'A! ))T)2AtAw<3 
)s   G	c                      [        / SQ5      n [        / SQ5      n[        X/5      nUR                  5       S:X  d   e[        5       R                  5       S:X  d   eg )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)   s      r*   
test_orderrG   >   sR    23A23A! A779##%***r,   c                     [        SSS5      n [        SSS5      n[        SSS5      n[        SSS5      n[        X5      n[        X#5      n[        X5      n[        X5      nXE:w  d   eUR                  UR                  :w  d   eUR                  U5      (       d   eXF:w  d   eUR                  U5      (       d   eXG:X  d   eg )Nr   r   r   r   )r   r   
generatorsequals)p_1p_2p_3p_4g_1g_2g_3g_4s           r*   test_equalityrS   F   s    
aA
C
aA
C
aA
C
aA
C
3
$C
3
$C
3
$C
3
$C::>>S^^+++::c???::::c???::r,   c                  \   [        S5      n U R                  S5      nUR                  [        S5      /:X  d   e[        / SQ5      n[        / SQ5      n[	        X#/5      nUR                  S5      nUR                  5       S:X  d   e/ SQ/ SQ/nU Vs/ s H  n[        U5      PM     nn[	        U5      nUR                  S5      n	U	R                  5       S	:X  d   eU	R                  S5      n
[        U
R                  S
S95      nU/ SQ/ SQ/:X  d   eSnU Vs/ s H  n[        U5      PM     nn[	        U5      nUR                  S5      n	U	R                  5       S:X  d   e[        S5      n U R                   Vs/ s H  oDR                  5       PM     snS	S/:X  d   eg s  snf s  snf s  snf )Nr   r   r   r   r5   <   r   r   r!   rC   r   r   r    r"   r   r   r   r   r!   rC   r    r"   r"   Tr6   )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   i r   )	r   
stabilizerrI   r   r   rF   r8   r9   basic_stabilizers)SHr&   r(   r'   G0	gens_cuber>   gensG2G2_1vs               r*   test_stabilizerrl   X   s   qA	QA<<KN++++&'A&'A! A	
aB88:)+CDI$-.IqKNID.A	
aB88:??==DT]]d]#$A)+CDDDDPD
 %))DqKNDD)A	
aB88:qA 2232!GGI231v===% / *
 4s   FF$:F)c                     S H2  n [        U 5      nUR                  5       R                  5       S:X  a  M2   e   S H2  n [        U 5      nUR                  5       R                  5       S:X  a  M2   e   S HG  n S H>  nS H5  n[        XU5      nUR                  5       R	                  U5      (       a  M5   e   M@     MI     S H2  n [        U 5      nUR                  5       R                  5       S:X  a  M2   e   [        S	5      n[        S
5      n[        S5      nWR	                  X-  U-  5        [        XD5      (       d   eg )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Cs          r*   test_centerrw   x   s$   !
!!#q(((  !
!!#q(((  A q)xxz--a0000     Q
!!#q(((  	aAAAAMM!#a%q$$$$r,   c            	         [        S5      n U R                  [        [        [	        S5      5      5      5      R                  U 5      (       d   e[        S5      nUR                  [        [        [	        S5      5      5      5      R                  U5      (       d   e[        [        / SQ5      /5      n[        S5      nUR                  U5      R                  U5      (       d   eS Ho  n[        U5      n [        U5      n[        U5      n[        U5      nXXS4 H8  nXXS4 H-  nUR                  U5      (       a  M  [        Xg5      (       a  M-   e   M:     Mq     [        S5      n [        U R                  5       5      nU H  n	[        X	5      (       a  M   e   [        S5      n[        UR                  5       5      nU H  n	[        X5      (       a  M   e   [        S5      n[        UR                  5       5      nU H  n	[        X95      (       a  M   e   / n
S Hk  nU
R                  [        U5      5        U
R                  [        U5      5        U
R                  [        U5      5        U
R                  [        U5      5        Mm     U
 H:  nU
 H1  nUR                  UR                  :X  d  M  [        Xg5      (       a  M1   e   M<     g )Nr   r!   )r   r   r   r   r    )r    r!   r"   rC   r   r   r   )r   centralizerr   r8   rangerp   r	   r   r   r   r   generate_diminoappendr%   )rd   ru   trivrr   rq   rv   gpgp2elementselementsmalls              r*   test_centralizerr      sQ   qA==T%(^45AA!DDDDA==T%(^45AA!DDDD[678DaAA**400001QN!,Ba|r**.r7777 $   	qAA%%'(H"1.... AA%%'(H"1.... aAA%%'(H"1....  E^A&'%a()]1%&[^$	 
 CyyCJJ&*23333  r,   c                     / SQ/ SQ/n U  Vs/ s H  n[        U5      PM     nn[        U5      nSnUR                  SS9 H7  nUR                  U5      nXd:X  d   eUR	                  USS9nXW:X  d   eUS-  nM9     UR	                  S5      b   eUR	                  UR                  US   5      5      US   :X  d   eg s  snf )NrV   rW   r   Tr6   r   0   )r   r   r9   
coset_rankcoset_unrank)rg   r>   rh   r'   rq   hrkh1s           r*   test_coset_rankr      s    )+CDI$-.IqKNID.A	AZZ4Z \\!_ww^^B4^(ww	Q ! >>"%%%>>!,,tAw/0DG;;; /s   B<c                     [        / SQ5      n [        U /5      n[        / SQ5      nUR                  U5      (       a   eUR                  U5      b   e[        / SQ5      n [        / SQ5      n[        X/5      nUR	                  5       S:X  d   e[        / SQ5      nUR                  UR
                  5      (       a   eUR                  U5      (       a   e[        S5      U;   d   e[        / SQ5      nUR                  US	5      nUR                  n[         R                  " [        [        UR                  5      5       Vs/ s H  oU   Xh      PM     sn6 n	X:X  d   eUR                  U5      n[         R                  " U6 n	X:X  d   eUR                  U5      (       d   e[        [        / SQ5      /5      n[        / S
Q5      n	UR                  U	5      / :X  d   eg s  snf )Nr1   r   r   r5   r7   r   r   r   r   r    r!   r   )r   r   r   r   r!   r    Tr2   )r   r   coset_factorr   rF   r;   containsbasic_transversalsrmulr{   r:   base)
r&   r'   cr(   r)   drk   trrq   r>   s
             r*   test_coset_factorr      s   IA!AIA~~a    <<?"""&'A&'A! A779&'A~~all++++zz!}}q>Q&'A	q$A	
		Bc!&&k0BC0B1a5;0BCDA6M6	qA!A6M6::a===+i012AIA>>!""" Ds   Gc                  ~   [        / SQ5      n [        / SQ5      n[        X/5      nUR                  S5      1 Sk:X  d   eUR                  5       1 Sk/:X  d   eUR	                  5       (       a  UR	                  SS9(       d   eUR                  S5      [        / SQ5      [        / SQ5      [        / SQ5      /:X  d   eUR                  SS	5      S[        / SQ5      4S
[        / SQ5      4S[        / SQ5      4/:X  d   e[        S5      n[        UR                  UR                  SS	S	S9u  pEU H7  u  pgXV   nUR                  n	U H  n
UR                  U
   U	-  n	M     X:X  a  M7   e   [        [        [        SS5      5      S/-   5      n [        U /5      nUR                  5        Vs/ s H  n[        U5      PM     snS/:X  d   e[        [        5       5      nUR                  5        Vs/ s H  n[        U5      PM     snSS/:X  d   eUR	                  5       (       d  UR	                  SS9(       a   e[        [        SSS5      [        S5      " SS5      /5      nUR	                  5       (       d  UR	                  SS9(       d   e[        [        S5      5      R	                  SS9SL d   eg s  snf s  snf )Nr   r   r   >   r   r   r   Fstrictr0   r3   Tr   r   r"   )slpd   r   )r   r   orbitorbitsis_transitiveorbit_transversalr   r   r%   rI   identityr8   r{   minr   )r&   r(   r)   r'   transversalslpsrq   tr   wsos               r*   test_orbitsr      s   IAIA! A771:"""88:)$$$??!>>>q!	
#I.I0F	HH H H q$'
[#	$q+i*@&A	
K	"#	%% % % 	aA*188Q\\1dPTUKgJJAQ!A vv  	Dq#'1#-.A!AHHJ'JqCFJ'A3....01AHHJ'JqCFJ'Aq6111  )FFF+aA.Aq!0DEFA  Q__E_%BBBA%U3u= = = ('s   ,J50J:c                     / SQ/ SQ4 V s/ s H  n [        U 5      PM     nn [        U5      nUR                  5       S:X  d   e/ SQ/ SQ4 V s/ s H  n [        U 5      PM     nn [        U5      nUR                  5       S:X  d   eUR                  U5      (       d   e/ SQ/ SQ4 V s/ s H  n [        U 5      PM     nn [        U5      nUR                  U5      (       a   eUR                  5       S	:X  d   eUR	                  UR
                  5      nUR                  5       S:X  d   e/ S
Q/ SQ4 V s/ s H  n [        U 5      PM     nn [        U5      n	U	R                  5       S:X  d   eUR	                  U	R
                  5      n
U
R                  5       S:X  d   eUR                  U
5      (       d   eUR                  U5      (       a   eUR                  U5      (       d   e[        [        S5      5      nUR                  U	5      (       d   eUR                  U
SS9(       d   e[        / SQ5      n[        / SQ5      n[        / SQ5      n[        / SQ5      n[        X/5      n[        X/5      n[        U5      n[        U5      n[        U5      nUR                  U5      (       d   eUR                  U5      (       d   eUR                  U5      (       d   eUR                  U5      (       d   eUR                  U5      (       d   eUR                  U5      (       d   eUR                  U5      (       a   eUR                  U5      (       a   eg s  sn f s  sn f s  sn f s  sn f )Nr   r   r   r    r   )r   r   r    r   r   x   )r   r   r   r   r    )r   r   r    r   r   rU   )r   r   r   r   r    r   r   r   r   r    rZ   )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   r   rF   	is_normalnormal_closurerI   rp   )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_ids                        r*   test_is_normalr     s   (7'IJ'I!{1~'IGJ	'	"B88:(7'IJ'I!{1~'IGJ	'	"B88:<<&5%GH%G[^%GEH	%	 B||B88:			2==	)B88:&5%GH%G[^%GEH	%	 B88:			2==	)B88:>>"~~b!!!!>>"	+a.	)B<<<<5<)))	_	%B	_	%B	_	%B
o
&C""ARH%Db!Fb!FC D>>!D!!!!D!!!!>>&!!!!>>$>>!"""""""""Q K K I Is   MM'M2M#c                  R   / SQ/ SQ/ SQ/ SQ/n U / SQ/-    Vs/ s H  n[        U5      PM     n n[        / SQ5      nU S S U SS X"S-  /4 Vs/ s H  n[        U5      PM     snu  pEnUR                  5       UR                  5       s=:X  a  UR                  5       s=:X  a  S:X  d   e   eUR                  U5      (       d   eUR                  U5      (       a   e[        [        SS	/5      /5      nUR                  U5      (       a   eUR                  US5      (       d   e[        X"5      R                  [        U5      5      (       d   e[	        S
5      R                  [	        S5      S5      (       d   e[	        S
5      R                  [	        S
5      [        S5      -  S5      (       d   e[        S5      R                  [	        S
5      [        S5      -  S5      (       a   e[        S
5      R                  [	        S
5      [        S5      -  S5      (       d   eg s  snf s  snf )N)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   rF   rp   r   r   )r&   r>   r)   xr   ri   r   r   s           r*   test_eqr   <  s   	/1C F 	A!"&8%9!9:!9AQ!9A:&'A01"1q1va4y/IJ/I!"1%/IJJBB88:6rxxz6Q66666>>"~~b!!!!	;1v./	0B~~b!!!!>>"a    A!--.>q.ABBBB!(():A>>>>!(():;q>)I1MMMM1~)).*;KN*JANNNNq>%%nQ&7A&FJJJJ 	;Js   HH$c                     [        / SQ5      n [        / SQ5      n[        X/5      nUR                  5       nUR                  5       S:X  d   eUR	                  U5      (       d   eUR                  US5      (       d   eUR                  US5      (       a   e/ SQ/ SQ/nU Vs/ s H  n[        U5      PM     nn[        U5      nUR                  5       nUR                  5       S:X  d   eg s  snf )N)r   r   r   r    r   )r   r   r   r   r    r   r   rV   rW   rZ   )r   r   derived_subgrouprF   r   rp   )r&   r(   r'   rv   rg   r>   rh   s          r*   test_derived_subgroupr   O  s    O$AO$A! A	A779>>;;q>>>==A}}Q"""")+CDI$-.IqKNID.A	A779?? /s   #C,c                     [        / SQ5      n [        / SQ5      n[        X/5      nUR                  (       d   e[        U /5      nUR                  (       d   e[        / SQ5      n [        / SQ5      n[        X/5      nUR                  (       a   e[        S5      nUR	                  S5      nUR                  (       d   eg )Nr3   r2   r   r   rX   r   )r   r   is_solvabler   sylow_subgroup)r&   r(   r'   Prd   s        r*   test_is_solvabler   _  s    IAIA! A===!A===O$AO$A! A}}rA	A===r,   c                  :   [        5       n U S   /U SS   Vs/ s H  oS-  PM	     sn-   n[        U5      nUR                  5       S:X  d   eU  Vs/ s H  oS-  PM	     nn[        U5      nUR                  5       S:X  d   eUR                  US5      (       d   eUR	                  5       nUR                  5       S:X  d   eUR                  US5      (       d   eUR                  US5      (       a   e[        S5      nUR                  5       S:X  d   eg s  snf s  snf )	Nr   r   l      i  
 r   l    @eE i08 )r   r   rF   rp   r   r   )rh   r>   gens1r   gens2ri   C1r'   s           r*   test_rubik1r   n  s    "D"XJQR11Q$11E	%	 B88:$$$ 4aT4E 	%	 B88:>>"a    				B88:###>>"a    ~~b!$$$$1A779 2 !s   DDc                  J   [        S5        [        [        5       5      n U R                  5       S:X  d   e[        U S S 5      nUR                  5       S:X  d   eUR	                  U 5      (       a   eU R                  UR                  5      nUR                  U 5      (       d   eg )Ntakes too much timel      pFoA% r   l     !l )r   r   r   rF   r   r   rI   rp   )r'   r   ri   s      r*   
test_rubikr     s    	.01A779,,,,	!BQ%	 B88:(((||A	
		"--	(B>>!r,   c                  D   [        S5      n [        S5      nX -  U -  nUR                  5       S:X  d   eUR                  S:X  d   e[	        UR                  5       5      S:X  d   eUR                  SL d   eX-  nUR                  5       S:X  d   eUR                  SL d   eg )Nr    @   rZ   r   T    F)r   r   rF   r%   r:   r   r#   )rv   rr   r'   re   s       r*   test_direct_productr     s    AAaA	AA779??88r>>qxxz?a<<4	A779??<<5   r,   c                      [        S5      n U R                  SS5      [        / SQ5      [        / SQ5      4;   d   e[        S5      U -  nUR                  SS5      SL d   eg )	Nr"   r   r   )r   r   r    r!   r   r   )r    r   r   r   r   r!   r    r!   F)r   	orbit_repr   r   r'   re   s     r*   test_orbit_repr     sf    aA;;q!-?!@"#!% % % %AqA;;q!%%%r,   c                      [        S5      n S/S-  nSUS'   U R                  S5      U:X  d   e[        S5      nUR                  S5      / SQ:X  d   e[        S5      nUR                  S	5      / S
Q:X  d   eg )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   Ls       r*   test_schreier_vectorr     s    BA	
BAAbER A%%%aAQ#<<<<qAQ=000r,   c                      [        S5      n SnSn0 nSSSSS.US'   S	S	S
SS.US
'   SSSS
S.US'   U R                  XUS9  U R                  S   / SQ:X  d   eSSS
SS.nU R                  US9[	        / SQ5      :X  d   eg )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   )rr   rnr   r   s        r*   test_random_prr     s    aA
A	ANaab9N1aab9N1aaa8N1a>:>>"!33334L;;L;1&'( ( (r,   c                     [        S5      n U R                  5       SL d   eU R                  5       SL d   eU R                  SS9SL d   eU R                  SS9SL d   e[        S5      nUR                  5       SL d   eUR                  SS9SL d   eUR                  SS9SL d   eSnU[	        S/SS// S	Q/5      [	        / S
QSS//5      [	        SS/SS// SQ/5      [	        S// SQ/5      [	        S// SQSS// SQ/5      [	        S// SQ/5      [	        / SQSS// SQSS//5      [	        S// SQ/5      [	        / SQ/ SQ/5      [	        S/SS// SQ/ SQ/5      S.nUR                  US9SL d   e[        S5      nUR                  5       SL d   eUR                  SS9SL d   eUR                  SS9SL d   eU[	        / SQS//5      [	        S// S Q/5      [	        / S!Q/ S"Q/5      [	        / S#QSS// S$QS//5      [	        S/S/S// S%QS/SS//5      [	        SS// S&Q/5      [	        S/SS'// S(Q/ S)Q/5      [	        / S*Q/ S+Q/5      [	        / S,QS// S-QSS'//5      [	        / S.QSS/SS// S/Q/5      S.nUR                  US9SL d   e[        [	        SSSS09" SSSS5      [	        SSSS09" SSSS5      5      n U R                  5       SL d   e[        S5      n U R                  5       SL d   e[        S15      n U R                  5       SL d   e[        S5      n U R                  5         U R                  5       SL d   eg )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   ru   s        r*   test_is_alt_symr     s   bA<<>U"""##%...##T#2e;;;##T#2e;;;rA##%---##T#2e;;;##T#2d:::E"aV%:;<01a&9:AA(:;<89:YA=>89:	Aq69q!f=>89:&89:aV\9=>
@L <<\<2d:::A##%---##T#2d:::##T#2e;;;"3aS9:89:*L9:	Aq6<!=>aS1#|aS1a&ABA 89:aVY=>*L9:	A3q!f=>	Aq6Aq69=>
@L <<\<2e;;;Aqq!!Q1-Aqq!!Q1-	/A <<>U""" 	bA))+u444bA))+u444 	aALLN<<>U"""r,   c                  8   [        S5      n U R                  SS/5      n[        S5       H  nX   XS-      :X  a  M   e   [        S5      nUR                  SS/5      / SQ:X  d   e[        R
                  R                  SS/5      / SQ:X  d   e[        [        SS5      " SS	5      [        SSSSS	S5      5      n[        [        SSSSS	S5      [        SS5      " SS	5      5      nUR                  SS/5      / S
Q:X  d   eUR                  SS/5      / S
Q:X  d   eg )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_blockr{   r   Tetrapgroupr   r   )rr   block_systemrq   rd   P1P2s         r*   test_minimal_blockr    s   aA??Aq6*L1X,1u"5555 qA??Aq6"&8888<<%%q!f-===	+a+Aq1;q!Q1a3P	QB	+aAq!Q7Q9J1a9P	QBQF#'9999QF#'9999r,   c                  2   [        [        SS5      " SS5      [        SSSSSS5      5      n U R                  5       / SQ/ SQ/:X  d   e[        S5      n U R                  5       S/S-  /:X  d   e[        [        SS5      5      n U R                  5       S	L d   eg )
Nr   r!   r   r    r   r   r   )r   r   r   r   r   r   F)r   r   minimal_blocksr   )r   s    r*   test_minimal_blocksr	  	  s    Q*1a0+aAq!Q2OPA"46H!IIIIqA1#a%(((Q*+A&&&r,   c                  >    [        S5      n U R                  S:X  d   eg )NrX   r!   )r   max_div)rd   s    r*   test_max_divr    s    rA99>>r,   c                      [        S5      n U R                  5       SL d   e[        S5      nUR                  5       SL d   e[        SSSSS9n[        S	S
SSS9n[	        X#5      nUR                  5       SL d   eg )Nr!   TrC   r   r   r   r"   r   r   r    F)r   is_primitiver   r   r   )rd   rv   r&   r(   r'   s        r*   test_is_primitiver    s~    qA>>t###AA>>t###Aq!!$AAq!!$AA>>u$$$r,   c                      [        S5      n [        / SQ5      nSU0nU R                  SUS9nU[        / SQ5      :X  d   eU R                  S5      nU" S5      S:X  d   eg )Nr!   )r   r   r   r   r    randr   r   r   )r   r   random_stab)rd   
_random_elr   r)   r   s        r*   test_random_stabr  %  sc    qA_-JJ'L	al3AO,,,,	aAQ4199r,   c                      [        / SQ5      n [        U /5      nUR                  S:X  d   e[        / SQ5      n[        / SQ5      n[        X#/5      nUR                  S:X  d   eg )Nr3   r   r   r   r   )r   r   transitivity_degree)permrv   gen1gen2Alts        r*   test_transitivity_degreer  /  s`    y!D$ A  A%%%'D'D
D<
(C""a'''r,   c                     [        [        R                  R                  5      SS/:X  d   e[	        S5      n SS/n[        / SQ5      [        / SQ5      [        / SQ5      /nU R                  XS5      X4:X  d   e[        S5      nS[        / S	Q5      [        / SQ5      [        / SQ5      /0nSS/n[        / SQ5      [        / S
Q5      [        / SQ5      /nUR                  / UR                  SUS9X4:X  d   eg )Nr   r   r   r3   r2   r1   r!   r)   r   r   r   r   )	r=   r  r  r   r   r   schreier_sims_randomr   rI   )rd   r   strong_gensrr   r   s        r*   test_schreier_sims_randomr  :  s    %,,##$A...qAq6Dy);y+Ai(*K!!$Q7D;NNNNaA+i0+i2H$Y/1 2Lq6Dy);y+Ai(*K!!"allA$ " &*.)<= = =r,   c                  T   [        S5      n U R                  5         U R                  nU R                  nU/ SQ:X  d   eU R	                  XSSS9nU R	                  XS5      nUS   / SQ:X  d   e[        XS   US   5      SL d   eUS   / SQ:X  d   e[        XS   US   5      SL d   eg )	Nr    r0   r   F)
randomizedr   r1   T)r   schreier_simsr   r  baseswapr   )rd   r   r  deterministicr!  s        r*   test_baseswapr%  L  s    qAOO66D--K9JJt!JFMDq1Jy(((+]1-=>$FFFa=I%%%a=*Q-8D@@@r,   c                     [        / SQ5      n [        U /5      nUR                  / SQS9u  p#[        XU5      SL d   e[	        S5      nUR                  / SQS9u  p#[        XBU5      SL d   e[        S5      nUR                  S/S9u  p#[        XRU5      SL d   e[        S5      nUR                  S S  nUS	   nUS   n	[        X) 5      n	[        X5      n[        X5      n	UR                  S	S/US
9u  p#[        XbU5      SL d   e[        S5      n
U
R                  S	   nU
R                  US-  /S9u  p#[        XU5      SL d   eg )Nr   r0   )r   Tr!   r   r   rC   r   )r   rh   rY   r   )rh   )
r   r   schreier_sims_incrementalr   r   r   r	   rI   r   r   )r   TrivialGroupr   r  rd   rr   ru   rh   gen0r  rv   gens               r*   test_schreier_sims_incrementalr+  Z  sp   ?+H#XJ/L$>>I>NDK8D@@@qA333CD-555aA33!3=D-555A<<?D7D7DeDDD33!Qd3KD-555BA
,,q/C33#q&3BD-555r,   c                 &  ^^ S nU4S jnU4S jnS n[        XU5       GH  n [        U 5      n[        U 5      n[        U 5      n	UR	                  U5      n
U
R                  U5      (       d   eUR	                  U5      nUR                  U5      (       d   eUR	                  X9S9n
U
R                  U5      (       d   eS/mUR                  S5      R                  UR	                  U5      5      (       d   eSS/mUR                  S5      R                  S5      R                  UR	                  U5      5      (       d   eSS	/mUR	                  U5      nS	/mUR	                  U5      nUR	                  XLS9R                  U5      (       d   eUR                  5       u  pUR                  S
   mUR	                  X^US9n[        UUUR                  5      SL d   eUR                   Vs/ s H  nU" U5      SL PM     sn(       a  GM   e   g s  snf )Nc                     g)NT r   s    r*   <lambda>"_subgroup_search.<locals>.<lambda>u  s    $r,   c                 D   > T Vs/ s H
  o" U5      PM     snT:H  $ s  snf Nr.  )r   pointpointss     r*   r0  r1  v  s     v >ve5v >& H >s   c                 6   > [        U T5      [        TU 5      :H  $ r3  )r   )r   r)   s    r*   r0  r1  w  s    DAJ$q!*4r,   c                     U R                   $ r3  )is_evenr/  s    r*   r0  r1  x  s    !))r,   )init_subgrouprC   r   r    r!   r   )r   r  T)
r{   r   r	   r   subgroup_searchrp   rb   r'  rI   r   )rq   rs   rt   	prop_trueprop_fix_pointsprop_comm_g	prop_evenrd   ru   rv   Symr  fix35fix5r   r  comm_gr*  r)   r5  s                     @@r*   _subgroup_searchrC  t  s   IHO4K#I1^1QN	*q!!!!	*q!!!!	;q!!!!||A**1+<+<_+MNNNNQ||A))!,88o.0 0 	0 0Q!!/2  1    k$  	   779LLOk+N 	FD&*;*;<DDD4:4E4EF4ESC D(4EFFFF5 4 Gs   *Hc                      [        SSS5        g )NrX   r]   r   )rC  r.  r,   r*   test_subgroup_searchrE    s    RQr,   c                  4    [        S5        [        SSS5        g )Nr   r^   r_   r   )r   rC  r.  r,   r*   test_subgroup_search2rG    s    	RQr,   c                     [        S5      n [        / SQ5      nU R                  U5      nUR                  (       d   e[	        S5      nUR                  U5      R                  U5      (       d   eS HL  n[        U5      n [	        U5      n[        U5      n[        U5      nX5U4 H  n[        X5      (       a  M   e   MN     [        S5      n [        U R                  5       5      nU H  n	[        X	5      (       a  M   e   / n
S Hk  nU
R                  [        U5      5        U
R                  [	        U5      5        U
R                  [        U5      5        U
R                  [        U5      5        Mm     U
 HS  nU
 HJ  nUR                  US5      (       d  M  UR                  UR                  :X  d  M8  [        X{5      (       a  MJ   e   MU     g )Nr   r0   r    r   r    r!   r!   ry   r   )r   r   r   
is_trivialr	   rp   r   r   r   r8   r|   r}   r%   )rd   r   closureru   rq   rr   rv   r   r   r   r   r   s               r*   test_normal_closurerL    s   qA9%Hx(GAA**1----1Q!N)B)!0000   	qAA%%'(H%a1111  E^A&'%a()]1%&[^$	 
 Cr1%%#**		*A-b6666  r,   c                     [        [        / SQ5      /5      n U R                  5       S   R                  U 5      (       d   eS H7  n[	        U5      nUR                  5       S   R                  U5      (       a  M7   e   [        S5      nUR                  5       nUS   R                  [	        S5      5      (       d   eUS   R                  [        S5      5      (       d   eUS   R                  (       d   eg )Nr0   r   r!   r"   rC   r    r   r   r   )r   r   derived_seriesrp   r	   r   r   rJ  r~   rq   ru   rd   seriess        r*   test_derived_seriesrR    s    [345D #//5555Q!!$003333  	qAF!9  !1!!45555!9  q!12222!9r,   c                     [        [        / SQ5      /5      n U R                  5       S   R                  U 5      (       d   eS H7  n[	        U5      nUR                  5       S   R                  U5      (       a  M7   e   [        S5      nUR                  5       n[        U5      S:X  d   eUS   R                  [	        S5      5      (       d   eg )Nr0   r   rN  r"   r   r   )r   r   lower_central_seriesrp   r	   r   r:   rP  s        r*   test_lower_central_seriesrU    s     [345D$$&q)55d;;;;Q%%'*66q9999  	qA##%Fv;!!9  !1!!45555r,   c                  D   [        S5      n [        [        / SQ5      /5      nU R                  X5      R	                  U5      (       d   e[        S5      nU R                  X5      R	                  U5      (       d   eS HZ  n[        U5      n [        U5      n[        U5      nU R                  X$5      R	                  U R                  XB5      5      (       a  MZ   e   [        S5      n [        SS5      n[        SS5      n[        [        / SQ5      /5      nU R                  XU5      R	                  U5      (       d   eU R                  Xf5      R	                  U5      (       d   e[        S5      n [        S5      nU R                  X 5      R	                  U5      (       d   eg )	Nr   r0   rI  rC   r   r!   r    )r   r   r   r   r    r!   r"   )r   r   r   
commutatorrp   r	   r   r
   )rd   r~   ru   rq   rr   A1A2s          r*   test_commutatorrZ    sd   qA[345D<<#//5555A<< ,,T22221Q!||A!--all1.@AAAA	  	qA	a	B	a	B[)>?@AD<<++D1111<<++D1111qAA<<))!,,,,r,   c                     S HB  n [        U 5      n[        X S-   5      nUR                  (       d   eUR                  (       a  MB   e   [        SSS5      nUR                  (       d   e[        S5      R                  SL d   eg )Nry   r   r!   rC   rX   F)r   r
   is_nilpotentr	   )rq   rv   Abs      r*   test_is_nilpotentr^    sr    N!U#~~~	 
 
aB	B???A++u444r,   c            
          [        S5       H=  n [        [        [        [        U 5      5      5      /5      nUR                  (       a  M=   e   g )Nr!   )r{   r   r   r8   rJ  )rq   r~   s     r*   test_is_trivialr`    s8    1XT%(^!< => r,   c                  8   [        S5      n U R                  S/5      nUR                  [        S5      /:X  d   e[        S5      n / nU nS HL  nUR	                  U5      nUR                  U5        U R                  U5      R                  U5      (       a  ML   e   g )Nr   r   r   r!   )r   r   r   r    r   )r   pointwise_stabilizerrI   r   rb   r}   rp   )rd   stabr5  r4  s       r*   test_pointwise_stabilizerrd    s    qA!!1#&D??{1~....qAFD u%e%%f-99$???? !r,   c                     [         R                  R                  S[        [	        S5      5      S9[        / SQ5      :X  d   e[         R                  R                  S[        [	        S5      5      S9[        / SQ5      :X  d   eg )Nr!   )seed)r    rC   r"   r!   r   r   r   r   rC   )r"   rC   r   r   r!   r    r   r   )r   r  	make_permr8   r{   r   r.  r,   r*   test_make_permrh    sp    ;;  eAh 8,-. . .;;  eAh 8,-. . .r,   c                  
   SSK Jn   [        SS5      n[        [	        U5      R
                  5      [        S5      [        SS5      1:X  d   eU " [	        U5      R
                  6 U " [        SS5      [        S5      5      :X  d   eg )Nr   )	FiniteSetr   r   )sympy.sets.setsrj  r   setr   r   )rj  r>   s     r*   test_elementsrm  %  sy    )AqA"++,QQPQAR0SSSS&q)223[A&A78 8 8r,   c                      [        [        SS5      [        SS5      5      R                  SL d   e[        S5      R                  SL d   eg )Nr   r   r    T)r   r   is_groupr   r.  r,   r*   test_is_grouprp  .  sD    K!,k!A.>?HHDPPP!%%---r,   c                  j    [        5       [        [        5       5      :X  d   e[        5       S:H  SL d   eg )Nr   F)r   r   r.  r,   r*   test_PermutationGrouprr  3  s1    !1+-!@@@@!#---r,   c                     [        S5      n [        [        SSS5      [        SS5      " SS5      5      nU R                  U5      [        S5      [        SSS5      [        SSS5      [        SSS5      [        S5      " SSS5      [        SS5      " SS5      [        SSSSS5      [        SSSSS5      [        SSSSS5      [        SSSSS5      /
:X  d   eg )Nr!   r   r   r   r   r    )r	   r   r   coset_transversalr   s     r*   test_coset_transvesalru  8  s    AQq+K!,<Qq,ABAq!	QQ1-{1a/C	Q1	{1~aA6Aq8I!Q8O	Q1a	#[Aq!Q%?	Q1a	#[Aq!Q%?	AA A Ar,   c                  J   [        [        SSSS5      [        SSS5      [        SSSS5      [        SS5      [        SS5      5      n [        [        SSSS5      [        SS5      5      nU R                  U5      / S	Q/ S
Q/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/:X  d   eg )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   s     r*   test_coset_tablerx  B  s    Qq1-{1Qq/A	Qq1	{1Q/Qq1A	CAQq1-{1Q/?@A==	')G	')G	')I	)+L	,.L	+-O	QQ Q Qr,   c                      [        [        SSS5      [        SSS5      5      n U R                  [        SSS5      /5      nUR                  U 5      (       d   eg )Nr   r   r   r   )r   r   subgrouprp   r   s     r*   test_subgroupr{  O  sO    Qq+[1Q-?@A	

K!A&'(A==r,   c                     ^ [        S5      m[        SSS5      " SS5      n TR                  U 5      n[        U4S jU 5       5      (       d   eTR                  nU H  nX2-  nM	     X :X  d   eg )Nr!   r   r   r   r   r    c              3   @   >#    U  H  oTR                   ;   v   M     g 7fr3  )r  ).0r)   r'   s     r*   	<genexpr>)test_generator_product.<locals>.<genexpr>Y  s     04aAMM!4s   )r   r   generator_productallr   )r>   rh   r   r)   r'   s       @r*   test_generator_productr  U  sl    qAAq!Q"Aq!D0400000	

AC 6M6r,   c                     [        [        SS5      " SS5      [        SSSSSS5      5      n U R                  S5      nUR                  5       S:X  d   e[	        S5      n U R                  S5      nUR                  5       S:X  d   e[        [        SS5      " SS5      [        SSSSSS5      [        SS5      5      n U R                  S5      nUR                  5       S:X  d   eU R                  S5      nUR                  5       S	:X  d   e[        S
5      n U R                  S5      nUR                  5       S:X  d   eU R                  S5      nUR                  5       S:X  d   eU R                  S5      nUR                  5       S:X  d   eSnSn[        SS5       Ho  n[        U5      n U R                  S5      nUR                  5       nUSU-  -  S:  a#  [        U5      U:  d   e[        U5      nUS-  nM^  [        U5      U:X  a  Mo   e   [        S5      nUR                  S5      nUR                  5       UR                  5       -  S:X  d   eUR                  5       UR                  5       -  S-  S:  d   e[        S5      nUR                  S5      nUR                  5       UR                  5       -  S:X  d   eUR                  5       UR                  5       -  S-  S:  d   e[	        S5      nUR                  SS9nUR                  5       S:X  d   e[	        S5      nUR                  SS9nUR                  5       S:X  d   eg )Nr   r!   r   r    r   r   rZ   rE   rD   rX      Q      r   r`   )r>   r   )
r   r   r   rF   r   r   r{   rT  r:   r	   )r   rd   explengthrq   lsr'   s          r*   test_sylow_subgroupr  `  s   Q*1a0+aAq!Q2OPA	A779>>bA	A779>>Aq!QQ1aA!>Aq@Q	SA	A779>>	A779>>rA	A779	A779??	A779?? CF1a[1Q##%3;?r7V###WF1HCr7f$$$  	sA	A779qwwy A%%%779QWWY"Q&&&A	A779qwwy A%%%779QWWY"Q&&&bA	1A779>>bA	1A779>>r,   c            	      d   S n S n[        [        SSSS5      " SSS	S
5      [        SSSS	5      " SS
SS5      5      nU " U5      (       d   e[        S5      nU " U5      (       d   e[        S5      nU " U5      (       d   e[        [        SSSS5      [        S5      " SS5      [        SS5      " SS5      /5      nU" U5      (       d   e[	        S
5      nU" U5      (       d   e[        SS5      " SS5      n[        SS5      " SS5      n[        S	S5      n[        XSU5      nU" U5      (       d   eg )Nc                 d    U R                  5       nUR                  5       U R                  5       :H  $ r3  )presentationrF   )r   r'   s     r*   _test test_presentation.<locals>._test  s%    NNwwyAGGI%%r,   c                     U R                  5       n[        UR                  5      [        U R                  5      :H  nU=(       a!    UR	                  5       U R	                  5       :H  $ r3  )strong_presentationr:   rI   r  rF   )r   r'   chks      r*   _strong_test'test_presentation.<locals>._strong_test  sH    !!#!,,3q}}#55-qwwyAGGI--r,   r   r   r!   r   r   rC   r    r"   )r   r   r	   r   r   )r  r  r   r&   r(   r   s         r*   test_presentationr    s.   &.
 	Qq1-a!A6Aa!8LQqQRST8UVA88O8A88O8qA88O8	Qq1	{1~a2K!4DQq4IJ	LA???aA???Aa1AAa1AAaAq!A???r,   c                      [        / SQ5      n [        / SQ5      n[        X/5      nUR                  SL d   e[        / SQ5      n [        / SQ5      n[        X/5      nUR                  SL d   eg )Nr0   r   Tr   r   F)r   r   is_polycyclic)r&   r(   r'   s      r*   test_polycyclicr    sf    IAIA! A??d"""O$AO$A! A??e###r,   c                     [        / SQ5      n [        U /5      nUR                  S5      SL d   e[        SS5      " SS5      n [        SS5      " SS5      n[        X/5      nUR                  S5      SL d   e[        S	S
S5      n[        XU/5      nUR                  S5      SL d   e[        S	5      R	                  S5      nUR                  S5      SL d   e[        S	5      R	                  S5      nUR                  S5      SL d   eg )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   s        r*   test_elementaryr    s   )*A!A??1&&&Aq!QAAq!QA! A??1%%%Aq!A!#A??1&&&q((+A??1&&&**1-A??1%%%r,   c                  t    [        S5      n U R                  SL d   e[        S5      n U R                  SL d   eg )Nr   Fr!   T)r	   
is_perfectr'   s    r*   test_perfectr    s:    A<<5   A<<4r,   c                      [        [        SSS5      [        SSS5      5      n U R                  [        SSS5      /5      nU R                  U5      S:X  d   eg )Nr   r   r   r   r    )r   r   rz  indexr   s     r*   
test_indexr    sN    Qq+[1Q-?@A	

K!A&'(A771:??r,   c                  \   [        S5      n U R                  (       d   e[        SS5      n U R                  (       d   e[        SS5      n U R                  (       a   e[        S5      n U R                  (       d   e[        S5      n U R                  (       a   e[	        [        SSS5      [        SSS5      5      n U R                  (       d   e[	        [        SSSS5      [        SS5      " SS5      5      n U R                  (       d   e[	        [        S5      [        SS5      " SS5      [        SS5      " SS5      [        SS5      " SS5      5      n U R                  SL d   e[	        [        SSSSSSS	SS
SSSSSS5      [        SSSS	S
SSSSSSSSSS5      5      n U R                  (       d   e[        R                  " SS/5      SL d   e[        R                  " SS/5      SL d   e[        R                  " SS/5      b   e[        R                  " / SQ5      b   e[        R                  " / SQ5      SL d   e[	        [        SSSS5      [        SS5      " SS5      5      n U R                  (       d   eU R                  (       d   e[	        [        S5      R                  6 n U R                  SL d   e[	        [        SSSS5      [        SSS	5      5      n U R                  (       d   e[	        [        SS5      [        SS5      [        SSS	5      5      n U R                  SL d   eg )Nr   r   rC   r    r   r   Fr!   r"   rD   rE   rX   rY   rZ   r[   r\   Trn   )r!   rC   r[   )	r   	is_cyclicr
   r	   r   r   _distinct_primes_lemma_is_abelianrI   r  s    r*   test_cyclicr    s   qA;;;QA;;;QA{{?A;;;A{{? 	Q1-{1a/CDA;;;Aq!QAq!Q	A ;;;AAq!QAq!QAq!Q		A ;;% 	Aq!Q1aAq"b"b"EAq!Q2r2q!Q1b"E	A ;;; 22Aq6:dBBB22Aq6:dBBB22Aq6:BBB229=EEE22:>$FFFAq!QAq!Q	!A ;;;=== 	.+667A;;% 	Aq!QAq!	A ;;; 	AqAqAq!	A
 ;;%r,   c                     [        S5      n U R                  (       d   e[        S5      n U R                  (       d   e[        SS5      n U R                  (       d   e[        S5      n U R                  (       a   e[        SS5      n U R                  (       a   e[        S5      n U R                  (       d   e[        S5      n U R                  (       a   e[	        [        SS5      " SS5      [        SS5      " SS5      " SS5      5      n U R                  (       d   e[	        [        SS5      " SS5      " SS5      [        SSSSSSS5      5      n U R                  (       d   e[	        [        SS5      [        SS5      [        SS5      5      n U R                  (       a   e[	        [        SS5      " SS5      " SS5      [        SS5      " SS5      " SS5      [        SSSSSSS5      5      n U R                  (       d   eg )Nr   r   r    r!   r"   r   r   )r   is_dihedralr
   r   r   r   r  s    r*   test_dihedralr  /  s   qA===qA===QA===AA}}QA}}QA===QA}} 	Aq!QAq!Q1%	'A === 	Aq!Q1%Aq!Q1a(	*A === 	Aq;q!,Aq	A }} 	Aq!Q1%Aq!Q1%Aq!Q1a(	*A ===r,   c                  v   [        SSS5      n U R                  5       / SQ:X  d   e[        [        SSSS5      [        SS5      [        SS5      /5      n U R                  5       SS/:X  d   e[	        S5      n U R                  5       / :X  d   e[	        S5      n U R                  5       S/:X  d   e[        S5      n U R                  5       SS/:X  d   e[        [        SSSSSSS5      /5      n U R                  5       S/:X  d   e[        S	5      n U R                  S5      nUR                  5       S/:X  d   e[        [        S
SS5      [        S
SS5      5      n U R                  5       S/:X  d   e[        [        S
S5      [        S
SSS5      " SSSS5      /5      n U R                  5       SS/:X  d   e[        S5      n U R                  S5      nUR                  5       / SQ:X  d   eU R                  S5      nUR                  5       / SQ:X  d   eU R                  S5      nUR                  5       / SQ:X  d   eg )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   s     r*   test_abelian_invariantsr  \  s?   Q1A!Y...Aq!Q/Q1BKPQSTDUVWA!aV+++A!R'''A!aS(((aA!aV++++aAq!Q:;<A!aS(((bA	A!aS(((Q1-{1a/CDA!aS(((+a+[Aq!-DQ1a-PQRA!aV+++rA	A!%CCCC	A!\111	A!Y...r,   c                     [        SSS5      n [        SS5      n[        X/5      nUR                  5       nX2R                  5       :X  d   e[	        S5      nUR                  5       S   U:X  d   e[        UR                  5       5      S:X  d   e[        S5      nUR                  5       S   U:X  d   e[        UR                  5       5      S:X  d   e[        S5      nUR                  5       n[        US   [        S5      5      (       d   e[        US   [        S5      5      (       d   eUS   R                  (       d   eg )Nr   r   r   r    r   r!   rD   )
r   r   composition_seriesrO  r   r:   r	   r   r   rJ  )r&   r(   r'   comp_seriesrd   ru   rQ  s          r*   test_composition_seriesr  z  s3   Aq!AAqA! A&&(K**,,,, 	qA!!$)))q##%&!+++A!!$)))q##%&!+++ 	AA!!#FKN3333KN3333!9r,   c                  B   [        SSS5      n [        SSSS9n[        X5      R                  SL d   e[        SSS5      n [        SSSS9n[        X5      R                  SL d   e[        SSSS5      n [        SS5      " SS5      n[        X5      R                  SL d   eg )Nr   r   r   r   r   TF)r   r   is_symmetric)r&   r(   s     r*   test_is_symmetricr    s    Aq!AAqq!AA!..$666Aq!AAqq!AA!..$666Aq!QAAq!QAA!..%777r,   c                  "   [        S5      n [        SSS5      n[        SSSSS9[        SSS5      [        SSSSS9[        SSS5      [        SSS5      [        SSS5      [        SSS5      [        SSS5      1nU R                  U5      U:X  d   eg )Nr    r   r   r   r   r   )r   r   conjugacy_class)rd   r   rv   s      r*   test_conjugacy_classr    s    qAAq!A	Q1Q	'Q1)=Aq+[Aq-AAq!;q!Q#7Aq!;q!Q#7	9A Q1$$$r,   c                  2  ^ [        S5      n [        SS91[        SSSS9[        SS5      [        SS5      1[        SSS5      [        SSS5      1/nU R                  5       m[        U5      [        T5      :X  d   e[	        U4S jU 5       5      (       d   eg )Nr   r   r   r   r   c              3   ,   >#    U  H	  oT;   v   M     g 7fr3  r.  )r~  r   computeds     r*   r  )test_conjugacy_classes.<locals>.<genexpr>  s     /hH}hs   )r   r   conjugacy_classesr:   r  )rd   expectedr  s     @r*   test_conjugacy_classesr    s    qAA&'
a1
%{1a'8+a:K	L
aA
Aq! 4	57H ""$Hx=CM)))/h/////r,   c            
      &   [        SS5      n [        SS5      n[        X/5      nX -  nUR                  (       d   eUR                  (       a   eUR	                  5       n[        SS5      [        SSS5      [        SS5      [        S5      [        S5      " SS5      [        SSS5      /nU H
  nXe;   a  M
   e   X-  nUR                  (       a   eUR                  (       d   eUR	                  5       n[        S5      " SS5      [        SSS5      [        SS5      [        S5      [        SS5      [        SSS5      /nU H
  nXe;   a  M
   e   [        [        SSSS5      [        SSS5      5      n[        [        SSSS5      5      n[        SS5      " SS5      n	[        XUSS9nUR                  (       d   eUR	                  5       n[        SSSS5      [        S5      [        SS5      " SS5      [        SSSS5      /nU H
  nXe;   a  M
   e   g )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)   s
             r*   test_coset_classr    s   AqAAqA! AI####&&&&!!#IAq!;q!Q#7Q9JAAq! 4k!Q6JLH  J((((####""$IAq!$k!Q&:K1<MNK1%{1a';=H  	Q1a0+aA2FGAQ1a01AAq!QAaA3'I####!!#IAq!Q'QQ9J1a9P1aH r,   c                      [        S5      n U R                  S:X  d   eU R                  5       S:X  d   eU R                  5       [	        S5      :X  d   eg )Nr!   r   r    )r   r%   rF   r   r   )r&   s    r*   test_symmetricpermutationgroupr    sH    !!$A88q==779::<;q>)))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+   rA   rG   rS   rl   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r%  r+  rC  rE  rG  rL  rR  rU  rZ  r^  r`  rd  rh  rm  rp  rr  ru  rx  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r.  r,   r*   <module>r     s   ' @ ;> >: : 8 E  2 2,.+$>@%6+4\<#: =F)#XK&  $  
!&1(;#|: '
	%(=$A64GD     
 7F  6 -6
5
@.8.
.
A
Q:z  B	$&& A H*Z/< .8%0$L*r,   