Ë
    Q/æj+¤  ã                   óˆ  — d dl Z d dlZd dlZd dl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 g d¢Zd„ Zd„ Zd„ Z  G d„ dejB                  «      Z" G d„ dejB                  «      Z# G d„ dejB                  «      Z$ G d„ dejB                  «      Z% G d„ dejB                  «      Z& G d„ de"«      Z' G d„ dejB                  «      Z( G d „ d!ejB                  «      Z) G d"„ d#ejB                  «      Z* G d$„ d%ejB                  «      Z+ G d&„ d'ejB                  «      Z, G d(„ d)e	e«      Z- G d*„ d+e-e«      Z. G d,„ d-e-e«      Z/d.„ Z0d/„ Z1 G d0„ d1ejB                  «      Z2 G d2„ d3ejB                  «      Z3 G d4„ d5ejB                  «      Z4 G d6„ d7ejB                  «      Z5 G d8„ d9ejB                  «      Z6 G d:„ d;ejB                  «      Z7 G d<„ d=ejB                  «      Z8 G d>„ d?ejB                  «      Z9 G d@„ dAejB                  «      Z: G dB„ dCejB                  «      Z; G dD„ dEejB                  «      Z<dF„ Z= e=dG«      Z> e=dH«      Z? e=dI«      Z@ e=dJ«      ZA e=dK«      ZB e=dL«      ZC e=dM«      ZD e=dN«      ZE e=dO«      ZF e=dP«      ZG e=dQ«      ZH e=dR«      ZI e=dS«      ZJy)Té    N)ÚS©Úsympify)ÚExpr)ÚApplication)Ú_torfÚ	fuzzy_andÚfuzzy_or)Úequal_valued)Ú	LatticeOpÚShortCircuit)Úordered)Úwalk)Úsifté   )Úint_oo)ÚFloorDivÚModularIndexingÚWhereÚ	PythonModÚModÚCleanDivÚ	CeilToIntÚ
