§
    Ÿ²Åjâ  ã                  óâ  — d dl mZ 	 d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlmZmZmZmZ d dlZd dlmZmZmZmZmZmZmZmZ erd dlmZ  ej        e¦  «        Zej                             ed¦  «        Z g d¢Z!d d	l"m#Z$ d
„ Z% G d„ d¦  «        Z&i dej'        “dej(        “dej)        “dej*        “dej*        “dej+        “dej,        “dej-        “dej.        “dej/        “dej0        “dej1        “dd„ “dej2        “dej3        “dej4        “dej5        “i dej6        “d ej7        “d!ej8        “d"ej9        “d#ej9        “d$ej:        “d%ej:        “d&ej;        “d'ej<        “d(ej=        “d)e“d*e“d+e“d,e“d-e“d.ej>        “d/ej>        “¥Z?h d0£Z@d1„ ZAd2ZBeBD ][ZCd3eC› �ZDd4eD› �ZE eFe&eD eAeC¦  «        ¦  «          eGeeE¦  «        e?eD<   e@ )                    eD¦  «         e! H                    eD¦  «         Œ\dhZIe@eIz  ZJh d5£ZKh d6£ZLdhZMeKeMz  ZNh d7£ZOdd"hZPdd"d8œZQh d9£ZReBD ]ZCd3eC› �ZDeR )                    eD¦  «         Œh d:£ZSh d;£ZTd<„ ZUd=„ ZVd>„ ZWd?„ ZXd@„ ZYdA„ ZZdB„ Z[dC„ Z\dD„ Z]dE„ Z^dF„ Z_	 dpdH„Z`dI„ ZadJ„ Zbe`ej=        ej6        eXeYeZe[eae\ebeUeVeWe]e^dKœZcdL„ ZddM„ ZedN„ ZfdO„ ZgdP„ ZhdQ„ ZidR„ ZjdS„ ZkdT„ ZldU„ ZmdV„ ZndW„ ZodX„ Zpejq        e         ZrdY„ ZseBD ]-ZCdZeC› �Zt eseC¦  «        Zuetxeu_v        eu_         eFereteu¦  «         Œ.[u[C[td[„ Zwdqd\„Zxd]„ Zyd^„ Zzi ec¥i d-ej{        “dej'        “deh“d ei“dej“dek“del“dem“dee“def“d)ey“deg“d!ej8        “d,en“d+eo“d*ep“dew“¥exezd_œ¥Z|eBD ]ZCd3eC› �ZD eGerdZeC› �¦  «        e|eD<   Œ[C[D[B[rd`„ Z}da„ Z~db„ Zdc„ Z€dd„ Z�de„ Z‚df„ Zƒdg„ Z„e}ee€e‚eƒe„dhœZ…ej†        ej‡        diœZˆdj„ Z‰dk„ ZŠdl„ Z‹dm„ ZŒdn„ Z�e| Ž                    ¦   «         D ]\  Z�Z� eŒe�e�¦  «         Œe… Ž                    ¦   «         D ]\  Z�Z� e�e�e�¦  «         Œdo„ Z‘e| Ž                    ¦   «         D ]W\  Z�Z�e�eKv r e‘e�e¦  «         Œe�eOv r e‘e�e¦  «         Œ'e�eMv se�eLv r e‘e�e¦  «          e‘e�e¦  «         e�eQvr e‘e�e¦  «         ŒX[�[�dS )ré    )ÚannotationsN)Ú	lru_cacheÚupdate_wrapper)ÚOptionalÚTypeÚTYPE_CHECKINGÚUnion)Ú	sym_floatÚsym_iteÚsym_maxÚsym_minÚsym_notÚSymBoolÚSymFloatÚSymInt)ÚShapeEnvÚsym_node)ÚSymNodeÚmethod_to_operatorÚmagic_methods)Úpy_sym_typesc                óf   — | t           u rt          S | t          u rt          S | t          u rt
          S | S ©N)Úboolr   Úintr   Úfloatr   )Úts    úOC:\Projects\Historical\venv\Lib\site-packages\torch/fx/experimental/sym_node.pyÚ_to_symtyper   5   s1   € Ø�D€y€yÝˆØ�C€x€xÝˆØ�E€z€zÝˆØ€Hó    c                  ó–  — e Zd ZU dZdZded<   	 	 	 d`dad„Zdbd„Zdcd„Zddd„Z	e
d„ ¦   «         Ze
d„ ¦   «         Zd„ Zded„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dfd$„Zdgd%„Zdgd&„Zdedgd'„Z dgd(„Z!dgd)„Z"dgd*„Z#dgd+„Z$dgd,„Z%dgd-„Z&dgd.„Z'dgd/„Z(dgd0„Z)dgd1„Z*dgd2„Z+dgd3„Z,dgd4„Z-dgd5„Z.dgd6„Z/dgd7„Z0dgd8„Z1dgd9„Z2dgd:„Z3dgd;„Z4dgd<„Z5dgd=„Z6dgd>„Z7dgd?„Z8dgd@„Z9dgdA„Z:dgdB„Z;dgdC„Z<dgdD„Z=dgdE„Z>dgdF„Z?dgdG„Z@dgdH„ZAdgdI„ZBdgdJ„ZCdgdK„ZDdL„ ZEdM„ ZFdN„ ZGdO„ ZHdP„ ZIdgdQ„ZJdR„ ZKdS„ ZLdT„ ZMdgdU„ZNdV„ ZOdW„ ZPdX„ ZQdY„ ZRdZ„ ZSd[„ ZTd\„ ZUd]„ ZVd^„ ZWd_„ ZXdS )hr   z¤
    This is a type erased SymInt/SymFloat which we use to do actual operations.
    End users don't touch this.  Magic methods are NOT defined on this object.
    Fr   Ú_optimized_summationNÚhintú!Optional[Union[int, float, bool]]c                óÆ  ‡ — |‰ _         |‰ _        |‰ _        |‰ _        ˆ fd„}|�ˆt	          |¦  «        |u s;t	          |¦  «        t          |¦  «        u sJ d|› dt	          |¦  «        › �¦   «         ‚‰ j        r4‰ j        j        r( |¦   «         }	||	k    sJ |› d|	› d‰ j        › d�¦   «         ‚n
 |¦   «         }|‰ _        |‰ _	        ‰ j        o‰ j        j        }
|
o|‰ _
        d S )Nc                 óÖ   •— ddl m}   | ‰j        ¦  «        rd S ‰j                             ‰j        d¬¦  «        }|�,t          |t          ¦  «        s‰                     |¦  «        n|}|S )Nr   )Úhas_free_unbacked_symbolsT)Úcompute_hint)Ú%torch.fx.experimental.symbolic_shapesr'   ÚexprÚ	shape_envÚ_maybe_evaluate_staticÚ
isinstanceÚSymTypesÚpytype)r'   r#   Úselfs     €r   r(   z&SymNode.__init__.<locals>.compute_hint{   s   ø€ ØWÐWÐWÐWÐWÐWð )Ð(¨¬Ñ3Ô3ð Ø�tØ”>×8Ò8¸¼ÐQUÐ8ÑVÔVˆDØÐÝ0:¸4ÅÑ0JÔ0JÐT�t—{’{ 4Ñ(Ô(Ð(ÐPT�ØˆKr    zCannot create SymNode of type z  with incompatible hint of type z != z (for ú))Ú_exprr+   r/   r"   Útyper   Ú_translation_validation_enabledr*   Ú_hintÚconstantÚfx_node)r0   r*   r+   r/   r#   r6   r7   Úoptimized_summationr(   Úcomputed_hintÚtx_validation_ens   `          r   Ú__init__zSymNode.__init__Q   sG  ø€ ð ˆŒ
Ø"ˆŒØˆŒØ$7ˆÔ!ð:	ð 	ð 	ð 	ð 	ð ÐÝ˜‘:”: Ð'Ð'­4°©:¬:½ÀVÑ9LÔ9LÐ+LÐ+LÐ+LðHØðHð HÝ;?À¹:¼:ðHð Hñ ,MÔ+LÐLð Œ~ð B $¤.Ô"Pð Bð !- ¡¤�à˜MÒ)Ð)Ð)ØÐAÐA ÐAÐA°T´YÐAÐAÐAñ *Ô)Ð)øð  �<‘>”>ˆDØˆŒ
Ø;CˆŒð ŒNÐM˜tœ~ÔMð 	ð (Ð3¨GˆŒˆˆr    r+   r   Úreturnc                ó\   — t          | j        || j        | j        | j        | j        ¦  «        S r   )r   r2   r/   r5   r6   r7   )r0   r+   s     r   Úwith_shape_envzSymNode.with_shape_env£   s+   € ÝØŒJ˜	 4¤;°´
¸D¼MÈ4Ì<ñ
ô 
ð 	
r    Úotherc                ó¢   — | j         |j         k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r   )r2   r/   r5   r6   r7   ©r0   r?   s     r   Ú	_value_eqzSymNode._value_eq¨   s]   € ð ŒJ˜%œ+Ò%ð .Ø”˜uœ|Ò+ð.à”
˜eœkÒ)ð.ð ” ¤Ò/ð.ð ” ¤Ò-ð	
r    r   c                ó\   — t          | j        | j        | j        | j        | j        f¦  «        S r   )Úhashr2   r/   r5   r6   r7   ©r0   s    r   Ú_value_hashzSymNode._value_hash²   s%   € å�T”Z ¤¨d¬j¸$¼-ÈÌÐVÑWÔWÐWr    c                ó@   — | j                              | j        ¦  «        S r   )r+   Úreplacer2   rE   s    r   r*   zSymNode.expr¶   s   € àŒ~×%Ò% d¤jÑ1Ô1Ð1r    c                ó   — | j         S r   ©r5   rE   s    r   r#   zSymNode.hintº   s
   € àŒzÐr    c                ó   — | j         d uS r   rJ   rE   s    r   Úhas_hintzSymNode.has_hint¾   s   € ØŒz Ð%Ð%r    c                ód   — | j         €#|�|S | j                             | j        ¦  «        S | j         S r   )r5   r+   Ú	size_hintr*   )r0   Úfallbacks     r   Úrequire_hintzSymNode.require_hintÁ   s5   € ØŒ:ÐØÐ#Ø�à”>×+Ò+¨D¬IÑ6Ô6Ð6ØŒzÐr    c                óF   — | j         j        rt          | j         ¦  «        S d S r   )r*   Ú	is_numberr   rE   s    r   Úmaybe_as_intzSymNode.maybe_as_intÉ   s"   € ØŒ9Ôð 	Ý�t”y‘>”>Ð!à�4r    c                ój   — dd l }t          | j        |j        ¦  «        rt	          | j        ¦  «        S d S ©Nr   )Úsympyr-   r*   ÚFloatr   ©r0   rV   s     r   Úmaybe_as_floatzSymNode.maybe_as_floatÐ   s6   € Øˆˆˆå�d”i ¤Ñ-Ô-ð 	Ý˜œÑ#Ô#Ð#à�4r    c                óN   — dd l }| j        |j        u rdS | j        |j        u rdS d S )Nr   TF)rV   r*   ÚtrueÚfalserX   s     r   Úmaybe_as_boolzSymNode.maybe_as_boolØ   s8   € ØˆˆˆàŒ9˜œ
