
    sh#              
       :   S SK JrJr  S SKrS SKrSSKJrJr  SSKJ	r	J
r
Jr  SSKJr  S r SS\S	\\\R                   4   S
\S\4S jjrS\\\R                   4   S\\\R                   4   S\R&                  S\\R                   \R                   4   4S jrS rg)    )OptionalUnionN   )	Pointwise	TensorBox)fallback_handleris_integer_typeregister_lowering)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          t/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/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_fn9   s    Ah>>#u-  "  "2&  "1%(:(:(<Q(??""$R(	  
 zr   devicer,   r-   ranges)hasattrr   r   get_device_or_error	get_dtyper   create)r   r   r   r0   r-   r   r,   s   `     @r   get_inverse_offsetsr6      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   r7   r8   r9   r   batch_startseqr   s
             r   jagged_idx_to_dense_idxr?   \   sa     %%
|,QI !)-K
..
3k
AC##CEBGr   c                     ^ [        [        R                  R                  R                  R
                  5       SS[        S[        [           S[        [           S[        S[        4
S jj5       n  SS[        S[        [           S[        [           S[        4S	 jjm[        [        R                  R                  R                  5       SS[        S[        [           S[        [           S[        4U4S
 jjj5       ng )N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  dp  XAS   R                  5       :w  dZ  [        U5      S:w  dK  [        US   R                  5       5      S:w  d+  [        U5      [        U5      :w  d  [        US   5      (       d?  [        [        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   rN   r   r   r9   r   rD   rO   s       @@r   r-   Nregister_jagged_ops.<locals>._jagged_to_padded_dense_forward.<locals>.inner_fn   s`    */'I"9#-%	#J ::NN:}= = r   r/   )r3   r4   r'   lentype
get_devicer	   r   torchr   aten_jagged_to_padded_dense_forwarddefaultmake_loaderr   r5   )rA   rB   rC   rD   r0   r,   jagged_values_sizer   offsets_lenr7   r8   embedding_lenoutput_sizer-   r   r9   r   rO   s      `          @@@@r   rZ   <register_jagged_ops.<locals>._jagged_to_padded_dense_forwardq   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  dk  UR                  S:w  d[  XBS   R                  5       :w  dE  [        US   R                  5       5      S:w  d%  [        U5      S:w  d  Ub  [        US   5      (       d  [        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   rF   r      FrH   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   r<   r7   r8   r9   c                     > T" T TT/5      $ rL   rM   )r   dense_loaderrN   r   s   r   rP   ^register_jagged_ops.<locals>._dense_to_jagged_forward_impl.<locals>.inner_fn.<locals>.<lambda>   s    i'%BCr           )r?   r   rR   rS   r%   )r)   r   r   rN   r   r7   rg   r<   r8   r9   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/   )r3   r4   r'   rU   rV   rW   r	   r   r\   r6   r   r5   )fallback_oprb   rB   r   r0   r,   
dense_sizer   r_   r`   r   r-   r7   rg   r<   r8   r9   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)rk   rb   rB   r   )rX   r   rY   _padded_dense_to_jagged_forwardr[   )rb   rB   r   rm   s      r   _dense_to_jagged_forward5register_jagged_ops.<locals>._dense_to_jagged_forward  s2     -		FFNN)!	
 	
r   )ri   rL   )r
   rX   r   rY   rZ   r[   r   listintfloatr   rp   )rZ   rq   rm   s     @r   register_jagged_opsrv   o   s	   uyy~~EEMMN
  #	D
 D
YD
 #YD
 	D

 
D
 OD
T %)	F
F
 YF
 SM	F

 
F
R uyy~~EEF %)



Y

 SM

 
	

 G

r   )T)typingr   r   sympyrX   irr   r   loweringr   r	   r
   virtualizedr   r   rt   Exprboolr6   r,   tupler?   rv   rM   r   r   <module>r      s    "   $ J J 	 ??c5::o&? ? 	?D c5::o&	
 sEJJ' ;; 5::uzz!"&]
r   