§
    Ì²ÅjÝÇ  ã                   óö  — d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZmZ d d
lm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z& ddl'm(Z(  ede
¬¦  «        Z)g d¢Z*dej        de+fd„Z,dede)f         dedee)ej-        f         f         fd„Z.de	e+         de	e+         de	e+         fd„Z/dej0        dej0        dej0        fd„Z1 G d„ d ej2        ¦  «        Z3 G d!„ d"ej2        ¦  «        Z4 G d#„ d$ej2        ¦  «        Z5 G d%„ d&ej2        ¦  «        Z6 G d'„ d(ej2        ¦  «        Z7 G d)„ d*e3¦  «        Z8 G d+„ d,ej2        ¦  «        Z9 G d-„ d.ej2        ¦  «        Z: G d/„ d0ej2        ¦  «        Z; G d1„ d2ej2        ¦  «        Z< G d3„ d4ej2        ¦  «        Z= G d5„ d6ee¦  «        Z> G d7„ d8e>e¦  «        Z? G d9„ d:e>e¦  «        Z@d;„ ZAd<„ ZB G d=„ d>ej2        ¦  «        ZC G d?„ d@ej2        ¦  «        ZD G dA„ dBej2        ¦  «        ZE G dC„ dDej2        ¦  «        ZF G dE„ dFej2        ¦  «        ZG G dG„ dHej2        ¦  «        ZH G dI„ dJej2        ¦  «        ZI G dK„ dLej2        ¦  «        ZJ G dM„ dNej2        ¦  «        ZK G dO„ dPej2        ¦  «        ZL G dQ„ dRej2        ¦  «        ZMdS„ ZN eNdT¦  «        ZO eNdU¦  «        ZP eNdV¦  «        ZQ eNdW¦  «        ZR eNdX¦  «        ZS eNdY¦  «        ZT eNdZ¦  «        ZU eNd[¦  «        ZV eNd\¦  «        ZW eNd]¦  «        ZX eNd^¦  «        ZY eNd_¦  «        ZZ eNd`¦  «        Z[ eNda¦  «        Z\db„ Z] e]dcdd¦  «        Z^ e]dedf¦  «        Z_dS )gé    N)	ÚAnyÚCallableÚIterableÚListÚOptionalÚSupportsFloatÚTupleÚTypeVarÚUnion)ÚS©Úsympify)ÚExpr)ÚApplication)Ú_torfÚ	fuzzy_andÚfuzzy_or)Úequal_valued)Ú	LatticeOpÚShortCircuit)Úordered)Úwalk)Ú
PRECEDENCE)Úsifté   )Úint_ooÚ_T)Úbound)ÚFloorDivÚModularIndexingÚWhereÚ	PythonModÚModÚCleanDivÚ	CeilToIntÚ
FloorToIntÚCeilDivÚ
IntTrueDivÚFloatTrueDivÚLShiftÚRShiftÚ!IsNonOverlappingAndDenseIndicatorÚTruncToFloatÚ
TruncToIntÚ
RoundToIntÚRoundDecimalÚToFloatÚFloatPowÚPowByNaturalÚIdentityÚexprÚreturnc                 ó¼   — | j         oUt          | j        ¦  «        dk    o=| j        d         j        o+| j        d         j        o| j        d         | j        d         uS )Né   r   r   )Úis_AddÚlenÚ_argsÚ	is_symbol)r5   s    úMC:\Projects\Historical\venv\Lib\site-packages\torch/utils/_sympy/functions.pyÚ_is_symbols_binary_summationr>   ]   sb   € ð 	Œð 	/Ý�”
‰OŒO˜qÒ ð	/àŒJ�qŒMÔ#ð	/ð ŒJ�qŒMÔ#ð	/ð ŒJ�qŒM ¤¨A¤Ð.ðó    Úf.c                 ó’   ‡ — t          j        ‰ ¦  «        dt          dt          t          t
          j        f         fˆ fd„¦   «         }|S )NÚargsr6   c                  óº   •—  ‰| Ž }t          d„ | D ¦   «         ¦  «        r;t          |t          j        ¦  «        s!t          j        t	          |¦  «        ¦  «        }|S )Nc              3   óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S ©N)Ú