Ð"Ð"Ø�4ØŒY˜%œ+Ð%Ð%Ø�5à�4r    c                ó   — | j         t          u S r   )r/   r   rE   s    r   Úis_intzSymNode.is_intâ   s   € ØŒ{�cÐ!Ð!r    c                ó   — | j         t          u S r   )r/   r   rE   s    r   Úis_floatzSymNode.is_floatå   s   € ØŒ{�eÐ#Ð#r    c                ó   — | j         t          u S r   )r/   r   rE   s    r   Úis_boolzSymNode.is_boolè   s   € ØŒ{�dÐ"Ð"r    c                ó„   — | j         d uo7t          | j         t          ¦  «        o| j         j                             ¦   «         S r   )r5   r-   r   ÚnodeÚis_nested_intrE   s    r   rf   zSymNode.is_nested_intë   s?   € ð ŒJ˜dÐ"ð 0Ý˜4œ:¥vÑ.Ô.ð0à”
”×-Ò-Ñ/Ô/ð	
r    c                óž   — t          |¦  «        t          u sJ ‚dd l}t          |                     |¦  «        | j        t          |||¬¦  «        S ©Nr   )r6   r7   )r3   r   rV   r   ÚIntegerr+   ©r0   ÚnumrV   s      r   Úwrap_intzSymNode.wrap_intó   sU   € Ý�C‰yŒy�CÐÐÐÐØˆˆˆåØ�MŠM˜#ÑÔ ¤µ°SÀ3ÐPSð
ñ 
ô 
ð 	
r    c                óž   — t          |¦  «        t          u sJ ‚dd l}t          |                     |¦  «        | j        t          |||¬¦  «        S rh   )r3   r   rV   r   rW   r+   rj   s      r   Ú
wrap_floatzSymNode.wrap_floatû   sU   € Ý�C‰yŒy�EÐ!Ð!Ð!Ð!ØˆˆˆåØ�KŠK˜ÑÔ˜dœn­e°SÀ3ÐPSð
ñ 
ô 
ð 	
r    c                ó”   — t          |¦  «        t          u sJ ‚dd l}t          |r|j        n|j        | j        t          |||¬¦  «        S rh   )r3   r   rV   r   r[   r\   r+   rj   s      r   Ú	wrap_boolzSymNode.wrap_bool  sZ   € Ý�C‰yŒy�DÐ Ð Ð Ð ØˆˆˆåØÐ.ˆEŒJˆJ 5¤;ØŒNÝØØØð
ñ 
ô 
ð 	
r    c                ó   — | S r   © rE   s    r   ÚclonezSymNode.clone  s   € Øˆr    c                ó   — | j         › S r   ©r*   rE   s    r   ÚstrzSymNode.str  s   € Ø”)ˆ~Ðr    c                ó*   — |                       ¦   «         S r   ©rv   rE   s    r   Ú__str__zSymNode.__str__  s   € Ø�xŠx‰zŒzÐr    c                ó@  — d| j         › d| j        › d| j        › �g}| j        �|                     d| j        › �¦  «         | j        �|                     d| j        › �¦  «         | j        �|                     d| j        › �¦  «         d                     |¦  «        dz   S )	NzSymNode(z, shape_env=z	, pytype=zhint=z	constant=zfx_node=z, r1   )r2   r+   r/   r5   Úappendr6   r7   Újoin)r0   Úreps     r   Ú__repr__zSymNode.__repr__  s°   € àU�t”zÐUÐU¨t¬~ÐUÐUÈÌÐUÐUð
ˆð Œ:Ð!Ø�JŠJÐ+˜tœzÐ+Ð+Ñ,Ô,Ð,ØŒ=Ð$Ø�JŠJÐ2 4¤=Ð2Ð2Ñ3Ô3Ð3ØŒ<Ð#Ø�JŠJÐ0 $¤,Ð0Ð0Ñ1Ô1Ð1Ø�yŠy˜‰~Œ~ Ñ#Ð#r    úbuiltins.strc                ó*   — |                       ¦   «         S r   rx   rE   s    r   Ú_graph_reprzSymNode._graph_repr%  s   € à�xŠx‰zŒzÐr    c                ó*   — |                       ¦   «         S r   )Ú_absrE   s    r   ÚabszSymNode.abs+  ó   € Ø�yŠy‰{Œ{Ðr    c                ó*   — |                       ¦   «         S r   )Ú_posrE   s    r   ÚposzSymNode.pos.  r…   r    c                ó,   — |                       |¦  «        S r   )Ú_round)r0   Úndigitss     r   ÚroundzSymNode.round1  s   € Ø�{Š{˜7Ñ#Ô#Ð#r    c                ó*   — |                       ¦   «         S r   )Ú_truncrE   s    r   ÚtrunczSymNode.trunc4  ó   € Ø�{Š{‰}Œ}Ðr    c                ó,   — |                       |¦  «        S r   )Ú_addrA   s     r   ÚaddzSymNode.add7  ó   € Ø�yŠy˜ÑÔÐr    c                ó,   — |                       |¦  «        S r   )Ú_subrA   s     r   ÚsubzSymNode.sub:  r”   r    c                ó,   — |                       |¦  «        S r   )Ú_mulrA   s     r   ÚmulzSymNode.mul=  r”   r    c                ó,   — |                       |¦  «        S r   )Ú_modrA   s     r   ÚmodzSymNode.mod@  r”   r    c                ó,   — |                       |¦  «        S r   )Ú
_float_powrA   s     r   Ú	float_powzSymNode.float_powC  s   € Ø�Š˜uÑ%Ô%Ð%r    c                ó,   — |                       |¦  «        S r   )Ú_pow_by_naturalrA   s     r   Úpow_by_naturalzSymNode.pow_by_naturalF  s   € Ø×#Ò# EÑ*Ô*Ð*r    c                ó,   — |                       |¦  «        S r   )Ú_and_rA   s     r   Úand_zSymNode.and_I  s   € Ø�zŠz˜%Ñ Ô Ð r    c                ó,   — |                       |¦  «        S r   )Ú_or_rA   s     r   Úor_zSymNode.or_L  r”   r    c                ó,   — |                       |¦  «        S r   )Ú_float_truedivrA   s     r   Úfloat_truedivzSymNode.float_truedivO  s   € Ø×"Ò" 5Ñ)Ô)Ð)r    c                ó,   — |                       |¦  «        S r   )Ú_int_truedivrA   s     r   Úint_truedivzSymNode.int_truedivR  ó   € Ø× Ò  Ñ'Ô'Ð'r    c                ó,   — |                       |¦  «        S r   )Ú_int_floordivrA   s     r   Úint_floordivzSymNode.int_floordivU  ó   € Ø×!Ò! %Ñ(Ô(Ð(r    c                ó,   — |                       |¦  «        S r   )Ú_lshiftrA   s     r   ÚlshiftzSymNode.lshiftX  ó   € Ø�|Š|˜EÑ"Ô"Ð"r    c                ó,   — |                       |¦  «        S r   )Ú_rshiftrA   s     r   ÚrshiftzSymNode.rshift[  r¸   r    c                ó*   — |                       ¦   «         S r   )Ú_sym_notrE   s    r   r   zSymNode.sym_not^  ó   € Ø�}Š}‰ŒÐr    c                ó,   — |                       |¦  «        S r   )Ú_eqrA   s     r   Úeqz
SymNode.eqa  ó   € Ø�xŠx˜‰ŒÐr    c                ó,   — |                       |¦  «        S r   )Ú_nerA   s     r   Únez
SymNode.ned  rÂ   r    c                ó,   — |                       |¦  «        S r   )Ú_gtrA   s     r   Úgtz
SymNode.gtg  rÂ   r    c                ó,   — |                       |¦  «        S r   )Ú_ltrA   s     r   Últz
SymNode.ltj  rÂ   r    c                ó,   — |                       |¦  «        S r   )Ú_lerA   s     r   Úlez
SymNode.lem  rÂ   r    c                ó,   — |                       |¦  «        S r   )Ú_gerA   s     r   Úgez
SymNode.gep  rÂ   r    c                ó*   — |                       ¦   «         S r   )Ú_floorrE   s    r   ÚfloorzSymNode.floors  r�   r    c                ó*   — |                       ¦   «         S r   )Ú_is_integerrE   s    r   Ú
is_integerzSymNode.is_integerv  s   € Ø×ÒÑ!Ô!Ð!r    c                ó*   — |                       ¦   «         S r   )Ú
_sym_floatrE   s    r   r
   zSymNode.sym_floaty  s   € Ø�ŠÑ Ô Ð r    c                ó*   — |                       ¦   «         S r   )Ú_sym_intrE   s    r   Úsym_intzSymNode.sym_int|  r¾   r    c                ó*   — |                       ¦   «         S r   )Ú_ceilrE   s    r   ÚceilzSymNode.ceil  s   € Ø�zŠz‰|Œ|Ðr    c                ó*   — |                       ¦   «         S r   )Ú_negrE   s    r   ÚnegzSymNode.neg‚  r…   r    c                ó,   — |                       |¦  «        S r   )Ú_sym_minrA   s     r   r   zSymNode.sym_min…  ó   € Ø�}Š}˜UÑ#Ô#Ð#r    c                ó,   — |                       |¦  «        S r   )Ú_sym_maxrA   s     r   r   zSymNode.sym_maxˆ  rå   r    c                ó.   — |                       ||¦  «        S r   )Ú_sym_ite)r0   Úthen_valÚelse_vals      r   r   zSymNode.sym_ite‹  s   € Ø�}Š}˜X xÑ0Ô0Ð0r    c                ó.   — |                       ||¦  «        S r   )Ú_is_contiguous©r0   ÚsizesÚstridess      r   Úis_contiguouszSymNode.is_contiguousŽ  s   € Ø×"Ò" 5¨'Ñ2Ô2Ð2r    c                ó.   — |                       ||¦  «        S r   )Ú_is_channels_last_contiguous_2drî   s      r   Úis_channels_last_contiguous_2dz&SymNode.is_channels_last_contiguous_2d‘  ó   € Ø×3Ò3°E¸7ÑCÔCÐCr    c                ó.   — |                       ||¦  «        S r   )Ú_is_channels_last_contiguous_3drî   s      r   Úis_channels_last_contiguous_3dz&SymNode.is_channels_last_contiguous_3d”  rõ   r    c                ó.   — |                       ||¦  «        S r   )Ú_is_channels_last_strides_2drî   s      r   Úis_channels_last_strides_2dz#SymNode.is_channels_last_strides_2d—  ó   € Ø×0Ò0°¸Ñ@Ô@Ð@r    c                ó.   — |                       ||¦  «        S r   )Ú_is_channels_last_strides_3drî   s      r   Úis_channels_last_strides_3dz#SymNode.is_channels_last_strides_3dš  rü   r    c                ó.   — |                       ||¦  «        S r   )Ú'_is_non_overlapping_and_dense_indicatorrî   s      r   Ú&is_non_overlapping_and_dense_indicatorz.SymNode.is_non_overlapping_and_dense_indicator�  s   € Ø×;Ò;¸EÀ7ÑKÔKÐKr    c                ó,   — |                       |¦  «        S r   )r©   rA   s     r   Úsym_orzSymNode.sym_or¡  rÂ   r    c                ó,   — |                       |¦  «        S r   )r¦   rA   s     r   Úsym_andzSymNode.sym_and¤  r”   r    c                ó,   — |                       |¦  «        S r   )Ú_bitwise_andrA   s     r   Úbitwise_andzSymNode.bitwise_and¨  r°   r    c                ó,   — |                       |¦  «        S r   )Ú_bitwise_orrA   s     r   Ú
