§
    OŠtj`C  ã                  ót  — U d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZ ddlmZmZ ddlmZ ddlmZmZ ddlmZ dd	lZi d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d%“d&d'“d(d)“d*d+“d,d-d.d/d0d1d2d3d4d5œ	¥Zd6Z ej        d7ej        ¦  «        ZdUd9„Zd:„ Zd;„ Z d<„ Z!d=„ Z"d>„ eD ¦   «         Z#d?„ ed@dA…         D ¦   «         Z$dB„ Z%dC„ Z&dD„ Z'dE„ Z(dF„ Z)dG„ Z*dH„ Z+dI„ Z,dJ„ Z-dK„ Z.e*Z/e,Z0e.Z1dL„ Z2 G dM„ dN¦  «        Z3 G dO„ dP¦  «        Z4dQe5dR<   edSk    rdd	l6Z6e6j7        e6j8        fZ9d	S ddTl:m;Z; d	Z6e;fZ9d	S )Vz6Useful utilities for higher level polynomial classes. é    )Úannotations)ÚGROUND_TYPES)ÚSÚAddÚMulÚPowÚEqÚExprÚ
expand_mulÚexpand_multinomial)Údecompose_powerÚdecompose_power_rat)Ú_illegal)ÚPolynomialErrorÚGeneratorsError)Úbuild_optionsNÚai-  Úbi.  Úci/  Údi0  Úei1  Úfi2  Úgi3  Úhi4  Úii5  Úji6  Úki7  Úli8  Úmi9  Úni:  Úoi;  ÚpéØ   ÚqéÙ   éÚ   éÛ   éÜ   éÝ   éÞ   éß   é|   é}   é~   )	ÚrÚsÚtÚuÚvÚwÚxÚyÚziè  z^(.*?)(\d*)$Fc                ó  — t          d„ | D ¦   «         ¦  «        st          ‚t          | ¦  «        s|sg ng g fS d„ | D ¦   «         }t          | ¦  «        dk    r(t          d„ |D ¦   «         ¦  «        rt          d¦  «        ‚d„ |D ¦   «         }t	          t          || ¦  «        ¦  «        }|rAg }g }|D ]6\  \  }}}}|r|                     |¦  «         Œ!|                     |¦  «         Œ7||fS t          |Ž \  }} t          | ¦  «        S )a¼  Sort the numerical roots putting the real roots first, then sorting
    according to real and imaginary parts. If ``separated`` is True, then
    the real and imaginary roots will be returned in two lists, respectively.

    This routine tries to avoid issue 6137 by separating the roots into real
    and imaginary parts before evaluation. In addition, the sorting will raise
    an error if any computation cannot be done with precision.
    c              3  ó$   K  — | ]}|j         V — Œd S ©N©Ú	is_number©Ú.0r/   s     úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/polys/polyutils.pyú	<genexpr>z_nsort.<locals>.<genexpr>(   s$   è è € Ð*Ð*˜qˆqŒ{Ð*Ð*Ð*Ð*Ð*Ð*ó    c                óJ   — g | ] }d „ |                      ¦   «         D ¦   «         ‘Œ!S )c                óh   — g | ]/}|                      d ¦  «                             ¦   «         d         ‘Œ0S )é   r   )r    Úas_real_imag©r>   r   s     r?   ú
<listcomp>z%_nsort.<locals>.<listcomp>.<listcomp>.   s3   € Ð?Ð?Ð?¨ˆA�CŠC�‰FŒF×ÒÑ!Ô! !Ô$Ð?Ð?Ð?rA   )rE   r=   s     r?   rG   z_nsort.<locals>.<listcomp>.   s1   € Ð
OÐ
OÐ
OÀAÐ?Ð?¨a¯nªnÑ.>Ô.>Ð?Ñ?Ô?Ð
OÐ
OÐ
OrA   é   c              3  ó6   K  — | ]}|D ]}|j         d k    V — ŒŒdS )rH   N)Ú_prec)r>   r   r   s      r?   r@   z_nsort.<locals>.<genexpr>0   s5   è è € ÐCÐC¨qÀÐCÐC¸A˜aœg¨šlÐCÐCÐCÐCÐCÐCÐCrA   z%could not compute root with precisionc                ó&   — g | ]\  }}|rd nd||f‘ŒS )rH   r   © )r>   r/   r   s      r?   rG   z_nsort.<locals>.<listcomp>3   s+   € Ð
1Ð
1Ð
1¡T Q¨�ˆMˆAˆA˜˜1˜aÐ Ð
1Ð
1Ð
1rA   )ÚallÚNotImplementedErrorÚlenÚanyÚsortedÚzipÚappendÚlist)ÚrootsÚ	separatedÚkeyr/   r   ÚimÚ_r3   s           r?   Ú_nsortrZ      s8  € õ Ð*Ð* EÐ*Ñ*Ô*Ñ*Ô*ð "Ý!Ð!Ýˆu‰:Œ:ð 1Ø"Ð0ˆrˆr¨¨R¨Ð0ð PÐ
OÈÐ
OÑ
OÔ
O€Cå
ˆ5�z„z�A‚~€~�#ÐCÐC°CÐCÑCÔCÑCÔC€~Ý!Ð"IÑJÔJÐJà
1Ð
1¨SÐ
1Ñ
1Ô
1€CÝ
•�S˜%‘”Ñ
!Ô
!€Càð ØˆØˆØ ð 	ð 	‰M‰JˆR��A˜Øð Ø—’˜‘”��à—’˜‘”��Ø�!ˆtˆÝ�Cˆy�H€A€uÝ�‰;Œ;ÐrA   c                óú   ‡‡— t          |¦  «        }i dcŠŠ|�,i |j        cŠŠt          |j        ¦  «        D ]\  }}|dz   ‰|<   Œˆˆfd„}	 t	          | |¬¦  «        } n# t
          $ r Y nw xY wt          | ¦  «        S )z1Sort generators in a reasonably intelligent way. NrH   c                ó®  •— t          | ¦  «        } ‰�:	 t          ‰¦  «         ‰                     | ¦  «        z   | dfS # t          $ r Y nw xY wt                               | ¦  «                             ¦   «         \  }}|rt          |¦  «        }nd}	 ‰|         ||fS # t          $ r Y nw xY w	 t          |         ||fS # t          $ r Y nw xY wt          ||fS )Nr   )ÚstrrO   ÚindexÚ
ValueErrorÚ_re_genÚmatchÚgroupsÚintÚKeyErrorÚ_gens_orderÚ
_max_order)ÚgenÚnamer^   Ú
gens_orderÚwrts      €€r?   Ú	order_keyz_sort_gens.<locals>.order_keyO   s  ø€ Ý�#‰hŒhˆàˆ?ðÝ˜S™œ˜	 C§I¢I¨c¡N¤NÑ2°C¸Ð;Ð;øÝð ð ð Ø�ðøøøõ —m’m CÑ(Ô(×/Ò/Ñ1Ô1‰ˆˆeàð 	Ý˜‘J”JˆEˆEàˆEð	Ø Ô% t¨UÐ3Ð3øÝð 	ð 	ð 	ØˆDð	øøøð	Ý Ô% t¨UÐ3Ð3øÝð 	ð 	ð 	ØˆDð	øøøõ ˜D %Ð(Ð(s3   ”(= ½
A
Á	A
Â
B Â
B)Â(B)Â-B= Â=
C
Ã	C
©rW   )r   rj   Ú	enumerateÚsortrQ   Ú	TypeErrorÚtuple)ÚgensÚargsÚoptr   rg   rk   ri   rj   s         @@r?   Ú
_sort_gensrt   C   s¿   øø€ å
˜Ñ
Ô
€Cà˜$€O€J�à
€Ø˜cœgˆˆ
�Cå ¤Ñ)Ô)ð 	$ð 	$‰FˆAˆsØ !™eˆJ�s‰OˆOð)ð )ð )ð )ð )ð )ð8Ý�d 	Ð*Ñ*Ô*ˆˆøÝð ð ð Øˆðøøøõ �‰;Œ;Ðs   ÁA Á
A+Á*A+c                ó¦  — t          | ¦  «        } t          |¦  «        }| |k    rt          | ¦  «        S g g d}}}| D ]}||v r|                     |¦  «         Œt          |¦  «        D ]\  }}||v r||         |dz   c||<   }Œ|D ]•}|                      |¦  «        }|                     | d|…         ¦  «         | |dz   d…         } |                     |¦  «        }|                     |d|…         ¦  «         ||dz   d…         }|                     |¦  «         Œ–|                     | ¦  «         |                     |¦  «         t          |¦  «        S )z2Unify generators in a reasonably intelligent way. r   rH   N)rT   rp   rS   rm   r^   Úextend)Úf_gensÚg_gensrq   Úcommonr   rg   r   s          r?   Ú_unify_gensrz   s   so  € å�&‰\Œ\€FÝ�&‰\Œ\€Fà�ÒÐÝ�V‰}Œ}Ðà˜"˜a�!ˆ&€Dàð ð ˆØ�&ˆ=ˆ=Ø�MŠM˜#ÑÔÐøå˜FÑ#Ô#ð ,ð ,‰ˆˆ3Ø�&ˆ=ˆ=Ø! !œ9 a¨!¡eˆLˆF�1‰I�qøàð ð ˆØ�LŠL˜ÑÔˆà�Š�F˜2˜A˜2”JÑÔÐØ˜˜A™˜˜”ˆà�LŠL˜ÑÔˆà�Š�F˜2˜A˜2”JÑÔÐØ˜˜A™˜˜”ˆà�Š�CÑÔÐÐà‡K‚K�ÑÔÐØ‡K‚K�ÑÔÐå�‰;Œ;ÐrA   c                óœ   — t          | ¦  «        dk    r+t          | d         d¦  «        rt          | d         ¦  «        S t          | ¦  «        S )z8Support for passing generators as `*gens` and `[gens]`. rH   r   Ú__iter__)rO   Úhasattrrp   )rq   s    r?   Ú_analyze_gensr~   ˜   s?   € å
ˆ4�y„y�A‚~€~�' $ q¤'¨:Ñ6Ô6€~Ý�T˜!”W‰~Œ~Ðå�T‰{Œ{ÐrA   c                ó’   ‡— ˆfd„Šˆfd„}ˆfd„}|                      dd¦  «        rt          | |¬¦  «        S t          | |¬¦  «        S )z9Sort low-level factors in increasing 'complexity' order. c                ó–   •— t          | t          ¦  «        rt          | ¦  «        S t          | t          ¦  «        rˆfd„| D ¦   «         S | S )Nc                ó&   •— g | ]} ‰|¦  «        ‘ŒS rL   rL   )r>   r   rk   s     €r?   rG   z4_sort_factors.<locals>.order_key.<locals>.<listcomp>ª   s!   ø€ Ð1Ð1Ð1 Q�I�I˜a‘L”LÐ1Ð1Ð1rA   )Ú
isinstanceÚ	_GF_typesrc   rT   )Úfactorrk   s    €r?   rk   z _sort_factors.<locals>.order_key¦   sR   ø€ Ý�f�iÑ(Ô(ð 	Ý�v‘;”;ÐÝ˜¥Ñ%Ô%ð 	Ø1Ð1Ð1Ð1¨&Ð1Ñ1Ô1Ð1àˆMrA   c                óD   •— | \  }}t          |¦  «        | ‰|¦  «        fS r:   ©rO   )r„   r   r    rk   s      €r?   Úorder_if_multiple_keyz,_sort_factors.<locals>.order_if_multiple_key®   s'   ø€ Ø‰ˆˆAÝ�A‘”˜˜9˜9 Q™<œ<Ð(Ð(rA   c                ó8   •— t          | ¦  «         ‰| ¦  «        fS r:   r†   )r   rk   s    €r?   Úorder_no_multiple_keyz,_sort_factors.<locals>.order_no_multiple_key²   s   ø€ Ý�A‘”˜	˜	 !™œÐ%Ð%rA   ÚmultipleTrl   )ÚgetrQ   )Úfactorsrr   r‡   r‰   rk   s       @r?   Ú_sort_factorsr�       sŽ   ø€ ðð ð ð ð ð)ð )ð )ð )ð )ð&ð &ð &ð &ð &ð ‡x‚x�
˜DÑ!Ô!ð :Ý�gÐ#8Ð9Ñ9Ô9Ð9å�gÐ#8Ð9Ñ9Ô9Ð9rA   c                ó,   — g | ]}t          |¦  «        ‘ŒS rL   )Útype)r>   Úobjs     r?   rG   rG   »   s   € Ð/Ð/Ð/˜s•�c‘”Ð/Ð/Ð/rA   c                ó,   — g | ]}t          |¦  «        ‘ŒS rL   )ÚfloatrF   s     r?   rG   rG   ¼   s   € Ð(Ð(Ð(�Q�ˆa‰ŒÐ(Ð(Ð(rA   rH   é   c                óœ   — t          | ¦  «        t          v s	| t          v rdS t          | t          ¦  «        rt	          | ¦  «        | k    rdS dS )zBDo not treat NaN and infinities as valid polynomial coefficients. TN)r�   Úillegal_typesÚfinfr‚   r’   ©Úexprs    r?   Ú_not_a_coeffr™   ¿   sL   € åˆD�z„z•]Ð"Ð" d­d l lØˆtÝ�$�ÑÔð ¥5¨¡;¤;°$Ò#6Ð#6ØˆtØ
€FrA   c                ól  — t          |j        ¦  «        i }}t          |j        ¦  «        D ]
\  }}|||<   Œg }| D �]q}i }|j        r|j        |j        z
  }t          j        |¦  «        D �]+}	g dg|z  }}
t          j        |	¦  «        D ]Ó}t          |¦  «        s|j
        r|
                     |¦  «         Œ.	 |j        du r7t          |¦  «        \  }}|dk     r| t          |t          j         ¦  «        }}nt#          |¦  «        \  }}||||         <   Œ�# t$          $ r:  |j        |j        Ž s|
                     |¦  «         nt)          d|z  ¦  «        ‚Y ŒÐw xY wt+          |¦  «        }||v r||xx         t          |
Ž z  cc<   �Œt          |
Ž ||<   �Œ-|                     |¦  «         �Œs||j        fS )z@Transform expressions into a multinomial form given generators. r   Fz0%s contains an element of the set of generators.)rO   rq   rm   Úis_EqualityÚlhsÚrhsr   Ú	make_argsr   r™   Ú	is_NumberrS   Úseriesr   r   r   ÚOner   rd   Úhas_freer   rp   )Úexprsrs   r   Úindicesr   r   Úpolysr˜   ÚpolyÚtermÚcoeffÚmonomr„   ÚbaseÚexps                  r?   Ú _parallel_dict_from_expr_if_gensr¬   È   s   € å�S”X‘” €w€Aå˜#œ(Ñ#Ô#ð ð ‰ˆˆ1Øˆ�‰
ˆ
à€Eàð %ñ %ˆØˆàÔð 	'Ø”8˜dœhÑ&ˆDå”M $Ñ'Ô'ð 	*ñ 	*ˆDØ ˜s 1™u�5ˆEåœ-¨Ñ-Ô-ð Uð U�Ý# FÑ+Ô+ð U°Ô0@ð UØ—L’L Ñ(Ô(Ð(Ð(ðUØœ:¨Ð.Ð.Ý(7¸Ñ(?Ô(?™I˜D #à" Qšw˜wØ-0¨Dµ#°d½Q¼U¸FÑ2CÔ2C T øå(;¸FÑ(CÔ(C™I˜D #à/2˜˜g dœmÑ,Ð,øÝ#ð Uð Uð UØ.˜vœ°´Ð9ð UØ!ŸLšL¨Ñ0Ô0Ð0Ð0å"1ð 3KØMSñ3Tñ #Uô #Uð Uð 1Ð0ðUøøøõ ˜%‘L”LˆEà˜ˆ}ˆ}Ø�U��”�s E˜{Ñ*��‘‘å! 5˜k��U‘‘à�Š�TÑÔÐÑà�#”(ˆ?Ðs   Â7ADÄAE	ÅE	c                ó�  ‡— ‰j         �ˆfd„}n‰j        du rd„ }n‰j        durd„ }nd„ }t          ¦   «         g }}| D �]3}g }|j        r|j        |j        z
  }t          j        |¦  «        D ]î}g i }	}t          j        |¦  «        D ]¼}
t          |
¦  «        s(|
j        s ||
¦  «        r|                     |
¦  «         Œ9‰j        du r7t          |
¦  «        \  }}|dk     r| t          |t           j         ¦  «        }}nt%          |
¦  «        \  }}|	                     |d¦  «        |z   |	|<   |                     |¦  «         Œ½|                     ||	f¦  «         Œï|                     |¦  «         �Œ5t+          |‰¬	¦  «        }t-          |¦  «        i }}t/          |¦  «        D ]
\  }}|||<   Œg }|D ]ƒ}i }|D ]g\  }}dg|z  }|                     ¦   «         D ]\  }}||||         <   Œt3          |¦  «        }||v r||xx         t          |Ž z  cc<   Œ[t          |Ž ||<   Œh|                     |¦  «         Œ„|t3          |¦  «        fS )
zITransform expressions into a multinomial form and figure out generators. Nc                ó   •— | ‰j         v S r:   )Údomain)r„   rs   s    €r?   Ú	_is_coeffz3_parallel_dict_from_expr_no_gens.<locals>._is_coeffþ   s   ø€ Ø˜SœZÐ'Ð'rA   Tc                ó   — | j         S r:   )Úis_algebraic©r„   s    r?   r°   z3_parallel_dict_from_expr_no_gens.<locals>._is_coeff  s   € ØÔ&Ð&rA   Fc                ó   — | t           j        u S r:   )r   ÚImaginaryUnitr³   s    r?   r°   z3_parallel_dict_from_expr_no_gens.<locals>._is_coeff  s   € Ø�Qœ_Ð,Ð,rA   c                ó   — | j         S r:   r;   r³   s    r?   r°   z3_parallel_dict_from_expr_no_gens.<locals>._is_coeff  s   € ØÔ#Ð#rA   r   )rs   )r¯   Ú	extensionÚgreedyÚsetr›   rœ   r�   r   rž   r   r™   rŸ   rS   r    r   r   r   r¡   r   Ú
setdefaultÚaddrt   rO   rm   Úitemsrp   )r£   rs   r°   rq   Úreprsr˜   Útermsr§   r¨   Úelementsr„   rª   r«   r   r¤   r   r   r¥   r¦   r©   s    `                  r?   Ú _parallel_dict_from_expr_no_gensrÀ   û   sî  ø€ à
„zÐð	(ð 	(ð 	(ð 	(ð 	(ð 	(à	Œ˜$Ð	Ð	ð	'ð 	'ð 	'ð 	'à	Œ˜5Ð	 Ð	 ð	-ð 	-ð 	-ð 	-ð	$ð 	$ð 	$õ ‘%”%˜ˆ%€Dàð ñ ˆØˆàÔð 	'Ø”8˜dœhÑ&ˆDå”M $Ñ'Ô'ð 	,ð 	,ˆDØ  "�8ˆEåœ-¨Ñ-Ô-ð #ð #�Ý# FÑ+Ô+ð #°Ô1Að #ÀYÀYÈvÑEVÔEVð #Ø—L’L Ñ(Ô(Ð(Ð(à”z UÐ*Ð*Ý$3°FÑ$;Ô$;™	˜˜cà š7˜7Ø),¨­c°$½¼¸Ñ.?Ô.? ˜Cøå$7¸Ñ$?Ô$?™	˜˜cà%-×%8Ò%8¸¸qÑ%AÔ%AÀCÑ%G�H˜T‘NØ—H’H˜T‘N”N�N�Nà�LŠL˜% Ð*Ñ+Ô+Ð+Ð+à�Š�UÑÔÐÑå�d Ð$Ñ$Ô$€DÝ�T‘”˜B€w€Aå˜$‘”ð ð ‰ˆˆ1Øˆ�‰
ˆ
à€Eàð ð ˆØˆà ð 	*ð 	*‰KˆE�4Ø�C˜‘EˆEà!ŸZšZ™\œ\ð +ð +‘	��cØ'*��g˜d”mÑ$Ð$å˜%‘L”LˆEà˜ˆ}ˆ}Ø�U��”�s E˜{Ñ*��‘�å! 5˜k��U‘�à�Š�TÑÔÐÐà•%˜‘+”+ÐÐrA   c                ó6   — t          | f|¦  «        \  \  }}||fS )zBTransform an expression into a multinomial form given generators. )r¬   ©r˜   rs   r¦   rq   s       r?   Ú_dict_from_expr_if_gensrÃ   E  ó#   € å4°d°W¸cÑBÔB�M�G€TˆTØ�ˆ:ÐrA   c                ó6   — t          | f|¦  «        \  \  }}||fS )zKTransform an expression into a multinomial form and figure out generators. )rÀ   rÂ   s       r?   Ú_dict_from_expr_no_gensrÆ   K  rÄ   rA   c                óT   — t          | t          |¦  «        ¦  «        \  }}||j        fS )ú/Transform expressions into a multinomial form. )Ú_parallel_dict_from_exprr   rq   )r£   rr   Úrepsrs   s       r?   Úparallel_dict_from_exprrË   Q  s)   € å(¨µ¸dÑ0CÔ0CÑDÔD�I€Dˆ#Ø�”ˆ>ÐrA   c                ó
  — |j         durd„ | D ¦   «         } t          d„ | D ¦   «         ¦  «        rt          d¦  «        ‚|j        rt	          | |¦  «        \  }}nt          | |¦  «        \  }}||                     d|i¦  «        fS )rÈ   Fc                ó6   — g | ]}|                      ¦   «         ‘ŒS rL   )Úexpand©r>   r˜   s     r?   rG   z,_parallel_dict_from_expr.<locals>.<listcomp>Z  s    € Ð3Ð3Ð3 D�$—+’+‘-”-Ð3Ð3Ð3rA   c              3  ó(   K  — | ]}|j         d u V — ŒdS )FN)Úis_commutativerÏ   s     r?   r@   z+_parallel_dict_from_expr.<locals>.<genexpr>\  s*   è è € Ð
