
    9j6#              
          d dl Z d dlZddlmZmZ ddlmZ d Z	 ddedee j                  z  de
d	efd
Zdee j                  z  dee j                  z  dej                  d	ee j                  e j                  f   fdZd Zy)    N   )	Pointwise	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          `/media/conek/DATA/Code/OCR/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_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_offsetsr0      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   r1   r2   r3   r	   batch_startseqr
   s
             r   jagged_idx_to_dense_idxr9   Z   sg     %%
|,QI !)-K
..]
3k
AC##CE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        f
fd       }	 dd	t        dt        t           d
t        d z  dt        ffd | t        j
                  j                  j                        	 dd	t        dt        t           d
t        d z  dt        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   rK   r   r   r3   r   rA   rL   s       @@r   r(   zNregister_jagged_ops.<locals>._jagged_to_padded_dense_forward.<locals>.inner_fn   sb    */'Iw"9#-%	#J ::NN:}= = r   r)   )r-   r.   r"   lentype
get_devicetorchr   aten_jagged_to_padded_dense_forwarddefaultmake_loaderr   r/   )r>   r?   r@   rA   r*   r'   jagged_values_sizer   offsets_lenr1   r2   embedding_lenoutput_sizer(   r   r3   r   rL   r;   r<   s      `          @@@@r   rU   z<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#		>>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   rC   r      FrE   r   )r   r   c           	          | \  }t        |
	      \  t        j                  t        j                  t        j                  	      t        j                  	            fdd      S )N)r   r   r6   r1   r2   r3   c                        g      S rI   rJ   )r	   dense_loaderrK   r
   s   r   rM   z^register_jagged_ops.<locals>._dense_to_jagged_forward_impl.<locals>.inner_fn.<locals>.<lambda>   s    i'%BC r           )r9   r   rN   rO   r    )r$   r   r	   rK   r
   r1   ra   r6   r2   r3   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)   )
r-   r.   r"   rP   rQ   rR   rW   r0   r   r/   )fallback_opr\   r?   r   r*   r'   
dense_sizer   rZ   r[   r   r(   r1   ra   r6   r2   r3   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)rc   r\   r?   r   )rS   r   rT   _padded_dense_to_jagged_forwardrV   )r\   r?   r   re   s      r   _dense_to_jagged_forwardz5register_jagged_ops.<locals>._dense_to_jagged_forward  s2     -		FFNN)!	
 	
r   )rb   rI   )loweringr;   r<   r=   rS   r   rT   rU   rV   r   listintfloatrg   )r=   rU   rh   re   r;   r<   s      @@@r   register_jagged_opsrm   m   s   NN uyy~~EEMMN
  #	D
 D
YD
 #YD
 	D

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

 
F
R uyy~~EEF "&



Y

 $J

 
	

 G

r   )T)sympyrS   irr   r   virtualizedr   r   rk   Exprboolr0   r'   tupler9   rm   rJ   r   r   <module>rt      s      $ 	 ??ejj ? ? 	?D ejj 	
 uzz! ;; 5::uzz!"&`
r   