§
    ž²Åjr  ã            	       ó¼  — 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mZm	Z	m
Z
mZmZmZmZ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 ddlmZmZ dd	lmZ dd
lmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'  ed¦  «        Z( ej)        e*¦  «        Z+ ej,        d¦  «        j-        Z. G d„ de j/        ¦  «        Z0 ej1        d¬¦  «         G d„ de0¦  «        ¦   «         Z2 ej1        d¬¦  «         G d„ de0¦  «        ¦   «         Z3 ej1        d¬¦  «         G d„ de0¦  «        ¦   «         Z4 ej1        d¬¦  «         G d„ d¦  «        ¦   «         Z5ej1         G d„ d¦  «        ¦   «         Z6 G d„ de'j7        ¦  «        Z8 G d„ de'j9        ¦  «        Z:d e;d!ee#eej<        gej=        f         f         fd"„Z>d#eej<                 d e;fd$„Z?d%d&œd#eej<                 d e;fd'„Z@d(d%d)d*œd+ed,ef         d#eej<                 d-eAd e;fd.„ZBd9d/„ZCd0d1d!ee
e	ej<                          e
e	ej<                          f         fd2„ZDd3„ ZE G d4„ d5¦  «        ZFd6eFd!e%d         fd7„ZGd:d+ed,ef         fd8„ZHdS );é    N)
ÚAnyÚCallableÚDictÚListÚOptionalÚSequenceÚSetÚTupleÚTypeVarÚUnion)Úpatch)Úfree_unbacked_symbols)Ú
OrderedSeté   )Úmake_symbolÚSymTé   )Úindex_prevent_reordering)Úget_dtype_sizeÚreduction_num_outputsÚsympy_index_symbolÚ	sympy_strÚ
sympy_subsÚ	VarRanges)Ú
OpsHandlerÚReductionTypeÚVÚTzindirect|tmpc                   ó  — e Zd ZU eed<   ej        ed<   ej        de	eef         dd fd„¦   «         Z
ej        dej        fd„¦   «         Zej        d„ ¦   «         Zej        defd„¦   «         Zej        defd	„¦   «         Zdd„ZdS )ÚDepÚnameÚindexÚrenamesÚreturnc                 ó   — d S ©N© ©Úselfr#   s     úMC:\Projects\Historical\venv\Lib\site-packages\torch/_inductor/dependencies.pyÚrenamez
Dep.rename3   ó   € àˆó    c                 ó   — d S r&   r'   ©r)   s    r*   Ú	get_numelzDep.get_numel7   r,   r-   c                 ó   — d S r&   r'   r/   s    r*   Únumbytes_hintzDep.numbytes_hint;   r,   r-   c                 ó   — d S r&   r'   r/   s    r*   Úhas_unbacked_symbolszDep.has_unbacked_symbols?   r,   r-   c                 ó   — d S r&   r'   r/   s    r*   Úis_contiguouszDep.is_contiguousC   r,   r-   Útc                 ó   — | S r&   r'   )r)   Úprefixs     r*   Únormalize_with_stride_orderzDep.normalize_with_stride_orderG   s   € Øˆr-   N©r7   )Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚsympyÚExprÚabcÚabstractmethodr   r+   r0   r2   Úboolr4   r6   r:   r'   r-   r*   r    r    /   s  € € € € € € Ø
€I€I�IØŒ:ÐÐÑàÔð˜d 3¨ 8œnð °ð ð ð ñ Ôðð 	Ôð˜5œ:ð ð ð ñ Ôðð 	Ôðð ñ Ôðð 	Ôð 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
e         ed<   defd	„Zed
„ ¦   «         Zd„ Zd„ Zdd„Zdd„Zedeej        ej        f         fd„¦   «         Zd„ Zdej        fd„Zdeeef         dd fd„Zdefd„Zd„ Zdefd„Zddefd„Zdefd„Zdefd„ZdS )Ú	MemoryDepr!   r"   .Ú	var_namesÚsizeNÚmoder$   c                 ób   — d}| j         �
d| j         › �}d| j        ›d| j        › d| j        › |› d�S )NÚ ú, z
MemoryDep(ú))rK   r!   r"   Úranges)r)   Ú
maybe_modes     r*   Ú__repr__zMemoryDep.__repr__S   sJ   € Øˆ
ØŒ9Ð Ø)˜dœiÐ)Ð)ˆJØS˜DœIÐSÐS¨4¬:ÐSÐS¸¼ÐSÀjÐSÐSÐSÐSr-   c                 ó*   — t          | j        ¦  «        S r&   )ÚlenrI   r/   s    r*   Únum_varszMemoryDep.num_varsY   s   € å�4”>Ñ"Ô"Ð"r-   c                 óØ  ‡— | 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#          d| 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>r   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'   )rX   ÚirY   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'   )rX   rY   Ústride_to_indexs     €r*   ú
<listcomp>z8MemoryDep.decide_loop_order_to_match.<locals>.<listcomp>‘   s   ø€ Ð;Ð;Ð;¨� Ô#Ð;Ð;Ð;r-   r   )rU   rT   r"   Úfree_symbolsÚanyÚ	itertoolsÚchainrJ   r   ÚgraphÚsizevarsÚstride_hintsrI   ÚsetÚlogÚdebugÚ	enumerateÚrange)r)   ÚotherÚself_stridesÚother_stridesÚorderr_   s        @r*   Údecide_loop_order_to_matchz$MemoryDep.decide_loop_order_to_match]   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ˆõ �s�<Ñ Ô Ñ!Ô!¥S¨Ñ%6Ô%6Ò6Ð6½#Ý�ÑÔñ;
ô ;
å�ÑÔò; ð ; õ �IŠIØsØØØØñô ð ð �4õ
 ˆ|ÑÔ¥ MÑ 2Ô 2Ò2Ð2Ø�4àDÐD­I°lÑ,CÔ,CÐDÑDÔDˆØ;Ð;Ð;Ð;¨]Ð;Ñ;Ô;ˆå�5‰zŒz�S¥ q¨$¬-Ñ!8Ô!8Ñ9Ô9Ò9Ð9Ð9Ð9Øˆr-   c                 óh   — t          | j        t                               | j        d¦  «        ¦  «        S )zF
        Return the offset by setting every variable to be 0.
        r   )r   r"   ÚdictÚfromkeysrI   r/   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 different to normalize_with_stride_order is,
        this method does not reorder loops while normalize_with_stride_order reorder
        loops based on stride order.
        )rH   r!   Ú_RecordLoadStoreInnerÚ