bitwise_orzSymNode.bitwise_or«  s   € Ø×Ò Ñ&Ô&Ð&r    c                ó,   — |                       |¦  «        S r   )r¬   rA   s     r   ÚtruedivzSymNode.truediv¯  r´   r    c                ó,   — |                       |¦  «        S r   )r³   rA   s     r   ÚfloordivzSymNode.floordiv²  r°   r    c                ó,   — |                       |¦  «        S r   )r    rA   s     r   ÚpowzSymNode.pow¶  s   € Ø�~Š~˜eÑ$Ô$Ð$r    c                óp   — |                       ||¦  «                             t          | d¦  «        ¦  «        S )Né   )r  rÁ   Úto_noderî   s      r   Úis_non_overlapping_and_densez$SymNode.is_non_overlapping_and_dense¹  s2   € Ø×:Ò:¸5À'ÑJÔJ×MÒMÍgÐVZÐ\]ÑN^ÔN^Ñ_Ô_Ð_r    c                ó.   — |                       dd¦  «        S ©NÚ r   )Ú	guard_intrE   s    r   Úint_zSymNode.int_¼  s   € Ø�~Š~˜b !Ñ$Ô$Ð$r    c           
     ó  — dd l }ddlm}m}  |¦   «         r=t	          |  |t
          j        t          d„ |D ¦   «         ¦  «        fi ¦  «        ¦  «        S d„ |D ¦   «         } |j        |Ž }g }d }|D ]%}	|	j	        € n*| 
                    |	j	        ¦  «         Œ&t          |¦  «        }| j                             t
          j        t          d„ |D ¦   «         ¦  «        f¦  «        \  }
}t          || j        t          ||
¬¦  «        S )Nr   ©Úget_proxy_modeÚhandle_sym_dispatchc              3  ó4   K  — | ]}t          |¦  «        V — Œd S r   ©Ú	wrap_node©Ú.0Úas     r   ú	<genexpr>z"SymNode.sym_sum.<locals>.<genexpr>Ñ  s(   è è € Ð6Ð6¨A�9 Q™<œ<Ð6Ð6Ð6Ð6Ð6Ð6r    c                ó   — g | ]	}|j         ‘Œ
S rr   ru   r#  s     r   ú
<listcomp>z#SymNode.sym_sum.<locals>.<listcomp>Õ  s   € Ð&Ð&Ð&˜A�”Ð&Ð&Ð&r    c              3  ó$   K  — | ]}|j         V — Œd S r   ©r7   r#  s     r   r&  z"SymNode.sym_sum.<locals>.<genexpr>â  s$   è è € Ð!:Ð!:° !¤)Ð!:Ð!:Ð!:Ð!:Ð!:Ð!:r    r*  )rV   Ú"torch.fx.experimental.proxy_tensorr  r  r  ÚtorchÚsym_sumÚtupleÚAddr#   r{   Úsumr+   Ú_create_fx_call_functionr   r   )r0   ÚargsrV   r  r  ÚexprsÚoutÚ
size_hintsÚout_hintr%  r7   Ú_s               r   r-  zSymNode.sym_sumÃ  sT  € Øˆˆˆð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
 ˆ>ÑÔð 	ÝØØ#Ð#Ý”MÝÐ6Ð6°Ð6Ñ6Ô6Ñ6Ô6Ð8Øñô ñô ð ð 'Ð& Ð&Ñ&Ô&ˆØˆeŒi˜Ðˆàˆ
ØˆØð 	'ð 	'ˆAØŒvˆ~Ø�Ø×Ò˜aœfÑ%Ô%Ð%Ð%å˜:‘”ˆHà”^×<Ò<ÝŒM�EÐ!:Ð!:°TÐ!:Ñ!:Ô!:Ñ:Ô:Ð<ñ
ô 
‰
ˆ�õ
 �s˜DœN­C°À7ÐKÑKÔKÐKr    c                óÎ   — | j                              | j        | j        | j        ¬¦  «        }	 t          |¦  «        S # t          $ r t                               d|¦  «         ‚ w xY w)Nr*  zFailed to convert to int: %s)	r+   Úevaluate_exprr*   r#   r7   r   Ú	ExceptionÚlogÚwarning©r0   ÚfileÚlineÚrs       r   r  zSymNode.guard_inté  si   € ð ŒN×(Ò(¨¬°D´IÀtÄ|Ð(ÑTÔTˆð	Ý�q‘6”6ˆMøÝð 	ð 	ð 	Ý�KŠKÐ6¸Ñ:Ô:Ð:Øð	øøøó	   ®= ½'A$c                óÎ   — | j                              | j        | j        | j        ¬¦  «        }	 t          |¦  «        S # t          $ r t                               d|¦  «         ‚ w xY w)Nr*  zFailed to convert to float: %s)	r+   r9  r*   r#   r7   r   r:  r;  r<  r=  s       r   Úguard_floatzSymNode.guard_floató  si   € ð ŒN×(Ò(¨¬°D´IÀtÄ|Ð(ÑTÔTˆð	Ý˜‘8”8ˆOøÝð 	ð 	ð 	Ý�KŠKÐ8¸!Ñ<Ô<Ð<Øð	øøørA  c                óÎ   — | j                              | j        | j        | j        ¬¦  «        }	 t          |¦  «        S # t          $ r t                               d|¦  «         ‚ w xY w)Nr*  úFailed to convert to bool: %s©	r+   r9  r*   r#   r7   r   r:  r;  r<  r=  s       r   Ú
guard_boolzSymNode.guard_boolý  si   € ð ŒN×(Ò(¨¬°D´IÀtÄ|Ð(ÑTÔTˆð	Ý˜‘7”7ˆNøÝð 	ð 	ð 	Ý�KŠKÐ7¸Ñ;Ô;Ð;Øð	øøørA  c                óò   — ddl m} |                      ¦   «         r2 || j        ¦  «        s"| j        j        s|                      ||¦  «        S | j                             | j        |› d|› �| j        ¬¦  «        S )Nr   )Úfree_unbacked_symbolsú:r*  )	r)   rI  rL   r*   r+   Ú+prefer_deferred_runtime_asserts_over_guardsrG  Údefer_runtime_assertr7   )r0   r>  r?  rI  s       r   Úexpect_truezSymNode.expect_true  sš   € ØOÐOÐOÐOÐOÐOð �MŠM‰OŒOð	/à)Ð)¨$¬)Ñ4Ô4ð	/ð ”NÔNð	/ð —?’? 4¨Ñ.Ô.Ð.ð
 Œ~×2Ò2ØŒI˜$Ð'Ð' Ð'Ð'°´ð 3ñ 
ô 
ð 	
r    c                óê   — ddl m} |                      |                      d¦  «        ¦  «        }|                     ||¦  «        }|r,|                      ¦   «         s |t          | ¦  «        ¦  «         |S )Nr   )Ú_advise_is_size)r)   rO  rÑ   rl   rM  rL   r   )r0   r>  r?  rO  Úbr@  s         r   Úexpect_sizezSymNode.expect_size  sx   € ØIÐIÐIÐIÐIÐIà�GŠG�D—M’M !Ñ$Ô$Ñ%Ô%ˆà�MŠM˜$ Ñ%Ô%ˆð
 ð 	*�T—]’]‘_”_ð 	*ØˆO�F 4™LœLÑ)Ô)Ð)Øˆr    c                óÐ   — | j                              | j        | j        | j        d¬¦  «        }	 t          |¦  «        S # t          $ r t                               d|¦  «         ‚ w xY w)aN  
        Like guard_bool, but if we encounter unbacked symbols, if those symbols
        are size-like, we will treat them as >= 2 for the purposes of the analysis.

        This CHANGES the runtime semantics, but all size-oblivious sites have been
        audited to ensure that the runtime semantics don't change in a material way.
        Acceptable runtime semantic changes are, e.g., squeeze() no longer dropping
        an unbacked one size, or a tensor reporting as non-contiguous even if it's
        contiguous if it would have been reported contiguous due to being empty.
        T)r7   Úsize_obliviousrE  rF  r=  s       r   Úguard_size_obliviouszSymNode.guard_size_oblivious'  sr   € ð ŒN×(Ò(ØŒI�t”y¨$¬,Àtð )ñ 
ô 
ˆð	Ý˜‘7”7ˆNøÝð 	ð 	ð 	Ý�KŠKÐ7¸Ñ;Ô;Ð;Øð	øøøs	   ¯> ¾'A%c                ó.   — |                       dd¦  «        S r  )rG  rE   s    r   Úbool_zSymNode.bool_=  s   € Ø�Š˜r 1Ñ%Ô%Ð%r    c                ó   — dS )NTrr   rE   s    r   Úis_symboliczSymNode.is_symbolic@  ó   € Øˆtr    c                ó   — d S r   rr   rE   s    r   Ú
nested_intzSymNode.nested_intC  rY  r    c                ó   — dS )NFrr   rE   s    r   Úis_constantzSymNode.is_constantF  s   € Øˆur    )NNF)r#   r$   )r+   r   r<   r   )r?   r   r<   r   )r<   r   r   )r<   r   )r<   r   )YÚ__name__Ú
__module__Ú__qualname__Ú__doc__r"   Ú__annotations__r;   r>   rB   rF   Úpropertyr*   r#   rL   rP   rS   rY   r]   r_   ra   rc   rf   rl   rn   rp   rs   rv   ry   r~   r�   r„   rˆ   rŒ   r�   r“   r—   rš   r�   r    r£   r¦   r©   r¬   r¯   r³   r·   r»   r   rÁ   rÅ   rÈ   rË   rÎ   rÑ   rÔ   r×   r
   rÜ   rß   râ   r   r   r   rñ   rô   rø   rû   rÿ   r  r  r  r	  r  r  r  r  r  r  r-  r  rC  rG  rM  rQ  rT  rV  rX  r[  r]  rr   r    r   r   r   B   s@  € € € € € € ðð ð "'ÐÐ&Ð&Ð&Ñ&ð ØØ!ðP4ð P4ð P4ð P4ð P4ðd
ð 
ð 
ð 
ð

