o
    hs                     @   sR  d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
mZmZ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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%m&Z& d
dl'm(Z(m)Z) edZ*e+e,Z-e.dj/Z0G dd de j1Z2ej3ddG dd de2Z4ej3ddG dd de2Z5ej3ddG dd de2Z6ej3ddG dd dZ7ej3G dd dZ8G dd  d e)j9Z:G d!d" d"e)j;Z<d#e=d$e>e&e
ej?gej@f f fd%d&ZAd'eej? d#e=d$e>eBeBej@  e&f fd(d)ZCd*d+d'eej? d#e=d$e>eBeBej?  e&f fd,d-ZDd.d*d/d0d1e
d2e	f d'eej? d3eEd#e=d4eeBej?  d$e8fd5d6ZF	.dHd1e	d7eBeBej?  d8e&d3eEd$e:f
d9d:ZGd;d<d$e>eeBej?  eeBej?  f fd=d>ZHd$e=fd?d@ZIG dAdB dBeZJ		dId1e
d2e	f dCeej? dDeeej?  dEeEd$eej@ f
dFdGZKdS )J    N)IterableSequence)AnyCallableOptionalTypeVarUnion)Self)patch)free_symbolsfree_unbacked_symbols)
OrderedSet   )make_symbolSymT   )index_prevent_reordering)DefaultHandler)get_dtype_sizereduction_num_outputssympy_index_symbol	sympy_str
sympy_subs	VarRanges)ReductionTypeVTzindirect|tmpc                   @   s   e Zd ZU eed< ejed< ejde	eef de
fddZejdejfddZejdefd	d
ZejdefddZejdefddZddede
fddZdS )Depnameindexrenamesreturnc                 C      d S N selfr    r$   r$   b/home/www/facesmatcher.com/frenv_anti/lib/python3.10/site-packages/torch/_inductor/dependencies.pyrename)      z
Dep.renamec                 C   r"   r#   r$   r&   r$   r$   r'   	get_numel-   r)   zDep.get_numelc                 C   r"   r#   r$   r*   r$   r$   r'   numbytes_hint1   r)   zDep.numbytes_hintc                 C   r"   r#   r$   r*   r$   r$   r'   has_unbacked_symbols5   r)   zDep.has_unbacked_symbolsc                 C   r"   r#   r$   r*   r$   r$   r'   is_contiguous9   r)   zDep.is_contiguoustprefixc                 C   s   | S r#   r$   )r&   r0   r$   r$   r'   normalize_with_stride_order=      zDep.normalize_with_stride_orderNr/   )__name__
__module____qualname__str__annotations__sympyExprabcabstractmethoddictr	   r(   r+   intr,   boolr-   r.   r1   r$   r$   r$   r'   r   %   s   
 
r   T)frozenc                   @   sh  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	d
ZedefddZdd de
ee  fddZdejfddZd/ddZd0dedd fddZedeejejf fddZd/ddZdejfddZdeeef dd fdd Zdefd!d"Zdefd#d$Zdefd%d&Zd1d(edefd)d*Zdefd+d,Zdefd-d.ZdS )2	MemoryDepr   r   .	var_namessizeNmoder!   c                 C   s<   d}| j d urd| j  }d| jd| j d| j | dS )N , z
MemoryDep())rD   r   r   ranges)r&   Z
maybe_moder$   r$   r'   __repr__I   s   
"zMemoryDep.__repr__c                 C   s
   t | jS r#   )lenrB   r*   r$   r$   r'   num_varsO   s   
zMemoryDep.num_varsotherc                    s  | j |j ksJ | j t| jjkrdS |j t|jjkrdS tdd t| j|jD r/dS tj	j
| j| j}tj	j
|j|j}tt|t|ksWtt|t|krbtd| ||| dS t|t|krldS dd t|D   fdd|D }t|ttd	| j ksJ |S )
zD
        Can return None if not able to decide loop orders.
        Nc                 s   s     | ]}|d kp|dkV  qdS )r   r   Nr$   .0sr$   r$   r'   	<genexpr>h   s    z7MemoryDep.decide_loop_order_to_match.<locals>.<genexpr>zaunable to decide loop order. self_dep=%s v.s. other_dep=%s, self_strides=%s v.s. other_strides=%sc                 S   s   i | ]\}}||qS r$   r$   )rN   irO   r$   r$   r'   
