o
    <&id}                  
   @   s  U d dl Z d dlZd dlZd dlmZ ddlmZ d dlT d dlm	Z	 g Z
ee ed< i Zeeef ed< d	d
 Zdd Zdd ZdeddfddZdededededdf
ddZdd Zdd Zdd Ze eeZdee fdd Zd!d" Zd#d$ Zd%d& Z d'd( Z!eej"j#j$j%ej"j#j&j%ej"j#j'j%ej"j#j(j%ej"j#j)j%ej"j#j*j%gd)d*d+ Z+eej"j,j-j%d)d,d- Z.eej"j#j/j%gd)d.d/ Z0eej"j#j1j%d)d0d1 Z2eej"j#j1j3d2e2 eej"j#j4j%d3d4d5 Z5eej"j#j6j%d6d7d8 Z7eej"j#j8j%d9d:d; Z9eej"j#j:j%ej"j#j;j%ej"j#j<j%ej"j#j=j%gd9e eej"j#j>j%d<e eej"j#j?j%d=d>d? Z@eej"j#jAj%d@dAdB ZBeej"j#jCjDdCdDdE ZEeej"j#jFjGdFdGdH ZHeej"j#jIj%dIdJdK ZJeej"j#jKjLdLdMdN ZMeej"j#jNj%dOdPdQ ZOeej"j#jPj%dRdSdT ZQeej"j#jRj%dUdVdW ZSeej"j#jTj%dXdYdZ ZUeej"j#jVj%d[d\d] ZWeej"j#jXjYd^d_d` ZZeej"j#j[j%dadbdc Z\eej"j#j]j%daddde Z^eej"j#j_j%dfdgdh Z`eej"j#jajbdidjdk Zceej"j#jdjLdldmdn Zeeej"j#jfj%dodpdq Zgeej"j#jhj%drdsdt Zieej"j#jjj%dudvdw Zkeej"j#jljLdxdydz Zmeej"j#jnjGd{d|d} Zoeej"j#jpj%d~dd Zqeej"j#jrj'ddd Zseej"j#jtj%dRdd Zueej"j#jvj%ddd ZwdS )    N)#jagged_scaled_dot_product_attention   )NestedTensor)*)normalize_function__all__JAGGED_OPS_TABLEc                 C   s(   |dkr|| k s
J |dk rdS |d S )Nr      r    )ndimdimr
   r
   EC:\wamp64\www\opt\env\Lib\site-packages\torch/nested/_internal/ops.py_outer_to_inner_dim   s   r   c                 C   s6   ddl m} || |}|dk rt| dt| |S )Nr   canonicalize_dimsr	   z4(): not supported for NestedTensor on dim=0 or dim=1)torch._prims_commonr   RuntimeErrorr   )r   r   op_namer   wrappedr
   r
   r   _wrap_jagged_dim   s   

r   c                    s|   ddl m   fdd|D }d|v }d|v }||A r1|r dnd\}}t| d| d	| d
tfdd|D |fS )Nr   r   c                    s   g | ]} |qS r
   r
   .0dr   r   r
   r   
<listcomp>'       z%_wrap_jagged_dims.<locals>.<listcomp>r   )batchragged)r   r   z(): applying over the z dimension, but not the z, dimension is not supported for NestedTensorc                 3   s"    | ]}|d krt  |V  qdS )r   N)r   r   )r   r
   r   	<genexpr>3   s     z$_wrap_jagged_dims.<locals>.<genexpr>)r   r   r   tuple)r   dimsr   Zwrapped_dimsZzero_in_dimsZone_in_dimsapplyZ	not_applyr
   r   r   _wrap_jagged_dims"   s   r"   
schema_strreturnc                 O   s^  |  d}tdd |D }t|| }t||kr"t|t|ks;td|j d|  d| dt| dt| d	d
d dd dd dd d}t|D ]^\}}	|	 d\}
}|d}|rf|d d n|}|| vrutd| |t|kr|std|j d|  d|
 qN|| || std|j d|  d|
 d| dt	||  