ð 
ð 
ð 
ðXð Xð Xð Xð ð2ð 2ñ „Xð2ð ðð ñ „Xðð&ð &ð &ðð ð ð ðð ð ðð ð ðð ð ð"ð "ð "ð$ð $ð $ð#ð #ð #ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ðð ð ðð ð ðð ð ð
$ð 
$ð 
$ðð ð ð ðð ð ð ðð ð ð ð$ð $ð $ð $ð $ðð ð ð ð ð  ð  ð  ð ð  ð  ð  ð ð  ð  ð  ð ð  ð  ð  ð&ð &ð &ð &ð+ð +ð +ð +ð!ð !ð !ð !ð ð  ð  ð  ð*ð *ð *ð *ð(ð (ð (ð (ð)ð )ð )ð )ð#ð #ð #ð #ð#ð #ð #ð #ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ð"ð "ð "ð "ð!ð !ð !ð !ðð ð ð ðð ð ð ðð ð ð ð$ð $ð $ð $ð$ð $ð $ð $ð1ð 1ð 1ð 1ð3ð 3ð 3ð 3ðDð Dð Dð DðDð Dð Dð DðAð Að Að AðAð Að Að AðLð Lð Lð Lðð ð ð ð  ð  ð(ð (ð (ð'ð 'ð 'ð)ð )ð )ð(ð (ð (ð (ð%ð %ð %ð`ð `ð `ð%ð %ð %ð#Lð #Lð #Lð #LðLð ð ðð ð ðð ð ð
ð 
ð 
ð$ð ð ðð ð ð,&ð &ð &ðð ð ðð ð ðð ð ð ð r    r   rˆ   r„   r“   Úandr	  rß   rÁ   rÔ   r�   r³   rÑ   rÈ   r×   c                ó*   — |                       ¦   «         S r   )r×   ©Úxs    r   ú<lambda>rh  X  s   € ˜AŸLšL™NœN€ r    rÎ   r·   rË   r�   rš   rÅ   râ   Úorr  r    r£   rŒ   r»   r—   r
   r   r   r   r   r¬   r¯   >	   r„   râ   rˆ   rß   rÔ   r�   rÜ   r   r
   c                ó   ‡ — ˆ fd„}|S )Nc                ó:   •—  t          | d‰› �¦  «        ¦   «         S )NÚ_sym_)Úgetattr)r0   Únames    €r   Úfnz_get_sym_node_fn.<locals>.fn  s!   ø€ Ø,�w�t˜^ T˜^˜^Ñ,Ô,Ñ.Ô.Ð.r    rr   ©rn  ro  s   ` r   Ú_get_sym_node_fnrq  ~  s#   ø€ ð/ð /ð /ð /ð /ð €Ir    )ÚsqrtÚcosÚcoshÚsinÚsinhÚtanÚtanhÚasinÚacosÚatanÚlog2Úsym_r7  >   ri  rd  r   r   >   r“   rš   r—   >   rŒ   rÜ   Úsym_log2r×   )r	  r  >   r    r
   r¯   r¬   >   rß   rÔ   r�   r£   >   rÁ   rÑ   rÈ   rÎ   rË   rÅ   ri  rd  r   r×   r  c                ó&   — ddl m}  || |¦  «        S )Nr   )ÚFloatTrueDiv)Útorch.utils._sympy.functionsr€  )r%  rP  r€  s      r   Ú_sympy_float_truedivr‚  Ð  ó&   € Ø9Ð9Ð9Ð9Ð9Ð9àˆ<˜˜1ÑÔÐr    c                ó&   — ddl m}  || |¦  «        S )Nr   )Ú
IntTrueDiv)r�  r…  )r%  rP  r…  s      r   Ú_sympy_int_truedivr†  Ö  s&   € Ø7Ð7Ð7Ð7Ð7Ð7àˆ:�a˜ÑÔÐr    c                ó&   — ddl m}  || |¦  «        S )Nr   )ÚFloorDiv)r�  rˆ  )r%  rP  rˆ  s      r   Ú_sympy_floordivr‰  Ü  ó$   € Ø5Ð5Ð5Ð5Ð5Ð5àˆ8�A�q‰>Œ>Ðr    c                ó^   — ddl m}m} | j        r|j        r || |¦  «        S  || |¦  «        S )Nr   ©ÚModÚ	PythonMod)r�  r�  rŽ  Úis_nonnegative)r%  rP  r�  rŽ  s       r   Ú
_sympy_modr�  â  sO   € Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;àÔð ˜AÔ,ð Øˆs�1�a‰yŒyÐàˆy˜˜A‰ŒÐr    c                ó&   — ddl m}  || |¦  «        S )Nr   )ÚPowByNatural)r�  r’  )r%  rP  r’  s      r   Ú_sympy_pow_by_naturalr“  ë  rƒ  r    c                ó&   — ddl m}  || |¦  «        S )Nr   )ÚFloatPow)r�  r•  )r%  rP  r•  s      r   Ú_sympy_float_powr–  ñ  rŠ  r    c                ó6   — dd l }|                     | |¦  «        S rU   )rV   ÚAnd©r%  rP  rV   s      r   Ú
_sympy_andrš  ÷  s   € Ø€L€L€Là�9Š9�Q˜‰?Œ?Ðr    c                ó6   — dd l }|                     | |¦  «        S rU   )rV   ÚOrr™  s      r   Ú	_sympy_orr�  ý  ó   € Ø€L€L€Là�8Š8�A�q‰>Œ>Ðr    c                ó&   — ddl m}  || |¦  «        S )Nr   )ÚLShift)r�  r   )r%  rP  r   s      r   Ú_sympy_lshiftr¡    ó$   € Ø3Ð3Ð3Ð3Ð3Ð3àˆ6�!�Q‰<Œ<Ðr    c                ó&   — ddl m}  || |¦  «        S )Nr   )ÚRShift)r�  r¤  )r%  rP  r¤  s      r   Ú_sympy_rshiftr¥  	  r¢  r    c                ó¸  — t          | ¦  «        dk    r|gS ddlm}m}  || d         ¦  «         ||¦  «        k     r| |gz   S  || d         ¦  «         ||¦  «        k    r|g| z   S dt          | ¦  «        dz
  }}||k    rC||z   dz  }|                     | |         |¦  «        }|dk    rdS |dk     r|dz   }n|dz
  }||k    °C|                      ||¦  «         | S )zs
    If new_arg is found in ordered_args None is returned, else the new
    ordered_args with new_arg inserted
    r   )Ú_args_sortkeyÚBasicéÿÿÿÿr  é   N)ÚlenÚsympy.core.basicr§  r¨  ÚcompareÚinsert)Úordered_argsÚnew_argÚsort_keyr¨  ÚlowÚhighÚmidÚcompare_results           r   Ú_binary_search_insert_argr¶    s9  € õ
 ˆ<ÑÔ˜AÒÐØˆyÐàAÐAÐAÐAÐAÐAÐAÐAð €x�˜RÔ Ñ!Ô! H H¨WÑ$5Ô$5Ò5Ð5Ø˜w˜iÑ'Ð'ð €x�˜Q”Ñ Ô  8 8¨GÑ#4Ô#4Ò4Ð4Øˆy˜<Ñ'Ð'à•3�|Ñ$Ô$ qÑ(ˆ€Cà
�Š+ˆ+Ø�T‰z˜aÑˆØŸš |°CÔ'8¸'ÑBÔBˆØ˜QÒÐØ�4Ø˜aÒÐØ˜‘'ˆCˆCà˜‘7ˆDð �Š+ˆ+ð ×Ò˜˜WÑ%Ô%Ð%ØÐr    Fc                ó¬  ‡	— ddl Š	ddlm} ˆ	fd„}ddlm} | || ¦  «        z  }| ||¦  «        z  }|rŽ|rŒ || j        d         ¦  «         ||j        d         ¦  «        k     r || j        |j        z   ¦  «        S  || j        d         ¦  «         ||j        d         ¦  «        k    r ||j        | j        z   ¦  «        S |r6|j        r/t          t          | j        ¦  «        |¦  «        }|� ||¦  «        S |r6| j        r/t          t          |j        ¦  «        | ¦  «        }|� ||¦  «        S ‰	 	                    | |¦  «        } ||¦  «        |fS )a÷  
    Custom optimization for Add used to optimize incremental binary summations of certain properties. The idea
    is when we know the expression is a summation of unique symbols all we need to know is the correct order of symbols,
    and no other optimizations are needed. We pass evaluate=false, with the correct order of args and save the following.
    1. Avoid running other optimizations when the Add is constructed.
    2. Manually figure out the order of the args for the new expression in log(n) comparisons instead of nLog(n)
    (comparing terms is expensive and shows in the profiles).
    The function returns a tuple of (1) a boolean that indicates whether the output is a summation of unique symbols,
    (2) the result sympy expression.
    r   N)r§  c                ó&   •—  ‰j         | ddiŽ}d|fS )NÚevaluateFT)r/  )r¯  ÚresultrV   s     €r   Úmake_optimizedz&_optimized_add.<locals>.make_optimizedA  s#   ø€ Ø�”˜LÐ9°5Ð9Ð9ˆØ�fˆ~Ðr    )Ú_is_symbols_binary_summationr©  )
rV   r¬  r§  r�  r¼  Ú_argsÚ	is_symbolr¶  Úlistr/  )
ÚlhsÚrhsÚlhs_is_optimized_summationÚrhs_is_optimized_summationÚsortkeyr»  r¼  Únew_argsrº  rV   s
            @r   Ú_optimized_addrÆ  1  s½  ø€ ð €L€L€LØ9Ð9Ð9Ð9Ð9Ð9ðð ð ð ð ð JÐIÐIÐIÐIÐIàÐ">Ð">¸sÑ"CÔ"CÑCÐØÐ">Ð">¸sÑ"CÔ"CÑCÐà!ð 9Ð&@ð 9àˆ7�3”9˜R”=Ñ!Ô! G G¨C¬I°a¬LÑ$9Ô$9Ò9Ð9Ø!�> #¤)¨c¬iÑ"7Ñ8Ô8Ð8àˆ7�3”9˜Q”<Ñ Ô  7 7¨3¬9°R¬=Ñ#9Ô#9Ò9Ð9Ø!�> #¤)¨c¬iÑ"7Ñ8Ô8Ð8ð "ð , c¤mð ,Ý,­T°#´)©_¬_¸cÑBÔBˆØÐØ!�> (Ñ+Ô+Ð+ð "ð , c¤mð ,Ý,­T°#´)©_¬_¸cÑBÔBˆØÐØ!�> (Ñ+Ô+Ð+à�YŠY�s˜CÑ Ô €FØ(Ð(¨Ñ0Ô0°&Ð9Ð9r    c                ó&   — ddl m}  || |¦  «        S )Nr   )ÚBitwiseFn_bitwise_and)r�  rÈ  )r%  rP  rÈ  s      r   r  r  b  s'   € ØBÐBÐBÐBÐBÐBà Ð   AÑ&Ô&Ð&r    c                ó&   — ddl m}  || |¦  «        S )Nr   )ÚBitwiseFn_bitwise_or)r�  rÊ  )r%  rP  rÊ  s      r   r  r  h  s'   € ØAÐAÐAÐAÐAÐAàÐ  1Ñ%Ô%Ð%r    )r“   r—   rš   r�   r£   r    rd  r	  ri  r  r¬   r¯   r³   r·   r»   c                óâ  — dd l }t          | |j        ¦  «        rt| j        }t	          |¦  «        dk    rZt          |d         |j        ¦  «        r?|d         j        r2|                     |d         ¦  «        }|d         |k    r||d         z  S t          | |j        ¦  «        r| |                     | ¦  «        k    st          | |j        ¦  «        r|                     | ¦  «        S  || ¦  «        S )Nr   rª  r  )rV   r-   ÚMulr2  r«  rW   r×   ri   )r%  ro  rV   ÚaaÚcoefs        r   Ú_floor_ceil_helperrÏ  �  sä   € Ø€L€L€Lå�!�U”YÑÔð $ØŒVˆÝˆr‰7Œ7�aŠ<ˆ<�J r¨!¤u¨e¬kÑ:Ô:ˆ<¸rÀ!¼uÔ?Oˆ<Ø—=’=  A¤Ñ'Ô'ˆDØ�!Œu˜Š}ˆ}Ø˜b œe‘|Ð#å�1�e”kÑ"Ô"ð à�—’˜qÑ!Ô!Ò!Ð!Ý�a˜œÑ'Ô'ð "ð �}Š}˜QÑÔÐØˆ2ˆa‰5Œ5€Lr    c                ó$   — ddl m}  || ¦  «        S )Nr   )Ú
FloorToInt)r�  rÑ  )r%  rÑ  s     r   Ú_sympy_floorrÒ  “  ó"   € Ø7Ð7Ð7Ð7Ð7Ð7àˆ:�a‰=Œ=Ðr    c                ó$   — ddl m}  || ¦  «        S )Nr   )Ú
TruncToInt)r�  rÕ  )r%  rÕ  s     r   Ú_sympy_truncrÖ  ›  rÓ  r    c                ó$   — ddl m}  || ¦  «        S )Nr   )Ú	CeilToInt)r�  rØ  )r%  rØ  s     r   Ú_sympy_ceilrÙ  ¡  s"   € Ø6Ð6Ð6Ð6Ð6Ð6àˆ9�Q‰<Œ<Ðr    c                ó6   — dd l }|                     | |¦  «        S rU   )rV   ÚEqr™  s      r   Ú	_sympy_eqrÜ  §  rž  r    c                ó6   — dd l }|                     | |¦  «        S rU   )rV   ÚNer™  s      r   Ú	_sympy_nerß  ­  rž  r    c                ó6   — dd l }|                     | |¦  «        S rU   )rV   ÚGtr™  s      r   Ú	_sympy_gtrâ  ³  rž  r    c                ó6   — dd l }|                     | |¦  «        S rU   )rV   ÚLtr™  s      r   Ú	_sympy_ltrå  ¹  rž  r    c                ó6   — dd l }|                     | |¦  «        S rU   )rV   ÚLer™  s      r   Ú	_sympy_lerè  ¿  rž  r    c                ó6   — dd l }|                     | |¦  «        S rU   )rV   ÚGer™  s      r   Ú	_sympy_gerë  Å  rž  r    c                ó&   — ddl m}  || |¦  «        S )Nr   )ÚMin)r�  rí  )r%  rP  rí  s      r   Ú
_sympy_minrî  Ë  ó$   € Ø0Ð0Ð0Ð0Ð0Ð0àˆ3ˆq�!‰9Œ9Ðr    c                ó&   — ddl m}  || |¦  «        S )Nr   ©ÚMax)r�  rò  )r%  rP  rò  s      r   Ú
_sympy_maxró  Ñ  rï  r    c                ó>   — dd l }|                     || f|df¦  «        S )Nr   T)rV   Ú	Piecewise)r%  r   ÚfrV   s       r   Ú
_sympy_iter÷  ×  s'   € Ø€L€L€Là�?Š?˜A˜q˜6 A t 9Ñ-Ô-Ð-r    c                ó   ‡ — ˆ fd„}|S )Nc                ób   •— dd l } t          |j        j        j        d‰› �¦  «        | ¦  «        S )Nr   ÚOpaqueUnaryFn_)r�  rm  ÚutilsÚ_sympyÚ	functions)r%  r,  rn  s     €r   ro  z_get_sym_math_fn.<locals>.fná  s:   ø€ Ø+Ð+Ð+Ð+àM�w�u”{Ô)Ô3Ð5LÀdÐ5LÐ5LÑMÔMÈaÑPÔPÐPr    rr   rp  s   ` r   Ú_get_sym_math_fnrþ  à  s(   ø€ ðQð Qð Qð Qð Qð
 €Ir    Ú_sympy_c                ó4   — dd l }|                     | ¦  «        S rU   )rV   ÚAbs)r%  rV   s     r   Ú
