Ë
    ÌÓ^jÏÛ  ã                   ó¢  — 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mZm	Z	 d dl
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' ddl(m)Z)m*Z* erd dlm+Z+  e	de¬«      Z, ed«      Z-dZ.dej^                  de0fd„Z1dej^                  dej^                  dej^                  fd„Z2g d¢Z3dej$                  de0fd„Z4d eee-   ge,f   deee-   ge,ejj                  z  f   fd!„Z6d"e0dz  d#e0dz  de0dz  fd$„Z7d%ej^                  d&ej^                  dej^                  fd'„Z8 G d(„ d)ejr                  «      Z: G d*„ d+ejr                  «      Z; G d,„ d-ejr                  «      Z< G d.„ d/ejr                  «      Z= G d0„ d1ejr                  «      Z> G d2„ d3e:«      Z? G d4„ d5ejr                  «      Z@ G d6„ d7ejr                  «      ZA G d8„ d9ejr                  «      ZB G d:„ d;ejr                  «      ZC G d<„ d=ejr                  «      ZD G d>„ d?ee«      ZE G d@„ dAeEe«      ZF G dB„ dCeEe«      ZGdD„ ZHdE„ ZI G dF„ dGejr                  «      ZJ G dH„ dIejr                  «      ZK G dJ„ dKejr                  «      ZL G dL„ dMejr                  «      ZM G dN„ dOejr                  «      ZN G dP„ dQejr                  «      ZO G dR„ dSejr                  «      ZP G dT„ dUejr                  «      ZQ G dV„ dWejr                  «      ZR G dX„ dYejr                  «      ZS G dZ„ d[ejr                  «      ZTd\„ ZU eUd]«      ZV eUd^«      ZW eUd_«      ZX eUd`«      ZY eUda«      ZZ eUdb«      Z[ eUdc«      Z\ eUdd«      Z] eUde«      Z^ eUdf«      Z_ eUdg«      Z` eUdh«      Za eUdi«      Zb eUdj«      Zcdk„ Zd eddldm«      Ze eddndo«      Zf eddpdq«      Zgy)ré    N)ÚCallable)ÚSupportsFloatÚTYPE_CHECKINGÚTypeVar)ÚTypeVarTupleÚUnpack)ÚS©Úsympify)ÚExpr)ÚApplication)Ú_torfÚ	fuzzy_andÚfuzzy_or)Úequal_valued)Ú	LatticeOpÚShortCircuit)Úordered)Úwalk)Ú
PRECEDENCE)Úsift)ÚTorchVersioné   )Úint_ooÚis_infinite)ÚIterableÚ_T)ÚboundÚ_Tsé   ÚexprÚreturnc                 ór   — t        | t        j                  «      xr t        | j                  «      t
        kD  S ©N)Ú
isinstanceÚsympyÚAddÚlenÚargsÚ_MAX_ADD_TERMS_FOR_POLY_GCD©r!   s    úg/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/utils/_sympy/functions.pyÚ_is_wide_addr-   )   s&   € Ü�dœEŸI™IÓ&ÒW¬3¨t¯y©y«>Ô<WÑ+WÐWó    ÚaÚbc                 ór   — t        | «      st        |«      rt        | |«      S t        j                  | |«      S )zrLike sympy.gcd but avoids polynomial-GCD on wide Add expressions,
    falling back to simple_floordiv_gcd instead.)r-   Úsimple_floordiv_gcdr&   Úgcd©r/   r0   s     r,   Úsafe_gcdr5   -   s.   € ô �A„œ, qœ/Ü" 1 aÓ(Ð(Ü�9‰9�Q˜‹?Ðr.   )ÚFloorDivÚModularIndexingÚWhereÚ	PythonModÚModÚCleanDivÚ	CeilToIntÚ
FloorToIntÚCeilDivÚ
IntTrueDivÚFloatTrueDivÚLShiftÚRShiftÚ!IsNonOverlappingAndDenseIndicatorÚTruncToFloatÚ
TruncToIntÚ
RoundToIntÚRoundDecimalÚToFloatÚFloatPowÚPowByNaturalÚIdentityc                 ó2  — t        | t        j                  «      xr| | j                  xrn t	        | j
                  «      dk(  xrT | j
                  d   j                  xr9 | j
                  d   j                  xr | j
                  d   | j
                  d   uS )Né   r   r   )r%   r&   r   Úis_Addr(   Ú_argsÚ	is_symbolr+   s    r,   Ú_is_symbols_binary_summationrQ   n   s‡   € ô 	�4œŸ™Ó$ò 	/Ø�K‰Kò	/ä�—
‘
‹O˜qÑ ò	/ð �J‰J�q‰M×#Ñ#ò	/ð �J‰J�q‰M×#Ñ#ò		/ð
 �J‰J�q‰M §¡¨A¡Ð.ðr.   Úfc                 óŒ   ‡ — t        j                  ‰ «      dt        t           dt        t
        j                  z  fˆ fd„«       }|S )Nr)   r"   c                  ó¦   •—  ‰| Ž }t        d„ | D «       «      r8t        |t        j                  «      st        j                  t	        |«      «      }|S )Nc              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr$   )r%   r&   ÚFloat©Ú.0r/   s     r,   ú	<genexpr>z-_keep_float.<locals>.inner.<locals>.<genexpr>€   s   è ø€ Ò8¨aŒz˜!œUŸ[™[×)Ñ8ùó   ‚$&)Úanyr%   r&   rV   Úfloat)r)   ÚrrR   s     €r,   Úinnerz_keep_float.<locals>.inner}   sD   ø€ á ˜hˆÜÑ8°4Ô8Ô8ÄØŒu�{‰{ôB
