§
    ŠŠtjx~  ã                   óð  — 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mZ d dl	m
Z
mZ d dlmZ d dlmZ d dlZd dlZd dlmZ d dl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!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(  ed¦  «        Z) ej*        e+¦  «        Z, ej-        d¦  «        j.        Z/ G d„ de j0        ¦  «        Z1 ej2        d¬¦  «         G d„ de1¦  «        ¦   «         Z3 ej2        d¬¦  «         G d„ de1¦  «        ¦   «         Z4 ej2        d¬¦  «         G d„ de1¦  «        ¦   «         Z5 ej2        d¬¦  «         G d„ d¦  «        ¦   «         Z6ej2         G d„ d¦  «        ¦   «         Z7 G d „ d!e(j8        ¦  «        Z9 G d"„ d#e(j:        ¦  «        Z;d$e<d%e=e%eej>        gej?        f         f         fd&„Z@d'eej>                 d$e<d%e=eAeAej?                          e%f         fd(„ZBd)d*œd'eej>                 d$e<d%e=eAeej>                          e%f         fd+„ZCd,d)d-d.œd/ed0e
f         d'eej>                 d1eDd$e<d2eeAej>                          d%e7fd3„ZE	 dCd/e
d4eAeAej>                          d5e%d1eDd%e9f
d6„ZFd7d8d%e=eAej>                 dz  eAej>                 dz  f         fd9„ZGd%e<fd:„ZH G d;„ d<e¦  «        ZI	 	 dDd/ed0e
f         d=eej>                 d>eej>                 dz  d?eDd%eej?                 f
d@„ZJ G dA„ dBe¦  «        ZKdS )Eé    N)ÚCallableÚIterableÚSequence)ÚAnyÚTypeVar)ÚSelf)Úpatch)Úget_free_symbols)Úfree_symbolsÚfree_unbacked_symbols©Ú
OrderedSeté   )Úmake_symbolÚSymTé   )Úindex_prevent_reordering)ÚDefaultHandler)Úget_dtype_sizeÚreduction_num_outputsÚsympy_index_symbolÚ
sympy_subsÚ	VarRanges)ÚReductionTypeÚVÚTzindirect|tmpc                   ó†  — e Zd ZU eed<   ej        ed<   ej        	 dde	de
ej                 fd„¦   «         Zej        deeef         defd„¦   «         Zej        dej        fd	„¦   «         Zej        defd
„¦   «         Zej        defd„¦   «         Zej        de	fd„¦   «         Zej        de	fd„¦   «         Zddedefd„ZdS )ÚDepÚnameÚindexFÚunbacked_onlyÚreturnc                 ó   — d S ©N© ©Úselfr!   s     úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_inductor/dependencies.pyÚget_free_symbol_useszDep.get_free_symbol_uses)   s	   € ð 	ˆó    Úrenamesc                 ó   — d S r$   r%   ©r'   r+   s     r(   Úrenamez
Dep.rename/   ó   € àˆr*   c                 ó   — d S r$   r%   ©r'   s    r(   Ú	get_numelzDep.get_numel3   r/   r*   c                 ó   — d S r$   r%   r1   s    r(   Únumbytes_hintzDep.numbytes_hint7   r/   r*   c                 ó   — d S r$   r%   r1   s    r(   Ú
numel_hintzDep.numel_hint;   r/   r*   c                 ó   — d S r$   r%   r1   s    r(   Úhas_unbacked_symbolszDep.has_unbacked_symbols?   r/   r*   c                 ó   — d S r$   r%   r1   s    r(   Úis_contiguouszDep.is_contiguousC   r/   r*   ÚtÚprefixc                 ó   — | S r$   r%   )r'   r<   s     r(   Únormalize_with_stride_orderzDep.normalize_with_stride_orderG   s   € Øˆr*   N©F©r;   )Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚsympyÚExprÚabcÚabstractmethodÚboolr   ÚSymbolr)   Údictr   r.   r2   Úintr4   r6   r8   r:   r>   r%   r*   r(   r   r   %   s¨  € € € € € € Ø
€I€I�IØŒ:ÐÐÑàÔà$)ðð Ø!ðà	�E”LÔ	!ðð ð ñ Ôðð
 	Ôð˜d 3¨ 8œnð °ð ð ð ñ Ôðð 	Ôð˜5œ:ð ð ð ñ Ôðð 	Ôð˜sð ð ð ñ Ôðð 	Ôð˜Cð ð ð ñ Ôðð 	Ôð dð ð ð ñ Ôðð 	Ôð˜tð ð ð ñ Ôððð °#ð Àð ð ð ð ð ð r*   r   T)Úfrozenc                   ó  — e Zd ZU eed<   ej        ed<   eej        df         ed<   eej        df         ed<   dZ	edz  ed<   	 d#d	e
d
eej                 fd„Zd
efd„Zed
efd„¦   «         Zdd d
ee         dz  fd„Zd
ej        fd„Zd$d„Zd%ded
d fd„Zed
eej        ej        f         fd„¦   «         Zd$d„Zd
ej        fd„Zdeeef         d
d fd„Zd
efd„Zd
efd„Zd
e
fd„Zd
e
fd„Zd&de
d
e
fd „Zd
e
fd!„Z d
e
fd"„Z!dS )'Ú	MemoryDepr   r    .Ú	var_namesÚsizeNÚmodeFr!   r"   c                 ó„   — t          | j        |¦  «        t          | j        |¦  «        z  t          | j        |¦  «        z  S r$   )r
   r    rR   rQ   r&   s     r(   r)   zMemoryDep.get_free_symbol_usesU   s@   € õ ˜TœZ¨Ñ7Ô7Ý˜tœy¨-Ñ8Ô8ñ9å˜tœ~¨}Ñ=Ô=ñ>ð	
r*   c                 ób   — d}| j         �
d| j         › �}d| j        ›d| j        › d| j        › |› d�S )NÚ z, z
MemoryDep(ú))rS   r   r    Úranges)r'   Ú
maybe_modes     r(   Ú__repr__zMemoryDep.__repr__^   sJ   € Øˆ
ØŒ9Ð Ø)˜dœiÐ)Ð)ˆJØS˜DœIÐSÐS¨4¬:ÐSÐS¸¼ÐSÀjÐSÐSÐSÐSr*   c                 ó*   — t          | j        ¦  «        S r$   )ÚlenrQ   r1   s    r(   Únum_varszMemoryDep.num_varsd   s   € å�4”>Ñ"Ô"Ð"r*   Úotherc                 óÖ  ‡— | j         |j         k    sJ ‚| j         t          | j        j        ¦  «        k    rdS |j         t          |j        j        ¦  «        k    rdS t	          d„ t          j        | j        |j        ¦  «        D ¦   «         ¦  «        rdS t          j	        j
                             | j        | j        ¦  «        }t          j	        j
                             |j        |j        ¦  «        }t          t          |¦  «        ¦  «        t          |¦  «        k    s-t          t          |¦  «        ¦  «        t          |¦  «        k    r t                               d| |||¦  «         dS t          |¦  «        t          |¦  «        k    rdS d„ t!          |¦  «        D ¦   «         Šˆfd„|D ¦   «         }t          |¦  «        t          t#          | j         ¦  «        ¦  «        k    sJ ‚|S )zD
        Can return None if not able to decide loop orders.
        Nc              3   ó.   K  — | ]}|d k    p|dk    V — ŒdS )r   r   Nr%   )Ú.0Úss     r(   ú	<genexpr>z7MemoryDep.decide_loop_order_to_match.<locals>.<genexpr>}   s/   è è € ÐPÐP Aˆq�AŠvÐ˜˜ašÐPÐPÐPÐPÐPÐPr*   zaunable to decide loop order. self_dep=%s v.s. other_dep=%s, self_strides=%s v.s. other_strides=%sc                 ó   — i | ]\  }}||“Œ	S r%   r%   )ra   Úirb   s      r(   ú
<dictcomp>z8MemoryDep.decide_loop_order_to_match.<locals>.<dictcomp>›   s   € ÐDÐDÐD¡D A q˜1˜aÐDÐDÐDr*   c                 ó    •— g | ]
}‰|         ‘ŒS r%   r%   )ra   rb   Ústride_to_indexs     €r(   ú
<listcomp>z8MemoryDep.decide_loop_order_to_match.<locals>.<listcomp>œ   s   ø€ Ð;Ð;Ð;¨� Ô#Ð;Ð;Ð;r*   )r]   r\   r    r   ÚanyÚ	itertoolsÚchainrR   r   ÚgraphÚsizevarsÚstride_hintsrQ   r   ÚlogÚdebugÚ	enumerateÚrange)r'   r^   Úself_stridesÚother_stridesÚorderrh   s        @r(   Údecide_loop_order_to_matchz$MemoryDep.decide_loop_order_to_matchh   s×  ø€ ð Œ} ¤Ò.Ð.Ð.Ð.ð Œ=�C ¤
Ô 7Ñ8Ô8Ò8Ð8Ø�4ØŒ>�S ¤Ô!9Ñ:Ô:Ò:Ð:Ø�4õ ÐPÐP­¬¸¼ÀEÄJÑ)OÔ)OÐPÑPÔPÑPÔPð 	Ø�4õ ”wÔ'×4Ò4°T´ZÀÄÑPÔPˆÝœÔ(×5Ò5°e´kÀ5Ä?ÑSÔSˆõ �z˜,Ñ'Ô'Ñ(Ô(­C°Ñ,=Ô,=Ò=Ð=ÅÝ�}Ñ%Ô%ñB
ô B
å�ÑÔòB ð B õ �IŠIØsØØØØñô ð ð �4õ
 �lÑ#Ô#¥z°-Ñ'@Ô'@Ò@Ð@Ø�4àDÐD­I°lÑ,CÔ,CÐDÑDÔDˆØ;Ð;Ð;Ð;¨]Ð;Ñ;Ô;ˆå˜%Ñ Ô ¥J­u°T´]Ñ/CÔ/CÑ$DÔ$DÒDÐDÐDÐDØˆr*   c                 óh   — t          | j        t                               | j        d¦  «        ¦  «        S )zF
        Return the offset by setting every variable to be 0.
        r   )r   r    rL   ÚfromkeysrQ   r1   s    r(   Ú
get_offsetzMemoryDep.get_offset¡   s&   € õ ˜$œ*¥d§m¢m°D´NÀAÑ&FÔ&FÑGÔGÐGr*   c                 óz   — t          | j        gt                               | j        | j        ¦  «        ¢| j        ‘R Ž S )zÜ
        Normalize by merging loops. The difference from normalize_with_stride_order is,
        this method does not reorder loops while normalize_with_stride_order reorders
        loops based on stride order.
        )rP   r   Ú_RecordLoadStoreInnerÚ
