
    pi#                     .   d dl mZmZ d dlZd dlZddlmZmZmZ ddl	m
Z
 d Z	 ddedeeej                  f   d	ed
eeef   fdZdeeej                  f   deeej                  f   dej                   d
eej                  ej                  f   fdZd Zy)    )OptionalUnionN   )	PointwiseShapeAsConstantBuffer	TensorBox)opsc                 l    t        j                   || g      |dz         } || dz   g      }||z   }||fS )Nr   )r	   indirect_indexing)	batch_idxseq_idxoffsets_loader
jagged_len	begin_idxend_idx
jagged_idxs          b/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/torch/_inductor/jagged_lowerings.pydense_idx_to_jagged_idxr      sL     %%	{#QI i!m_-GW$Jw    offsetsr   realizereturnc                     t         d      r j                  S  j                           j                         } j	                          fd}t        j                  |||g      }|r|j                          | _        |S )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                 &   | d   }t        j                  t        j                  |      j                         j	                         d   j	                         d   j                         d   z  j                         d   fdd      }|dz
  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_fnz%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                     t        j                   || g      |dz         } ||g      }t        j                  | |      |z
  }t        j                  ||d      }	||	fS )Nr   F)check)r	   r   r#   )
r   inverse_offsets_loaderr   r4   r5   r6   r   batch_startseqr   s
             r   jagged_idx_to_dense_idxr<   [   sg     %%
|,QI !)-K
..]
3k
AC##CEBGgr   c                  X   ddl mmm}   | t        j
                  j                  j                  j                        	 ddt        dt        t           dt        t           dt        dt        t        t        f   f
fd       }	 dd	t        dt        t           d
t        t           dt        t        t        f   ffd | t        j
                  j                  j                         	 dd	t        dt        t           d
t        t           dt        t        t        f   ffd       }y )Nr   )fallback_handleris_integer_typeregister_loweringjagged_valuesjagged_offsetsmax_lengthspadding_valuer   c                    | j                         }| j                         }| j                         }t        |      dk7  st|j                  dk7  se||d   j                         k7  sOt        |      dk7  sAt        |d   j                               dk7  s"t        |      t        |      k7  s |d         s?  t        j                  j                  j                  j                  d      | ||      S |d   }|j                         d   }|j                         |dz
  }	|d   }
|d   }|d   |	|
|g}| j                         |j                         fd}t        j                  ||||      S )	Nr   cudar      Fadd_to_fallback_setc                     | \  }}t        ||      \  }t        j                  t        j                  t        j                        |      
fd	      S )N)r   r   r   r   c                        g      S N )emb_idxr   values_loaders   r   <lambda>z`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+   zNregister_jagged_ops.<locals>._jagged_to_padded_dense_forward.<locals>.inner_fn   sb    */'Iw"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   rX   z<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#		>>FF$)   ,A.&&(+))+ 1_
!!n*1-'*
!;>%113 ,,.	 	$ 	
 	
r   denser   c                 ~   |j                         }|j                         }|j                         }t        |      dk7  s_|j                  dk7  sP||d   j                         k7  s:t        |d   j                               dk7  st        |      dk7  s| |d         s  | d      |||      S |d   }|j                         |d   |d   |d   }||g}	|j                         |j                         t        ||      }
|
j                         fd	}t        j                  ||||	
      S )Nr   rF   r      FrH   r   )r   r   c           	          | \  }t        |
	      \  t        j                  t        j                  t        j                  	      t        j                  	            fdd      S )N)r   r   r9   r4   r5   r6   c                        g      S rL   rM   )r   dense_loaderrN   r   s   r   rP   z^register_jagged_ops.<locals>._dense_to_jagged_forward_impl.<locals>.inner_fn.<locals>.<lambda>   s    i'%BC r           )r<   r	   rQ   rR   r#   )r'   r   r   rN   r   r4   rd   r9   r5   r6   r   s     @@@r   r+   zLregister_jagged_ops.<locals>._dense_to_jagged_forward_impl.<locals>.inner_fn   sr    "'J!8%-'=%'+"Iw ::NN7M:NN;> D r   r,   )
r0   r1   r%   rS   rT   rU   rZ   r3   r   r2   )fallback_opr_   rB   r   r-   r*   
dense_sizer   r]   r^   r   r+   r4   rd   r9   r5   r6   r   r>   r?   s               @@@@@@r   _dense_to_jagged_forward_implz:register_jagged_ops.<locals>._dense_to_jagged_forward_impl   s]    **,!^^%
 1${{f$*5577>!$--/0A5:!#!">!#45K#KUK  ,A.))+]
 m"2!=1((* ,,.-!
 "1!<!<!>	 	( 	
 	
r   c                 t     t         j                  j                  j                  j                  | ||      S )N)rf   r_   rB   r   )rV   r	   rW   _padded_dense_to_jagged_forwardrY   )r_   rB   r   rh   s      r   _dense_to_jagged_forwardz5register_jagged_ops.<locals>._dense_to_jagged_forward  s2     -		FFNN)!	
 	
r   )re   rL   )loweringr>   r?   r@   rV   r	   rW   rX   rY   r   listintfloatr   r   r   rj   )r@   rX   rk   rh   r>   r?   s      @@@r   register_jagged_opsrp   n   s2   NN uyy~~EEMMN
  #	D
 D
YD
 #YD
 	D

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

 
y//	0F
R uyy~~EEF %)



Y

 SM

 
y//	0	

 G

r   )T)typingr   r   sympyrV   irr   r   r   virtualizedr	   r   rn   Exprboolr3   r*   tupler<   rp   rM   r   r   <module>rx      s    "   ; ; 	 ??c5::o&? ? 9++,	?D c5::o&	
 sEJJ' ;; 5::uzz!"&`
r   