qNd S )Nz, c                 S   s   g | ]}| d qS )?)endswithr   xr
   r
   r   r   :   r   z check_schema.<locals>.<listcomp>NestedTensor (z): expected at least z arguments and at most z arguments, but got: z
 argumentsc                 S   s   t | tjot | t S N)
isinstancetorchTensorr   r(   r
   r
   r   <lambda>E       zcheck_schema.<locals>.<lambda>c                 S   s   t | to	| jd u S r+   )r,   r   _lengthsr/   r
   r
   r   r0   F   s   
 
c                 S   s
   t | tS r+   )r,   r   r/   r
   r
   r   r0   H   s    c                 S   s   dS )NTr
   r/   r
   r
   r   r0   K   s    )tZjtZjt_allanyz: r%   zUnknown arg type: z) missing required argument: z): z should be of type z, but got: )
splitsumlen
ValueError__name__	enumerater&   keysAssertionErrortype)r#   funcargskwargsZnamed_arg_typesZnum_optional_argsZmin_argsZarg_type_check_fnsiZnamed_arg_typenameZarg_typeZis_optionalZnormalized_arg_typer
   r
   r   check_schema8   sP   
	

rD   aa_namebb_namec                 C   s:   |j |j |j |j krtd| j d| d| dd S )Nr)   z: expected  and z' to have the same exact offsets tensor.)_size_ragged_idxr   r:   )r?   rE   rF   rG   rH   r
   r
   r   check_ragged_dim_samec   s
   rL   c                 C   s,   | j d }t| jd | t|d | kS )Nr   )rK   listrJ   )ntsizeendr
   r
   r   raggedness_matchesp   s   
"rQ   c                 C   s*   | j d dkr| d} | j d dks| S Nr   r   )shapeZsqueeze)r3   r
   r
   r   squeeze_leading_onesu   s   
rT   c                    s4   t  ts g t tsg fdd}|S )Nc                    s2   D ]} fdd}D ]}||||< qq S )Nc                    s    fdd}|S )Nc                     s.   t g| R i |  g| R i |S r+   )rD   )r@   rA   )aten_opr?   r#   r
   r   inner   s   z@register_func.<locals>.wrapper.<locals>.get_inner.<locals>.innerr
   )rU   rV   )r?   r#   )rU   r   	get_inner   s   z1register_func.<locals>.wrapper.<locals>.get_innerr
   )r?   rU   rW   tableaten_opsr#   tables)r?   r   wrapper   s   zregister_func.<locals>.wrapper)r,   rM   )r[   rZ   r#   r\   r
   rY   r   register_func   s   

r]   c                 O   s|   t | d }|d ur|S tjj| jv r<tdd |D }|dkr&tt	| S |dkr<t
d| g|R i | tt| S d S )Nc                 S   s   g | ]}t |tjqS r
   )r,   r-   r.   r'   r
   r
   r   r      r1   z!lookup_jagged.<locals>.<listcomp>r   r	   zlhs: any, rhs: any)r   getr-   TagZ	pointwisetagsr7   	functoolspartialjagged_unary_pointwiserD   jagged_binary_pointwise)r?   r@   rA   Zdispatch_funcZnum_tensor_argsr
   r
   r   lookup_jagged   s   re   c                 C   s   |   | j| jd}|S )NoffsetsZ_max_seqlenZ_min_seqlenrf   )argrA   r
   r
   r   extract_kwargs   s
   ri   c                 O   s8   t | |d jg|dd  R i |fi t|d S rR   )r   _valuesri   r?   r@   rA   r
   r
   r   rc      s
   "
rc   c                 O   s  |d |d }}t |tst |tsJ d| j d|j d|j }t |trQt |trQt||jrMt| |j|jg|dd  R i |fi t|S t|t |t}|r\t|nt|}|rf||fn||f\}}	|	 | krxt	dt
|	}
| |
 d kr|r|j|