_normalizer"   rP   rK   r/   s    r*   Ú	normalizezMemoryDep.normalizeœ   sH   € õ ØŒIð
å"×-Ò-¨d¬j¸$¼+ÑFÔFð
ð ŒIð
ð 
ð 
ð 	
r-   r7   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'   ©rX   ÚxÚadd_vars     €r*   r`   z9MemoryDep.normalize_with_stride_order.<locals>.<listcomp>Ê   s!   ø€ ÐBÐBÐB¨˜˜ ™œÐBÐBÐBr-   )Útorch._inductorr{   r   re   rf   rg   r"   rI   Úsortedrl   rT   Ú__getitem__Úsame_reorderrJ   Ú_simplify_loopsr   Úvar_builderrs   Úzipr   rA   ÚexpandrH   r!   ÚtupleÚkeysÚvalues)r)   r9   r{   Ústridesrp   Ústride_reorderÚsizesrI   Ú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 .°Ñ";Ô";Ðå/0¬wÔ/?×/OÒ/OØ#ØÝ$Ø”�Ð5Ð7Jñô ñ0
ô 0
Ñ,Ð˜g uõ *¨&Ñ1Ô1Ñˆ
�GÝÝØ'Ø�ÐBÐBÐBÐBÐ-AÐBÑBÔBÑCÔCñô ñ
ô 
ˆõ �uœ|¨D¬JÑ7Ô7¸ÑEÔEˆ	å˜œ	 9­e°J·O²OÑ4EÔ4EÑ.FÔ.FÍÈj×N_ÒN_ÑNaÔNaÑHbÔHbÑcÔcˆØˆ
r-   c                 óP   — t          t          | j        | j        ¦  «        ¦  «        S )z{c0: 128, c1: 512, ...})rs   rˆ   rI   rJ   r/   s    r*   rP   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"   rI   rJ   rK   )rH   r!   r   re   rf   Úsimplify_with_rangesr"   rP   rI   rJ   rK   r/   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   re   r0   r!   r   r"   ra   rA   ÚSÚOnerˆ   rI   rJ   )r)   ÚnumelÚvarsÚvarrJ   s        r*   r0   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)rI   rJ   rK   )r!   rH   r"   rI   rJ   rK   r(   s     r*   r+   zMemoryDep.renameë   sK   € ØŒ9˜ÐÐÝØ˜œ	Ô"Ø”
Øœ.Ø”YØ”Yðñ ô ð ð ˆr-   c                 óö   — 	 t           j        j                             |                      ¦   «         ¦  «        t          t           j                             | j        ¦  «        ¦  «        z  S # t          $ r Y dS w xY w©Nr   ©	r   re   rf   Ú	size_hintr0   r   Ú	get_dtyper!   ÚNotImplementedErrorr/   s    r*   r2   zMemoryDep.numbytes_hintö   óx   € ð	Ý”7Ô#×-Ò-¨d¯nªnÑ.>Ô.>Ñ?Ô?Å.Ý”×!Ò! $¤)Ñ,Ô,ñCô Cñ ð øõ #ð 	ð 	ð 	Ø�1�1ð	øøøó   ‚A'A* Á*
A8Á7A8c                 óf   — t          t          |                      ¦   «         ¦  «        ¦  «        dk    S r¥   ©rT   r   r0   r/   s    r*   r4   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"   rA   ÚIntegerÚSymbolrI   r/   s    r*   r6   zMemoryDep.is_contiguous  s?   € Ý�d”j¥%¤-Ñ0Ô0ð 	Ø�4Ý˜$œ*¥e¤lÑ3Ô3ÐT¸¼
ÀdÄnÐ8TÐTr-   Tc                 óÜ  — 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)
rT   rI   r°   r"   rA   ÚAddÚargsÚMulÚintr±   )r)   Úresult_for_complex_expressionÚ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"   rA   r²   rI   r�   r¸   r±   r/   s    r*   Ú	is_scalarzMemoryDep.is_scalar#  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!   ©rX   Úvs     r*   rZ   z(MemoryDep.is_indirect.<locals>.<genexpr>)  s,   è è € ÐHÐH¨1•;˜qœvÑ&Ô&ÐHÐHÐHÐHÐHÐHr-   )rb   r"   ra   r/   s    r*   r�   zMemoryDep.is_indirect(  s$   € ÝÐHÐH°´
Ô0GÐHÑHÔHÑHÔHÐHr-   )r$   rH   r;   ©T)r<   r=   r>   r?   r@   rA   rB   r
   r²   rK   r   rR   ÚpropertyrU   rq   ru   ry   r:   r   rP   r›   r0   r+   r¸   r2   r4   rE   r6   r½   r¿   r�   r'   r-   r*   rH   rH   K   s+  € € € € € € à
