
    Qi                     ^   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
 Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/ed             Z0d Z1d Z2d Z3d Z4d Z5d Z6d  Z7d! Z8d" Z9d# Z:d$ Z;d% Z<d& Z=d' Z>d( Z?d) Z@ed*             ZAd+ ZBd, ZCd- ZDd. ZEd/ ZFd0 ZGd1 ZHd2 ZId3 ZJd4 ZKd5 ZLd6 ZMd7 ZNd8 ZOd9 ZPd: ZQed;             ZRd< ZSd= ZTd> ZUd? ZVd@ ZWdA ZXdB ZYdC ZZdD Z[dE Z\dF Z]dG Z^dH Z_dIS )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                     t          ddg          } t          | g          }|j        sJ t          g d          } t          g d          }t          | |g          }|j        rJ t          | g          }|                    |           sJ |                    |          rJ t          g d          } t          g d          }t          | |          j        t          | |          j        cxk    rdk    sn J t          t          ddd                    }t          d|                              |          sJ 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gs       /var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/sympy/combinatorics/tests/test_perm_groups.pytest_hasr,      sd   QFA!A<IIIAIIIA!Q  A|!A5588OOOuuQxx&&&''AOOO$$AAq!!(A%+ + + +)*+ + + + + + 	Q1--..AA;;??1    c            	         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                              d          }t          |          t          ddg          t          ddg          gk    sJ t          g d          } t          g d          }t          | |g          }|                                }d t          |          D             }|                                 |g d	g d
g dg dg dg dgk    sJ t          |                    dd                    }|t          |          k    sJ t          g d          } t          g d          }t          | |g                              d          }t	          t          |                    dk    sJ d S )Nr   r   )r   r   dimino)methodr   r   c                     g | ]	}|j         
S  )
array_form.0ps     r+   
<listcomp>z!test_generate.<locals>.<listcomp>2   s    	(	(	(1!,	(	(	(r-   r   r   r   r   r   r   r   r   r   r   r   r   T)r0   afr   r   r   r    r!   r"   r   r<   h  )r   listr   generatelensortsorted)r'   r*   r)   r(   v1v2s         r+   test_generaterG   '   sH   QFAqc""++--..AaV$$k1a&&9&9:::::t$[%8%899BBDDEEFF!KKKK!&&h&77A77{Aq6**KA,?,?@@@@@IIIAIIIA!Q  A	

A	(	(Q	(	(	(BGGIII)))YYY			999 ? ? ?II    	ajjTj22	3	3B&&&''A&&&''A!Q  ))T)22AtAww<<3r-   c                      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#   rI   rJ   rK   r   i r   )r   r   order)r'   r)   r*   s      r+   
test_orderrM   >   s}    22233A22233A!Q  A7799##%%******r-   c                     t          ddd          } t          ddd          }t          ddd          }t          ddd          }t          | |          }t          ||          }t          ||           }t          | |          }||k    sJ |j        |j        k    sJ |                    |          sJ ||k    sJ |                    |          sJ ||k    sJ 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_4s           r+   test_equalityrY   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                  `   t          d          } |                     d          }|j        t          d          gk    sJ t          g d          }t          g d          }t	          ||g          }|                    d          }|                                dk    sJ g dg dg}d	 |D             }t	          |          }|                    d          }|                                d
k    sJ |                    d          }	t          |	                    d                    }
|
g dg dgk    sJ d}d |D             }t	          |          }|                    d          }|                                dk    sJ t          d          } d | j        D             d
dgk    sJ d S )Nr   r   r   r   r=   <   r   r    r"   rI   r   r   r!   r#   r   r    r   r   r"   rI   r!   r#   c                 ,    g | ]}t          |          S r2   r   r4   s     r+   r7   z#test_stabilizer.<locals>.<listcomp>c       ...qKNN...r-   r#   Tr>   )r   r   r   r    r!   r"   r#   rI   )r    r   r   r   rI   r"   r#   r!   ))r   r   r   r!   r"   r    r#   rI   rJ   rK   
                              )r   r   r   r    r!   r"   ri   r#   rJ   rK   r`   ra   rb   rc   rd   re   rf   rI   rg   rh   )r   r   r   r    r!   r"   r#   rI   rK   rh   rf   ra   rb   rc   rd   re   rJ   rg   r`   ri   c                 ,    g | ]}t          |          S r2   r   r4   s     r+   r7   z#test_stabilizer.<locals>.<listcomp>p   s    )))qKNN)))r-   i r    c                 6    g | ]}|                                 S r2   )rL   )r5   r(   s     r+   r7   z#test_stabilizer.<locals>.<listcomp>u   s     333!AGGII333r-   )	r   
stabilizerrO   r   r   rL   r@   rA   basic_stabilizers)SHr'   r)   r(   G0	gens_cubegensG2G2_1vs              r+   test_stabilizerrv   X   s   qA	QA<KNN+++++&&&''A&&&''A!Q  A	
aB88::)))+C+C+CDI..I...DA	
aB88::????==DT]]d]##$$A)))+C+C+CDDDDDPD
 *)D)))DA	
aB88::qA33q23331v======r-   c                     dD ]=} t          |           }|                                                                dk    sJ >dD ]=} t          |           }|                                                                dk    sJ >dD ]F} dD ]A}dD ]<}t          | ||          }|                                                    |          sJ =BGdD ]=} t          |           }|                                                                dk    sJ >t          d	          }t          d
          }t          d          }|                    ||z  |z             t          ||          sJ d S )N)r!   r#   r`   r   r    r"   rI   r   )r   r    r"   )r   r"   rI   )r   r   ra   )r   r"   rK   r"   r    r!   )r   centerrL   r
   is_subgroupr	   r   r   )iDjkr(   ACs          r+   test_centerr   x   s    ) )!

!!##q((((( ) )!

!!##q((((( 1 1 	1 	1A 1 1 Aq))xxzz--a0000001	1
  ) )Q