fn|
|jf\}}t| ||g|dd  R i |fi |S | | kr|jd |jd krt|g }t| | D ]\}}|| ||g|dd  R i | qtj|dd}t|fi |S t|)	Nr   r   z&cannot call binary pointwise function z with inputs of shapes rI   r	   z+NYI: broadcasting NT with T with larger dim)r   )r,   r   r:   rS   rQ   rj   ri   r   r   NotImplementedErrorrT   zipunbindappendr-   cat)r?   r@   rA   rE   rG   Zmismatch_error_msgZa_is_ntZextracted_kwargsrN   r3   Z
t_squeezedlhsrhsZoutputsZa_compZb_comp
new_valuesr
   r
   r   rd      sD   
"
,(rd   c                 O   s   | t jjju rt|i |S | jdkrPddd}t|||dd\}}|d}t|	 |d	 d|d	< t|	 |d
 d|d
< t
| |jfi |fi t|S t| )Nflattenr   r5   c                 S   s   d S r+   r
   )input	start_dimend_dimr
   r
   r   _flatten_sig  s   z+jagged_torch_function.<locals>._flatten_sigTr@   rA   Znormalize_to_only_use_kwargsru   rv   rw   )r   r5   )r-   Z_CZ_nnZscaled_dot_product_attentionr   r:   r   popr   r   r   rj   ri   rl   )r?   r@   rA   rx   _
new_kwargsinpr
   r
   r   jagged_torch_function  s    



"r~   zself: jt_allc                 O   s   | t jjjjkr
dS | t jjjjkr|d jS | t jjjjkr&t|d jS | t jjj	jkrQ|d j
d urJtt|d j
t|d jdd   S |d j S | t jjjjkr^|d jS | t jjjjkrm|d j S d S )NFr   r	   )r-   opsatenis_non_overlapping_and_densedefaultsym_sizerJ   r   r8   	sym_numelr2   intr7   mathprodrj   Znumel
sym_strideZ_stridessym_storage_offsetZstorage_offsetrk   r
   r
   r   tensor_attr_supported_getter"  s   
*
r   c                 O   s   t jS r+   )r-   Zjaggedrk   r
   r
   r   prim_layout_defaultC  s   r   c                 O   s   | t jjjjkrtdd S )NznNestedTensors does not support directly calling torch.ops.aten.size please use `nested_tensor.size()` instead.)r-   r   r   rO   r   r   rk   r
   r
   r   tensor_attr_unsupported_getterH  s
   r   c                 O   s   ddl m} t| ||dd\}}|d}| d urdS |jdkr$dS |dtj|d< |d tj	kr6dS ||
 fi |S )	Nr   )is_contiguous_for_memory_formatTry   ru   Fr   memory_format)r   r   r   rz   lengthsrK   r^   r-   Zcontiguous_formatZpreserve_formatvalues)r?   r@   rA   r   r{   r|   r}   r
   r
   r   is_contiguous_generalT  s   


r   z!self: jt_all, memory_format: any?zinput: jt, weight: t, bias: t?c                 O   sP   t | ||dd\}}|d}|d }|d }t| |jfi |fi t|S )NTry   ru   weightbiasr   rz   r   rj   ri   )r?   r@   rA   r{   r|   r}   r   r   r
   r
   r   linear_defaultr  s   

"r   z6self: jt, grad_output: jt, weight: t, output_mask: anyc                 O   s   t | ||dd\}}|d}|d}|d}t| |d|d tt|j|fi t|}t|jj|j}	d }
||	|
fS )NTry   ru   grad_outputr   self)	r   rz   rL   r   r-   mmrj   ri   T)r?   r@   rA   r{   r|   r}   r   r   ZdsZdwdbr
   r
   r   linear_backward_default  s   