ô —‘œE !›HÓ%ˆAØˆr.   )Ú	functoolsÚwrapsr   r   r   r&   rV   )rR   r^   s   ` r,   Ú_keep_floatra   z   sB   ø€ ô ‡_�_�QÓð”VœC‘[ð ¤R¬%¯+©+Ñ%5ô ó ðð €Lr.   ÚxÚyc                 ó   — d | |fv ry | |k(  S r$   © )rb   rc   s     r,   Úfuzzy_eqrf   Š   s   € Ø��1ˆv�~ØØ�‰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                  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.
    rb   r"   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      r,   Úinteger_coefficientz0simple_floordiv_gcd.<locals>.integer_coefficient¡   sc   € ô —y‘y×*Ñ*¨1Ó-ö+
àÜ˜#¤¤U§]¡]Ð3Ô4ô ”�C“�Mð+
Ðð +
ô
 �y‰yÐ-Ó.Ð.ùò+
s   ¢;A4r!   c                 óž   •— t        ‰t        j                  j                  | «      «      }t	        j
                  t        j                  |«      S r$   )Úmapr&   r'   rl   r_   Úreducerp   r3   )r!   Úinteger_factorsrt   s     €r,   Úinteger_factorz+simple_floordiv_gcd.<locals>.integer_factor©   s:   ø€ Ü),Ø¤§¡×!4Ñ!4°TÓ!:ó*
ˆô ×Ñ¤§¡¨/Ó:Ð:r.   c              3   ó&   •K  — | ]  }‰|v –— Œ
 y ­wr$   re   )rX   Ú
base_splitrb   s     €r,   rY   z&simple_floordiv_gcd.<locals>.<genexpr>·   s   øè ø€ Ò= :ˆq�JŒÑ=ùs   ƒ)r&   ÚBasicrm   rp   r3   Úlistrv   rk   rl   r'   Úall)rg   rh   ry   r3   Úbase_splitsÚdivisor_splitrt   rb   s         @@r,   r2   r2   �   sÎ   ù€ ð"/œuŸ{™{ð /¬só /ð;œUŸ[™[ð ;¬Sõ ;ô �x‰x™ qÓ)©>¸!Ó+<Ó=€CØˆs‰7�A˜‘G€q€Aä15ÜŒE�I‰I×Ñ¤§¡×!4Ñ!4°QÓ!7Ó8ó2€Kô .3¯Y©Y×-@Ñ-@ÀÓ-C€MØò ˆÜÓ=°Ô=Õ=Ø˜‘'‰Cðð €Jr.   c                   óD  — 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j                  dz  fd„«       Zd	e
dz  fd„Zy)r6   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
    ©rM   .Únargsé#   Ú
precedenceTÚ
is_integerr"   c                 ó    — | j                   d   S ©Nr   ©r)   ©Úselfs    r,   ÚbasezFloorDiv.baseÛ   ó   € à�y‰y˜‰|Ðr.   c                 ó    — | j                   d   S ©Nr   r‰   rŠ   s    r,   ÚdivisorzFloorDiv.divisorß   r�   r.   Úprinterc                 ó¬   — |j                  | j                  t        d   dz
  «      }|j                  | j                  t        d   dz
  «      }d|› d|› d�S )NÚAtomç      à?ú(z//ú))ÚparenthesizerŒ   r   r�   ©r‹   r‘   rŒ   r�   s       r,   Ú	_sympystrzFloorDiv._sympystrã   sW   € Ø×#Ñ# D§I¡I¬z¸&Ñ/AÀCÑ/GÓHˆØ×&Ñ& t§|¡|´ZÀÑ5GÈ#Ñ5MÓNˆØ�4�&˜˜7˜) 1Ð%Ð%r.   rŒ   r�   Nc                 ór  — |j                   rt        d«      ‚t        |«      rt        |«      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 ||k(  rt        j
                  j                  S t        |t        j                  «      rÈt        |t        j                  «      r®t        |«      st        |«      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        |t        j$                  «      �rd}g }t        j.                  j1                  |«      D ]¯  }||z  }d }t        |t        j                  «      rgt3        t        j4                  «      t3        d«      k  rB|j7                  t        j8                  «      }	t;        d„ |	D «       «      }
|j                  xr |
}n|j                  }|sŒš|j=                  |«       ||z  }Œ± t?        |«      dk7  r%t+        |t        j.                  |ddiŽz
  |«      |z   S 	 tA        ||«      }t        |d«      r&t        |t        j.                  «      rtC        ||«      }t        |d«      s8t+        t        jD                  ||z  «      t        jD                  ||z  «      «      S 	 y # t        jF                  $ r Y y w xY w)	Núdivision by zeror   éÿÿÿÿr   z1.15.0c              3   ó:   K  — | ]  }|j                   d k(  –— Œ y­w)r   N)rh   )rX   r]   s     r,   rY   z FloorDiv.eval.<locals>.<genexpr>&  s   è ø€ Ò,I¸!¨Q¯S©S°A­XÑ,Iùs   ‚ÚevaluateF)$Úis_zeroÚZeroDivisionErrorr   r&   Únanr	   ÚZeror†   r   rk   ÚOner%   ÚNumberr\   rp   Úinfr   Úisnanrn   Úfloorrm   r6   r)   r'   rl   r   Ú__version__ÚatomsÚRationalr~   Úappendr(   r2   r5   ÚsimplifyÚPolynomialError)ÚclsrŒ   r�   r]   Ú	quotientsÚtermsÚtermÚquotientÚquotient_is_integerÚ	rationalsÚall_rationals_intsr3   s               r,   ÚevalzFloorDiv.evalê   s=  € ð �?Š?Ü#Ð$6Ó7Ð7Ü�tÔ¤¨WÔ!5Ü—9‘9ÐØ”5—9‘9Ñ ¬5¯9©9Ñ 4Ü—9‘9Ðà�<Š<Ü—7‘7—<‘<ÐØ�?Š?œ|¨G°QÔ7ØˆKØ�?Š?œ|¨G°RÔ8Ü—9‘9˜T 2Ó&Ð&Ø�7Š?Ü—7‘7—;‘;Ðô �tœUŸ\™\Ô*Ü˜7¤E§L¡LÔ1Ü˜TÔ"¤k°'Ô&:ä�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ô �gœuŸ}™}Õ-ØˆIØˆEÜŸ	™	×+Ñ+¨DÓ1ò *�Ø '™>�ð
 '+Ð#Ü˜h¬¯	©	Ô2´|Ü×%Ñ%ó8ä  Ó*ò8+ð !)§¡¬u¯~©~Ó >�IÜ),Ñ,I¸yÔ,IÓ)IÐ&Ø*2×*=Ñ*=Ò*TÐBTÑ'à*2×*=Ñ*=Ð'â&Ø—L‘L Ô&Ø Ñ)‘Ið%*ô( �5‹z˜QŠô ˜T¤E§I¡I¨uÐ$E¸uÑ$EÑEÀwÓOØñ ðð
		Ü% d¨GÓ4ˆCÜ˜C Ô#¬
°7¼E¿I¹IÔ(FÜ˜t WÓ-�Ü  QÔ'ÜÜ—N‘N 4¨#¡:Ó.´·±¸wÈ¹}Ó0Móð ð (ð øô ×$Ñ$ò 	Øàð	ús   ÎBP  Ð P6Ð5P6c                 ó˜   — | j                   d d \  }}t        |j                  |j                  |j                  |j                  g«      ryy )NrM   T)r)   r~   r†   Úis_nonnegative©r‹   rg   rh   s      r,   Ú_eval_is_nonnegativezFloorDiv._eval_is_nonnegativeC  s@   € Ø�y‰y˜˜!ˆ}‰ˆˆ1Ü�—‘˜aŸl™l¨A×,<Ñ,<¸a×>NÑ>NÐOÔPØØr.   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rƒ   Útuplerm   Ú__annotations__r…   r†   ÚboolÚpropertyr&   r|   rŒ   r�   ÚprintingÚ
StrPrinterÚstrr™   Úclassmethodrn   r¶   rº   re   r.   r,   r6   r6   Î   sÙ   … ñð "€Eˆ5��c�‰?Ó!Ø€J�ÓØ€J�Óàð�e—k‘kò ó ðð ð˜Ÿ™ò ó ðð& §¡×!:Ñ!:ð &¸só &ð ðV˜Ÿ™ð V°·±ð VÀ%Ç+Á+ÐPTÑBTò Vó ðVðp d¨T¡kô r.   r6   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j                  dz  fd„«       Zde	dz  fd„Zy)r7   zK
    ModularIndexing(a, b, c) => (a // b) % c where % is the C modulus
    ©é   .rƒ   Tr†   r„   r…   rŒ   r�   Úmodulusr"   Nc                 ó`  — |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k7  rJt        ||«      }|dk7  r9t        t        j                  ||z  «      t        j                  ||z  «      |«      S t        |t         j                  «      röt        |«      sëg }d}|j                  D ]Ÿ  }t        |||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 �Œaw xY w)Nr   r   TF)r&   r	   r¢   r%   rn   r5   r7   r¬   r­   r'   r-   r)   rk   r«   r(   Úsumr6   )r®   rŒ   r�   rÊ   r3   Ú	new_termsÚall_positiver±   s           r,   r¶   zModularIndexing.evalS  sÊ  € ð �1Š9˜ 1šÜ—7‘7—<‘<Ðä�tœUŸ]™]Ô+Ü˜7¤E§M¡MÔ2Ü˜7¤E§M¡MÔ2à˜G‘O wÑ.Ð.ð
	Ø˜!Š|Ü˜t WÓ-�Ø˜!’8Ü*ÜŸ™ t¨c¡zÓ2ÜŸ™ w°¡}Ó5Øóð ô �dœEŸI™IÔ&¬|¸DÔ/AØ-/ˆIØ!%ˆLØŸ	™	ò /�Ü˜D '¨GÑ"3Ó4¸À'Ñ8IÓIÜ" 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àøô? ×$Ñ$ò 	Úð	ús   Á<AH ÈH-È,H-c                 óf   — | j                   d d \  }}t        |j                  |j                  «      S )NrM   )r)   rf   r¸   r¹   s      r,   rº   z$ModularIndexing._eval_is_nonnegativeŠ  s.   € Ø�y‰y˜˜!ˆ}‰ˆˆ1Ü˜×(Ñ(¨!×*:Ñ*:Ó;Ð;r.   )r»   r¼   r½   r¾   rƒ   r¿   rm   rÀ   r†   rÁ   r…   rÆ   r&   rn   r|   r¶   rº   re   r.   r,   r7   r7   J  s‡   … ñð "€Eˆ5��c�‰?Ó!Ø€J�ÓØ€J�Óàð4Ø—=‘=ð4Ø+0¯=©=ð4ØCHÇ=Á=ð4à	�‰�tÑ	ò4ó ð4ðl< d¨T¡kô <r.   r7   c            
       óæ   — e Zd ZU dZdZeedf   ed<   dZeed<   de	dz  fd	„Z
