Ë
    S²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-g d¢Z.dej$                  de/fd„Z0deee-   ge,f   deee-   ge,ejb                  z  f   fd„Z2de/dz  de/dz  de/dz  fd„Z3d ejh                  d!ejh                  dejh                  fd"„Z5 G d#„ d$ejl                  «      Z7 G d%„ d&ejl                  «      Z8 G d'„ d(ejl                  «      Z9 G d)„ d*ejl                  «      Z: G d+„ d,ejl                  «      Z; G d-„ d.e7«      Z< G d/„ d0ejl                  «      Z= G d1„ d2ejl                  «      Z> G d3„ d4ejl                  «      Z? G d5„ d6ejl                  «      Z@ G d7„ d8ejl                  «      ZA G d9„ d:ee«      ZB G d;„ d<eBe«      ZC G d=„ d>eBe«      ZDd?„ ZEd@„ ZF G dA„ dBejl                  «      ZG G dC„ dDejl                  «      ZH G dE„ dFejl                  «      ZI G dG„ dHejl                  «      ZJ G dI„ dJejl                  «      ZK G dK„ dLejl                  «      ZL G dM„ dNejl                  «      ZM G dO„ dPejl                  «      ZN G dQ„ dRejl                  «      ZO G dS„ dTejl                  «      ZP G dU„ dVejl                  «      ZQdW„ ZR eRdX«      ZS eRdY«      ZT eRdZ«      ZU eRd[«      ZV eRd\«      ZW eRd]«      ZX eRd^«      ZY eRd_«      ZZ eRd`«      Z[ eRda«      Z\ eRdb«      Z] eRdc«      Z^ eRdd«      Z_ eRde«      Z`df„ Za eadgdh«      Zb eadidj«      Zc eadkdl«      Zdy)mé    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)ÚFloorDivÚModularIndexingÚWhereÚ	PythonModÚModÚCleanDivÚ	CeilToIntÚ
FloorToIntÚCeilDivÚ
IntTrueDivÚFloatTrueDivÚLShiftÚRShiftÚ!IsNonOverlappingAndDenseIndicatorÚTruncToFloatÚ
TruncToIntÚ
RoundToIntÚRoundDecimalÚToFloatÚFloatPowÚPowByNaturalÚIdentityÚexprÚreturnc                 ó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   )Ú
isinstanceÚsympyr   Úis_AddÚlenÚ_argsÚ	is_symbol)r6   s    ú[/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/utils/_sympy/functions.pyÚ_is_symbols_binary_summationrA   \   s‡   € ô 	�4œŸ™Ó$ò 	/Ø�K‰Kò	/ä�—
‘
‹O˜qÑ ò	/ð �J‰J�q‰M×#Ñ#ò	/ð �J‰J�q‰M×#Ñ#ò		/ð
 �J‰J�q‰M §¡¨A¡Ð.ðó    Úfc                 óŒ   ‡ — t        j                  ‰ «      dt        t           dt        t
        j                  z  fˆ fd„«       }|S )NÚargsr7   c                  ó¦   •—  ‰| Ž }t        d„ | D «       «      r8t        |t        j                  «      st        j                  t	        |«      «      }|S )Nc              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­w©N)r:   r;   ÚFloat©Ú.0Úas     r@   ú	<genexpr>z-_keep_float.<locals>.inner.<locals>.<genexpr>n   s   è ø€ Ò8¨aŒz˜!œUŸ[™[×)Ñ8ùó   ‚$&)Úanyr:   r;   rI   Úfloat)rE   ÚrrC   s     €r@   Úinnerz_keep_float.<locals>.innerk   sD   ø€ á ˜hˆÜÑ8°4Ô8Ô8ÄØŒu�{‰{ôB
ô —‘œE !›HÓ%ˆAØˆrB   )Ú	functoolsÚwrapsr   r   r   r;   rI   )rC   rR   s   ` r@   Ú_keep_floatrU   h   sB   ø€ ô ‡_�_�QÓð”VœC‘[ð ¤R¬%¯+©+Ñ%5ô ó ðð €LrB   ÚxÚyc                 ó   — d | |fv ry | |k(  S rH   © )rV   rW   s     r@   Úfuzzy_eqrZ   x   s   € Ø��1ˆv�~ØØ�‰6€MrB   Ú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.
    rV   r7   c                 óò   — t         j                  j                  | «      D �cg c]6  }t        |t        t         j
                  f«      rt        t	        |«      «      ‘Œ8 }}t        j                  |«      S c c}w rH   )	r;   ÚMulÚ	make_argsr:   ÚintÚIntegerÚabsÚmathÚprod)rV   ÚargÚinteger_coefficientss      r@   Úinteger_coefficientz0simple_floordiv_gcd.<locals>.integer_coefficient�   sc   € ô —y‘y×*Ñ*¨1Ó-ö+
àÜ˜#¤¤U§]¡]Ð3Ô4ô ”�C“�Mð+
Ðð +
ô
 �y‰yÐ-Ó.Ð.ùò+
s   ¢;A4r6   c                 óž   •— t        ‰t        j                  j                  | «      «      }t	        j
                  t        j                  |«      S rH   )Úmapr;   ÚAddr`   rS   Úreducerd   Úgcd)r6   Úinteger_factorsrh   s     €r@   Úinteger_factorz+simple_floordiv_gcd.<locals>.integer_factor—   s:   ø€ Ü),Ø¤§¡×!4Ñ!4°TÓ!:ó*