€I€I�IØŒ:ÐÐÑØ�U”\ 3Ð&Ô'Ð'Ð'Ñ'Ø
�”
˜C�Ô
 Ð Ð Ñ Ø€Dˆ(�3Œ-ÐÐÑðT˜#ð Tð Tð Tð Tð ð#ð #ñ „Xð#ð7ð 7ð 7ðrHð Hð Hð

ð 

ð 

ð 

ð(ð (ð (ð (ðT ð4˜˜Uœ\¨5¬:Ð5Ô6ð 4ð 4ð 4ñ „Xð4ð
ð 
ð 
ð	˜5œ:ð 	ð 	ð 	ð 	ð	˜d 3¨ 8œnð 	°ð 	ð 	ð 	ð 	ð˜sð ð ð ð ð@ð @ð @ðU˜tð Uð Uð Uð Uð
-ð -È$ð -ð -ð -ð -ð:<˜4ð <ð <ð <ð <ð
I˜Tð Ið Ið Ið Ið Ið Ir-   rH   c                   ó°   — e Zd ZU eed<   dZee         ed<   ed„ ¦   «         Zde	j
        fd„Zdeeef         dd fd„Zd	„ Zd
„ Zdefd„Zdefd„Zdefd„ZdS )ÚStarDepr!   NrK   c                 ó    — t          d¦  «        ‚)NzStarDep does not have an index©r©   r/   s    r*   r"   zStarDep.index2  ó   € å!Ð"BÑCÔCÐCr-   r$   c                 óJ   — t           j                             | j        ¦  «        S r&   )r   re   r0   r!   r/   s    r*   r0   zStarDep.get_numel6  s   € ÝŒw× Ò  ¤Ñ+Ô+Ð+r-   r#   c                 óX   — | j         |v r t          || j                  | j        ¦  «        S | S r&   )r!   rÇ   rK   r(   s     r*   r+   zStarDep.rename9  s-   € ØŒ9˜ÐÐÝ˜7 4¤9Ô-¨t¬yÑ9Ô9Ð9Øˆr-   c                 óö   — 	 t           j        j                             |                      ¦   «         ¦  «        t          t           j                             | j        ¦  «        ¦  «        z  S # t          $ r Y dS w xY wr¥   r¦   r/   s    r*   r2   zStarDep.numbytes_hint>  rª   r«   c                 óf   — t          t          |                      ¦   «         ¦  «        ¦  «        dk    S r¥   r­   r/   s    r*   r4   zStarDep.has_unbacked_symbolsF  r®   r-   c                 ó   — dS ©NFr'   r/   s    r*   r6   zStarDep.is_contiguousI  ó   € Øˆur-   c                 ó   — dS rÐ   r'   r/   s    r*   r¿   zStarDep.is_scalarL  rÑ   r-   c                 ó   — dS rÐ   r'   r/   s    r*   r�   zStarDep.is_indirectO  rÑ   r-   )r<   r=   r>   r?   r@   rK   r   rÅ   r"   rA   rB   r0   r   r+   r2   r4   rE   r6   r¿   r�   r'   r-   r*   rÇ   rÇ   ,  s
  € € € € € € à
€I€I�IØ€Dˆ(�3Œ-ÐÐÑð ðDð Dñ „XðDð,˜5œ:ð ,ð ,ð ,ð ,ð˜d 3¨ 8œnð °ð ð ð ð ð
ð ð ð@ð @ð @ð˜tð ð ð ð ð˜4ð ð ð ð ð˜Tð ð ð ð ð ð r-   rÇ   c                   óˆ   — e Zd ZU eed<   eed<   ed„ ¦   «         Zdej        fd„Z	de
eef         dd fd„Zd„ Zd	„ Zdefd
„ZdS )ÚWeakDepr!   Úmutating_bufc                 ó    — t          d¦  «        ‚)NzWeakDep does not have an indexrÉ   r/   s    r*   r"   zWeakDep.indexb  rÊ   r-   r$   c                 ó$   — t           j        j        S r&   )rA   rž   rŸ   r/   s    r*   r0   zWeakDep.get_numelf  s   € ÝŒwŒ{Ðr-   r#   c                 óX   — | j         |v r t          || j                  | j        ¦  «        S | S r&   )r!   rÕ   rÖ   r(   s     r*   r+   zWeakDep.renamei  s.   € ØŒ9˜ÐÐÝ˜7 4¤9Ô-¨tÔ/@ÑAÔAÐAØˆr-   c                 ó   — dS )Nr   r'   r/   s    r*   r2   zWeakDep.numbytes_hintn  s   € Øˆqr-   c                 ó   — dS rÐ   r'   r/   s    r*   r4   zWeakDep.has_unbacked_symbolsq  rÑ   r-   c                 ó   — dS rÐ   r'   r/   s    r*   r6   zWeakDep.is_contiguoust  rÑ   r-   N)r<   r=   r>   r?   r@   rÅ   r"   rA   rB   r0   r   r+   r2   r4   rE   r6   r'   r-   r*   rÕ   rÕ   [  sÉ   € € € € € € ð €I€I�IàÐÐÑàðDð Dñ „XðDð˜5œ:ð ð ð ð ð˜d 3¨ 8œnð °ð ð ð ð ð
ð ð ðð ð ð˜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"   .rI   rJ   N)r<   r=   r>   rA   rB   r@   r
   r²   r'   r-   r*   rÞ   rÞ   x  sO   € € € € € € àŒ:ÐÐÑØ�U”\ 3Ð&Ô'Ð'Ð'Ñ'Ø
�”
˜C�Ô
 Ð Ð Ñ Ð Ð r-   rÞ   c                   ó6  — e Zd ZU ee         ed<   ee         ed<   ee         ed<   dZee	e
j                          ed<   dZee         ed<   dej        eef         dd fd	„Zd
eeee         f         dd fd„Zdd„Zede	d          fd„¦   «         Zd„ Zd„ Zd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+   ©rX   Údepr#   s     €r*   rZ   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*   rZ   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|h}t	          t          j        | j        |¦  «        | j        | j	        | j
        | j        ¦  «        S r&   )r°   rÕ   rÇ   rh   rà   r   Úunionrá   râ   rã   rä   r•   )r)   ré   s     r*   Ú	with_readzReadWrites.with_read�  sq   € Ý˜#¥­µ#Ð6Ñ7Ô7Ð7Ð7Ð7Ý˜#�sÑ#Ô#ð 	Ø�%ˆCÝÝÔ˜TœZ¨Ñ-Ô-ØŒKØÔØŒOØŒOñ
