
    Цi9                     \    S SK Jr  S SKJr  S SKJr  S SKJrJr  S r	S r
S rS rS	 rS
 rg)    Permutation)symbolsMatrix)
variationsrotate_leftc              #   ^   #    [        [        U 5      U 5       H  n[        U5      v   M     g7f)z
Generates the symmetric group of order n, Sn.

Examples
========

>>> from sympy.combinatorics.generators import symmetric
>>> list(symmetric(3))
[(2), (1 2), (2)(0 1), (0 1 2), (0 2 1), (0 2)]
N)r   ranger   )nperms     ]/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/sympy/combinatorics/generators.py	symmetricr      s'      58Q'$ (s   +-c              #      #    [        [        U 5      5      n[        U 5       H  n[        U5      v   [        US5      nM     g7f)z
Generates the cyclic group of order n, Cn.

Examples
========

>>> from sympy.combinatorics.generators import cyclic
>>> list(cyclic(5))
[(4), (0 1 2 3 4), (0 2 4 1 3),
 (0 3 1 4 2), (0 4 3 2 1)]

See Also
========

dihedral
   N)listr   r   r	   r   genis      r   cyclicr      s9     " uQx.C1X##q! s   AAc              #      #    [        [        U 5      U 5       H%  n[        U5      nUR                  (       d  M!  Uv   M'     g7f)z
Generates the alternating group of order n, An.

Examples
========

>>> from sympy.combinatorics.generators import alternating
>>> list(alternating(3))
[(2), (0 1 2), (0 2 1)]
N)r   r   r   is_even)r   r   ps      r   alternatingr   -   s4      58Q'999G (s
   3A	Ac              #     #    U S:X  a  [        SS/5      v   [        SS/5      v   gU S:X  a=  [        / SQ5      v   [        / SQ5      v   [        / SQ5      v   [        / SQ5      v   g[        [        U 5      5      n[        U 5       H/  n[        U5      v   [        USSS	2   5      v   [        US5      nM1     g7f)
a  
Generates the dihedral group of order 2n, Dn.

The result is given as a subgroup of Sn, except for the special cases n=1
(the group S2) and n=2 (the Klein 4-group) where that's not possible
and embeddings in S2 and S4 respectively are given.

Examples
========

>>> from sympy.combinatorics.generators import dihedral
>>> list(dihedral(3))
[(2), (0 2), (0 1 2), (1 2), (0 2 1), (2)(0 1)]

See Also
========