isinstanceÚsympyÚFloat©Ú.0Úas     r=   ú	<genexpr>z-_keep_float.<locals>.inner.<locals>.<genexpr>l   s.   è è € Ð8Ð8¨a�z˜!�Uœ[Ñ)Ô)Ð8Ð8Ð8Ð8Ð8Ð8r?   )ÚanyrF   rG   rH   Úfloat)rB   Úrr@   s     €r=   Úinnerz_keep_float.<locals>.inneri   sc   ø€ à$% A t HˆÝÐ8Ð8°4Ð8Ñ8Ô8Ñ8Ô8ð 	&ÅØ�uŒ{ñB
ô B
ð 	&õ ”�E !™HœHÑ%Ô%ˆAØˆr?   )Ú	functoolsÚwrapsr   r   r   rG   rH   )r@   rP   s   ` r=   Ú_keep_floatrS   h   sV   ø€ Ý„_�QÑÔð•Sð �U¥2¥u¤{ ?Ô3ð ð ð ð ð ñ Ôðð €Lr?   ÚxÚyc                 ó   — d | |fv rd S | |k    S rE   © )rT   rU   s     r=   Úfuzzy_eqrX   u   s   € Ø��1ˆv€~€~ØˆtØ�Š6€Mr?   ÚpÚqc                 óæ  ‡‡— dt           j        dt          fd„Šdt           j        dt          fˆfd„}t          j         || ¦  «         ||¦  «        ¦  «        }| |z  ||z  }} t          t          t           j        j        t           j	                             | ¦  «        ¦  «        ¦  «        }t           j                             |¦  «        }|D ]"Št          ˆfd„|D ¦   «         ¦  «        r|‰z  }Œ#|S )aÏ  
    Fast path for sympy.gcd, using a simple factoring strategy.

    We try to rewrite p and q in the form n*e*p1 + n*e*p2 and n*e*q0,
    where n is the greatest common integer factor and e is the largest
    syntactic common factor (i.e., common sub-expression) in p and q.
    Then the gcd returned is n*e, cancelling which we would be left with
    p1 + p2 and q0.

    Note that further factoring of p1 + p2 and q0 might be possible with
    sympy.factor (which uses domain-specific theories). E.g., we are unable
    to find that x*y + x + y + 1 is divisible by x + 1. More generally,
    when q is of the form q1 + q2 (instead of being already factored) it
    might be necessary to fall back on sympy.gcd.
    rT   r6   c                 ó|   — d„ t           j                             | ¦  «        D ¦   «         }t          j        |¦  «        S )Nc                 óˆ   — g | ]?}t          |t          t          j        f¦  «        ¯#t	          t          |¦  «        ¦  «        ‘Œ@S rW   )rF   ÚintrG   ÚIntegerÚabs©rJ   Úargs     r=   ú
<listcomp>zDsimple_floordiv_gcd.<locals>.integer_coefficient.<locals>.<listcomp>�   sK   € ð +
ð +
ð +
àÝ˜#¥¥U¤]Ð3Ñ4Ô4ð+
Ý•�C‘”‰MŒMð+
ð +
ð +
r?   )rG   ÚMulÚ	make_argsÚmathÚprod)rT   Úinteger_coefficientss     r=   Úinteger_coefficientz0simple_floordiv_gcd.<locals>.integer_coefficientŒ   sD   € ð+
ð +
å”y×*Ò*¨1Ñ-Ô-ð+
ñ +
ô +
Ðõ
 ŒyÐ-Ñ.Ô.Ð.r?   r5   c                 óœ   •— t          ‰t          j                             | ¦  «        ¦  «        }t	          j        t          j        |¦  «        S rE   )ÚmaprG   ÚAddre   rQ   Úreducerf   Úgcd)r5   Úinteger_factorsri   s     €r=   Úinteger_factorz+simple_floordiv_gcd.<locals>.integer_factor”   s>   ø€ Ý),Ø¥¤×!4Ò!4°TÑ!:Ô!:ñ*
ô *
ˆõ Ô¥¤¨/Ñ:Ô:Ð:r?   c              3   ó    •K  — | ]}‰|v V — Œ	d S rE   rW   )rJ   Ú
base_splitrT   s     €r=   rL   z&simple_floordiv_gcd.<locals>.<genexpr>¢   s'   øè è € Ð=Ð= :ˆq�JˆÐ=Ð=Ð=Ð=Ð=Ð=r?   )rG   ÚBasicr^   rf   rn   Úlistrk   rd   re   rl   Úall)rY   rZ   rp   rn   Úbase_splitsÚdivisor_splitri   rT   s         @@r=   Úsimple_floordiv_gcdrx   {   s  øø€ ð"/�uœ{ð /­sð /ð /ð /ð /ð;�Uœ[ð ;­Sð ;ð ;ð ;ð ;ð ;ð ;õ Œx˜˜ qÑ)Ô)¨>¨>¸!Ñ+<Ô+<Ñ=Ô=€CØˆs‰7�A˜‘G€q€Aå15Ý�EŒIÔ¥¤×!4Ò!4°QÑ!7Ô!7Ñ8Ô8ñ2ô 2€Kõ .3¬Y×-@Ò-@ÀÑ-CÔ-C€MØð ð ˆÝÐ=Ð=Ð=Ð=°Ð=Ñ=Ô=Ñ=Ô=ð 	Ø˜‘'ˆCøØ€Jr?   c            	       ó  — e Zd ZU dZdZeedf         ed<   dZeed<   dZ	e
ed<   ed	ej        fd
„¦   «         Zed	ej        fd„¦   «         Zdej        j        d	efd„Zedej        dej        d	eej        df         fd„¦   «         ZdS )r   a  
    We maintain this so that:
    1. We can use divisibility guards to simplify FloorDiv(a, b) to a / b.
    2. Printing out the expression is nicer (compared to say, representing a//b as (a - a % b) / b)

    NB: This is Python-style floor division, round to -Inf
    ©r8   .Únargsé#   Ú
precedenceTÚ
is_integerr6   c                 ó   — | j         d         S ©Nr   ©rB   ©Úselfs    r=   ÚbasezFloorDiv.baseÆ   ó   € àŒy˜Œ|Ðr?   c                 ó   — | j         d         S ©Nr   r�   r‚   s    r=   ÚdivisorzFloorDiv.divisorÊ   r…   r?   Úprinterc                 ó¸   — |                      | j        t          d         dz
  ¦  «        }|                      | j        t          d         dz
  ¦  «        }d|› d|› d�S )NÚAtomg      à?ú(z//ú))Úparenthesizer„   r   rˆ   )rƒ   r‰   r„   rˆ   s       r=   Ú	_sympystrzFloorDiv._sympystrÎ   s]   € Ø×#Ò# D¤I­z¸&Ô/AÀCÑ/GÑHÔHˆØ×&Ò& t¤|µZÀÔ5GÈ#Ñ5MÑNÔNˆØ%�4Ð%Ð%˜7Ð%Ð%Ð%Ð%r?   r„   rˆ   Nc                 ó  — |j         rt          d¦  «        ‚|t          t           t          j        t          j         fv r4|t          t           t          j        t          j         fv rt          j        S |t          j        u s|t          j        u rt          j        S |j         rt          j        j        S |j        rt          |d¦  «        r|S |j        r%t          |d¦  «        rt          j
        |d¦  «        S t          |t          j        ¦  «        rÿt          |t          j        ¦  «        rå|t          t           t          j        t          j         fv s(|t          t           t          j        t          j         fv r•t          |¦  «        t          |¦  «        z  }|t          j        k    rt          S |t          j         k    rt           S t          j        |¦  «        rt          j        S t          j        t          j        |¦  «        ¦  «        S t          |t          j        ¦  «        rKt          |t          j        ¦  «        r1t          j        t'          |¦  «        t'          |¦  «        z  ¦  «        S t          |t(          ¦  «        r)t)          |j        d         |j        d         |z  ¦  «        S t          |t          j        ¦  «        r„d}g }t          j                             |¦  «        D ](}||z  }|j        r|                     |¦  «         ||z  }Œ)t3          |¦  «        dk    r%t)          |t          j        |ddiŽz
  |¦  «        |z   S 	 t5          ||¦  «        }t          |d¦  «        r/t          |t          j        ¦  «        rt          j        ||¦  «        }t          |d¦  «        s:t)          t          j        ||z  ¦  «        t          j        ||z  ¦  «        ¦  «        S n# t          j        $ r Y nw xY wd S )Núdivision by zeror   éÿÿÿÿr   ÚevaluateF)Úis_zeroÚZeroDivisionErrorr   rG   ÚooÚnanr   ÚZeror~   r   rd   rF   ÚNumberrN   rf   ÚinfÚisnanr_   Úfloorr^   r   rB   rl   re   Úappendr:   rx   rn   ÚsimplifyÚPolynomialError)	Úclsr„   rˆ   rO   Ú	quotientsÚtermsÚtermÚquotientrn   s	            r=   ÚevalzFloorDiv.evalÕ   s¤  € ð Œ?ð 	8Ý#Ð$6Ñ7Ô7Ð7Ø•F�V˜G¥U¤Xµ´¨yÐ9Ð9Ð9¸gÝÝˆGÝŒHÝŒXˆIð	J
ð ?
ð ?
õ ”9ÐØ•5”9ÐÐ ­5¬9Ð 4Ð 4Ý”9ÐàŒ<ð 	 Ý”7”<ÐØŒ?ð 	�|¨G°QÑ7Ô7ð 	ØˆKØŒ?ð 	'�|¨G°RÑ8Ô8ð 	'Ý”9˜T 2Ñ&Ô&Ð&å�t�Uœ\Ñ*Ô*ð	4å˜7¥E¤LÑ1Ô1ð	4ð �¥& ­%¬(µU´X°IÐ>Ð>Ð>Ø�v­ wµ´½5¼8¸)ÐDÐDÐDõ �d‘”�e G™nœnÑ,ˆAØ•D”HŠ}ˆ}Ý�Ø•t”x�i’�Ý�w�Ý”˜A‘”ð 4Ý”yÐ å”}¥T¤Z°¡]¤]Ñ3Ô3Ð3Ý�d�EœMÑ*Ô*ð 	<­z¸'Å5Ä=Ñ/QÔ/Qð 	<Ý”=¥ T¡¤­c°'©l¬lÑ!:Ñ;Ô;Ð;Ý�d�HÑ%Ô%ð 	BÝ˜DœI aœL¨$¬)°A¬,¸Ñ*@ÑAÔAÐAõ �g�uœ}Ñ-Ô-ð 	ØˆIØˆEÝœ	×+Ò+¨DÑ1Ô1ð *ð *�Ø '™>�àÔ&ð *Ø—L’L Ñ&Ô&Ð&Ø Ñ)�Iøå�5‰zŒz˜QŠˆõ ˜T¥E¤I¨uÐ$E¸uÐ$EÐ$EÑEÀwÑOÔOØñ ðð
		Ý% d¨GÑ4Ô4ˆCÝ˜C Ñ#Ô#ð /­
°7½E¼IÑ(FÔ(Fð /Ý”i  gÑ.Ô.�Ý  QÑ'Ô'ð ÝÝ”N 4¨#¡:Ñ.Ô.µ´¸wÈ¹}Ñ0MÔ0Mñô ð ðøõ Ô$ð 	ð 	ð 	ØˆDð	øøøð ˆts   ÍBO- Ï-O?Ï>O?)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r{   r	   r^   Ú__annotations__r}   r~   ÚboolÚpropertyrG   rs   r„   rˆ   ÚprintingÚ
StrPrinterÚstrr�   Úclassmethodr_   r   r¥   rW   r?   r=   r   r   ¹   s"  € € € € € € ðð ð "€Eˆ5��c�Œ?Ð!Ð!Ñ!Ø€J�ÐÐÑØ€J�ÐÐÑàð�e”kð ð ð ñ „Xðð ð˜œð ð ð ñ „Xðð& ¤Ô!:ð &¸sð &ð &ð &ð &ð ðPØ”=ðPØ+0¬=ðPà	ˆuŒ{˜DÐ Ô	!ðPð Pð Pñ „[ðPð Pð Pr?   r   c            
       óÚ   — e Zd ZU dZdZeedf         ed<   dZe	ed<   dZ
eed<   ed	ej        d
ej        dej        deej                 fd„¦   «         Zdee	         fd„Zdee	         fd„ZdS )r    zK
    ModularIndexing(a, b, c) => (a // b) % c where % is the C modulus
    ©é   .r{   Tr~   r|   r}   r„   rˆ   Úmodulusr6   c                 óz  — |dk    s|dk    rt           j        j        S t          |t           j        ¦  «        r<t          |t           j        ¦  «        r"t          |t           j        ¦  «        r||z  |z  S 	 |dk    rVt          j        ||¦  «        }|dk    r;t          t          j        ||z  ¦  «        t          j        ||z  ¦  «        |¦  «        S n# t           j        $ r Y nw xY wt          |t           j	        ¦  «        rûg }d}|j
        D ]ª}t          j        |||z  ¦  «        ||z  k    r‰t          |t           j        ¦  «        r|dk     sPt          |t           j        ¦  «        r:t          |j
        d         t           j        ¦  «        r|j
        d         dk     rd} n|                     |¦  «         Œ«t          |¦  «        t          |j
        ¦  «        k    r |rt          t          |¦  «        ||¦  «        S t          |t          ¦  «        r*t          |j
        d         |j
        d         |z  |¦  «        S d S )Nr   r   TF)rG   r   r˜   rF   r_   rn   r    rž   rŸ   rl   rB   rd   r�   r:   Úsumr   )r    r„   rˆ   r´   rn   Ú	new_termsÚall_positiver£   s           r=   r¥   zModularIndexing.eval2  s9  € ð �1Š9ˆ9˜ 1š˜Ý”7”<Ðõ �t�Uœ]Ñ+Ô+ð	/å˜7¥E¤MÑ2Ô2ð	/õ ˜7¥E¤MÑ2Ô2ð	/ð
 ˜G‘O wÑ.Ð.ð
	Ø˜!Š|ˆ|Ý”i  gÑ.Ô.�Ø˜!’8�8Ý*Ýœ t¨c¡zÑ2Ô2Ýœ w°¡}Ñ5Ô5Øñô ð øøõ
 Ô$ð 	ð 	ð 	ØˆDð	øøøõ �d�EœIÑ&Ô&ð 	IØ-/ˆIØ!%ˆLØœ	ð /ð /�Ý”9˜T 7¨WÑ#4Ñ5Ô5¸À7Ñ9JÒJÐJÝ" 4­¬Ñ7Ô7ð /¸DÀ1ºH¸HÝ" 4­¬Ñ3Ô3ð =Eå& t¤y°¤|µU´]ÑCÔCð =Eð !œI aœL¨1Ò,Ð,ð (-˜Ø˜à!×(Ò(¨Ñ.Ô.Ð.øå�9‰~Œ~¥ T¤Y¡¤Ò/Ð/°LÐ/Ý&¥s¨9¡~¤~°wÀÑHÔHÐHå�d�HÑ%Ô%ð 	RÝ" 4¤9¨Q¤<°´¸1´ÀÑ1GÈÑQÔQÐQàˆts   Á5AC ÃC$Ã#C$c                 óZ   — | j         d d…         \  }}t          |j        |j        ¦  «        S ©Nr8   )rB   rX   Úis_nonnegative©rƒ   rY   rZ   s      r=   Ú_eval_is_nonnegativez$ModularIndexing._eval_is_nonnegativeg  s+   € ØŒy˜˜!˜Œ}‰ˆˆ1Ý˜Ô(¨!Ô*:Ñ;Ô;Ð;r?   c                 óZ   — | j         d d…         \  }}t          |j        |j        ¦  «        S rº   )rB   rX   Úis_positiver¼   s      r=   Ú_eval_is_positivez!ModularIndexing._eval_is_positivek  s)   € ØŒy˜˜!˜Œ}‰ˆˆ1Ý˜œ q¤}Ñ5Ô5Ð5r?   N)r¦   r§   r¨   r©   r{   r	   r^   rª   r~   r«   r}   r°   rG   r_   r   rs   r¥   r½   rÀ   rW   r?   r=   r    r    )  sä   € € € € € € ðð ð "€Eˆ5��c�Œ?Ð!Ð!Ñ!Ø€J�ÐÐÑØ€J�ÐÐÑàð2Ø”=ð2Ø+0¬=ð2ØCHÄ=ð2à	�%”+Ô	ð2ð 2ð 2ñ „[ð2ðh< h¨t¤nð <ð <ð <ð <ð6 8¨D¤>ð 6ð 6ð 6ð 6ð 6ð 6r?   r    c            
       óä   — e Zd ZU dZdZeedf         ed<   dZeed<   de	e
         fd„Zde	e
         fd	„Zde	e
         fd
„Zedej        dej        dej        de	ej                 fd„¦   «         ZdS )r!   z#
    Good ol' ternary operator
    r²   .r{   r|   r}   r6   c                 óR   — | j         d         j        r| j         d         j        rdnd S ©Nr   r8   T©rB   r~   r‚   s    r=   Ú_eval_is_integerzWhere._eval_is_integerx  s)   € Ø”y ”|Ô.ÐT°4´9¸Q´<Ô3JÐTˆtˆtÐPTÐTr?   c                 óR   — | j         d         j        r| j         d         j        rdnd S rÃ   )rB   r»   r‚   s    r=   r½   zWhere._eval_is_nonnegative{  s2   € ð Œy˜Œ|Ô*ðØ/3¬y¸¬|Ô/JðˆDˆDàð	
r?   c                 óR   — | j         d         j        r| j         d         j        rdnd S rÃ   ©rB   r¿   r‚   s    r=   rÀ   zWhere._eval_is_positive‚  s)   € Ø”y ”|Ô/ÐV°D´I¸a´LÔ4LÐVˆtˆtÐRVÐVr?   ÚcrY   rZ   c                 óN   — |t           j        k    r|S |t           j        k    r|S d S rE   )rG   ÚtrueÚfalse)r    rÉ   rY   rZ   s       r=   r¥   z
Where.eval…  s+   € ð •”
Š?ˆ?ØˆHØ•%”+ÒÐØˆHØˆtr?   N)r¦   r§   r¨   r©   r{   r	   r^   rª   r}   r   r«   rÅ   r½   rÀ   r°   rG   rs   r¥   rW   r?   r=   r!   r!   p  sþ   € € € € € € ðð ð "€Eˆ5��c�Œ?Ð!Ð!Ñ!Ø€J�ÐÐÑðU (¨4¤.ð Uð Uð Uð Uð
 h¨t¤nð 
ð 
ð 
ð 
ðW 8¨D¤>ð Wð Wð Wð Wð ðØ”ðØ %¤ðØ05´ðà	�%”+Ô	ðð ð ñ „[ðð ð r?   r!   c                   óÈ   — e Zd ZU dZeedf         ed<   dZeed<   dZe	ed<   e
dej        d	ej        d
eej                 fd„¦   «         Zd
ee	         fd„Zd
ee	         fd„ZdS )r"   rz   .r{   r|   r}   Tr~   rY   rZ   r6   c                 óÐ  — |j         rt          d¦  «        ‚|t          j        u s||| fv s|dk    rt          j        S |j        r|j        r||z  S |j        r,|dk    r&|j        rt          j        S |j        rt          j        S ||z  }|j        rt          j        S ||k     }|j	        rt          |¦  «        r	|j        r|S t          j        ||¦  «        dk    rt          j        S d S )NúModulo by zeror   r8   r   )r”   r•   r   r˜   Ú	is_NumberÚis_evenÚis_oddÚOner~   Ú
is_Booleanr«   r¿   rG   r#   ©r    rY   rZ   rO   Úlesss        r=   r¥   zPythonMod.eval—  s  € ð Œ9ð 	6Ý#Ð$4Ñ5Ô5Ð5ð •”ˆ;ˆ;˜!  A 2˜w˜,˜,¨!¨qª&¨&Ý”6ˆMð Œ;ð 	˜1œ;ð 	Ø�q‘5ˆLð Œ;ð 	˜1 š6˜6ØŒyð Ý”v�ØŒxð Ý”u�ð �‰EˆØŒ<ð 	Ý”6ˆMð
 �1ŠuˆØŒ?ð 	�t D™zœzð 	¨a¬mð 	ØˆHåŒ9�Q˜‰?Œ?˜aÒÐÝ”6ˆMàˆtr?   c                 ó.   — | j         d         j        rdnd S ©Nr   TrÈ   r‚   s    r=   r½   zPythonMod._eval_is_nonnegativeÅ  ó   € Ø”y ”|Ô/Ð9ˆtˆt°TÐ9r?   c                 ó.   — | j         d         j        rdnd S rØ   )rB   Úis_negativer‚   s    r=   Ú_eval_is_nonpositivezPythonMod._eval_is_nonpositiveÈ  rÙ   r?   N)r¦   r§   r¨   r{   r	   r^   rª   r}   r~   r«   r°   rG   r   r   r¥   r½   rÜ   rW   r?   r=   r"   r"   ‘  sË   € € € € € € Ø!€Eˆ5��c�Œ?Ð!Ð!Ñ!à€J�ÐÐÑØ€J�ÐÐÑàð*�U”Zð * E¤Jð *°8¸E¼JÔ3Gð *ð *ð *ñ „[ð*ðZ: h¨t¤nð :ð :ð :ð :ð: h¨t¤nð :ð :ð :ð :ð :ð :r?   r"   c                   ó@   — e Zd ZU dZdZeed<   dZdZe	d„ ¦   «         Z
dS )r#   rz   r|   r}   Tc                 óÎ  — |j         rt          d¦  «        ‚|t          j        u s||| fv s|dk    rt          j        S |j        r,|j        r%|dk    s
J |¦   «         ‚|dk    s
J |¦   «         ‚||z  S |j        r,|dk    r&|j        rt          j        S |j        rt          j        S ||z  }|j        rt          j        S ||k     }|j	        rt          |¦  «        r|j        r|S d S d S d S )NrÏ   r   r   r8   )r”   r•   r   r˜   rÐ   rÑ   rÒ   rÓ   r~   rÔ   r«   r¿   rÕ   s        r=   r¥   zMod.evalÔ  s+  € ð Œ9ð 	6Ý#Ð$4Ñ5Ô5Ð5ð •”ˆ;ˆ;˜!  A 2˜w˜,˜,¨!¨qª&¨&Ý”6ˆMð Œ;ð 	˜1œ;ð 	Ø˜’6�6�6˜1‘6”6�6Ø˜’6�6�6˜1‘6”6�6Ø�q‘5ˆLð Œ;ð 	˜1 š6˜6ØŒyð Ý”v�ØŒxð Ý”u�ð �‰EˆØŒ<ð 	Ý”6ˆMð
 �1ŠuˆØŒ?ð 	�t D™zœzð 	¨a¬mð 	ØˆHð	ð 	ð 	ð 	ð 	ð 	r?   N)r¦   r§   r¨   r{   r}   r^   rª   r~   r»   r°   r¥   rW   r?   r=   r#   r#   Í  sN   € € € € € € Ø€EØ€J�ÐÐÑà€JØ€Nàð)ð )ñ „[ð)ð )ð )r?   r#   c                   ó   — e Zd ZdZdS )r$   zZ
    Div where we can assume no rounding.
    This is to enable future optimizations.
    N)r¦   r§   r¨   r©   rW   r?   r=   r$   r$     s   € € € € € ðð ð ð r?   r$   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )r%   Tc                 ó  — |t           j        t          fv rt          S |t           j         t           fv rt           S t          |t           j        ¦  «        r3t          j        t          j        t          |¦  «        ¦  «        ¦  «        S d S rE   )	rG   r–   r   rF   r™   r_   rf   ÚceilrN   ©r    Únumbers     r=   r¥   zCeilToInt.eval  sv   € ð •e”h¥Ð'Ð'Ð'ÝˆMØ•u”x�i¥& Ð)Ð)Ð)Ý�7ˆNÝ�f�eœlÑ+Ô+ð 	;Ý”=¥¤­5°©=¬=Ñ!9Ô!9Ñ:Ô:Ð:ð	;ð 	;r?   N©r¦   r§   r¨   r~   r°   r¥   rW   r?   r=   r%   r%   
  s2   € € € € € Ø€Jàð;ð ;ñ „[ð;ð ;ð ;r?   r%   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )r&   Tc                 ó  — |t           j        t          fv rt          S |t           j         t          fv rt           S t          |t           j        ¦  «        r3t          j        t          j        t          |¦  «        ¦  «        ¦  «        S d S rE   )	rG   r–   r   rF   r™   r_   rf   rœ   rN   rã   s     r=   r¥   zFloorToInt.eval  st   € ð •e”h¥Ð'Ð'Ð'ÝˆMØ•u”x�i¥Ð(Ð(Ð(Ý�7ˆNÝ�f�eœlÑ+Ô+ð 	<Ý”=¥¤­E°&©M¬MÑ!:Ô!:Ñ;Ô;Ð;ð	<ð 	<r?   Nrå   rW   r?   r=   r&   r&     ó2   € € € € € Ø€Jàð<ð <ñ „[ð<ð <ð <r?   r&   c                   ó   — e Zd ZdZdZd„ ZdS )r'   z.
    Div used in indexing that rounds up.
    Tc                 óÐ   — t          j        |¦  «        }t          j        |¦  «        }t          j        ||¦  «        |k    rt          ||¦  «        S t	          ||dz
  z   |¦  «        S r‡   )rG   r   rn   r$   r   ©r    r„   rˆ   s      r=   Ú__new__zCeilDiv.__new__-  s`   € ÝŒ}˜TÑ"Ô"ˆÝ”- Ñ(Ô(ˆÝŒ9�T˜7Ñ#Ô# wÒ.Ð.Ý˜D 'Ñ*Ô*Ð*å˜D G¨a¡KÑ0°'Ñ:Ô:Ð:r?   N)r¦   r§   r¨   r©   r~   rì   rW   r?   r=   r'   r'   &  s4   € € € € € ðð ð €Jð;ð ;ð ;ð ;ð ;r?   r'   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )r*   Tc                 ó<   — |dk     rt          d¦  «        ‚|d|z  z  S ©Nr   znegative shift countr8   ©Ú
ValueError©r    r„   Úshifts      r=   r¥   zLShift.eval9  s(   € à�1Š9ˆ9ÝÐ3Ñ4Ô4Ð4Ø�a˜‘h‰Ðr?   Nrå   rW   r?   r=   r*   r*   6  s2   € € € € € Ø€Jàðð ñ „[ðð ð r?   r*   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )r+   Tc                 ó<   — |dk     rt          d¦  «        ‚|d|z  z  S rï   rð   rò   s      r=   r¥   zRShift.evalC  s)   € à�1Š9ˆ9ÝÐ3Ñ4Ô4Ð4Ø�q˜%‘xÑÐr?   Nrå   rW   r?   r=   r+   r+   @  s2   € € € € € Ø€Jàð ð  ñ „[ð ð  ð  r?   r+   c                   óÔ  — e Zd Zd„ Zedeeej        j	        j
                          fd„¦   «         Ze	 d$deeej        j	        j
                          deeej        j	        j
                          fd„¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed	„ ¦   «         Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d „ Z&d!„ Z'd"„ Z(d#„ Z)dS )%Ú
MinMaxBasec                 ó@  — ddl m} |                     d|j        ¦  «        }d„ |D ¦   «         }|sd n|                      |¦  «        }|rY	 t          |                      |¦  «        ¦  «        }n# t          $ r
 | j        cY S w xY w|€ | j	        |fi |¤Ž} | j
        |fi |¤Ž}t          |¦  «        }|s| j        S t          |¦  «        dk    r!t          |¦  «                             ¦   «         S t          j        | gt!          |¦  «        ¢R i |¤Ž}||_        ||_        |S )Nr   )Úglobal_parametersr“   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S rE   r   ra   s     r=   rL   z%MinMaxBase.__new__.<locals>.<genexpr>O  s(   è è € Ð6Ð6 •˜‘”Ð6Ð6Ð6Ð6Ð6Ð6r?   r   )Úsympy.core.parametersrù   Úpopr“   Ú"_satisfy_unique_summations_symbolsÚ	frozensetÚ_new_args_filterr   ÚzeroÚ_collapse_argumentsÚ_find_localzerosÚidentityr:   rt   r   rì   r   Ú_argsetÚunique_summations_symbols)r    Úoriginal_argsÚassumptionsrù   r“   rB   r  Úobjs           r=   rì   zMinMaxBase.__new__K  sq  € Ø;Ð;Ð;Ð;Ð;Ð;à—?’? :Ð/@Ô/IÑJÔJˆØ6Ð6¨Ð6Ñ6Ô6ˆð
 ðGˆDˆDà×7Ò7¸ÑFÔFð 	"ð ð 	Að õ ! ×!5Ò!5°dÑ!;Ô!;Ñ<Ô<��øÝð  ð  ð  Ø”x���ð øøøð
 )Ð0à.�sÔ.¨tÐCÐC°{ÐCÐC�ð ,�sÔ+¨DÐ@Ð@°KÐ@Ð@�å˜‰Œˆàð 	 Ø”<Ðåˆt‰9Œ9˜Š>ˆ>Ý˜‘:”:—>’>Ñ#Ô#Ð#õ Œl˜3Ð>¥¨¡¤Ð>Ð>Ð>°+Ð>Ð>ˆØˆŒà(AˆÔ%Øˆ
s   Á
"A- Á-BÂ Br6   c                 ó”  — t          |¦  «        dk    rdS t          |d         t          ¦  «        r|d         |d         fn|d         |d         f\  }}t          |¦  «        sdS t          |¦  «        r|                      |¦  «        S t          |t          ¦  «        r*t          |dd¦  «        }|�|                      |g|¦  «        S dS )a  
        One common case in some models is building expressions of the form
        max(max(max(a+b...), c+d), e+f) which is simplified to max(a+b, c+d, e+f, ...).
        For such expressions, we call the Max constructor X times (once for each nested
        max) and the expression gets flattened.

        An expensive cost in constructing those expressions is running _collapse_arguments
        and _find_localzeros. However, those two optimizations are unnecessary when the args
        to max are all of the form a+b, c+d, ..etc where each term uses a unique set of symbols.

        This function is used to detect such properties of the expressions we are building
        and if so inform that we do not need to run those optimizations. To detect those,
        we store a property in the expression that tells that this expression is a min/max
        operation over terms that use unique symbols "unique_summations_symbols". This property
        also memoize the set of symbols used in all the terms to make it faster to detect this
        property inductively.

        When we apply max to add a new term, all we need to do is check if the new term uses
        unique symbols (with respect to existing terms and itself).
        Example:
        t = Max(a+b, c+d) ==> satisfies the property
        Max(t, h+j)       ==> h,j not in [a,b,c,d] => satisfy the property.

        The function returns None if the new expression does not satisfy the unique_summations_symbols
        property. Otherwise, it returns a new set of unique symbols.
        r8   Nr   r   r  )r:   rF   r÷   r>   Ú_unique_symbolsÚgetattr)r    rB   ÚlhsÚrhsÚlhs_unique_summations_symbolss        r=   rý   z-MinMaxBase._satisfy_unique_summations_symbolsx  së   € õ< ˆt‰9Œ9˜Š>ˆ>Ø�4õ ˜$˜qœ'¥:Ñ.Ô.ð$ˆT�!ŒW�d˜1”gÐÐà�q”'˜4 œ7Ð#ñ 	ˆˆcõ ,¨CÑ0Ô0ð 	Ø�4õ (¨Ñ,Ô,ð 	-Ø×&Ò& tÑ,Ô,Ð,õ �c�:Ñ&Ô&ð 	QÝ,3ØÐ0°$ñ-ô -Ð)ð -Ð8Ø×*Ò*¨C¨5Ð2OÑPÔPÐPàˆtr?   NÚinitial_setc                 óì   — |€t          ¦   «         n|}|D ]^}|                     ¦   «         D ]G}t          |t          j        j        j        ¦  «        s  dS ||v r  dS |                     |¦  «         ŒHŒ_|S )zµ
        Return seen_symbols if all atoms in all args are all unique symbols,
        else returns None. initial_set can be used to represent initial value for seen_symbols
        N)ÚsetÚatomsrF   rG   ÚcoreÚsymbolÚSymbolÚadd)r    rB   r  Úseen_symbolsrb   Úelements         r=   r
  zMinMaxBase._unique_symbols°  s—   € ð !,Ð 3•s‘u”u�u¸ˆØð 	.ð 	.ˆCØŸ9š9™;œ;ð .ð .�Ý! '­5¬:Ô+<Ô+CÑDÔDð .Ø˜4˜4˜4Ø Ð,Ð,Ø˜4˜4˜4à ×$Ò$ WÑ-Ô-Ð-Ð-ð.ð Ðr?   c                 óÜ  ‡ ‡‡‡— |s|S t          t          |¦  «        ¦  «        }‰ t          u rt          Šnt          Š|d         j        �rÀg g fx}\  }}|D ]`}t          |t          t          ¦  «        D ]B}|j        d         j        r.|t          |t          ¦  «                  	                    |¦  «         ŒCŒat          j
        }|D ]"}|j        d         }|j        r||k     dk    r|}Œ#t          j
        }	|D ]"}|j        d         }|j        r||	k    dk    r|}	Œ#‰ t          u r|D ]}