_sympy_absr  ò  s   € Ø€L€L€Là�9Š9�Q‰<Œ<Ðr    c                óD   — ddl m}m} |€ || ¦  «        S  || |¦  «        S )Nr   )ÚRoundDecimalÚ
RoundToInt)r�  r  r  )Únumberr‹   r  r  s       r   Ú_sympy_roundr  ø  sA   € ØEÐEÐEÐEÐEÐEÐEÐEà€Øˆz˜&Ñ!Ô!Ð!àˆ|˜F GÑ,Ô,Ð,r    c                ó$   — ddl m}  || ¦  «        S ©Nr   )ÚToFloat)r�  r
  )r%  r
  s     r   Ú_sympy_sym_floatr    s$   € Ø4Ð4Ð4Ð4Ð4Ð4ð ˆ7�1‰:Œ:Ðr    c                óz   — dd l }ddlm} |                      ||                     | ¦  «        ¦  «        | ¦  «        S r	  )rV   r�  r
  rÛ  rÔ   )r%  rV   r
  s      r   Ú_sympy_is_integerr  	  sE   € Ø€L€L€Là4Ð4Ð4Ð4Ð4Ð4à�8Š8�G�G˜EŸKšK¨™NœNÑ+Ô+¨QÑ/Ô/Ð/r    )rŒ   r×   c                ó€   — t          | ¦  «        }t          | |t          t          |dz
  dd¦  «        ¦  «        ¦  «        S )Nr  r©  )r«  Úsympy_is_contiguous_genericr¿  Úrange)rï   rð   Údims      r   Úsympy_is_contiguousr  0  s7   € Ý
ˆe‰*Œ*€CÝ& u¨gµt½EÀ#ÈÁ'È2ÈrÑ<RÔ<RÑ7SÔ7SÑTÔTÐTr    c                ó¨  — dd l }t          | ¦  «        }t          |¦  «        |k    r|j        S |j        }|j        j        }|D ]S}||                     | |         |j        j        ¦  «        |                     ||         |¦  «        z  z  }|| |         z  }ŒTt          |¦  «        D ]+}||                     | |         |j        j        ¦  «        z  }Œ,|S rU   )	rV   r«  r\   r[   ÚSÚOnerÛ  r  ÚZero)rï   rð   Ú	dim_orderrV   r  rñ   ÚzÚds           r   r  r  5  sÒ   € Ø€L€L€Lå
ˆe‰*Œ*€Cå
ˆ9�~„~˜ÒÐØŒ{Ðà”J€MØŒŒ€Aàð ð ˆØ˜Ÿš %¨¤(¨E¬G¬KÑ8Ô8¸5¿8º8ÀGÈAÄJÐPQÑ;RÔ;RÑRÑRˆØ	ˆU�1ŒX‰ˆˆå�3‰ZŒZð :ð :ˆØ˜Ÿš %¨¤(¨E¬G¬LÑ9Ô9Ñ9ˆˆØÐr    c                ó(   — t          | |g d¢¦  «        S ©N)r  é   rª  r   ©r  ©rï   rð   s     r   Ú$sympy_is_channels_last_contiguous_2dr  M  s   € Ý& u¨g°|°|°|ÑDÔDÐDr    c                ó(   — t          | |g d¢¦  «        S ©N)r  é   r  rª  r   r  r  s     r   Ú$sympy_is_channels_last_contiguous_3dr#  Q  s   € Ý& u¨g°°°ÑGÔGÐGr    c                ó²  — dd l }ddlm} t          | ¦  «        }|t          |¦  «        k    r|j        S |j        j        }|j        }||                     |d         d¦  «        z  }|D ]n}||                     | |         d¦  «        ||         |k    z  z  }|dk    r||                     ||d         ¦  «        z  }||          || |         d¦  «        z  }Œo|S )Nr   rñ  r  )	rV   r�  rò  r«  r\   r  r  r[   rÞ  )	rï   rð   r  rV   rò  r  Úmr@  r  s	            r   Ú&sympy_is_channels_last_strides_genericr&  U  sõ   € Ø€L€L€Là0Ð0Ð0Ð0Ð0Ð0å
ˆe‰*Œ*€Cà
�c�)‰nŒnÒÐØŒ{ÐàŒŒ€AØŒ
€Að ˆ�Š�'˜!”*˜aÑ	 Ô	 Ñ €Aàð *ð *ˆØ	ˆU�XŠX�e˜A”h Ñ"Ô" g¨a¤j°A¢oÑ6Ñ6ˆð �Š6ˆ6Ø�—’˜!˜W QœZÑ(Ô(Ñ(ˆAð �AŒJ˜˜˜U 1œX qÑ)Ô)Ñ)ˆˆà€Hr    c                ó(   — t          | |g d¢¦  «        S r  ©r&  r  s     r   Ú!sympy_is_channels_last_strides_2dr)  }  s   € Ý1°%¸À,À,À,ÑOÔOÐOr    c                ó(   — t          | |g d¢¦  «        S r!  r(  r  s     r   Ú!sympy_is_channels_last_strides_3dr+  �  s   € Ý1°%¸À/À/À/ÑRÔRÐRr    c                ó"   — ddl m}  |g | ¢|¢R Ž S )Nr   )Ú!IsNonOverlappingAndDenseIndicator)r�  r-  )rï   rð   r-  s      r   Ú-_sympy_is_non_overlapping_and_dense_indicatorr.  …  s0   € ØNÐNÐNÐNÐNÐNà,Ð,Ð>¨eÐ>°gÐ>Ð>Ð>Ð>r    )rñ   rô   rø   rû   rÿ   r  )r   r   c                óJ  — t          |t          ¦  «        r|j        S t          |¦  «        t          u r|                      |¦  «        S t          |¦  «        t          u r|                      |¦  «        S t          |¦  «        t          u r|  	                    |¦  «        S t          S r   )r-   r.   re   r3   r   rp   r   rl   r   rn   ÚNotImplemented)r0   rk   s     r   r  r  œ  sŒ   € Ý�#•xÑ Ô ð ØŒxˆÝ	ˆc‰Œ•dÐ	Ð	Ø�~Š~˜cÑ"Ô"Ð"Ý	ˆc‰Œ•cÐ	Ð	Ø�}Š}˜SÑ!Ô!Ð!Ý	ˆc‰Œ•eÐ	Ð	Ø�Š˜sÑ#Ô#Ð#õ Ðr    c                ó>  — t          | t          ¦  «        r| j        �| j        S |                      ¦   «         rt	          | ¦  «        S |                      ¦   «         rt          | ¦  «        S |                      ¦   «         rt          | ¦  «        S t          d| › �¦  «        ‚)Nzunrecognized return type )
r-   r   r6   r_   r   ra   r   rc   r   ÚAssertionErrorrf  s    r   r"  r"  «  sŽ   € å�!•WÑÔð  !¤*Ð"8ØŒzÐØ‡x‚x�z„zð >Ý�a‰yŒyÐØ	
�Š‰Œð >Ý˜‰{Œ{ÐØ	
�Š‰Œð >Ý�q‰zŒzÐåÐ<¸Ð<Ð<Ñ=Ô=Ð=r    c                ó   — t           |          S r   )ÚMETHOD_TO_OPERATOR)Úmethods    r   r   r   ¹  s   € Ý˜fÔ%Ð%r    c                óŒ  ‡ ‡—  t          d¦  «        ‰¦  «        Š‰ t          v r‰ › d�}n‰ }ˆˆ fd„}ˆˆ fd„}‰ t          v rt          t          d|› �|¦  «         d S ‰ dk    r!ˆˆ fd„}t          t          d|› �|¦  «         d S ‰ dk    r"d	ˆˆ fd„	}t          t          d|› �|¦  «         d S t          t          d|› �|¦  «         d S )
Né   r7  c           
     óÊ  •— ddl m}m} t          ‰¦  «        }d }| j        �|j        � || j        |j        ¦  «        }t
                               ‰¦  «        }|r6|�4t          |  |t          | ¦  «        t          |¦  «        ¦  «        ¦  «        S  |¦   «         r7t          |  ||t          | ¦  «        t          |¦  «        fi ¦  «        ¦  «        S t          |t          ¦  «        sJ ‚d}	 ‰dk    r›ddlm}m}	 | j        }