r   zself: jtc                 O   sN   t | ||dd\}}|d}|d | |jfi |}t|fi t|S )NTry   ru   layoutr   rz   rj   r   ri   )r?   r@   rA   r{   r|   r}   rs   r
   r
   r   to_copy_default  s   


r   z&self: jt, dim: any, half_to_float: anyz!self: jt, float: any, train: any?c                 O   s\   t | ||dd\}}|d}| |jfi |\}}t|fi t|t|fi t|fS NTry   ru   r   )r?   r@   rA   r{   r|   r}   Zout1Zout2r
   r
   r   native_dropout_default  s   

r   z%grad_output: jt, mask: jt, scale: anyc                 O   sN   t | ||dd\}}|d}|d}t| |j|jfi |fi t|S )NTry   r   maskr   )r?   r@   rA   r{   r|   r   r   r
   r
   r   native_dropout_backward_default  s   


r   z!self: jt, dim: any, keepdim: any?c                 O   sr   t | ||dd\}}|d}|d std|d }tt|j|d|d< t| |jfi |fi t|d S )	NTry   ru   keepdimz1prod(): keepdim=True must be set for NestedTensorr   r   r   )	r   rz   r   r   r8   rS   r   rj   ri   )r?   r@   rA   r{   r|   r}   r   r
   r
   r   prod_dim_int  s   

&r   z#self: jt, split_size: any, dim: anyc                    sZ   t | ||dd\}}|d t  |d d|d< t fdd|  jfi |D S )NTry   ru   r   r6   c                 3   s&    | ]}t dd |it V  qdS )r   Nr
   r   ri   r'   r}   r
   r   r     s
    
zsplit_tensor.<locals>.<genexpr>)r   rz   r   r   r   rj   r?   r@   rA   r{   r|   r
   r   r   split_tensor  s   

r   z$self: jt, split_sizes: any, dim: anyc                    sV   t | ||dd\}}|d t  |d d|d<  fdd|  jfi |D S )NTry   ru   r   split_with_sizesc                    s"   g | ]}t dd |it qS )r   r
   r   r'   r   r
   r   r     s    z,split_with_sizes_default.<locals>.<listcomp>)r   rz   r   r   rj   r   r
   r   r   split_with_sizes_default  s   


r   zself: jt_all, dim: any?c                    s   t | ||dd\}}|d }|dkrtd|d}| | |  |jdkr0td d u r>t	 
 S  fd	d
t jd D S )NTry   r   r   z2unbind(): only supported for NestedTensor on dim=0ru   r   zDunbind(): only supported for NestedTensor when jagged dimension is 1c                    s(   g | ]}| |  |   qS r
   r
   )r   rB   r   rg   r   r
   r   r   "  s    zunbind_int.<locals>.<listcomp>)r   r   rz   r   rg   r   rK   r-   r6   difftolistrangerS   )r?   r@   rA   r{   r|   r   r}   r
   r   r   
unbind_int  s&   


r   zself: jt, dim: anyc           	      O   sl   t | ||dd\}}|d}|j}|j}|d }tt|jd |d|d< t| |fi |fi t|S )NTry   ru   r   r   	unsqueeze)	r   rz   rj   rg   r   r8   rS   r   ri   )	r?   r@   rA   r{   r|   r}   r   rg   r   r
   r
   r   unsqueeze_default'  s   

 r   ztensors: any, dim: anyc                    s   t | ||dd\}}|d}dd |D }t|dksJ |d   fdd|D }|d }tt j|d	|d< t| d