|
j        s n|
|k     dk    r|
}Œn%‰ t          k    r|D ]}
|
j        s n|
|	k    dk    r|
}	Œd}‰ t          u r|t          j
        k    r	t          Š|}n|	t          j
        k    r	t          Š|	}|�it          t          |¦  «        ¦  «        D ]L}||         Št          ‰‰¦  «        r2‰j        d         }‰t          k    r||k    n||k     dk    r
‰ j
        ||<   ŒMˆ ˆfd„Št          |¦  «        D ]'\  }Šˆˆfd„||dz   d…         D ¦   «         ||dz   d…<   Œ(ˆ ˆfd„}t          |¦  «        dk    r ||¦  «        }|S )a}  Remove redundant args.

        Examples
        ========

        >>> from sympy import Min, Max
        >>> from sympy.abc import a, b, c, d, e

        Any arg in parent that appears in any
        parent-like function in any of the flat args
        of parent can be removed from that sub-arg:

        >>> Min(a, Max(b, Min(a, c, d)))
        Min(a, Max(b, Min(c, d)))

        If the arg of parent appears in an opposite-than parent
        function in any of the flat args of parent that function
        can be replaced with the arg:

        >>> Min(a, Max(b, Min(c, d, Max(a, e))))
        Min(a, Max(b, Min(a, c, d)))
        r   TNc                 óø   •‡— t          | t          t          f¦  «        s| S ‰| j        v }|s | j        ˆˆfd„| j        D ¦   «         ddiŽS t          | ‰¦  «        r | j        ˆˆfd„| j        D ¦   «         ddiŽS ‰S )Nc                 ó(   •— g | ]} ‰|‰¦  «        ‘ŒS rW   rW   ©rJ   ÚirK   Údos     €€r=   rc   z>MinMaxBase._collapse_arguments.<locals>.do.<locals>.<listcomp>  s#   ø€ Ð ;Ð ;Ð ;¨a   A q¡¤Ð ;Ð ;Ð ;r?   r“   Fc                 ó4   •— g | ]}|‰k    ¯ ‰|‰¦  «        ‘ŒS rW   rW   r  s     €€r=   rc   z>MinMaxBase._collapse_arguments.<locals>.do.<locals>.<listcomp>!  s(   ø€ Ð EÐ EÐ E¨a¸aÀ1ºf¸f   A q¡¤¸f¸f¸fr?   )rF   ÚMinÚMaxrB   Úfunc)ÚairK   Úcondr    r  s    ` €€r=   r  z*MinMaxBase._collapse_arguments.<locals>.do  s®   øø€ Ý˜b¥3­ *Ñ-Ô-ð Ø�	Ø˜œ�<ˆDØð MØ�r”wÐ ;Ð ;Ð ;Ð ;Ð ;°2´7Ð ;Ñ ;Ô ;ÐLÀeÐLÐLÐLÝ˜"˜cÑ"Ô"ð WØ�r”wÐ EÐ EÐ EÐ EÐ E°2´7Ð EÑ EÔ EÐVÐPUÐVÐVÐVØˆHr?   c                 ó(   •— g | ]} ‰|‰¦  «        ‘ŒS rW   rW   )rJ   r#  rK   r  s     €€r=   rc   z2MinMaxBase._collapse_arguments.<locals>.<listcomp>%  s#   ø€ Ð?Ð?Ð?¨2˜R˜R  A™YœYÐ?Ð?Ð?r?   r   c                 óD  •‡	— ˆfd„}t          | |d¬¦  «        \  }}|s| S d„ |D ¦   «         }t          j        |Ž Š	‰	s| S t          ‰	¦  «        }ˆ	fd„|D ¦   «         }t	          |¦  «        r)ˆfd„|D ¦   «         }|                      ‰