ˆô ×Ñ¤§¡¨/Ó:Ð:rB   c              3   ó&   •K  — | ]  }‰|v –— Œ
 y ­wrH   rY   )rK   Ú
base_splitrV   s     €r@   rM   z&simple_floordiv_gcd.<locals>.<genexpr>¥   s   øè ø€ Ò= :ˆq�JŒÑ=ùs   ƒ)r;   ÚBasicra   rd   rm   Úlistrj   r_   r`   rk   Úall)r[   r\   ro   rm   Úbase_splitsÚdivisor_splitrh   rV   s         @@r@   Úsimple_floordiv_gcdrw   ~   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ðð €JrB   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)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
    ©r9   .Únargsé#   Ú
precedenceTÚ
is_integerr7   c                 ó    — | j                   d   S ©Nr   ©rE   ©Úselfs    r@   ÚbasezFloorDiv.baseÉ   ó   € à�y‰y˜‰|ÐrB   c                 ó    — | j                   d   S ©Nr   r€   r�   s    r@   ÚdivisorzFloorDiv.divisorÍ   r„   rB   Ú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Ð%Ð%rB   rƒ   r‡   Nc                 ó†  — |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«      r0t        |t        j.                  «      rt        jB                  ||«      }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)r\   )rK   rQ   s     r@   rM   z FloorDiv.eval.<locals>.<genexpr>  s   è ø€ Ò,I¸!¨Q¯S©S°A­XÑ,Iùs   ‚ÚevaluateF)$Úis_zeroÚZeroDivisionErrorr   r;   Únanr	   ÚZeror}   r   r_   ÚOner:   ÚNumberrP   rd   Úinfr   Úisnanrb   Úfloorra   r    rE   rk   r`   r   Ú__version__ÚatomsÚRationalrt   Úappendr=   rw   rm   ÚsimplifyÚPolynomialError)Úclsrƒ   r‡   rQ   Ú	quotientsÚtermsÚtermÚquotientÚquotient_is_integerÚ	rationalsÚall_rationals_intsrm   s               r@   ÚevalzFloorDiv.evalØ   sA  € ð �?Š?Ü#Ð$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Ü—i‘i  gÓ.�Ü  QÔ'ÜÜ—N‘N 4¨#¡:Ó.´·±¸wÈ¹}Ó0Móð ð (ð øô ×$Ñ$ò 	Øàð	ús   ÎBP* Ð*Q Ð?Q c                 ó˜   — | j                   d d \  }}t        |j                  |j                  |j                  |j                  g«      ryy )Nr9   T)rE   rt   r}   Úis_nonnegative©r‚   r[   r\   s      r@   Ú_eval_is_nonnegativezFloorDiv._eval_is_nonnegative1  s@   € Ø�y‰y˜˜!ˆ}‰ˆˆ1Ü�—‘˜aŸl™l¨A×,<Ñ,<¸a×>NÑ>NÐOÔPØØrB   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rz   Útuplera   Ú__annotations__r|   r}   ÚboolÚpropertyr;   rr   rƒ   r‡   ÚprintingÚ
StrPrinterÚstrr�   Úclassmethodrb   r­   r±   rY   rB   r@   r    r    ¼   sÙ   … ñð "€Eˆ5��c�‰?Ó!Ø€J�ÓØ€J�Óàð�e—k‘kò ó ðð ð˜Ÿ™ò ó ðð& §¡×!:Ñ!:ð &¸só &ð ðV˜Ÿ™ð V°·±ð VÀ%Ç+Á+ÐPTÑBTò Vó ðVðp d¨T¡kô rB   r    c            
       óÐ   — e Zd ZU dZdZeedf   ed<   dZe	ed<   dZ
eed<   ed	ej                  d
ej                  dej                  dej                  dz  fd„«       Zde	dz  fd„Zy)r!   zK
    ModularIndexing(a, b, c) => (a // b) % c where % is the C modulus
    ©é   .rz   Tr}   r{   r|   rƒ   r‡   Úmodulusr7   Nc                 ór  — |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  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;   r	   r™   r:   rb   rm   r!   r£   r¤   rk   rE   r_   r¢   r=   Úsumr    )r¥   rƒ   r‡   rÁ   rm   Ú	new_termsÚall_positiver¨   s           r@   r­   zModularIndexing.evalA  sË  € ð �1Š9˜ 1šÜ—7‘7—<‘<Ðä�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àøô9 ×$Ñ$ò 	Úð	ús   Á<AH ÈH6È5H6c                 óf   — | j                   d d \  }}t        |j                  |j                  «      S )Nr9   )rE   rZ   r¯   r°   s      r@   r±   z$ModularIndexing._eval_is_nonnegativeu  s.   € Ø�y‰y˜˜!ˆ}‰ˆˆ1Ü˜×(Ñ(¨!×*:Ñ*:Ó;Ð;rB   )r²   r³   r´   rµ   rz   r¶   ra   r·   r}   r¸   r|   r½   r;   rb   rr   r­   r±   rY   rB   r@   r!   r!   8  s‡   … ñð "€Eˆ5��c�‰?Ó!Ø€J�ÓØ€J�Óàð1Ø—=‘=ð1Ø+0¯=©=ð1ØCHÇ=Á=ð1à	�‰�tÑ	ò1ó ð1ðf< d¨T¡kô <rB   r!   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)r"   z#
    Good ol' ternary operator
    r¿   .rz   r{   r|   r7   Nc                 ón   — | j                   d   j                  r| j                   d   j                  rdS d S ©Nr   r9   T©rE   r}   r�   s    r@   Ú_eval_is_integerzWhere._eval_is_integer‚  s.   € Ø—y‘y ‘|×.Ò.°4·9±9¸Q±<×3JÒ3JˆtÐTÐPTÐTrB   c                 ón   — | j                   d   j                  r| j                   d   j                  rdS d S rÉ   )rE   r¯   r�   s    r@   r±   zWhere._eval_is_nonnegative…  s9   € ð �y‰y˜‰|×*Ò*¨t¯y©y¸©|×/JÒ/Jð ð	