d |D fi |fi t|d S )NTry   tensorsc                 S   s   g | ]}|j r|qS r
   )	is_nestedr   r3   r
   r
   r   r   @  r   zcat_default.<locals>.<listcomp>r   c                    s    g | ]}|j r	|n| qS r
   )r   	expand_asr   firstr
   r   r   C  s     r   rp   c                 S      g | ]}|j qS r
   rj   r   r
   r
   r   r   J      )r   rz   r8   r   rS   r   ri   )r?   r@   rA   r{   r|   r   nestedr   r
   r   r   cat_default7  s   


r   zself: jt, other: anyc                 O   s   t | ||dd\}}|d}|d}|jr,|js,t| |j|fi |fi t|S |jrS|jrS| dkrS| dkrSt||jrSt| |j|jfi t|S t	d|j d|j )NTry   ru   other   z1matmul(): not supported between inputs of shapes rI   )
r   rz   r   r   rj   ri   r   rQ   rS   r   r?   r@   rA   r{   r|   r}   r   r
   r
   r   matmul_defaultN  s"   


$r   z#self: jt, size: any, implicit: any?c                 O   s   t | ||dd\}}|d}|d }d|vs|drJ t||s.td|j d| dg|d	d  }t| |j|fi t|S )
NTry   ru   rO   Zimplicitzexpand(): cannot expand shape z -> r5   r	   )r   rz   rQ   r   rS   r   rj   ri   )r?   r@   rA   r{   r|   r}   rO   Z
expand_argr
   r
   r   expand_defaulte  s   


r   zself: t, other: jtc                 O   sD   t | ||dd\}}|d}|d}t| ||jfi t|S )NTry   ru   r   r   r   r
   r
   r   expand_as_defaultx  s   


r   z"condition: jt, self: jt, other: jtc                 O   s~   t | ||dd\}}|d}|d}|d}|j|j  kr'|jks*J  J t| |j|j|jfi |fi t|S )NTry   	conditionru   r   )r   rz   rS   r   rj   ri   )r?   r@   rA   r{   r|   r   r}   r   r
   r
   r   
where_self  s   



"r   zself: jt, device: any?c                 O   @   t | ||dd\}}|d}t| |jfi |fi t|S r   r   r?   r@   rA   r{   r|   r}   r
   r
   r   _pin_memory_default  s
   

"r   c                 O   s0   t | ||dd\}}|d}| |jfi |S r   )r   rz   rj   r   r
   r
   r   is_pinned_default  s
   

r   zself: jt, other: jtc                 O   s   |d j |d j kS rR   )rJ   rk   r
   r
   r   is_same_size_default  s   r   z/self: jt, dim: any?, keepdim: any?, dtype: any?c                 O   s   t | ||dd\}}|d}|jdksJ t| |d d\|d< }|s7t| |jfi |fi t|S | |jfi |}|d rI|d}|S )	NTry   ru   r   r   r7   r   r   )	r   rz   rK   r"   r   r   rj   ri   r   )r?   r@   rA   r{   r|   r}   Zragged_reduced_awayoutr
   r
   r   sum_dim_IntList  s   

"
r   zself: jt, dim0: any, dim1: anyc           
      O   s  t | ||dd\}}ddlm} |d}|| |d |d f\}}||jks.||jkrd|dks6|dkr:td||jkrB|}	n|}	t| 	t
t|j|t
t|j|fi t|d	|	iS t| |d d
|d< t| |d d
|d< t| |jfi |fi t|S )NTry   r   r   ru   dim0dim1z?Transpose is not supported on the batch dimension for jagged NTrK   	transpose)r   r   r   rz   r   rK   r9   r   r   r   r   r8   rJ   ri   r   rj   )
r?   r@   rA   r{   r|   r   r}   r   r   Zto_dimr
   r
   r   transpose_int  s6   


	"r   zself: jt, size: anyc                 O   s   t | ||dd\}}|d}|d}t|dk st||s*td|j d| |jjd g|d	d   }t| |j|fi t|S )
NTry   ru   rO   r   zview(): cannot view shape z as r   r	   )	r   rz   r8   rQ   r   rS   rj   r   ri   )r?   r@   rA   r{   r|   r}   rO   Zjagged_sizer
   r
   r   view_default  s   