|ddiŽ¦  «          ‰|ddiŽ}||gz   S )	Nc                 ó$   •— t          | ‰¦  «        S rE   )rF   )rb   Úothers    €r=   ú<lambda>zGMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<lambda>/  s   ø€ ¥:¨c°5Ñ#9Ô#9€ r?   T)Úbinaryc                 ó6   — g | ]}t          |j        ¦  «        ‘ŒS rW   )r  rB   ra   s     r=   rc   zIMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<listcomp>5  s    € Ð<Ð<Ð<¨#�˜CœH™œÐ<Ð<Ð<r?   c                 ó   •— g | ]}|‰z
  ‘ŒS rW   rW   )rJ   Úarg_setÚcommons     €r=   rc   zIMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<listcomp>;  s   ø€ ÐFÐFÐF°'˜W vÑ-ÐFÐFÐFr?   c                 ó    •— g | ]
} ‰|d diŽ‘ŒS )r“   FrW   )rJ   Úsr(  s     €r=   rc   zIMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<listcomp>@  s(   ø€ Ð"TÐ"TÐ"TÀ 5 5¨!Ð#<°eÐ#<Ð#<Ð"TÐ"TÐ"Tr?   r“   F)r   r  Úintersectionrt   ru   r�   )rB   Úis_otherÚ
other_argsÚremaining_argsÚarg_setsÚnew_other_argsÚarg_sets_diffÚother_args_diffÚother_args_factoredr.  r    r(  s            @€€r=   Úfactor_minmaxz5MinMaxBase._collapse_arguments.<locals>.factor_minmax.  sþ   øø€ Ø9Ð9Ð9Ð9ˆHÝ)-¨d°HÀTÐ)JÑ)JÔ)JÑ&ˆJ˜Øð Ø�ð =Ð<°Ð<Ñ<Ô<ˆHÝÔ% xÐ0ˆFØð Ø�å! &™\œ\ˆNØFÐFÐFÐF¸XÐFÑFÔFˆMõ �=Ñ!Ô!ð MØ"TÐ"TÐ"TÐ"TÀmÐ"TÑ"TÔ"T�Ø×%Ò% c c¨?Ð&KÀUÐ&KÐ&KÑLÔLÐLà"' %¨Ð"HÀ%Ð"HÐ"HÐØ!Ð%8Ð$9Ñ9Ð9r?   )rt   r   r   r!  Ú	is_numberr   rB   Úis_comparablerF   r�   r  Úranger:   Ú	enumerate)r    rB   r  ÚsiftedÚminsÚmaxsr  ÚvÚsmallÚbigrb   ÚTÚa0r:  rK   r  r(  s   `             @@@r=   r  zMinMaxBase._collapse_argumentsÃ  s*  øøøø€ ð0 ð 	ØˆKÝ•G˜D‘M”MÑ"Ô"ˆØ•#ˆ:ˆ:ÝˆEˆEåˆEð
 �Œ7Ôñ 1	3Ø"$ b &Ð(ˆF‘Z�T˜4Øð =ð =�Ý˜a¥¥cÑ*Ô*ð =ð =�AØ”v˜a”yÔ.ð =Ø�z¨!­SÑ1Ô1Ô2×9Ò9¸!Ñ<Ô<Ð<øð=õ ”LˆEØð ð �Ø”F˜1”I�Ø”;ð  A¨¢I°$Ò#6Ð#6Ø�EøÝ”,ˆCØð ð �Ø”F˜1”I�Ø”;ð  A¨¢G°Ò#4Ð#4Ø�Cøð
 •cˆzˆzØð $ð $�CØœ=ð Ø˜Ø˜eš¨Ò,Ð,Ø #˜øøØ�’�Øð "ð "�CØœ=ð Ø˜Ø˜cš	 dÒ*Ð*Ø!˜øØˆAØ•cˆzˆzØ�CœLÒ(Ð(Ý�EØ�AøØ�œÒ$Ð$Ý�Ø�Øˆ}å�s 4™yœyÑ)Ô)ð 3ð 3�AØ˜Qœ�AÝ! ! UÑ+Ô+ð 3ØœV AœY˜à(-µª¨˜R !šV˜V¸2Àº6Ø!ò"ð "ð '*¤l˜D ™Gøð	ð 	ð 	ð 	ð 	ð 	õ ˜d‘O”Oð 	@ð 	@‰DˆAˆqØ?Ð?Ð?Ð?Ð?°°a¸!±e°g°g´Ð?Ñ?Ô?ˆD��Q‘��‰MˆMð	:ð 	:ð 	:ð 	:ð 	:ð 	:õ0 ˆt‰9Œ9�qŠ=ˆ=Ø �= Ñ&Ô&ˆDàˆr?   c              #   ó  K  — |D ]„}t          |t          ¦  «        r|j        du s|j        r|j        st          d|› d�¦  «        ‚|| j        k    rt          |¦  «        ‚|| j        k    rŒg|j	        | k    r|j
        E d{V —† Œ€|V — Œ…dS )zØ
        Generator filtering args.

        first standard filter, for cls.zero and cls.identity.
        Also reshape ``Max(a, Max(b, c))`` to ``Max(a, b, c)``,
        and check arguments for comparability
        FzThe argument 'z' is not comparable.N)rF   r   Úis_extended_realr;  r<  rñ   r   r   r  r"  rB   )r    Úarg_sequencerb   s      r=   rÿ   zMinMaxBase._new_args_filterK  sÑ   è è € ð  ð 	ð 	ˆCõ ˜s¥DÑ)Ô)ðMàÔ'¨5Ð0Ð0Ø”Mð 1Ø*-Ô*;ð 1õ !Ð!K°#Ð!KÐ!KÐ!KÑLÔLÐLà�c”hŠˆÝ" 3Ñ'Ô'Ð'Ø˜œÒ$Ð$ØØ”˜S’�Øœ8Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#à�	�	�	�	ð!	ð 	r?   c                 ó"  — t          ¦   «         }d}|D ]i}|j        rK|€|}Œ| t          u rt          ||¦  «        }Œ(| t          u rt          ||¦  «        }ŒBt          d| › �¦  «        ‚|                     |¦  «         Œj|€|S t          |¦  «        dk    r|hS t          |¦  «        dk    rPt          t          |¦  «        ¦  «        }|dv r|j        r| t          u r|n|hS |dk    r|j        r| t          u r|n|hS |                     |¦  «         |S )aŽ  
        Sequentially allocate values to localzeros.

        When a value is identified as being more extreme than another member it
        replaces that member; if this is never true, then the value is simply
        appended to the localzeros.

        Unlike the sympy implementation, we only look for zero and one, we don't
        do generic is connected test pairwise which is slow
        Nzimpossible r   r   )g        r   )r  rÐ   r!  Úmaxr   ÚminÚAssertionErrorr  r:   ÚnextÚiterr»   r¿   )r    ÚvaluesÚoptionsÚother_valuesÚ	num_valuerb   Úother_values          r=   r  zMinMaxBase._find_localzerosf  sP  € õ ‘u”uˆØˆ	Øð 	&ð 	&ˆCØŒ}ð &ØÐ$Ø #�I�Ià�c�z�zÝ$'¨	°3Ñ$7Ô$7˜	˜	Ø¥˜˜Ý$'¨	°3Ñ$7Ô$7˜	˜	å,Ð-@¸3Ð-@Ð-@ÑAÔAÐAà× Ò  Ñ%Ô%Ð%Ð%ð ÐØÐåˆ|ÑÔ Ò!Ð!Ø�;Ðåˆ|ÑÔ Ò!Ð!Ý�t LÑ1Ô1Ñ2Ô2ˆKØ˜HÐ$Ð$¨Ô)CÐ$Ø'*­c z z�|�|¸	°{ÐBØ˜AŠ~ˆ~ +Ô"9ˆ~Ø'*­c z z�|�|¸	°{ÐBà×Ò˜Ñ#Ô#Ð#ØÐr?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_algebraic©rJ   r  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>•  ó$   è è € Ð(HÐ(H¸A¨¬Ð(HÐ(HÐ(HÐ(HÐ(HÐ(Hr?   ©r   rB   ©r0  s    r=   r)  zMinMaxBase.<lambda>•  ó   € ¥5Ð(HÐ(HÀÄÐ(HÑ(HÔ(HÑ#HÔ#H€ r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_antihermitianrX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>–  ó6   è è € ð -ð -Ø ˆÔð-ð -ð -ð -ð -ð -r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>–  ó.   € ¥uð -ð -Ø$%¤Fð-ñ -ô -ñ (ô (€ r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_commutativerX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>™  ó6   è è € ð +ð +ØˆÔð+ð +ð +ð +ð +ð +r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>™  ó.   € ¥Uð +ð +Ø"#¤&ð+ñ +ô +ñ &ô &€ r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Ú