FloorToIntÚCeilDivÚ
IntTrueDivÚFloatTrueDivÚLShiftÚRShiftÚ!IsNonOverlappingAndDenseIndicatorÚTruncToFloatÚ
TruncToIntÚ
RoundToIntÚRoundDecimalÚToFloatÚFloatPowÚPowByNaturalÚIdentityc                 óB   ‡ — t        j                  ‰ «      ˆ fd„«       }|S )Nc                  ó¦   •—  ‰| Ž }t        d„ | D «       «      r8t        |t        j                  «      st        j                  t	        |«      «      }|S )Nc              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­w©N)Ú
isinstanceÚsympyÚFloat©Ú.0Úas     ú_/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/utils/_sympy/functions.pyú	<genexpr>z-_keep_float.<locals>.inner.<locals>.<genexpr>S   s   è ø€ Ò8¨aŒz˜!œUŸ[™[×)Ñ8ùó   ‚$&)Úanyr-   r.   r/   Úfloat)ÚargsÚrÚfs     €r3   Úinnerz_keep_float.<locals>.innerP   sD   ø€ áˆtˆHˆÜÑ8°4Ô8Ô8ÄØŒu�{‰{ôB
ô —‘œE !›HÓ%ˆAØˆó    )Ú	functoolsÚwraps)r:   r;   s   ` r3   Ú_keep_floatr?   O   s%   ø€ Ü‡_�_�QÓóó ðð €Lr<   c                 ó   — d | |fv ry | |k(  S r,   © )ÚxÚys     r3   Úfuzzy_eqrD   \   s   € Ø��1ˆv�~ØØ�‰6€Mr<   c                 ó†  ‡‡— d„ Šˆfd„}t        j                   || «       ||«      «      }| |z  ||z  }} t        t        t        j
                  j                  t        j                  j                  | «      «      «      }t        j
                  j                  |«      }|D ]  Št        ˆfd„|D «       «      sŒ|‰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.
    c                 óò   — t         j                  j                  | «      D �cg c]6  }t        |t        t         j
                  f«      rt        t	        |«      «      ‘Œ8 }}t        j                  |«      S c c}w r,   )	r.   ÚMulÚ	make_argsr-   ÚintÚIntegerÚabsÚmathÚprod)rB   ÚargÚinteger_coefficientss      r3   Úinteger_coefficientz0simple_floordiv_gcd.<locals>.integer_coefficients   sc   € ô —y‘y×*Ñ*¨1Ó-ö 
àÜ˜#¤¤U§]¡]Ð3Ô4ô ”�C“�Mð 
Ðð  
ô
 �y‰yÐ-Ó.Ð.ùò 
s   ¢;A4c                 óž   •— t        ‰t        j                  j                  | «      «      }t	        j
                  t        j                  |«      S r,   )Úmapr.   ÚAddrH   r=   ÚreducerL   Úgcd)ÚexprÚinteger_factorsrP   s     €r3   Úinteger_factorz+simple_floordiv_gcd.<locals>.integer_factor{   s6   ø€ ÜÐ1´5·9±9×3FÑ3FÀtÓ3LÓMˆÜ×Ñ¤§¡¨/Ó:Ð:r<   c              3   ó&   •K  — | ]  }‰|v –— Œ
 y ­wr,   rA   )r1   Ú
base_splitrB   s     €r3   r4   z&simple_floordiv_gcd.<locals>.<genexpr>…   s   øè ø€ Ò= :ˆq�JŒÑ=ùs   ƒ)	rL   rU   ÚlistrR   r.   rG   rH   rS   Úall)ÚpÚqrX   rU   Úbase_splitsÚdivisor_splitrP   rB   s         @@r3   Úsimple_floordiv_gcdra   b   s¥   ù€ ò"/ô;ô �(‰(‘> !Ó$¡n°QÓ&7Ó
8€CØˆs‰7�A˜‘G€q€Aä”sœ5Ÿ9™9×.Ñ.´·	±	×0CÑ0CÀAÓ0FÓGÓH€KÜ—I‘I×'Ñ'¨Ó*€MØò ˆÜÓ=°Ô=Õ=Ø˜‘'‰Cðð €Jr<   c                   óR   — e Zd ZdZdZdZdZed„ «       Zed„ «       Z	d„ Z
ed„ «       Zy	)
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
    ©é   é2   Tc                 ó    — | j                   d   S ©Nr   ©r8   ©Úselfs    r3   ÚbasezFloorDiv.baseª   ó   € à�y‰y˜‰|Ðr<   c                 ó    — | j                   d   S ©Nr   rh   ri   s    r3   ÚdivisorzFloorDiv.divisor®   rl   r<   c                 ó¬   — |j                  | j                  | j                  «      }|j                  | j                  | j                  «      }d|› d|› d�S )Nú(z//ú))Úparenthesizerk   Ú
precedencero   )rj   Úprinterrk   ro   s       r3   Ú	_sympystrzFloorDiv._sympystr²   sK   € Ø×#Ñ# D§I¡I¨t¯©Ó?ˆØ×&Ñ& t§|¡|°T·_±_ÓEˆØ�4�&˜˜7˜) 1Ð%Ð%r<   c                 óâ  — |j                   rt        d«      ‚|t        t         t        j                  t        j                   fv r>|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"                  «      rDt        |t        j"                  «      r*t        j"                  t'        |«      t'        |«      z  «      S t        |t(        «      r)t)        |j*                  d   |j*                  d   |z  «      S t        j,                  j/                  |«      D ]B  }||z  }|j                  sŒt        |t        j"                  «      sŒ0t)        ||z
  |«      |z   c S  	 t1        ||«      }t        |d«      r0t        |t        j,                  «      rt        j2                  ||«      }t        |d«      s8t)        t        j4                  ||z  «      t        j4                  ||z  «      «      S y # t        j6                  $ r Y y w xY w)Núdivision by zeror   éÿÿÿÿr   )Úis_zeroÚZeroDivisionErrorr   r.   ÚooÚnanr   ÚZeroÚ
is_integerr   rG   r-   ÚNumberr7   rL   ÚinfÚisnanrJ   ÚfloorrI   r   r8   rS   rH   ra   rU   ÚsimplifyÚPolynomialError)Úclsrk   ro   r9   ÚtermÚquotientrU   s          r3   ÚevalzFloorDiv.eval¹   sÔ  € ð �?Š?Ü#Ð$6Ó7Ð7Ø”FœV˜G¤U§X¡X´·±¨yÐ9Ñ9¸gÜÜˆGÜ�H‰HÜ�X‰XˆIð	J
ñ ?
ô —9‘9ÐØ”5—9‘9Ñ ¬5¯9©9Ñ 4Ü—9‘9Ðà�<Š<Ü—7‘7—<‘<ÐØ�?Š?œ|¨G°QÔ7ØˆKØ�?Š?œ|¨G°RÔ8Ü—9‘9˜T 2Ó&Ð&ä�tœUŸ\™\Õ*Ü˜7¤E§L¡LÔ1àœ¤& ¬%¯(©(´U·X±X°IÐ>Ñ>Øœv¬ w´·±¼5¿8¹8¸)ÐDÑDô �d“œe G›nÑ,ˆAØ”D—H‘HŠ}Ü�Ø”t—x‘x�i’Ü�w�Ü—‘˜A”Ü—y‘yÐ ä—}‘}¤T§Z¡Z°£]Ó3Ð3Ü�dœEŸM™MÔ*¬z¸'Ä5Ç=Á=Ô/QÜ—=‘=¤ T£¬c°'«lÑ!:Ó;Ð;Ü�dœHÔ%Ü˜DŸI™I a™L¨$¯)©)°A©,¸Ñ*@ÓAÐAô —I‘I×'Ñ'¨Ó-ò 	AˆDØ˜g‘~ˆHØ×"Ó"¤z°'¼5¿=¹=Õ'Iô    t¡¨WÓ5¸Ñ@Ò@ð	Að		Ü% d¨GÓ4ˆCÜ˜C Ô#¬
°7¼E¿I¹IÔ(FÜ—i‘i  gÓ.�Ü  QÔ'ÜÜ—N‘N 4¨#¡:Ó.´·±¸wÈ¹}Ó0Móð ð (øô ×$Ñ$ò 	Ùð	ús   ÍBO ÏO.Ï-O.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Únargsrt   r   Úpropertyrk   ro   rv   Úclassmethodr‰   rA   r<   r3   r   r   œ   sY   „ ñð €EØ€Jà€Jàñó ðð ñó ðò&ð ñCó ñCr<   r   c                   ó4   — e Zd ZdZdZdZed„ «       Zd„ Zd„ Z	y)r   zK
    ModularIndexing(a, b, c) => (a // b) % c where % is the C modulus
    ©é   Tc                 óh  — |dk(  s|dk(  rt        j                  d«      S t        |t         j                  «      r<t        |t         j                  «      r"t        |t         j                  «      r||z  |z  S 	 |dk7  rTt        j                  ||«      }|dk7  r9t	        t        j
                  ||z  «      t        j
                  ||z  «      |«      S t        |t         j                  «      rõg }d}|j                  D ]©  }t        j                  |||z  «      ||z  k7  sŒ#t        |t         j                  «      r|dk  sSt        |t         j                  «      r=t        |j                  d   t         j                  «      r|j                  d   dk  rd} n|j                  |«       Œ« t        |«      t        |j                  «      k7  r|rt	        t        |«      ||«      S t        |t        «      r*t	        |j                  d   |j                  d   |z  |«      S y # t         j                  $ r Y �Œ`w xY w)Nr   r   TF)r.   rJ   r-   rU   r   r„   r…   rS   r8   rG   ÚappendÚlenÚsumr   )r†   rk   ro   ÚmodulusrU   Ú	new_termsÚall_positiver‡   s           r3   r‰   zModularIndexing.eval  sÎ  € à�1Š9˜ 1šÜ—=‘= Ó#Ð#ô �tœUŸ]™]Ô+Ü˜7¤E§M¡MÔ2Ü˜7¤E§M¡MÔ2à˜G‘O wÑ.Ð.ð
	Ø˜!Š|Ü—i‘i  gÓ.�Ø˜!’8Ü*ÜŸ™ t¨c¡zÓ2ÜŸ™ w°¡}Ó5Øóð ô �dœEŸI™IÔ&ØˆIØˆLØŸ	™	ò /�Ü—9‘9˜T 7¨WÑ#4Ó5¸À7Ñ9JÓJÜ" 4¬¯©Ô7¸DÀ1ºHÜ" 4¬¯©Ô3Ü& t§y¡y°¡|´U·]±]ÔCØ ŸI™I a™L¨1Ò,ð (-˜Ùà!×(Ñ(¨Õ.ð/ô  �9‹~¤ T§Y¡Y£Ò/±LÜ&¤s¨9£~°wÀÓHÐHä�dœHÔ%Ü" 4§9¡9¨Q¡<°·±¸1±ÀÑ1GÈÓQÐQð &øô3 ×$Ñ$ò 	Úð	ús   Á7AH ÈH1È0H1c                 óf   — | j                   d d \  }}t        |j                  |j                  «      S ©Nrd   )r8   rD   Úis_nonnegative©rj   r]   r^   s      r3   Ú_eval_is_nonnegativez$ModularIndexing._eval_is_nonnegative9  s.   € Ø�y‰y˜˜!ˆ}‰ˆˆ1Ü˜×(Ñ(¨!×*:Ñ*:Ó;Ð;r<   c                 óf   — | j                   d d \  }}t        |j                  |j                  «      S rœ   )r8   rD   Úis_positiverž   s      r3   Ú_eval_is_positivez!ModularIndexing._eval_is_positive=  s*   € Ø�y‰y˜˜!ˆ}‰ˆˆ1Ü˜Ÿ™ q§}¡}Ó5Ð5r<   N)