ô 
ð 	
r-   rm   c                 óä   — t          j        | j        |j        ¦  «        }t          j        | j        |j        ¦  «        }t          j        | j        |j        ¦  «        }t          ||z
  ||¦  «        S r&   )r   rì   rá   râ   rã   rà   )r)   rm   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â   ©rX   Úrws     r*   r`   z)ReadWrites.merge_list.<locals>.<listcomp>¤  s   € Ð'HÐ'HÐ'H°b¨¬	Ð'HÐ'HÐ'Hr-   c                 ó   — g | ]	}|j         ‘Œ
S r'   )rá   ró   s     r*   r`   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*   r`   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-   c                 ó`   — t          | j        |z
  | j        | j        | j        | j        ¦  «        S r&   )rà   rá   râ   rã   rä   r•   )r)   Ú	rem_readss     r*   Úremove_readszReadWrites.remove_reads©  s3   € ÝØŒJ˜Ñ"ØŒKØÔØŒOØŒOñ
ô 
ð 	
r-   c                 ó@   — t          j        | j        | j        ¦  «        S r&   )rc   rd   rá   râ   r/   s    r*   Úreads_and_writeszReadWrites.reads_and_writes²  s   € ÝŒ˜tœz¨4¬;Ñ7Ô7Ð7r-   Tc                 ó   — 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°   rH   r"   r¸   rA   r±   Úaddr!   )r)   Úignore_integer_indexÚnamesré   s       r*   Úbuffer_nameszReadWrites.buffer_namesµ  s€   € õ ",¡¤ˆØ×(Ò(Ñ*Ô*ð 	$ð 	$ˆCÝ˜c¥9Ñ-Ô-ð ØØ'ð $­zØ”	�C¥¤Ð/ñ0ô 0ð $ð —	’	˜#œ(Ñ#Ô#Ð#øØˆr-   )rm   rà   rÄ   )r<   r=   r>   r   r    r@   rÞ   rä   r   r   rA   rB   r•   r   Útypingr   r?   r+   r   r	   rí   rï   Ústaticmethodrú   rý   rÿ   r  r'   r-   r*   rà   rà     sK  € € € € € € à�cŒ?ÐÐÑØ�sŒOÐÐÑØ˜LÔ)Ð)Ð)Ñ)Ø-1€J�˜˜eœjÔ)Ô*Ð1Ð1Ñ1Ø&*€J�˜Ô#Ð*Ð*Ñ*ð
˜fœk¨#¨s¨(Ô3ð 
¸ð 
ð 
ð 
ð 
ð

˜U 3¨¨C¬ =Ô1ð 

°lð 

ð 

ð 

ð 

ð?ð ?ð ?ð ?ð ðB  \Ô 2ð Bð Bð Bñ „\ðBð
ð 
ð 
ð8ð 8ð 8ðð ð ð ð ð r-   rà   c                   óB  ‡ — e Zd Zdededdfˆ fd„Ze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efd„Zdedefd„Zddede	j
        dedefd„Zdedefd„Zde	j
        de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e	j
        f                  dee         ddfd„Zˆ xZS )rw   r•   ry   r$   Nc                 óÖ   •— t          ¦   «                              ¦   «          t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        || _        || _        d S r&   )ÚsuperÚ__init__r   Ú_readsÚ_writesÚ_index_exprsÚ_var_rangesÚ_should_normalize)r)   r•   ry   Ú	__class__s      €r*   r
  z_RecordLoadStoreInner.__init__Å  sQ   ø€ Ý‰Œ×ÒÑÔÐÝ'1¡|¤|ˆŒÝ.8©l¬lˆŒÝ6@±l´lˆÔØ&0ˆÔØ'0ˆÔÐÐ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°   rA   rB   ra   Úpop)r"   rI   r�   ra   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-   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*   r`   z4_RecordLoadStoreInner._normalize.<locals>.<listcomp>í  s!   ø€ Ð3RÐ3RÐ3RÀ1°G°G¸A±J´JÐ3RÐ3RÐ3Rr-   )r‹   rŠ   rŒ   r   re   rf   r†   r   r‡   Úcanonicalization_prefixrs   rˆ   r   rA   r‰   r  )Úclsr"   r•   Ú