is_complexrX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>œ  ó$   è è € Ð&DÐ&D¸ q¤|Ð&DÐ&DÐ&DÐ&DÐ&DÐ&Dr?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>œ  ó   € ¥Ð&DÐ&D¸Q¼VÐ&DÑ&DÔ&DÑ!DÔ!D€ r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_compositerX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>�  rY  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>�  r\  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )rÑ   rX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>ž  ó$   è è € Ð#>Ð#>°! A¤IÐ#>Ð#>Ð#>Ð#>Ð#>Ð#>r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>ž  ó   € �eÐ#>Ð#>°q´vÐ#>Ñ#>Ô#>Ñ>Ô>€ r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Ú	is_finiterX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>Ÿ  s$   è è € Ð%BÐ%B°a a¤kÐ%BÐ%BÐ%BÐ%BÐ%BÐ%Br?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>Ÿ  s   € ¥Ð%BÐ%B¸1¼6Ð%BÑ%BÔ%BÑ BÔ B€ r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_hermitianrX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>   rY  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>   r\  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_imaginaryrX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>¡  rY  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>¡  r\  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_infiniterX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>¢  ó$   è è € Ð'FÐ'F¸!¨¬Ð'FÐ'FÐ'FÐ'FÐ'FÐ'Fr?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>¢  ó   € ¥%Ð'FÐ'F¸q¼vÐ'FÑ'FÔ'FÑ"FÔ"F€ r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )r~   rX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>£  rj  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>£  rk  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_irrationalrX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>¤  ó$   è è € Ð)JÐ)J¸a¨!¬/Ð)JÐ)JÐ)JÐ)JÐ)JÐ)Jr?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>¤  ó   € ¥EÐ)JÐ)JÀ1Ä6Ð)JÑ)JÔ)JÑ$JÔ$J€ r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   ©rÛ   rX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>¥  r  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>¥  r€  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_nonintegerrX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>¦  r†  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>¦  r‡  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   ©r»   rX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>§  re  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>§  rf  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_nonpositiverX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>ª  re  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>ª  rf  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Ú
is_nonzerorX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>­  rj  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>­  rk  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )rÒ   rX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>®  s$   è è € Ð"<Ð"<° 1¤8Ð"<Ð"<Ð"<Ð"<Ð"<Ð"<r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>®  s   € �UÐ"<Ð"<°Q´VÐ"<Ñ"<Ô"<Ñ<Ô<€ r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_polarrX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>¯  ó$   è è € Ð$@Ð$@°A Q¤ZÐ$@Ð$@Ð$@Ð$@Ð$@Ð$@r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>¯  ó   € �uÐ$@Ð$@¸¼Ð$@Ñ$@Ô$@Ñ@Ô@€ r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   ©r¿   rX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>°  r  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>°  r€  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_primerX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>±  rœ  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>±  r�  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_rationalrX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>²  r  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>²  r€  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_realrX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>³  rq  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>³  rr  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )rH  rX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>´  r`  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>´  ra  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )Úis_transcendentalrX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>·  s6   è è € ð .ð .Ø !ˆÔð.ð .ð .ð .ð .ð .r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>·  s.   € ­ð .ð .Ø%&¤Vð.ñ .ô .ñ )ô )€ r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   )r”   rX  s     r=   rL   z&MinMaxBase.<lambda>.<locals>.<genexpr>º  rq  r?   rZ  r[  s    r=   r)  zMinMaxBase.<lambda>º  rr  r?   rE   )*r¦   r§   r¨   rì   r°   r   r  rG   r  r  r  rý   r
  r  rÿ   r  Ú_eval_is_algebraicÚ_eval_is_antihermitianÚ_eval_is_commutativeÚ_eval_is_complexÚ_eval_is_compositeÚ_eval_is_evenÚ_eval_is_finiteÚ_eval_is_hermitianÚ_eval_is_imaginaryÚ_eval_is_infiniterÅ   Ú_eval_is_irrationalÚ_eval_is_negativeÚ_eval_is_nonintegerr½   rÜ   Ú_eval_is_nonzeroÚ_eval_is_oddÚ_eval_is_polarrÀ   Ú_eval_is_primeÚ_eval_is_rationalÚ_eval_is_realÚ_eval_is_extended_realÚ_eval_is_transcendentalÚ_eval_is_zerorW   r?   r=   r÷   r÷   J  s  € € € € € ð+ð +ð +ðZ ð5à	�#�e”jÔ'Ô.Ô/Ô	0ð5ð 5ð 5ñ „[ð5ðn àJNðð Ø (¨¨U¬ZÔ->Ô-EÔ)FÔ Gðà	�#�e”jÔ'Ô.Ô/Ô	0ðð ð ñ „[ðð$ ðEð Eñ „[ðEðN ðð ñ „[ðð4 ð,ð ,ñ „[ð,ð\ IÐHÐðð Ððð Ðð EÐDÐØHÐHÐØ>Ð>€MØBÐB€OØHÐHÐØHÐHÐØFÐFÐØDÐDÐØJÐJÐØFÐFÐØJÐJÐðð Ððð Ðð EÐDÐØ<Ð<€LØ@Ð@€NØFÐFÐØ@Ð@€NØFÐFÐØ>Ð>€Mðð Ððð Ðð ?Ð>€M€M€Mr?   r÷   c                   ó@   — e Zd ZdZej        Zej        Zd„ Z	d„ Z