de	dz  fd
„Zde	dz  fd„Zedej                  dej                  dej                  dej                  dz  fd„«       Zy)r8   z#
    Good ol' ternary operator
    rÈ   .rƒ   r„   r…   r"   Nc                 ón   — | j                   d   j                  r| j                   d   j                  rdS d S ©Nr   rM   T©r)   r†   rŠ   s    r,   Ú_eval_is_integerzWhere._eval_is_integer—  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Ò   )r)   r¸   rŠ   s    r,   rº   zWhere._eval_is_nonnegativeš  s9   € ð �y‰y˜‰|×*Ò*¨t¯y©y¸©|×/JÒ/Jð ð	
ð ð	
r.   c                 ón   — | j                   d   j                  r| j                   d   j                  rdS d S rÒ   ©r)   Úis_positiverŠ   s    r,   Ú_eval_is_positivezWhere._eval_is_positive¡  s.   € Ø—y‘y ‘|×/Ò/°D·I±I¸a±L×4LÒ4LˆtÐVÐRVÐVr.   Úcrg   rh   c                 óX   — |t         j                  k(  r|S |t         j                  k(  r|S y r$   )r&   ÚtrueÚfalse)r®   rÚ   rg   rh   s       r,   r¶   z
Where.eval¤  s&   € à”—
‘
Š?ØˆHØ”%—+‘+ÒØˆHØr.   )r»   r¼   r½   r¾   rƒ   r¿   rm   rÀ   r…   rÁ   rÔ   rº   rÙ   rÆ   r&   r|   r¶   re   r.   r,   r8   r8   �  sŸ   … ñð "€Eˆ5��c�‰?Ó!Ø€J�ÓðU $¨¡+ó Uð
 d¨T¡kó 
ðW 4¨$¡;ó Wð ð�U—[‘[ð  U§[¡[ð °U·[±[ð ÀUÇ[Á[ÐSWÑEWò ó ñr.   r8   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j                  dz  fd„«       Zd
e	dz  fd„Zd
e	dz  fd„Zd
efd„Zy)r9   r‚   .rƒ   r„   r…   Tr†   rg   rh   r"   Nc                 ó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   rM   r   )rŸ   r    r	   r¢   Ú	is_NumberÚis_evenÚis_oddr£   r†   Ú
is_BooleanrÁ   rØ   r&   r:   ©r®   rg   rh   r]   Úlesss        r,   r¶   zPythonMod.eval´  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×   rŠ   s    r,   rº   zPythonMod._eval_is_nonnegativeã  ó   € Ø—y‘y ‘|×/Ò/ˆtÐ9°TÐ9r.   c                 ó<   — | j                   d   j                  rdS d S rè   )r)   Úis_negativerŠ   s    r,   Ú_eval_is_nonpositivezPythonMod._eval_is_nonpositiveæ  ré   r.   c                 ó(  — |j                  | j                  d   t        d   dz
  «      }|j                  | j                  d   t        d   dz
  «      }| j                  d   j                  rt	        |«      nd|› d�}d|› d|› d	|› d|› d
|› d|› d|› �S )Nr   r“   r”   r   zabs(r–   r•   z % z) < 0 ? z + z : )r—   r)   r   rØ   rÅ   )r‹   r‘   rg   rh   Úabs_qs        r,   Ú_ccodezPythonMod._ccodeé  sž   € Ø× Ñ  §¡¨1¡¬z¸&Ñ/AÀCÑ/GÓHˆØ× Ñ  §¡¨1¡¬z¸&Ñ/AÀCÑ/GÓHˆØŸ)™) A™,×2Ò2”�A”¸$¸q¸cÀ¸ˆØ�1�#�S˜˜˜8 A 3 c¨!¨¨C°¨w°c¸!¸¸CÀ¸sÐCÐCr.   )r»   r¼   r½   rƒ   r¿   rm   rÀ   r…   r†   rÁ   rÆ   r&   r   r¶   rº   rì   rÅ   rï   re   r.   r,   r9   r9   ®  s�   … Ø!€Eˆ5��c�‰?Ó!à€J�ÓØ€J�Óàð+�U—Z‘Zð + E§J¡Jð +°5·:±:ÀÑ3Dò +ó ð+ð\: d¨T¡kó :ð: d¨T¡kó :ðD ô Dr.   r9   c                   ó8   — e Zd ZU dZdZeed<   dZdZe	d„ «       Z
y)r:   r‚   r„   r…   Tc                 ó4  — |j                   rt        d«      ‚|t        j                  u s||| fv s|dk(  rt        j                  S |j                  r1|j                  r%|dk  rt        |«      ‚|dk  rt        |«      ‚||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   rM   )rŸ   r    r	   r¢   rá   ÚAssertionErrorrâ   rã   r£   r†   rä   rÁ   rØ   rå   s        r,   r¶   zMod.evalø  sñ   € ð �9Š9Ü#Ð$4Ó5Ð5ð ”—‘‰;˜!  A 2˜w™,¨!¨qª&Ü—6‘6ˆMð �;Š;˜1Ÿ;š;Ø�1ŠuÜ$ QÓ'Ð'Ø�1ŠuÜ$ QÓ'Ð'Ø�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…   rm   rÀ   r†   r¸   rÆ   r¶   re   r.   r,   r:   r:   ñ  s-   … Ø€EØ€J�Óà€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¾   re   r.   r,   r;   r;   '  s   „ òr.   r;   c                   ó,   — e Zd ZdZed„ «       Zdef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&   Úoor   r%   r¤   rn   rp   Úceilr\   ©r®   Únumbers     r,   r¶   zCeilToInt.eval3  se   € ð ”e—h‘h¤Ð'Ñ'ÜˆMØ”u—x‘x�i¤& Ð)Ñ)Ü�7ˆNÜ�fœeŸl™lÔ+Ü—=‘=¤§¡¬5°«=Ó!9Ó:Ð:ð ,r.   r"   c                 óJ   — |j                  | j                  d   «      }d|› d�S )Nr   z(int64_t)(ceil(ú))©Ú_printr)   ©r‹   r‘   rù   s      r,   rï   zCeilToInt._ccode=  s'   € Ø—‘ §	¡	¨!¡Ó-ˆØ   ¨Ð+Ð+r.   N©r»   r¼   r½   r†   rÆ   r¶   rÅ   rï   re   r.   r,   r<   r<   0  s%   „ Ø€Jàñ;ó ð;ð, ô ,r.   r<   c                   ó,   — e Zd ZdZed„ «       Zdefd„Zy)r=   Tc                 óP  — |t         j                  t        fv rt        S |t         j                   t         fv rt         S t        |t         j                  «      r|S t        |t         j
                  «      r1t        j                  t        j                  t        |«      «      «      S y r$   )	r&   rö   r   r%   rn   r¤   rp   r§   r\   rø   s     r,   r¶   zFloorToInt.evalE  sv   € à”e—h‘h¤Ð'Ñ'ÜˆMØ”u—x‘x�i¤& Ð)Ñ)Ü�7ˆNÜ�fœeŸm™mÔ,ØˆMÜ�fœeŸl™lÔ+Ü—=‘=¤§¡¬E°&«MÓ!:Ó;Ð;ð ,r.   r"   c                 óJ   — |j                  | j                  d   «      }d|› d�S )Nr   z(int64_t)(floor(rû   rü   rþ   s      r,   rï   zFloorToInt._ccodeP  ó'   € Ø—‘ §	¡	¨!¡Ó-ˆØ! & ¨Ð,Ð,r.   Nrÿ   re   r.   r,   r=   r=   B  s%   „ Ø€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 r�   )r&   r   r3   r;   r6   ©r®   rŒ   r�   s      r,   Ú__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  re   r.   r,   r>   r>   U  s   „ ñð €Jó;r.   r>   c                   ó    — e Zd ZdZed„ «       Zy)rA   Tc                 ót   — |j                   rt        d«      ‚|t        t        j                  d«      |«      z  S ©Nznegative shift countrM   )rë   Ú