| j        j        s#|
                     | j        ¦  «        j        dk    rF|j        j        s#|
                     |j        ¦  «        j        dk    r || j        |j        ¦  «        }nY |	| j        |j        ¦  «        }nB‰dk    r& ‰| j        |j        | j        |j        ¦  «        \  }}n ‰| j        |j        ¦  «        }n6# t(          $ r) t*                               d‰| j        |j        ¦  «         ‚ w xY wt.                               d‰| j        |j        |¦  «         ‰t2          v rt4          }n<‰t6          v rt8          }n+| j        t4          u s|j        t4          u rt4          }n| j        }|�"|� t          |t<          ¦  «        s ||¦  «        }| j                             || j         |j         f¦  «        \  }}t          || j        ||||¬	¦  «        }|S )
Nr   r  Fr�   rŒ  r“   úfailed to eval %s(%s, %s)z%s %s %s -> %s)r7   r8   )!r+  r  r  r   r#   Ú alternate_impl_if_hinted_methodsÚgetr  r"  r-   r   r�  r�  rŽ  r+   r*   r�  Úbound_sympyÚlowerr"   r:  r;  r<  Úsym_node_logÚdebugÚalways_float_magic_methodsr   Úalways_bool_magic_methodsr   r/   r.   r1  r7   )r0   r?   r  r  Úopr6  Úalternate_implr8   r�  rŽ  r+   r4  r/   r7   r7  rº  Úfuncr5  s                   €€r   Úbinary_magic_implz+_make_node_magic.<locals>.binary_magic_implÅ  sW  ø€ ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ
   Ñ'Ô'ˆàˆØŒ9Ð  U¤ZÐ%;Ø�r˜$œ) U¤ZÑ0Ô0ˆHå9×=Ò=¸fÑEÔEˆØð 	T˜hÐ2Ý˜4  µ	¸$±´ÅÈ5ÑAQÔAQÑ!RÔ!RÑSÔSÐSàˆ>ÑÔð 	ÝØÐ)Ð)¨"­y¸©¬Å	È%Ñ@PÔ@PÐ.QÐSUÑVÔVñô ð õ ˜%¥Ñ)Ô)Ð)Ð)Ð)Ø#Ðð	Ø˜ŠˆØGÐGÐGÐGÐGÐGÐGÐGð !œN�	à”IÔ,ð	;à ×,Ò,¨T¬YÑ7Ô7Ô=ÀÒBÐBà”JÔ-ð Cð !×,Ò,¨U¬ZÑ8Ô8Ô>À!ÒCÐCà˜#˜dœi¨¬Ñ4Ô4�C�Cà#˜) D¤I¨u¬zÑ:Ô:�C�CØ˜5’�à-1¨TØ”IØ”JØÔ-ØÔ.ñ	.ô .Ñ*Ð$ c cð �d˜4œ9 e¤jÑ1Ô1�øøÝð 	ð 	ð 	Ý�KŠKÐ3°V¸T¼YÈÌ
ÑSÔSÐSØð	øøøõ 	×ÒÐ+¨V°T´YÀÄ
ÈCÑPÔPÐPð Õ/Ð/Ð/ÝˆFˆFØÕ0Ð0Ð0ÝˆFˆFØŒ[�EÐ!Ð! U¤\µUÐ%:Ð%:ÝˆFˆFà”[ˆFð ÐØÐ$Ý˜x­Ñ2Ô2ð %ð �v˜hÑ'Ô'ˆHð ”^×<Ò<Ø�”˜uœ}Ð-ñ
ô 
‰
ˆ�õ ØØŒNØØØØ 3ð
ñ 
ô 
ˆð ˆs   Ã,C#G Ç3Hc           	     ó¼  •— ddl m}m} t          ‰¦  «        } |¦   «         r)t	          |  ||t          | ¦  «        fi ¦  «        ¦  «        S | j        }‰dk    s‰dk    r| j                             |¦  «        }	  ‰
|¦  «        }n+# t          $ r t                               d‰|¦  «         ‚ w xY wt                               d‰
||¦  «         d }| j        � || j        ¦  «        }‰t          v rt           }n)‰t"          v rt$          }n‰t&          v rt(          }n| j        }| j                             || j        f¦  «        \  }}	t1          || j        |||¬¦  «        S )Nr   r  rÔ   Úceilingzfailed to eval %s(%s)z%s %s -> %sr*  )r+  r  r  r   r  r"  r*   r+   Ú_simplify_floor_divr:  r;  r<  r>  r?  r#   Úalways_int_magic_methodsr   rA  r   r@  r   r/   r1  r7   r   )r0   r  r  rB  r*   r4  r6  r/   r7   r7  rD  r5  s             €€r   Úunary_magic_implz*_make_node_magic.<locals>.unary_magic_impl#  s   ø€ ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ
   Ñ'Ô'ˆØˆ>ÑÔð 	RÝ˜4Ð!4Ð!4°R½)ÀD¹/¼/Ð9KÈRÑ!PÔ!PÑQÔQÐQàŒyˆØ�WÒÐ ¨)Ò 3Ð 3Ø”>×5Ò5°dÑ;Ô;ˆDð	Ø�$�t‘*”*ˆCˆCøÝð 	ð 	ð 	Ý�KŠKÐ/°¸Ñ>Ô>Ð>Øð	øøøõ 	×Ò˜=¨$°°cÑ:Ô:Ð:ØˆØŒ9Ð Ø�r˜$œ)‘}”}ˆHàÕ-Ð-Ð-ÝˆFˆFØÕ0Ð0Ð0ÝˆFˆFØÕ1Ð1Ð1ÝˆFˆFà”[ˆFà”^×<Ò<¸RÀ$Ä,ÀÑQÔQ‰
ˆ�Ý�s˜DœN¨F°HÀgÐNÑNÔNÐNs   Á:B Â(B.r   c                ó@  •— ddl m}m} | j        r|j        n|j        } |¦   «         rJt	          |  |t
          t          | ¦  «        t          |¦  «        t          |¦  «        fi ¦  «        ¦  «        S 	  ‰	| j        |j        |j        ¦  «        }n<# t          $ r/ t           
                    d‰
| j        |j        |j        ¦  «         ‚ w xY w| j                             t
          | j        |j        |j        f¦  «        \  }}t          || j        |j        ||¬¦  «        S )Nr   r  zfailed to eval %s(%s, %s, %s)r*  )r+  r  r  r#   r  r   r"  r*   r:  r;  r<  r+   r1  r7   r   r/   )Ú	pred_nodeÚ	then_nodeÚ	else_noder  r  r6  r4  r7   r7  rD  r5  s            €€r   Úsym_ite_implz&_make_node_magic.<locals>.sym_ite_implK  sl  ø€ ðð ð ð ð ð ð ð ð
 *3¬ÐK�y”~�~¸Y¼^ˆHØˆ~ÑÔð ÝØØ'Ð'Ýå% iÑ0Ô0Ý% iÑ0Ô0Ý% iÑ0Ô0ðð
 ñô ñô ð ð
Ø�d˜9œ>¨9¬>¸9¼>ÑJÔJ��øÝð ð ð Ý—’Ø3ØØ”NØ”NØ”Nñô ð ð ðøøøð #Ô,×EÒEÝ˜)Ô+¨YÔ->À	Ô@QÐRñô ‰JˆG�Qõ Ø�YÔ(¨)Ô*:¸HÈgðñ ô ð s   Á4B Â9C
rŒ   c           	     ó2  •— ddl m}m} t          j        } |¦   «         r*t          |  ||t          | ¦  «        |fi ¦  «        ¦  «        S | j        }	  ‰||¦  «        }n,# t          $ r t           
                    d‰||¦  «         ‚ w xY w|€t          }n| j        }d }| j        � || j        |¦  «        }| j        g}	|�|	                     |¦  «         | j                             |t%          |	¦  «        ¦  «        \  }
}t'          || j        |||
¬¦  «        S )Nr   r  z!failed to eval %s(%s, ndigits=%s)r*  )r+  r  r  ÚbuiltinsrŒ   r  r"  r*   r:  r;  r<  r   r/   r#   r7   r{   r+   r1  r.  r   )r0   r‹   r  r  rB  r*   r4  r/   r6  r2  r7   r7  rD  r5  s               €€r   Ú
round_implz$_make_node_magic.<locals>.round_implv  sb  ø€ ðð ð ð ð ð ð ð õ
 ”ˆBØˆ~ÑÔð ÝØÐ-Ð-¨bµ9¸T±?´?ÀGÐ2LÈbÑQÔQñô ð ð ”9ˆDðØ�d˜4 Ñ)Ô)��øÝð ð ð Ý—’Ð?ÀÈÈwÑWÔWÐWØðøøøð ˆÝ��àœ�àˆHØŒyÐ$Ø˜2˜dœi¨Ñ1Ô1�ð ”L�>ˆDØÐ"Ø—’˜GÑ$Ô$Ð$Øœ×@Ò@ÀÅUÈ4Á[Ä[ÑQÔQ‰JˆG�QÝ˜3 ¤°¸È'ÐRÑRÔRÐRs   ÁA Á)Br   )r   Ú2magic_methods_on_operator_with_trailing_underscoreÚunary_methodsÚsetattrr   )r5  rD  Úmethod_attrrE  rJ  rO  rR  s   ``     r   Ú_make_node_magicrW  ½  sx  øø€ Ø�9�S‰>Œ>˜$ÑÔ€DàÕCÐCÐCØ�l�l�lˆˆàˆð\ð \ð \ð \ð \ð \ð|"Oð "Oð "Oð "Oð "Oð "OðH •ÐÐÝ•Ð*˜[Ð*Ð*Ð,<Ñ=Ô=Ð=Ð=Ð=Ø	�9Ò	Ð	ð&	ð &	ð &	ð &	ð &	ð &	õP 	•Ð*˜[Ð*Ð*¨LÑ9Ô9Ð9Ð9Ð9Ø	�7Ò	Ð	ð'	Sð '	Sð '	Sð '	Sð '	Sð '	Sð '	SõR 	•Ð*˜[Ð*Ð*¨JÑ7Ô7Ð7Ð7Ð7å•Ð*˜[Ð*Ð*Ð,=Ñ>Ô>Ð>Ð>Ð>r    c                óî   ‡ ‡— ˆˆ fd„}t          t          d‰ › �|¦  «         ˆˆ fd„}t          t          j        t
                   ‰ ¦  «        s(t          t          j        t
                   ‰ |¦  «         d S d S )Nc           	     ó²  •— ddl m}m} t          t          j        t                   ‰¦  «        } |¦   «         r1t          |  ||d„ |D ¦   «         d„ |D ¦   «         fi ¦  «        ¦  «        S d„ |D ¦   «         }d„ |D ¦   «         }	  ‰||¦  «        }n,# t          $ r t           
                    d‰||¦  «         ‚ w xY wg }	d }