:Ð
:¨Dˆ4Ô %Ð'Ð
:Ð
:Ð
:Ð
:Ð
:Ð
:rA   ú-non-commutative expressions are not supportedrq   )rÎ   rP   r   rq   r¬   rÀ   Úclone)r£   rs   rÊ   rq   s       r?   rÉ   rÉ   W  sŸ   € à
„z˜ÐÐØ3Ð3¨EÐ3Ñ3Ô3ˆå
Ð
:Ð
:°EÐ
:Ñ
:Ô
:Ñ:Ô:ð OÝÐMÑNÔNÐNà
„xð BÝ5°e¸SÑAÔA‰
ˆˆdˆdå5°e¸SÑAÔA‰
ˆˆdà�—’˜F D˜>Ñ*Ô*Ð*Ð*rA   c                óT   — t          | t          |¦  «        ¦  «        \  }}||j        fS )ú1Transform an expression into a multinomial form. )Ú_dict_from_exprr   rq   )r˜   rr   Úreprs   s       r?   Údict_from_exprrØ   g  s)   € å˜t¥]°4Ñ%8Ô%8Ñ9Ô9�H€CˆØ�”ˆ=ÐrA   c                óö  ‡— | j         du rt          d¦  «        ‚d„ Š|j        du�rt          | t          t
          f¦  «        st          d¦  «        ‚|                      ¦   «         } t          ˆfd„t          j        | ¦  «        D ¦   «         ¦  «        r<t          | ¦  «        } t          ˆfd„t          j        | ¦  «        D ¦   «         ¦  «        °<t          d„ t          j        | ¦  «        D ¦   «         ¦  «        r:t          | ¦  «        } t          d„ t          j        | ¦  «        D ¦   «         ¦  «        °:|j        rt          | |¦  «        \  }}nt          | |¦  «        \  }}||                     d|i¦  «        fS )rÕ   FrÒ   c                óX   — | j         o#| j        j        o| j        j        o| j        j        S r:   )Úis_Powr«   Úis_positiveÚ