r   zDinput: jt, normalized_shape: any, weight: any?, bias: any?, eps: anyc           
      O   s   t | ||dd\}}|d}|d }| dk s#| t| dk r'td| |jfi |\}}}	t|fi t|||	fS )NTry   ru   normalized_shaper   r	   zJlayer_norm(): normalizing over ragged dim not supported for nested tensors)r   rz   r   r8   r   rj   r   ri   )
r?   r@   rA   r{   r|   r}   r   outputmeanZstdr
   r
   r   native_layer_norm_default  s   

 r   zpgrad_out: jt, input: jt, normalized_shape: any, mean: any, rstd: any, weight: any?, bias: any?, output_mask: anyc           
      O   sp   t | ||dd\}}|d}|d}| |j|jfi |\}}}	|d u r+d ||	fS t|fi t|||	fS )NTry   grad_outru   r   )
r?   r@   rA   r{   r|   r   r}   Zd_inputZd_gammaZd_betar
   r
   r   "native_layer_norm_backward_default  s   



r   zself: jt, dim: any, index: anyc                 O   X   t | ||dd\}}|d}t| |d d|d< t| |jfi |fi t|S )NTry   ru   r   selectr   rz   r   r   r   rj   ri   r   r
   r
   r   
select_int(  s   

"r   z7self: jt, dim: any?, start: any?, end: any?, step: any?c                 O   r   )NTry   ru   r   slicer   r   r
   r
   r   slice_tensor4  s   

"r   z{input: jt, weight: t, bias: t?, stride: any, padding: any, dilation: any, transposed: any, output_padding: any, groups: anyc                 O   r   r   r   r   r
   r
   r   convolution_defaultC  s
   

"r   z.self: jt, dim: any?, keepdim: any, dtype: any?c                 O   s^   t | ||dd\}}|d}t| |d d dg|d< t| |jfi |fi t|S )NTry   ru   r   r   r   r   r   r
   r
   r   mean_dimR  s   

"r   c                 O   s   t | ||dd\}}|d}|D ]%}t|tstd| |d  kr*tdt||d js6tdqt|d  d |d	 d
|d	< t| dd |D fi |fi t	|d S )NTry   r   z+stack(): expected all nested tensors inputsr   z9stack(): expected all nested tensors to have the same dimzFstack(): expected all nested tensors to have the same nested structurer   r   stackc                 S   r   r
   r   r   r
   r
   r   r   |  r   z!stack_default.<locals>.<listcomp>)
r   rz   r,   r   r   r   rQ   rS   r   ri   )r?   r@   rA   r{   r|   r   r3   r
   r
   r   stack_defaulta  s0   



r   zQweight: t, indices: jt, padding_idx: any?, scale_grad_by_freq: any?, sparse: any?c                 O   sL   t | ||dd\}}|d}|d}t| ||jfi |fi t|S )NTry   indicesr   r   )r?   r@   rA   r{   r|   r   r   r
   r
   r   embedding_default  s   


r   )xra   r   r-   Ztorch.nested._internal.sdpar   Znested_tensorr   typingZtorch.fx.operator_schemasr   r   ListAny__annotations__r   Dictr   r   r"   strrD   rL   rQ   rT   r]   rb   Zregister_jagged_funcOptionalCallablere   ri   rc   rd   r~   r   r   r   r   r   r   r   r   r   r   Zprimr   r   rO   r   Zis_contiguousr   r   Zlinearr   Zlinear_backwardr   Z_to_copyr   Z	ones_likeZ
zeros_likeZ
randn_likedetachZ_softmaxZnative_dropoutr   Znative_dropout_backwardr   r   Zdim_intr   r6   r.   r   r   r   rn   r   r   r   r   rp   r   matmulr   expandr   r   r   wherer   r   Z_pin_memoryr   	is_pinnedr   Zis_same_sizer   r7   Zdim_IntListr   r   r   viewr   Znative_layer_normr   Znative_layer_norm_backwardr   r   r   r   r   Zconvolutionr   r   r   r   r   Z	embeddingr   r
   r
   r
   r   <module>   sH  
 +
	=





































%