rŠ   r‹   rŒ   r�   rŽ   r   r�   r‰   rŸ   r¢   rA   r<   r3   r   r      s2   „ ñð €EØ€Jàñ.Ró ð.Rò`<ó6r<   r   c                   ó6   — e Zd ZdZdZd„ Zd„ Zd„ Zed„ «       Z	y)r   z#
    Good ol' ternary operator
    r’   c                 ón   — | j                   d   j                  r| j                   d   j                  rdS d S ©Nr   rd   T©r8   r   ri   s    r3   Ú_eval_is_integerzWhere._eval_is_integerI  s.   € Ø—y‘y ‘|×.Ò.°4·9±9¸Q±<×3JÒ3JˆtÐTÐPTÐTr<   c                 ón   — | j                   d   j                  r| j                   d   j                  rdS d S r¥   )r8   r�   ri   s    r3   rŸ   zWhere._eval_is_nonnegativeL  s9   € ð �y‰y˜‰|×*Ò*¨t¯y©y¸©|×/JÒ/Jð ð	
ð ð	
r<   c                 ón   — | j                   d   j                  r| j                   d   j                  rdS d S r¥   ©r8   r¡   ri   s    r3   r¢   zWhere._eval_is_positiveS  s.   € Ø—y‘y ‘|×/Ò/°D·I±I¸a±L×4LÒ4LˆtÐVÐRVÐVr<   c                 óX   — |t         j                  k(  r|S |t         j                  k(  r|S y r,   )r.   ÚtrueÚfalse)r†   Úcr]   r^   s       r3   r‰   z
Where.evalV  s(   € à”—
‘
Š?ØˆHØ”%—+‘+ÒØˆHð r<   N)
rŠ   r‹   rŒ   r�   rŽ   r§   rŸ   r¢   r�   r‰   rA   r<   r3   r   r   B  s3   „ ñð €EòUò
òWð ñó ñr<   r   c                   ó0   — e Zd ZdZdZed„ «       Zd„ Zd„ Zy)r   rc   Tc                 óB  — |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(  r8|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 y )NúModulo by zeror   rd   r   )rz   r{   r   r~   Ú	is_NumberÚis_evenÚis_oddÚOner   Ú
is_BooleanÚboolr¡   r.   r   ©r†   r]   r^   r9   Úlesss        r3   r‰   zPythonMod.evald  sä   € ð �9Š9Ü#Ð$4Ó5Ð5ð ”—‘‰;˜!  A 2˜w™,¨!¨qª&Ü—6‘6ˆMð �;Š;˜1Ÿ;š;Ø�q‘5ˆLð �;Š;˜1 š6Ø�yŠyÜ—v‘v�Ø�xŠxÜ—u‘u�ð �‰EˆØ�<Š<Ü—6‘6ˆMð
 �1‰uˆØ�?Š?œt Dœz¨a¯mªmØˆHä�9‰9�Q˜‹?˜aÒÜ—6‘6ˆMð  r<   c                 ó<   — | j                   d   j                  rdS d S ©Nr   Trª   ri   s    r3   rŸ   zPythonMod._eval_is_nonnegative�  ó   € Ø—y‘y ‘|×/Ò/ˆtÐ9°TÐ9r<   c                 ó<   — | j                   d   j                  rdS d S r»   )r8   Úis_negativeri   s    r3   Ú_eval_is_nonpositivezPythonMod._eval_is_nonpositive“  r¼   r<   N)	rŠ   r‹   rŒ   rŽ   r   r�   r‰   rŸ   r¿   rA   r<   r3   r   r   _  s)   „ Ø€Eà€Jàñ(ó ð(òV:ó:r<   r   c                   ó(   — e Zd ZdZdZdZed„ «       Zy)r   rc   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(  r8|j
                  rt        j                  S |j                  rt        j                  S ||z  }|j                  rt        j                  S ||k  }|j                  rt        |«      r|j                  r|S y y y )Nr±   r   r   rd   )rz   r{   r   r~   r²   r³   r´   rµ   r   r¶   r·   r¡   r¸   s        r3   r‰   zMod.evalž  sï   € ð �9Š9Ü#Ð$4Ó5Ð5ð ”—‘‰;˜!  A 2˜w™,¨!¨qª&Ü—6‘6ˆMð �;Š;˜1Ÿ;š;Ø˜’6Ð˜1Ó�6Ø˜’6Ð˜1Ó�6Ø�q‘5ˆLð �;Š;˜1 š6Ø�yŠyÜ—v‘v�Ø�xŠxÜ—u‘u�ð �‰EˆØ�<Š<Ü—6‘6ˆMð
 �1‰uˆØ�?Š?œt Dœz¨a¯mªmØˆHð /<˜zˆ?r<   N)rŠ   r‹   rŒ   rŽ   r   r�   r�   r‰   rA   r<   r3   r   r   ˜  s#   „ Ø€Eà€JØ€Nàñ)ó ñ)r<   r   c                   ó   — e Zd ZdZy)r   zZ
    Div where we can assume no rounding.
    This is to enable future optimizations.
    N)rŠ   r‹   rŒ   r�   rA   r<   r3   r   r   Ë  s   „ òr<   r   c                   ó    — e Zd ZdZed„ «       Zy)r   Tc                 ó  — |t         j                  t        fv rt        S |t         j                   t         fv rt         S t        |t         j                  «      r1t        j
                  t        j                  t        |«      «      «      S y r,   )	r.   r|   r   r-   r€   rJ   rL   Úceilr7   ©r†   Únumbers     r3   r‰   zCeilToInt.eval×  se   € ð ”e—h‘h¤Ð'Ñ'ÜˆMØ”u—x‘x�i¤& Ð)Ñ)Ü�7ˆNÜ�fœeŸl™lÔ+Ü—=‘=¤§¡¬5°«=Ó!9Ó:Ð:ð ,r<   N©rŠ   r‹   rŒ   r   r�   r‰   rA   r<   r3   r   r   Ô  s   „ Ø€Jàñ;ó ñ;r<   r   c                   ó    — e Zd ZdZed„ «       Zy)r   Tc                 ó  — |t         j                  t        fv rt        S |t         j                   t        fv rt         S t        |t         j                  «      r1t        j
                  t        j                  t        |«      «      «      S y r,   )	r.   r|   r   r-   r€   rJ   rL   rƒ   r7   rÆ   s     r3   r‰   zFloorToInt.evalå  sc   € ð ”e—h‘h¤Ð'Ñ'ÜˆMØ”u—x‘x�i¤Ð(Ñ(Ü�7ˆNÜ�fœeŸl™lÔ+Ü—=‘=¤§¡¬E°&«MÓ!:Ó;Ð;ð ,r<   NrÈ   rA   r<   r3   r   r   â  ó   „ Ø€Jàñ<ó ñ<r<   r   c                   ó   — e Zd ZdZdZd„ Zy)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 rn   )r.   r   rU   r   r   ©r†   rk   ro   s      r3   Ú__new__zCeilDiv.__new__÷  sT   € Ü�}‰}˜TÓ"ˆÜ—-‘- Ó(ˆÜ�9‰9�T˜7Ó# wÒ.Ü˜D 'Ó*Ð*ä˜D G¨a¡KÑ0°'Ó:Ð:r<   N)rŠ   r‹   rŒ   r�   r   rÏ   rA   r<   r3   r   r   ð  s   „ ñð €Jó;r<   r   c                   ó    — e Zd ZdZed„ «       Zy)r   Tc                 ó2   — |dk  rt        d«      ‚|d|z  z  S ©Nr   znegative shift countrd   ©Ú
ValueError©r†   rk   Úshifts      r3   r‰   zLShift.eval  s#   € à�1Š9ÜÐ3Ó4Ð4Ø�a˜‘h‰Ðr<   NrÈ   rA   r<   r3   r   r      s   „ Ø€Jàñó ñr<   r   c                   ó    — e Zd ZdZed„ «       Zy)r   Tc                 ó2   — |dk  rt        d«      ‚|d|z  z  S rÒ   rÓ   rÕ   s      r3   r‰   zRShift.eval  s$   € à�1Š9ÜÐ3Ó4Ð4Ø�q˜%‘xÑÐr<   NrÈ   rA   r<   r3   r   r   
  s   „ Ø€Jàñ ó ñ r<   r   c                   óî   — e Zd Zd„ Ze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"y )!Ú
MinMaxBasec                 óê  — ddl m} |j                  d|j                  «      }d„ |D «       }|rA	 t	        | j                  |«      «      } | j                  |fi |¤Ž} | j                  |fi |¤Ž}t	        |«      }|s| j                  S t        |«      dk(  rt        |«      j                  «       S t        j                  | gt        |«      ¢­i |¤Ž}||_        |S # t        $ r | j                  cY S w xY w)Nr   )Úglobal_parametersÚevaluatec              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr,   r   )r1   rN   s     r3   r4   z%MinMaxBase.__new__.<locals>.<genexpr>  s   è ø€ Ò- ”˜—Ñ-ùs   ‚r   )Úsympy.core.parametersrÜ   ÚpoprÝ   Ú	frozensetÚ_new_args_filterr   ÚzeroÚ_collapse_argumentsÚ_find_localzerosÚidentityr–   r[   r   rÏ   r   Ú_argset)r†   r8   ÚassumptionsrÜ   rÝ   Úobjs         r3   rÏ   zMinMaxBase.__new__  së   € Ý;à—?‘? :Ð/@×/IÑ/IÓJˆÙ-¨Ô-ˆñ
 ð Ü  ×!5Ñ!5°dÓ!;Ó<�ð +�3×*Ñ*¨4Ñ?°;Ñ?ˆDà'�3×'Ñ'¨Ñ<°Ñ<ˆDÜ˜‹ˆáØ—<‘<Ðäˆt‹9˜Š>Ü˜“:—>‘>Ó#Ð#ô �l‰l˜3Ð>¤¨£Ò>°+Ñ>ˆØˆŒØˆ
øô#  ò  Ø—x‘x’ð ús   ¯C ÃC2Ã1C2c                 óî  ‡ ‡‡— |s|S t        t        |«      «      }‰ t        u rt        Šnt        Š|d   j                  �r×g g fx}\  }}|D ]X  }t        |t        t        «      D ]>  }|j                  d   j                  sŒ|t        |t        «         j                  |«       Œ@ ŒZ t        j                  }|D ])  }|j                  d   }|j                  sŒ||k  dk(  sŒ(|}Œ+ t        j                  }	|D ])  }|j                  d   }|j                  sŒ||	kD  dk(  sŒ(|}	Œ+ ‰ t        u r!|D ]  }
|
j                  s n7|
|k  dk(  sŒ|
}Œ n)‰ t        k(  r |D ]  }
|
j                  s n|
|	kD  dk(  sŒ|
}	Œ d}‰ t        u r|t        j                  k7  r$t        Š|}n|	t        j                  k7  rt        Š|	}|�`t        t        |«      «      D ]I  }||   }t        |‰«      sŒ|j                  d   }‰t        k(  r||kD  n||k  dk(  sŒ;‰ j                  ||<   ŒK ˆ ˆfd„Št        |«      D ](  \  }}||dz   d D �cg c]  } ‰||«      ‘Œ c}||dz   d Œ* ˆ ˆfd„}t        |«      dkD  r ||«      }|S c c}w )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        t        f«      s| S || j                  v }|s1 | j                  | j                  D �cg c]  } ‰||«      ‘Œ c}ddiŽS t        | ‰«      r7 | j                  | j                  D �cg c]  }||k7  sŒ	 ‰||«      ‘Œ c}ddiŽS |S c c}w c c}w )NrÝ   F)r-   ÚMinÚMaxr8   Úfunc)Úair2   ÚcondÚir†   Údos       €€r3   rò   z*MinMaxBase._collapse_arguments.<locals>.do‹  sš   ø€ Ü˜b¤3¬ *Ô-Ø�	Ø˜Ÿ™�<ˆDÙØ�r—w‘w°2·7±7Ö ;¨a¡ A q¥Ò ;ÐLÀeÑLÐLÜ˜"˜cÔ"Ø�r—w‘w°2·7±7Ö E¨a¸aÀ1»f¡ A q¥Ò EÐVÐPUÑVÐVØˆHùò !<ùâ Es   ÁB Â
B%ÂB%r   c                 óŠ  •— ˆfd„}t        | |d¬«      \  }}|s| S |D �cg c]  }t        |j                  «      ‘Œ }}t        j                  |Ž }|s| S t	        |«      }|D �cg c]  }||z
  ‘Œ	 }	}t        |	«      r,|	D �
cg c]
  }
 ‰|
ddiŽ‘Œ }}
|j                   ‰|ddiŽ«        ‰|ddiŽ}||gz   S c c}w c c}w c c}
w )Nc                 ó   •— t        | ‰«      S r,   )r-   )rN   Úothers    €r3   ú<lambda>zGMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<lambda>   s   ø€ ¤:¨c°5Ó#9€ r<   T)ÚbinaryrÝ   F)r   Úsetr8   Úintersectionr[   r\   r•   )r8   Úis_otherÚ
other_argsÚremaining_argsrN   Úarg_setsÚcommonÚnew_other_argsÚarg_setÚarg_sets_diffÚsÚother_args_diffÚother_args_factoredr†   rõ   s                €€r3   Úfactor_minmaxz5MinMaxBase._collapse_arguments.<locals>.factor_minmaxŸ  sè   ø€ Û9ˆHÜ)-¨d°HÀTÔ)JÑ&ˆJ˜ÙØ�ð 2<Ö<¨#œ˜CŸH™H�Ð<ˆHÐ<Ü×%Ñ% xÐ0ˆFÙØ�ä! &›\ˆNØ=EÖF°'˜W vÓ-ÐFˆMÐFô �=Ô!ØFSÖ"TÀ¡5¨!Ð#<°eÓ#<Ð"T�Ð"TØ×%Ñ%¡c¨?Ð&KÀUÑ&KÔLá"'¨Ð"HÀ%Ñ"HÐØ!Ð%8Ð$9Ñ9Ð9ùò =ùò Gùò
 #Us    B6Á#B;Â C )r[   r   rì   rí   Ú	is_numberr   r8   Úis_comparabler-   r•   ræ   Úranger–   Ú	enumerate)r†   r8   rè   ÚsiftedÚminsÚmaxsrñ   ÚvÚsmallÚbigrN   ÚTr2   Úa0rï   r  rò   rõ   s   `               @@r3   rä   zMinMaxBase._collapse_arguments4  s”  ú€ ñ0 ØˆKÜ”G˜D“MÓ"ˆØ”#‰:Ü‰EäˆEð
 �‰7×ÓØ"$ b &Ð(ˆF‘Z�T˜4Øò =�Ü˜a¤¤cÓ*ò =�AØ—v‘v˜a‘y×.Ó.Øœz¨!¬SÓ1Ñ2×9Ñ9¸!Õ<ñ=ð=ô —L‘LˆEØò �Ø—F‘F˜1‘I�Ø—;“; A¨¡I°$Ó#6Ø‘Eðô —,‘,ˆCØò �Ø—F‘F˜1‘I�Ø—;“; A¨¡G°Ó#4Ø‘Cðð ”c‰zØò $�CØŸ=š=ÙØ˜e™¨Ó,Ø #™ñ	$ð
 œ’Øò "�CØŸ=š=ÙØ˜c™	 dÓ*Ø!™ð	"ð
 ˆAØ”c‰zØœCŸL™LÒ(Ü�EØ‘AØœŸ™Ò$Ü�Ø�Øˆ}äœs 4›yÓ)ò 3�AØ˜Q™�AÜ! ! UÕ+ØŸV™V A™Y˜à(-´ª˜R !šV¸2À¹6Ø!ó"ð '*§l¡l˜D šGð3õ	ô ˜d“Oò 	@‰DˆAˆqØ15°a¸!±e°g°Ö?¨2™R  A�YÒ?ˆD��Q‘�‰Mð	@õ	:ô0 ˆt‹9�qŠ=Ù  Ó&ˆDàˆùòI @s   È9I2c              #   óL  K  — |D ]™  }t        |t        «      r&|j                  du s|j                  r|j                  st        d|› d�«      ‚|| j                  k(  rt        |«      ‚|| j                  k(  rŒr|j                  | k(  r|j                  E d{  –—†  Œ–|–— Œ› y7 Œ­w)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)r-   r   Úis_extended_realr  r  rÔ   rã   r   ræ   rî   r8   )r†   Úarg_sequencerN   s      r3   râ   zMinMaxBase._new_args_filter¼  sœ   è ø€ ð  ò 	ˆCô ˜s¤DÔ)Ø×'Ñ'¨5Ñ0Ø—M’M¨#×*;Ò*;ä  >°#°Ð6JÐ!KÓLÐLà�c—h‘hŠÜ" 3Ó'Ð'Ø˜Ÿ™Ò$ØØ—‘˜S’ØŸ8™8×#Ñ#à“	ñ!	ð $ús   ‚BB$ÂB"ÂB$c                 ó6  — t        «       }|D ]‰  }d}t        |«      }|D ]`  }t        |«      t        |«      k(  rd}Œ| j                  ||«      }|sŒ2d}|du s|| k(  sŒ>|j	                  |«       |j                  |g«       Œb |sŒx|j                  |g«       Œ‹ |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.
        TF)rø   r[   ÚidÚ_is_connectedÚremoveÚupdate)	r†   ÚvaluesÚoptionsÚ