ð ð	
rB   c                 ón   — | j                   d   j                  r| j                   d   j                  rdS d S rÉ   ©rE   Úis_positiver�   s    r@   Ú_eval_is_positivezWhere._eval_is_positiveŒ  s.   € Ø—y‘y ‘|×/Ò/°D·I±I¸a±L×4LÒ4LˆtÐVÐRVÐVrB   Úcr[   r\   c                 óX   — |t         j                  k(  r|S |t         j                  k(  r|S y rH   )r;   ÚtrueÚfalse)r¥   rÑ   r[   r\   s       r@   r­   z
Where.eval�  s&   € à”—
‘
Š?ØˆHØ”%—+‘+ÒØˆHØrB   )r²   r³   r´   rµ   rz   r¶   ra   r·   r|   r¸   rË   r±   rÐ   r½   r;   rr   r­   rY   rB   r@   r"   r"   z  sŸ   … ñð "€Eˆ5��c�‰?Ó!Ø€J�ÓðU $¨¡+ó Uð
 d¨T¡kó 
ðW 4¨$¡;ó Wð ð�U—[‘[ð  U§[¡[ð °U·[±[ð ÀUÇ[Á[ÐSWÑEWò ó ñrB   r"   c                   óÒ   — e Zd ZU dZeedf   ed<   dZeed<   dZe	ed<   e
dej                  d	ej                  d
e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)r#   ry   .rz   r{   r|   Tr}   r[   r\   r7   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   r9   r   )r–   r—   r	   r™   Ú	is_NumberÚis_evenÚis_oddrš   r}   Ú
is_Booleanr¸   rÏ   r;   r$   ©r¥   r[   r\   rQ   Ú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àrB   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Ð9rB   c                 ó<   — | j                   d   j                  rdS d S rß   )rE   Úis_negativer�   s    r@   Ú_eval_is_nonpositivezPythonMod._eval_is_nonpositiveÑ  rà   rB   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Ž   rE   r   rÏ   r¼   )r‚   rˆ   r[   r\   Ú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ÐCrB   )r²   r³   r´   rz   r¶   ra   r·   r|   r}   r¸   r½   r;   r   r­   r±   rã   r¼   ræ   rY   rB   r@   r#   r#   ™  s�   … Ø!€Eˆ5��c�‰?Ó!à€J�ÓØ€J�Óàð+�U—Z‘Zð + E§J¡Jð +°5·:±:ÀÑ3Dò +ó ð+ð\: d¨T¡kó :ð: d¨T¡kó :ðD ô DrB   r#   c                   ó8   — e Zd ZU dZdZeed<   dZdZe	d„ «       Z
y)r$   ry   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   r9   )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ˆ?rB   N)r²   r³   r´   rz   r|   ra   r·   r}   r¯   r½   r­   rY   rB   r@   r$   r$   Ü  s-   … Ø€EØ€J�Óà€JØ€Nàñ+ó ñ+rB   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µ   rY   rB   r@   r%   r%     s   „ òrB   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 rH   )	r;   Úoor   r:   r›   rb   rd   ÚceilrP   ©r¥   Únumbers     r@   r­   zCeilToInt.eval  se   € ð ”e—h‘h¤Ð'Ñ'ÜˆMØ”u—x‘x�i¤& Ð)Ñ)Ü�7ˆNÜ�fœeŸl™lÔ+Ü—=‘=¤§¡¬5°«=Ó!9Ó:Ð:ð ,rB   r7   c                 ó€   — |j                  | j                  d   | j                  d   j                  dz
  «      }d|› d�S )Nr   r‹   zceil(r�   )rŽ   rE   r|   )r‚   rˆ   rð   s      r@   ræ   zCeilToInt._ccode(  s>   € Ø×%Ñ% d§i¡i°¡l°D·I±I¸a±L×4KÑ4KÈcÑ4QÓRˆØ�v�h˜aÐ Ð rB   N)r²   r³   r´   r}   r½   r­   r¼   ræ   rY   rB   r@   r&   r&     s%   „ Ø€Jàñ;ó ð;ð! ô !rB   r&   c                   ó    — e Zd ZdZed„ «       Zy)r'   Tc                 óN  — |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 rH   )	r;   rí   r   r:   rb   r›   rd   rž   rP   rï   s     r@   r­   zFloorToInt.eval0  st   € à”e—h‘h¤Ð'Ñ'ÜˆMØ”u—x‘x�i¤Ð(Ñ(Ü�7ˆNÜ�fœeŸm™mÔ,ØˆMÜ�fœeŸl™lÔ+Ü—=‘=¤§¡¬E°&«MÓ!:Ó;Ð;ð ,rB   N©r²   r³   r´   r}   r½   r­   rY   rB   r@   r'   r'   -  s   „ Ø€Jàñ<ó ñ<rB   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   rm   r%   r    ©r¥   rƒ   r‡   s      r@   Ú__new__zCeilDiv.__new__C  sT   € Ü�}‰}˜TÓ"ˆÜ—-‘- Ó(ˆÜ�9‰9�T˜7Ó# wÒ.Ü˜D 'Ó*Ð*ä˜D G¨a¡KÑ0°'Ó:Ð:rB   N)r²   r³   r´   rµ   r}   rø   rY   rB   r@   r(   r(   <  s   „ ñð €Jó;rB   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 countr9   )Ú