is_Integerrª   Úis_Addr—   s    r?   Ú_is_expandable_powz+_dict_from_expr.<locals>._is_expandable_powr  s1   € Ø”ð % ¤Ô 4ð %¸¼Ô9Lð %Ø”IÔ$ð	&rA   zexpression must be of type Exprc              3  ó|   •K  — | ]6} ‰|¦  «        p&|j         ot          ˆfd „|j        D ¦   «         ¦  «        V — Œ7dS )c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r:   rL   )r>   r   rß   s     €r?   r@   z,_dict_from_expr.<locals>.<genexpr>.<genexpr>|  s/   øè è € Ð6Ð6¨!Ð"Ð" 1Ñ%Ô%Ð6Ð6Ð6Ð6Ð6Ð6rA   N©Úis_MulrP   rr   )r>   r   rß   s     €r?   r@   z"_dict_from_expr.<locals>.<genexpr>{  sr   øè è € ð %ð %Ø;<ð %Ð$ QÑ'Ô'ð 7¨1¬8ð ,7ÝÐ6Ð6Ð6Ð6¨q¬vÐ6Ñ6Ô6Ñ6Ô6ð%ð %ð %ð %ð %ð %rA   c              3  ó`   K  — | ])}|j         ot          d „ |j        D ¦   «         ¦  «        V — Œ*dS )c              3  ó$   K  — | ]}|j         V — Œd S r:   )rÞ   )r>   r   s     r?   r@   z,_dict_from_expr.<locals>.<genexpr>.<genexpr>€  s$   è è € Ð"<Ð"<° 1¤8Ð"<Ð"<Ð"<Ð"<Ð"<Ð"<rA   Nrâ   rF   s     r?   r@   z"_dict_from_expr.<locals>.<genexpr>€  sB   è è € ÐZÐZÀ�!”(Ð<�sÐ"<Ð"<°Q´VÐ"<Ñ"<Ô"<Ñ<Ô<ÐZÐZÐZÐZÐZÐZrA   rq   )rÑ   r   rÎ   r‚   r
   r	   rP   r   rž   r   r   rq   rÃ   rÆ   rÓ   )r˜   rs   r×   rq   rß   s       @r?   rÖ   rÖ   m  sº  ø€ àÔ˜eÐ#Ð#ÝÐMÑNÔNÐNð&ð &ð &ð „z˜ÐÑÝ˜$¥¥r 
