ó
    ˆ*£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     Ú[/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/combinatorics/generators.pyÚ	<genexpr>Úsymmetric.<locals>.<genexpr>   s   é € ÐFÒ.E d”˜D×!Ð!Ò.Eùs   ‚N)r   Úrange)Úns    r   Ú	symmetricr      s!   é € ñ G¬j¼¸q»À1Ô.EÓF×FÓFù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   é € ô" Œu�Q‹x‹.€CÜ�1ŽXˆÜ˜#ÓÒÜ˜#˜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 ›8 QÖ'ˆÜ˜ÓˆØ�9�9‰9ØŒ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¤   é € ð( 	ˆAƒvÜ˜1˜a˜&Ó!Ò!Ü˜1˜a˜&Ó!Ó!Ø	
ˆa‹Üš,Ó'Ò'Üš,Ó'Ò'Üš,Ó'Ò'Üš,Ó'Ó'ä”5˜“8‹nˆÜ�q–ˆAÜ˜cÓ"Ò"Ü˜c¡$ B $™iÓ(Ò(Ü˜c 1Ó%Š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ÕOÊQÈŒK±qÔ9²q°¨Ó,ª A˜aœ%©Ô,±qÒ9ÀÔCÉQÓ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ƒ   ó   ø€ Ø�Q‰x�|‰|˜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�   ó!   ø€ Ü# A q¨!›_ˆˆ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•   ó!   ø€ Ü# A q¨!›_ˆˆ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Ø˜‘8ˆDØˆBÜ˜1–X�Ü˜q 1™u b¨"Ö-�AØ—I‘I˜d a 4™jÖ)ó .ñ ô ˜a  BÓ'ˆE�!‹Hò rb   c                 ó   >• T" U S5        g ©Nr"   © )r‚   rˆ   s    €r   ÚccwÚrubik.<locals>.ccw¥   s   ø€ Ù
ˆ1ˆa�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Ø�A‹vÙ�1”Ø�‰FˆAÙ˜˜1“:ˆDÙ��A”t™D  A›JÓ'Ô(Ù��A”tœH¡T¨!¨Q£ZÓ0Ó1Ô2Ù��A”t™D  A›JÓ'Ô(Ù��A”tœH T›NÓ+Ô,Ø�‰FŠAò rb   c                 ó   >• T" U S5        g r‹   rŒ   )r   r–   s    €r   ÚfccwÚrubik.<locals>.fccw·   s   ø€ ÙˆAˆq�	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ÙˆqŒEÙ�ŒFÙˆqŒEØ�a‘ˆAÙˆqŒEØ˜Q‘xˆE�!‰HÙˆqŒEØ˜Q‘xˆE�!‰HÙˆqŒEØ˜Q‘xˆE�!‰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ÙˆqŒEÙ�ŒFØ�a‘ˆAØ˜Q‘xˆE�!‰HØ˜Q‘xˆE�!‰HØ˜Q‘xˆE�!‰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Ø�H‰H�U˜1‘XÖñ æØˆ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*  ÿÿþ€ ð 	ˆ1ƒuÜÐ8Ó9Ð9ö#õ#õ#ö#ö-ö-ö-ö-÷(ð (õ÷
÷ 
ô 
õ÷÷ õ÷÷ õô
  'Ð'9Ó:Ð:Ñ€A€qˆ!ˆQ��1�uð €EØ€EÜ�AŽhˆØˆÜ�q˜!‘t–ˆAØ�H‰H�UŒOØ�Q‰JŠEñ ô " ! Q¨›?ˆˆe�B‰iÓñ ÷!ñ !ð 	€AÜŒU�1�Q˜‘T‘6‹]Ó€Aô �1�q‘5Ž\ˆÙˆAŒÙŒÙˆQŽñ ñ �‹7�a‹<Ðˆ<ñ „EÜ�1�q‘5Ž\ˆÙˆAŒáŒáŒñ 	ŒÙˆQŽñ ñ 	„FÙ�‹7�a‹<Ðˆ<ñ „EÙ„FÙ„FÜ�1�q‘5Ž\ˆáˆAŒáŒÙŒÙŒáŒñ 	ŒÙŒÙŒáˆQŽñ ñ" „EÙ„EÙ„FÙ�‹7�a‹<Ðˆ<à€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   