d„ ZdS )r!  z=
    Return, if possible, the maximum value of the list.
    c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   r   rI   s     r=   rL   z(Max._eval_is_positive.<locals>.<genexpr>Æ  ó$   è è € Ð9Ð9¨!˜œÐ9Ð9Ð9Ð9Ð9Ð9r?   ©r   rB   r‚   s    r=   rÀ   zMax._eval_is_positiveÅ  ó!   € ÝÐ9Ð9¨t¬yÐ9Ñ9Ô9Ñ9Ô9Ð9r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   r�  rI   s     r=   rL   z+Max._eval_is_nonnegative.<locals>.<genexpr>É  s%   è è € Ð<Ð<¨Q˜Ô(Ð<Ð<Ð<Ð<Ð<Ð<r?   rË  r‚   s    r=   r½   zMax._eval_is_nonnegativeÈ  s!   € ÝÐ<Ð<°$´)Ð<Ñ<Ô<Ñ<Ô<Ð<r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   rŠ  rI   s     r=   rL   z(Max._eval_is_negative.<locals>.<genexpr>Ì  ó$   è è € Ð:Ð:¨1˜œÐ:Ð:Ð:Ð:Ð:Ð:r?   ©r   rB   r‚   s    r=   r¼  zMax._eval_is_negativeË  ó!   € ÝÐ:Ð:°´	Ð:Ñ:Ô:Ñ:Ô:Ð:r?   N)r¦   r§   r¨   r©   r   ÚInfinityr   ÚNegativeInfinityr  rÀ   r½   r¼  rW   r?   r=   r!  r!  ½  s\   € € € € € ðð ð Œ:€DØÔ!€Hð:ð :ð :ð=ð =ð =ð;ð ;ð ;ð ;ð ;r?   r!  c                   ó@   — e Zd ZdZej        Zej        Zd„ Z	d„ Z
d„ ZdS )r   z=
    Return, if possible, the minimum value of the list.
    c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   r   rI   s     r=   rL   z(Min._eval_is_positive.<locals>.<genexpr>Ø  rÑ  r?   rÒ  r‚   s    r=   rÀ   zMin._eval_is_positive×  rÓ  r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   r�  rI   s     r=   rL   z+Min._eval_is_nonnegative.<locals>.<genexpr>Û  s%   è è € Ð=Ð=¨a˜Ô)Ð=Ð=Ð=Ð=Ð=Ð=r?   rÒ  r‚   s    r=   r½   zMin._eval_is_nonnegativeÚ  s!   € ÝÐ=Ð=°4´9Ð=Ñ=Ô=Ñ=Ô=Ð=r?   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rE   rŠ  rI   s     r=   rL   z(Min._eval_is_negative.<locals>.<genexpr>Þ  rÊ  r?   rË  r‚   s    r=   r¼  zMin._eval_is_negativeÝ  rÌ  r?   N)r¦   r§   r¨   r©   r   rÕ  r   rÔ  r  rÀ   r½   r¼  rW   r?   r=   r   r   Ï  s\   € € € € € ðð ð Ô€DØŒz€Hð;ð ;ð ;ð>ð >ð >ð:ð :ð :ð :ð :r?   r   c                 óX   — d}| dk     r|  } |dz  dk    rdnd}|t          | |¦  «        z  S )Nr   r   r8   r’   )Ú	_safe_pow)r„   ÚexpÚsigns      r=   Úsafe_powrá  á  sA   € Ø€DØˆa‚x€xØˆuˆØ˜!‘G˜q’L�Lˆqˆq bˆØ•)˜D #Ñ&Ô&Ñ&Ð&r?   c                 ó  — |dk     rt          d¦  «        ‚|dk    rdS t          | |dz  ¦  «        }|t          u rt          S ||z  }|t          j        k    rt          S |dz  dk    r|| z  }|t          j        k    rt          S |S )Nr   zExponent must be non-negative.r   r8   )rñ   rá  r   ÚsysÚmaxsize)r„   ÚexponentÚhalf_expÚresults       r=   rÞ  rÞ  ê  s˜   € Ø�!‚|€|ÝÐ9Ñ:Ô:Ð:à�1‚}€}Øˆqå˜˜h¨!™mÑ,Ô,€HØ•6ÐÐÝˆð
 ˜Ñ €FØ•”ÒÐÝˆà�!�|�qÒÐØ�$‰ˆØ•C”KÒÐÝˆMà€Mr?   c                   ó8   — e Zd ZU dZdZeed<   ed„ ¦   «         ZdS )r3   Té2   r}   c                 óª  — t          |t          j        ¦  «        rQt          |t          j        ¦  «        r7t          ||¦  «        }|t           t          fv r|S t          j        |¦  «        S t          |t          j        ¦  «        rt          j        ||¦  «        S |t          t          j        fv r!|j        rt          S |j        rt          j	        S d S d S rE   )
