
    `i#                        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dS )    )OptionalUnionN   )	PointwiseShapeAsConstantBuffer	TensorBox)opsc                 v    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          t/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/_inductor/jagged_lowerings.pydense_idx_to_jagged_idxr      sX     %	{##Q I ni!m_--GW$Jw    Toffsetsr   realizereturnc                 (    t           d          r j        S                                                                    }                                  fd}t          j        |||g          }|r|                                 | _        |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                 h   | d         }t          j        t          j        |                                                                          d                                         d                                         d         z                                  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8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<   [   sx     %
|,,Q I !.)--K
.]
3
3k
AC#CEBBBGgr   c                     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            }d S )Nr   )fallback_handleris_integer_typeregister_lowering        jagged_valuesjagged_offsetsmax_lengthspadding_valuer   c                    |                                  }|                                 }|                                 }t          |          dk    s|j        dk    s||d                                         k    sot          |          dk    s\t          |d                                                   dk    s1t          |          t          |          k    s |d                   s2  t          j        j        j	        j
        d          | ||          S |d         }|                                d         }|                                |dz
  }	|d         }
|d         }|d         |	|
|g}|                                 |                                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   rO   r   r   r6   r   rE   rP   s       @@r   r+   zNregister_jagged_ops.<locals>._jagged_to_padded_dense_forward.<locals>.inner_fn   s    */'Iw"9#-%	# # #J :N:}==  =<<<<<  r   r,   )r0   r1   r%   lentype
get_devicetorchr	   aten_jagged_to_padded_dense_forwarddefaultmake_loaderr   r2   )rB   rC   rD   rE   r-   r*   jagged_values_sizer   offsets_lenr4   r5   embedding_lenoutput_sizer+   r   r6   r   rP   r>   r?   s      `          @@@@r   rY   z<register_jagged_ops.<locals>._jagged_to_padded_dense_forwards   s	    2244''))*3355 1$${f$$*557777%&&!++>!$--//00A55;3~#6#666"?>!#455 7##	>F$)      ,A.&&((+))++ 1_
!!n*1-'*
!;>%1133 ,,..	 	 	 	 	 	 	 	 	$ 	
 
 
 	
r   denser   c                     |                                 }|                                }|                                }t          |          dk    sz|j        dk    so||d                                         k    sQt          |d                                                   dk    s&t          |          dk    s| |d                   s  | d          |||          S |d         }|                                |d         |d         |d         }||g}	|                                |                                t          ||          }
|
                                fd	}t          j	        ||||	
          S )Nr   rG   r      FrI   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 rM   rN   )r   dense_loaderrO   r   s   r   rQ   z^register_jagged_ops.<locals>._dense_to_jagged_forward_impl.<locals>.inner_fn.<locals>.<lambda>   s    i'%BCC r   rA   )r<   r	   rR   rS   r#   )r'   r   r   rO   r   r4   re   r9   r5   r6   r   s     @@@r   r+   zLregister_jagged_ops.<locals>._dense_to_jagged_forward_impl.<locals>.inner_fn   s    "'J!8%-'=%'+" " "Iw :N7M::N;>>  DCCCCCC  r   r,   )
r0   r1   r%   rT   rU   rV   r[   r3   r   r2   )fallback_opr`   rC   r   r-   r*   
dense_sizer   r^   r_   r   r+   r4   re   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77>!$--//00A55:!##!"?>!#455 " L##KUKKK   ,A.))++]
 m"2!=1((** ,,..-!
 
 
 "1!<!<!>!>	 	 	 	 	 	 	 	 	 	( 	
 
 
 	
r   c                 T     t           j        j        j        j        | ||          S )N)rf   r`   rC   r   )rW   r	   rX   _padded_dense_to_jagged_forwardrZ   )r`   rC   r   rh   s      r   _dense_to_jagged_forwardz5register_jagged_ops.<locals>._dense_to_jagged_forward  s5     -,	FN)!	
 
 
 	
r   )rA   rM   )loweringr>   r?   r@   rW   r	   rX   rY   rZ   r   listintfloatr   r   r   rj   )r@   rY   rk   rh   r>   r?   s      @@@r   register_jagged_opsrp   n   s   NNNNNNNNNN uy~EMNN
  #	D
 D
 D
YD
 #YD
 	D

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

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