<dictcomp>   s    z8MemoryDep.decide_loop_order_to_match.<locals>.<dictcomp>c                    s   g | ]} | qS r$   r$   rM   Zstride_to_indexr$   r'   
<listcomp>       z8MemoryDep.decide_loop_order_to_match.<locals>.<listcomp>r   )rK   rJ   r   r   any	itertoolschainrC   r   graphsizevarsstride_hintsrB   r   logdebug	enumeraterange)r&   rL   Zself_stridesZother_stridesorderr$   rS   r'   decide_loop_order_to_matchS   s8   
z$MemoryDep.decide_loop_order_to_matchc                 C   s   t | jt| jdS )zF
        Return the offset by setting every variable to be 0.
        r   )r   r   r=   fromkeysrB   r*   r$   r$   r'   
get_offset   s   zMemoryDep.get_offsetc                 C   s$   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.
        )rA   r   _RecordLoadStoreInner
_normalizer   rH   rD   r*   r$   r$   r'   	normalize   s   zMemoryDep.normalizer/   r0   c                    s   ddl m} tjj| j| j}tt	t
||jdd}||}| j}| j}||}||}	tjj|	|t| jg|	|\}
}}t|\} tt|	| fdd|
D }tt| j|}t| j|t| t| }|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 | ]} |qS r$   r$   rN   xadd_varr$   r'   rT      rU   z9MemoryDep.normalize_with_stride_order.<locals>.<listcomp>)Ztorch._inductorrg   r   rY   rZ   r[   r   rB   sortedr_   rJ   __getitem__Zsame_reorderrC   _simplify_loopsr   var_builderr=   zipr   r9   expandrA   r   tuplekeysvalues)r&   r0   rg   stridesr`   Zstride_reordersizesrB   Znew_reordered_sizesZnew_reordered_var_namesZnew_simplified_sizesreindex_prune
var_rangesreplacementZ	new_indexoutr$   rm   r'   r1      s6   


	z%MemoryDep.normalize_with_stride_orderc                 C   s   t t| j| jS )z{c0: 128, c1: 512, ...})r=   rs   rB   rC   r*   r$   r$   r'   rH      s   zMemoryDep.rangesc                 C   s*   t | jtjj| j| j| j| j	| j
dS )N)r   r   rB   rC   rD   )rA   r   r   rY   rZ   simplify_with_rangesr   rH   rB   rC   rD   r*   r$   r$   r'   r      s   zMemoryDep.simplify_with_rangesc                 C   sZ   |   rtj| j}|S t| jj}tj	j
}t| j| jD ]\}}||v r*|| }q|S r#   )is_indirectr   rY   r+   r   r   r   r   r9   SOners   rB   rC   )r&   ZnumelvarsvarrC   r$   r$   r'   r+      s   zMemoryDep.get_numelr    c                 C   s.   | j |v rt|| j  | j| j| j| jdS | S )N)rB   rC   rD   )r   rA   r   rB   rC   rD   r%   r$   r$   r'   r(      s   
zMemoryDep.renamec                 C   <   zt jj|  tt j| j W S  ty   Y dS w Nr   	r   rY   rZ   Z	size_hintr+   r   Z	get_dtyper   NotImplementedErrorr*   r$   r$   r'   r,         zMemoryDep.numbytes_hintc                 C      t t|  dkS r   rJ   r   r+   r*   r$   r$   r'   r-         zMemoryDep.has_unbacked_symbolsc                 C   s,   t | jtjr	dS t | jtjo| j| jv S NT)
isinstancer   r9   IntegerSymbolrB   r*   r$   r$   r'   r.      s   zMemoryDep.is_contiguousTresult_for_complex_expressionc                 C   s   t | jdkr	dS t| jtjr| jjn| jg}| jd }|D ]2}||kr( dS t|tjrQt |jdkrQ|jd |krQt|jd ttj	frQ|jd dkrQ dS q|S )zA
        Whether the stride for the last dimension is 1.
        r   Tr   r   F)
rJ   rB   r   r   r9   AddargsZMulr>   r   )r&   r   ZtermsZlast_symtermr$   r$   r'   stride1_for_last_dim   s(   

zMemoryDep.stride1_for_last_dimc                 C   s6   t | jtjr| j| jvo|   S t | jttjfS r#   )r   r   r9   r   rB   r   r>   r   r*   r$   r$   r'   	is_scalar  s   zMemoryDep.is_scalarc                 C   s   t dd | jjD S )Nc                 s   s    | ]}t |jV  qd S r#   )r   r   rN   vr$   r$   r'   rP   !      z(MemoryDep.is_indirect.<locals>.<genexpr>)rV   r   r   r*   r$   r$   r'   r         zMemoryDep.is_indirect)r!   rA   r3   T) r4   r5   r6   r7   r8   r9   r:   ru   r   rD   r   rI   propertyr>   rK   listra   rc   rf   r1   r=   rH   r   r+   r(   r,   r?   r-   r.   r   r   r   r$   r$   r$   r'   rA   A   s0   
 