rF   rG   r_   rá  r   ÚPowr–   r»   rÛ   Úzoo)r    r„   rß  rO   s       r=   r¥   zPowByNatural.eval	  sÎ   € å�d�EœMÑ*Ô*ð 	$­z¸#½u¼}Ñ/MÔ/Mð 	$Ý˜˜sÑ#Ô#ˆAØ•f�W�fÐ%Ð%Ð%Ø�Ý”= Ñ#Ô#Ð#Ý�c�5œ=Ñ)Ô)ð 	(õ ”9˜T 3Ñ'Ô'Ð'Ø•6�5œ8Ð$Ð$Ð$ØÔ"ð !Ý�ØÔ!ð !Ý”yÐ ð	 %Ð$ð!ð !r?   N)	r¦   r§   r¨   r~   r}   r^   rª   r°   r¥   rW   r?   r=   r3   r3     sD   € € € € € € Ø€Jà€J�ÐÐÑàð!ð !ñ „[ð!ð !ð !r?   r3   c                   ó8   — e Zd ZU dZdZeed<   ed„ ¦   «         ZdS )r2   Té<   r}   c                 óÔ   — t          |t          j        ¦  «        rKt          |t          j        ¦  «        r3t          j        t	          |¦  «        t	          |¦  «        z  ¦  «        S d S d S rE   )rF   rG   r™   rH   rN   )r    r„   rß  s      r=   r¥   zFloatPow.eval$  s`   € õ �d�EœLÑ)Ô)ð 	:­j¸½e¼lÑ.KÔ.Kð 	:Ý”;�u T™{œ{­e°C©j¬jÑ8Ñ9Ô9Ð9ð	:ð 	:ð 	:ð 	:r?   N©	r¦   r§   r¨   r©  r}   r^   rª   r°   r¥   rW   r?   r=   r2   r2     sD   € € € € € € Ø€Gà€J�ÐÐÑàð:ð :ñ „[ð:ð :ð :r?   r2   c                   ó8   — e Zd ZU dZdZeed<   ed„ ¦   «         ZdS )r)   Tr|   r}   c                 ó   — |j         rt          d¦  «        ‚t          |t          j        ¦  «        rKt          |t          j        ¦  «        r3t          j        t          |¦  «        t          |¦  «        z  ¦  «        S d S d S ©Nr‘   )r”   r•   rF   rG   r™   rH   rN   rë   s      r=   r¥   zFloatTrueDiv.eval:  sy   € ð
 Œ?ð 	8Ý#Ð$6Ñ7Ô7Ð7å�d�EœLÑ)Ô)ð 	=­j¸Å%Ä,Ñ.OÔ.Oð 	=Ý”;�u T™{œ{­U°7©^¬^Ñ;Ñ<Ô<Ð<ð	=ð 	=ð 	=ð 	=r?   Nrð  rW   r?   r=   r)   r)   5  sD   € € € € € € Ø€Gà€J�ÐÐÑàð=ð =ñ „[ð=ð =ð =r?   r)   c                   ó8   — e Zd ZU dZdZeed<   ed„ ¦   «         ZdS )r(   Tr|   r}   c                 ój  — |j         rt          d¦  «        ‚t          |t          j        ¦  «        r›t          |t          j        ¦  «        r�|t
          t
           t          j        t          j         fv s(|t
          t
           t          j        t          j         fv r1t          j        t          |¦  «        t          |¦  «        z  ¦  «        S t          |t          j	        ¦  «        rKt          |t          j	        ¦  «        r3t          j        t          |¦  «        t          |¦  «        z  ¦  «        S d S d S ró  )r”   r•   rF   rG   r™   r   r–   rH   rN   r_   r^   rë   s      r=   r¥   zIntTrueDiv.evalS  sþ   € àŒ?ð 	8Ý#Ð$6Ñ7Ô7Ð7õ �t�Uœ\Ñ*Ô*ð
	=å˜7¥E¤LÑ1Ô1ð
	=ð �¥& ­%¬(µU´X°IÐ>Ð>Ð>Ø�v­ wµ´½5¼8¸)ÐDÐDÐDõ
 ”;�u T™{œ{­U°7©^¬^Ñ;Ñ<Ô<Ð<Ý�d�EœMÑ*Ô*ð 	9­z¸'Å5Ä=Ñ/QÔ/Qð 	9Ý”;�s 4™yœy­3¨w©<¬<Ñ7Ñ8Ô8Ð8ð	9ð 	9ð 	9ð 	9r?   Nrð  rW   r?   r=   r(   r(   N  sD   € € € € € € Ø€Gà€J�ÐÐÑàð9ð 9ñ „[ð9ð 9ð 9r?   r(   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )r,   Tc                 óÌ  — t          |¦  «        dz  dk    sJ ‚t          |¦  «        dz  }|d|…         }||d …         }ddlm} t          d„ |D ¦   «         ¦  «        r  |d„ |D ¦   «         d„ |D ¦   «         ¦  «        S |dk    r6|d         j        r|d         dk    rdS |d         j        r|d         dk     rdS t          d„ |D ¦   «         ¦  «        r‘|dk    sJ ‚t          t          t          ||¦  «        t          j        d¦  «        ¬	¦  «        Ž \  }}t          d
„ |d d…         D ¦   «         ¦  «        r-|d d…         dz   } |d„ |D ¦   «         d„ |D ¦   «         ¦  «        S d S )Nr8   r   )Ú!eval_is_non_overlapping_and_densec              3   óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S rE   ©rF   rG   r_   rI   s     r=   rL   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>|  s.   è è € Ð:Ð:°�z˜!�Uœ]Ñ+Ô+Ð:Ð:Ð:Ð:Ð:Ð:r?   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rW   ©r^   rI   s     r=   rc   z:IsNonOverlappingAndDenseIndicator.eval.<locals>.<listcomp>~  s   € Ð'Ð'Ð'˜A•�Q‘”Ð'Ð'Ð'r?   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rW   rü  rI   s     r=   rc   z:IsNonOverlappingAndDenseIndicator.eval.<locals>.<listcomp>~  s   € Ð)BÐ)BÐ)B°Q­#¨a©&¬&Ð)BÐ)BÐ)Br?   r   c              3   óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S rE   rú  rI   s     r=   rL   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>‘  s.   è è € Ð=Ð=°�z˜!�Uœ]Ñ+Ô+Ð=Ð=Ð=Ð=Ð=Ð=r?   )Úkeyc              3   óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S rE   rú  rI   s     r=   rL   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>™  s.   è è € ÐFÐF°A•:˜a¥¤Ñ/Ô/ÐFÐFÐFÐFÐFÐFr?   r’   )é*   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rW   rü  rI   s     r=   rc   z:IsNonOverlappingAndDenseIndicator.eval.<locals>.<listcomp>ž  s   € Ð-Ð-Ð- •S˜‘V”VÐ-Ð-Ð-r?   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rW   rü  rI   s     r=   rc   z:IsNonOverlappingAndDenseIndicator.eval.<locals>.<listcomp>ž  s   € Ð/JÐ/JÐ/J¸1µ°A±´Ð/JÐ/JÐ/Jr?   )	r:   Ú%torch.fx.experimental.symbolic_shapesrø  ru   rÐ   ÚzipÚsortedÚoperatorÚ
itemgetter)r    rB   ÚdimÚsizesÚstridesrø  Ús_sizesÚ	s_stridess           r=   r¥   z&IsNonOverlappingAndDenseIndicator.evalp  sæ  € å�4‰yŒy˜1‰} Ò!Ð!Ð!Ð!Ý�$‰iŒi˜1‰nˆØ�Q�s�U”ˆØ�s�t�t”*ˆð	
ð 	
ð 	
ð 	
ð 	
ð 	
õ Ð:Ð:°TÐ:Ñ:Ô:Ñ:Ô:ð 	Ø4Ð4Ø'Ð' Ð'Ñ'Ô'Ð)BÐ)B¸'Ð)BÑ)BÔ)Bñô ð ð �!Š8ˆ8à�qŒzÔ#ð ¨°¬
°aª¨Ø�qà�QŒxÔ!ð  e¨A¤h°¢l lØ�qõ Ð=Ð=°WÐ=Ñ=Ô=Ñ=Ô=ð 	Ø˜!’8�8�8�8õ "%Ý�˜E 7Ñ+Ô+µÔ1DÀQÑ1GÔ1GÐHÑHÔHð"ÑˆG�Yõ ÐFÐF¸ÀÀ"À¼ÐFÑFÔFÑFÔFð Ø! # 2 #œ,¨Ñ.�ð 9Ð8Ø-Ð- WÐ-Ñ-Ô-Ð/JÐ/JÀ	Ð/JÑ/JÔ/Jñô ð ð ˆtr?   Nrå   rW   r?   r=   r,   r,   m  s2   € € € € € Ø€Jàð0ð 0ñ „[ð0ð 0ð 0r?   r,   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )r-   Tc                 ó    — t          |t          j        ¦  «        r3t          j        t	          j        t          |¦  «        ¦  «        ¦  «        S d S rE   )rF   rG   r™   rH   rf   ÚtruncrN   rã   s     r=   r¥   zTruncToFloat.eval¨  sD   € õ �f�eœlÑ+Ô+ð 	:õ ”;�tœz­%°©-¬-Ñ8Ô8Ñ9Ô9Ð9ð		:ð 	:r?   N©r¦   r§   r¨   r©  r°   r¥   rW   r?   r=   r-   r-   ¥  s2   € € € € € Ø€Gàð:ð :ñ „[ð:ð :ð :r?   r-   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )r.   Tc                 ó  — |t           j        t          fv rt          S |t           j         t           fv rt           S t          |t           j        ¦  «        r3t          j        t          j        t          |¦  «        ¦  «        ¦  «        S d S rE   )	rG   r–   r   rF   r™   r_   rf   r  rN   rã   s     r=   r¥   zTruncToInt.evalµ  sv   € ð •e”h¥Ð'Ð'Ð'ÝˆMØ•u”x�i¥& Ð)Ð)Ð)Ý�7ˆNÝ�f�eœlÑ+Ô+ð 	<Ý”=¥¤­E°&©M¬MÑ!:Ô!:Ñ;Ô;Ð;ð	<ð 	<r?   Nrå   rW   r?   r=   r.   r.   ²  rè   r?   r.   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )r/   Tc                 óð   — |t           j        u rt          S |t           j         u rt           S t          |t           j        ¦  «        r/t          j        t          t          |¦  «        d¦  «        ¦  «        S d S r€   )rG   r–   r   rF   r™   r_   ÚroundrN   rã   s     r=   r¥   zRoundToInt.evalÄ  sj   € ð •U”XÐÐÝˆMØ•e”h�YÐÐÝ�7ˆNÝ�f�eœlÑ+Ô+ð 	:Ý”=¥¥u¨V¡}¤}°aÑ!8Ô!8Ñ9Ô9Ð9ð	:ð 	:r?   Nrå   rW   r?   r=   r/   r/   Á  s2   € € € € € Ø€Jàð:ð :ñ „[ð:ð :ð :r?   r/   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )r0   Tc                 óê   — t          |t          j        ¦  «        rVt          |t          j        ¦  «        r>t          j        t          t          |¦  «        t          |¦  «        ¦  «        ¦  «        S d S d S rE   )rF   rG   r™   r_   rH   r  rN   r^   )r    rä   Úndigitss      r=   r¥   zRoundDecimal.evalâ  sk   € õ �f�eœlÑ+Ô+ð 	Cµ
¸7ÅEÄMÑ0RÔ0Rð 	CÝ”;�u¥U¨6¡]¤]µC¸±L´LÑAÔAÑBÔBÐBð	Cð 	Cð 	Cð 	Cr?   Nr  rW   r?   r=   r0   r0   ß  s7   € € € € € Ø€GàðCð Cñ „[ðCð Cð Cr?   r0   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )r1   Tc                 ó  — |t           j        t           j         fv r|S t          |t           j        ¦  «        r!t          j        t          |¦  «        ¦  «        S |t          u rt           j        S |t           u rt           j         S d S rE   )rG   r–   rF   r_   rH   r^   r   rã   s     r=   r¥   zToFloat.evalí  sx   € à•e”h¥¤ 	Ð*Ð*Ð*ØˆMå�f�eœmÑ,Ô,ð 	,Ý”;�s 6™{œ{Ñ+Ô+Ð+Ø•VÐÐÝ”8ˆOØ•f�WÐÐÝ”H�9Ðð Ðr?   Nr  rW   r?   r=   r1   r1   ê  s2   € € € € € Ø€Gàð	ð 	ñ „[ð	ð 	ð 	r?   r1   c                   ó(   — e Zd ZdZdZd„ Zd„ Zd„ ZdS )r4   z4
    Prevents expansion and other optimizations
    é
   c                 ó$   — d| j         d         › d�S )Nz	Identity(r   r�   r�   r‚   s    r=   Ú__repr__zIdentity.__repr__  s   € Ø*˜4œ9 Qœ<Ð*Ð*Ð*Ð*r?   c                 ó&   — | j         d         j        S r€   )rB   r©  r‚   s    r=   rÃ  zIdentity._eval_is_real  s   € ØŒy˜Œ|Ô#Ð#r?   c                 ó&   — | j         d         j        S r€   rÄ   r‚   s    r=   rÅ   zIdentity._eval_is_integer  s   € ØŒy˜Œ|Ô&Ð&r?   N)r¦   r§   r¨   r©   r}   r  rÃ  rÅ   rW   r?   r=   r4   r4   ú  sR   € € € € € ðð ð €Jð+ð +ð +ð$ð $ð $ð'ð 'ð 'ð 'ð 'r?   r4   c                 ób   ‡ —  G ˆ fd„dt           j        ¦  «        }d‰ z   }||_        ||_        |S )Nc                   ó2   •— e Zd ZdZ” Zeˆ fd„¦   «         ZdS )ú+make_opaque_unary_fn.<locals>.OpaqueUnaryFnaü  
        Unlike the builtin sympy functions on real numbers like sympy.sqrt,
        these equivalents do not do any nontrivial reasoning besides
        constant propagation.  This helps avoid performing transformations
        that are valid for real numbers but are invalid for floating point;
        in particular, while we are willing to make optimizations that change
        numerics for Tensor compute, we are NOT willing to make optimziations
        that change numerics for size compute.
        c                 ót  •— t          |t          j        t          j        f¦  «        rl	 t          j         t	          t
          ‰¦  «        t          |¦  «        ¦  «        ¦  «        S # t          $ r!  t	          t          ‰¦  «        |¦  «        cY S w xY w|t          j        t          j         t          j	        t          j	         t          t           fv re|t          u rt          j        }|t           u rt          j         }‰dk    rt          j        |d¦  «        S  t	          t          ‰¦  «        |¦  «        S d S )NÚlog2r8   )rF   rG   r_   rH   r  rf   rN   ÚOverflowErrorr–   rì  r   Úlog)r    rK   Únames     €r=   r¥   z0make_opaque_unary_fn.<locals>.OpaqueUnaryFn.eval  s  ø€ å˜!�eœm­U¬[Ð9Ñ:Ô:ð /ð3Ý œ;Ð':¥w­t°TÑ':Ô':½5À¹8¼8Ñ'DÔ'DÑEÔEÐEøõ %ð 3ð 3ð 3Ø/�7¥5¨$Ñ/Ô/°Ñ2Ô2Ð2Ð2Ð2ð3øøøà•u”x¥%¤( ­E¬I½¼	°zÅ6ÍFÈ7ÐSÐSÐSØ��;�;Ýœ�AØ�˜�<�<Ýœ˜	�AØ˜6’>�>Ý œ9 Q¨™?œ?Ð*Ø+•w�u dÑ+Ô+¨AÑ.Ô.Ð.Ø�4s   ©<A& Á&(BÂBN)r¦   r§   r¨   r©   Ú_torch_handler_namer°   r¥   )r)  s   €r=   ÚOpaqueUnaryFnr$    sJ   ø€ € € € € ð	ð 	ð #Ðà	ð	ð 	ð 	ð 	ñ 
Œð	ð 	ð 	r?   r+  ÚOpaqueUnaryFn_)rG   ÚFunctionr¦   r¨   )r)  r+  Únms   `  r=   Úmake_opaque_unary_fnr/    s\   ø€ ð#ð #ð #ð #ð #ð #ð #�œñ #ô #ð #ðJ 
˜DÑ	 €BØ€MÔØ!#€MÔàÐr?   ÚsqrtÚcosÚcoshÚsinÚsinhÚtanÚtanhÚasinÚacosÚatanrß  r(  Úasinhr&  c                 óÌ   ‡ ‡‡— ‰ dk    rt           d         Šn&‰ dk    rt           d         Šnt          d‰ › �¦  «        ‚ G ˆ ˆˆfd„dt          j        ¦  «        }d‰ z   |_        |S )	NÚbitwise_andÚ
BitwiseAndÚ
bitwise_orÚ	BitwiseOrzunrecognized c                   ó>   •— e Zd ZU ” Z”Zeed<   eˆfd„¦   «         ZdS )ú)make_opaque_bitwise_fn.<locals>.BitwiseFnr}   c                 óø  •— |j         r&|j         r t          t          ‰¦  «        ||¦  «        S |j         rt          j        |rdnd¦  «        }|j         rt          j        |rdnd¦  «        }t          |t          j        t          f¦  «        rlt          |t          j        t          f¦  «        rKt          j         t          t          ‰¦  «        t          |¦  «        t          |¦  «        ¦  «        ¦  «        S d S )Nr   r   )rÔ   r  r  rG   r_   rF   r^   )r    rK   ÚbÚreal_op_names      €r=   r¥   z.make_opaque_bitwise_fn.<locals>.BitwiseFn.evalU  sç   ø€ àŒ|ð = ¤ð =Ø6•w�x¨Ñ6Ô6°q¸!Ñ<Ô<Ð<ØŒ|ð 1Ý”M q - ! !¨aÑ0Ô0�ØŒ|ð 1Ý”M q - ! !¨aÑ0Ô0�Ý˜!�eœm­SÐ1Ñ2Ô2ð VµzØ•E”M¥3Ð'ñ8ô 8ð Võ ”}Ð%D¥W­X°|Ñ%DÔ%DÅSÈÁVÄVÍSÐQRÉVÌVÑ%TÔ%TÑUÔUÐUØ�4r?   N)	r¦   r§   r¨   r*  r}   r^   rª   r°   r¥   )r)  ÚprecrD  s   €€€r=   Ú	BitwiseFnrA  Q  sP   ø€ € € € € € Ø"ÐØˆ
�CÐÐÑà	ð	ð 	ð 	ð 	ñ 
Œð	ð 	ð 	r?   rF  Ú
BitwiseFn_)r   rM  rG   r-  r¦   )r)  rD  rF  rE  s   `` @r=   Úmake_opaque_bitwise_fnrH  I  sŸ   øøø€ Øˆ}ÒÐÝ˜,Ô'ˆˆØ	�Ò	Ð	Ý˜+Ô&ˆˆåÐ3¨TÐ3Ð3Ñ4Ô4Ð4ðð ð ð ð ð ð ð ð •E”Nñ ô ð ð$ &¨Ñ,€IÔØÐr?   r<  Úand_r>  Úor_)`rQ   rf   r  rã  Útypingr   r   r   r   r   r   r	   r
   r   rG   r   Ú