ValueError©r¥   rƒ   Úshifts      r@   r­   zLShift.evalO  s#   € à�1Š9ÜÐ3Ó4Ð4Ø�a˜‘h‰ÐrB   Nrô   rY   rB   r@   r+   r+   L  s   „ Ø€Jàñó ñrB   r+   c                   ó    — e Zd ZdZed„ «       Zy)r,   Tc                 ó@   — |dk  rt        d«      ‚t        |d|z  «      S rû   )rü   r    rý   s      r@   r­   zRShift.evalY  s&   € à�1Š9ÜÐ3Ó4Ð4Ü˜˜a ™hÓ'Ð'rB   Nrô   rY   rB   r@   r,   r,   V  s   „ Ø€Jàñ(ó ñ(rB   r,   c                   óê  — e Zd Z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rH   r
   )rK   rf   s     r@   rM   z%MinMaxBase.__new__.<locals>.<genexpr>e  s   è ø€ Ò6 ”˜—Ñ6ùs   ‚r   )Úsympy.core.parametersr  Úpopr•   Ú"_satisfy_unique_summations_symbolsÚ	frozensetÚ_new_args_filterr   ÚzeroÚ_collapse_argumentsÚ_find_localzerosÚidentityr=   rs   r   rø   r   Ú_argsetÚunique_summations_symbols)r¥   Úoriginal_argsÚassumptionsr  r•   rE   r  Úobjs           r@   rø   zMinMaxBase.__new__a  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r7   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.
        r9   Nr   r   r  )r=   r:   r  rA   Ú_unique_symbolsÚgetattr)r¥   rE   Ú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àrB   Ú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¥   rE   r  Úseen_symbolsrf   Úelements         r@   r  zMinMaxBase._unique_symbolsÆ  s}   € ð !,Ð 3”s”u¸×9IÑ9IÓ9KˆØò 	.ˆCØŸ9™9›;ò .�Ü! '¬5¯:©:×+<Ñ+<×+CÑ+CÔDÚØ Ñ,Úà ×$Ñ$ WÕ-ñ.ð	.ð ÐrB   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ÚMaxrE   Úfunc)ÚairL   ÚcondÚir¥   Údos       €€r@   r,  z*MinMaxBase._collapse_arguments.<locals>.do0  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 rH   )r:   )rf   Úothers    €r@   ú<lambda>zGMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<lambda>E  s   ø€ ¤:¨c°5Ó#9€ rB   T)Úbinaryr•   F)r   r  rE   Úintersectionrs   rt   r¢   )rE   Úis_otherÚ