9
,
	rA   c                   @   s   e Zd ZU eed< dZee ed< edej	fddZ
dej	fddZd	eeef dd fd
dZdefddZdefddZdefddZdefddZdefddZdS )StarDepr   NrD   r!   c                 C      t d)NzStarDep does not have an indexr   r*   r$   r$   r'   r   *     zStarDep.indexc                 C   s   t j| jS r#   )r   rY   r+   r   r*   r$   r$   r'   r+   .  s   zStarDep.get_numelr    c                 C       | j |v rt|| j  | jS | S r#   )r   r   rD   r%   r$   r$   r'   r(   1     
zStarDep.renamec                 C   r   r   r   r*   r$   r$   r'   r,   6  r   zStarDep.numbytes_hintc                 C   r   r   r   r*   r$   r$   r'   r-   >  r   zStarDep.has_unbacked_symbolsc                 C      dS NFr$   r*   r$   r$   r'   r.   A  r2   zStarDep.is_contiguousc                 C   r   r   r$   r*   r$   r$   r'   r   D  r2   zStarDep.is_scalarc                 C   r   r   r$   r*   r$   r$   r'   r   G  r2   zStarDep.is_indirect)r4   r5   r6   r7   r8   rD   r   r   r9   r:   r   r+   r=   r(   r>   r,   r?   r-   r.   r   r   r$   r$   r$   r'   r   $  s   
 r   c                   @   s   e Zd ZU eed< eed< edejfddZdejfddZ	de
eef dd fd	d
ZdefddZdefddZdefddZdS )WeakDepr   mutating_bufr!   c                 C   r   )NzWeakDep does not have an indexr   r*   r$   r$   r'   r   Z  r   zWeakDep.indexc                 C   s   t jjS r#   )r9   r   r   r*   r$   r$   r'   r+   ^  s   zWeakDep.get_numelr    c                 C   r   r#   )r   r   r   r%   r$   r$   r'   r(   a  r   zWeakDep.renamec                 C   r   )Nr   r$   r*   r$   r$   r'   r,   f  r2   zWeakDep.numbytes_hintc                 C   r   r   r$   r*   r$   r$   r'   r-   i  r2   zWeakDep.has_unbacked_symbolsc                 C   r   r   r$   r*   r$   r$   r'   r.   l  r2   zWeakDep.is_contiguousN)r4   r5   r6   r7   r8   r   r9   r:   r   r+   r=   r(   r>   r,   r?   r-   r.   r$   r$   r$   r'   r   S  s   
 r   c                   @   s<   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   .rB   rC   N)r4   r5   r6   r9   r:   r8   ru   r   r$   r$   r$   r'   r   p  s   
 
r   c                   @   s   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eef dd fd	d
Zdeeee f dd fddZdddZede	d  dd fddZdee dd fddZdee fddZddedee fddZdS )
ReadWritesreadswritesindex_exprsN
range_varsr|   r    r!   c                    s>   t t fdd| jD t fdd| jD | j| j| jS )Nc                 3       | ]}|  V  qd S r#   r(   rN   depr    r$   r'   rP     r   z$ReadWrites.rename.<locals>.<genexpr>c                 3   r   r#   r   r   r   r$   r'   rP     r   )r   r   r   r   r   r   r|   r%   r$   r   r'   r(     s   zReadWrites.renamer   c                 C   sJ   t |tttfs
J t |tst|g}tt| j|| j| j| j	| j
S r#   )r   r   r   r   r   unionr   r   r   r   r|   )r&   r   r$   r$   r'   	with_read  s   

