Ë
    7^(h7  ã                   ó\   — d dl mZ d dlmZ d dlmZ d dlmZmZ d„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zy)é    ©ÚPermutation)Úsymbols©ÚMatrix)Ú
variationsÚrotate_leftc              #   óX   K  — d„ t        t        | «      | «      D «       E d{  –—†  y7 Œ­w)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   ó2   K  — | ]  }t        |«      –— Œ y ­w©Nr   )Ú.0Úperms     ú\/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/combinatorics/generators.pyú	<genexpr>zsymmetric.<locals>.<genexpr>   s   è ø€ ÒF d”˜D×!ÑFùs   ‚N)r   Úrange)Úns    r   Ú	symmetricr      s"   è ø€ ñ G¬j¼¸q»À1Ó.EÔF×FÒFús   ‚ *¢(£*c              #   ó†   K  — t        t        | «      «      }t        | «      D ]  }t        |«      –— t        |d«      }Œ y­w)a  
    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      s?   è ø€ ô" Œu�Q‹x‹.€CÜ�1‹Xò "ˆÜ˜#ÓÒÜ˜#˜qÓ!‰ñ"ùs   ‚?Ac              #   óx   K  — t        t        | «      | «      D ]  }t        |«      }|j                  sŒ|–— Œ  y­w)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   ,   s8   è ø€ ô œ5 ›8 QÓ'ò ˆÜ˜ÓˆØ�9‹9Ø‹Gñùs   ‚0:³:c              #   óx  K  — | dk(  rt        ddg«      –— t        ddg«      –— y| dk(  r=t        g d¢«      –— t        g d¢«      –— t        g d¢«      –— t        g d¢«      –— yt        t        | «      «      }t        | «      D ].  }t        |«      –— t        |ddd	…   «      –— t        |d«      }Œ0 y­w)
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   ‚B8B:c                  óÎ   — g d¢g d¢g d¢g d¢g d¢g d¢g} | D ���cg c]0  }t        |D ��cg c]  }|D �cg c]  }|dz
  ‘Œ	 c}‘Œ c}}d¬	«      ‘Œ2 c}}}S c c}w c c}}w c c}}}w )
zpReturn the permutations of the 3x3 Rubik's cube, see
    https://www.gap-system.org/Doc/Examples/rubik.html
    ))r   r!   é   é   )r    é   é   é   )é	   é!   é   é   )é
   é"   é   é   )é   é#   é   é   ))r*   r2   é   é   )r.   é   é   é   )r   r-   é)   é(   )r)   é   é,   é%   )r&   é   é.   r3   ))r-   r5   é   r@   )r1   é   é   r=   )r&   r,   é+   r6   )r(   é   é*   r8   )r%   é   r;   r2   ))r,   r4   é    rH   )r0   é   é   rF   )r!   é&   rE   r5   )r'   é$   é-   rC   )r%   r+   é0   rB   ))r+   r3   r<   rL   )r/   r?   é'   rM   )r!   r*   rA   rI   )r    r:   é/   rJ   )r   r7   rO   r4   ))r;   rE   rO   rA   )rG   rN   rQ   r>   )r7   r@   rH   rL   )r9   rD   rK   rP   )r6   rB   rI   r<   r   rO   )Úsizer   )ÚaÚxÚxir   s       r   Úrubik_cube_generatorsrV   a   si   € ò
	ò	ò	ò	ò	ò	-ð	€Að NO×OÐOÈŒK°q×9°¨Ö, A˜!˜a›%Ô,Ó9ÀÖCÔOÐOùÒ,ùÓ9ùÔOs&   ›A ª	A³A¿AÁA ÁAÁA c                 ó‚  ‡ ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ — ‰ dk  rt        d«      ‚ˆˆ fd„Šˆfd„Šˆfd„Šˆˆ fd„Šˆˆ fd„Šˆˆ fd„Šˆˆ fd	„Š ˆˆ fd
„Šdˆˆ fd„	Šˆfd„Šdˆˆˆˆˆˆˆˆˆˆˆˆˆˆ fd„	Šˆfd„}dˆˆˆˆˆˆˆˆˆf	d„	Šˆfd„}dˆˆˆˆˆˆˆˆˆf	d„	Šˆfd„}t        d«      x\  ŠŠŠŠŠŠŠi Šd}t        d«      D ]@  }g }t        ‰ dz  «      D ]  }|j                  |«       |dz  }Œ t	        ‰ ‰ |«      ‰‰|   <   ŒB dˆˆˆfd„	}g Št        t        d‰ dz  z  «      «      }	t        ‰ dz
  «      D ]  }
 ‰|
«        |«         ||
«       Œ  |d«      |	k(  sJ ‚ ‰«        t        ‰ dz
  «      D ]'  }
 ‰|
«        |«         |«         ‰«         ||
«       Œ)  |«         |d«      |	k(  sJ ‚ ‰«         |«         |«        t        ‰ dz
  «      D ]C  }
 ‰|
