§
    OŠtj7  ã                   ó^   — 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dS )é    ©ÚPermutation)Úsymbols©ÚMatrix)Ú
variationsÚrotate_leftc              #   ód   K  — d„ t          t          | ¦  «        | ¦  «        D ¦   «         E d{V —† dS )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   ó4   K  — | ]}t          |¦  «        V — Œd S ©Nr   )Ú.0Úperms     ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/combinatorics/generators.pyú	<genexpr>zsymmetric.<locals>.<genexpr>   s*   è è € ÐFÐF d•˜DÑ!Ô!ÐFÐFÐFÐFÐFÐFó    N)r   Úrange)Úns    r   Ú	symmetricr      sE   è è € ð GÐF­j½¸q¹¼À1Ñ.EÔ.EÐFÑFÔFÐFÐFÐFÐFÐFÐFÐFÐFÐFr   c              #   ó¨   K  — t          t          | ¦  «        ¦  «        }t          | ¦  «        D ]#}t          |¦  «        V — t          |d¦  «        }Œ$dS )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Œx‰.Œ.€CÝ�1‰XŒXð "ð "ˆÝ˜#ÑÔÐÐÐÝ˜#˜qÑ!Ô!ˆˆð"ð "r   c              #   ó~   K  — t          t          | ¦  «        | ¦  «        D ]}t          |¦  «        }|j        r|V — ŒdS )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   ,   sR   è è € õ �5 ™8œ8 QÑ'Ô'ð ð ˆÝ˜ÑÔˆØŒ9ð 	ØˆGˆGˆGøðð r   c              #   óà  K  — | dk    r(t          ddg¦  «        V — t          ddg¦  «        V — dS | dk    rNt          g d¢¦  «        V — t          g d¢¦  «        V — t          g d¢¦  «        V — t          g d¢¦  «        V — dS t          t          | ¦  «        ¦  «        }t          | ¦  «        D ]=}t          |¦  «        V — t          |ddd	…         ¦  «        V — t          |d¦  «        }Œ>dS )
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€vÝ˜1˜a˜&Ñ!Ô!Ð!Ð!Ð!Ý˜1˜a˜&Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ø	
ˆaŠˆÝ˜,˜,˜,Ñ'Ô'Ð'Ð'Ð'Ý˜,˜,˜,Ñ'Ô'Ð'Ð'Ð'Ý˜,˜,˜,Ñ'Ô'Ð'Ð'Ð'Ý˜,˜,˜,Ñ'Ô'Ð'Ð'Ð'Ð'Ð'å•5˜‘8”8‰nŒnˆÝ�q‘”ð 	&ð 	&ˆAÝ˜cÑ"Ô"Ð"Ð"Ð"Ý˜c $ $ B $œiÑ(Ô(Ð(Ð(Ð(Ý˜c 1Ñ%Ô%ˆCˆCð	&ð 	&r   c                  óB   — g d¢g d¢g d¢g d¢g d¢g d¢g} d„ | D ¦   «         S )zpReturn 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=   c                 óD   — g | ]}t          d „ |D ¦   «         d¬¦  «        ‘ŒS )c                 ó&   — g | ]}d „ |D ¦   «         ‘ŒS )c                 ó   — g | ]}|d z
  ‘ŒS ©r   © )r   r   s     r   ú
<listcomp>z?rubik_cube_generators.<locals>.<listcomp>.<listcomp>.<listcomp>s   s   € Ð,Ð,Ð, A˜!˜a™%Ð,Ð,Ð,r   rW   )r   Úxis     r   rX   z4rubik_cube_generators.<locals>.<listcomp>.<listcomp>s   s'   € Ð9Ð9Ð9°Ð,Ð,¨Ð,Ñ,Ô,Ð9Ð9Ð9r   rP   )Úsizer   )r   Úxs     r   rX   z)rubik_cube_generators.<locals>.<listcomp>s   s4   € ÐOÐOÐOÈ�KÐ9Ð9°qÐ9Ñ9Ô9ÀÐCÑCÔCÐOÐOÐOr   rW   )Úas    r   Úrubik_cube_generatorsr]   a   sz   € ð
	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð	-ð 	-ð 	-ð	€Að PÐOÈQÐOÑOÔOÐOr   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 ]M}g }t          ‰ dz  ¦  «        D ]}|                     |¦  «         |dz  }Œt	          ‰ ‰ |¦  «        ‰‰|         <   ŒNdˆˆˆfd„	}g Št          t          d‰ dz  z  ¦  «        ¦  «        }	t          ‰ dz
  ¦  «        D ]"}
 ‰|