localzerosr  Ú
is_newzeroÚlocalzeros_ÚzÚcons	            r3   rå   zMinMaxBase._find_localzeros×  s®   € ô “Uˆ
Øò 	'ˆAØˆJÜ˜zÓ*ˆKØ ò 	3�Ü�a“5œB˜q›E’>Ø!&‘Jà×+Ñ+¨A¨qÓ1�CÚØ%*˜
Ø $™;¨#°«*Ø&×-Ñ-¨aÔ0Ø&×-Ñ-¨q¨cÕ2ð	3ò Ø×!Ñ! 1 #Õ&ð	'ð Ðr<   c                 óÞ   — ||k(  ryt         t        }}dD ]E  }t        d«      D ]1  }	 |dk(  r||k\  }n||k  }|j                  s
|r|n|c c S ||}}||}}Œ3 ||}}ŒG y# t        $ r Y   yw xY w)z9
        Check if x and y are connected somehow.
        Tz><rd   ú>F)rí   rì   r  Ú	TypeErrorÚis_Relational)r†   rB   rC   Útr:   ÚopÚjr  s           r3   r  zMinMaxBase._is_connectedò  s    € ð
 �Š6ØÜ”Cˆ1ˆØò 	ˆBÜ˜1“Xò �ð!Ø˜S’yØ ™F™à ™F˜ð —’Ù !™1 qÔ(Ø˜!�1�Ø˜!�1‘ðð �aˆq‰Að	ð øô !ò !Û ð!ús   §AÁ	A,Á+A,c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_algebraic©r1   rñ   s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  ó   è ø€ Ò(H¸A¨¯­Ñ(Hùó   ‚©r   r8   ©r  s    r3   rö   zMinMaxBase.<lambda>  ó   € ¤5Ñ(HÀÇÁÔ(HÓ#H€ r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_antihermitianr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  ó   è ø€ ò -Ø ˆ×Õñ-ùr-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  ó   € ¤uñ -Ø$%§F¡Fô-ó (€ r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_commutativer+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  ó   è ø€ ò +Øˆ×Õñ+ùr-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  ó   € ¤Uñ +Ø"#§&¡&ô+ó &€ r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Ú
is_complexr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  ó   è ø€ Ò&D¸ q§|¥|Ñ&Dùr-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  ó   € ¤Ñ&D¸Q¿V¹VÔ&DÓ!D€ r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_compositer+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r,  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  r0  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )r³   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  ó   è ø€ Ò#>°! A§I¥IÑ#>ùr-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  ó   € œeÑ#>°q·v±vÔ#>Ó>€ r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Ú	is_finiter+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  s   è ø€ Ò%B°a a§k¥kÑ%Bùr-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  s   € ¤Ñ%B¸1¿6¹6Ô%BÓ B€ r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_hermitianr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r,  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  r0  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_imaginaryr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r,  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  r0  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_infiniter+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  ó   è ø€ Ò'F¸!¨¯­Ñ'Fùr-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  ó   € ¤%Ñ'F¸q¿v¹vÔ'FÓ"F€ r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )r   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r>  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  r?  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_irrationalr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  ó   è ø€ Ò)J¸a¨!¯/­/Ñ)Jùr-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  ó   € ¤EÑ)JÀ1Ç6Á6Ô)JÓ$J€ r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   ©r¾   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rS  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  rT  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_nonintegerr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rZ  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  r[  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   ©r�   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r9  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>  r:  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_nonpositiver+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>   r9  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>   r:  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Ú
is_nonzeror+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>#  r>  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>#  r?  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )r´   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>$  s   è ø€ Ò"<° 1§8¥8Ñ"<ùr-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>$  s   € œUÑ"<°Q·V±VÔ"<Ó<€ r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_polarr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>%  ó   è ø€ Ò$@°A Q§Z¥ZÑ$@ùr-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>%  ó   € œuÑ$@¸¿¹Ô$@Ó@€ r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   ©r¡   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>&  rS  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>&  rT  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_primer+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>'  rp  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>'  rq  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_rationalr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>(  rS  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>(  rT  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_realr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>)  rE  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>)  rF  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )r  r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>*  r4  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>*  r5  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )Úis_transcendentalr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>-  s   è ø€ ò .Ø !ˆ×Õñ.ùr-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>-  s   € ¬ñ .Ø%&§V¡Vô.ó )€ r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   )rz   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>0  rE  r-  r.  r/  s    r3   rö   zMinMaxBase.<lambda>0  rF  r<   N)#rŠ   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_zerorA   r<   r3   rÚ   rÚ     s  „ òð> ñEó ðEðN ñó ðð4 ñó ðð4 ñó ðñ0 IÐñÐñÐñ EÐÙHÐÙ>€MÙB€OÙHÐÙHÐÙFÐÙDÐÙJÐÙFÐÙJÐñÐñÐñ EÐÙ<€LÙ@€NÙFÐÙ@€NÙFÐÙ>€MñÐñÐñ ?�Mr<   rÚ   c                   óR   — e Zd ZdZej
                  Zej                  Zd„ Z	d„ Z
d„ Zy)rí   z=
    Return, if possible, the maximum value of the list.
    c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   rt  r0   s     r3   r4   z(Max._eval_is_positive.<locals>.<genexpr>;  ó   è ø€ Ò9¨!˜Ÿ�Ñ9ùr-  ©r
   r8   ri   s    r3   r¢   zMax._eval_is_positive:  ó   € ÜÑ9¨t¯y©yÔ9Ó9Ð9r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   rd  r0   s     r3   r4   z+Max._eval_is_nonnegative.<locals>.<genexpr>>  s   è ø€ Ò<¨Q˜×(Õ(Ñ<ùr-  rŸ  ri   s    r3   rŸ   zMax._eval_is_nonnegative=  s   € ÜÑ<°$·)±)Ô<Ó<Ð<r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   r^  r0   s     r3   r4   z(Max._eval_is_negative.<locals>.<genexpr>A  ó   è ø€ Ò:¨1˜Ÿ�Ñ:ùr-  ©r	   r8   ri   s    r3   r�  zMax._eval_is_negative@  ó   € ÜÑ:°·	±	Ô:Ó:Ð:r<   N)rŠ   r‹   rŒ   r�   r   ÚInfinityrã   ÚNegativeInfinityræ   r¢   rŸ   r�  rA   r<   r3   rí   rí   3  s,   „ ñð �:‰:€DØ×!Ñ!€Hò:ò=ó;r<   rí   c                   óR   — e Zd ZdZej
                  Zej                  Zd„ Z	d„ Z
d„ Zy)rì   z=
    Return, if possible, the minimum value of the list.
    c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   rt  r0   s     r3   r4   z(Min._eval_is_positive.<locals>.<genexpr>M  r¥  r-  r¦  ri   s    r3   r¢   zMin._eval_is_positiveL  r§  r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   rd  r0   s     r3   r4   z+Min._eval_is_nonnegative.<locals>.<genexpr>P  s   è ø€ Ò=¨a˜×)Õ)Ñ=ùr-  r¦  ri   s    r3   rŸ   zMin._eval_is_nonnegativeO  s   € ÜÑ=°4·9±9Ô=Ó=Ð=r<   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr,   r^  r0   s     r3   r4   z(Min._eval_is_negative.<locals>.<genexpr>S  rž  r-  rŸ  ri   s    r3   r�  zMin._eval_is_negativeR  r   r<   N)rŠ   r‹   rŒ   r�   r   r©  rã   r¨  ræ   r¢   rŸ   r�  rA   r<   r3   rì   rì   D  s,   „ ñð ×Ñ€DØ�z‰z€Hò;ò>ó:r<   rì   c                 óL   — d}| dk  r|  } |dz  dk(  rdnd}|t        | |«      z  S )Nr   r   rd   ry   )Ú	_safe_pow)rk   ÚexpÚsigns      r3   Úsafe_powrµ  V  s8   € Ø€DØˆa‚xØˆuˆØ˜!‘G˜q’L‰q bˆØ”)˜D #Ó&Ñ&Ð&r<   c                 óô   — |dk  rt        d«      ‚|dk(  ryt        | |dz  «      }|t        u rt        S ||z  }|t        j                  kD  rt        S |dz  dk(  r|| z  }|t        j                  kD  rt        S |S )Nr   zExponent must be non-negative.r   rd   )rÔ   rµ  r   ÚsysÚmaxsize)rk   ÚexponentÚhalf_expÚresults       r3   r²  r²  _  s„   € Ø�!‚|ÜÐ9Ó:Ð:à�1‚}Øä˜˜h¨!™mÓ,€HØ”6ÑÜˆð
 ˜Ñ €FØ”—‘ÒÜˆà�!�|�qÒØ�$‰ˆØ”C—K‘KÒÜˆMà€Mr<   c                   ó    — e Zd ZdZed„ «       Zy)r'   Tc                 ó¾  — t        |t        j                  «      rLt        |t        j                  «      r2t        ||«      }|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 y y r,   )