ValueErrorrJ   r&   rn   ©r®   rŒ   Úshifts      r,   r¶   zLShift.evalh  s2   € à×ÒÜÐ3Ó4Ð4Ø”l¤5§=¡=°Ó#3°UÓ;Ñ;Ð;r.   N©r»   r¼   r½   r†   rÆ   r¶   re   r.   r,   rA   rA   e  s   „ Ø€Jàñ<ó ñ<r.   rA   c                   ó    — e Zd ZdZed„ «       Zy)rB   Tc                 ó‚   — |j                   rt        d«      ‚t        |t        t	        j
                  d«      |«      «      S r
  )rë   r  r6   rJ   r&   rn   r  s      r,   r¶   zRShift.evalr  s4   € à×ÒÜÐ3Ó4Ð4Ü˜œl¬5¯=©=¸Ó+;¸UÓCÓDÐDr.   Nr  re   r.   r,   rB   rB   o  s   „ Ø€JàñEó ñEr.   rB   c                   óú  — e Zd Zd„ Zed„ «       Zedeej                  j                  j                     dz  fd„«       Ze	 d%deej                  j                  j                     dz  deej                  j                  j                     dz  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)y)&Ú
MinMaxBasec                 ó&  — ddl m} |j                  d|j                  «      }d„ |D «       }|sd n| j	                  |«      }|rC	 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_parametersrž   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr$   r
   )rX   rr   s     r,   rY   z%MinMaxBase.__new__.<locals>.<genexpr>~  s   è ø€ Ò6 ”˜—Ñ6ùs   ‚r   )Úsympy.core.parametersr  Úpoprž   Ú"_satisfy_unique_summations_symbolsÚ	frozensetÚ_new_args_filterr   ÚzeroÚ_collapse_argumentsÚ_find_localzerosÚidentityr(   r}   r   r  r   Ú_argsetÚunique_summations_symbols)r®   Úoriginal_argsÚassumptionsr  rž   r)   r   Úobjs           r,   r  zMinMaxBase.__new__z  s  € Ý;à—?‘? :Ð/@×/IÑ/IÓJˆÙ6¨Ô6ˆñ
 ñ à×7Ñ7¸ÓFð 	"ñ ð ô ! ×!5Ñ!5°dÓ!;Ó<�ð )Ð0à.�s×.Ñ.¨tÑC°{ÑC�ð ,�s×+Ñ+¨DÑ@°KÑ@�ä˜‹ˆáØ—<‘<Ðäˆt‹9˜Š>Ü˜“:—>‘>Ó#Ð#ô �l‰l˜3Ð>¤¨£Ò>°+Ñ>ˆØˆŒà(AˆÔ%Øˆ
øô3  ò  Ø—x‘x’ð ús   ÁC8 Ã8DÄDc                 ó`  — t        |«      dk7  ry |\  }}|j                  «       \  }}|j                  «       \  }}||k7  ry |j                  r|j                  sy ||k(  r|S |j                  r||k  }n|j                  r||kD  }ny | t
        u r|r|S |S | t        u r|r|S |S t        d| › �«      ‚)NrM   úimpossible )r(   Úas_coeff_MulÚis_comparabler¸   Úis_nonpositiveÚMinÚMaxrò   )	r®   Úvaluesr/   r0   Úa_coeffÚa_termÚb_coeffÚb_termÚa_is_smallers	            r,   Ú$_collapse_known_multiplicative_termsz/MinMaxBase._collapse_known_multiplicative_terms§  sÉ   € äˆv‹;˜!ÒØà‰ˆˆ1ØŸ.™.Ó*‰ˆ�ØŸ.™.Ó*‰ˆ�Ø�VÒØà×%Ò%¨'×*?Ò*?Øà�gÒØˆHà× Ò Ø" WÑ,‰LØ×"Ò"Ø" WÑ,‰Làà”#‰:Ù$�1Ð+¨!Ð+Ø”#‰:Ù$�1Ð+¨!Ð+ä˜{¨3¨%Ð0Ó1Ð1r.   r"   Nc                 ó*  — t        |«      dk7  ryt        |d   t        «      r
|d   |d   fn	|d   |d   f\  }}t        |«      syt        |«      r| j	                  |«      S t        |t        «      r"t        |dd«      }|�| j	                  |g|«      S y)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.
        rM   Nr   r   r   )r(   r%   r  rQ   Ú_unique_symbolsÚgetattr)r®   r)   ÚlhsÚrhsÚlhs_unique_summations_symbolss        r,   r  z-MinMaxBase._satisfy_unique_summations_symbolsÆ  sµ   € ô< ˆt‹9˜Š>Øô ˜$˜q™'¤:Ô.ð �!‰W�d˜1‘gÑà�q‘'˜4 ™7Ð#ñ 	ˆˆcô ,¨CÔ0Øô (¨Ô,Ø×&Ñ& tÓ,Ð,ô �cœ:Ô&Ü,3ØÐ0°$ó-Ð)ð -Ð8Ø×*Ñ*¨C¨5Ð2OÓPÐPàr.   Úinitial_setc                 ó  — |€
t        «       n|j                  «       }|D ]`  }|j                  «       D ]K  }t        |t        j
                  j                  j                  «      s  y||v r  y|j                  |«       ŒM Œb |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Úcopyr©   r%   r&   ÚcoreÚsymbolÚSymbolÚadd)r®   r)   r8  Úseen_symbolsrr   Úelements         r,   r3  zMinMaxBase._unique_symbolsþ  s}   € ð !,Ð 3”s”u¸×9IÑ9IÓ9KˆØò 	.ˆCØŸ9™9›;ò .�Ü! '¬5¯:©:×+<Ñ+<×+CÑ+CÔDÚØ Ñ,Úà ×$Ñ$ WÕ-ñ.ð	.ð Ðr.   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%   r)  r*  r)   Úfunc)Úair/   ÚcondÚir®   Údos       €€r,   rH  z*MinMaxBase._collapse_arguments.<locals>.doh  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%   )rr   Úothers    €r,   ú<lambda>zGMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<lambda>}  s   ø€ ¤:¨c°5Ó#9€ r.   T)Úbinaryrž   F)r   r:  r)   Úintersectionr}   r~   r«   )r)   Úis_otherÚ