Ñ+Ô+ð 	EÝ!Ð"CÑDÔDÐDØ�{Š{‰}Œ}ˆåð %ð %ð %ð %å”˜dÑ#Ô#ð%ñ %ô %ñ %ô %ð 	,õ & dÑ+Ô+ˆDõ	 ð %ð %ð %ð %å”˜dÑ#Ô#ð%ñ %ô %ñ %ô %ð 	,õ
 ÐZÐZÅcÄmÐTXÑFYÔFYÐZÑZÔZÑZÔZð 	$Ý˜dÑ#Ô#ˆDõ ÐZÐZÅcÄmÐTXÑFYÔFYÐZÑZÔZÑZÔZð 	$ð „xð 7Ý+¨D°#Ñ6Ô6‰	ˆˆTˆTå+¨D°#Ñ6Ô6‰	ˆˆTà�—	’	˜6 4˜.Ñ)Ô)Ð)Ð)rA   c                ó   — g }|                       ¦   «         D ]_\  }}|g}t          ||¦  «        D ]*\  }}|r#|                     t          ||¦  «        ¦  «         Œ+|                     t	          |Ž ¦  «         Œ`t          |Ž S )z/Convert a multinomial form into an expression. )r¼   rR   rS   r   r   r   )r×   rq   Úresultr©   r¨   r§   r   r   s           r?   Úexpr_from_dictrè   ‹  sŒ   € à€FàŸ	š	™œð "ð "‰ˆˆuØˆwˆÝ˜˜eÑ$Ô$ð 	'ð 	'‰DˆAˆqØð 'Ø—’�C  1™IœIÑ&Ô&Ð&øà�Š•c˜4�jÑ!Ô!Ð!Ð!å�ˆ<ÐrA   c                ó†  — t          |¦  «        }|                      ¦   «         }|                      ¦   «         }d„ t          t	          | ¦  «        ¦  «        D ¦   «         }t          ¦   «         }|D ]ˆ}	 |                     |¦  «        }|                     |¦  «         t          ||¦  «        D ] \  }	}