!!##q(((((aAAAAMM!A#a%q!$$$$$$$r-   c            	      J   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 ]w}t          |          } t          |          }t          |          }t          |          }| |||fD ]2}| |||fD ])}|                    |          st          ||          sJ *3xt          d          } t          |                                           }|D ]}	t          | |	          sJ t          d          }t          |                                          }|D ]}	t          ||	          sJ t          d          }t          |                                          }|D ]}	t          ||	          sJ g }
dD ]}|
                    t          |                     |
                    t          |                     |
                    t          |                     |
                    t          |                     |
D ])}|
D ]$}|j        |j        k    rt          ||          sJ %*d S )Nr   r"   )r   r   r   r    r!   )r!   r"   r#   rI   r   r   r    )r   centralizerr   r@   rangerz   r	   r   r   r   r   generate_diminoappendr&   )rn   r   trivr|   r{   r   gpgp2elementselementsmalls              r+   test_centralizerr      sB   qA==T%((^^4455AA!DDDDDA==T%((^^4455AA!DDDDD[66788DaAA**400000 8 81QNN!aA, 	8 	8B1a| 8 8r** 8.r3777778	8
 	qAA%%''((H / /"1g......AA%%''((H / /"1g......aAA%%''((H / /"1g......E % %^A&&'''%a(()))]1%%&&&[^^$$$$ 4 4 	4 	4CyCJ&&*2s33333	44 4r-   c                     g dg dg} d | D             }t          |          }d}|                    d          D ]C}|                    |          }||k    sJ |                    |d          }||k    sJ |dz  }D|                    d          J |                    |                    |d                             |d         k    sJ d S )	Nr\   r]   c                 ,    g | ]}t          |          S r2   r   r4   s     r+   r7   z#test_coset_rank.<locals>.<listcomp>   r_   r-   r   Tr>   r   0   )r   rA   
coset_rankcoset_unrank)rq   rr   r(   r{   hrkh1s          r+   test_coset_rankr      s    )))+C+C+CDI..I...DA	AZZ4Z    \\!__Qwwww^^B4^((Bwwww	Q>>"%%%>>!,,tAw//00DG;;;;;;r-   c                     t          g d          } t          | g          }t          g d          }|                    |          rJ |                    |          J t          g d          } t          g d          }t          | |g          }|                                dk    sJ t          g d          }|                    |j                  rJ |                    |          rJ t          d          |v sJ t          g d          }|                    |d	          |j        t          j        fd
t          t          |j                            D              }||k    sJ |                    |          t          j         }||k    sJ |                    |          sJ t          t          g d          g          }t          g d          }|                    |          g k    sJ d S )Nr9   r   r   r=   r?   r   r   r   r    r!   r"   r   )r   r   r   r    r"   r!   Tc                 8    g | ]}|         |                  S r2   r2   )r5   r{   trru   s     r+   r7   z%test_coset_factor.<locals>.<listcomp>   s%    CCC12a51;CCCr-   r:   )r   r   coset_factorr   rL   r3   containsbasic_transversalsrmulr   rB   base)	r'   r(   cr)   r*   dr6   r   ru   s	          @@r+   test_coset_factorr      s   IIIA!AIIIA~~a     <<??"""&&&''A&&&''A!Q  A7799&&&''A~~al+++++zz!}}q>>Q&&&''A	q$A	
	BCCCCCc!&kk0B0BCCCDA6666	qA!A6666::a==+iii00122AIIIA>>!""""""r-   c                     t          g d          } t          g d          }t          | |g          }|                    d          h dk    sJ |                                h dgk    sJ |                                r|                    d          sJ |                    d          t          g d          t          g d          t          g d          gk    sJ |                    dd	          dt          g d          fd
t          g d          fdt          g d          fgk    sJ t          d          }t          |j        |j	        dd	d	          \  }}|D ]1\  }}||         }|j
        }	|D ]}
|j	        |
         |	z  }	|	|k    sJ 2t          t          t          dd                    dgz             } t          | g          }d |                                D             dgk    sJ t          t                                }d |                                D             ddgk    sJ |                                s|                    d          rJ t          t          ddd           t          d          dd          g          }|                                s|                    d          sJ t          t          d                                        d          du sJ d S )Nr   r   r   >   r   r   r   Fstrictr8   r;   Tr   r   r#   )slpd   c                 ,    g | ]}t          |          S r2   minr5   os     r+   r7   ztest_orbits.<locals>.<listcomp>      '''qCFF'''r-   c                 ,    g | ]}t          |          S r2   r   r   s     r+   r7   ztest_orbits.<locals>.<listcomp>  r   r-   r    )r   r   orbitorbitsis_transitiveorbit_transversalr   r   r&   rO   identityr@   r   r   )r'   r)   r*   r(   transversalslpsr{   tr   wss              r+   test_orbitsr      sK   IIIAIIIA!Q  A771::""""88::)))$$$$??>!>!>>>>q!!	II
 
#III..III0F0F	HH H H H q$''
[##	$q+iii*@*@&A	
K			""#	%% % % % 	aA*18Q\1dPTUUUK  11gJ 	" 	"AQ!AAAvvvvvDq#''1#-..A!A''AHHJJ'''A3.....0011A''AHHJJ'''Aq61111  F)F)FFFF+aA..Aq!0D0DEFFA  BQ__E_%B%BBBBA %U33u= = = = = =r-   c                     d g dg dfD             } t          |           }|                                dk    sJ d g dg dfD             }t          |          }|                                dk    sJ |                    |          sJ d	 g d
g dfD             }t          |          }|                    |          rJ |                                dk    sJ |                    |j                  }|                                dk    sJ d g dg dfD             }t          |          }|                                dk    sJ |                    |j                  }	|	                                dk    sJ |                    |	          sJ |                    |          rJ |                    |          sJ t          t          d                    }
|
                    |          sJ |
                    |	d          sJ t          g d          }t          g d          }t          g d          }t          g d          }t          ||g          }t          ||g          }t          |          }t          |          }t          |          }|                    |          sJ |                    |          sJ |                    |          sJ |                    |          sJ |                    |          sJ |                    |          sJ |                    |          rJ |                    |          rJ d S )Nc                 ,    g | ]}t          |          S r2   r   r4   s     r+   r7   z"test_is_normal.<locals>.<listcomp>      JJJ!{1~~JJJr-   r   r   r    r!   r   )r   r   r!   r   r    x   c                 ,    g | ]}t          |          S r2   r   r4   s     r+   r7   z"test_is_normal.<locals>.<listcomp>  r   r-   )r   r   r    r   r!   )r   r   r!   r    r   r[   c                 ,    g | ]}t          |          S r2   r   r4   s     r+   r7   z"test_is_normal.<locals>.<listcomp>      HHH[^^HHHr-   )r   r   r    r   r!   r   r   r   r    r!   rb   c                 ,    g | ]}t          |          S r2   r   r4   s     r+   r7   z"test_is_normal.<locals>.<listcomp>  r   r-   )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   rL   	is_normalnormal_closurerO   rz   r   )gens_s5G1gens_a5rs   gens3G3G4gens5G5G6I5p1p2p3id_ro   H_n1H_n2_1H_n2_2H_ids                       r+   test_is_normalr     s   JJ'IJJJG	'	"	"B88::JJ'IJJJG	'	"	"B88::<<HHooo%GHHHE	%	 	 B||B88::			2=	)	)B88::HHooo%GHHHE	%	 	 B88::			2=	)	)B88::>>"~~b!!!!!>>"	+a..	)	)B<<<<5<)))))	___	%	%B	___	%	%B	___	%	%B