other_argsÚremaining_argsrr   Úarg_setsÚcommonÚnew_other_argsÚarg_setÚarg_sets_diffÚsÚother_args_diffÚother_args_factoredr®   rK  s                €€r,   Ú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   r)   r'  r%   r«   r  Úranger(   Ú	enumerate)r®   r)   r"  ÚsiftedÚminsÚmaxsrG  ÚvÚsmallÚbigrr   ÚTr/   Úa0rE  rZ  rH  rK  s   `               @@r,   r  zMinMaxBase._collapse_arguments  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  rD  r)   )r®   Úarg_sequencerr   s      r,   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                 ó  — t        «       }d}|D ]\  }|j                  r=|€|}Œ| t        u rt        ||«      }Œ)| t        u rt        ||«      }Œ>t        d| › �«      ‚|j                  |«       Œ^ |€| j                  |«      }|�|hS |S t        |«      dk(  r|hS t        |«      dk(  rOt        t        |«      «      }|dv r|j                  r| t        u r|S |hS |dk(  r|j                  r| t        u r|S |hS |j                  |«       |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
        Nr%  r   r   )g        r   )r:  rá   r*  Úmaxr)  Úminrò   r?  r1  r(   ÚnextÚiterr¸   rØ   )r®   r+  ÚoptionsÚother_valuesÚ	num_valuerr   Úcollapsed_valueÚother_values           r,   r  zMinMaxBase._find_localzeros´  s.  € ô “uˆØˆ	Øò 	&ˆCØ�}Š}ØÐ$Ø #‘Iàœc‘zÜ$'¨	°3Ó$7™	Ø¤™Ü$'¨	°3Ó$7™	ä,¨{¸3¸%Ð-@ÓAÐAà× Ñ  Õ%ð	&ð ÐØ!×FÑFÀ|ÓTˆOØÐ*Ø'Ð(Ð(ØÐäˆ|Ó Ò!Ø�;Ðäˆ|Ó Ò!Üœt LÓ1Ó2ˆKØ˜HÑ$¨×)CÒ)CØ'*¬c¡z�|ÐB¸	°{ÐBØ˜AŠ~ +×"9Ò"9Ø'*¬c¡z�|ÐB¸	°{ÐBà×Ñ˜Ô#ØÐr.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Úis_algebraic©rX   rG  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>æ  ó   è ø€ Ò(H¸A¨¯­Ñ(Hùó   ‚©r   r)   ©rW  s    r,   rL  zMinMaxBase.<lambda>æ  ó   € ¤5Ñ(HÀÇÁÔ(HÓ#H€ r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Úis_antihermitianrv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>ç  ó   è ø€ ò -Ø ˆ×Õñ-ùrx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>ç  ó   € ¤uñ -Ø$%§F¡Fô-ó (€ r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Úis_commutativerv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>ê  ó   è ø€ ò +Øˆ×Õñ+ùrx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>ê  ó   € ¤Uñ +Ø"#§&¡&ô+ó &€ r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Ú
is_complexrv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>í  ó   è ø€ Ò&D¸ q§|¥|Ñ&Dùrx  ry  rz  s    r,   rL  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_compositerv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>î  rw  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>î  r{  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )râ   rv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>ï  ó   è ø€ Ò#>°! A§I¥IÑ#>ùrx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>ï  ó   € œeÑ#>°q·v±vÔ#>Ó>€ r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Ú	is_finiterv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>ð  s   è ø€ Ò%B°a a§k¥kÑ%Bùrx  ry  rz  s    r,   rL  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_hermitianrv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>ñ  rw  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>ñ  r{  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Úis_imaginaryrv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>ò  rw  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>ò  r{  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )r   rv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>ó  ó   è ø€ Ò'F¸!¨¯­Ñ'Fùrx  ry  rz  s    r,   rL  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†   rv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>ô  r‰  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>ô  rŠ  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Úis_irrationalrv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>õ  ó   è ø€ Ò)J¸a¨!¯/­/Ñ)Jùrx  ry  rz  s    r,   rL  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ë   rv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>ö  r�  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>ö  rž  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Úis_nonintegerrv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>÷  r¤  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>÷  r¥  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   ©r¸   rv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>ø  r„  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>ø  r…  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )r(  rv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>û  r„  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>û  r…  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Ú
is_nonzerorv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>þ  r‰  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>þ  rŠ  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )rã   rv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>ÿ  s   è ø€ Ò"<° 1§8¥8Ñ"<ùrx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>ÿ  s   € œUÑ"<°Q·V±VÔ"<Ó<€ r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Úis_polarrv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>   ó   è ø€ Ò$@°A Q§Z¥ZÑ$@ùrx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>   ó   € œuÑ$@¸¿¹Ô$@Ó@€ r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   ©rØ   rv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r�  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>  rž  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Úis_primerv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r¹  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>  rº  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Úis_rationalrv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r�  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>  rž  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Úis_realrv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r�  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>  r‘  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )rg  rv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>  r€  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )Úis_transcendentalrv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>  s   è ø€ ò .Ø !ˆ×Õñ.ùrx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>  s   € ¬ñ .Ø%&§V¡Vô.ó )€ r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   )rŸ   rv  s     r,   rY   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r�  rx  ry  rz  s    r,   rL  zMinMaxBase.<lambda>  r‘  r.   r$   )*r»   r¼   r½   r  rÆ   r1  r:  r&   r<  r=  r>  r  r3  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_zerore   r.   r,   r  r  y  sš  „ ò+ðZ ñ2ó ð2ð< ð5à	ˆU�Z‰Z×Ñ×%Ñ%Ñ	&¨Ñ	-ò5ó ð5ðn àGKñØ # E§J¡J×$5Ñ$5×$<Ñ$<Ñ =ÀÑ Dðà	ˆU�Z‰Z×Ñ×%Ñ%Ñ	&¨Ñ	-òó ðð$ ñEó ðEðN ñó ðð4 ñ/ó ð/ñb 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$   r½  rW   s     r,   rY   z(Max._eval_is_positive.<locals>.<genexpr>  ó   è ø€ Ò9¨!˜Ÿ�Ñ9ùrx  ©r   r)   rŠ   s    r,   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$   r®  rW   s     r,   rY   z+Max._eval_is_nonnegative.<locals>.<genexpr>  s   è ø€ Ò<¨Q˜×(Õ(Ñ<ùrx  rè  rŠ   s    r,   rº   zMax._eval_is_nonnegative  s   € ÜÑ<°$·)±)Ô<Ó<Ð<r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   r¨  rW   s     r,   rY   z(Max._eval_is_negative.<locals>.<genexpr>  ó   è ø€ Ò:¨1˜Ÿ�Ñ:ùrx  ©r   r)   rŠ   s    r,   rÙ  zMax._eval_is_negative  ó   € ÜÑ:°·	±	Ô:Ó:Ð:r.   N)r»   r¼   r½   r¾   r	   ÚInfinityr  ÚNegativeInfinityr  rÙ   rº   rÙ  re   r.   r,   r*  r*    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$   r½  rW   s     r,   rY   z(Min._eval_is_positive.<locals>.<genexpr>)  rî  rx  rï  rŠ   s    r,   rÙ   zMin._eval_is_positive(  rð  r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   r®  rW   s     r,   rY   z+Min._eval_is_nonnegative.<locals>.<genexpr>,  s   è ø€ Ò=¨a˜×)Õ)Ñ=ùrx  rï  rŠ   s    r,   rº   zMin._eval_is_nonnegative+  s   € ÜÑ=°4·9±9Ô=Ó=Ð=r.   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr$   r¨  rW   s     r,   rY   z(Min._eval_is_negative.<locals>.<genexpr>/  rç  rx  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Ù  re   r.   r,   r)  r)     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   rM   rœ   )Ú	_safe_pow)rŒ   ÚexpÚsigns      r,   Úsafe_powrþ  2  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   rM   )r  rþ  r   ÚsysÚmaxsize)rŒ   ÚexponentÚhalf_expÚresults       r,   rû  rû  ;  s„   € Ø�!‚|ÜÐ9Ó:Ð:à�1‚}Øä˜˜h¨!™mÓ,€HØ”6ÑÜˆð
 ˜Ñ €FØ”—‘ÒÜˆà�!�|�qÒØ�$‰ˆØ”C—K‘KÒÜˆMà€Mr.   c                   ó0   — e Zd ZU dZdZeed<   ed„ «       Zy)rJ   Té2   r…   c                 ó¾  — 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&   rn   rþ  r   ÚPowrö   r¸   rë   Úzoo)r®   rŒ   rü  r]   s       r,   r¶   zPowByNatural.evalZ  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.   N)	r»   r¼   r½   r†   r…   rm   rÀ   rÆ   r¶   re   r.   r,   rJ   rJ   U  s#   … Ø€Jà€J�Óàñ!ó ñ!r.   rJ   c                   ó0   — e Zd ZU dZdZeed<   ed„ «       Zy)rI   Té<   r…   c                 óÂ   — t        |t        j                  «      rEt        |t        j                  «      r*t        j                  t	        |«      t	        |«      z  «      S y y r$   )r%   r&   r¤   rV   r\   )r®   rŒ   rü  s      r,   r¶   zFloatPow.evalu  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…   rm   rÀ   rÆ   r¶   re   r.   r,   rI   rI   p  s#   … Ø€Gà€J�Óàñ:ó ñ:r.   rI   c                   ó0   — e Zd ZU dZdZeed<   ed„ «       Zy)r@   Tr„   r…   c                 óð   — |j                   rt        d«      ‚t        |t        j                  «      rEt        |t        j                  «      r*t        j
                  t        |«      t        |«      z  «      S y y ©Nr›   )rŸ   r    r%   r&   r¤   rV   r\   r  s      r,   r¶   zFloatTrueDiv.eval‹  sW   € ð
 �?Š?Ü#Ð$6Ó7Ð7ä�dœEŸL™LÔ)¬j¸Ä%Ç,Á,Ô.OÜ—;‘;œu T›{¬U°7«^Ñ;Ó<Ð<ð /PÐ)r.   Nr  re   r.   r,   r@   r@   †  s#   … Ø€Gà€J�Óàñ=ó ñ=r.   r@   c                   ó<   — e Zd ZU dZdZeed<   ed„ «       Zde	fd„Z