index_varsr�   Ú	new_sizesr“   r”   Únew_varsr–   r�   s             @r*   rx   z _RecordLoadStoreInner._normalizeÛ  s"  ø€ ð *�z—’Ñ(Ô(Ð)ˆ
Ý�j×'Ò'Ñ)Ô)Ñ*Ô*ˆÝ$%¤GÔ$4×$DÒ$DØØÝ$ e W¨j¸%Ñ@Ô@ñ%
ô %
Ñ!ˆ	�7˜Eõ (Õ(?Ñ(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   re   rf   Úsimplify)rX   r€   s     r*   r`   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>ù  s+   € ÐUÐUÐU°a•Q”WÔ%×.Ò.¨qÑ1Ô1ÐUÐUÐUr-   c                 ó$   — g | ]\  }}|d k    ¯|‘ŒS ©r   r'   ©rX   ÚkrÃ   s      r*   r`   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>ú  s"   € ÐUÐUÐU™t˜q !ÈaÐSTÊfÈf˜ÈfÈfÈfr-   c                 ó   — g | ]
}|d k    ¯|‘ŒS r   r'   rÂ   s     r*   r`   z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>û  s   € Ð0Ð0Ð0˜1¨¨aª¨�Q¨¨¨r-   c                 ó^   — i | ]*\  }}|t           j        j                             |¦  «        “Œ+S r'   r  r!  s      r*   r]   z6_RecordLoadStoreInner.canonicalize.<locals>.<dictcomp>   sA   € ð 
ð 
ð 
á��1ð �qŒwÔ×(Ò(¨Ñ+Ô+ð
ð 
ð 
r-   )	r  r  rŒ   rˆ   r‹   r  rŠ   Úitemsrx   )r)   r"   r�   rI   r•   s        r*   Úcanonicalizez"_RecordLoadStoreInner.canonicalizeõ  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                 óž   — | j                              t          |g|                      |¦  «        ¢R Ž ¦  «         d|› dt	          |¦  «        › d�S )Nzload(rN   rO   )r  r  rH   r&  r   ©r)   r!   r"   s      r*   Úloadz_RecordLoadStoreInner.load  sU   € ØŒ�Š�	 $ÐB¨×):Ò):¸5Ñ)AÔ)AÐBÐBÐBÑCÔCÐCØ2�tÐ2Ð2�y¨Ñ/Ô/Ð2Ð2Ð2Ð2r-   c                 ó€   — t          |t          ¦  «        sJ ‚|                      |t          j        |¦  «        ¦  «        S r&   )r°   r¸   r)  rA   r±   r(  s      r*   Ú	load_seedz_RecordLoadStoreInner.load_seed  s6   € Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ø�yŠy˜�uœ}¨UÑ3Ô3Ñ4Ô4Ð4r-   Úvaluec           	      ó°   — | j                              t          |g|                      |¦  «        ¢R d|iŽ¦  «         d|› dt	          |¦  «        › d|› d|› d�	S )NrK   zstore(rN   rO   )r  r  rH   r&  r   )r)   r!   r"   r,  rK   s        r*   Ústorez_RecordLoadStoreInner.store  so   € ØŒ×Ò� 4ÐN¨$×*;Ò*;¸EÑ*BÔ*BÐNÐNÐNÈÐNÐNÑOÔOÐOØD˜ÐDÐD¥	¨%Ñ 0Ô 0ÐDÐD°EÐDÐD¸TÐDÐDÐDÐDr-   c                 ó8   — |                       ||d|› d�¦  «        S )Nzstore_reduction(rO   )r.  )r)   r!   r"   r,  s       r*   Ústore_reductionz%_RecordLoadStoreInner.store_reduction  s$   € Ø�zŠz˜$ Ð'B¸%Ð'BÐ'BÐ'BÑCÔCÐCr-   c                 ó–   — | j                              t          |                      |¦  «        Ž ¦  «         dt	          |¦  «        › d|› d�S )Nzindex_expr(rN   rO   )r  r  rÞ   r&  r   )r)   r"   Údtypes      r*   Ú
index_exprz _RecordLoadStoreInner.index_expr  sM   € ØÔ×Ò�l¨D×,=Ò,=¸eÑ,DÔ,DÐEÑFÔFÐFØ9�Y uÑ-Ô-Ð9Ð9°Ð9Ð9Ð9Ð9r-   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Œ   r4  r5  r6  r7  r8  r9  s           r*   Ú	bucketizez_RecordLoadStoreInner.bucketize  sX   € ð 	Œ�Š� 
¨1¤Ñ.Ô.Ñ/Ô/Ð/ØÐØŒK�OŠO�G F¨1¤IÑ.Ô.Ñ/Ô/Ð/Ð/Ð/ð Ðr-   r&   ©NN)r<   r=   r>   r   rE   r
  r  r  ÚclassmethodrA   rB   r
   r²   rx   r&  r?   r)  r¸   r+  r.  r0  r3  r   Útorchr2  r   r;  Ú__classcell__©r  s   @r*   rw   rw   Ä  s‰  ø€ € € € € ð1 9ð 1¸ð 1À$ð 1ð 1ð 1ð 1ð 1ð 1ð ðð ñ „\ðð ð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ð&3˜ð 3 U¤Zð 3°Cð 3ð 3ð 3ð 3ð5˜cð 5¨#ð 5ð 5ð 5ð 5ðEð E˜#ð E e¤jð E¸ð EÈCð Eð Eð Eð EðD Cð D¸#ð Dð Dð Dð Dð: ¤