_normalizer    rX   rS   r1   s    r(   Ú	normalizezMemoryDep.normalize§   sH   € õ ØŒIð
å"×-Ò-¨d¬j¸$¼+ÑFÔFð
ð ŒIð
ð 
ð 
ð 	
r*   r;   r<   c           	      óD  ‡— ddl m} t          j        j                             | j        | j        ¦  «        }t          t          t          |¦  «        ¦  «        |j        d¬¦  «        }|                     |¦  «        }| j        }| j        } ||¦  «        } ||¦  «        }	t          j        j                             |	|t          | j        g|	|¦  «        ¦  «        \  }
}}t!          |¦  «        \  }Št#          t%          |	 |ˆfd„|
D ¦   «         ¦  «        ¦  «        ¦  «        }t'          t)          j        | j        ¦  «        |¦  «        }t-          | j        |t1          |                     ¦   «         ¦  «        t1          |                     ¦   «         ¦  «        ¦  «        }|S )a'  
        Used to decide if two MemoryDep does not equal due to different loop orders.
        More specifically, when dep1 and dep2 are not equal, we can normalize
        both and check if they are equal after that. If yes, then the mismatch is
        caused by different loop orders.
        r   )ÚirT)ÚkeyÚreversec                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r%   r%   ©ra   ÚxÚadd_vars     €r(   ri   z9MemoryDep.normalize_with_stride_order.<locals>.<listcomp>Õ   s!   ø€ ÐBÐBÐB¨˜˜ ™œÐBÐBÐBr*   )Útorch._inductorr€   r   rm   rn   ro   r    rQ   Úsortedrs   r\   Ú__getitem__Úsame_reorderrR   Ú_simplify_loopsr   Úvar_builderrL   Úzipr   rF   ÚexpandrP   r   ÚtupleÚkeysÚvalues)r'   r<   r€   Ústridesrv   Ústride_reorderÚsizesrQ   Únew_reordered_sizesÚnew_reordered_var_namesÚnew_simplified_sizesÚreindexÚ_pruneÚ
var_rangesÚreplacementÚ	new_indexÚoutr†   s                    @r(   r>   z%MemoryDep.normalize_with_stride_order³   s—  ø€ ð 	'Ð&Ð&Ð&Ð&Ð&å”'Ô"×/Ò/°´
¸D¼NÑKÔKˆõ •u�S ™\œ\Ñ*Ô*°Ô0CÈTÐRÑRÔRˆØŸš¨Ñ/Ô/ˆØ”	ˆØ”Nˆ	à,˜n¨UÑ3Ô3ÐØ"0 .°Ñ";Ô";Ðå01´Ô0@×0PÒ0PØ#ØÝ$Ø”�Ð5Ð7Jñô ñ1
ô 1
Ñ-Ð˜g võ *¨&Ñ1Ô1Ñˆ
�GÝÝØ'Ø�ÐBÐBÐBÐBÐ-AÐBÑBÔBÑCÔCñô ñ
ô 
ˆõ �uœ|¨D¬JÑ7Ô7¸ÑEÔEˆ	åØŒI�y¥%¨
¯ªÑ(9Ô(9Ñ":Ô":½EÀ*×BSÒBSÑBUÔBUÑ<VÔ<Vñ
ô 
ˆð ˆ
r*   c                 óP   — t          t          | j        | j        ¦  «        ¦  «        S )z{c0: 128, c1: 512, ...})rL   r�   rQ   rR   r1   s    r(   rX   zMemoryDep.rangesß   s    € õ •C˜œ¨¬	Ñ2Ô2Ñ3Ô3Ð3r*   c                 ó¬   — t          | j        t          j        j                             | j        | j        ¦  «        | j        | j	        | j
        ¬¦  «        S )N)r   r    rQ   rR   rS   )rP   r   r   rm   rn   Úsimplify_with_rangesr    rX   rQ   rR   rS   r1   s    r(   r    zMemoryDep.simplify_with_rangesä   sI   € ÝØ”Ý”'Ô"×7Ò7¸¼
ÀDÄKÑPÔPØ”nØ”Ø”ð
ñ 
ô 
ð 	
r*   c                 ó  — |                       ¦   «         r%t          j                             | j        ¦  «        }nSt          | j        j        ¦  «        }t          j	        j
        }t          | j        | j        ¦  «        D ]\  }}||v r||z  }Œ|S r$   )Úis_indirectr   rm   r2   r   r   r    r   rF   ÚSÚOner�   rQ   rR   )r'   ÚnumelÚvarsÚvarrR   s        r(   r2   zMemoryDep.get_numelí   sƒ   € Ø×ÒÑÔð 	)Ý”G×%Ò% d¤iÑ0Ô0ˆEˆEå,6°t´zÔ7NÑ,OÔ,OˆDÝ”G”KˆEÝ  ¤°´Ñ;Ô;ð )ð )‘	��TØ˜$�;�;Ø! D™L�EøØˆr*   r+   c                 ó~   — | j         |v r3t          || j                  | j        | j        | j        | j        ¬¦  «        S | S )N)rQ   rR   rS   )r   rP   r    rQ   rR   rS   r-   s     r(   r.   zMemoryDep.renameø   sK   € ØŒ9˜ÐÐÝØ˜œ	Ô"Ø”
Øœ.Ø”YØ”Yðñ ô ð ð ˆr*   c                 óú   — 	 t           j        j                             |                      ¦   «         d¬¦  «        t          t           j                             | j        ¦  «        ¦  «        z  S # t          $ r Y dS w xY w©Nr   )Úfallback©	r   rm   rn   Úoptimization_hintr2   r   Ú	get_dtyper   ÚNotImplementedErrorr1   s    r(   r4   zMemoryDep.numbytes_hint  ó~   € ð	Ý”7Ô#×5Ò5Ø—’Ñ Ô ¨1ð 6ñ ô å�qœw×0Ò0°´Ñ;Ô;Ñ<Ô<ñ=ð =øõ #ð 	ð 	ð 	Ø�1�1ð	øøøó   ‚A)A, Á,
A:Á9A:c                 ó–   — 	 t           j        j                             |                      ¦   «         d¬¦  «        S # t
          $ r Y dS w xY wrª   ©r   rm   rn   r­   r2   r¯   r1   s    r(   r6   zMemoryDep.numel_hint  óR   € ð	Ý”7Ô#×5Ò5°d·n²nÑ6FÔ6FÐQRÐ5ÑSÔSÐSøÝ"ð 	ð 	ð 	Ø�1�1ð	øøøó   ‚7: º
AÁAc                 óf   — t          t          |                      ¦   «         ¦  «        ¦  «        dk    S ©Nr   ©r\   r   r2   r1   s    r(   r8   zMemoryDep.has_unbacked_symbols  ó(   € ÝÕ(¨¯ªÑ)9Ô)9Ñ:Ô:Ñ;Ô;¸aÒ?Ð?r*   c                 óž   — t          | j        t          j        ¦  «        rdS t          | j        t          j        ¦  «        o| j        | j        v S ©NT)Ú
isinstancer    rF   ÚIntegerrK   rQ   r1   s    r(   r:   zMemoryDep.is_contiguous  s?   € Ý�d”j¥%¤-Ñ0Ô0ð 	Ø�4Ý˜$œ*¥e¤lÑ3Ô3ÐT¸¼
ÀdÄnÐ8TÐTr*   TÚresult_for_complex_expressionc                 óÜ  — t          | j        ¦  «        dk    rdS t          | j        t          j        ¦  «        r| j        j        n| j        g}| j        d         }|D ]Ž}||k    r dS t          |t          j        ¦  «        rit          |j        ¦  «        dk    rQ|j        d         |k    r@t          |j        d         t          t          j	        f¦  «        r|j        d         dk    r dS Œ�|S )zA
        Whether the stride for the last dimension is 1.
        r   Téÿÿÿÿr   r   F)