r-   r.   rJ   rµ  r   ÚPowr|   r�   r¾   Úzoo)r†   rk   r³  r9   s       r3   r‰   zPowByNatural.eval|  s©   € ä�dœEŸM™MÔ*¬z¸#¼u¿}¹}Ô/MÜ˜˜sÓ#ˆAØ”f�WœfÐ%Ñ%Ø�Ü—=‘= Ó#Ð#Ü�cœ5Ÿ=™=Ô)ô —9‘9˜T 3Ó'Ð'Ø”6œ5Ÿ8™8Ð$Ñ$Ø×"Ò"Ü�Ø×!Ò!Ü—y‘yÐ ð "ð %r<   NrÈ   rA   r<   r3   r'   r'   y  s   „ Ø€Jàñ!ó ñ!r<   r'   c                   ó    — e Zd ZdZed„ «       Zy)r&   Tc                 óÂ   — t        |t        j                  «      rEt        |t        j                  «      r*t        j                  t	        |«      t	        |«      z  «      S y y r,   )r-   r.   r€   r/   r7   )r†   rk   r³  s      r3   r‰   zFloatPow.eval•  sD   € ô �dœEŸL™LÔ)¬j¸¼e¿l¹lÔ.KÜ—;‘;œu T›{¬e°C«jÑ8Ó9Ð9ð /LÐ)r<   N©rŠ   r‹   rŒ   r}  r�   r‰   rA   r<   r3   r&   r&   ’  s   „ Ø€Gàñ:ó ñ:r<   r&   c                   ó    — e Zd ZdZed„ «       Zy)r   Tc                 óð   — |j                   rt        d«      ‚t        |t        j                  «      rEt        |t        j                  «      r*t        j
                  t        |«      t        |«      z  «      S y y ©Nrx   )rz   r{   r-   r.   r€   r/   r7   rÎ   s      r3   r‰   zFloatTrueDiv.eval©  sW   € ð
 �?Š?Ü#Ð$6Ó7Ð7ä�dœEŸL™LÔ)¬j¸Ä%Ç,Á,Ô.OÜ—;‘;œu T›{¬U°7«^Ñ;Ó<Ð<ð /PÐ)r<   NrÂ  rA   r<   r3   r   r   ¦  s   „ Ø€Gàñ=ó ñ=r<   r   c                   ó    — e Zd ZdZed„ «       Zy)r   Tc                 ód  — |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 r*t        j                  t        |«      t        |«      z  «      S t        |t        j                  «      rEt        |t        j                  «      r*t        j                  t        |«      t        |«      z  «      S y y rÅ  )rz   r{   r-   r.   r€   r   r|   r/   r7   rJ   rI   rÎ   s      r3   r‰   zIntTrueDiv.evalÀ  sË   € à�?Š?Ü#Ð$6Ó7Ð7ô �tœUŸ\™\Ô*Ü˜7¤E§L¡LÔ1àœ¤& ¬%¯(©(´U·X±X°IÐ>Ñ>Øœv¬ w´·±¼5¿8¹8¸)ÐDÑDô
 —;‘;œu T›{¬U°7«^Ñ;Ó<Ð<Ü�dœEŸM™MÔ*¬z¸'Ä5Ç=Á=Ô/QÜ—;‘;œs 4›y¬3¨w«<Ñ7Ó8Ð8ð 0RÐ*r<   NrÂ  rA   r<   r3   r   r   ½  s   „ Ø€Gàñ9ó ñ9r<   r   c                   ó    — e Zd ZdZed„ «       Zy)r    Tc           	      óÊ  — t        |«      dz  dk(  sJ ‚t        |«      dz  }|d| }||d  }ddlm} t        d„ |D «       «      r7 ||D �cg c]  }t	        |«      ‘Œ c}|D �cg c]  }t	        |«      ‘Œ c}«      S |dk(  r0|d   j
                  r	|d   dk(  ry|d   j
                  r	|d   dk  ryt        d„ |D «       «      rŽ|dk7  sJ ‚t        t        t        ||«      t        j                  d«      ¬«      Ž \  }}t        d„ |d d	 D «       «      r?|d d	 d
z   } ||D �cg c]  }t	        |«      ‘Œ c}|D �cg c]  }t	        |«      ‘Œ c}«      S y c c}w c c}w c c}w c c}w )Nrd   r   )Ú!eval_is_non_overlapping_and_densec              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr,   ©r-   r.   rJ   r0   s     r3   r4   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>é  s   è ø€ Ò:°Œz˜!œUŸ]™]×+Ñ:ùr5   r   c              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr,   rÌ  r0   s     r3   r4   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>þ  s   è ø€ Ò=°Œz˜!œUŸ]™]×+Ñ=ùr5   )Úkeyc              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr,   rÌ  r0   s     r3   r4   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>  s   è ø€ ÒF°A”:˜a¤§¡×/ÑFùr5   ry   )é*   )
r–   Ú%torch.fx.experimental.symbolic_shapesrÊ  r\   rI   r²   ÚzipÚsortedÚoperatorÚ
itemgetter)	r†   r8   ÚdimÚsizesÚstridesrÊ  r2   Ús_sizesÚ	s_stridess	            r3   r‰   z&IsNonOverlappingAndDenseIndicator.evalÝ  st  € ä�4‹y˜1‰} Ò!Ð!Ð!Ü�$‹i˜1‰nˆØ�Q�s�ˆØ�s�t�*ˆõ	
ô Ñ:°TÔ:Ô:Ù4Ø!&Ö'˜A”�Q•Ò'¸'Ö)B°Q¬#¨a­&Ò)Bóð ð �!Š8à�q‰z×#Ò#¨°©
°aªØà�Q‰x×!Ò! e¨A¡h°¢lØô Ñ=°WÔ=Ô=Ø˜!’8ˆO�8ô "%Üœ˜E 7Ó+´×1DÑ1DÀQÓ1GÔHð"ÑˆG�Yô ÑF¸ÀÀ"¸ÔFÔFØ! # 2˜,¨Ñ.�ñ 9Ø%,Ö- ”S˜•VÒ-À	Ö/J¸1´°AµÒ/Jóð ð ùòG (ùÒ)Bùò@ .ùÒ/Js   Á
EÁ"E
ÄEÄ7E 
NrÈ   rA   r<   r3   r    r    Ú  s   „ Ø€Jàñ0ó ñ0r<   r    c                   ó    — e Zd ZdZed„ «       Zy)r!   Tc                 óš   — t        |t        j                  «      r1t        j                  t	        j
                  t        |«      «      «      S y r,   )r-   r.   r€   r/   rL   Útruncr7   rÆ   s     r3   r‰   zTruncToFloat.eval  s5   € ô �fœeŸl™lÔ+ô —;‘;œtŸz™z¬%°«-Ó8Ó9Ð9ð	 ,r<   NrÂ  rA   r<   r3   r!   r!     s   „ Ø€Gàñ:ó ñ:r<   r!   c                   ó    — e Zd ZdZed„ «       Zy)r"   Tc                 ó  — |t         j                  t        fv rt        S |t         j                   t         fv rt         S t        |t         j                  «      r1t        j
                  t        j                  t        |«      «      «      S y r,   )	r.   r|   r   r-   r€   rJ   rL   rÝ  r7   rÆ   s     r3   r‰   zTruncToInt.eval"  se   € ð ”e—h‘h¤Ð'Ñ'ÜˆMØ”u—x‘x�i¤& Ð)Ñ)Ü�7ˆNÜ�fœeŸl™lÔ+Ü—=‘=¤§¡¬E°&«MÓ!:Ó;Ð;ð ,r<   NrÈ   rA   r<   r3   r"   r"     rË   r<   r"   c                   ó    — e Zd ZdZed„ «       Zy)r#   Tc                 óì   — |t         j                  u rt        S |t         j                   u rt         S t        |t         j                  «      r(t        j
                  t        t        |«      d«      «      S y rg   )r.   r|   r   r-   r€   rJ   Úroundr7   rÆ   s     r3   r‰   zRoundToInt.eval1  sW   € ð ”U—X‘XÑÜˆMØ”e—h‘h�YÑÜ�7ˆNÜ�fœeŸl™lÔ+Ü—=‘=¤¤u¨V£}°aÓ!8Ó9Ð9ð ,r<   NrÈ   rA   r<   r3   r#   r#   .  s   „ Ø€Jàñ:ó ñ:r<   r#   c                   ó    — e Zd ZdZed„ «       Zy)r$   Tc                 óÐ   — t        |t        j                  «      rLt        |t        j                  «      r1t        j                  t        t        |«      t        |«      «      «      S y y r,   )r-   r.   r€   rJ   r/   râ  r7   rI   )r†   rÇ   Úndigitss      r3   r‰   zRoundDecimal.evalO  sF   € ô �fœeŸl™lÔ+´