sympy.corer   Úsympy.core.exprr   Úsympy.core.functionr   Úsympy.core.logicr   r   r   Úsympy.core.numbersr   Úsympy.core.operationsr   r   Úsympy.core.sortingr   Úsympy.core.traversalr   Úsympy.printing.precedencer   Úsympy.utilities.iterablesr   Únumbersr   r   Ú__all__r«   r>   rH   rS   rX   rs   rx   r-  r   r    r!   r"   r#   r$   r%   r&   r'   r*   r+   r÷   r!  r   rá  rÞ  r3   r2   r)   r(   r,   r-   r.   r/   r0   r1   r4   r/  ÚOpaqueUnaryFn_sqrtÚOpaqueUnaryFn_cosÚOpaqueUnaryFn_coshÚOpaqueUnaryFn_sinÚOpaqueUnaryFn_sinhÚOpaqueUnaryFn_tanÚOpaqueUnaryFn_tanhÚOpaqueUnaryFn_asinÚOpaqueUnaryFn_acosÚOpaqueUnaryFn_atanÚOpaqueUnaryFn_expÚOpaqueUnaryFn_logÚOpaqueUnaryFn_asinhÚOpaqueUnaryFn_log2rH  ÚBitwiseFn_bitwise_andÚBitwiseFn_bitwise_orrW   r?   r=   ú<module>rh     sL  ðà Ð Ð Ð Ø €€€Ø €€€Ø 
€
€
€
ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø +Ð +Ð +Ð +Ð +Ð +Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø +Ð +Ð +Ð +Ð +Ð +Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø &Ð &Ð &Ð &Ð &Ð &Ø %Ð %Ð %Ð %Ð %Ð %Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø *Ð *Ð *Ð *Ð *Ð *à Ð Ð Ð Ð Ð ð €WˆT˜Ð'Ñ'Ô'€ðBð ð €ð4 u¤zð °dð ð ð ð ð
�8˜C ˜GÔ$ð 
¨°#°u¸RÀÄ¸_Ô7MÐ2MÔ)Nð 
ð 
ð 
ð 
ð�˜”ð  8¨D¤>ð °h¸t´nð ð ð ð ð)˜5œ;ð )¨5¬;ð )¸5¼;ð )ð )ð )ð )ð|mð mð mð mð mˆuŒ~ñ mô mð mð`D6ð D6ð D6ð D6ð D6�e”nñ D6ô D6ð D6ðNð ð ð ð ˆEŒNñ ô ð ðB8:ð 8:ð 8:ð 8:ð 8:�”ñ 8:ô 8:ð 8:ðx1ð 1ð 1ð 1ð 1ˆ%Œ.ñ 1ô 1ð 1ðhð ð ð ð ˆxñ ô ð ð;ð ;ð ;ð ;ð ;�”ñ ;ô ;ð ;ð<ð <ð <ð <ð <�”ñ <ô <ð <ð;ð ;ð ;ð ;ð ;ˆeŒnñ ;ô ;ð ;ð ð ð ð ð ˆUŒ^ñ ô ð ð ð  ð  ð  ð  ˆUŒ^ñ  ô  ð  ðp?ð p?ð p?ð p?ð p?��yñ p?ô p?ð p?ðf;ð ;ð ;ð ;ð ;ˆ*�kñ ;ô ;ð ;ð$:ð :ð :ð :ð :ˆ*�kñ :ô :ð :ð$'ð 'ð 'ðð ð ð4!ð !ð !ð !ð !�5”>ñ !ô !ð !ð6:ð :ð :ð :ð :ˆuŒ~ñ :ô :ð :ð,=ð =ð =ð =ð =�5”>ñ =ô =ð =ð29ð 9ð 9ð 9ð 9�”ñ 9ô 9ð 9ð>4ð 4ð 4ð 4ð 4¨¬ñ 4ô 4ð 4ðp
:ð 
:ð 
:ð 
:ð 
:�5”>ñ 
:ô 
:ð 
:ð<ð <ð <ð <ð <�”ñ <ô <ð <ð:ð :ð :ð :ð :�”ñ :ô :ð :ð<Cð Cð Cð Cð C�5”>ñ Cô Cð Cðð ð ð ð ˆeŒnñ ô ð ð 'ð 'ð 'ð 'ð 'ˆuŒ~ñ 'ô 'ð 'ð"*ð *ð *ð\ *Ð)¨&Ñ1Ô1Ð Ø(Ð(¨Ñ/Ô/Ð Ø)Ð)¨&Ñ1Ô1Ð Ø(Ð(¨Ñ/Ô/Ð Ø)Ð)¨&Ñ1Ô1Ð Ø(Ð(¨Ñ/Ô/Ð Ø)Ð)¨&Ñ1Ô1Ð Ø)Ð)¨&Ñ1Ô1Ð Ø)Ð)¨&Ñ1Ô1Ð Ø)Ð)¨&Ñ1Ô1Ð Ø(Ð(¨Ñ/Ô/Ð Ø(Ð(¨Ñ/Ô/Ð Ø*Ð*¨7Ñ3Ô3Ð Ø)Ð)¨&Ñ1Ô1Ð ðð ð ð< /Ð.¨}¸fÑEÔEÐ Ø-Ð-¨l¸EÑBÔBÐ Ð Ð r?   