ð :°cð :ð :ð :ð :ð 48Ø&*ð0ð 0àð0ð ˜#˜uœz¨5¬:°u´zÐAÔBð0ð ð	0ð
 œð0ð ð0ð ˜˜s E¤J˜Ô/Ô0ð0ð ! œð0ð 
ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r-   rw   c                   ó,   ‡ — e Zd Zdededdfˆ fd„Zˆ xZS )ÚRecordLoadStorer•   ry   r$   Nc                 ón   •— t          ||¬¦  «        }t          ¦   «                              |¬¦  «         d S )N©r•   ry   )Úparent_handler)rw   r	  r
  )r)   r•   ry   rE  r  s       €r*   r
  zRecordLoadStore.__init__,  s?   ø€ Ý.Ø!¨Yð
ñ 
ô 
ˆõ 	‰Œ×Ò¨ÐÑ7Ô7Ð7Ð7Ð7r-   )r<   r=   r>   r   rE   r
  r?  r@  s   @r*   rB  rB  +  sR   ø€ € € € € ð8 9ð 8¸ð 8À$ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8r-   rB  r9   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)rG  rÃ   Úcntr9   r•   s     €€€r*   r�   zvar_builder.<locals>.add_var8  s/   ø€ Ý &Ð5­$¨s©)¬)Ð5Ð5Ñ6Ô6ˆØˆ
�1‰Øˆr-   )rc   ÚcountrA   rB   r²   )r9   r�   rJ  r•   s   ` @@r*   r‡   r‡   4  s^   øøø€ Ý
Œ/Ñ
Ô
€CØ€Jð�œ
ð ¥u¤|ð ð ð ð ð ð ð ð ð
 �wÐÐr-   Úargsizesc                 óL   ‡— t          | ¦  «        \  }Šˆfd„|D ¦   «         }||fS )Nc                 óJ   •— g | ]}t          t          ‰|¦  «        ¦  «        ‘Œ S r'   )ÚlistÚmap)rX   rJ   r�   s     €r*   r`   z)index_vars_no_squeeze.<locals>.<listcomp>B  s+   ø€ Ð%TÐ%TÐ%TÀ4¥d­3¨w¸Ñ+=Ô+=Ñ&>Ô&>Ð%TÐ%TÐ%Tr-   )r‡   )r9   rL  r•   r¶   r�   s       @r*   Úindex_vars_no_squeezerQ  @  s9   ø€ Ý% fÑ-Ô-Ñ€J�Ø%TÐ%TÐ%TÐ%TÈ8Ð%TÑ%TÔ%T€DØ�ÐÐr-   Úd)r9   c                 ó  — ddl m} t          | ¦  «        \  }}g }g }|D ]h}|                     |¦  «        \  }}	|                     |¦  «         |                      |	t          t          ||¦  «        ¦  «        ¦  «        ¦  «         Œi||fS )Nr   )ÚSqueezeView)r{   rT  r‡   ÚsqueezerÚappendrO  rP  )
r9   rL  rT  r•   r�   r¶   r  rJ   Únew_sizer“   s
             r*   Úindex_vars_squeezerX  F  s§   € ØÐÐÐÐÐå% fÑ-Ô-Ñ€J�Ø#%€DØ(*€IØð ;ð ;ˆØ'×0Ò0°Ñ6Ô6Ñˆ�'Ø×Ò˜Ñ"Ô"Ð"Ø�Š�G�G�D¥ W¨hÑ!7Ô!7Ñ8Ô8Ñ9Ô9Ñ:Ô:Ð:Ð:Ø�ÐÐr-   Fr'   )ry   r9   Úhidden_argsÚfn.ry   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 )Nr9   r   )ÚLoopBody)ry   )rX  Ú	loop_bodyr\  r°   Úextract_loop_body_with_argsrB  r   Úset_ops_handlerrE  rc   rd   Úfrom_iterablerà   r   r  r  r  )rZ  ry   r9   rY  rL  r¶   r•   r\  Úinnerrô   rä   s              r*   Úextract_read_writesrb  S  sb  € õ *¨8ÐC¸FÐCÐCÑ€Dˆ*à#Ð#Ð#Ð#Ð#Ð#å�"�hÑÔð 	"Ý+ØÐ%�$Ð%˜Ð% z°9ñ
ô 
ˆˆõ
 ˜Z°9Ð=Ñ=Ô=ˆÝÔ˜rÑ"Ô"ð 	$ð 	$ØˆBÐ#�Ð#�{Ð#Ð#Ð#Ð#ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$àÔ!ˆàð <Øˆ