ooo
&
&C"b""ARH%%Db!!Fb!!FC  D>>!D!!!!!D!!!!!>>&!!!!!>>$>>!""""""""""""r-   c                     g dg dg dg dg} d | g dgz   D             } t          g d          }d | d d         | dd         ||dz  gfD             \  }}}|                                |                                cxk    r|                                cxk    rd	k    sn J |                    |          sJ |                    |          rJ t          t          d
dg          g          }|                    |          rJ |                    |d
          sJ t          ||                              t          |                    sJ t	          d                              t	          d          d
          sJ t	          d                              t	          d          t          d          z  d
          sJ t          d                              t	          d          t          d          z  d
          rJ t          d                              t	          d          t          d          z  d
          sJ d S )N)r   r   r   r    r!   r"   r   )r   r   r   r    r!   r"   c                 ,    g | ]}t          |          S r2   r   r4   s     r+   r7   ztest_eq.<locals>.<listcomp>?  s    :::AQ:::r-   )r   r   r    r!   r"   r   c                 ,    g | ]}t          |          S r2   )r   )r5   xs     r+   r7   ztest_eq.<locals>.<listcomp>A  s!    JJJ!"1%%JJJr-   r   r!   r#   r   r   r    r"   )r   rL   rz   r   r   r   )r'   r*   r   rs   r   r   s         r+   test_eqr   <  sm   			///1C1C1C F F F 	A::&8&8&8%9!9:::A&&&''AJJ"1"q1v1a4y/IJJJJBB88::6666rxxzz6666Q666666>>"~~b!!!!!	;1v../	0	0B~~b!!!!!>>"a     Aq!!--.>q.A.ABBBBB!(():):A>>>>>!(():):;q>>)I1MMMMM1~~)).*;*;KNN*JANNNNNq>>%%nQ&7&7A&FJJJJJJJr-   c                     t          g d          } t          g d          }t          | |g          }|                                }|                                dk    sJ |                    |          sJ |                    |d          sJ |                    |d          rJ g dg dg}d |D             }t          |          }|                                }|                                dk    sJ d S )	N)r   r   r   r!   r    )r   r   r    r   r!   r    r   r\   r]   c                 ,    g | ]}t          |          S r2   r   r4   s     r+   r7   z)test_derived_subgroup.<locals>.<listcomp>Y  r_   r-   rb   )r   r   derived_subgrouprL   r   rz   )r'   r)   r(   r   rq   rr   s         r+   test_derived_subgroupr   O  s   OOO$$AOOO$$A!Q  A	A7799>>>>;;q>>==A}}Q""""")))+C+C+CDI..I...DA	A7799??????r-   c                     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        rJ t          d          }|                    d          }|j        sJ d S )Nr;   r:   r   r   r`   r    )r   r   is_solvabler   sylow_subgroup)r'   r)   r(   Prn   s        r+   test_is_solvabler   _  s    IIIAIIIA!Q  A=!A=OOO$$AOOO$$A!Q  A}rA	A=r-   c                  X   t                      } | d         gd | dd          D             z   }t          |          }|                                dk    sJ d | D             }t          |          }|                                dk    sJ |                    |d          sJ |                                }|                                dk    sJ |                    |d          sJ |                    |d          rJ t          d	          }|                                d
k    sJ d S )Nc                     g | ]}|d z  S r   r2   r4   s     r+   r7   ztest_rubik1.<locals>.<listcomp>p  s    1111!Q$111r-   r   l      c                     g | ]}|d z  S r   r2   r4   s     r+   r7   ztest_rubik1.<locals>.<listcomp>s  s       aQT   r-   i  
 r   l    @eE r   i08 )r   r   rL   rz   r   r   )rr   gens1r   gens2rs   C1r(   s          r+   test_rubik1r   n  s5    ""D"XJ11QRR1111E	%	 	 B88::$$$$  4   E	%	 	 B88::>>"a     					B88::####>>"a     ~~b!$$$$$1A7799r-   c                     t          d           t          t                                } |                                 dk    sJ t          | d d                   }|                                dk    sJ |                    |           rJ |                     |j                  }|                    |           sJ d S )Ntakes too much timel      pFoA% r    l     !l )r   r   r   rL   r   r   rO   rz   )r(   r   rs   s      r+   
test_rubikr     s    	.0011A7799,,,,,	!BQB%	 	 B88::((((||A	
		"-	(	(B>>!r-   c                  X   t          d          } t          d          }| | z  | z  }|                                dk    sJ |j        dk    sJ t	          |                                          dk    sJ |j        du sJ || z  }|                                dk    sJ |j        du sJ d S )Nr!   @   rb   r    T    F)r   r   rL   r&   rB   r   r$   )r   r|   r(   ro   s       r+   test_direct_productr     s    AAaA	!AA7799????8r>>>>qxxzz??a<4	!A7799????<5      r-   c                      t          d          } |                     dd          t          g d          t          g d          fv sJ t          d          | z  }|                    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(   ro   s     r+   test_orbit_repr     s    aA;;q!-?-?-?!@!@"""##!% % % % %AqA;;q!%%%%%%r-   c                      t          d          } dgdz  }d|d<   |                     d          |k    sJ t          d          }|                    d          g dk    sJ t          d          }|                    d	          g d
k    sJ d S )N2   r   r      rJ   r   )r   r   r   r   r   r   r   r   r!   r   )r   r   r   r   )r   schreier_vectorr   r   )r(   ru   ro   Ls       r+   test_schreier_vectorr    s    BA	
BAAbER  A%%%%aAQ#<#<#<<<<<qAQ===000000r-   c                  *   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         g dk    sJ ddd
dd}|                     |          t	          g d          k    sJ d S )Nr#   ra   r    rI   r   r   )r   r   r   er   r"   r   r!   )_random_prec_n)r   r   r   r    r!   r"   rK   _random_prec)r   r"   r!   r    r   r   )r   _random_pr_init_random_gens	random_prr   )r|   rnr  r	  s        r+   test_random_prr    s    aA
A	ANaab99N1aab99N1aaa88N1a>:::>"!3!3!3333344L;;L;11&&&''( ( ( ( ( (r-   c                      t          d          } |                                 du sJ |                                 du sJ |                     d          du sJ |                     d          du sJ t          d          }|                                du sJ |                    d          du sJ |                    d          du sJ 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}|                    |          du sJ t          d          }|                                du sJ |                    d          du sJ |                    d          du sJ |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}|                    |          du sJ t           t	          ddd0          dddd           t	          ddd0          dddd                    } |                                 du sJ t          d          } |                                 du sJ t          d1          } |                                 du sJ t          d          } |                                  |                                 du sJ d S )2Nr`   FT)only_alt)only_symr   r   r!   )r   r#   rI   rJ   rK   r    r"   )r   rJ   rI   r#   r    r"   r   rK   r   r"   rJ   rI   )r   r   r   r    r#   rK   r    )	r   rJ   r   rI   r!   r   r#   rK   r"   )r!   rI   rK   r#   )r   r"   r   r   )	r   r   r!   r"   r   rJ   r    rK   rI   )r#   rK   rJ   )r   r    rI   )	r   r   rK   r   r    rJ   r#   r"   rI   )r   r"   r#   r    )r   r   rI   rJ   r!   rK   )r   r    r!   r"   )r   r   rK   )N_epsr   r   r   r    r!   r"   r#   rI   rJ   rK   r  )	r   r#   r!   r   rI   rJ   r"   rK   r    )	r   r"   rJ   r!   rK   r   r    r#   rI   )r   rK   rJ   r    r   r"   )r   r#   rI   r!   )r#   rJ   rK   )r   r    rI   r   )r   r#   rK   r    )r   rJ   r   rI   r"   rK   r!   r   rK   )r   rJ   r    )r   r!   rI   r#   )r   rJ   r!   rI   r   r    )r   r#   rK   r"   )r"   rJ   rI   )r   r!   r   r#   )r!   rK   r#   )r   r"   rI   size   )r   
is_alt_sym_eval_is_alt_sym_naiver   r   r	   r   _eval_is_alt_sym_monte_carlo)r(   rn   r  r	  r   s        r+   test_is_alt_symr    s+   bA<<>>U""""##%%....##T#22e;;;;##T#22e;;;;rA##%%----##T#22e;;;;##T#22d::::E"aV%:%:%:;<<0001a&9::AA(:(:(:;<<8889::YYYA=>>8889::			Aq6999q!f=>>8889::&8&8&89::aV\\\999=>>
@ 
@L <<\<22d::::A##%%----##T#22d::::##T#22e;;;;"333aS9::8889::***LLL9::			Aq6<<<!=>>aS1#|||aS1a&ABBA 8 8 89::aVYYY=>>***LLL9::			A3q!f=>>			Aq6Aq6999=>>
@ 
@L <<\<22e;;;;!Aqq!!!!Q1--!Aqq!!!!Q1--	/ 	/A <<>>U"""" 	bA))++u4444bA))++u4444 	aALLNNN<<>>U""""""r-   c                     t          d          } |                     ddg          }t          d          D ]}||         ||dz            k    sJ 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    sJ |                    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_blockr   r   Tetrapgroupr   r   )r|   block_systemr{   rn   P1P2s         r+   test_minimal_blockr#    s   aA??Aq6**L1XX 6 6A,q1u"555555qA??Aq6""&8&8&88888<%%q!f--====	++a++Aq11;q!Q1a3P3P	Q	QB	+aAq!Q779JQ9J9J1a9P9P	Q	QBQF##'9'9'99999QF##'9'9'9999999r-   c                     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z  gk    sJ 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   s    r+   test_minimal_blocksr&  	  s    *Q**1a00+aAq!Q2O2OPPA"4"4"46H6H6H!IIIIIqA1#a%((((Q**++A&&&&&&r-   c                  >    t          d          } | j        dk    sJ d S )Nr`   r"   )r   max_div)rn   s    r+   test_max_divr)    s"    rA9>>>>>>r-   c                  >   t          d          } |                                 du sJ t          d          }|                                du sJ t          dddd          }t          d	d
dd          }t	          ||          }|                                du sJ d S )Nr"   TrI   r   r   r   r#   r  r    r!   F)r   is_primitiver   r   r   )rn   r   r'   r)   r(   s        r+   test_is_primitiver,    s    qA>>t####AA>>t####Aq!!$$$AAq!!$$$AAA>>u$$$$$$r-   c                      t          d          } t          g d          }d|i}|                     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)rn   
_random_elr	  r*   r   s        r+   test_random_stabr1  %  s    qA___--JJ'L	al33AOOO,,,,,,	aA1Q441999999r-   c                      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 )Nr;   r   r   r   r    )r   r   transitivity_degree)permr   gen1gen2Alts        r+   test_transitivity_degreer8  /  s    yyy!!D$  A A%%%%''D''D
D$<
(
(C"a''''''r-   c                  X   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    sJ 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}|                    g |j        d|          ||fk    sJ d S )Nr   r   r    r;   r:   r9   r"   r*   r   r   r   r  )	rD   r  r  r   r   r   schreier_sims_randomr   rO   )rn   r   strong_gensr|   r	  s        r+   test_schreier_sims_randomr<  :  sa   %,#$$A....qAq6Dyyy));yyy+A+Aiii((*K!!$Q77D+;NNNNNaA+iii00+iii2H2H$YYY//1 2Lq6Dyyy));yyy+A+Aiii((*K!!"alA$ " & &*.)<= = = = = =r-   c                     t          d          } |                                  | j        }| j        }|g dk    sJ |                     ||dd          }|                     ||d          }|d         g dk    sJ t          | |d         |d                   du sJ |d         g dk    sJ t          | |d         |d                   du sJ d S )	Nr!   r8   r   F)
randomizedr   r9   T)r   schreier_simsr   r;  baseswapr   )rn   r   r;  deterministicr>  s        r+   test_baseswaprB  L  s    qAOO6D-K999JJt[!JFFMD+q11Jyyy((((=+]1-=>>$FFFFa=III%%%%:a=*Q-88D@@@@@@r-   c                  ^   t          g d          } t          | g          }|                    g d          \  }}t          |||          du sJ t	          d          }|                    g d          \  }}t          |||          du sJ t          d          }|                    dg          \  }}t          |||          du sJ t          d          }|j        d d          }|d	         }|d         }	t          |	|           }	t          ||	          }t          ||	          }	|                    d	dg|
          \  }}t          |||          du sJ t          d          }
|
j        d	         }|
                    |dz  g          \  }}t          |
||          du sJ d S )Nr   r8   )r   Tr"   r   r   rI   r   )r   rr   ra   r    )rr   )
r   r   schreier_sims_incrementalr   r   r   r	   rO   r   r   )r   TrivialGroupr   r;  rn   r|   r   rr   gen0r5  r   gens               r+   test_schreier_sims_incrementalrH  Z  s   ???++H#XJ//L$>>III>NND+dK88D@@@@qA333CCD+4--5555aA33!3==D+4--5555A<?D7D7DteDdDdD33!Qd3KKD+4--5555BA
,q/C33#q&3BBD+4--555555r-   c                 v   d }fd}fdd }t          | ||          D ]} t          |           }t          |           }t          |           }|                    |          }	|	                    |          sJ |                    |          }
|
                    |          sJ |                    ||          }	|	                    |          sJ dg|                    d                              |                    |                    sJ ddg|                    d                              d                              |                    |                    sJ dd	g|                    |          }d	g|                    |          }|                    ||                              |          sJ |                                \  }}|j        d
         |                    ||          }t          |||j                  du sJ fd|j        D             sJ d S )Nc                     dS )NTr2   r   s    r+   <lambda>z"_subgroup_search.<locals>.<lambda>u  s    $ r-   c                 *      fdD             k    S )Nc                 &    g | ]} |          S r2   r2   )r5   pointr   s     r+   r7   z6_subgroup_search.<locals>.<lambda>.<locals>.<listcomp>v  s!     > > >e5 > > >r-   r2   )r   pointss   `r+   rL  z"_subgroup_search.<locals>.<lambda>v  s"     > > > >v > > >& H r-   c                 H    t          |           t          |           k    S N)r   )r   r*   s    r+   rL  z"_subgroup_search.<locals>.<lambda>w  s    DAJJ$q!**4 r-   c                     | j         S rR  )is_evenrK  s    r+   rL  z"_subgroup_search.<locals>.<lambda>x  s    !) r-   )init_subgrouprI   r    r!   r"   r   )r   r;  Tc                 *    g | ]} |          d u S )Tr2   )r5   rG  prop_comm_gs     r+   r7   z$_subgroup_search.<locals>.<listcomp>  s(    FFFSC  D(FFFr-   )
r   r   r	   r   subgroup_searchrz   rl   rD  rO   r   )r{   r}   r~   	prop_trueprop_fix_points	prop_evenrn   r   r   Symr7  fix35fix5r   r;  comm_gr*   rP  rW  s                   @@@r+   _subgroup_searchr`  t  s   IHHHHO4444K##I1a^^ G G1QNN	**q!!!!!	**q!!!!!	;;q!!!!!||A**1+<+<_+M+MNNNNNQ||A))!,,88o..0 0 	0 	0 	0Q!!/22  11     k$	  	  	 7799kLOk+NN 	FD&*;<<DDDDFFFFF4EFFFFFFF5G Gr-   c                  (    t          ddd           d S )Nr`   re   r   )r`  r2   r-   r+   test_subgroup_searchrb    s    RQr-   c                  F    t          d           t          ddd           d S )Nr   rf   rg   r   )r   r`  r2   r-   r+   test_subgroup_search2rd    s)    	RQr-   c                     t          d          } t          g d          }|                     |          }|j        sJ t	          d          }|                    |                              |          sJ dD ]X}t          |          } t	          |          }t          |          }t          |          }|||fD ]}t          | |          sJ Yt          d          } t          | 
                                          }|D ]}	t          | |	          sJ g }
dD ]}|
                    t          |                     |
                    t	          |                     |
                    t          |                     |
                    t          |                     |
D ]?}|
D ]:}|                    |d          r"|j        |j        k    rt          ||          sJ ;@d S )Nr    r8   r!   r    r!   r"   r"   r   r   )r   r   r   
is_trivialr	   rz   r   r   r   r@   r   r   r&   )rn   r   closurer   r{   r|   r   r   r   r   r   r   s               r+   test_normal_closureri    s!   qA999%%Hx((GAA**1----- 1 11Q!NNa) 	1 	1B)!R000000	1 	qAA%%''((H 2 2%a111111E % %^A&&'''%a(()))]1%%&&&[^^$$$$ 7 7 	7 	7Cr1%% 7#*	*A*A-b#66666	77 7r-   c                  4   t          t          g d          g          } |                                 d                             |           sJ dD ]@}t	          |          }|                                d                             |          sJ At          d          }|                                }|d                             t	          d                    sJ |d                             t          d                    sJ |d         j        sJ d S )Nr8   r   r"   r#   rI   r!   r   r   r    )r   r   derived_seriesrz   r	   r   r   rg  r   r{   r   rn   seriess        r+   test_derived_seriesro    s   [33455D  #//55555 4 4Q!!!$00333333qAF!9  !1!!4!455555!9  q!1!122222!9r-   c                     t          t          g d          g          } |                                 d                             |           sJ dD ]@}t	          |          }|                                d                             |          sJ At          d          }|                                }t          |          dk    sJ |d                             t	          d                    sJ d S )Nr8   r   rk  r#   r   r   )r   r   lower_central_seriesrz   r	   r   rB   rm  s        r+   test_lower_central_seriesrr    s     [33455D$$&&q)55d;;;;; : :Q%%''*66q999999qA##%%Fv;;!!9  !1!!4!45555555r-   c                     t          d          } t          t          g d          g          }|                     ||                              |          sJ t          d          }|                     ||                              |          sJ dD ]n}t          |          } t          |          }t          |          }|                     ||                              |                     ||                    sJ ot          d          } t          dd          }t          dd          }t          t          g d          g          }|                     ||                              |          sJ |                     ||                              |          sJ t          d          } t          d          }|                     ||                               |          sJ d S )	Nr    r8   rf  rI   r   r"   r!   )r   r   r   r    r!   r"   r#   )r   r   r   
commutatorrz   r	   r   r
   )rn   r   r   r{   r|   A1A2s          r+   test_commutatorrw    s   qA[33455D<<d##//55555A<<a  ,,T22222 B B1Q!||Aq!!--all1a.@.@AAAAAAqA	a		B	a		B[)>)>)>??@AAD<<B++D11111<<B++D11111qAA<<1))!,,,,,,,r-   c                      dD ]6} t          |           }t          | | dz             }|j        sJ |j        sJ 7t          ddd          }|j        sJ t          d          j        du sJ d S )Nr   r   r"   rI   r`   F)r   r
   is_nilpotentr	   )r{   r   Abs      r+   test_is_nilpotentr{    s      NN!QU##~	aB		B?A+u444444r-   c            
          t          d          D ]B} t          t          t          t          |                               g          }|j        sJ Cd S )Nr"   )r   r   r   r@   rg  )r{   r   s     r+   test_is_trivialr}    sV    1XX  T%((^^!<!< =>> r-   c                  ^   t          d          } |                     dg          }|j        t          d          gk    sJ t          d          } g }| }dD ]V}|                    |          }|                    |           |                     |                              |          sJ Wd S )Nr   r   r   r"   )r   r   r    r!   r   )r   pointwise_stabilizerrO   r   rl   r   rz   )rn   stabrP  rO  s       r+   test_pointwise_stabilizerr    s    qA!!1#&&D?{1~~.....qAFD  @ @u%%e%%f--99$??????@ @r-   c                  F   t           j                            dt          t	          d                              t          g d          k    sJ t           j                            dt          t	          d                              t          g d          k    sJ d S )Nr"   )seed)r!   rI   r#   r"   r   r    r   r   rI   )r#   rI   r    r   r"   r!   r   r   )r   r  	make_permr@   r   r   r2   r-   r+   test_make_permr    s    ;  eAhh 88,,,--. . . .;  eAhh 88,,,--. . . . . .r-   c                  >   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    sJ d S )Nr   )	FiniteSetr   r    )sympy.sets.setsr  r   setr   r   )r  r6   s     r+   test_elementsr  %  s    ))))))AqA""+,,QQPQARAR0SSSSS9&q))239[A&&A778 8 8 8 8 8r-   c                      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   r2   r-   r+   test_is_groupr  .  sV    K!,,k!A.>.>??HDPPPP!%------r-   c                      t                      t          t                                k    sJ t                      dk    du sJ d S )Nr   F)r   r   r2   r-   r+   test_PermutationGroupr  3  sH    !1+--!@!@@@@@!#------r-   c                  8   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    sJ d S )Nr"   r   r   r   r    r!   )r	   r   r   coset_transversalr   s     r+   test_coset_transvesalr  8  s)   AQq++,<K!,<,<Qq,A,ABBAq!!	QQ1--{1a/C/C	Q1		~{1~~aA668IAq8I8I!Q8O8O	Q1a	#	#[Aq!Q%?%?	Q1a	#	#[Aq!Q%?%?	AA A A A A Ar-   c                     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    sJ d S )Nr   r   r   r    r!   rI   r"   r#   )
r   r   r   r   r   r   r    r    r   r   )
r!   r"   r   r"   r#   r   rI   rI   r   r   )
r"   r!   r"   r   r   r#   rJ   rJ   r#   r#   )
r    r    r    r    rI   rJ   r   r   r    r    )
r   r   r!   r!   r!   r!   rK   rK   r!   r!   )
r   r   r   r   r"   r"   r`   r`   r"   r"   )
r#   r#   r#   r#   r   r   ra   ra   r   r   )
rK   r`   rJ   r`   ra   r    r   r   rI   rI   )
r`   rK   r`   rI   r    ra   r   r   ra   ra   )
rJ   rI   rK   rK   rK   rK   r!   r!   rK   rK   )
rI   rJ   rI   rJ   r`   r`   r"   r"   r`   r`   )
ra   ra   ra   ra   rJ   rI   r#   r#   rJ   rJ   )r   r   coset_tabler   s     r+   test_coset_tabler  B  s&   Qq1--{1Qq/A/A	Qq1		{1Q//Qq1A1A	C 	CAQq1--{1Q/?/?@@A==	'	'	')G)G)G	'	'	')G)G)G	'	'	')I)I)I	)	)	)+L+L+L	,	,	,.L.L.L	+	+	+-O-O-O	QQ Q Q Q Q Qr-   c                      t          t          ddd          t          ddd                    } |                     t          ddd          g          }|                    |           sJ d S )Nr   r   r   r    )r   r   subgrouprz   r   s     r+   test_subgroupr  O  sg    Qq++[1Q-?-?@@A	

K!A&&'((A==r-   c                      t          d           t          ddd          dd          }                     |           }t          fd|D                       sJ j        }|D ]}||z  }|| k    sJ d S )Nr"   r   r   r    r   r!   c              3   *   K   | ]}|j         v V  d S rR  )r;  )r5   r*   r(   s     r+   	<genexpr>z)test_generator_product.<locals>.<genexpr>Y  s*      00aqAM!000000r-   )r   r   generator_productallr   )r6   rr   r   r*   r(   s       @r+   test_generator_productr  U  s    qAAq!Q""Aq!!D0000400000000	
A  aC666666r-   c                     t           t          dd          dd          t          dddddd                    } |                     d          }|                                dk    sJ t	          d          } |                     d          }|                                dk    sJ t           t          dd          dd          t          dddddd          t          dd                    } |                     d          }|                                dk    sJ |                     d          }|                                d	k    sJ t          d
          } |                     d          }|                                dk    sJ |                     d          }|                                dk    sJ |                     d          }|                                dk    sJ d}d}t          dd          D ]}t          |          } |                     d          }|                                }|d|z  z  dk    r*t          |          |k    sJ t          |          }|dz  }pt          |          |k    sJ t          d          }|                    d          }|                                |                                z  dk    sJ |                                |                                z  dz  dk    sJ t          d          }|                    d          }|                                |                                z  dk    sJ |                                |                                z  dz  dk    sJ t	          d          }|                    d          }|                                dk    sJ t	          d          }|                    d          }|                                dk    sJ d S )Nr   r"   r   r!   r   r    rb   rK   rJ   r`      Q      r   rh   )r6   r   )
r   r   r   rL   r   r   r   rq  rB   r	   )r   rn   explengthr{   lsr(   s          r+   test_sylow_subgroupr  `  s   *Q**1a00+aAq!Q2O2OPPA	A7799>>>>bA	A7799>>>>Aq!QQ1aA!>!>Aq@Q@Q	S 	SA	A7799>>>>	A7799>>>>rA	A7799	A7799????	A7799???? CF1a[[ 
% 
%1Q##%%3;??r77V####WWF1HCCr77f$$$$$sA	A7799qwwyy A%%%%7799QWWYY"Q&&&&A	A7799qwwyy A%%%%7799QWWYY"Q&&&&bA	1A7799>>>>bA	1A7799>>>>>>r-   c            
         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          } | |          sJ t          d          } | |          sJ t          t          dddd           t          d          dd           t          dd          dd          g          } ||          sJ t	          d
          } ||          sJ  t          dd          dd          } t          dd          dd          }t          d	d          }t          |||          } ||          sJ d S )Nc                 ~    |                                  }|                                |                                 k    S rR  )presentationrL   )r   r(   s     r+   _testz test_presentation.<locals>._test  s,    NNwwyyAGGII%%r-   c                     |                                  }t          |j                  t          | j                  k    }|o)|                                |                                 k    S rR  )strong_presentationrB   rO   r;  rL   )r   r(   chks      r+   _strong_testz'test_presentation.<locals>._strong_test  sQ    !!##!,3q}#5#55-qwwyyAGGII--r-   r   r   r"   r   r    rI   r!   r#   )r   r   r	   r   r   )r  r  r   r'   r)   r   s         r+   test_presentationr    s   & & &. . .
 	-Qq1--a!A668LAa!8L8LQqQRST8U8UVVA588OOOA588OOOqA588OOO	Qq1		~{1~~a224DK!4D4DQq4I4IJ	L 	LA<??aA<??Aa1AAa1AAaAAq!!A<??r-   c                      t          g d          } t          g d          }t          | |g          }|j        du sJ t          g d          } t          g d          }t          | |g          }|j        du sJ d S )Nr8   r   Tr   r   F)r   r   is_polycyclic)r'   r)   r(   s      r+   test_polycyclicr    s    IIIAIIIA!Q  A?d""""OOO$$AOOO$$A!Q  A?e######r-   c                     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 sJ t          d	d
d          }t          | ||g          }|                    d          du sJ t          d	                              d          }|                    d          du sJ t          d	                              d          }|                    d          du sJ d S )N)r   r"   r   r   r    r#   r!   rI   Fr   r   r   r    Tr!   r"   r#   )r   r   is_elementaryr   r   r	   )r'   r(   r)   r   ro   s        r+   test_elementaryr    s]   )))**A!A??1&&&&Aq!QAAq!QA!Q  A??1%%%%Aq!A!Q##A??1&&&&q((++A??1&&&&**1--A??1%%%%%%r-   c                  n    t          d          } | j        du sJ t          d          } | j        du sJ d S )Nr    Fr"   T)r	   
is_perfectr(   s    r+   test_perfectr    sH    A<5    A<4r-   c                      t          t          ddd          t          ddd                    } |                     t          ddd          g          }|                     |          dk    sJ d S )Nr   r   r   r    r!   )r   r   r  indexr   s     r+   
test_indexr    sd    Qq++[1Q-?-?@@A	

K!A&&'((A771::??????r-   c                  F   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        sJ t	          t          dddd           t          dd          dd                    } | j        sJ t	          t          d           t          dd          dd           t          dd          dd           t          dd          dd                    } | j        du sJ 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        sJ t	          j        ddg          du sJ t	          j        ddg          du sJ t	          j        ddg          J t	          j        g d          J t	          j        g d          du sJ t	          t          dddd           t          dd          dd                    } | j        sJ | j        sJ 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    rI   r!   r   r   Fr"   r#   rJ   rK   r`   ra   rb   rc   rd   Trx   )r"   rI   rc   )	r   	is_cyclicr
   r	   r   r   _distinct_primes_lemma_is_abelianrO   r  s    r+   test_cyclicr    s   qA;QA;QA{A;A{ 	Q1--{1a/C/CDDA;Aq!QAq!Q	 	A ;AAq!QAq!QAq!Q		 	A ;% 	Aq!Q1aAq"b"b"EEAq!Q2r2q!Q1b"EE	 	A ; 2Aq6::dBBBB2Aq6::dBBBB2Aq6::BBB2999==EEE2:::>>$FFFFAq!QAq!Q	! 	!A ;= 	.++67A;% 	Aq!QAq!	 	A ; 	AqAqAq!	 	A
 ;%r-   c                     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        sJ t          d          } | j        rJ t	           t          dd          dd            t          dd          dd          dd                    } | j        sJ t	            t          dd          dd          dd          t          ddddddd                    } | j        sJ t	          t          dd          t          dd          t          dd                    } | j        rJ t	            t          dd          dd          dd            t          dd          dd          dd          t          ddddddd                    } | j        sJ d S )Nr   r    r!   r"   r#   r   r   )r   is_dihedralr
   r   r   r   r  s    r+   test_dihedralr  /  sL   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                     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    sJ t	          d          } |                                 dgk    sJ t          d          } |                                 ddgk    sJ t          t          ddddddd          g          } |                                 dgk    sJ t          d	          } |                     d          }|                                dgk    sJ t          t          d