¦  «          |¦   «           ||
¦  «         Œ# |d¦  «        |	k    sJ ‚ ‰¦   «          t          ‰ dz
  ¦  «        D ]6}
 ‰|
¦  «          |¦   «           |¦   «           ‰¦   «           ||
¦  «         Œ7 |¦   «           |d¦  «        |	k    sJ ‚ ‰¦   «           |¦   «           |¦   «          t          ‰ dz
  ¦  «        D ]^}
 ‰|
¦  «          ‰¦   «           ‰¦   «           |¦   «           |¦   «           ‰¦   «           |¦   «           |¦   «           ||
¦  «         Œ_ ‰¦   «           ‰¦   «           |¦   «           |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                 ó@   •— ‰|                                ‰|z
  ¦  «        S r   ©Úcol©Úfr   Úfacesr   s     €€r   Úgetrzrubik.<locals>.getrƒ   ó   ø€ Ø�QŒx�|Š|˜A ™EÑ"Ô"Ð"r   c                 ó@   •— ‰|                                |dz
  ¦  «        S ©Nr   r`   ©rc   r   rd   s     €r   Úgetlzrubik.<locals>.getl†   rf   r   c                 ó@   •— ‰|                                |dz
  ¦  «        S rh   ©Úrowri   s     €r   Úgetuzrubik.<locals>.getu‰   rf   r   c                 ó@   •— ‰|                                ‰|z
  ¦  «        S r   rl   rb   s     €€r   Úgetdzrubik.<locals>.getdŒ   rf   r   c                 óJ   •— t          ‰d|¦  «        ‰|          d d …‰|z
  f<   d S rh   r   ©rc   r   Úsrd   r   s      €€r   Úsetrzrubik.<locals>.setr�   ó-   ø€ Ý# A q¨!™_œ_ˆˆaŒ����A˜‘E�ÑÐÐr   c                 óJ   •— t          ‰d|¦  «        ‰|          d d …|dz
  f<   d S rh   r   rr   s      €€r   Úsetlzrubik.<locals>.setl’   ru   r   c                 óJ   •— t          d‰|¦  «        ‰|          |dz
  d d …f<   d S rh   r   rr   s      €€r   Úsetuzrubik.<locals>.setu•   ó-   ø€ Ý# A q¨!™_œ_ˆˆaŒ��Q‘˜˜˜�ÑÐÐr   c                 óJ   •— t          d‰|¦  «        ‰|          ‰|z
  d d …f<   d S rh   r   rr   s      €€r   Úsetdzrubik.<locals>.setd˜   rz   r   r   c                 óô   •— t          |¦  «        D ]f}‰|          }g }t          ‰¦  «        D ]6}t          ‰dz
  dd¦  «        D ]}|                     |||f         ¦  «         Œ Œ7t          ‰‰|¦  «        ‰| <   Œgd S )Nr   r#   )r   Úappendr   )ÚFÚrÚ_ÚfaceÚrvÚcrd   r   s         €€r   Úcwzrubik.<locals>.cwœ   s�   ø€ Ý�q‘”ð 	(ð 	(ˆAØ˜”8ˆDØˆBÝ˜1‘X”Xð *ð *�Ý˜q 1™u b¨"Ñ-Ô-ð *ð *�AØ—I’I˜d 1 a 4œjÑ)Ô)Ð)Ð)ð*å˜a  BÑ'Ô'ˆE�!‰HˆHð	(ð 	(r   c                 ó    •—  ‰| d¦  «         d S ©Nr"   rW   )r   r…   s    €r   Úccwzrubik.<locals>.ccw¥   s   ø€ Ø
ˆˆ1ˆa‰Œˆˆˆr   c                 óº  •— t          |¦  «        D ]É}| dk    r ‰	‰¦  «         | dz  }  ‰‰| ¦  «        } ‰‰| t           ‰‰| ¦  «        ¦  «        ¦  «          ‰‰| t          t           ‰‰| ¦  «        ¦  «        ¦  «        ¦  «          ‰‰| t           ‰
‰| ¦  «        ¦  «        ¦  «          ‰‰| t          t          |¦  «        ¦  «        ¦  «         | dz  } ŒÊd S )Nr   r   )r   r   Úreversed)r   r€   r�   ÚtempÚDr   ÚLÚRÚUr…   rp   rj   re   rn   r|   rw   rt   ry   s       €€€€€€€€€€€€€€r   Úfcwzrubik.<locals>.fcw«   s÷   ø€ Ý�q‘”ð 		ð 		ˆAØ�AŠvˆvØ��1‘”�Ø�‰FˆAØ�4˜˜1‘:”:ˆDØˆD��A•t˜D˜D  A™JœJÑ'Ô'Ñ(Ô(Ð(ØˆD��A•t�H T T¨!¨Q¡Z¤ZÑ0Ô0Ñ1Ô1Ñ2Ô2Ð2ØˆD��A•t˜D˜D  A™JœJÑ'Ô'Ñ(Ô(Ð(ØˆD��A•t�H T™NœNÑ+Ô+Ñ,Ô,Ð,Ø�‰FˆAˆAð		ð 		r   c                 ó    •—  ‰| d¦  «         d S r‡   rW   )r   r�   s    €r   Úfccwzrubik.<locals>.fccw·   s   ø€ ØˆˆAˆq‰	Œ	ˆ	ˆ	ˆ	r   c                 ó  •	— t          | ¦  «        D ]r} ‰
‰¦  «          ‰	‰¦  «          ‰
‰¦  «         ‰‰         } ‰
‰¦  «         ‰‰         ‰‰<    ‰
‰¦  «         ‰‰         ‰‰<    ‰
‰¦  «         ‰‰         ‰‰<   |‰‰<   Œsd S r   ©r   ©r€   r�   ÚtÚBrŒ   r   r�   rŽ   r�   rˆ   r…   rd   s      €€€€€€€€€r   ÚFCWzrubik.<locals>.FCW»   s«   ø€ Ý�q‘”ð 	ð 	ˆAØˆBˆq‰EŒEˆEØˆC�‰FŒFˆFØˆBˆq‰EŒEˆEØ�a”ˆAØˆBˆq‰EŒEˆEØ˜Q”xˆE�!‰HØˆBˆq‰EŒEˆEØ˜Q”xˆE�!‰HØˆBˆq‰EŒEˆEØ˜Q”xˆE�!‰HØˆE�!‰HˆHð	ð 	r   c                  ó   •—  ‰ d¦  «         d S r‡   rW   )r˜   s   €r   ÚFCCWzrubik.<locals>.FCCWÉ   ó   ø€ ØˆˆA‰Œˆˆˆr   c                 ó´   •	— t          | ¦  «        D ]F} ‰
‰¦  «          ‰	‰¦  «         ‰‰         }‰‰         ‰‰<   ‰‰         ‰‰<   ‰‰         ‰‰<   |‰‰<   ŒGd S r   r”   r•   s      €€€€€€€€€r   ÚUCWzrubik.<locals>.UCWÍ   sw   ø€ Ý�q‘”ð 	ð 	ˆAØˆBˆq‰EŒEˆEØˆC�‰FŒFˆFØ�a”ˆAØ˜Q”xˆE�!‰HØ˜Q”xˆE�!‰HØ˜Q”xˆE�!‰HØˆE�!‰HˆHð	ð 	r   c                  ó   •—  ‰ d¦  «         d S r‡   rW   )r�   s   €r   ÚUCCWzrubik.<locals>.UCCW×   r›   r   zU, F, R, B, L, Dr   r'   c                 ó˜   •— g }‰D ]}|                      ‰|         ¦  «         Œ| r|S ‰                     t          |¦  «        ¦  «         d S r   )Úextendr~   r   )Úshowr   rc   rd   ÚgÚnamess      €€€r   r   zrubik.<locals>.permê   s[   ø€ àˆØð 	ð 	ˆAØ�HŠH�U˜1”XÑÔÐÐØð 	ØˆHØ	�Š•˜Q‘”Ñ Ô Ð Ð Ð r   rV   )r   )Ú
ValueErrorr   r   r~   r   r   )!r   r’   rš   rŸ   ÚcountÚfirc   r\   r   ÚIr   r—   rŒ   r   r˜   r�   rŽ   r�   r�   rˆ   r…   rd   r�   r£   rp   rj   re   rn   r¤   r|   rw   rt   ry   s!   `          @@@@@@@@@@@@@@@@@@@@@@r   Úrubikr©   v   s)  øøøøøøøøøøøøøøøøøøøøøøø€ ð 	ˆ1‚u€uÝÐ8Ñ9Ô9Ð9ð#ð #ð #ð #ð #ð #ð#ð #ð #ð #ð #ð#ð #ð #ð #ð #ð#ð #ð #ð #ð #ð #ð-ð -ð -ð -ð -ð -ð-ð -ð -ð -ð -ð -ð-ð -ð -ð -ð -ð -ð-ð -ð -ð -ð -ð -ð(ð (ð (ð (ð (ð (ð (ðð ð ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð õ
  'Ð'9Ñ:Ô:Ð:Ñ€A€qˆ!ˆQ��1�uð €EØ€EÝ�A‰hŒhð +ð +ˆØˆÝ�q˜!‘t‘”ð 	ð 	ˆAØ�HŠH�U‰OŒOˆOØ�Q‰JˆEˆEÝ! ! Q¨™?œ?ˆˆe�BŒiÑÐð!ð !ð !ð !ð !ð !ð !ð !ð 	€AÝ�U�1�Q˜‘T‘6‰]Œ]ÑÔ€Aõ �1�q‘5‰\Œ\ð ð ˆØˆˆA‰ŒˆØˆ‰ŒˆØˆˆQ‰ŒˆˆØˆ4�‰7Œ7�aŠ<ˆ<ˆ<ˆ<ð €C�E„E€EÝ�1�q‘5‰\Œ\ð 	ð 	ˆØˆˆA‰Œˆàˆ‰Œˆàˆ‰Œˆð 	ˆ‰ŒˆØˆˆQ‰Œˆˆà€D�F„F€FØˆ4�‰7Œ7�aŠ<ˆ<ˆ<ˆ<ð €C�E„E€EØ€D�F„F€FØ€D�F„F€FÝ�1�q‘5‰\Œ\ð ð ˆàˆˆA‰Œˆàˆ‰ŒˆØˆ‰ŒˆØˆ‰Œˆàˆ‰Œˆð 	ˆ‰ŒˆØˆ‰ŒˆØˆ‰ŒˆàˆˆQ‰Œˆˆà€C�E„E€EØ€C�E„E€EØ€D�F„F€FØˆ4�‰7Œ7�aŠ<ˆ<ˆ<ˆ<à€Hr   N)Ú sympy.combinatorics.permutationsr   Úsympy.core.symbolr   Úsympy.matricesr   Úsympy.utilities.iterablesr   r	   r   r   r   r$   r]   r©   rW   r   r   ú<module>r®      sÃ   ðØ 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø %Ð %Ð %Ð %Ð %Ð %Ø !Ð !Ð !Ð !Ð !Ð !Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =ðGð Gð Gð"ð "ð "ð.ð ð ð"!&ð !&ð !&ðHPð Pð Pð*wð wð wð wð wr   