
    ȅiq#              
       &   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	  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)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/james-whalen/.local/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_fn8   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_offsetsr3      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   r4   r5   r6   r   batch_startseqr   s
             r   jagged_idx_to_dense_idxr<   [   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[        4UU4S jjjmU " [        R
                  R                  R                  5       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   rN   r   r   r6   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,   )r0   r1   r$   lentype
get_devicetorchr   aten_jagged_to_padded_dense_forwarddefaultmake_loaderr   r2   )rA   rB   rC   rD   r-   r)   jagged_values_sizer   offsets_lenr4   r5   embedding_lenoutput_sizer*   r   r6   r   rO   r>   r?   s      `          @@@@r   rZ   <register_jagged_ops.<locals>._jagged_to_padded_dense_forwards   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   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   r9   r4   r5   r6   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   r4   rg   r9   r5   r6   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,   )
r0   r1   r$   rU   rV   rW   r\   r3   r   r2   )fallback_oprb   rB   r   r-   r)   
dense_sizer   r_   r`   r   r*   r4   rg   r9   r5   r6   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)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   )loweringr>   r?   r@   rX   r   rY   rZ   r[   r   listintfloatr   rp   )r@   rZ   rq   rm   r>   r?   s      @@@r   register_jagged_opsrw   n   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
 SM	F

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