¸7ÄEÇMÁMÔ0RÜ—;‘;œu¤U¨6£]´C¸³LÓAÓBÐBð 1SÐ+r<   NrÂ  rA   r<   r3   r$   r$   L  s   „ Ø€GàñCó ñCr<   r$   c                   ó    — e Zd ZdZed„ «       Zy)r%   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 y r,   )r.   r|   r-   rJ   r/   rI   r   rÆ   s     r3   r‰   zToFloat.evalZ  sk   € à”e—h‘h¤§¡ 	Ð*Ñ*ØˆMä�fœeŸm™mÔ,Ü—;‘;œs 6›{Ó+Ð+Ø”VÑÜ—8‘8ˆOØ”f�WÑÜ—H‘H�9Ðð r<   NrÂ  rA   r<   r3   r%   r%   W  s   „ Ø€Gàñ	ó ñ	r<   r%   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r(   z4
    Prevents expansion and other optimizations
    c                 ó(   — d| j                   d   › d�S )Nz	Identity(r   rr   rh   ri   s    r3   Ú__repr__zIdentity.__repr__l  s   € Ø˜4Ÿ9™9 Q™<˜.¨Ð*Ð*r<   c                 ó4   — | j                   d   j                  S rg   )r8   r}  ri   s    r3   r—  zIdentity._eval_is_realo  s   € Ø�y‰y˜‰|×#Ñ#Ð#r<   c                 ó4   — | j                   d   j                  S rg   r¦   ri   s    r3   r§   zIdentity._eval_is_integerr  s   € Ø�y‰y˜‰|×&Ñ&Ð&r<   N)rŠ   r‹   rŒ   r�   rê  r—  r§   rA   r<   r3   r(   r(   g  s   „ ñò+ò$ó'r<   r(   c                 óR   ‡ —  G ˆ fd„dt         j                  «      }d‰ z   |_        |S )Nc                   ó,   •— e Zd ZdZW ° Zeˆ fd„«       Zy)ú+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                 ó4  •— t        |t        j                  t        j                  f«      r3	 t        j                   t	        t
        ‰«      t        |«      «      «      S |t        j                  t        j                   t        j                  t        j                   t        t         fv rH|t        u rt        j                  }|t         u rt        j                   } t	        t        ‰«      |«      S y # t        $ r  t	        t        ‰«      |«      cY S w xY wr,   )r-   r.   rJ   r/   ÚgetattrrL   r7   ÚOverflowErrorr|   r¿  r   )r†   r2   Únames     €r3   r‰   z0make_opaque_unary_fn.<locals>.OpaqueUnaryFn.eval„  sÎ   ø€ ä˜!œeŸm™m¬U¯[©[Ð9Ô:ð3Ü Ÿ;™;Ð':¤w¬t°TÓ':¼5À»8Ó'DÓEÐEð
 ”u—x‘x¤%§(¡( ¬E¯I©I¼¿	¹	°zÄ6ÌFÈ7ÐSÑSØœ‘;ÜŸ™�AØœ˜‘<ÜŸ™˜	�AØ+”wœu dÓ+¨AÓ.Ð.Øøô %ò 3Ø/œ7¤5¨$Ó/°Ó2Ò2ð3ús   ­1C5 Ã5DÄDN)rŠ   r‹   rŒ   r�   Ú_torch_handler_namer�   r‰   )ró  s   €r3   ÚOpaqueUnaryFnrï  w  s"   ø„ ñ	ñ #Ðà	ó	ó 
