
    Vh                       d dl mZ d dlZd dlmZmZ d dlZd dlmZmZ erd dl	m
Z
  ej                  e      Zej                  j                  ddf	 	 	 	 	 d,dZd-dZd.d	Z ed
d dej&                  j(                  f      Z edd dej&                  j(                  f      Z edd d      Z edd d      Z edd d      Z eded      Z edd/dd      Z ed d! d"      Z ed#eej                  j                  ej                  j                  fd$%      Zd& Zd' Z ed(eej                  j                  ej                  j                  fd)%      Z  ed*ed+      Z!y)0    )annotationsN)OptionalTYPE_CHECKING)_primsTensor)Sequence c                p    t        |t              rfd}nfd}t        j                  | ||||      S )Nc                 4    t        d  | i |D              S )Nc              3  F   K   | ]  }t        j                  |        y wNr   
TensorMeta).0os     N/home/dcms/DCMS/lib/python3.12/site-packages/torch/_inductor/inductor_prims.py	<genexpr>z*make_prim.<locals>.meta.<locals>.<genexpr>   s     R!**1-Rs   !)tupleargskwargs	impl_atens     r   metazmake_prim.<locals>.meta   s    Ry$7Q&7QRRR    c                 :    t        j                   | i |      S r   r   r   s     r   r   zmake_prim.<locals>.meta    s    $$Y%?%?@@r   )schemareturn_typer   r   doctags)
isinstancer   r   
_make_prim)r   r   r   r   r   r   s    `    r   	make_primr"      sB     +u%	S
	A  r   c                    | j                         |k(  r| S | j                         j                  | j                  |      }|j	                  |        |S r   )strideclone
as_stridedshapecopy_)input_tensorr$   
new_tensors      r   eager_force_strider+   -   sT    &##%00J \"r   c                    t        j                  | |d      }|t        j                  t        j                  | |z
        |d      fS )NT)keepdim)torchamaxsumexp)xdimr/   s      r   eager_prepare_softmaxr4   8   s9    ::ad+D599QX.TBBBr   z&inductor_seed(Device device) -> Tensorc                2    t        j                  dg |       S Nl    devicer.   randintr7   s    r   <lambda>r;   @   s    5==Bv> r   z=create a fresh seed (one per call) for use with inductor_rand)r   r   z2inductor_seeds(int count, Device device) -> Tensorc                4    t        j                  d| g|      S r6   r9   )countr8   s     r   r;   r;   F   s    %--	E76J r   z/Horizontal fusion of many inductor_seed() callsz7inductor_lookup_seed(Tensor seeds, int index) -> Tensorc                (    | |   j                         S r   )r%   )seedsindexs     r   r;   r;   M   s    u++- r   z9Extract a single seed from the result of inductor_seeds())r   z?inductor_random(SymInt[] size, Tensor seed, str mode) -> Tensorc                d     t        t        |      | |j                  t        j                        S )N)r8   dtype)getattrr.   r8   float32)sizeseedmodes      r   r;   r;   W   s$    1WUD1T[[ r   zGtorch.rand()/torch.randn() using backend-specific RNG that can be fusedzOinductor_randint(SymInt low, SymInt high, SymInt[] size, Tensor seed) -> Tensorc                H    t        j                  | |||j                        S )Nr7   )r.   r:   r8   )lowhighrE   rF   s       r   r;   r;   ^   s    %--T4"T r   z<torch.randint() using backend-specific RNG that can be fusedzDinductor_force_stride_order(Tensor input, SymInt[] stride) -> TensorznForce the stride order for input tensor. No-op if the input tensor already has the stride. Do a copy otherwisezj_unsafe_index_put_(Tensor(a!) self, Tensor?[] indices, Tensor values, bool accumulate=False) -> Tensor(a!)c                Z    t         j                  j                  j                  | |||      S r   )r.   opsaten
index_put_)selfindicesvalues
accumulates       r   r;   r;   h   s"    EIINN4M4Mgvz5 r   z0Unsafe index_put_ (doesn't issue device asserts)z+fma(Tensor a, Tensor b, Tensor c) -> Tensorc                    | |z  |z   S r    )abcs      r   r;   r;   o   s    QUaK r   zYFused multiply add: fma(a, b, c) -> (a * b) + c without rounding after the multiplicationz=prepare_softmax_online(Tensor a, int dim) -> (Tensor, Tensor)z1Prepare the softmax by computing the max and sum.)r   r   c                   t         j                  j                  j                  | |||||      \  }}| j                  d   }|d   }	dg| j
                  z  }
d|
d<   t        j                  |j                  d   t         j                  | j                        j                  |
      }dg| j
                  z  }d|d<   t        j                  |j                  d   t         j                  | j                        j                  |      }||d   z  |d   z
  }||d   z  |d   z
  }||z  }|||z  z
  }||z
  }||z
  }||	z  |z   }||j                  t         j                        fS )N   rB   r8   r   )r.   rL   rM   max_pool2d_with_indicesr'   ndimarangeint64r8   viewtoint8)rO   kernel_sizer$   paddingdilation	ceil_modevalsrP   input_widthkernel_widthbh_shapebhbw_shapebwhbasewbaseihiwh_incw_incoffsetss                        r   (_low_memory_max_pool2d_with_offsets_atenrv   z   sY    IINN::k67HiMD' **R.Kq>LsTYYHHRL	gmmB'u{{4;;	O	T	T
B sTYYHHRL	gmmB'u{{4;;	O	T	T
B NWQZ'ENWQZ'E	K	B	B$	%BJEJEl"U*GEJJ'''r   c                :   | j                  t        j                        } | |z  }| ||z  z
  }dg| j                  z  }d|d<   t        j                  | j
                  d   t        j                  | j                        j                  |      }dg| j                  z  }	d|	d<   t        j                  | j
                  d   t        j                  | j                        j                  |	      }
||d   z  |d   z
  }|
|d   z  |d   z
  }||z   }||z   }||z  |z   S )NrZ   rY   r[   r\   r   )rb   r.   r`   r^   r_   r'   r8   ra   )ru   rj   ri   r$   re   rs   rt   rk   rl   rm   rn   ro   rp   rq   rr   s                  r   ._low_memory_max_pool2d_offsets_to_indices_atenrx      s    jj%G|#Eu|+,EsW\\!HHRL	gmmB'u{{7>>	R	W	W
B sW\\!HHRL	gmmB'u{{7>>	R	W	W
B NWQZ'ENWQZ'E	B	Bb  r   z_low_memory_max_pool2d_with_offsets(Tensor self, SymInt[2] kernel_size, SymInt[2] stride,  SymInt[2] padding, SymInt[2] dilation, bool ceil_mode) -> (Tensor, Tensor)z6Instead of returning indices, returns indices offsets.z_low_memory_max_pool2d_offsets_to_indices(Tensor self, SymInt kernel_w, SymInt input_w, SymInt[2] stride, SymInt[2] padding) -> Tensorz-Convert small int offsets to regular indices.)r   strr   ry   r   zOptional[Sequence[torch.Tag]])r)   r   returnr   )r2   r   r3   intrz   ztuple[Tensor, Tensor])F)"
__future__r   loggingtypingr   r   r.   r   r   collections.abcr   	getLogger__name__logRETURN_TYPENEWr"   r+   r4   Tagnondeterministic_seededrF   r?   lookup_seedrandomr:   force_stride_order_unsafe_index_put_fmaprepare_softmax_onlinerv   rx   #_low_memory_max_pool2d_with_offsets)_low_memory_max_pool2d_offsets_to_indicesrT   r   r   <module>r      s   "  *    ( g! ""&&*. 
	
 (6C ,>G
))
+
+	-	 	8J9
))
+
+	-		 =-C	 
E 	R
 UTF
 Jx 
 p 	;  1c
 #C##''););)?)?@;	 &(R!6 '0 l,##''););)?)?@@	' # -6 M27- )r   