«        ‰«         ‰«         |«         |«         ‰«         |«         |«         ||
«       ŒE  ‰«         ‰«         |«         |d«      |	k(  sJ ‚‰S )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   •— ‰|    j                  ‰|z
  «      S r   ©Úcol©Úfr   Úfacesr   s     €€r   Úgetrzrubik.<locals>.getrƒ   ó   ø€ Ø�Q‰x�|‰|˜A ™EÓ"Ð"ó    c                 ó2   •— ‰|    j                  |dz
  «      S ©Nr   rY   ©r\   r   r]   s     €r   Úgetlzrubik.<locals>.getl†   r_   r`   c                 ó2   •— ‰|    j                  |dz
  «      S rb   ©Úrowrc   s     €r   Úgetuzrubik.<locals>.getu‰   r_   r`   c                 ó2   •— ‰|    j                  ‰|z
  «      S r   rf   r[   s     €€r   Úgetdzrubik.<locals>.getdŒ   r_   r`   c                 ó:   •— t        ‰d|«      ‰|    d d …‰|z
  f<   y rb   r   ©r\   r   Úsr]   r   s      €€r   Úsetrzrubik.<locals>.setr�   ó!   ø€ Ü# A q¨!›_ˆˆa‰’�A˜‘E�Òr`   c                 ó:   •— t        ‰d|«      ‰|    d d …|dz
  f<   y rb   r   rl   s      €€r   Úsetlzrubik.<locals>.setl’   ro   r`   c                 ó:   •— t        d‰|«      ‰|    |dz
  d d …f<   y rb   r   rl   s      €€r   Úsetuzrubik.<locals>.setu•   ó!   ø€ Ü# A q¨!›_ˆˆa‰��Q‘š�Òr`   c                 ó:   •— t        d‰|«      ‰|    ‰|z
  d d …f<   y rb   r   rl   s      €€r   Úsetdzrubik.<locals>.setd˜   rt   r`   r   c                 óÊ   •— t        |«      D ]T  }‰|    }g }t        ‰«      D ]-  }t        ‰dz
  dd«      D ]  }|j                  |||f   «       Œ Œ/ t        ‰‰|«      ‰| <   ŒV y )Nr   r"   )r   Úappendr   )ÚFÚrÚ_ÚfaceÚrvÚcr]   r   s         €€r   Úcwzrubik.<locals>.cwœ   s{   ø€ Ü�q“ò 	(ˆAØ˜‘8ˆDØˆBÜ˜1“Xò *�Ü˜q 1™u b¨"Ó-ò *�AØ—I‘I˜d 1 a 4™jÕ)ñ*ð*ô ˜a  BÓ'ˆE�!ŠHñ	(r`   c                 ó   •—  ‰| d«       y ©Nr!   © )ry   r   s    €r   Úccwzrubik.<locals>.ccw¥   s   ø€ Ù
ˆ1ˆa�r`   c                 óL  •— t        |«      D ]•  }| dk(  r ‰	‰«       | dz  }  ‰‰| «      } ‰‰| t         ‰‰| «      «      «        ‰‰| t        t         ‰‰| «      «      «      «        ‰‰| t         ‰
‰| «      «      «        ‰‰| t        t        |«      «      «       | dz  } Œ— y )Nr   r   )r   r   Úreversed)r   rz   r{   ÚtempÚDry   ÚLÚRÚUr   rj   rd   r^   rh   rv   rq   rn   rs   s       €€€€€€€€€€€€€€r   Úfcwz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ñ		r`   c                 ó   •—  ‰| d«       y r�   r‚   )r   r‹   s    €r   Úfccwzrubik.<locals>.fccw·   s   ø€ ÙˆAˆq�	r`   c                 óÊ   •	— t        | «      D ]T  } ‰
‰«        ‰	‰«        ‰
‰«       ‰‰   } ‰
‰«       ‰‰   ‰‰<    ‰
‰«       ‰‰   ‰‰<    ‰
‰«       ‰‰   ‰‰<   |‰‰<   ŒV y r   ©r   ©rz   r{   ÚtÚBr‡   ry   rˆ   r‰   rŠ   rƒ   r   r]   s      €€€€€€€€€r   ÚFCWzrubik.<locals>.FCW»   sy   ø€ Ü�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ñ	r`   c                  ó   •—  ‰ d«       y r�   r‚   )r“   s   €r   ÚFCCWzrubik.<locals>.FCCWÉ   ó
   ø€ ÙˆA�r`   c                 óŠ   •	— t        | «      D ]4  } ‰
‰«        ‰	‰«       ‰‰   }‰‰   ‰‰<   ‰‰   ‰‰<   ‰‰   ‰‰<   |‰‰<   Œ6 y r   r�   r�   s      €€€€€€€€€r   ÚUCWzrubik.<locals>.UCWÍ   s]   ø€ Ü�q“ò 	ˆAÙˆqŒEÙ�ŒFØ�a‘ˆAØ˜Q‘xˆE�!‰HØ˜Q‘xˆE�!‰HØ˜Q‘xˆE�!‰HØˆE�!ŠHñ	r`   c                  ó   •—  ‰ d«       y r�   r‚   )r˜   s   €r   ÚUCCWzrubik.<locals>.UCCW×   r–   r`   zU, F, R, B, L, Dr   r&   c                 ó|   •— g }‰D ]  }|j                  ‰|   «       Œ | r|S ‰j                  t        |«      «       y r   )Úextendrx   r   )Úshowr   r\   r]   ÚgÚnamess      €€€r   r   zrubik.<locals>.permê   s?   ø€ àˆØò 	ˆAØ�H‰H�U˜1‘XÕð	áØˆHØ	�‰”˜Q“Õ r`   )r   )r   )Ú
ValueErrorr   r   rx   r   r   )!r   r�   r•   rš   ÚcountÚfir\   rS   r   ÚIr   r’   r‡   ry   r“   rˆ   r‰   rŠ   r˜   rƒ   r   r]   r‹   rž   rj   rd   r^   rh   rŸ   rv   rq   rn   rs   s!   `          @@@@@@@@@@@@@@@@@@@@@@r   Úrubikr¤   v   s9  ÿÿþ€ ð 	ˆ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Š<Ðˆ<à€Hr`   N)Ú sympy.combinatorics.permutationsr   Úsympy.core.symbolr   Úsympy.matricesr   Úsympy.utilities.iterablesr   r	   r   r   r   r#   rV   r¤   r‚   r`   r   ú<module>r©      s3   ðÝ 8Ý %Ý !ß =òGò"ò.ò"!&òHPó*wr`   