other_argsÚremaining_argsrf   Úarg_setsÚcommonÚnew_other_argsÚarg_setÚarg_sets_diffÚsÚother_args_diffÚother_args_factoredr¥   r/  s                €€r@   Úfactor_minmaxz5MinMaxBase._collapse_arguments.<locals>.factor_minmaxD  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 )rs   r   r&  r'  Ú	is_numberr   rE   Úis_comparabler:   r¢   r  Úranger=   Ú	enumerate)r¥   rE   r  ÚsiftedÚminsÚmaxsr+  ÚvÚsmallÚbigrf   ÚTrL   Úa0r)  r>  r,  r/  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  r(  rE   )r¥   Úarg_sequencerf   s      r@   r
  zMinMaxBase._new_args_filtera  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                  |«       Œ^ |€|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
        Nzimpossible r   r   )g        r   )r  rØ   r'  Úmaxr&  Úminré   r!  r=   ÚnextÚiterr¯   rÏ   )r¥   ÚvaluesÚoptionsÚother_valuesÚ	num_valuerf   Úother_values          r@   r  zMinMaxBase._find_localzeros|  s  € ô “uˆØˆ	Øò 	&ˆCØ�}Š}ØÐ$Ø #‘Iàœc‘zÜ$'¨	°3Ó$7™	Ø¤™Ü$'¨	°3Ó$7™	ä,¨{¸3¸%Ð-@ÓAÐAà× Ñ  Õ%ð	&ð ÐØÐäˆ|Ó Ò!Ø�;Ðäˆ|Ó Ò!Üœt LÓ1Ó2ˆKØ˜HÑ$¨×)CÒ)CØ'*¬c¡z�|ÐB¸	°{ÐBØ˜AŠ~ +×"9Ò"9Ø'*¬c¡z�|ÐB¸	°{ÐBà×Ñ˜Ô#ØÐrB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_algebraic©rK   r+  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>«  ó   è ø€ Ò(H¸A¨¯­Ñ(Hùó   ‚©r   rE   ©r;  s    r@   r0  zMinMaxBase.<lambda>«  ó   € ¤5Ñ(HÀÇÁÔ(HÓ#H€ rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_antihermitianr[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>¬  ó   è ø€ ò -àð 	
×Õñ-ùr]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>¬  ó   € ¤uñ -à—‘ô-ó (€ rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_commutativer[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>°  ó   è ø€ ò +àð 	
×Õñ+ùr]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>°  ó   € ¤Uñ +à—‘ô+ó &€ rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Ú
is_complexr[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>´  ó   è ø€ Ò&D¸ q§|¥|Ñ&Dùr]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>´  ó   € ¤Ñ&D¸Q¿V¹VÔ&DÓ!D€ rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_compositer[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>µ  r\  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>µ  r`  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )rÙ   r[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>¶  ó   è ø€ Ò#>°! A§I¥IÑ#>ùr]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>¶  ó   € œeÑ#>°q·v±vÔ#>Ó>€ rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Ú	is_finiter[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>·  s   è ø€ Ò%B°a a§k¥kÑ%Bùr]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>·  s   € ¤Ñ%B¸1¿6¹6Ô%BÓ B€ rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_hermitianr[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>¸  r\  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>¸  r`  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_imaginaryr[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>¹  r\  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>¹  r`  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )r   r[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>º  ó   è ø€ Ò'F¸!¨¯­Ñ'Fùr]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>º  ó   € ¤%Ñ'F¸q¿v¹vÔ'FÓ"F€ rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )r}   r[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>»  rn  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>»  ro  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_irrationalr[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>¼  ó   è ø€ Ò)J¸a¨!¯/­/Ñ)Jùr]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>¼  ó   € ¤EÑ)JÀ1Ç6Á6Ô)JÓ$J€ rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   ©râ   r[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>½  r‚  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>½  rƒ  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_nonintegerr[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>¾  r‰  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>¾  rŠ  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   ©r¯   r[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>¿  ri  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>¿  rj  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_nonpositiver[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>Ã  ri  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>Ã  rj  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Ú
is_nonzeror[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>Ç  rn  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>Ç  ro  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )rÚ   r[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>È  s   è ø€ Ò"<° 1§8¥8Ñ"<ùr]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>È  s   € œUÑ"<°Q·V±VÔ"<Ó<€ rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_polarr[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>É  ó   è ø€ Ò$@°A Q§Z¥ZÑ$@ùr]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>É  ó   € œuÑ$@¸¿¹Ô$@Ó@€ rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   ©rÏ   r[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>Ê  r‚  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>Ê  rƒ  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_primer[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>Ë  rŸ  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>Ë  r   rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_rationalr[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>Ì  r‚  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>Ì  rƒ  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_realr[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>Í  ru  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>Í  rv  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )rL  r[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>Î  rd  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>Î  re  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )Úis_transcendentalr[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>Ò  s   è ø€ ò .àð 	
×Õñ.ùr]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>Ò  s   € ¬ñ .à—‘ô.ó )€ rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   )r–   r[  s     r@   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>Ö  ru  r]  r^  r_  s    r@   r0  zMinMaxBase.<lambda>Ö  rv  rB   rH   ))r²   r³   r´   rø   r½   r  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_zerorY   rB   r@   r  r  `  s†  „ ò+ðZ ð5à	ˆU�Z‰Z×Ñ×%Ñ%Ñ	&¨Ñ	-ò5ó ð5ðn àGKñØ # E§J¡J×$5Ñ$5×$<Ñ$<Ñ =ÀÑ Dðà	ˆU�Z‰Z×Ñ×%Ñ%Ñ	&¨Ñ	-òó ðð$ ñEó ðEðN ñó ðð4 ñ,ó ð,ñ\ IÐñÐñÐñ EÐÙHÐÙ>€MÙB€OÙHÐÙHÐÙFÐÙDÐÙJÐÙFÐÙJÐñÐñÐñ EÐÙ<€LÙ@€NÙFÐÙ@€NÙFÐÙ>€MñÐñÐñ ?�MrB   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rH   r£  rJ   s     r@   rM   z(Max._eval_is_positive.<locals>.<genexpr>â  ó   è ø€ Ò9¨!˜Ÿ�Ñ9ùr]  ©r   rE   r�   s    r@   rÐ   zMax._eval_is_positiveá  ó   € ÜÑ9¨t¯y©yÔ9Ó9Ð9rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   r“  rJ   s     r@   rM   z+Max._eval_is_nonnegative.<locals>.<genexpr>å  s   è ø€ Ò<¨Q˜×(Õ(Ñ<ùr]  rÎ  r�   s    r@   r±   zMax._eval_is_nonnegativeä  s   € ÜÑ<°$·)±)Ô<Ó<Ð<rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   r�  rJ   s     r@   rM   z(Max._eval_is_negative.<locals>.<genexpr>è  ó   è ø€ Ò:¨1˜Ÿ�Ñ:ùr]  ©r   rE   r�   s    r@   r¿  zMax._eval_is_negativeç  ó   € ÜÑ:°·	±	Ô:Ó:Ð:rB   N)r²   r³   r´   rµ   r	   ÚInfinityr  ÚNegativeInfinityr  rÐ   r±   r¿  rY   rB   r@   r'  r'  Ù  s,   „ ñð �:‰:€DØ×!Ñ!€Hò:ò=ó;rB   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rH   r£  rJ   s     r@   rM   z(Min._eval_is_positive.<locals>.<genexpr>ô  rÔ  r]  rÕ  r�   s    r@   rÐ   zMin._eval_is_positiveó  rÖ  rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   r“  rJ   s     r@   rM   z+Min._eval_is_nonnegative.<locals>.<genexpr>÷  s   è ø€ Ò=¨a˜×)Õ)Ñ=ùr]  rÕ  r�   s    r@   r±   zMin._eval_is_nonnegativeö  s   € ÜÑ=°4·9±9Ô=Ó=Ð=rB   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrH   r�  rJ   s     r@   rM   z(Min._eval_is_negative.<locals>.<genexpr>ú  rÍ  r]  rÎ  r�   s    r@   r¿  zMin._eval_is_negativeù  rÏ  rB   N)r²   r³   r´   rµ   r	   rØ  r  r×  r  rÐ   r±   r¿  rY   rB   r@   r&  r&  ë  s,   „ ñð ×Ñ€DØ�z‰z€Hò;ò>ó:rB   r&  c                 óL   — d}| dk  r|  } |dz  dk(  rdnd}|t        | |«      z  S )Nr   r   r9   r“   )Ú	_safe_pow)rƒ   ÚexpÚsigns      r@   Úsafe_powrä  ý  s8   € Ø€DØˆa‚xØˆuˆØ˜!‘G˜q’L‰q bˆØ”)˜D #Ó&Ñ&Ð&rB   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   r9   )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à€MrB   c                   ó0   — e Zd ZU dZdZeed<   ed„ «       Zy)r4   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 rH   )
r:   r;   rb   rä  r   ÚPowrí   r¯   râ   Úzoo)r¥   rƒ   râ  rQ   s       r@   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Ð ð "ð %rB   N)	r²   r³   r´   r}   r|   ra   r·   r½   r­   rY   rB   r@   r4   r4      s#   … Ø€Jà€J�Óàñ!ó ñ!rB   r4   c                   ó0   — e Zd ZU dZdZeed<   ed„ «       Zy)r3   Té<   r|   c                 óÂ   — t        |t        j                  «      rEt        |t        j                  «      r*t        j                  t	        |«      t	        |«      z  «      S y y rH   )r:   r;   r›   rI   rP   )r¥   rƒ   râ  s      r@   r­   zFloatPow.eval@  sD   € ô �dœEŸL™LÔ)¬j¸¼e¿l¹lÔ.KÜ—;‘;œu T›{¬e°C«jÑ8Ó9Ð9ð /LÐ)rB   N©	r²   r³   r´   r¬  r|   ra   r·   r½   r­   rY   rB   r@   r3   r3   ;  s#   … Ø€Gà€J�Óàñ:ó ñ:rB   r3   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›   rI   rP   r÷   s      r@   r­   zFloatTrueDiv.evalV  sW   € ð
 �?Š?Ü#Ð$6Ó7Ð7ä�dœEŸL™LÔ)¬j¸Ä%Ç,Á,Ô.OÜ—;‘;œu T›{¬U°7«^Ñ;Ó<Ð<ð /PÐ)rB   Nró  rY   rB   r@   r*   r*   Q  s#   … Ø€Gà€J�Óàñ=ó ñ=rB   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   rI   rP   rb   ra   r÷   s      r@   r­   zIntTrueDiv.evalo  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Ð*rB   r7   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Ž   rE   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Ð.Ð.rB   N)r²   r³   r´   r¬  r|   ra   r·   r½   r­   r¼   ræ   rY   rB   r@   r)   r)   j  s/   … Ø€Gà€J�Óàñ9ó ð9ð/ ô /rB   r)   c                   ó    — e Zd ZdZed„ «       Zy)r-   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 )Nr9   r   z*expected an even number of arguments, got )Ú!eval_is_non_overlapping_and_densec              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wrH   ©r:   r;   rb   rJ   s     r@   rM   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>�  s   è ø€ Ò:°Œz˜!œUŸ]™]×+Ñ:ùrN   r   c              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wrH   rþ  rJ   s     r@   rM   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>²  s   è ø€ Ò=°Œz˜!œUŸ]™]×+Ñ=ùrN   zdim must not be zeroT)Ústrict)Úkeyr   c              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wrH   rþ  rJ   s     r@   rM   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>¼  s   è ø€ ÒF°A”:˜a¤§¡×/ÑFùrN   r“   )é*   )r=   ré   Ú%torch.fx.experimental.symbolic_shapesrü  rt   ra   rØ   ÚzipÚsortedÚoperatorÚ
itemgetter)	r¥   rE   ÚdimÚsizesÚstridesrü  rL   Ú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ô   rY   rB   r@   r-   r-   ‹  s   „ Ø€Jàñ5ó ñ5rB   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                  «      r1t        j                  t        j                  t        |«      «      «      S y rH   )r;   rí   r:   r›   rI   rd   ÚtruncrP   rï   s     r@   r­   zTruncToFloat.evalË  sO   € à”e—h‘h¤§¡ 	Ð*Ñ*ØˆMä�fœeŸl™lÔ+ô —;‘;œtŸz™z¬%°«-Ó8Ó9Ð9ð	 ,rB   N©r²   r³   r´   r¬  r½   r­   rY   rB   r@   r.   r.   È  s   „ Ø€Gàñ:ó ñ:rB   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 rH   )	r;   rí   r   r:   r›   rb   rd   r  rP   rï   s     r@   r­   zTruncToInt.evalÚ  se   € ð ”e—h‘h¤Ð'Ñ'ÜˆMØ”u—x‘x�i¤& Ð)Ñ)Ü�7ˆNÜ�fœeŸl™lÔ+Ü—=‘=¤§¡¬E°&«MÓ!:Ó;Ð;ð ,rB   Nrô   rY   rB   r@   r/   r/   ×  s   „ Ø€Jàñ<ó ñ<rB   r/   c                   ó    — e Zd ZdZed„ «       Zy)r0   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›   rb   ÚroundrP   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ð ,rB   Nrô   rY   rB   r@   r0   r0   æ  s   „ Ø€Jàñ:ó ñ:rB   r0   c                   ó    — e Zd ZdZed„ «       Zy)r1   Tc                 óÐ   — t        |t        j                  «      rLt        |t        j                  «      r1t        j                  t        t        |«      t        |«      «      «      S y y rH   )r:   r;   r›   rb   rI   r  rP   ra   )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Ð+rB   Nr  rY   rB   r@   r1   r1     s   „ Ø€GàñCó ñCrB   r1   c                   ó    — e Zd ZdZed„ «       Zy)r2   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 rH   )r;   rí   r:   rb   rI   ra   r   rï   s     r@   r­   zToFloat.eval  sk   € à”e—h‘h¤§¡ 	Ð*Ñ*ØˆMä�fœeŸm™mÔ,Ü—;‘;œs 6›{Ó+Ð+Ø”VÑÜ—8‘8ˆOØ”f�WÑÜ—H‘H�9Ðð rB   Nr  rY   rB   r@   r2   r2     s   „ Ø€Gàñ	ó ñ	rB   r2   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 )r5   z4
    Prevents expansion and other optimizations
    é
   r7   c                 ó(   — d| j                   d   › d�S )Nz	Identity(r   r�   r€   r�   s    r@   Ú__repr__zIdentity.__repr__&  s   € Ø˜4Ÿ9™9 Q™<˜.¨Ð*Ð*rB   c                 óF   — d|j                  | j                  d   «      › d�S )z+Controls how sympy's StrPrinter prints thisrŒ   r   r�   )ÚdoprintrE   )r‚   rˆ   s     r@   r�   zIdentity._sympystr)  s#   € à�7—?‘? 4§9¡9¨Q¡<Ó0Ð1°Ð3Ð3rB   c                 ó4   — | j                   d   j                  S r   )rE   r¬  r�   s    r@   rÆ  zIdentity._eval_is_real-  s   € Ø�y‰y˜‰|×#Ñ#Ð#rB   c                 ó4   — | j                   d   j                  S r   rÊ   r�   s    r@   rË   zIdentity._eval_is_integer0  s   € Ø�y‰y˜‰|×&Ñ&Ð&rB   c                 ó|   — t        | j                  d   j                  xr | j                  d   j                  «      S r   )r¸   rE   r?  r@  r�   s    r@   r?  zIdentity.is_number3  s0   € ô �D—I‘I˜a‘L×*Ñ*ÒI¨t¯y©y¸©|×/IÑ/IÓJÐJrB   c                 óF   — t        | j                  d   j                  «      S r   )r¸   rE   r@  r�   s    r@   r@  zIdentity.is_comparable9  s   € ô �D—I‘I˜a‘L×.Ñ.Ó/Ð/rB   c                 ó    — | j                   d   S r   r€   )r‚   Úhintss     r@   Ú_eval_expand_identityzIdentity._eval_expand_identity>  r„   rB   c                 ó2   — t        | j                  d   «      S r   )ra   rE   r�   s    r@   Ú__int__zIdentity.__int__B  s   € Ü�4—9‘9˜Q‘<Ó Ð rB   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)rE   r:   ra   r;   rb   r   Úis_Atomr?  r@  r	   rÓ   rÔ   )r‚   r/  Úoprf   s       r@   Ú_identity_atom_comparezIdentity._identity_atom_compareE  s�   € ð
 �i‰i˜‰lˆÜ�eœSÔ!Ü—M‘M %Ó(ˆEÜ˜%¤§¡Ô,ØØ—’ §¢°#×2CÒ2CØØ—’ %§/¢/°e×6IÒ6IØÙ! # uœ~Œu�w‰w�|‰|Ð@´5·7±7·=±=Ð@rB   c                 óP   •— | j                  |d„ «      }|�|S t        ‰| �	  |«      S )Nc                 ó   — | |k\  S rH   rY   ©rL   Úbs     r@   r0  z!Identity.__ge__.<locals>.<lambda>V  ó
   € ¸aÀ1¹f€ rB   )r.  ÚsuperÚ__ge__©r‚   r/  ÚoutÚ	__class__s      €r@   r5  zIdentity.__ge__U  ó.   ø€ Ø×)Ñ)¨%Ñ1DÓEˆØ�oˆsÐ@¬5©7©>¸%Ó+@Ð@rB   c                 óP   •— | j                  |d„ «      }|�|S t        ‰| �	  |«      S )Nc                 ó   — | |kD  S rH   rY   r1  s     r@   r0  z!Identity.__gt__.<locals>.<lambda>Z  ó
   € ¸aÀ!¹e€ rB   )r.  r4  Ú__gt__r6  s      €r@   r=  zIdentity.__gt__Y  ó.   ø€ Ø×)Ñ)¨%Ñ1CÓDˆØ�oˆsÐ@¬5©7©>¸%Ó+@Ð@rB   c                 óP   •— | j                  |d„ «      }|�|S t        ‰| �	  |«      S )Nc                 ó   — | |k  S rH   rY   r1  s     r@   r0  z!Identity.__le__.<locals>.<lambda>^  r3  rB   )r.  r4  Ú__le__r6  s      €r@   rA  zIdentity.__le__]  r9  rB   c                 óP   •— | j                  |d„ «      }|�|S t        ‰| �	  |«      S )Nc                 ó   — | |k  S rH   rY   r1  s     r@   r0  z!Identity.__lt__.<locals>.<lambda>b  r<  rB   )r.  r4  Ú__lt__r6  s      €r@   rD  zIdentity.__lt__a  r>  rB   c                 ó2   — t        | j                  d   «      S r   )rP   rE   r�   s    r@   Ú	__float__zIdentity.__float__e  s   € Ü�T—Y‘Y˜q‘\Ó"Ð"rB   )r²   r³   r´   rµ   r|   r¼   r  r�   rÆ  rË   r¹   r?  r@  r(  ra   r*  r.  r5  r=  rA  rD  rP   rF  Ú__classcell__)r8  s   @r@   r5   r5     s–   ø„ ñð €Jð+˜#ó +ð4 Có 4ò$ò'ð ñKó ðKð
 ñ0ó ð0òð!˜ó !òAô AôAôAôAð#˜5÷ #rB   r5   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Úlog2r9   )r:   r;   rb   rI   r  rd   rP   ÚOverflowErrorrí   rï  r   Úlog)r¥   rL   Únames     €r@   r­   z0make_opaque_unary_fn.<locals>.OpaqueUnaryFn.evalx  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­   )rO  s   €r@   ÚOpaqueUnaryFnrJ  j  s(   ø„ ñ	ñ #ÐØ/Ðà	ó	ó 