cyclic
r   r      )r   r   r      )r   r   r   r   )r   r   r   r   )r   r   r   r   N)r   r   r   r	   r   s      r   dihedralr   >   s     ( 	Av1a&!!1a&!!	
a,'','','',''58nqAc""c$B$i((c1%C s   B<B>c                      / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/n U  VVVs/ s H2  n[        U VVs/ s H  o" Vs/ s H  o3S-
  PM	     snPM     snnSS	9PM4     snnn$ s  snf s  snnf s  snnnf )
zhReturn the permutations of the 3x3 Rubik's cube, see
https://www.gap-system.org/Doc/Examples/rubik.html
))r   r         )r            )	   !         )
   "         )   #         ))r&   r.         )r*            )r   r)   )   (   )r%      ,   %   )r"      .   r/   ))r)   r1      r<   )r-         r9   )r"   r(   +   r2   )r$      *   r4   )r!      r7   r.   ))r(   r0       rD   )r,         rB   )r   &   rA   r1   )r#   $   -   r?   )r!   r'   0   r>   ))r'   r/   r8   rH   )r+   r;   '   rI   )r   r&   r=   rE   )r   r6   /   rF   )r   r3   rK   r0   ))r7   rA   rK   r=   )rC   rJ   rM   r:   )r3   r<   rD   rH   )r5   r@   rG   rL   )r2   r>   rE   r8   r   rK   )sizer   )axxir   s       r   rubik_cube_generatorsrR   b   sp    
						-	A NOOQKq9q,Aa%,q9CQOO,9Os'   A$	AAA	A$AA$c                   ^ ^^^^^^^^^^^^^^^^^^^^^^  T S:  a  [        S5      eUU 4S jmU4S jmU4S jmUU 4S jmUU 4S jmUU 4S jmUU 4S	 jm UU 4S
 jmSUU 4S jjmU4S jmSUUUUUUUUUUUUUU 4S jjmU4S jnSUUUUUUUUU4	S jjmU4S jnSUUUUUUUUU4	S jjmU4S jn[        S5      =u  mmmmmmm0 mSn[        S5       HC  n/ n[        T S-  5       H  nUR                  U5        US-  nM     [	        T T U5      TTU   '   ME     SUUU4S jjn/ m[        [        ST S-  -  5      5      n	[        T S-
  5       H  n
T" U
5        U" 5         U" U
5        M     U" S5      U	:X  d   eT" 5         [        T S-
  5       H(  n
T" U
5        U" 5         U" 5         T" 5         U" U
5        M*     U" 5         U" S5      U	:X  d   eT" 5         U" 5         U" 5         [        T S-
  5       HD  n
T" U
5        T" 5         T" 5         U" 5         U" 5         T" 5         U" 5         U" 5         U" U
5        MF     T" 5         T" 5         U" 5         U" S5      U	:X  d   eT$ )a  Return permutations for an nxn Rubik's cube.

Permutations returned are for rotation of each of the slice
from the face up to the last face for each of the 3 sides (in this order):
front, right and bottom. Hence, the first n - 1 permutations are for the
slices from the front.
r   zdimension of cube must be > 1c                 2   > TU    R                  TU-
  5      $ Ncolfr   facesr   s     r   getrrubik.<locals>.getr       Qx||AE""    c                 2   > TU    R                  US-
  5      $ Nr   rV   rY   r   rZ   s     r   getlrubik.<locals>.getl   r]   r^   c                 2   > TU    R                  US-
  5      $ r`   rowra   s     r   geturubik.<locals>.getu   r]   r^   c                 2   > TU    R                  TU-
  5      $ rU   re   rX   s     r   getdrubik.<locals>.getd   r]   r^   c                 :   > [        TSU5      TU    S S 2TU-
  4'   g r`   r   rY   r   srZ   r   s      r   setrrubik.<locals>.setr   !    #Aq!_aAEr^   c                 :   > [        TSU5      TU    S S 2US-
  4'   g r`   r   rm   s      r   setlrubik.<locals>.setl   rq   r^   c                 :   > [        STU5      TU    US-
  S S 24'   g r`   r   rm   s      r   seturubik.<locals>.setu   !    #Aq!_aQr^   c                 :   > [        STU5      TU    TU-
  S S 24'   g r`   r   rm   s      r   setdrubik.<locals>.setd   rx   r^   r   c                    > [        U5       HX  nTU    n/ n[        T5       H/  n[        TS-
  SS5       H  nUR                  X1U4   5        M     M1     [        TTU5      TU '   MZ     g )Nr   r   )r   appendr   )Fr_facervcrZ   r   s         r   cwrubik.<locals>.cw   sj    qA8DB1Xq1ub"-AIIda4j) .  aB'E!H r^   c                    > T" U S5        g Nr    )r~   r   s    r   ccwrubik.<locals>.ccw   s    
1ar^   c                 R  > [        U5       H  nU S:X  a  T	" T5        U S-  n T" TU 5      nT" TU [        T" TU 5      5      5        T" TU [        [        T" TU 5      5      5      5        T" TU [        T
" TU 5      5      5        T" TU [        [        U5      5      5        U S-  n M     g )Nr   r   )r   r   reversed)r   r   r   tempDr~   LRUr   rj   rb   r[   rg   rz   rs   ro   rv   s       r   fcwrubik.<locals>.fcw   s    qAAv1FA1:DAtDAJ'(AtHT!QZ012AtDAJ'(AtHTN+,FA r^   c                    > T" U S5        g r   r   )r   r   s    r   fccwrubik.<locals>.fccw   s    Aq	r^   c                    >	 [        U 5       HU  nT
" T5        T	" T5        T
" T5        TT   nT
" T5        TT   TT'   T
" T5        TT   TT'   T
" T5        TT   TT'   UTT'   MW     g rU   r   r   r   tBr   r~   r   r   r   r   r   rZ   s      r   FCWrubik.<locals>.FCW   st    qAqEFqEaAqEQxE!HqEQxE!HqEQxE!HE!H r^   c                     > T " S5        g r   r   )r   s   r   FCCWrubik.<locals>.FCCW   
    Ar^   c                    >	 [        U 5       H5  nT
" T5        T	" T5        TT   nTT   TT'   TT   TT'   TT   TT'   UTT'   M7     g rU   r   r   s      r   UCWrubik.<locals>.UCW   sX    qAqEFaAQxE!HQxE!HQxE!HE!H r^   c                     > T " S5        g r   r   )r   s   r   UCCWrubik.<locals>.UCCW   r   r^   zU, F, R, B, L, Dr   r"   c                    > / nT H  nUR                  TU   5        M     U (       a  U$ TR                  [        U5      5        g rU   )extendr}   r   )showr   rY   rZ   gnamess      r   r   rubik.<locals>.perm   s:    AHHU1X H	Q r^   )r   )r   )
ValueErrorr   r   r}   r   r   )!r   r   r   r   countfirY   rO   r   Ir   r   r   r~   r   r   r   r   r   r   r   rZ   r   r   rj   rb   r[   rg   r   rz   rs   ro   rv   s!   `          @@@@@@@@@@@@@@@@@@@@@@r   rubikr   w   s*    	1u899####----( (
 
 
  
  ''9::Aq!Q1u EEAhq!tAHHUOQJE  "!Q?eBi ! ! 	AU1QT6]A 1q5\AQ  7a<< E1q5\A 	Q  	F7a<< EFF1q5\A 	Q " EEF7a<<Hr^   N) sympy.combinatorics.permutationsr   sympy.core.symbolr   sympy.matricesr   sympy.utilities.iterablesr   r	   r   r   r   r   rR   r   r   r^   r   <module>r      s2    8 % ! = "."!&HP*wr^   