dd          t          d
dd                    } |                                 dgk    sJ t          t          d
d           t          d
ddd          dddd          g          } |                                 ddgk    sJ t          d          } |                     d          }|                                g dk    sJ |                     d          }|                                g dk    sJ |                     d          }|                                g dk    sJ d S )Nr   r    r!   )r   r    r!   r   r"   r#   rI   rb   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(   rn   s     r+   test_abelian_invariantsr  \  s   Q1A!!YYY....Aq!Q//Q1B1BKPQSTDUDUVWWA!!aV++++A!!R''''A!!aS((((aA!!aV+++++aAq!Q::;<<A!!aS((((bA	A!!aS((((Q1--{1a/C/CDDA!!aS((((+a++-D[Aq!-D-DQ1a-P-PQRRA!!aV++++rA	A!!%C%C%CCCCC	A!!\\\1111	A!!YYY......r-   c                     t          ddd          } t          dd          }t          | |g          }|                                }||                                k    sJ t	          d          }|                                d         |k    sJ t          |                                          dk    sJ t          d          }|                                d         |k    sJ t          |                                          dk    sJ t          d          }|                                }t          |d         t          d                    sJ t          |d         t          d                    sJ |d         j	        sJ d S )Nr   r   r    r!   r   r"   rJ   )
r   r   composition_seriesrl  r   rB   r	   r   r   rg  )r'   r)   r(   comp_seriesrn   r   rn  s          r+   test_composition_seriesr  z  s   Aq!AAqA!Q  A&&((K!**,,,,,, 	qA!!!$))))q##%%&&!++++A!!!$))))q##%%&&!++++ 	AA!!##FKNN33333KNN33333!9r-   c                     t          ddd          } t          ddd          }t          | |          j        du sJ t          ddd          } t          ddd          }t          | |          j        du sJ t          dddd          }  t          dd          dd          }t          | |          j        du sJ d S )Nr   r   r   r    r  TF)r   r   is_symmetric)r'   r)   s     r+   test_is_symmetricr    s    Aq!AAqq!!!AAq!!.$6666Aq!AAqq!!!AAq!!.$6666Aq!QAAq!QAAq!!.%777777r-   c                     t          d          } t          ddd          }t          dddd          t          ddd          t          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    sJ d S )Nr!   r   r   r    r   r  )r   r   conjugacy_class)rn   r   r   s      r+   test_conjugacy_classr    s    qAAq!A	Q1Q	'	'	'Q1)=)=Aq+++[Aq-A-AAq!!;q!Q#7#7Aq!!;q!Q#7#7	9A Q1$$$$$$r-   c                     t          d          } t          d          ht          ddd          t          dd          t          dd          ht          ddd          t          ddd          hg}|                                 t          |          t                    k    sJ t	          fd|D                       sJ d S )Nr    r  r   r   r   c              3       K   | ]}|v V  	d S rR  r2   )r5   r  computeds     r+   r  z)test_conjugacy_classes.<locals>.<genexpr>  s'      //qH}//////r-   )r   r   conjugacy_classesrB   r  )rn   expectedr  s     @r+   test_conjugacy_classesr    s    qAA&&&'
a1
%
%
%{1a'8'8+a:K:K	L
aA

Aq! 4 4	57H ""$$Hx==CMM))))////h//////////r-   c            
         t          dd          } t          dd          }t          | |g          }|| z  }|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 sJ 	| |z  }|j        rJ |j        sJ |                                } t          d          dd          t          ddd          t          dd          t          d          t          dd          t          ddd          g}|D ]}||v sJ 	t          t          dddd          t          ddd                    }t          t          dddd                    } t          dd          dd          }	t          |	||d          }|j        sJ |                                }t          dddd          t          d           t          dd          dd          t          dddd          g}|D ]}||v sJ 	d 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_cosetro   r*   s
             r+   test_coset_classr    s   AqAAqA!Q  A!I####&&&&!!##IAq!!;q!Q#7#7Q9J9JAAq! 4 4k!Q6J6JLH  h1J((((####""$$IAq!$$k!Q&:&:K1<M<MNNK1%%{1a';';=H  hQ1a00+aA2F2FGGAQ1a0011AAq!QAaA3'''I####!!##IAq!Q''Q9JQ9J9J1a9P9P1aH  h r-   c                      t          d          } | j        dk    sJ |                                 dk    sJ |                                 t	          d          k    sJ d S )Nr"   r   r!   )r   r&   rL   r   r   )r'   s    r+   test_symmetricpermutationgroupr    s\    !!$$A8q====7799::<<;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,   rG   rM   rY   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r#  r&  r)  r,  r1  r8  r<  rB  rH  r`  rb  rd  ri  ro  rr  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  r  r  r2   r-   r+   <module>r     sI   ' ' ' ' ' ' @ @ @ @ @ @ ; ; ; ; ; ;> > > > > > > > > > > > > > > >: : : : : : : : : : : : 8 8 8 8 8 8 E E E E E E E E          2 2 2 2 2 2 2 2 2 2  ,  .+ + +  $> > >@% % %6+4 +4 +4\< < <# # #: =  =  =F)# )# )#XK K K&          $   
! 
! 
!& & &1 1 1( ( (;# ;# ;#|: : : ' ' '  
	% 	% 	%  ( ( (= = =$A A A6 6 64G G GD           
 7  7  7F      6 6 6 - - -6
5 
5 
5  
@ 
@ 
@. . .8 8 8. . .
. . .
A A A
Q 
Q 
Q    : : :z   B	$ 	$ 	$& & &&       A  A  A H* * *Z/ / /<     .8 8 8% % %0 0 0$ $ $L* * * * *r-   