
    \h7                     \    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              #   X   #    S [        [        U 5      U 5       5        Sh  vN   g N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)]
c              3   8   #    U  H  n[        U5      v   M     g 7fNr   ).0perms     V/var/www/auris/envauris/lib/python3.13/site-packages/sympy/combinatorics/generators.py	<genexpr>symmetric.<locals>.<genexpr>   s     F.EdD!!.Es   N)r   range)ns    r   	symmetricr      s!      Gjq1.EFFFs    *(*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+   r3         )r/            )r   r.   )   (   )r*      ,   %   )r'      .   r4   ))r.   r6      rA   )r2         r>   )r'   r-   +   r7   )r)      *   r9   )r&      r<   r3   ))r-   r5       rI   )r1         rG   )r"   &   rF   r6   )r(   $   -   rD   )r&   r,   0   rC   ))r,   r4   r=   rM   )r0   r@   '   rN   )r"   r+   rB   rJ   )r!   r;   /   rK   )r   r8   rP   r5   ))r<   rF   rP   rB   )rH   rO   rR   r?   )r8   rA   rI   rM   )r:   rE   rL   rQ   )r7   rC   rJ   r=   r   rP   )sizer   )axxir   s       r   rubik_cube_generatorsrW   a   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      $ r   colfr   facesr   s     r   getrrubik.<locals>.getr       Qx||AE""    c                 2   > TU    R                  US-
  5      $ Nr   rZ   r]   r   r^   s     r   getlrubik.<locals>.getl   ra   rb   c                 2   > TU    R                  US-
  5      $ rd   rowre   s     r   geturubik.<locals>.getu   ra   rb   c                 2   > TU    R                  TU-
  5      $ r   ri   r\   s     r   getdrubik.<locals>.getd   ra   rb   c                 :   > [        TSU5      TU    S S 2TU-
  4'   g rd   r   r]   r   sr^   r   s      r   setrrubik.<locals>.setr   !    #Aq!_aAErb   c                 :   > [        TSU5      TU    S S 2US-
  4'   g rd   r   rq   s      r   setlrubik.<locals>.setl   ru   rb   c                 :   > [        STU5      TU    US-
  S S 24'   g rd   r   rq   s      r   seturubik.<locals>.setu   !    #Aq!_aQrb   c                 :   > [        STU5      TU    TU-
  S S 24'   g rd   r   rq   s      r   setdrubik.<locals>.setd   r|   rb   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cr^   r   s         r   cwrubik.<locals>.cw   sj    qA8DB1Xq1ub"-AIIda4j) .  aB'E!H rb   c                    > T" U S5        g Nr"    )r   r   s    r   ccwrubik.<locals>.ccw   s    
1arb   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   rn   rf   r_   rk   r~   rw   rs   rz   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 rb   c                    > T" U S5        g r   r   )r   r   s    r   fccwrubik.<locals>.fccw   s    Aq	rb   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 r   r   r   r   tBr   r   r   r   r   r   r   r^   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 rb   c                     > T " S5        g r   r   )r   s   r   FCCWrubik.<locals>.FCCW   
    Arb   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 r   r   r   s      r   UCWrubik.<locals>.UCW   sX    qAqEFaAQxE!HQxE!HQxE!HE!H rb   c                     > T " S5        g r   r   )r   s   r   UCCWrubik.<locals>.UCCW   r   rb   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 r   )extendr   r   )showr   r]   r^   gnamess      r   r   rubik.<locals>.perm   s:    AHHU1X H	Q rb   )r   )r   )
ValueErrorr   r   r   r   r   )!r   r   r   r   countfir]   rT   r   Ir   r   r   r   r   r   r   r   r   r   r   r^   r   r   rn   rf   r_   rk   r   r~   rw   rs   rz   s!   `          @@@@@@@@@@@@@@@@@@@@@@r   rubikr   v   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<<Hrb   N) sympy.combinatorics.permutationsr   sympy.core.symbolr   sympy.matricesr   sympy.utilities.iterablesr   r	   r   r   r   r$   rW   r   r   rb   r   <module>r      s3    8 % ! =G"."!&HP*wrb   