ñ	rB   rS  ÚOpaqueUnaryFn_)r;   ÚFunctionr²   r´   )rO  rS  Únms   `  r@   rQ  rQ  i  s6   ø€ ö$œŸ™ô $ðL 
˜DÑ	 €BØ€MÔØ!#€MÔàÐrB   ÚsqrtÚcosÚcoshÚsinÚsinhÚtanÚtanhÚasinÚacosÚatanrâ  rN  ÚasinhrL  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Û   r  r  r;   rb   r:   ra   )r¥   rL   r2  rk  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ØrB   N)r²   r³   r´   rP  r|   ra   r·   rS   ÚpartialÚmake_opaque_bitwise_fnrR  r½   r­   )rO  Úprecrk  s   €€€r@   Ú	BitwiseFnrj  ²  s?   ø… Ù"ÐÙˆ
�CÓØ,˜9×,Ñ,Ø"±ô
Ðð 
ó	ó 
ñ	rB   rp  Ú
BitwiseFn_)r   ré   r;   rU  r²   r´   )rO  rk  rp  rV  ro  s   ``  @r@   rn  rn  ¨  s‚   ú€ Øˆ}ÒÜ˜,Ñ'‰Ø	�Ò	Ü˜,Ñ'‰Ø	�Ò	Ü˜+Ñ&‰ä˜}¨T¨FÐ3Ó4Ð4÷ð ”E—N‘Nô ð* 
˜Ñ	€BØ€IÔØ€IÔàÐrB   rc  Úand_rg  Úor_re  Úxor)erS   rd   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   Ú__all__r¸   rA   rI   rU   rZ   rr   rw   rU  r    r!   r"   r#   r$   r%   r&   r'   r(   r+   r,   r  r'  r&  rä  rá  r4   r3   r*   r)   r-   r.   r/   r0   r1   r2   r5   rQ  Ú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_log2rn  ÚBitwiseFn_bitwise_andÚBitwiseFn_bitwise_orÚBitwiseFn_bitwise_xorrY   rB   r@   ú<module>r–     s‡  ðã Û Û Û 
Ý $ß 8Ñ 8ß 2ã Ý Ý Ý  Ý +ß 7Ñ 7Ý +ß 9Ý &Ý %Ý 0Ý *å ,ç (ñ Ý(ñ ˆT˜Ô'€Ù�5Ó€òB€ð4	 u§z¡zð 	°dó 	ðØ�˜‘�˜rÐ!Ñ"ðàˆv�c‰{ˆm˜R %§+¡+Ñ-Ð-Ñ.óð ��t‘ð   t¡ð °°t±ó ð)˜5Ÿ;™;ð )¨5¯;©;ð )¸5¿;¹;ó )ô|yˆu�~‰~ô yôx?<�e—n‘nô ?<ôDˆE�N‰Nô ô>?D�—‘ô ?DôF3ˆ%�.‰.ô 3ôlˆxô ô!�—‘ô !ô$<�—‘ô <ô;ˆe�n‰nô ;ô ˆU�^‰^ô ô(ˆU�^‰^ô (ôv?��yô v?ôr;ˆ*�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Ñ rB   