|D ]%}|j        € nQ|	                     |j        ¦  «         Œ&g }|D ]%}|j        € n'|                     |j        ¦  «         Œ& ||	|¦  «        }
‰                     d¦  «        rt          }nt          }t!          || j        ||
¦  «        S )	Nr   r  c                ó,   — g | ]}t          |¦  «        ‘ŒS rr   r!  ©r$  Úss     r   r(  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>³  s   € Ð2Ð2Ð2 q•i ‘l”lÐ2Ð2Ð2r    c                ó,   — g | ]}t          |¦  «        ‘ŒS rr   r!  r[  s     r   r(  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>³  s   € Ð4SÐ4SÐ4SÀaµY¸q±\´\Ð4SÐ4SÐ4Sr    c                ó   — g | ]	}|j         ‘Œ
S rr   ru   r[  s     r   r(  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>·  s   € Ð,Ð,Ð, �a”fÐ,Ð,Ð,r    c                ó   — g | ]	}|j         ‘Œ
S rr   ru   r[  s     r   r(  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>¸  s   € Ð0Ð0Ð0 1˜œÐ0Ð0Ð0r    r9  Ú
_indicator)r+  r  r  rm  ÚsysÚmodulesr^  r  r:  r;  r<  r#   r{   Úendswithr   r   r   r+   )r0   rï   rð   r  r  rB  Ú
size_exprsÚstride_exprsr4  r5  r6  r\  Ústride_hintsr/   rD  r5  s                 €€r   Úsizes_strides_implz4_make_node_sizes_strides.<locals>.sizes_strides_impl§  sÜ  ø€ ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ
 •S”[¥Ô*¨FÑ3Ô3ˆØˆ>ÑÔð 	ÝØØ#Ð#ØØ2Ð2¨EÐ2Ñ2Ô2Ð4SÐ4SÈ7Ð4SÑ4SÔ4SÐTØñô ñô ð ð -Ð, eÐ,Ñ,Ô,ˆ
Ø0Ð0¨Ð0Ñ0Ô0ˆð	Ø�$�z <Ñ0Ô0ˆCˆCøÝð 	ð 	ð 	Ý�KŠKÐ3°V¸ZÈÑVÔVÐVØð	øøøð
 ˆ
ØˆØð 	8ð 	8ˆAØŒvˆ~Ø�Ø×Ò˜aœfÑ%Ô%Ð%Ð%àˆLØð 8ð 8�Ø”6�>Ø�EØ×#Ò# A¤FÑ+Ô+Ð+Ð+à˜2˜j¨,Ñ7Ô7�ð �?Š?˜<Ñ(Ô(ð 	ÝˆFˆFåˆFÝ�s˜DœN¨F°HÑ=Ô=Ð=s   ÂB Â)B9r7  c                óˆ  •‡‡— dd l Šddlm} t          j        | |¦  «        D ]]Št          ‰t          ¦  «        rFt           t          ‰j	        ‰¦  «        ˆfd„| D ¦   «         ˆfd„|D ¦   «         ¦  «        ¦  «        c S Œ^‰dk    r || |¦  «        S t           ‰ˆfd„| D ¦   «         ˆfd„|D ¦   «         ¦  «        ¦  «        S )Nr   )Ú!eval_is_non_overlapping_and_densec                ó:   •— g | ]}t          ‰j        |¦  «        ‘ŒS rr   ©r  re   ©r$  rP  r%  s     €r   r(  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>ç  s%   ø€ Ð;Ð;Ð;°� ¤¨Ñ+Ô+Ð;Ð;Ð;r    c                ó:   •— g | ]}t          ‰j        |¦  «        ‘ŒS rr   rk  rl  s     €r   r(  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>è  s%   ø€ Ð=Ð=Ð=°� ¤¨Ñ+Ô+Ð=Ð=Ð=r    r  c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS rr   ©Úsympify©r$  r%  rV   s     €r   r(  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>ñ  s%   ø€ Ð5Ð5Ð5¨!�U—]’] 1Ñ%Ô%Ð5Ð5Ð5r    c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS rr   ro  rq  s     €r   r(  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>ò  s%   ø€ Ð7Ð7Ð7¨!�U—]’] 1Ñ%Ô%Ð7Ð7Ð7r    )rV   r)   ri  Ú	itertoolsÚchainr-   r   r"  rm  re   r   )rï   rð   ri  r%  rV   rD  r5  s      @@€€r   Úsizes_strides_userz4_make_node_sizes_strides.<locals>.sizes_strides_userÜ  s7  øøø€ Øˆˆˆð	
ð 	
ð 	
ð 	
ð 	
ð 	
õ ” ¨Ñ0Ô0ð 	ð 	ˆAÝ˜!�VÑ$Ô$ð Ý Ø+•G˜AœF FÑ+Ô+Ø;Ð;Ð;Ð;°UÐ;Ñ;Ô;Ø=Ð=Ð=Ð=°WÐ=Ñ=Ô=ñô ñô ð ð ð ðð Ð=Ò=Ð=Ø4Ð4°U¸GÑDÔDÐDõ Ø�Ø5Ð5Ð5Ð5¨uÐ5Ñ5Ô5Ø7Ð7Ð7Ð7¨wÐ7Ñ7Ô7ñô ñô ð r    )rU  r   Úhasattrra  rb  r^  )r5  rD  rg  ru  s   ``  r   Ú_make_node_sizes_stridesrw  ¤  s¤   øø€ ð.>ð .>ð .>ð .>ð .>ð .>õ` �G�\˜�\�\Ð#5Ñ6Ô6Ð6ð
ð ð ð ð ð õ6 •3”;�xÔ(¨&Ñ1Ô1ð CÝ•”�HÔ% vÐ/AÑBÔBÐBÐBÐBðCð Cr    c                ó„  ‡ ‡	‡
‡‡‡— ‰ t           v rd‰ › �Šn‰ Šdd„Š	d„ Š
‰ t          v rd„ Šnd„ Šˆ fd„Šˆ	ˆ
ˆ ˆˆfd	„}ˆ	ˆ
ˆ ˆˆˆfd
„}ˆ	ˆ
ˆ ˆˆˆfd„}‰ t          v rt          |d‰ › d�|¦  «         d S ‰ t          v r1t          |‰ ¦  «        }t          |‰ t          ||¦  «        ¦  «         d S ‰ dk    rˆ	ˆfd„}t          |d‰ › d�|¦  «         d S ‰ dk    rdˆ	ˆ
ˆ fd„	}t          |d‰ › d�|¦  «         d S ‰ }‰ t          v rt          ‰          }t          |d|› d�|¦  «         ‰ t          v rt          |d|› d�|¦  «         d S d S )Nr}  rg  ú2Union[SymInt, int, SymFloat, float, SymBool, bool]c                óÈ   — t          | t          t          t          f¦  «        r| S t          | t          ¦  «        r| j                             dd¦  «        S t          d¦  «        ‚)Nr  r   z*expect to be called with constant SymBools)r-   r   r   r   r   re   rG  r2  rf  s    r   Úget_constantz&_make_user_magic.<locals>.get_constant  sY   € Ý�a�#�u¥dÐ+Ñ,Ô,ð 	ØˆHÝ�a�Ñ!Ô!ð 	,Ø”6×$Ò$ R¨Ñ+Ô+Ð+ÝÐIÑJÔJÐJr    c                óÄ   — t          | t          t          t          f¦  «        rdS t          | t          t
          t          f¦  «        r| j                             ¦   «         S dS )NTF)	r-   r   r   r   r   r   r   re   r]  rf  s    r   r]  z%_make_user_magic.<locals>.is_constant  sR   € Ý�a�#�u¥dÐ+Ñ,Ô,ð 	Ø�4Ý�a�&¥(­GÐ4Ñ5Ô5ð 	(Ø”6×%Ò%Ñ'Ô'Ð'Øˆur    c                ó˜   — t          | t          ¦  «        r4t          | j                             t          | ¦  «        ¦  «        ¦  «        S | S )z;Implements True+True=2, which works in python but not sympy)r-   r   r   re   rl   r   rf  s    r   Úpromotez!_make_user_magic.<locals>.promote5  s;   € å˜!�WÑ%Ô%ð 7Ý˜aœfŸošo­c°!©f¬fÑ5Ô5Ñ6Ô6Ð6ØˆHr    c                ó   — | S r   rr   rf  s    r   r~  z!_make_user_magic.<locals>.promote=  s   € ØˆHr    c                ó   •— ‰dvr| |fS t          | t          t          j        f¦  «        }t          |t          t          j        f¦  «        }|s|r,|st          j        | ¦  «        } |st          j        |¦  «        }| |fS )N)r“   r—   rš   r�   r    r¬   r³   r   r   rÁ   rÅ   rÈ   rË   rÎ   rÑ   )r-   r   r,  r   r
   )r0   r?   Úf_selfÚf_otherr5  s       €r   Úpromote2z"_make_user_magic.<locals>.promote2@  s–   ø€ ð ð 
ð 
ð 
ð$ ˜�;ÐÝ˜D¥5­%¬.Ð"9Ñ:Ô:ˆÝ˜U¥U­E¬NÐ$;Ñ<Ô<ˆØð 	/�Wð 	/Øð -Ý” tÑ,Ô,�Øð /Ýœ¨Ñ.Ô.�Ø�Uˆ{Ðr    c                óÆ   •—  ‰| ¦  «        }  ‰| ¦  «        r! t          ‰¦  «         ‰| ¦  «        ¦  «        S t           t          | j        ‰¦  «        ¦   «         ¦  «        S r   )r   r"  rm  re   )r0   r{  r]  r5  rV  r~  s    €€€€€r   rJ  z*_make_user_magic.<locals>.unary_magic_implj  si   ø€ Øˆw�t‰}Œ}ˆØˆ;�tÑÔð 	DØ.Õ& vÑ.Ô.°°¸TÑ0BÔ0BÑCÔCÐCÝÐ8� ¤¨KÑ8Ô8Ñ:Ô:Ñ;Ô;Ð;r    c           	     óT  •— t          |t          t          t          t          t
          t          f¦  «        st          S t           	                    d‰| |¦  «          ‰| ¦  «        }  ‰|¦  «        } ‰	| |¦  «        \  } } ‰| ¦  «        r" t          ‰¦  «         ‰| ¦  «        |¦  «        S  ‰|¦  «        r ‰|¦  «        }t          | j        |¦  «        }|t          u rt          S t           t          | j        ‰¦  «        |¦  «        ¦  «        } ‰|¦  «        r ‰|¦  «        n|S )NzMAGIC %s %s %s)r-   r   r   r   r   r   r   r0  r>  r?  r   r  re   r"  rm  ©
r0   r?   Ú
other_nodeÚretr{  r]  r5  rV  r~  rƒ  s
       €€€€€€r   rE  z+_make_user_magic.<locals>.binary_magic_implp  s5  ø€ Ý˜%¥#¥u­dµF½HÅgÐ!NÑOÔOð 	"Ý!Ð!Ý×ÒÐ+¨V°T¸5ÑAÔAÐAØˆw�t‰}Œ}ˆØ�˜‘”ˆØ�h˜t UÑ+Ô+‰ˆˆeØˆ;�tÑÔð 	KØ.Õ& vÑ.Ô.°°¸TÑ0BÔ0BÀEÑJÔJÐJØˆ;�uÑÔð 	(Ø �L Ñ'Ô'ˆEÝ˜TœY¨Ñ.Ô.ˆ
Ø�Ð'Ð'Ý!Ð!ÝÐ7� ¤	¨;Ñ7Ô7¸
ÑCÔCÑDÔDˆØ$/ K°Ñ$4Ô$4Ð=ˆ|ˆ|˜CÑ Ô Ð ¸#Ð=r    c           	     ó  •— t          |t          t          t          t          t
          t          f¦  «        st          S  ‰| ¦  «        }  ‰|¦  «        } ‰	| |¦  «        \  } } ‰| ¦  «        r" t          ‰¦  «         ‰| ¦  «        |¦  «        S  ‰|¦  «        r ‰|¦  «        }t          | j
        |¦  «        }|t          u rt          S t           t          |‰¦  «        | j
        ¦  «        ¦  «        } ‰|¦  «        r ‰|¦  «        n|S r   )r-   r   r   r   r   r   r   r0  r   r  re   r"  rm  r†  s
       €€€€€€r   Úrbinary_magic_implz,_make_user_magic.<locals>.rbinary_magic_impl�  s  ø€ Ý˜%¥#¥u­dµF½HÅgÐ!NÑOÔOð 	"Ý!Ð!Øˆw�t‰}Œ}ˆØ�˜‘”ˆØ�h˜t UÑ+Ô+‰ˆˆeØˆ;�tÑÔð 	KØ.Õ& vÑ.Ô.°°¸TÑ0BÔ0BÀEÑJÔJÐJØˆ;�uÑÔð 	(Ø �L Ñ'Ô'ˆEÝ˜TœY¨Ñ.Ô.ˆ
Ø�Ð'Ð'Ý!Ð!ÝÐ8� 
¨KÑ8Ô8¸¼ÑCÔCÑDÔDˆØ$/ K°Ñ$4Ô$4Ð=ˆ|ˆ|˜CÑ Ô Ð ¸#Ð=r    Ú__r   c                ó   •— | j         }t          ||¦  «        }t          ||¦  «        }|t          u s	|t          u rt          S t          |t          ¦  «        r%t          |t          ¦  «        r|j        |j        k    sJ ‚t           t          | j         ‰¦  «        ||¦  «        ¦  «        }|j                              ¦   «         r ‰|¦  «        n|S r   )	re   r  r0  r-   r   r/   r"  rm  r]  )	Úpredrê   rë   rL  rM  rN  rˆ  r{  rV  s	          €€r   Úsym_ite_magic_implz,_make_user_magic.<locals>.sym_ite_magic_impl˜  sÒ   ø€ Øœ	ˆIÝ 	¨8Ñ4Ô4ˆIÝ 	¨8Ñ4Ô4ˆIØ�NÐ*Ð*¨i½>Ð.IÐ.IÝ%Ð%å˜9¥gÑ.Ô.ðå˜y­'Ñ2Ô2ðð Ô$¨	Ô(8Ò8Ð8Ð8ð9õ Ð;�G D¤I¨{Ñ;Ô;¸IÀyÑQÔQÑRÔRˆCØ(+¬×(<Ò(<Ñ(>Ô(>ÐG�<�< Ñ$Ô$Ð$ÀCÐGr    rŒ   c                ó¬   •—  ‰| ¦  «        rt          j         ‰| ¦  «        |¦  «        S t           t          | j        ‰¦  «        |¦  «        ¦  «        S r   )rQ  rŒ   r"  rm  re   )r0   r‹   r{  r]  r5  s     €€€r   Úround_magic_implz*_make_user_magic.<locals>.round_magic_impl©  sW   ø€ Øˆ{˜4Ñ Ô ð CÝ”~ l l°4Ñ&8Ô&8¸'ÑBÔBÐBåÐ7�W T¤Y°Ñ7Ô7¸Ñ@Ô@ÑAÔAÐAr    Ú__r)rg  ry  r   )	rS  Úbool_becomes_int_magic_methodsÚunary_magic_methodsrU  Úunary_nonmagic_methodsrm  r   Úbitwise_opsÚreflectable_magic_methods)r5  Ú	user_typerJ  rE  rŠ  ÚorigrŽ  r�  Úmethod_namer{  r]  rV  r~  rƒ  s   `        @@@@@r   Ú_make_user_magicrš    s»  øøøøøø€ ð ÕCÐCÐCØ%˜V�o�oˆˆàˆðKð Kð Kð Kðð ð ðB Õ/Ð/Ð/ð	ð 	ð 	ð 	ð	ð 	ð 	ð!ð !ð !ð !ð !ðT<ð <ð <ð <ð <ð <ð <ð <ð <ð>ð >ð >ð >ð >ð >ð >ð >ð >ð >ð">ð >ð >ð >ð >ð >ð >ð >ð >ð >ð  Õ$Ð$Ð$Ý�	˜? ˜?˜?˜?Ð,<Ñ=Ô=Ð=Ð=Ð=Ø	Õ)Ð	)Ð	)Ý�y &Ñ)Ô)ˆÝ�	˜6¥>Ð2BÀDÑ#IÔ#IÑJÔJÐJÐJÐJØ	�9Ò	Ð	ð	Hð 	Hð 	Hð 	Hð 	Hð 	Hõ 	�	˜? ˜?˜?˜?Ð,>Ñ?Ô?Ð?Ð?Ð?Ø	�7Ò	Ð	ð	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bõ 	�	˜? ˜?˜?˜?Ð,<Ñ=Ô=Ð=Ð=Ð=àˆØ•[Ð Ð Ý% fÔ-ˆKÝ�	Ð/ Ð/Ð/Ð/Ð1BÑCÔCÐCØÕ.Ð.Ð.Ý�IÐ4 [Ð4Ð4Ð4Ð6HÑIÔIÐIÐIÐIð /Ð.r    )FFr   )’Ú
__future__r   rQ  rs  ÚloggingÚmathÚoperatorra  Ú	functoolsr   r   Útypingr   r   r   r	   r,  r
   r   r   r   r   r   r   r   r)   r   Ú	getLoggerr^  r;  Ú_loggingÚgetArtifactLoggerr>  Ú__all__Útorch.typesr   r.   r   r   rˆ   r„   r“   r¦   rß   rÁ   rÔ   r�   r  rÑ   rÈ   rÎ   r·   rË   r�   rš   rÅ   râ   r©   r  rŒ   r»   r—   r  r4  r“  rq  Úmath_op_namesrn  Úsym_nameÚpriv_sym_namerU  rm  r{   r”  rT  Úonly_bool_magic_methodsr’  Úalso_bool_magic_methodsÚbool_magic_methodsÚonly_float_magic_methodsrS  r•  r@  rI  rA  r‚  r†  r‰  r�  r“  r–  rš  r�  r¡  r¥  r¶  rÆ  r  r  r–  rÏ  rÒ  rÖ  rÙ  rÜ  rß  râ  rå  rè  rë  rî  ró  r÷  rb  Úcurrent_modulerþ  Úpriv_sympy_namero  r`  r  r  r  r  Úinvertr   r  r  r  r#  r&  r)  r+  r.  Úsizes_strides_methodsÚminÚmaxr:  r  r"  r   rW  rw  Úitemsr5  rD  rš  rr   r    r   ú<module>r´     se  ðð #Ð "Ð "Ð "Ð "Ð "ðð €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø 
€
€
€
Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à €€€ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð ð ?Ø>Ð>Ð>Ð>Ð>Ð>à€gÔ˜Ñ!Ô!€ØŒ~×/Ò/°¸*ÑEÔE€ð =Ð
<Ð
<€ð 1Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ðEð Eð Eð Eð Eñ Eô Eð EðR#Ø	ˆ8Œ<ð#à	ˆ8Œ<ð#ð 
ˆ8Œ<ð#ð 
ˆ8Œ=ð	#ð
 �8”=ð#ð ˆDŒIð#ð 	ˆ(Œ+ð#ð ˆTŒZð#ð ˆTŒZð#ð �HÔ%ð#ð 	ˆ(Œ+ð#ð 	ˆ(Œ+ð#ð Ð*Ð*ð#ð 	ˆ(Œ+ð#ð ˆhŒoð#ð  	ˆ(Œ+ð!#ð" 
ˆ8Œ<ð##ð #ð$ 
ˆ8Œ<ð%#ð& 	ˆ(Œ+ð'#ð( 
ˆ8Œ<ð)#ð* 	ˆ(Œ,ð+#ð, �(”,ð-#ð. �”ð/#ð0 �h”lð1#ð2 ˆXŒ^ð3#ð4 ˆhŒoð5#ð6 
ˆ8Œ<ð7#ð8 �ð9#ð: ˆwð;#ð< ˆwð=#ð> ˆwð?#ð@ ˆwðA#ðB �XÔ%ðC#ðD �8Ô#ðE#ð #Ð ðJ
ð 
ð 
Ð ðð ð ð€ð ð ð €DØ�dˆ}ˆ}€HØ"˜�N�N€MØ€GˆG�XÐ/Ð/°Ñ5Ô5Ñ6Ô6Ð6Ø#* 7¨5°-Ñ#@Ô#@Ð�xÑ Ø×Ò˜HÑ%Ô%Ð%Ø‡N‚N�8ÑÔÐÐð
 ðÐ ð $Ð&<Ñ<€ð >Ð=Ð=Ð à!6Ð!6Ð!6Ð à˜&Ð Ø,Ð/FÑFÐ ð JÐIÐIÐ ð 7<¸T°]Ð 2ð Øðð €ð XÐWÐWÐ àð -ð -€DØ�dˆ}ˆ}€HØ×"Ò" 8Ñ,Ô,Ð,Ð,ð HÐGÐGÐ ðð ð Ð ð"ð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðF LQð.:ð .:ð .:ð .:ðb'ð 'ð 'ð&ð &ð &ð ØŒ<ØŒ<ØØ+Ø!ØØØ
ØØ)Ø%Ø#ØØðð Ð ð&ð ð ð$ð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð.ð .ð .ð ”˜XÔ&€ðð ð ð ð 1ð 1€DØ& Ð&Ð&€OØ	Ð	˜$Ñ	Ô	€BØ$3Ð3€B„O�b”kØ€GˆN˜O¨RÑ0Ô0Ð0Ð0àˆˆoðð ð ð-ð -ð -ð -ðð ð ð0ð 0ð 0ðØðð àˆxŒðð 
ˆ8Œ<ðð 	ˆ)ð	ð
 	ˆ)ðð 	ˆ)ðð 	ˆ)ðð 	ˆ)ðð 	ˆ)ðð ˆ\ðð ˆ\ðð Ð!ðð ˆKðð 
ˆ8Œ<ðð ˆzðð  ˆzð!ð" ˆzð#ð$ 
ˆ:ð%ð ð& Ø#ð)ð ð €ð0 ð Hð H€DØ�dˆ}ˆ}€HØ%˜g nÐ6FÀÐ6FÐ6FÑGÔG€M�(ÑÐàˆ(�M >ðUð Uð Uð
ð ð ð0Eð Eð EðHð Hð Hð%ð %ð %ðPPð Pð PðSð Sð Sð?ð ?ð ?ð )Ø&JØ&JØ#DØ#DØ.[ð	ð 	Ð ð Œ|ØŒ|ð$ð $Ð  ðð ð ð>ð >ð >ð&ð &ð &ðd?ð d?ð d?ðNTCð TCð TCðn "×'Ò'Ñ)Ô)ð #ð #�L€FˆDØÐ�V˜TÑ"Ô"Ð"Ð"à)×/Ò/Ñ1Ô1ð +ð +�L€FˆDØÐ˜V TÑ*Ô*Ð*Ð*ðtJð tJð tJðn "×'Ò'Ñ)Ô)ð +ð +�L€FˆDØÐ(Ð(Ð(ØÐ˜ Ñ)Ô)Ð)ØØÐ)Ð)Ð)ØÐ˜ Ñ*Ô*Ð*ØØÐ(Ð(Ð(¨FÐ6TÐ,TÐ,TØÐ˜ Ñ)Ô)Ð)ØÐ�V˜VÑ$Ô$Ð$Ø�[Ð Ð ØÐ˜ Ñ*Ô*Ð*øà
Ø€D€Dr    