zReadWrites.with_readrL   c                 C   s@   t | j|j}t | j|j}t | j|j}t|| ||S r#   )r   r   r   r   r   r   )r&   rL   r   r   r   r$   r$   r'   merge  s   zReadWrites.mergeread_writesc                 C   sL   t jdd | D  }t jdd | D  | }t jdd | D  }t|||S )Nc                 S      g | ]}|j qS r$   )r   rN   rwr$   r$   r'   rT         z)ReadWrites.merge_list.<locals>.<listcomp>c                 S   r   r$   )r   r   r$   r$   r'   rT     r   c                 S   r   r$   )r   r   r$   r$   r'   rT     r   )r   r   r   )r   Z
all_writesZ	all_readsZall_index_exprsr$   r$   r'   
merge_list  s   zReadWrites.merge_list	rem_readsc                 C   s   t | j| | j| j| j| jS r#   )r   r   r   r   r   r|   )r&   r   r$   r$   r'   remove_reads  s   zReadWrites.remove_readsc                 C   s   t | j| jS r#   )rW   rX   r   r   r*   r$   r$   r'   reads_and_writes  s   zReadWrites.reads_and_writesTignore_integer_indexc                 C   sF   t  }|  D ]}t|tsq|rt|jttjfs ||j	 q|S )z6
        Integer index is used for load_seed.
        )
r   r   r   rA   r   r>   r9   r   addr   )r&   r   namesr   r$   r$   r'   buffer_names  s   
zReadWrites.buffer_names)rL   r   r!   r   r   )r4   r5   r6   r   r   r8   r   r   r   r   r9   r:   r|   r   r=   r7   r(   r   r   r   staticmethodr   r   r   r   r?   r   r$   r$   r$   r'   r   w  s   
 	
	r   c                       s  e Zd Zdededdf fddZedeee	j
f dee	j
 d	ee	j
 ddfd
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dZde	j
dee	j
ee	jdf ee	j
df f fddZdede	j
defddZdededefddZ	d(dede	j
dedee def
ddZdede	j
dedefddZde	j
deej defd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&d'Z  ZS )*rd   r|   rf   r!   Nc                    s2   t    t | _t | _t | _|| _|| _d S r#   )super__init__r   _reads_writes_index_exprs_var_ranges_should_normalize)r&   r|   rf   	__class__r$   r'   r     s   

z_RecordLoadStoreInner.__init__r   rB   ry   c                 C   sV   t | tjsdS | j}|r%|d |vr)|  |  |r'|d |vsd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   r9   r:   r   pop)r   rB   ry   r   r$   r$   r'   drop_unused_symbols  s   
 z)_RecordLoadStoreInner.drop_unused_symbols.c           
         s   g |  }t| }tjj||t|g||\}}}tt	 \} t
t|| fdd|D }	tt||	}g |  }g |}| ||| |t|t|fS )Nc                    rj   r$   r$   rk   rm   r$   r'   rT     rU   z4_RecordLoadStoreInner._normalize.<locals>.<listcomp>)rv   ru   rw   r   rY   rZ   rq   r   rr   canonicalization_prefixr=   rs   r   r9   rt   r   )
clsr   r|   Z
index_varsry   	new_sizesrz   r{   Znew_varsr}   r$   rm   r'   re     s   
 z _RecordLoadStoreInner._normalizec                 C   s   | j s1dd | j D }dd t| j |D }dd |D }| ||| |t|t|fS dd | j D }| ||S )Nc                 S   s   g | ]	}t jj|qS r$   r   rY   rZ   simplifyrk   r$   r$   r'   rT         z6_RecordLoadStoreInner.canonicalize.<locals>.<listcomp>c                 S   s   g | ]