r\   rQ   r¼   r    rF   ÚAddÚargsÚMulrM   r½   )r'   r¾   ÚtermsÚlast_symÚterms        r(   Ústride1_for_last_dimzMemoryDep.stride1_for_last_dim  sç   € õ ˆtŒ~ÑÔ !Ò#Ð#Ø�4å#-¨d¬j½%¼)Ñ#DÔ#DÐV�”
”�È4Ì:È,ˆà”> "Ô%ˆØð 	ð 	ˆDØ�xÒÐØ�t�tõ
 ˜4¥¤Ñ+Ô+ðå˜œ	‘N”N aÒ'Ð'Ø”I˜a”L HÒ,Ð,Ý˜tœy¨œ|­cµ5´=Ð-AÑBÔBð -à”I˜a”L 1Ò$Ð$à�u�uøà,Ð,r*   c                 óÒ   — t          | j        t          j        ¦  «        r#| j        | j        vo|                      ¦   «          S t          | j        t          t          j        f¦  «        S r$   )r¼   r    rF   rK   rQ   r¢   rM   r½   r1   s    r(   Ú	is_scalarzMemoryDep.is_scalar6  sU   € Ý�d”j¥%¤,Ñ/Ô/ð 	OØ”: T¤^Ð3ÐN¸D×<LÒ<LÑ<NÔ<NÐ8NÐNÝ˜$œ*¥s­E¬MÐ&:Ñ;Ô;Ð;r*   c                 óH   — t          d„ | j        j        D ¦   «         ¦  «        S )Nc              3   ó>   K  — | ]}t          |j        ¦  «        V — Œd S r$   )r¢   r   ©ra   Úvs     r(   rc   z(MemoryDep.is_indirect.<locals>.<genexpr><  s,   è è € ÐHÐH¨1•;˜qœvÑ&Ô&ÐHÐHÐHÐHÐHÐHr*   )rj   r    r   r1   s    r(   r¢   zMemoryDep.is_indirect;  s$   € ÝÐHÐH°´
Ô0GÐHÑHÔHÑHÔHÐHr*   r?   )r"   rP   r@   ©T)"rA   rB   rC   rD   rE   rF   rG   r�   rK   rS   rJ   r   r)   rZ   ÚpropertyrM   r]   Úlistrw   rz   r~   r>   rL   rX   r    r2   r.   r4   r6   r8   r:   rÇ   rÉ   r¢   r%   r*   r(   rP   rP   K   sã  € € € € € € ð €I€I�IàŒ:ÐÐÑØ�U”\ 3Ð&Ô'Ð'Ð'Ñ'Ø
�”
˜C�Ô
 Ð Ð Ñ Ø€Dˆ#�‰*ÐÐÑð %*ð
ð 
Ø!ð
à	�E”LÔ	!ð
ð 
ð 
ð 
ðT˜#ð Tð Tð Tð Tð ð#˜#ð #ð #ð #ñ „Xð#ð7°ð 7ÀÀSÄ	ÈDÑ@Pð 7ð 7ð 7ð 7ðrH˜EœJð Hð Hð Hð Hð

ð 

ð 

ð 

ð*ð *°#ð *Àð *ð *ð *ð *ðX ð4˜˜Uœ\¨5¬:Ð5Ô6ð 4ð 4ð 4ñ „Xð4ð
ð 
ð 
ð 
ð	˜5œ:ð 	ð 	ð 	ð 	ð	˜d 3¨ 8œnð 	°ð 	ð 	ð 	ð 	ð˜sð ð ð ð ð˜Cð ð ð ð ð@ dð @ð @ð @ð @ðU˜tð Uð Uð Uð Uð
-ð -À$ð -ÐRVð -ð -ð -ð -ð:<˜4ð <ð <ð <ð <ð
I˜Tð Ið Ið Ið Ið Ið Ir*   rP   c                   óü   — e Zd ZU eed<   dZedz  ed<   edej        fd„¦   «         Z	dej        fd„Z
deeef         dd fd„Z	 dd
edeej                 fd„Zdefd„Zdefd„Zdefd„Zdefd„Zdefd„Zdefd„ZdS )ÚStarDepr   NrS   r"   c                 ó    — t          d¦  «        ‚)NzStarDep does not have an index©r¯   r1   s    r(   r    zStarDep.indexF  ó   € õ "Ð"BÑCÔCÐCr*   c                 óJ   — t           j                             | j        ¦  «        S r$   )r   rm   r2   r   r1   s    r(   r2   zStarDep.get_numelK  s   € ÝŒw× Ò  ¤Ñ+Ô+Ð+r*   r+   c                 óX   — | j         |v r t          || j                  | j        ¦  «        S | S r$   )r   rÒ   rS   r-   s     r(   r.   zStarDep.renameN  s-   € ØŒ9˜ÐÐÝ˜7 4¤9Ô-¨t¬yÑ9Ô9Ð9Øˆr*   Fr!   c                 ó   — t          ¦   «         S r$   r   r&   s     r(   r)   zStarDep.get_free_symbol_usesS  ó   € õ ‰|Œ|Ðr*   c                 óú   — 	 t           j        j                             |                      ¦   «         d¬¦  «        t          t           j                             | j        ¦  «        ¦  «        z  S # t          $ r Y dS w xY wrª   r¬   r1   s    r(   r4   zStarDep.numbytes_hintX  r°   r±   c                 ó–   — 	 t           j        j                             |                      ¦   «         d¬¦  «        S # t
          $ r Y dS w xY wrª   r³   r1   s    r(   r6   zStarDep.numel_hint`  r´   rµ   c                 óf   — t          t          |                      ¦   «         ¦  «        ¦  «        dk    S r·   r¸   r1   s    r(   r8   zStarDep.has_unbacked_symbolsf  r¹   r*   c                 ó   — dS ©NFr%   r1   s    r(   r:   zStarDep.is_contiguousi  ó   € Øˆur*   c                 ó   — dS rÞ   r%   r1   s    r(   rÉ   zStarDep.is_scalarl  rß   r*   c                 ó   — dS rÞ   r%   r1   s    r(   r¢   zStarDep.is_indirecto  rß   r*   r?   )rA   rB   rC   rD   rE   rS   rÏ   rF   rG   r    r2   rL   r.   rJ   r   rK   r)   rM   r4   r6   r8   r:   rÉ   r¢   r%   r*   r(   rÒ   rÒ   ?  s†  € € € € € € ð €I€I�IØ€Dˆ#�‰*ÐÐÑð ðD�u”zð Dð Dð Dñ „XðDð,˜5œ:ð ,ð ,ð ,ð ,ð˜d 3¨ 8œnð °ð ð ð ð ð %*ðð Ø!ðà	�E”LÔ	!ðð ð ð ð
˜sð ð ð ð ð˜Cð ð ð ð ð@ dð @ð @ð @ð @ð˜tð ð ð ð ð˜4ð ð ð ð ð˜Tð ð ð ð ð ð r*   rÒ   c                   óè   — e Zd ZU eed<   eed<   dZeed<   	 ddedeej	                 fd„Z
edej        fd„¦   «         Zdej        fd	„Zd
eeef         dd fd„Zdefd„Zdefd„Zdefd„Zdefd„ZdS )ÚWeakDepr   Úmutating_bufFÚis_faker!   r"   c                 ó   — t          ¦   «         S r$   r   r&   s     r(   r)   zWeakDep.get_free_symbol_uses‰  rÙ   r*   c                 ó    — t          d¦  «        ‚)NzWeakDep does not have an indexrÔ   r1   s    r(   r    zWeakDep.indexŽ  rÕ   r*   c                 ó$   — t           j        j        S r$   )rF   r£   r¤   r1   s    r(   r2   zWeakDep.get_numel“  s   € ÝŒwŒ{Ðr*   r+   c                 ód   — | j         |v r&t          || j                  | j        | j        ¦  «        S | S r$   )r   rã   rä   rå   r-   s     r(   r.   zWeakDep.rename–  s2   € ØŒ9˜ÐÐÝ˜7 4¤9Ô-¨tÔ/@À$Ä,ÑOÔOÐOØˆr*   c                 ó   — dS ©Nr   r%   r1   s    r(   r4   zWeakDep.numbytes_hint›  ó   € Øˆqr*   c                 ó   — dS rë   r%   r1   s    r(   r6   zWeakDep.numel_hintž  rì   r*   c                 ó   — dS rÞ   r%   r1   s    r(   r8   zWeakDep.has_unbacked_symbols¡  rß   r*   c                 ó   — dS rÞ   r%   r1   s    r(   r:   zWeakDep.is_contiguous¤  rß   r*   Nr?   )rA   rB   rC   rD   rE   rå   rJ   r   rF   rK   r)   rÏ   rG   r    r2   rL   r.   rM   r4   r6   r8   r:   r%   r*   r(   rã   rã   {  sU  € € € € € € ð €I€I�IàÐÐÑð €GˆTÐÐÑð %*ðð Ø!ðà	�E”LÔ	!ðð ð ð ð
 ðD�u”zð Dð Dð Dñ „XðDð˜5œ:ð ð ð ð ð˜d 3¨ 8œnð °ð ð ð ð ð
˜sð ð ð ð ð˜Cð ð ð ð ð dð ð ð ð ð˜tð ð ð ð ð ð r*   rã   c                   ól   — e Zd ZU ej        ed<   eej        df         ed<   eej        df         ed<   dS )ÚIndexExprDepr    .rQ   rR   N)rA   rB   rC   rF   rG   rE   r�   rK   r%   r*   r(   rñ   rñ   ¨  sO   € € € € € € àŒ:ÐÐÑØ�U”\ 3Ð&Ô'Ð'Ð'Ñ'Ø
�”
˜C�Ô
 Ð Ð Ñ Ð Ð r*   rñ   c                   ó‚  — e Zd ZU ee         ed<   ee         ed<   ee         ed<   dZee	j
                 dz  ed<   dZedz  ed<   deeef         dd fd	„Zd
eee         z  dd fd„Zdd„Zeded          dd fd„¦   «         Zdee         dd fd„Zdee         fd„Zddedee         fd„Z	 ddedee	j                 fd„ZdS )Ú
ReadWritesÚreadsÚwritesÚindex_exprsNÚ
range_varsrš   r+   r"   c                 óÀ   ‡— t          t          ˆfd„| j        D ¦   «         ¦  «        t          ˆfd„| j        D ¦   «         ¦  «        | j        | j        | j        ¦  «        S )Nc              3   óB   •K  — | ]}|                      ‰¦  «        V — Œd S r$   ©r.   ©ra   Údepr+   s     €r(   rc   z$ReadWrites.rename.<locals>.<genexpr>¹  s/   øè è € ÐAÐA¨s�s—z’z 'Ñ*Ô*ÐAÐAÐAÐAÐAÐAr*   c              3   óB   •K  — | ]}|                      ‰¦  «        V — Œd S r$   rú   rû   s     €r(   rc   z$ReadWrites.rename.<locals>.<genexpr>º  s/   øè è € ÐBÐB¨s�s—z’z 'Ñ*Ô*ÐBÐBÐBÐBÐBÐBr*   )ró   r   rô   rõ   rö   r÷   rš   r-   s    `r(   r.   zReadWrites.rename·  si   ø€ ÝÝÐAÐAÐAÐA°d´jÐAÑAÔAÑAÔAÝÐBÐBÐBÐB°d´kÐBÑBÔBÑBÔBØÔØŒOØŒOñ
ô 
ð 	
r*   rü   c                 ó  — t          |t          t          t          f¦  «        sJ ‚t          |t          ¦  «        st          |g¦  «        }t	          t          j        | j        |¦  «        | j        | j        | j	        | j
        ¦  «        S r$   )r¼   rã   rÒ   r   ró   Úunionrô   rõ   rö   r÷   rš   )r'   rü   s     r(   Ú	with_readzReadWrites.with_readÀ  sy   € Ý˜#¥­µ*Ð=Ñ>Ô>Ð>Ð>Ð>Ý˜#�zÑ*Ô*ð 	$Ý˜c˜UÑ#Ô#ˆCÝÝÔ˜TœZ¨Ñ-Ô-ØŒKØÔØŒOØŒOñ