ˆ
à;•y”×4Ò4°TÑ:Ô:Ð;ˆ
åÝ�5”<Ñ Ô Ý�5”=Ñ!Ô!ØÔØØñô ð s   Á"A9Á9A=Â A=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   )ÚMemoryUsageTyperD  c                 óJ   — i | ] \  }}|t          t          j        |¦  «        “Œ!S r'   )r   r   ÚTMP)rX   r\   rÃ   s      r*   r]   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   )rX   r"  rÃ   Úrepls      €r*   r]   z/extract_loop_body_with_args.<locals>.<dictcomp>€  s)   ø€ ÐRÐRÐR±D°A°q˜�J q¨$Ñ/Ô/ÐRÐRÐRr-   )r]  rd  rw   Úindexing_from_argsÚindirect_varsrk   r%  Úmemory_usageÚLOADr)  Úbuffer_nameÚ
index_nameÚ	LOAD_SEEDr+  r¸   ÚSTOREr.  rK   ÚSTORE_REDUCTIONr0  Ú
INDEX_EXPRr3  Ú	BUCKETIZEr;  )	rZ  r¶   r•   ry   rd  ra  Úname_to_indexÚentryrh  s	           @r*   r^  r^  w  s3  ø€ Ø*Ð*Ð*Ð*Ð*Ð*õ "¨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ð 
ð 
ˆØ�ŠØÔ˜}¨UÔ-=Ô>ÀÀeÄjñ	
ô 	
ð 	
ð 	
ð ” Ô!@ÔAð 
ð 
ˆØ×ÒØÔ˜}¨UÔ-=Ô>Àñ	
ô 	
ð 	
ð 	
ð ” Ô!;Ô<ð @ð @ˆØ×Ò˜ uÔ'7Ô8¸$Ñ?Ô?Ð?Ð?Ø” Ô!:Ô;ð 
ð 
ˆð 	�ŠØ�5Ô$ d¨D°$Ð7¸¸tÀTñ	
ô 	
ð 	
ð 	
ð €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   r<  N)r{   rx  ry  rz  r°   Úget_defining_opÚget_sizeÚget_reduction_sizerT   ÚdataÚ	get_readsr   rH   r!   r  r   re   Útry_get_bufferÚextend)rv  rx  ry  rz  rJ   Ú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Ø15€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  Ü  s   € Øˆ3r-   c                   óô   — e Zd ZU eej                 ed<   dd„Zdede	de
f         fd„Z	 ddej        fd	„Zd
„ Zd„ Zd„ Zdej        dej        dededed         f         deded         f         f
d„Zdd„ZdS )ÚFreeUnbackedSymbolsOpsHandlerÚsymbolsr$   Nc                 ó,   — t          ¦   «         | _        d S r&   )r   r�  r/   s    r*   r
  z&FreeUnbackedSymbolsOpsHandler.__init__ä  s   € Ý!‘|”|ˆŒˆˆr-   r!   .c                 ó   ‡ — ˆ fd„}|S )Nc                  óö   •— t          j        | |                     ¦   «         ¦  «        D ]O}t          |t          j        t          j        j        j        f¦  «        r‰xj	        t          |¦  «        z  c_	        ŒPd S r&   )rc   rd   rŒ   r°   rA   rB   ÚlogicÚboolalgÚBooleanr�  r   )r¶   ÚkwargsÚar)   s      €r*   ra  z8FreeUnbackedSymbolsOpsHandler.__getattr__.<locals>.innerè  sk   ø€ Ý”_ T¨6¯=ª=©?¬?Ñ;Ô;ð =ð =�Ý˜a¥%¤*­e¬kÔ.AÔ.IÐ!JÑKÔKð =Ø�L”LÕ$9¸!Ñ$<Ô$<Ñ<�L”Løð=ð =r-   r'   )r)   r!   ra  s   `  r*   Ú__getattr__z)FreeUnbackedSymbolsOpsHandler.__getattr__ç  s#   ø€ ð	=ð 	=ð 	=ð 	=ð 	=ð
 ˆr-   Tc                 óà   — t          |t          j        t          j        j        j        f¦  «        rJ ‚| xj        t          |¦  «        z  c_        t          dt          |¦  «        › d�¦  «        S )Nú(rO   )