\}}|d kr|qS r   r$   rN   kr   r$   r$   r'   rT         c                 S   s   g | ]}|d kr|qS r   r$   r   r$   r$   r'   rT     s    c                 S   s    i | ]\}}|t jj|qS r$   r   r   r$   r$   r'   rR     s    z6_RecordLoadStoreInner.canonicalize.<locals>.<dictcomp>)	r   r   rw   rs   rv   r   ru   itemsre   )r&   r   ry   rB   r|   r$   r$   r'   canonicalize  s   z"_RecordLoadStoreInner.canonicalizer   c                 C   s4   | j t|g| |R   d| dt| dS )Nzload(rF   rG   )r   r   rA   r   r   r&   r   r   r$   r$   r'   load  s   z_RecordLoadStoreInner.loadc                 C   s    t |tsJ | |t|S r#   )r   r>   r   r9   r   r   r$   r$   r'   	load_seed  s   z_RecordLoadStoreInner.load_seedvaluerD   c              	   C   sF   | j t|g| |R d|i d| dt| d| d| d	S )NrD   zstore(rF   rG   )r   r   rA   r   r   )r&   r   r   r   rD   r$   r$   r'   store  s   $"z_RecordLoadStoreInner.storec                 C   s   |  ||d| dS )Nzstore_reduction(rG   )r   )r&   r   r   r   r$   r$   r'   store_reduction  r   z%_RecordLoadStoreInner.store_reductiondtypec                 C   s,   | j t| |  dt| d| dS )Nzindex_expr(rF   rG   )r   r   r   r   r   )r&   r   r   r$   r$   r'   
index_expr  s   z _RecordLoadStoreInner.index_exprrw   
boundariesboundary_indicesindexing_dtyperightsortersorter_indicesc                 C   s8   | j t|d  |dur| 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&   rw   r   r   r   r   r   r   r$   r$   r'   	bucketize  s   z_RecordLoadStoreInner.bucketizer#   NN)r4   r5   r6   r   r?   r   r   r   r>   r9   r:   r   r   classmethodru   r   re   r   r7   r   r   r   r   r   torchr   r   r   r   __classcell__r$   r$   r   r'   rd     sx    ""

	rd   c                       s*   e Zd Zdededdf fddZ  ZS )RecordLoadStorer|   rf   r!   Nc                    s   t ||d}t j|d d S )Nr|   rf   )parent_handler)rd   r   r   )r&   r|   rf   r   r   r$   r'   r   *  s   zRecordLoadStore.__init__)r4   r5   r6   r   r?   r   r   r$   r$   r   r'   r   )  s    "r   r0   r!   c                    s2   t   i dtjdtjf fdd}|fS )Nlengthr!   c                    s    t  t  }| |< |S r#   )r   next)r   r   Zcntr0   r|   r$   r'   rn   6  s   zvar_builder.<locals>.add_var)rW   countr9   r:   r   )r0   rn   r$   r   r'   rr   2  s   rr   argsizesc                    s&   t | \}  fdd|D }||fS )Nc                    s   g | ]	}t t |qS r$   )r   map)rN   rC   rm   r$   r'   rT   B  r   z)index_vars_no_squeeze.<locals>.<listcomp>)rr   )r0   r   r|   r   r$   rm   r'   index_vars_no_squeeze>  s   r   d)r0   c           
      G   sb   ddl m} t| \}}g }g }|D ]}||\}}	|| ||	tt|| q||fS )Nr   )SqueezeView)rg   r   rr   Zsqueezerappendr   r   )
r0   r   r   r|   rn   r   r   rC   new_sizerz   r$   r$   r'   index_vars_squeezeF  s   
r   Fr$   )rf   r0   hidden_argsfn.rf   r   c                G   s   t |d|i\}}ddlm} t| |r t| g ||||}n't||d}	t|	 | g ||R   W d    n1 s?w   Y  |	j}|rLg }
ng t	j
|}
tt|jt|j|j|
|S )Nr0   r   )LoopBody)rf   )r   	loop_bodyr   r   extract_loop_body_with_argsr   r   set_ops_handlerr   rW   rX   from_iterabler   r   r   r   r   )r   rf   r0   r   r   r   r|   r   innerr   r   r$   r$   r'   extract_read_writesU  s*   
r  r   r|   c                    sL  ddl m} t||d}| |}| jr)dd t| jD   fdd| D }| j|j D ]}|	|j
||j  q/| j|j D ]}||j
t||j  qB| j|j D ]}||j
||j d |j qW| j|j D ]}||j
||j d  qm| j|j D ]}|||j d  q| j|j D ]}|d |j
d d d fd d d  q|S )Nr   )MemoryUsageTyper   c                 S   s   i | ]\}}|t tj|qS r$   )r   r   TMP)rN   rQ   r   r$   r$   r'   rR     s    z/extract_loop_body_with_args.<locals>.<dictcomp>c                    s   i | ]
\}}|t | qS r$   )r   r   replr$   r'   rR     r   )r  r  rd   Zindexing_from_argsZindirect_varsr^   r   Zmemory_usageZLOADr   Zbuffer_nameZ
index_nameZ	LOAD_SEEDr   r>   ZSTOREr   rD   ZSTORE_REDUCTIONr   Z
INDEX_EXPRr   Z	BUCKETIZEr   )r   r   r|   rf   r  r  Zname_to_indexentryr$   r	  r'   r  y  sD   
r  
input_nodeztorch._inductor.ir.IRNodec                 C   s  ddl m}m}m} t|  |r)g |  }g |  }t|dkr'||fS dS t| j	j	|s2dS | 
 }d}d}|du rt|dkrt }g }|D ]g}	t|	tsSqK|	j|v rYqK||	j tj|	j}