ñ	r<   rõ  ÚOpaqueUnaryFn_)r.   ÚFunctionrŠ   )ró  rõ  s   ` r3   Úmake_opaque_unary_fnrø  v  s)   ø€ ö!œŸ™ô !ðF .°Ñ4€MÔàÐr<   ÚsqrtÚcosÚcoshÚsinÚsinhÚtanÚtanhÚasinÚacosÚatanr³  ÚlogÚasinh)Kr=   rL   rÔ  r·  r.   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.utilities.iterablesr   Únumbersr   Ú__all__r?   rD   ra   r÷  r   r   r   r   r   r   r   r   r   r   r   rÚ   rí   rì   rµ  r²  r'   r&   r   r   r    r!   r"   r#   r$   r%   r(   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_asinhrA   r<   r3   ú<module>r     sƒ  ðã Û Û Û 
ã Ý Ý Ý  Ý +ß 7Ñ 7Ý +ß 9Ý &Ý %Ý *å òD€ò4
òò%ôtaˆu�~‰~ô aôH?6�e—n‘nô ?6ôDˆE�N‰Nô ô:5:�—‘ô 5:ôr0ˆ%�.‰.ô 0ôfˆxô ô;�—‘ô ;ô<�—‘ô <ô;ˆe�n‰nô ;ô ˆU�^‰^ô ô ˆU�^‰^ô  ô\?��yô \?ô~;ˆ*�kô ;ô":ˆ*�kô :ò$'òô4!�5—>‘>ô !ô2:ˆu�~‰~ô :ô(=�5—>‘>ô =ô.9�—‘ô 9ô:4¨¯©ô 4ôp
:�5—>‘>ô 
:ô<�—‘ô <ô:�—‘ô :ô<C�5—>‘>ô Côˆe�n‰nô ô 'ˆu�~‰~ô 'ò&ñT *¨&Ó1Ð Ù(¨Ó/Ð Ù)¨&Ó1Ð Ù(¨Ó/Ð Ù)¨&Ó1Ð Ù(¨Ó/Ð Ù)¨&Ó1Ð Ù)¨&Ó1Ð Ù)¨&Ó1Ð Ù)¨&Ó1Ð Ù(¨Ó/Ð Ù(¨Ó/Ð Ù*¨7Ó3Ñ r<   