y)r?   Tr„   r…   c                 óØ  — |j                   rt        d«      ‚t        |t        j                  «      rZt        |t        j                  «      r@t        |«      st        |«      r*t        j                  t        |«      t        |«      z  «      S t        |t        j                  «      rEt        |t        j                  «      r*t        j                  t        |«      t        |«      z  «      S y y r  )
rŸ   r    r%   r&   r¤   r   rV   r\   rn   rm   r  s      r,   r¶   zIntTrueDiv.eval¤  s    € à�?Š?Ü#Ð$6Ó7Ð7ô �tœUŸ\™\Ô*Ü˜7¤E§L¡LÔ1Ü˜TÔ"¤k°'Ô&:ô —;‘;œu T›{¬U°7«^Ñ;Ó<Ð<Ü�dœEŸM™MÔ*¬z¸'Ä5Ç=Á=Ô/QÜ—;‘;œs 4›y¬3¨w«<Ñ7Ó8Ð8ð 0RÐ*r.   r"   c                 ó¸   — |j                  | j                  d   t        d   dz
  «      }|j                  | j                  d   t        d   dz
  «      }d|› d|› d�S )Nr   r“   r”   r   z((int)z/(int)r–   )r—   r)   r   r˜   s       r,   rï   zIntTrueDiv._ccode´  s_   € Ø×#Ñ# D§I¡I¨a¡L´*¸VÑ2DÀsÑ2JÓKˆØ×&Ñ& t§y¡y°¡|´ZÀÑ5GÈ#Ñ5MÓNˆØ˜�v˜V G 9¨AÐ.Ð.r.   N)r»   r¼   r½   rÆ  r…   rm   rÀ   rÆ   r¶   rÅ   rï   re   r.   r,   r?   r?   Ÿ  s/   … Ø€Gà€J�Óàñ9ó ð9ð/ ô /r.   r?   c                   ó    — e Zd ZdZed„ «       Zy)rC   Tc           	      ó  — t        |«      dz  dk7  rt        dt        |«      › �«      ‚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k(  rt        d«      ‚t        t        t        ||d	¬
«      t        j                  d«      ¬«      dd	iŽ\  }}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 )NrM   r   z*expected an even number of arguments, got )Ú!eval_is_non_overlapping_and_densec              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr$   ©r%   r&   rn   rW   s     r,   rY   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>Ò  s   è ø€ Ò:°Œz˜!œUŸ]™]×+Ñ:ùrZ   r   c              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr$   r  rW   s     r,   rY   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>ç  s   è ø€ Ò=°Œz˜!œUŸ]™]×+Ñ=ùrZ   zdim must not be zeroT)Ústrict)Úkeyr  c              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr$   r  rW   s     r,   rY   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>ñ  s   è ø€ ÒF°A”:˜a¤§¡×/ÑFùrZ   rœ   )é*   )r(   rò   Ú%torch.fx.experimental.symbolic_shapesr  r~   rm   rá   ÚzipÚsortedÚoperatorÚ
itemgetter)	r®   r)   ÚdimÚsizesÚstridesr  r/   Ús_sizesÚ	s_stridess	            r,   r¶   z&IsNonOverlappingAndDenseIndicator.evalÃ  sž  € äˆt‹9�q‰=˜AÒÜ Ø<¼SÀ»Y¸KÐHóð ô �$‹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Ô=Ô=Ø�aŠxÜ$Ð%;Ó<Ð<ô "%Üœ˜E 7°4Ô8¼h×>QÑ>QÐRSÓ>TÔUð"àñ"ÑˆG�Yô
 ÑF¸ÀÀ"¸ÔFÔFØ! # 2˜,¨Ñ.�ñ 9Ø%,Ö- ”S˜•VÒ-À	Ö/J¸1´°AµÒ/Jóð ð ùòK (ùÒ)BùòD .ùÒ/Js   ÁE4Á7E9
ÅE>ÅF
Nr  re   r.   r,   rC   rC   À  s   „ Ø€Jàñ5ó ñ5r.   rC   c                   ó    — e Zd ZdZed„ «       Zy)rD   Tc                 óä   — |t         j                  t         j                   fv r|S t        |t         j                  «      r1t        j                  t        j                  t        |«      «      «      S y r$   )r&   rö   r%   r¤   rV   rp   Útruncr\   rø   s     r,   r¶   zTruncToFloat.eval   sO   € à”e—h‘h¤§¡ 	Ð*Ñ*ØˆMä�fœeŸl™lÔ+ô —;‘;œtŸz™z¬%°«-Ó8Ó9Ð9ð	 ,r.   N©r»   r¼   r½   rÆ  rÆ   r¶   re   r.   r,   rD   rD   ý  s   „ Ø€Gàñ:ó ñ:r.   rD   c                   ó,   — e Zd ZdZed„ «       Zdefd„Zy)rE   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¤   rn   rp   r*  r\   rø   s     r,   r¶   zTruncToInt.eval  se   € ð ”e—h‘h¤Ð'Ñ'ÜˆMØ”u—x‘x�i¤& Ð)Ñ)Ü�7ˆNÜ�fœeŸl™lÔ+Ü—=‘=¤§¡¬E°&«MÓ!:Ó;Ð;ð ,r.   r"   c                 óJ   — |j                  | j                  d   «      }d|› d�S )Nr   z(int64_t)(trunc(rû   rü   rþ   s      r,   rï   zTruncToInt._ccode  r  r.   Nrÿ   re   r.   r,   rE   rE     s%   „ Ø€Jàñ<ó ð<ð- ô -r.   rE   c                   ó    — e Zd ZdZed„ «       Zy)rF   Tc                 óì   — |t         j                  u rt        S |t         j                   u rt         S t        |t         j                  «      r(t        j
                  t        t        |«      d«      «      S y rˆ   )r&   rö   r   r%   r¤   rn   Úroundr\   rø   s     r,   r¶   zRoundToInt.eval"  sW   € ð ”U—X‘XÑÜˆMØ”e—h‘h�YÑÜ�7ˆNÜ�fœeŸl™lÔ+Ü—=‘=¤¤u¨V£}°aÓ!8Ó9Ð9ð ,r.   Nr  re   r.   r,   rF   rF     s   „ Ø€Jàñ:ó ñ:r.   rF   c                   ó    — e Zd ZdZed„ «       Zy)rG   Tc                 óÐ   — t        |t        j                  «      rLt        |t        j                  «      r1t        j                  t        t        |«      t        |«      «      «      S y y r$   )r%   r&   r¤   rn   rV   r1  r\   rm   )r®   rù   Úndigitss      r,   r¶   zRoundDecimal.eval@  sF   € ô �fœeŸl™lÔ+´