|
du rkqK|
 }|du sxt||ryqKt||rt| dkr|du rg | }g | }qK|g | ks|g | kr dS qK||
  qK||kr||fS t|}|du rt|dksD||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)rg   r  r  r  r   Zget_defining_opget_sizeZget_reduction_sizerJ   dataZ	get_readsr   rA   r   r   r   rY   Ztry_get_bufferextend)r  r  r  r  rC   Zreduction_sizer   seenZ	new_readsreadbufferopr$   r$   r'   #extract_input_node_reduction_ranges  sT   


r  c                   C   r   )Ncr$   r$   r$   r$   r'   r     r2   r   c                   @   sD  e Zd ZU eej ed< d,deddfddZde	d	e
ed
f dee	ef defddZ		d-dedeeejf dededejf
ddZdede
d fddZdededee de
d fddZdedee dedede
d f
dd Zd!ejd"ejd#ed$ede
d f dede
d f f
d%d&Zd'ed(ed
ef d)eddfd*d+ZdS ).FreeSymbolsOpsHandlersymbolsTunbacked_onlyr!   Nc                 C   s    t  | _|rt| _d S t| _d S r#   )r   r  r   r   get_symbols)r&   r  r$   r$   r'   r     s   zFreeSymbolsOpsHandler.__init__r   r   .kwargsc                 C   sD   t || D ]}t|tjtjjjfr|  j	| 
|O  _	qd S r#   )rW   rX   rw   r   r9   r:   logicboolalgBooleanr  r  )r&   r   r   r  ar$   r$   r'   _default  s
   zFreeSymbolsOpsHandler._default	index_varrC   checkwrap_negc                 C   sB   t |tjtjjjfrJ |  j| |O  _tdt	| dS )N(rG   )
r   r9   r:   r  r  r   r  r  r   r7   )r&   r#  rC   r$  r%  r$   r$   r'   indirect_indexing  s   z'FreeSymbolsOpsHandler.indirect_indexingrl   )N.c                 C   r   )Nr   r$   )r&   rl   r$   r$   r'   frexp  r2   zFreeSymbolsOpsHandler.frexpdtypes
combine_fnrw   c                 C   s   dt | S Nr#   rJ   )r&   r)  r*  rw   r$   r$   r'   scan     zFreeSymbolsOpsHandler.scanstable
descendingc                 C   s   dt | S r+  r,  )r&   r)  rw   r/  r0  r$   r$   r'   sort  r.  zFreeSymbolsOpsHandler.sortr   	src_dtypereduction_typer   c                 C   s   t |}|dkrd| S d S )Nr   r#   )r   )r&   r   r2  r3  r   Z
num_valuesr$   r$   r'   	reduction  s   zFreeSymbolsOpsHandler.reductionmaskbodyrL   c                 C   s   t |sJ d|  d S )Nz$masked body must always be callable.)callable)r&   r5  r6  rL   r$   r$   r'   masked  s   
zFreeSymbolsOpsHandler.maskedr   )TT)r4   r5   r6   r   r9   r   r8   r?   r   r7   ru   r   r=   r"  r   r>   r:   r'  r(  r   r-  r1  r   r   r   r4  r   r8  r$   r$   r$   r'   r    sd   
 *	



&
r  r   rindexr  c              	   C   s   ddl m} |d ur||gn|g}t|}t|. t|dd | |  W d    n1 s1w   Y  W d    |jS W d    |jS 1 sKw   Y  |jS )Nr   )FlexibleLayoutZallow_indexingT)rg   r:  r  r   r  r
   objectr  )r   r   r9  r  r:  r   handlerr$   r$   r'   extract_free_symbols%  s   
(r=  )Fr   )Lr;   dataclassesrW   loggingrecollections.abcr   r   typingr   r   r   r   r   Ztyping_extensionsr	   Zunittest.mockr
   r9   r   Z%torch.fx.experimental.symbolic_shapesr   r   Ztorch.utils._ordered_setr   Zutils._sympy.symbolr   r   Zcodegen.commonr   Zops_handlerr   utilsr   r   r   r   r   r   Zvirtualizedr   r   r   	getLoggerr4   r\   compilesearchr   ABCr   	dataclassrA   r   r   r   r   ZMockHandlerrd   ZKernelFormatterHandlerr   r7   ru   r:   r   rr   r   r   r   r?   r  r  r  r   r  r=  r$   r$   r$   r'   <module>   s     

 
c
.
Dm(	
	


(
0
C7