ô 
ð 	
r*   r^   c                 óä   — t          j        | j        |j        ¦  «        }t          j        | j        |j        ¦  «        }t          j        | j        |j        ¦  «        }t          ||z
  ||¦  «        S r$   )r   rÿ   rô   rõ   rö   ró   )r'   r^   rô   rõ   rö   s        r(   ÚmergezReadWrites.mergeÌ  s\   € ÝÔ  ¤¨U¬[Ñ9Ô9ˆÝÔ! $¤+¨u¬|Ñ<Ô<ˆÝ Ô& tÔ'7¸Ô9JÑKÔKˆÝ˜% &™.¨&°+Ñ>Ô>Ð>r*   Úread_writesc                 óº   — t          j        d„ | D ¦   «         Ž }t          j        d„ | D ¦   «         Ž |z
  }t          j        d„ | D ¦   «         Ž }t          |||¦  «        S )Nc                 ó   — g | ]	}|j         ‘Œ
S r%   )rõ   ©ra   Úrws     r(   ri   z)ReadWrites.merge_list.<locals>.<listcomp>Ô  s   € Ð'HÐ'HÐ'H°b¨¬	Ð'HÐ'HÐ'Hr*   c                 ó   — g | ]	}|j         ‘Œ
S r%   )rô   r  s     r(   ri   z)ReadWrites.merge_list.<locals>.<listcomp>Õ  s   € Ð&FÐ&FÐ&F°B r¤xÐ&FÐ&FÐ&Fr*   c                 ó   — g | ]	}|j         ‘Œ
S r%   )rö   r  s     r(   ri   z)ReadWrites.merge_list.<locals>.<listcomp>Ö  s   € Ð,RÐ,RÐ,RÀ¨R¬^Ð,RÐ,RÐ,Rr*   )r   rÿ   ró   )r  Ú
all_writesÚ	all_readsÚall_index_exprss       r(   Ú
merge_listzReadWrites.merge_listÒ  sm   € åÔ%Ð'HÐ'H¸KÐ'HÑ'HÔ'HÐIˆ
ÝÔ$Ð&FÐ&F¸+Ð&FÑ&FÔ&FÐGÈ*ÑTˆ	Ý$Ô*Ð,RÐ,RÀkÐ,RÑ,RÔ,RÐSˆÝ˜) Z°ÑAÔAÐAr*   Ú	rem_readsc                 ó`   — t          | j        |z
  | j        | j        | j        | j        ¦  «        S r$   )ró   rô   rõ   rö   r÷   rš   )r'   r  s     r(   Úremove_readszReadWrites.remove_readsÙ  s3   € ÝØŒJ˜Ñ"ØŒKØÔØŒOØŒOñ
ô 
ð 	
r*   c                 ó@   — t          j        | j        | j        ¦  «        S r$   )rk   rl   rô   rõ   r1   s    r(   Úreads_and_writeszReadWrites.reads_and_writesâ  s   € ÝŒ˜tœz¨4¬;Ñ7Ô7Ð7r*   TÚignore_integer_indexc                 ó   — t          ¦   «         }|                      ¦   «         D ]Z}t          |t          ¦  «        sŒ|r&t          |j        t
          t          j        f¦  «        s|                     |j	        ¦  «         Œ[|S )z6
        Integer index is used for load_seed.
        )
r   r  r¼   rP   r    rM   rF   r½   Úaddr   )r'   r  Únamesrü   s       r(   Úbuffer_nameszReadWrites.buffer_nameså  s€   € õ ",¡¤ˆØ×(Ò(Ñ*Ô*ð 	$ð 	$ˆCÝ˜c¥9Ñ-Ô-ð ØØ'ð $­zØ”	�C¥¤Ð/ñ0ô 0ð $ð —	’	˜#œ(Ñ#Ô#Ð#øØˆr*   Fr!   c                 ó€   — t          ¦   «         }|                      ¦   «         D ]}||                     |¦  «        z  }Œ|S r$   )r   r  r)   )r'   r!   Úresultrü   s       r(   r)   zReadWrites.get_free_symbol_usesó  sG   € õ ,6©<¬<ˆà×(Ò(Ñ*Ô*ð 	>ð 	>ˆCØ�c×.Ò.¨}Ñ=Ô=Ñ=ˆFˆFØˆr*   )r^   ró   r"   ró   rÎ   r?   )rA   rB   rC   r   r   rE   rñ   r÷   rÐ   rF   rG   rš   r   rL   rD   r.   r   r  Ústaticmethodr  r  r   r  rJ   r  rK   r)   r%   r*   r(   ró   ró   ¯  s¿  € € € € € € à�cŒ?ÐÐÑØ�sŒOÐÐÑØ˜LÔ)Ð)Ð)Ñ)Ø*.€J��U”ZÔ  4Ñ'Ð.Ð.Ñ.Ø#'€J�	˜DÑ Ð'Ð'Ñ'ð
˜d 3¨ 8œnð 
°ð 
ð 
ð 
ð 
ð

˜S :¨c¤?Ñ2ð 

°|ð 

ð 

ð 

ð 

ð?ð ?ð ?ð ?ð ðB  \Ô 2ð B°|ð Bð Bð Bñ „\ðBð
 j°¤oð 
¸,ð 
ð 
ð 
ð 
ð8 (¨3¤-ð 8ð 8ð 8ð 8ðð °ð ÀÈCÄð ð ð ð ð %*ðð Ø!ðà	�E”LÔ	!ðð ð ð ð ð r*   ró   c                   óè  ‡ — e Zd Zdededdfˆ fd„Zedeej	        z  de
ej	                 de
ej	                 ddfd	„¦   «         Zedej	        dedeej	        eej        d
f         eej	        d
f         f         fd„¦   «         Zdej	        deej	        eej        d
f         eej	        d
f         f         fd„Zdedej	        ddfd„Zdededdfd„Z	 ddedej	        dededz  ddf
d„Zdedej	        deddfd„Zdej	        dej        dz  ddfd„Zdej	        dej        dz  ddfd„Z	 	 d dedeeej	        ej	        ej	        f         dedej        dedeeej	        f         dz  dedz  ddfd„Zˆ xZS )!r|   rš   r~   r"   Nc                 óÖ   •— t          ¦   «                              ¦   «          t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        || _        || _        d S r$   )ÚsuperÚ__init__r   Ú_readsÚ_writesÚ_index_exprsÚ_var_rangesÚ_should_normalize)r'   rš   r~   Ú	__class__s      €r(   r  z_RecordLoadStoreInner.__init__þ  sQ   ø€ Ý‰Œ×ÒÑÔÐÝ'1¡|¤|ˆŒÝ.8©l¬lˆŒÝ6@±l´lˆÔØ&0ˆÔØ'0ˆÔÐÐr*   r    rQ   r”   c                 óØ   — t          | t          j        ¦  «        sdS | j        }|r@|d         |vr:|                     ¦   «          |                     ¦   «          |r|d         |v°4dS dS dS dS )zz
        Reduction has last (reduced) dim in its sizes, but
        downstream users won't.  Normalize this away.
        NrÀ   )r¼   rF   rG   r   Úpop)r    rQ   r”   r   s       r(   Údrop_unused_symbolsz)_RecordLoadStoreInner.drop_unused_symbols  s�   € õ ˜%¥¤Ñ,Ô,ð 	àˆFØÔ)ˆØð 	˜I bœM°Ð=Ð=Ø�MŠM‰OŒOˆOØ�IŠI‰KŒKˆKð ð 	˜I bœM°Ð=Ð=Ð=Ð=ð 	ð 	ð 	ð 	Ð=Ð=r*   .c           	      ój  ‡
— g |                      ¦   «         ¢}t          |                     ¦   «         ¦  «        }t          j        j                             ||t          |g||¦  «        ¦  «        \  }}}t          t          ¦   «         ¦  «        \  }Š
t          t          | |ˆ
fd„|D ¦   «         ¦  «        ¦  «        ¦  «        }	t          t          j        |¦  «        |	¦  «        }g |                      ¦   «         ¢}g |¢}|                      |||¦  «         |t          |¦  «        t          |¦  «        fS )Nc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r%   r%   r„   s     €r(   ri   z4_RecordLoadStoreInner._normalize.<locals>.<listcomp>*  s!   ø€ Ð3RÐ3RÐ3RÀ1°G°G¸A±J´JÐ3RÐ3RÐ3Rr*   )r�   r�   r‘   r   rm   rn   r‹   r   rŒ   Úcanonicalization_prefixrL   r�   r   rF   rŽ   r'  )Úclsr    rš   Ú
index_varsr”   Ú	new_sizesr˜   r™   Únew_varsr›   r†   s             @r(   r}   z _RecordLoadStoreInner._normalize  s"  ø€ ð *�z—’Ñ(Ô(Ð)ˆ
Ý�j×'Ò'Ñ)Ô)Ñ*Ô*ˆÝ%&¤WÔ%5×%EÒ%EØØÝ$ e W¨j¸%Ñ@Ô@ñ&
ô &
Ñ"ˆ	�7˜Fõ (Õ(?Ñ(AÔ(AÑBÔBÑˆ�'Ý�3˜z¨7¨7Ð3RÐ3RÐ3RÐ3RÈ	Ð3RÑ3RÔ3RÑ+SÔ+SÑTÔTÑUÔUˆÝ�5œ<¨Ñ.Ô.°Ñ<Ô<ˆà%�X—]’]‘_”_Ð%ˆØ �i�Lˆ	Ø×Ò  x°Ñ;Ô;Ð;Ø•e˜H‘o”o¥u¨YÑ'7Ô'7Ð7Ð7r*   c                 ó®  — | j         s–d„ | j                             ¦   «         D ¦   «         }d„ t          | j                             ¦   «         |¦  «        D ¦   «         }d„ |D ¦   «         }|                      |||¦  «         |t          |¦  «        t          |¦  «        fS d„ | j                             ¦   «         D ¦   «         }|                      ||¦  «        S )Nc                 óV   — g | ]&}t           j        j                             |¦  «        ‘Œ'S r%   ©r   rm   rn   Úsimplify)ra   r…   s     r(   ri   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>6  s+   € ÐUÐUÐU°a•Q”WÔ%×.Ò.¨qÑ1Ô1ÐUÐUÐUr*   c                 ó$   — g | ]\  }}|d k    ¯|‘ŒS ©r   r%   ©ra   ÚkrÍ   s      r(   ri   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>7  s"   € ÐUÐUÐU™t˜q !ÈaÐSTÊfÈf˜ÈfÈfÈfr*   c                 ó   — g | ]
}|d k    ¯|‘ŒS r4  r%   rÌ   s     r(   ri   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>8  s   € Ð0Ð0Ð0˜1¨¨aª¨�Q¨¨¨r*   c                 ó^   — i | ]*\  }}|t           j        j                             |¦  «        “Œ+S r%   r1  r5  s      r(   rf   z6_RecordLoadStoreInner.canonicalize.<locals>.<dictcomp>=  sA   € ð 
ð 
ð 
á��1ð �qŒwÔ×(Ò(¨Ñ+Ô+ð
ð 
ð 
r*   )	r#  r"  r‘   r�   r�   r'  r�   Úitemsr}   )r'   r    r”   rQ   rš   s        r(   Úcanonicalizez"_RecordLoadStoreInner.canonicalize2  sæ   € ð Ô%ð 	9ØUÐU¸4Ô;K×;RÒ;RÑ;TÔ;TÐUÑUÔUˆEØUÐU¥s¨4Ô+;×+@Ò+@Ñ+BÔ+BÀEÑ'JÔ'JÐUÑUÔUˆIØ0Ð0 Ð0Ñ0Ô0ˆEà×$Ò$ U¨I°uÑ=Ô=Ð=à�% 	Ñ*Ô*­E°%©L¬LÐ8Ð8ð
ð 
àÔ(×.Ò.Ñ0Ô0ð
ñ 
ô 
ˆ
ð �Š˜u jÑ1Ô1Ð1r*   r   c                 óv   — | j                              t          |g|                      |¦  «        ¢R Ž ¦  «         d S r$   )r  r  rP   r:  ©r'   r   r    s      r(   Úloadz_RecordLoadStoreInner.loadE  s:   € ØŒ�Š�	 $ÐB¨×):Ò):¸5Ñ)AÔ)AÐBÐBÐBÑCÔCÐCÐCÐCr*   c                 ó„   — t          |t          ¦  «        sJ ‚|                      |t          j        |¦  «        ¦  «         d S r$   )r¼   rM   r=  rF   r½   r<  s      r(   Ú	load_seedz_RecordLoadStoreInner.load_seedH  s<   € Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ø�	Š	�$�œ eÑ,Ô,Ñ-Ô-Ð-Ð-Ð-r*   ÚvaluerS   c                 ó|   — | j                              t          |g|                      |¦  «        ¢R d|iŽ¦  «         d S )NrS   )r   r  rP   r:  )r'   r   r    r@  rS   s        r(   Ústorez_RecordLoadStoreInner.storeL  sF   € ð 	Œ×Ò� 4ÐN¨$×*;Ò*;¸EÑ*BÔ*BÐNÐNÐNÈÐNÐNÑOÔOÐOÐOÐOr*   c                 ó<   — |                       ||d|› d�¦  «         d S )Nzstore_reduction(rW   )rB  )r'   r   r    r@  s       r(   Ústore_reductionz%_RecordLoadStoreInner.store_reductionQ  s*   € Ø�
Š
�4˜Ð ;°5Ð ;Ð ;Ð ;Ñ<Ô<Ð<Ð<Ð<r*   Údtypec                 ón   — | j                              t          |                      |¦  «        Ž ¦  «         d S r$   ©r!  r  rñ   r:  ©r'   r    rE  s      r(   Ú
index_exprz _RecordLoadStoreInner.index_exprT  ó2   € ØÔ×Ò�l¨D×,=Ò,=¸eÑ,DÔ,DÐEÑFÔFÐFÐFÐFr*   c                 ón   — | j                              t          |                      |¦  «        Ž ¦  «         d S r$   rG  rH  s      r(   Ú
value_exprz _RecordLoadStoreInner.value_exprW  rJ  r*   r‘   Ú
boundariesÚboundary_indicesÚindexing_dtypeÚrightÚsorterÚsorter_indicesc                 óÂ   — | j                              t          |d         ¦  «        ¦  «         |�/| j                              t          |d         ¦  «        ¦  «         dS dS )z?Records the names of the buffers that bucketize will read from.r   N)r  r  rÒ   )r'   r‘   rM  rN  rO  rP  rQ  rR  s           r(   Ú	bucketizez_RecordLoadStoreInner.bucketizeZ  sX   € ð 	Œ�Š� 
¨1¤Ñ.Ô.Ñ/Ô/Ð/ØÐØŒK�OŠO�G F¨1¤IÑ.Ô.Ñ/Ô/Ð/Ð/Ð/ð Ðr*   r$   ©NN)rA   rB   rC   r   rJ   r  r  rM   rF   rG   rÐ   r'  Úclassmethodr�   rK   r}   r:  rD   r=  r?  rB  rD  ÚtorchrE  rI  rL  r   rT  Ú__classcell__©r$  s   @r(   r|   r|   ý  sE  ø€ € € € € ð1 9ð 1¸ð 1À$ð 1ð 1ð 1ð 1ð 1ð 1ð ðØ�U”ZÑðà˜œ
Ô#ðð �E”JÔðð 
ð	ð ð ñ „\ðð" ð8Ø”Jð8Ø,5ð8à	ˆuŒz˜5 ¤¨sÐ!2Ô3°U¸5¼:Às¸?Ô5KÐKÔ	Lð8ð 8ð 8ñ „[ð8ð22Ø”Zð2à	ˆuŒz˜5 ¤¨sÐ!2Ô3°U¸5¼:Às¸?Ô5KÐKÔ	Lð2ð 2ð 2ð 2ð&D˜ð D U¤Zð D°Dð Dð Dð Dð Dð.˜cð .¨#ð .°$ð .ð .ð .ð .ð
 LPðPð PØðPØ %¤
ðPØ36ðPØ>AÀD¹jðPà	ðPð Pð Pð Pð
= Cð =°´
ð =À3ð =È4ð =ð =ð =ð =ðG ¤
ð G°5´;ÀÑ3Eð GÈ$ð Gð Gð Gð GðG ¤
ð G°5´;ÀÑ3Eð GÈ$ð Gð Gð Gð Gð 15Ø#'ð0ð 0àð0ð ˜#˜uœz¨5¬:°u´zÐAÔBð0ð ð	0ð
 œð0ð ð0ð �c˜5œ:�oÔ&¨Ñ-ð0ð ˜D™ð0ð 
ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r*   r|   c                   ó,   ‡ — e Zd Zdededdfˆ fd„Zˆ xZS )ÚRecordLoadStorerš   r~   r"   Nc                 ón   •— t          ||¬¦  «        }t          ¦   «                              |¬¦  «         d S )N©rš   r~   )Úparent_handler)r|   r  r  )r'   rš   r~   r^  r$  s       €r(   r  zRecordLoadStore.__init__k  s?   ø€ Ý.Ø!¨Yð
ñ 
ô 
ˆõ 	‰Œ×Ò¨ÐÑ7Ô7Ð7Ð7Ð7r*   )rA   rB   rC   r   rJ   r  rX  rY  s   @r(   r[  r[  j  sR   ø€ € € € € ð8 9ð 8¸ð 8À$ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8r*   r[  r<   r"   c                 óz   ‡ ‡‡— t          j        ¦   «         Ši Šdt          j        dt          j        fˆˆ ˆfd„}‰|fS )NÚlengthr"   c                 óR   •— t          ‰› t          ‰¦  «        › �¦  «        }| ‰|<   |S r$   )r   Únext)r`  rÍ   Úcntr<   rš   s     €€€r(   r†   zvar_builder.<locals>.add_varw  s/   ø€ Ý &Ð5­$¨s©)¬)Ð5Ð5Ñ6Ô6ˆØˆ
�1‰Øˆr*   )rk   ÚcountrF   rG   rK   )r<   r†   rc  rš   s   ` @@r(   rŒ   rŒ   s  s^   øøø€ Ý
Œ/Ñ
Ô
€CØ€Jð�œ
ð ¥u¤|ð ð ð ð ð ð ð ð ð
 �wÐÐr*   Úargsizesc                 óL   ‡— t          | ¦  «        \  }Šˆfd„|D ¦   «         }||fS )Nc                 óJ   •— g | ]}t          t          ‰|¦  «        ¦  «        ‘Œ S r%   )rÐ   Úmap)ra   rR   r†   s     €r(   ri   z)index_vars_no_squeeze.<locals>.<listcomp>ƒ  s+   ø€ Ð%TÐ%TÐ%TÀ4¥d­3¨w¸Ñ+=Ô+=Ñ&>Ô&>Ð%TÐ%TÐ%Tr*   )rŒ   )r<   re  rš   rÂ   r†   s       @r(   Úindex_vars_no_squeezeri    s;   ø€ õ & fÑ-Ô-Ñ€J�Ø%TÐ%TÐ%TÐ%TÈ8Ð%TÑ%TÔ%T€DØ�ÐÐr*   Úd)r<   c                 óê   — ddl m} t          | ¦  «        \  }}g }|D ]S}|                     |¦  «        \  }}|                      |t          t          ||¦  «        ¦  «        ¦  «        ¦  «         ŒT||fS )Nr   )ÚSqueezeView)r€   rl  rŒ   ÚsqueezerÚappendrÐ   rh  )	r<   re  rl  rš   r†   rÂ   rR   Únew_sizer˜   s	            r(   Úindex_vars_squeezerp  ‡  s�   € ð  ÐÐÐÐÐå% fÑ-Ô-Ñ€J�Ø')€DØð ;ð ;ˆØ'×0Ò0°Ñ6Ô6Ñˆ�'Ø�Š�G�G�D¥ W¨hÑ!7Ô!7Ñ8Ô8Ñ9Ô9Ñ:Ô:Ð:Ð:Ø�ÐÐr*   Fr%   )r~   r<   Úhidden_argsÚfn.r~   rq  c                óÚ  — t          |d|iŽ\  }}ddlm} t          | |¦  «        rt	          | g |¢|¢||¦  «        }nNt          ||¬¦  «        }	t          j        |	¦  «        5   | g |¢|¢R Ž  d d d ¦  «         n# 1 swxY w Y   |	j        }|rg }
n!g t          j
                             |¦  «        ¢}
t          t          |j        ¦  «        t          |j        ¦  «        |j        |
|¦  «        S )Nr<   r   )ÚLoopBody)r~   )rp  Ú	loop_bodyrt  r¼   Úextract_loop_body_with_argsr[  r   Úset_ops_handlerr^  rk   rl   Úfrom_iterableró   r   r  r   r!  )rr  r~   r<   rq  re  rÂ   rš   rt  Úinnerr  r÷   s              r(   Úextract_read_writesrz  ”  sd  € õ *¨8ÐC¸FÐCÐCÑ€Dˆ*à#Ð#Ð#Ð#Ð#Ð#å�"�hÑÔð "Ý+ØØ!ˆdÐ!�[Ð!ØØñ	
ô 
ˆˆõ ˜Z°9Ð=Ñ=Ô=ˆÝÔ˜rÑ"Ô"ð 	$ð 	$ØˆBÐ#�Ð#�{Ð#Ð#Ð#Ð#ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$àÔ!ˆàð <Øˆ
ˆ
à;•y”×4Ò4°TÑ:Ô:Ð;ˆ
åå�5”<Ñ Ô å�5”=Ñ!Ô!àÔØØñ	ô 	ð 	s   Á"A9Á9A=Â A=rÂ   rš   c                 óÆ  ‡— ddl m} t          ||¬¦  «        }|                      |¦  «        }| j        r>d„ t          | j        ¦  «        D ¦   «         Šˆfd„|                     ¦   «         D ¦   «         }| j        |j                 D ](}| 	                    |j
        ||j                 ¦  «         Œ)| j        |j                 D ]5}|                     |j
        t          ||j                 ¦  «        ¦  «         Œ6| j        |j                 D ]/}|                     |j
        ||j                 d |j        ¦  «         Œ0| j        |j                 D ])}|                     |j
        ||j                 d ¦  «         Œ*| j        |j                 D ]#}|                     ||j                 d ¦  «         Œ$| j        |j                 D ]$}|                     d |j
        d d d fd d d ¦  «         Œ%|S )Nr   )ÚMemoryUsageTyper]  c                 óJ   — i | ] \  }}|t          t          j        |¦  «        “Œ!S r%   )r   r   ÚTMP)ra   re   rÍ   s      r(   rf   z/extract_loop_body_with_args.<locals>.<dictcomp>Ë  s*   € ÐTÐTÐT±°°1�•;�tœx¨Ñ+Ô+ÐTÐTÐTr*   c                 ó8   •— i | ]\  }}|t          |‰¦  «        “ŒS r%   )r   )ra   r6  rÍ   Úrepls      €r(   rf   z/extract_loop_body_with_args.<locals>.<dictcomp>Ì  s)   ø€ ÐRÐRÐR±D°A°q˜�J q¨$Ñ/Ô/ÐRÐRÐRr*   )ru  r|  r|   Úindexing_from_argsÚindirect_varsrr   r9  Úmemory_usageÚLOADr=  Úbuffer_nameÚ
index_nameÚ	LOAD_SEEDr?  rM   ÚSTORErB  rS   ÚSTORE_REDUCTIONrD  Ú
INDEX_EXPRrI  Ú	BUCKETIZErT  )	rr  rÂ   rš   r~   r|  ry  Úname_to_indexÚentryr€  s	           @r(   rv  rv  ¾  s>  ø€ ð +Ð*Ð*Ð*Ð*Ð*õ "¨ZÀ9ÐMÑMÔM€EØ×)Ò)¨$Ñ/Ô/€MØ	Ôð SàTÐT½	À"ÔBRÑ8SÔ8SÐTÑTÔTˆØRÐRÐRÐR¸M×<OÒ<OÑ<QÔ<QÐRÑRÔRˆØ” Ô!5Ô6ð Gð GˆØ�
Š
�5Ô$ m°EÔ4DÔ&EÑFÔFÐFÐFØ” Ô!:Ô;ð Qð QˆØ�Š˜Ô)­3¨}¸UÔ=MÔ/NÑ+OÔ+OÑPÔPÐPÐPØ” Ô!6Ô7ð 
ð 
ˆØ�ŠØÔØ˜%Ô*Ô+ØØŒJñ		
ô 	
ð 	
ð 	
ð ” Ô!@ÔAð 
ð 
ˆØ×ÒØÔØ˜%Ô*Ô+Øñ	
ô 	
ð 	
ð 	
ð
 ” Ô!;Ô<ð @ð @ˆØ×Ò˜ uÔ'7Ô8¸$Ñ?Ô?Ð?Ð?Ø” Ô!:Ô;ð 	
ð 	
ˆð 	�ŠØØÔ  d¨DÐ1ØØØñ	
ô 	
ð 	
ð 	
ð €Lr*   Ú
input_nodeztorch._inductor.ir.IRNodec                 ó¦  — ddl m}m}m} t	          |                      ¦   «         |¦  «        rEg |                      ¦   «         ¢}g |                      ¦   «         ¢}t          |¦  «        dk    r||fS dS t	          | j	        j	        |¦  «        sdS |  
                    ¦   «         }d}d}|�€¦t          |¦  «        dk    �r’t          ¦   «         }g }|D �]O}	t	          |	t          ¦  «        sŒ|	j        |v rŒ#|                     |	j        ¦  «         t          j                             |	j        ¦  «        }
|
€Œd|
                     ¦   «         }|�t	          ||¦  «        rŒ‹t	          ||¦  «        r�t          |                     ¦   «         ¦  «        dk    rh|€-g |                     ¦   «         ¢}g |                     ¦   «         ¢}Œï|g |                     ¦   «         ¢k    s|g |                     ¦   «         ¢k    r dS �Œ(|                     | 
                    ¦   «         ¦  «         �ŒQ||k    r||fS t          |¦  «        }|€t          |¦  «        dk    �°’||fS )aX  
    Returns the size and reduction size of all inputs, if the sizes and reduction_sizes (if exist) are all the same.
    It's possible that a node has multiple inputs, some are Reduction nodes and others are Pointwise nodes.
    In this case, reduction_sizes of the Reduction nodes need to be the same.
    Otherwise returns (None, None).
    r   )ÚComputedBufferÚExternKernelÚLoopsr   rU  N)r€   r�  r‘  r’  r¼   Úget_defining_opÚget_sizeÚget_reduction_sizer\   ÚdataÚ	get_readsr   rP   r   r  r   rm   Útry_get_bufferÚextend)rŽ  r�  r‘  r’  rR   Úreduction_sizerô   ÚseenÚ	new_readsÚreadÚbufferÚops               r(   Ú#extract_input_node_reduction_rangesr   î  s“  € ð 8Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7õ
 �*×,Ò,Ñ.Ô.°Ñ?Ô?ð  à'�×$Ò$Ñ&Ô&Ð'ˆØ;˜:×8Ò8Ñ:Ô:Ð;ˆÝˆ~ÑÔ Ò"Ð"Ø˜.Ð)Ð)à�<å�j”oÔ*¨EÑ2Ô2ð àˆ|ð
 × Ò Ñ"Ô"€EØ.2€NØ$(€DØ
Ñ
 ¥S¨¡Z¤Z°!¢^¡^Ý *¡¤ˆØ!ˆ	Øð 	1ñ 	1ˆDÝ˜d¥IÑ.Ô.ð ØØŒy˜DÐ Ð ØØ�HŠH�T”YÑÔÐÝ”W×+Ò+¨D¬IÑ6Ô6ˆFØˆ~ØØ×'Ò'Ñ)Ô)ˆBØˆz�Z¨¨LÑ9Ô9ˆzØå˜"˜nÑ-Ô-ð 	1µ#°b×6KÒ6KÑ6MÔ6MÑ2NÔ2NÐQRÒ2RÐ2RØ!Ð)Ø%? r×'<Ò'<Ñ'>Ô'>Ð%?�NØ+˜RŸ[š[™]œ]Ð+�D�DØ#Ð'A¨×)>Ò)>Ñ)@Ô)@Ð'AÒAÐAÀTð NØ—[’[‘]”]ðNò Fð Fð (˜<˜<ñFð
 × Ò  §¢¡¤Ñ0Ô0Ð0Ñ0Ø�IÒÐØ˜.Ð)Ð)å˜yÑ)Ô)ˆEð; Ð
 ¥S¨¡Z¤Z°!¢^¡^ð< �.Ð!Ð!r*   c                  ó   — dS )NÚcr%   r%   r*   r(   r*  r*  1  s   € Øˆ3r*   c                   ó²  — e Zd ZU eej                 ed<   d$deddfd„Zde	de
ed	f         d
ee	ef         defd„Z	 	 d%dedeej        z  dededej        f
d„Zdede
d         fd„Zdededee         de
d         fd„Zdedee         dedede
d         f
d„Zdej        dej        dedde
d         z  dde
d         z  f
d„Zd ed!ed	ef         d"eddfd#„ZdS )&ÚFreeSymbolsOpsHandlerÚsymbolsTr!   r"   Nc                 óV   — t          ¦   «         | _        |rt          nt          | _        d S r$   )r   r¥  r   r   Úget_symbolsr&   s     r(   r  zFreeSymbolsOpsHandler.__init__9  s&   € Ý!‘|”|ˆŒØ4AÐSÕ0Ð0Å|ˆÔÐÐr*   r   rÂ   .Úkwargsc                 ó   — t          j        ||                     ¦   «         ¦  «        D ]U}t          |t          j        t          j        j        j        f¦  «        r#| xj	        |  
                    |¦  «        z  c_	        ŒVd S r$   )rk   rl   r‘   r¼   rF   rG   ÚlogicÚboolalgÚBooleanr¥  r§  )r'   r   rÂ   r¨  Úas        r(   Ú_defaultzFreeSymbolsOpsHandler._default=  so   € Ý”  v§}¢}¡¤Ñ7Ô7ð 	4ð 	4ˆAÝ˜!�eœj­%¬+Ô*=Ô*EÐFÑGÔGð 4Ø�” × 0Ò 0°Ñ 3Ô 3Ñ3�”øð	4ð 	4r*   Ú	index_varrR   ÚcheckÚwrap_negc                 óì   — t          |t          j        t          j        j        j        f¦  «        rJ ‚| xj        |                      |¦  «        z  c_        t          dt          |¦  «        › d�¦  «        S )Nú(rW   )
r¼   rF   rG   rª  r«  r¬  r¥  r§  r   rD   )r'   r¯  rR   r°  r±  s        r(   Úindirect_indexingz'FreeSymbolsOpsHandler.indirect_indexingB  sg   € õ ˜i­%¬*µe´kÔ6IÔ6QÐ)RÑSÔSÐSÐSÐSØˆŒ˜×(Ò(¨Ñ.Ô.Ñ.ˆŒÝ!Ð"7¥c¨)¡n¤nÐ"7Ð"7Ð"7Ñ8Ô8Ð8r*   r…   )N.c                 ó   — dS )NrU  r%   )r'   r…   s     r(   ÚfrexpzFreeSymbolsOpsHandler.frexpM  s   € Øˆ{r*   ÚdtypesÚ
combine_fnr‘   c                 ó&   — dt          |¦  «        z  S ©Nr$   ©r\   )r'   r·  r¸  r‘   s       r(   ÚscanzFreeSymbolsOpsHandler.scanP  ó   € ð �˜V™œÑ$Ð$r*   ÚstableÚ
descendingc                 ó&   — dt          |¦  «        z  S rº  r»  )r'   r·  r‘   r¾  r¿  s        r(   ÚsortzFreeSymbolsOpsHandler.sortU  r½  r*   rE  Ú	src_dtypeÚreduction_typer@  c                 ó:   — t          |¦  «        }|dk    rd|z  nd S )Nr   r$   )r   )r'   rE  rÂ  rÃ  r@  Ú
num_valuess         r(   Ú	reductionzFreeSymbolsOpsHandler.reductionZ  s)   € õ +¨>Ñ:Ô:ˆ
Ø'1°A¢~ ~ˆw˜Ñ#Ð#¸4Ð?r*   ÚmaskÚbodyr^   c                 óL   — t          |¦  «        s
J d¦   «         ‚ |¦   «          d S )Nz$masked body must always be callable.)Úcallable)r'   rÇ  rÈ  r^   s       r(   ÚmaskedzFreeSymbolsOpsHandler.maskedd  s+   € Ý˜‰~Œ~ÐEÐEÐEÑEÔEˆ~àˆ‰Œˆˆˆr*   rÎ   )TT)rA   rB   rC   r   rF   rK   rE   rJ   r  rD   r�   r   rL   r®  rM   rG   r´  r¶  r   r¼  rÁ  rW  rE  r   rÆ  r   rË  r%   r*   r(   r¤  r¤  6  s9  € € € € € € Ø˜œÔ%Ð%Ð%Ñ%ðTð T dð T°dð Tð Tð Tð Tð4˜Sð 4¨¨c°3¨h¬ð 4ÀÀcÈ3ÀhÄð 4ÐTWð 4ð 4ð 4ð 4ð Øð	9ð 	9àð	9ð �E”JÑð	9ð ð		9ð
 ð	9ð 
Œð	9ð 	9ð 	9ð 	9ð�sð ˜u YÔ/ð ð ð ð ð%Øð%Ø'*ð%Ø4<¸S´Mð%à	ˆyÔ	ð%ð %ð %ð %ð
%Øð%Ø#+¨C¤=ð%Ø:=ð%ØKNð%à	ˆyÔ	ð%ð %ð %ð %ð
@àŒ{ð@ð ”;ð@ð &ð	@ð
 �e˜IÔ&Ñ&ð@ð 
��iÔ Ñ	 ð@ð @ð @ð @ð˜3ð  h¨s°C¨xÔ&8ð Àð Èð ð ð ð ð ð r*   r¤  r    Úrindexr!   c                 ó
  — ddl m} |�||gn|g}t          |¦  «        }t          j        |¦  «        5  t          j        |dd¦  «        5   | |Ž  d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |j        S )Nr   )ÚFlexibleLayoutÚallow_indexingT)r€   rÎ  r¤  r   rw  r	   Úobjectr¥  )rr  r    rÌ  r!   rÎ  rÂ   Úhandlers          r(   Úextract_free_symbolsrÒ  j  s   € ð #Ð"Ð"Ð"Ð"Ð"à$Ð0ˆE�6ˆ?ˆ?°u°g€DÝ# MÑ2Ô2€Gõ 	
Ô˜'Ñ"Ô"ðð åŒ�^Ð%5°tÑ<Ô<ðð ð 	ˆˆDˆ	ˆ	ð	ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
 Œ?Ðs5   ³A3Á
AÁA3ÁA 	Á A3Á#A 	Á$A3Á3A7Á:A7c                   óx   — e Zd ZU ee         ed<   dej        ddfd„Zdede	e
df         d	eee
f         de
fd
„ZdS )ÚSymbolUsageCollectorOpsHandlerÚusagesÚsymbolr"   Nc                 ó:   — || _         t          ¦   «         | _        d S r$   )rÖ  r   rÕ  )r'   rÖ  s     r(   r  z'SymbolUsageCollectorOpsHandler.__init__�  s   € ØˆŒÝ ‘l”lˆŒˆˆr*   r   rÂ   .r¨  c                 óŠ   — | j         |v p| j         |                     ¦   «         v }|r| j                             |¦  «         d S d S r$   )rÖ  r‘   rÕ  r  )r'   r   rÂ   r¨  Ú	used_heres        r(   r®  z'SymbolUsageCollectorOpsHandler._default…  sN   € Ø”K 4Ð'ÐI¨4¬;¸&¿-º-¹/¼/Ð+Iˆ	Øð 	"ØŒK�OŠO˜DÑ!Ô!Ð!Ð!Ð!ð	"ð 	"r*   )rA   rB   rC   r   rD   rE   rF   rK   r  r�   r   rL   r®  r%   r*   r(   rÔ  rÔ  ~  s‹   € € € € € € Ø�sŒOÐÐÑð#˜uœ|ð #°ð #ð #ð #ð #ð"˜Sð "¨¨c°3¨h¬ð "ÀÀcÈ3ÀhÄð "ÐTWð "ð "ð "ð "ð "ð "r*   rÔ  r?   r»   )LrH   Údataclassesrk   ÚloggingÚreÚcollections.abcr   r   r   Útypingr   r   Útyping_extensionsr   Úunittest.mockr	   rF   rW  Útorch._inductor.utilsr
   Ú%torch.fx.experimental.symbolic_shapesr   r   Útorch.utils._ordered_setr   Úutils._sympy.symbolr   r   Úcodegen.commonr   Úops_handlerr   Úutilsr   r   r   r   r   Úvirtualizedr   r   r   Ú	getLoggerrA   rp   ÚcompileÚsearchr¢   ÚABCr   Ú	dataclassrP   rÒ   rã   rñ   ró   ÚMockHandlerr|   ÚKernelFormatterHandlerr[  rD   r�   rG   rK   rŒ   rÐ   ri  rp  rJ   rz  rv  r   r*  r¤  rÒ  rÔ  r%   r*   r(   ú<module>rð     s›  ðØ 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø Ð Ð Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð à €€€à €€€Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UØ /Ð /Ð /Ð /Ð /Ð /à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð ð ð ð ð ð ð ð ð ð ð ð *Ð )Ð )Ð )Ð )Ð )Ð )Ð )ð €GˆC�L„L€à€gÔ˜Ñ!Ô!€ØˆbŒj˜Ñ)Ô)Ô0€ð#ð #ð #ð #ð #ˆ#Œ'ñ #ô #ð #ðL €Ô˜dÐ#Ñ#Ô#ðpIð pIð pIð pIð pI�ñ pIô pIñ $Ô#ðpIðf €Ô˜dÐ#Ñ#Ô#ð0ð 0ð 0ð 0ð 0ˆcñ 0ô 0ñ $Ô#ð0ðv €Ô˜dÐ#Ñ#Ô#ð)ð )ð )ð )ð )ˆcñ )ô )ñ $Ô#ð)ðX €Ô˜dÐ#Ñ#Ô#ð!ð !ð !ð !ð !ñ !ô !ñ $Ô#ð!ð ÔðJð Jð Jð Jð Jñ Jô Jñ ÔðJðZj0ð j0ð j0ð j0ð j0˜AœMñ j0ô j0ð j0ðZ8ð 8ð 8ð 8ð 8�aÔ.ñ 8ô 8ð 8ð	˜ð 	  i°¸5¼:¸,ÈÌÐ:TÔ1UÐ&UÔ Vð 	ð 	ð 	ð 	ðØ˜œ
Ô#ðØ-0ðà
ˆ4��U”\Ô"Ô# YÐ.Ô/ðð ð ð ð 47ð
ð 
ð 
Ø˜œ
Ô#ð
Ø-0ð
à
ˆ4�˜œÔ$Ô% yÐ0Ô1ð
ð 
ð 
ð 
ð  ØØ.0ð'ð 'ð 'Ø��c�Ôð'à˜œ
Ô#ð'ð ð'ð ð	'ð
 ˜$˜uœzÔ*Ô+ð'ð ð'ð 'ð 'ð 'ð\ ð	-ð -Øð-à
ˆt�E”JÔÔ
 ð-ð ð-ð ð	-ð
 ð-ð -ð -ð -ð`@"Ø+ð@"à
ˆ4�”
Ô˜dÑ" D¨¬Ô$4°tÑ$;Ð;Ô<ð@"ð @"ð @"ð @"ðF ð ð ð ð ð
1ð 1ð 1ð 1ð 1˜Nñ 1ô 1ð 1ðn +/Øð	ð Ø��c�Ôðà�E”JÔðð �U”ZÔ  4Ñ'ðð ð	ð
 �”Ôðð ð ð ð(
"ð 
"ð 
"ð 
"ð 
" ^ñ 
"ô 
"ð 
"ð 
"ð 
"r*   