¸7ÄEÇMÁMÔ0RÜ—;‘;œu¤U¨6£]´C¸³LÓAÓBÐBð 1SÐ+r.   Nr+  re   r.   r,   rG   rG   =  s   „ Ø€GàñCó ñCr.   rG   c                   ó,   — e Zd ZdZed„ «       Zdefd„Zy)rH   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%   rn   rV   rm   r   rø   s     r,   r¶   zToFloat.evalK  sk   € à”e—h‘h¤§¡ 	Ð*Ñ*ØˆMä�fœeŸm™mÔ,Ü—;‘;œs 6›{Ó+Ð+Ø”VÑÜ—8‘8ˆOØ”f�WÑÜ—H‘H�9Ðð r.   r"   c                 óJ   — |j                  | j                  d   «      }d|› d�S )Nr   z	(double)(r–   rü   rþ   s      r,   rï   zToFloat._ccodeW  s'   € Ø—‘ §	¡	¨!¡Ó-ˆØ˜6˜( !Ð$Ð$r.   N)r»   r¼   r½   rÆ  rÆ   r¶   rÅ   rï   re   r.   r,   rH   rH   H  s%   „ Ø€Gàñ	ó ð	ð% ô %r.   rH   c                   ó¬   ‡ — e Zd ZdZdZdefd„Zdefd„Zd„ Zd„ Z	e
d„ «       Ze
d	„ «       Zd
„ Zdefd„Zd„ Zˆ fd„Zˆ fd„Zˆ fd„Zˆ fd„Zdefd„Zˆ xZS )rK   z4
    Prevents expansion and other optimizations
    é
   r"   c                 ó(   — d| j                   d   › d�S )Nz	Identity(r   r–   r‰   rŠ   s    r,   Ú__repr__zIdentity.__repr__c  s   € Ø˜4Ÿ9™9 Q™<˜.¨Ð*Ð*r.   c                 óF   — d|j                  | j                  d   «      › d�S )z+Controls how sympy's StrPrinter prints thisr•   r   r–   )Údoprintr)   )r‹   r‘   s     r,   r™   zIdentity._sympystrf  s#   € à�7—?‘? 4§9¡9¨Q¡<Ó0Ð1°Ð3Ð3r.   c                 ó4   — | j                   d   j                  S rˆ   )r)   rÆ  rŠ   s    r,   rà  zIdentity._eval_is_realj  s   € Ø�y‰y˜‰|×#Ñ#Ð#r.   c                 ó4   — | j                   d   j                  S rˆ   rÓ   rŠ   s    r,   rÔ   zIdentity._eval_is_integerm  s   € Ø�y‰y˜‰|×&Ñ&Ð&r.   c                 ó|   — t        | j                  d   j                  xr | j                  d   j                  «      S rˆ   )rÁ   r)   r[  r'  rŠ   s    r,   r[  zIdentity.is_numberp  s0   € ô �D—I‘I˜a‘L×*Ñ*ÒI¨t¯y©y¸©|×/IÑ/IÓJÐJr.   c                 óF   — t        | j                  d   j                  «      S rˆ   )rÁ   r)   r'  rŠ   s    r,   r'  zIdentity.is_comparablev  s   € ô �D—I‘I˜a‘L×.Ñ.Ó/Ð/r.   c                 ó    — | j                   d   S rˆ   r‰   )r‹   Úhintss     r,   Ú_eval_expand_identityzIdentity._eval_expand_identity{  r�   r.   c                 ó2   — t        | j                  d   «      S rˆ   )rm   r)   rŠ   s    r,   Ú__int__zIdentity.__int__  s   € Ü�4—9‘9˜Q‘<Ó Ð r.   c                 ó®  — | j                   d   }t        |t        «      rt        j                  |«      }t        |t        j
                  «      sy|j                  r|j                  r|j                  sy|j                  r|j                  r|j                  sy |||«      rt        j                  j                  S t        j                  j                  S )z¤
        Fast path for comparing wrapped numeric atomics against other numeric atomics.
        Keep compound expressions on SymPy's default symbolic path.
        r   N)r)   r%   rm   r&   rn   r   Úis_Atomr[  r'  r	   rÜ   rÝ   )r‹   rK  Úoprr   s       r,   Ú_identity_atom_comparezIdentity._identity_atom_compare‚  s�   € ð
 �i‰i˜‰lˆÜ�eœSÔ!Ü—M‘M %Ó(ˆEÜ˜%¤§¡Ô,ØØ—’ §¢°#×2CÒ2CØØ—’ %§/¢/°e×6IÒ6IØÙ! # uœ~Œu�w‰w�|‰|Ð@´5·7±7·=±=Ð@r.   c                 óP   •— | j                  |d„ «      }|�|S t        ‰| �	  |«      S )Nc                 ó   — | |k\  S r$   re   r4   s     r,   rL  z!Identity.__ge__.<locals>.<lambda>“  ó
   € ¸aÀ1¹f€ r.   )rJ  ÚsuperÚ__ge__©r‹   rK  ÚoutÚ	__class__s      €r,   rO  zIdentity.__ge__’  ó.   ø€ Ø×)Ñ)¨%Ñ1DÓEˆØ�oˆsÐ@¬5©7©>¸%Ó+@Ð@r.   c                 óP   •— | j                  |d„ «      }|�|S t        ‰| �	  |«      S )Nc                 ó   — | |kD  S r$   re   r4   s     r,   rL  z!Identity.__gt__.<locals>.<lambda>—  ó
   € ¸aÀ!¹e€ r.   )rJ  rN  Ú__gt__rP  s      €r,   rW  zIdentity.__gt__–  ó.   ø€ Ø×)Ñ)¨%Ñ1CÓDˆØ�oˆsÐ@¬5©7©>¸%Ó+@Ð@r.   c                 óP   •— | j                  |d„ «      }|�|S t        ‰| �	  |«      S )Nc                 ó   — | |k  S r$   re   r4   s     r,   rL  z!Identity.__le__.<locals>.<lambda>›  rM  r.   )rJ  rN  Ú__le__rP  s      €r,   r[  zIdentity.__le__š  rS  r.   c                 óP   •— | j                  |d„ «      }|�|S t        ‰| �	  |«      S )Nc                 ó   — | |k  S r$   re   r4   s     r,   rL  z!Identity.__lt__.<locals>.<lambda>Ÿ  rV  r.   )rJ  rN  Ú__lt__rP  s      €r,   r^  zIdentity.__lt__ž  rX  r.   c                 ó2   — t        | j                  d   «      S rˆ   )r\   r)   rŠ   s    r,   Ú	__float__zIdentity.__float__¢  s   € Ü�T—Y‘Y˜q‘\Ó"Ð"r.   )r»   r¼   r½   r¾   r…   rÅ   r;  r™   rà  rÔ   rÂ   r[  r'  rD  rm   rF  rJ  rO  rW  r[  r^  r\   r`  Ú__classcell__)rR  s   @r,   rK   rK   \  s–   ø„ ñð €Jð+˜#ó +ð4 Có 4ò$ò'ð ñKó ðKð
 ñ0ó ð0òð!˜ó !òAô AôAôAôAð#˜5÷ #r.   rK   c                 ód   ‡ —  G ˆ fd„dt         j                  «      }d‰ z   }||_        ||_        |S )Nc                   ó0   •— e Zd ZdZW ° Ze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 optimizations
        that change numerics for size compute.
        c                 ój  •— 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 rc|t        u rt        j                  }|t         u rt        j                   }‰dk(  rt        j                  |d«      S  t	        t        ‰«      |«      S y # t        $ r  t	        t        ‰«      |«      cY S w xY w)NÚlog2rM   )r%   r&   rn   rV   r4  rp   r\   ÚOverflowErrorrö   r	  r   Úlog)r®   r/   Únames     €r,   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Ø˜6’>Ü Ÿ9™9 Q¨›?Ð*Ø+”wœu dÓ+¨AÓ.Ð.Øøô %ò 3Ø/œ7¤5¨$Ó/°Ó2Ò2ð3ús   ­1D ÄD2Ä1D2N)	r»   r¼   r½   r¾   Ú_torch_handler_nameÚmake_opaque_unary_fnÚ_torch_unpicklerrÆ   r¶   )ri  s   €r,   ÚOpaqueUnaryFnrd  §  s(   ø„ ñ	ñ #ÐØ/Ðà	ó	ó 
ñ	r.   rm  ÚOpaqueUnaryFn_)r&   ÚFunctionr»   r½   )ri  rm  Únms   `  r,   rk  rk  ¦  s6   ø€ ö$œŸ™ô $ðL 
˜DÑ	 €BØ€MÔØ!#€MÔàÐr.   ÚsqrtÚcosÚcoshÚsinÚsinhÚtanÚtanhÚasinÚacosÚatanrü  rh  Úasinhrf  c                 óâ   ‡ ‡‡— ‰ dk(  r
t         d   Šn,‰ 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_xorÚ
BitwiseXorÚ
bitwise_orÚ	BitwiseOrzunrecognized c                   ód   •— e Zd ZU W ° ZW °Zeed<    ej                  e	W °¬«      Z
eˆfd„«       Zy)ú)make_opaque_bitwise_fn.<locals>.BitwiseFnr…   )Úreal_op_namec                 óð  •— |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«      r\t        |t        j                  t        f«      r<t        j                   t        t        ‰«      t        |«      t        |«      «      «      S y )Nr   r   )rä   r4  r!  r&   rn   r%   rm   )r®   r/   r0   r…  s      €r,   r¶   z.make_opaque_bitwise_fn.<locals>.BitwiseFn.evalö  s®   ø€ à�|Š| §¢Ø6”wœx¨Ó6°q¸!Ó<Ð<Ø�|Š|Ü—M‘M¡q¡!¨aÓ0�Ø�|Š|Ü—M‘M¡q¡!¨aÓ0�Ü˜!œeŸm™m¬SÐ1Ô2´zØ”E—M‘M¤3Ð'ô8ô —}‘}Ð%D¤W¬X°|Ó%DÄSÈÃVÌSÐQRËVÓ%TÓUÐUØr.   N)r»   r¼   r½   rj  r…   rm   rÀ   r_   ÚpartialÚmake_opaque_bitwise_fnrl  rÆ   r¶   )ri  Úprecr…  s   €€€r,   Ú	BitwiseFnr„  ï  s?   ø… Ù"ÐÙˆ
�CÓØ,˜9×,Ñ,Ø"±ô
Ðð 
ó	ó 
ñ	r.   rŠ  Ú
BitwiseFn_)r   rò   r&   ro  r»   r½   )ri  r…  rŠ  rp  r‰  s   ``  @r,   rˆ  rˆ  å  s‚   ú€ Øˆ}ÒÜ˜,Ñ'‰Ø	�Ò	Ü˜,Ñ'‰Ø	�Ò	Ü˜+Ñ&‰ä˜}¨T¨FÐ3Ó4Ð4÷ð ”E—N‘Nô ð* 
˜Ñ	€BØ€IÔØ€IÔàÐr.   r}  Úand_r�  Úor_r  Úxor)hr_   rp   r!  r   Úcollections.abcr   Útypingr   r   r   Útyping_extensionsr   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.printing.precedencer   Úsympy.utilities.iterablesr   Útorch.torch_versionr   Únumbersr   r   r   r   r   r*   r|   rÁ   r-   r5   Ú__all__rQ   rV   ra   rf   r2   ro  r6   r7   r8   r9   r:   r;   r<   r=   r>   rA   rB   r  r*  r)  rþ  rû  rJ   rI   r@   r?   rC   rD   rE   rF   rG   rH   rK   rk  Ú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_log2rˆ  ÚBitwiseFn_bitwise_andÚBitwiseFn_bitwise_orÚBitwiseFn_bitwise_xorre   r.   r,   ú<module>r°     sÓ  ðã Û Û Û 
Ý $ß 8Ñ 8ß 2ã Ý Ý Ý  Ý +ß 7Ñ 7Ý +ß 9Ý &Ý %Ý 0Ý *å ,ç (ñ Ý(ñ ˆT˜Ô'€Ù�5Ó€ð
 !Ð ðX�u—{‘{ð X tó Xð�—‘ð  §¡ð °·±ó òN€ð4	 u§z¡zð 	°dó 	ðØ�˜‘�˜rÐ!Ñ"ðàˆv�c‰{ˆm˜R %§+¡+Ñ-Ð-Ñ.óð ��t‘ð   t¡ð °°t±ó ð)˜5Ÿ;™;ð )¨5¯;©;ð )¸5¿;¹;ó )ô|yˆu�~‰~ô yôxB<�e—n‘nô B<ôJˆE�N‰Nô ô>?D�—‘ô ?DôF3ˆ%�.‰.ô 3ôlˆxô ô,�—‘ô ,ô$-�—‘ô -ô&;ˆe�n‰nô ;ô <ˆU�^‰^ô <ôEˆU�^‰^ô EôR?��yô R?ôj;ˆ*�kô ;ô$:ˆ*�kô :ò$'òô4!�5—>‘>ô !ô6:ˆu�~‰~ô :ô,=�5—>‘>ô =ô2/�—‘ô /ôB9¨¯©ô 9ôz:�5—>‘>ô :ô-�—‘ô -ô&:�—‘ô :ô<C�5—>‘>ô Cô%ˆe�n‰nô %ô(G#ˆu�~‰~ô G#òT+ñ^ *¨&Ó1Ð Ù(¨Ó/Ð Ù)¨&Ó1Ð Ù(¨Ó/Ð Ù)¨&Ó1Ð Ù(¨Ó/Ð Ù)¨&Ó1Ð Ù)¨&Ó1Ð Ù)¨&Ó1Ð Ù)¨&Ó1Ð Ù(¨Ó/Ð Ù(¨Ó/Ð Ù*¨7Ó3Ð Ù)¨&Ó1Ð ò#ñL /¨}¸fÓEÐ Ù-¨l¸EÓBÐ Ù.¨}¸eÓDÑ r.   