|
 	                    |	|         ¦  «         Œ!Œ_# t          $ r |D ]}
|
 	                    d¦  «         ŒY Œ…w xY wt          |¦  «        D ]%\  }}||vr|D ]}||         rt          d¦  «        ‚ŒŒ&t          t          |¦  «        |fS )z*Reorder levels using dict representation. c                ó   — g | ]}g ‘ŒS rL   rL   )r>   rY   s     r?   rG   z!_dict_reorder.<locals>.<listcomp>¥  s   € Ð0Ð0Ð0˜!�2Ð0Ð0Ð0rA   r   zunable to drop generators)rT   ÚkeysÚvaluesÚrangerO   r¹   r^   r»   rR   rS   r_   rm   r   Úmaprp   )r×   rq   Únew_gensÚmonomsÚcoeffsÚ
new_monomsÚused_indicesrg   r   ÚMÚnew_Mr   rY   r©   s                 r?   Ú_dict_reorderrö   ž  sy  € å�‰:Œ:€Dà�XŠX‰ZŒZ€FØ�ZŠZ‰\Œ\€Fà0Ð0�u¥S¨¡X¤X™œÐ0Ñ0Ô0€JÝ‘5”5€Làð 	 ð 	 ˆð	 Ø—
’
˜3‘”ˆAØ×Ò˜QÑÔÐå ¨
Ñ3Ô3ð #ð #‘��5Ø—’˜Q˜qœTÑ"Ô"Ð"Ð"ð#øåð 	 ð 	 ð 	 Ø#ð  ð  �Ø—’˜Q‘”��ð ð  ð	 øøøõ ˜$‘”ð Gð G‰ˆˆ1Ø�LÐ Ð Øð Gð G�Ø˜”8ð GÝ)Ð*EÑFÔFÐFðGøõ �u�jÑ!Ô! 6Ð)Ð)s   Á1ACÃ$C4Ã3C4c                  ó$   — e Zd ZdZdZdd„Zd„ ZdS )ÚPicklableWithSlotsaÄ  
    Mixin class that allows to pickle objects with ``__slots__``.

    Examples
    ========

    First define a class that mixes :class:`PicklableWithSlots` in::

        >>> from sympy.polys.polyutils import PicklableWithSlots
        >>> class Some(PicklableWithSlots):
        ...     __slots__ = ('foo', 'bar')
        ...
        ...     def __init__(self, foo, bar):
        ...         self.foo = foo
        ...         self.bar = bar

    To make :mod:`pickle` happy in doctest we have to use these hacks::

        >>> import builtins
        >>> builtins.Some = Some
        >>> from sympy.polys import polyutils
        >>> polyutils.Some = Some

    Next lets see if we can create an instance, pickle it and unpickle::

        >>> some = Some('abc', 10)
        >>> some.foo, some.bar
        ('abc', 10)

        >>> from pickle import dumps, loads
        >>> some2 = loads(dumps(some))

        >>> some2.foo, some2.bar
        ('abc', 10)

    rL   Nc                ó"  — |€| j         }i }|j        D ]N}t          |dd ¦  «        }t          t          dd ¦  «        }|�#||ur|                      || |¦  «        ¦  «         ŒO|j        D ]%}t          | |¦  «        rt          | |¦  «        ||<   Œ&|S )NÚ__getstate__)Ú	__class__Ú	__bases__ÚgetattrÚobjectÚupdateÚ	__slots__r}   )ÚselfÚclsr   r   ÚgetstateÚobjstaterh   s          r?   rú   zPicklableWithSlots.__getstate__ä  s·   € Øˆ;à”.ˆCàˆð ”ð 		,ð 		,ˆAõ ˜q .°$Ñ7Ô7ˆHÝ�v ~°tÑ<Ô<ˆHØÐ#¨¸Ð(@Ð(@Ø—’˜˜ $¨Ñ*Ô*Ñ+Ô+Ð+øð ”Mð 	.ð 	.ˆDÝ�t˜TÑ"Ô"ð .Ý! $¨Ñ-Ô-��$‘øàˆrA   c                ó\   — |                      ¦   «         D ]\  }}t          | ||¦  «         Œd S r:   )r¼   Úsetattr)r  r   rh   Úvalues       r?   Ú__setstate__zPicklableWithSlots.__setstate__þ  s<   € àŸ7š7™9œ9ð 	'ð 	'‰KˆD�%Ý�D˜$ Ñ&Ô&Ð&Ð&ð	'ð 	'rA   r:   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rú   r  rL   rA   r?   rø   rø   ¼  sI   € € € € € ð#ð #ðJ €Iðð ð ð ð4'ð 'ð 'ð 'ð 'rA   rø   c                  ó.   — e Zd ZdZdd„Zdd„Zd„ Zd„ ZdS )ÚIntegerPowerablea¢  
    Mixin class for classes that define a `__mul__` method, and want to be
    raised to integer powers in the natural way that follows. Implements
    powering via binary expansion, for efficiency.

    By default, only integer powers $\geq 2$ are supported. To support the
    first, zeroth, or negative powers, override the corresponding methods,
    `_first_power`, `_zeroth_power`, `_negative_power`, below.
    Nc                óÞ  — |dk     rc	 |dk    r|                       ¦   «         S |dk    r|                      ¦   «         S |                      ||¬¦  «        S # t          $ r
 t          cY S w xY wd„ t          t          |¦  «        dd …         ¦  «        D ¦   «         }t          |¦  «        }| }d}t          |¦  «        D ]2}||         r|r|}d}n||z  }|�||z  }||dz
  k     r||z  }|�||z  }Œ3|S )NrD   rH   r   )Úmoduloc                ó,   — g | ]}t          |¦  «        ‘ŒS rL   )rc   )r>   r   s     r?   rG   z,IntegerPowerable.__pow__.<locals>.<listcomp>  s   € Ð9Ð9Ð9˜q•C˜‘F”FÐ9Ð9Ð9rA   TF)	Ú_first_powerÚ_zeroth_powerÚ_negative_powerrN   ÚNotImplementedÚreversedÚbinrO   rí   )	r  r   r  Úbitsr    r"   Úfirstr   r/   s	            r?   Ú__pow__zIntegerPowerable.__pow__  s>  € ØˆqŠ5ˆ5ð&Ø˜’6�6Ø×,Ò,Ñ.Ô.Ð.Ø˜!’V�VØ×-Ò-Ñ/Ô/Ð/à×/Ò/°¸&Ð/ÑAÔAÐAøÝ&ð &ð &ð &Ý%Ð%Ð%Ð%ð&øøøð :Ð9¥H­S°©V¬V°A°B°B¬ZÑ$8Ô$8Ð9Ñ9Ô9ˆDÝ�D‘	”	ˆAØˆAØˆEÝ˜1‘X”Xð $ð $�Ø˜”7ð (Øð (Ø˜Ø %˜˜à˜Q™˜Ø!Ð-Ø ™K˜AØ�q˜1‘u’9�9Ø˜‘F�AØÐ)Ø˜V™˜øØˆHs   ˆA ¢A ¼A ÁA'Á&A'c                ó   — t           ‚)z¹
        Compute inverse of self, then raise that to the abs(e) power.
        For example, if the class has an `inv()` method,
            return self.inv() ** abs(e) % modulo
        ©rN   )r  r   r  s      r?   r  z IntegerPowerable._negative_power.  s
   € õ "Ð!rA   c                ó   — t           ‚)z?Return unity element of algebraic struct to which self belongs.r  ©r  s    r?   r  zIntegerPowerable._zeroth_power6  ó   € å!Ð!rA   c                ó   — t           ‚)zReturn a copy of self.r  r  s    r?   r  zIntegerPowerable._first_power:  r  rA   r:   )r	  r
  r  r  r  r  r  r  rL   rA   r?   r  r    sd   € € € € € ðð ðð ð ð ð>"ð "ð "ð "ð"ð "ð "ð"ð "ð "ð "ð "rA   r  ztuple[type, ...]rƒ   Úflint)ÚModularInteger)F)<r  Ú
