
    3j6#              
       
   S SK r S SKrSSKJrJr  SSKJr  S r SS\S\\ R                  -  S\
S	\4S
 jjrS\\ R                  -  S\\ R                  -  S\R                  S	\\ R                  \ R                  4   4S jrS rg)    N   )	Pointwise	TensorBox)opsc                 j    [         R                  " U" U /5      US-   5      nU" U S-   /5      nXA-   nXe4$ )Nr   )r   indirect_indexing)	batch_idxseq_idxoffsets_loader
jagged_len	begin_idxend_idx
jagged_idxs          Z/home/wildlama/miniconda3/lib/python3.13/site-packages/torch/_inductor/jagged_lowerings.pydense_idx_to_jagged_idxr      sH     %%	{#QI i!m_-G$J    offsetsr   realizereturnc                   ^ ^ [        T S5      (       a  T R                  $ T R                  5         T R                  5       nT R	                  5       mUU 4S jn[
        R                  " UTUU/S9nU(       a  UR                  5         UT l        U$ )a  
Returns "inverse_offsets" - the inverse of the offsets array.
offsets maps batch index (dense) to jagged index (i.e. offset into jagged tensor).
inverse_offsets maps jagged index to batch index.

e.g. for offsets [0, 3, 4, 9, 10] this will return
inverse_offsets = [0, 0, 0, 1, 2, 2, 2, 2, 2, 3]

For the given offsets, the computed inverse_offsets are cached
on the first call and reused in the further calls.
inverse_offsetsc                 $  > U S   n[         R                  " [         R                  " UT5      TR                  5       TR	                  5       S   TR	                  5       S   TR                  5       S   -  TR                  5       S   4STSS9nUS-
  $ )Nr   T)values
boundariesboundary_indicesindexing_dtyperightr   )r   	bucketize
index_exprget_nameget_size
get_stride)indexidxbucketdtyper   s      r   inner_fn%get_inverse_offsets.<locals>.inner_fn7   s    Ah>>#u-  "  "2&  "1%(:(:(<Q(??""$R(	  
 zr   devicer'   r(   ranges)hasattrr   r   get_device_or_error	get_dtyper   create)r   r   r   r+   r(   r   r'   s   `     @r   get_inverse_offsetsr1      s    " w)** &&& OO"668F **,E$  &&|	O ! .Gr   
batch_sizemax_seq_lenoffsets_dtypec                     [         R                  " U" U /5      US-   5      nU" U/5      n[         R                  " X5      U-
  n[         R                  " XSS9n	Xi4$ )Nr   F)check)r   r   r    )
r   inverse_offsets_loaderr   r2   r3   r4   r	   batch_startseqr
   s
             r   jagged_idx_to_dense_idxr:   Z   sa     %%
|,QI !)-K
..
3k
AC##CEBGr   c                    ^^^ SSK JmJmJn   U " [        R
                  R                  R                  R                  5       SS[        S[        [           S[        [           S[        S[        4
UU4S jjj5       n SS	[        S[        [           S
[        S -  S[        4UU4S jjjmU " [        R
                  R                  R                  5       SS	[        S[        [           S
[        S -  S[        4U4S jjj5       ng )Nr   )fallback_handleris_integer_typeregister_loweringjagged_valuesjagged_offsetsmax_lengthspadding_valuer   c                    >^^^^^ U R                  5       nU R                  5       nU R                  5       n[        U5      S:w  d}  UR                  S:w  dm  XAS   R                  5       :w  dW  [        U5      S:w  dH  [        US   R                  5       5      S:w  d(  [        U5      [        U5      :w  d  T" US   5      (       d<  T" [        R                  R                  R                  R                  SS9" U UUT5      $ US   nUR                  5       S   nUR                  5       mUS-
  n	US   n
US   nUS   mXU/nU R                  5       mUR                  5       mUUUUU4S jn[        R                  " UUUUS9$ )	Nr   cudar      Fadd_to_fallback_setc                    >^^ U u  pm[        UUTTS9u  mn[        R                  " [        R                  " [        R                  " TT5      U5      UUU
4S jT	5      $ )N)r	   r
   r   r   c                     > T" TT /5      $ N )emb_idxr   values_loaders   r   <lambda>`register_jagged_ops.<locals>._jagged_to_padded_dense_forward.<locals>.inner_fn.<locals>.<lambda>   s    z7&;<r   )r   r   maskedltr    )r$   r	   r
   r   rL   r   r   r4   r   rB   rM   s       @@r   r(   Nregister_jagged_ops.<locals>._jagged_to_padded_dense_forward.<locals>.inner_fn   s`    */'I"9#-%	#J ::NN:}= = r   r*   )r.   r/   r"   lentype
get_devicetorchr   aten_jagged_to_padded_dense_forwarddefaultmake_loaderr   r0   )r?   r@   rA   rB   r+   r'   jagged_values_sizer   offsets_lenr2   r3   embedding_lenoutput_sizer(   r   r4   r   rM   r<   r=   s      `          @@@@r   rX   <register_jagged_ops.<locals>._jagged_to_padded_dense_forwardr   s    224'')*335 1${{f$*5577%&!+>!$--/0A5;3~#66">!#455#		>>FF$)   ,A.&&(+))+ 1_
!!n*1-'*
!>%113 ,,.	 	$ 	
 	
r   denser   c                   >^^^^^^ UR                  5       nUR                  5       nUR                  5       n[        U5      S:w  dh  UR                  S:w  dX  XBS   R                  5       :w  dB  [        US   R                  5       5      S:w  d"  [        U5      S:w  d  Ub  T" US   5      (       d  T" U SS9" UUU5      $ US   nUR                  5       mUS   mUS   mUS   nX8/n	UR                  5       mUR                  5       m[        UUS9n
U
R                  5       mUUUUUU4S	 jn[        R                  " UUUU	S
9$ )Nr   rD   r      FrF   r   )r   r   c           	         >^^^ U u  nm[        UT
TTTT	S9u  mm[        R                  " [        R                  " [        R                  " TT	5      [        R                  " TT	5      5      UUUU4S jS5      $ )N)r   r   r7   r2   r3   r4   c                     > T" T TT/5      $ rJ   rK   )r	   dense_loaderrL   r
   s   r   rN   ^register_jagged_ops.<locals>._dense_to_jagged_forward_impl.<locals>.inner_fn.<locals>.<lambda>   s    i'%BCr           )r:   r   rP   rQ   r    )r$   r   r	   rL   r
   r2   re   r7   r3   r4   r   s     @@@r   r(   Lregister_jagged_ops.<locals>._dense_to_jagged_forward_impl.<locals>.inner_fn   sr    "'J!8%-'=%'+"Iw ::NN7M:NN;> D r   r*   )
r.   r/   r"   rS   rT   rU   rZ   r1   r   r0   )fallback_opr`   r@   r   r+   r'   
dense_sizer   r]   r^   r   r(   r2   re   r7   r3   r4   r   r<   r=   s               @@@@@@r   _dense_to_jagged_forward_impl:register_jagged_ops.<locals>._dense_to_jagged_forward_impl   sY    **,!^^%
 1${{f$*5577>!$--/0A5:!#!">!#455#KUK  ,A.))+]
 m"2!1((* ,,.-!
 "1!<!<!>	 	( 	
 	
r   c                 n   > T" [         R                  R                  R                  R                  U UUS9$ )N)ri   r`   r@   r   )rV   r   rW   _padded_dense_to_jagged_forwardrY   )r`   r@   r   rk   s      r   _dense_to_jagged_forward5register_jagged_ops.<locals>._dense_to_jagged_forward  s2     -		FFNN)!	
 	
r   )rg   rJ   )loweringr<   r=   r>   rV   r   rW   rX   rY   r   listintfloatrn   )r>   rX   ro   rk   r<   r=   s      @@@r   register_jagged_opsru   m   s   NN uyy~~EEMMN
  #	D
 D
YD
 #YD
 	D

 
D
 D
 OD
T "&	F
F
 YF
 $J	F

 
F
 F
R uyy~~EEF "&



Y

 $J

 
	

 G

r   )T)sympyrV   irr   r   virtualizedr   r   rs   Exprboolr1   r'   tupler:   ru   rK   r   r   <module>r|      s      $ 	 ??ejj ? ? 	?D ejj 	
 uzz! ;; 5::uzz!"&`
r   