r°   rA   rB   r‘  r’  r“  r�  r   r   r?   )r)   Ú	index_varrJ   ÚcheckÚwrap_negs        r*   Úindirect_indexingz/FreeUnbackedSymbolsOpsHandler.indirect_indexingï  sb   € õ ˜i­%¬*µe´kÔ6IÔ6QÐ)RÑSÔSÐSÐSÐSØˆŒÕ-¨dÑ3Ô3Ñ3ˆŒÝ!Ð"7¥c¨)¡n¤nÐ"7Ð"7Ð"7Ñ8Ô8Ð8r-   c                 ó   — dS )Nr<  r'   )r)   r€   s     r*   Úfrexpz#FreeUnbackedSymbolsOpsHandler.frexpö  s   € Øˆ{r-   c                 ó&   — dt          |¦  «        z  S ©Nr&   ©rT   )r)   ÚdtypesÚ
combine_fnrŒ   s       r*   Úscanz"FreeUnbackedSymbolsOpsHandler.scanù  ó   € Ø�˜V™œÑ$Ð$r-   c                 ó&   — dt          |¦  «        z  S r   r¡  )r)   r¢  rŒ   ÚstableÚ
descendings        r*   Úsortz"FreeUnbackedSymbolsOpsHandler.sortü  r¥  r-   r2  Ú	src_dtypeÚreduction_typer,  )N.c                 ó:   — t          |¦  «        }|dk    rd|z  nd S )Nr   r&   )r   )r)   r2  rª  r«  r,  Ú
num_valuess         r*   Ú	reductionz'FreeUnbackedSymbolsOpsHandler.reductionÿ  s)   € õ +¨>Ñ:Ô:ˆ
Ø'1°A¢~ ~ˆw˜Ñ#Ð#¸4Ð?r-   c                 óL   — t          |¦  «        s
J d¦   «         ‚ |¦   «          d S )Nz$masked body must always be callable.)Úcallable)r)   ÚmaskÚbodyrm   s       r*   Úmaskedz$FreeUnbackedSymbolsOpsHandler.masked	  s+   € Ý˜‰~Œ~ÐEÐEÐEÑEÔEˆ~àˆ‰Œˆˆˆr-   )r$   N)TT)r<   r=   r>   r   rA   r²   r@   r
  r?   r   r   r–  rœ  rž  r¤  r©  r>  r2  r   r   r
   r®  r³  r'   r-   r*   rŒ  rŒ  á  s@  € € € € € € Ø˜œÔ%Ð%Ð%Ñ%ð$ð $ð $ð $ð ð ¨°°c°Ô(:ð ð ð ð ð 59ð9ð 9à	Œð9ð 9ð 9ð 9ðð ð ð%ð %ð %ð%ð %ð %ð@àŒ{ð@ð ”;ð@ð &ð	@ð
 �T˜5 Ô+Ð+Ô,ð@ð 
ˆt�U˜9Ô%Ð%Ô	&ð@ð @ð @ð @ðð ð ð ð ð r-   rŒ  Úhc                 ó   — | S r&   r'   )r´  s    r*   Ú(_typecheck_FreeUnbackedSymbolsOpsHandlerr¶    s	   € ð €Hr-   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   r_  r   Úobjectr�  )rZ  r"   Úrindexr¸  r¶   Úhandlers         r*   Úextract_free_unbacked_symbolsr½    s   € Ø"Ð"Ð"Ð"Ð"Ð"à$Ð0ˆE�6ˆ?ˆ?°u°g€DÝ+Ñ-Ô-€Gõ 
Ô	˜7Ñ	#Ô	#ð ð ¥U¤\ØÐ(¨$ñ&ô &ð ð ð 	ˆˆDˆ	ˆ	ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð Œ?Ðs5   ²A2Á	AÁA2ÁA	ÁA2Á"A	Á#A2Á2A6Á9A6)Fr&   )IrC   Údataclassesrc   ÚloggingÚrer  r   r   r   r   r   r   r	   r
   r   r   Úunittest.mockr   rA   r>  Ú%torch.fx.experimental.symbolic_shapesr   Útorch.utils._ordered_setr   Úutils._sympy.symbolr   r   Úcodegen.commonr   Úutilsr   r   r   r   r   r   Úvirtualizedr   r   r   r   Ú	getLoggerr<   ri   ÚcompileÚsearchr�   ÚABCr    Ú	dataclassrH   rÇ   rÕ   rÞ   rà   ÚMockHandlerrw   ÚKernelFormatterHandlerrB  r?   rB   r²   r‡   rQ  rX  rE   rb  r^  rˆ  r  rŒ  r¶  r½  r'   r-   r*   ú<module>rÏ     sÀ  ðà 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  Ð Ð Ð Ð Ð à €€€à €€€Ø GÐ GÐ GÐ GÐ GÐ GØ /Ð /Ð /Ð /Ð /Ð /à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5ð €GˆC�L„L€à€gÔ˜Ñ!Ô!€ØˆbŒj˜Ñ)Ô)Ô0€ðð ð ð ð ˆ#Œ'ñ ô ð ð8 €Ô˜dÐ#Ñ#Ô#ð]Ið ]Ið ]Ið ]Ið ]I�ñ ]Iô ]Iñ $Ô#ð]Ið@ €Ô˜dÐ#Ñ#Ô#ð#ð #ð #ð #ð #ˆcñ #ô #ñ $Ô#ð#ð\ €Ô˜dÐ#Ñ#Ô#ðð ð ð ð ˆcñ ô ñ $Ô#ðð8 €Ô˜dÐ#Ñ#Ô#ð!ð !ð !ð !ð !ñ !ô !ñ $Ô#ð!ð ÔðAð Að Að Að Añ Aô Añ ÔðAðHd0ð d0ð d0ð d0ð d0˜AœMñ d0ô d0ð d0ðN8ð 8ð 8ð 8ð 8�aÔ.ñ 8ô 8ð 8ð	˜ð 	  i°¸5¼:¸,ÈÌÐ:TÔ1UÐ&UÔ Vð 	ð 	ð 	ð 	ð X¨e¬jÔ%9ð À3ð ð ð ð ð GJð 
ð 
ð 
 (¨5¬:Ô"6ð 
Àð 
ð 
ð 
ð 
ð  ØØð!ð !ð !Ø��c�Ôð!à˜œ
Ô#ð!ð ð!ð ð	!ð !ð !ð !ðHð ð ð ðD@"Ø+ð@"à
ˆ8�D˜œÔ$Ô% x°°U´ZÔ0@Ô'AÐAÔBð@"ð @"ð @"ð @"ðFð ð ð
+ð +ð +ð +ð +ñ +ô +ð +ð\Ø$ðà�Ôðð ð ð ðð  h¨s°C¨xÔ&8ð ð ð ð ð ð r-   