__future__r   Úsympy.external.gmpyr   Ú
sympy.corer   r   r   r   r	   r
   r   r   Úsympy.core.exprtoolsr   r   Úsympy.core.numbersr   Úsympy.polys.polyerrorsr   r   Úsympy.polys.polyoptionsr   Úrere   rf   ÚcompileÚ	MULTILINEr`   rZ   rt   rz   r~   r�   r•   r–   r™   r¬   rÀ   rÃ   rÆ   rË   rÉ   rØ   rÖ   rè   Úparallel_dict_from_basicÚdict_from_basicÚbasic_from_dictrö   rø   r  Ú__annotations__r!  ÚnmodÚfmpz_modrƒ   Ú"sympy.polys.domains.modularintegerr"  rL   rA   r?   ú<module>r4     sê  ðØ <Ð <Ð <à "Ð "Ð "Ð "Ð "Ð "à ,Ð ,Ð ,Ð ,Ð ,Ð ,ð$ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $à EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ 1Ð 1Ð 1Ð 1Ð 1Ð 1à 	€	€	€	ðØˆðØ�3ðØ˜SðØ"% sðàˆðà�3ðà˜Sðà"% sðð ˆðð �3ðð ˜Sðð #& sðð ˆð	ð �3ð	ð ˜Sð	ð #& sð	ð
 ˆðð
 ˜S sØ	�3˜S sØ	�3ðð ð €ð €
Ø
ˆ"Œ*�_ b¤lÑ
3Ô
3€ð!ð !ð !ð !ðH-ð -ð -ð`"ð "ð "ðJð ð ð:ð :ð :ð6 0Ð/ hÐ/Ñ/Ô/€Ø(Ð(˜( 1 Q 3œ-Ð(Ñ(Ô(€ðð ð ð0ð 0ð 0ðfGð Gð GðTð ð ðð ð ðð ð ð+ð +ð +ð ð ð ð*ð *ð *ð<ð ð ð 3Ð Ø €Ø €ð*ð *ð *ð<E'ð E'ð E'ð E'ð E'ñ E'ô E'ð E'ðP8"ð 8"ð 8"ð 8"ð 8"ñ 8"ô 8"ð 8"ðv Ð Ð Ñ ð �7ÒÐØ€L€L€LØ”˜Uœ^Ð,€I€I€IàAÐAÐAÐAÐAÐAØ€EØÐ!€I€I€IrA   