o
    0hR}                 &   @   s"  U d dl Z d dlZd dlZd dlT d dlmZ d dlZd dlm  mZ	 d dl
mZ d dlmZ ddlmZ g Zee ed< i Zeeef ed	< d,ddZ		
	
d-ddZd.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*ej'j(j0j*gd,d-d. Z1e ej'j2j3j*d,d/d0 Z4e ej'j(j5j*gd,d1d2 Z6e ej'j(j7j*d,d3d4 Z8e ej'j(j7j9d5e8 e ej'j(j:j*d6d7d8 Z;e ej'j(j<j*d9d:d; Z=e ej'j(j>j*d<d=d> Z?e ej'j(j@jAd?d@dA ZBe ej'j(jCj*d,dBdC ZDe ej'j(jEj*dDdEdF ZFe ej'j(jGj*d,e$ e ej'j(jHj*ej'j(jIj*ej'j(jJj*ej'j(jKj*ej'j(jLj*gd,dGdH ZMe ej'j(jNj*dIeM e ej'j(jOj*dJeM e ej'j(jOjPdKeM e ej'j(jQj*d,dLdM ZRe ej'j(jSj*dNdOdP ZTe ej'j(jUj*dQdRdS ZVe ej'j(jWj*dTdUdV ZXe ej'j(jYj*dWdXdY ZZe ej'j(j[j\dZd[d\ Z]e ej'j(j[j*d]d^d_ Z^e ej'j(j_j`d`dadb Zae ej'j(jbj*dcddde Zce ej'j(jdj*dfdgdh Zde ej'j(jej*didjdk Zfe ej'j(jgjhdldmdn Zie ej'j(jjj,dodpdq Zke ej'j(jlj*drdsdt Zme ej'j(jnj*dudvdw Zoe ej'j(jpj*dxdydz Zqe ej'j(jrj*d{d|d} Zse ej'j(jtj*d~dd Zue ej'j(jvj*ddd Zwe ej'j(jxj*ddd Zxe ej'j(jyj*ddd Zye ej'j(jzj{ddd Z|e ej'j(j}j*ddd Z~e ej'j(jj*ddd Ze ej'j(jj*ddd Zdd Ze ej'j(jj*d]dd Ze ej'j(jjddd Ze ej'j(jjhddd Ze ej'j(jj*ddd Ze ej'j(jj*ej'j(jj*gddd Ze ej'j(jj*ddd Ze ej'j(jj*ddd Ze ej'j(jjhddd Ze ej'j(jj`ddd Ze ej'j(jj*de ej'j(jj*ddd Ze ej'j(jj*ddd Ze ej'j(jj,ddd Ze ej'j(jj*d]dd Ze ej'j(jjddd Ze ej'j(jj,ddd Ze ej'j(jjddd Ze ej'j(jj,dddÄ Ze ej'j(jj*ej'j(jj*ej'j(jj*ej'j(jj*gd,ddń Ze ej'j(jj,dddǄ Ze ej'j(jj,dddɄ Ze ej'j(jj*ddd˄ Ze ej'j(jj*ddd̈́ Ze ej'j(jj*dddτ Ze ej'j(jj*dddф Ze ej'j(jj*d҃ddԄ Ze ej'j(jj*duddք Ze ej'j(jj*d׃ddل Ze ej'j(jj*dڃdd܄ Ze ej'j(jj*ej'j(jj*gd,ddބ Ze ej'j(jj*d,dd Ze ej'j(jj*ddd Ze ej'j(jj*ddd Ze ej'j(jj*ddd Ze ej'j(jj*d,dd Ze ej'j(jj*d,dd Ze ej'j(jj*d,dd Ze ej'j(jj*d,dd Ze ej'j(jj*d,dd Ze ej'j(jj*ddd Ze ej'j(jj*ddd Ze ej'j(jj*ddd Ze ej'j(jj*ej'j(jj*ej'j(jj*gddd Ze ej'j(jj*ej'j(jj*ej'j(jj*ej'j(jj*ej'j(jj*ej'j(jj*gd dd Ze ej'j(jjېddd Ze ej'j(jjېddd Ze ej'j(jj`d,dd	 Ze ej'j(jj*d
dd Zd dlmZmZ d dlmZ ee		d/dej`dej`dej`de!dededeeef dededeej`ej`f fddZee		d/dej`dej`dej`dej`dej`dej`dej`dee!ef d edededeeef dededeej`ej`ej`eeej` d!f f fd"d#Ze ej'j(jj*d$d%d& Zejd'd($Z(e(d&ed) e(d&ed* e(d&ed+ W d   dS 1 sw   Y  dS (0      N)*)Optional)normalize_function)#jagged_scaled_dot_product_attention   NestedTensor__all__JAGGED_OPS_TABLEFc                    s   ddl m} t|ttfr$t| fdd|D }t|t|S |r+| |}|dkr3| k s5J |dkr=d S |d S )Nr   canonicalize_dimsc                 3       | ]	}t  |V  qd S N_outer_to_inner_dim.0dndim
ragged_dim N/var/www/vscode/kcb/lib/python3.10/site-packages/torch/nested/_internal/ops.py	<genexpr>       z&_outer_to_inner_dim.<locals>.<genexpr>r   )torch._prims_commonr   
isinstancetuplelisttypedictfromkeys)r   dimr   canonicalizer   outputr   r   r   r      s   
r   Tc                 C   sv   ddl m} || |}||kr|st| d|dkr%|s%t| d|r-t| ||n|}	|r9|dk}
|	|
fS |	S )Nr   r   z0(): not supported for NestedTensor on ragged dimz+(): not supported for NestedTensor on dim=0)r   r   RuntimeErrorr   )r   r"   r   op_nameconvert_to_inner_dimallow_ragged_dimallow_batch_dimr   wrappedretoperating_on_batchr   r   r   _wrap_jagged_dim'   s   	
r-   c           	         s   ddl m  t|ttfsJ dt|  fdd|D }d|v }|v }tfdd|D }ttfdd|D }||||fS )	z
    For NestedTensor operators,
    wraps dimensions to non-negative values,
    and returns metadata related to reduction dimension(s).
    r   r   z<_wrap_jagged_dims(): cannot iterate over dimensions of type c                    s   g | ]} |qS r   r   r   )r   r   r   r   
<listcomp>P   s    
z%_wrap_jagged_dims.<locals>.<listcomp>c                 3   s     | ]}|d ko| kV  qdS )r   Nr   r   )
ragged_idxr   r   r   V       z$_wrap_jagged_dims.<locals>.<genexpr>c                 3   r   r   r   r   )r   r/   r   r   r   Z   r   )	r   r   r   r   r   r   anyr    r!   )	r   dimsr&   r/   wrapped_dimsoperate_on_batchoperate_on_raggedoperate_on_non_batchouter_to_inner_dimr   )r   r   r/   r   _wrap_jagged_dimsD   s    r8   
schema_strreturnc                    s  |  d}dd |D d}t|| }|d dkr"|d d }n't||kr0t|t|ksItd|j d|  d	| d
t| dt| ddd dd dd dd d}t|D ]k\}}	|	 d\}
}|d}|rt|d d n|}|| vrtd| |t|kr|std|j d|  d|
 q\||  |f fdd	}||| sdddddd}td|j d|  d|
 d ||  q\d S )!N, c                 S   s   g | ]}| d qS )?)endswithr   xr   r   r   r.   b       z check_schema.<locals>.<listcomp>T...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 r   )r   torchTensorr   r?   r   r   r   <lambda>q       zcheck_schema.<locals>.<lambda>c                 S   s   t | to| jd u o| jdkS Nr   )r   r   _lengths_ragged_idxrG   r   r   r   rH   r   s   
 
c                 S   s
   t | tS r   r   r   rG   r   r   r   rH   u   s    c                 S      dS )NTr   rG   r   r   r   rH   x       )tjtjt_allr1   z: r<   zUnknown arg type: z) missing required argument: c                    s   |r
| d u p	 | S  | S r   r   )r?   is_optional	_check_fnr   r   check_fn   s   zcheck_schema.<locals>.check_fntensorzoptional tensorz%contiguous jagged layout NestedTensorzjagged layout NestedTensorz
<any type>)rP   zt?rQ   rR   r1   z): expected z	 to be a )	splitcountlen
ValueError__name__	enumerater=   keysAssertionError)r9   funcargskwargsnamed_arg_typesnum_optional_argsmin_argsarg_type_check_fnsinamed_arg_typenamearg_typerS   normalized_arg_typerV   type_to_descr   rT   r   check_schema`   s`   


rm   aa_namebb_namec                 C   s:   |j |j |j |j krtd| j d| d| dd S )NrC   z: expected  and z' to have the same exact offsets tensor.)_sizerL   r%   r\   )r`   rn   ro   rp   rq   r   r   r   check_ragged_dim_same   s
   rt   c                 C   sL   | j d }| jd | }|d | }t|t|ko%tdd t||D S )Nr   c                 s   s$    | ]\}}||kp|d kV  qdS )rA   Nr   )r   nssr   r   r   r         " z%raggedness_matches.<locals>.<genexpr>)rL   rs   rZ   allzip)ntsizeend	nt_raggedsize_raggedr   r   r   raggedness_matches   s   
r   c                 C   sB   |   dkr| jd dkr| d} |   dkr| jd dks| S Nr   r   )r"   shapesqueeze)rP   r   r   r   squeeze_leading_ones   s   
r   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   )rm   )ra   rb   )aten_opr`   r9   r   r   inner   s   z@register_func.<locals>.wrapper.<locals>.get_inner.<locals>.innerr   )r   r   )r`   r9   )r   r   	get_inner   s   z1register_func.<locals>.wrapper.<locals>.get_innerr   )r`   r   r   tableaten_opsr9   tablesr`   r   wrapper   s   zregister_func.<locals>.wrapper)r   r   )r   r   r9   r   r   r   r   register_func   s   

r   c           	      O   s$  t | d }|d ur|S tjj| jv rddlm} |D ]}||r,td| j	 d| qt
dd |D }|dkrzg }| jjD ]}t|jtjrT||j d  n
||j d	 q@|d
 d|}t|| g|R i | tt| S |dkrtd| g|R i | tt| S d S )Nr   is_nested_intrC   z: invalid argument c                 s   s    | ]	}t |tjV  qd S r   )r   rE   rF   r>   r   r   r   r      r   z lookup_jagged.<locals>.<genexpr>r   z: jt_allz: anyrB   r;      zlhs: any, rhs: any, ...)r
   getrE   Tag	pointwisetags%torch.fx.experimental.symbolic_shapesr   r%   r\   sum_schema	argumentsr   r   
TensorTypeappendri   joinrm   	functoolspartialjagged_unary_pointwisejagged_binary_pointwise)	r`   ra   rb   dispatch_funcr   argnum_tensor_argsschema_partscheck_schema_strr   r   r   lookup_jagged   s6   

r   c                 C   s   |   |  | j| jd}|S )Noffsetslengths_metadata_cacherL   r   )r   rb   r   r   r   extract_kwargs  s   r   c                    s>   t dd |D  t|  fdd|D i |fi t S )Nc                 s       | ]
}t |tr|V  qd S r   rM   r   r   r   r   r   r         z)jagged_unary_pointwise.<locals>.<genexpr>c                 3   s"    | ]}| u r|j n|V  qd S r   _valuesr   njtr   r   r     s     nextr   r   r`   ra   rb   r   r   r   r     s   r   c                    sN  |d |d }}t |tst |tsJ d}t |trMt |trMt||jrAt| |j|jg|dd  R i |fi t|S t|| j|j|jt |t}|rXt|nt|}|rb||fn||f\ }|	  	 krtt
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|| j|j|jddlm}  j} j}| jj jd  }d u r|| fddt|jD }|| j j|||d	}|r |fn| f\}
}| |
|g|dd  R i |S t|| j|j|j)
Nr   r   zHcannot call binary pointwise function {} with inputs of shapes {} and {}r   z+NYI: broadcasting NT with T with larger dimnested_from_paddedc                    s"   g | ]\}}| j kr|nqS r   rL   )r   rg   r?   rz   padded_max_Sr   r   r.   ^     " z+jagged_binary_pointwise.<locals>.<listcomp>r   r/   sum_S
min_seqlen
max_seqlen)r   r   r   rs   r   r   r%   formatr\   r"   NotImplementedErrorr   r   nested_tensorr   _maybe_min_seqlen_maybe_max_seqlenrL   expandr]   _offsets)r`   ra   rb   rn   rp   mismatch_error_msga_is_ntextracted_kwargsrP   
t_squeezedlhsrhsr   r   r   total_Lt_as_ntr   r   r   r   $  s^   "
,
 r   c                 O   s  | t jjju rt|i |S | jdkr)| |d jg|dd  R i | |d S | jdkrddd}t|||dd	\}}|d
}t	|
 |d |jddd}t	|
 |d |jddd}||krd|S ttj|j||d  }	g |jd | |	|j|d d  R }
|j|
 S | jdkrddd}t|||dd	\}}|d
}|d}|
 |j d }t||krtdt j  | |i |W  d    S 1 sw   Y  t| )Napply_r   r   flattenrA   c                 S      d S r   r   )input	start_dimend_dimr   r   r   _flatten_sig     z+jagged_torch_function.<locals>._flatten_sigTra   rb   normalize_to_only_use_kwargsr   r   F)r'   r   rms_normc                 S   r   r   r   )r   normalized_shapeweightepsr   r   r   _rms_norm_sig  r   z,jagged_torch_function.<locals>._rms_norm_sigr   zNrms_norm(): Normalization over the ragged dim not supported for nested tensors)r   rA   NN)rE   _C_nnscaled_dot_product_attentionr   r\   r   r   popr-   r"   rL   r   reduceoperatormulr   reshaperZ   r[   DisableTorchFunctionSubclassr   )r`   ra   rb   r   _
new_kwargsinpr   r   product	new_shaper   r   max_normalizabler   r   r   jagged_torch_functionr  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t jjj
jfv rW|d jd urPtt|d jt|d jdd   S |d j
 S | t jjjjkrd|d jS | t jjjjkrs|d j S d S )NFr   r   )rE   opsatenis_non_overlapping_and_densedefaultsym_sizers   r"   rZ   	sym_numelnumelrK   intr   mathprodr   
sym_stride_stridessym_storage_offsetstorage_offsetr   r   r   r   tensor_attr_supported_getter  s   
*
r   c                 O   s   t jS r   )rE   jaggedr   r   r   r   prim_layout_default  s   r   c                 O   s   | t jjjjkrtdd S )NznNestedTensor does not support directly calling torch.ops.aten.size; please use `nested_tensor.size()` instead.)rE   r   r   r{   r   r%   r   r   r   r   tensor_attr_unsupported_getter  s
   r   c                 O   sp   ddl m} t| ||dd\}}|d}| d urdS |dtj|d< |d tjkr/dS ||j	fi |S )Nr   )is_contiguous_for_memory_formatTr   r   Fmemory_format)
r   r   r   r   r   r   rE   contiguous_formatpreserve_formatr   )r`   ra   rb   r   r   r   r   r   r   r   is_contiguous_general  s   

r  z!self: jt_all, memory_format: any?z"input: jt_all, memory_format: any?c           	      O   s   t | ||dd\}}|d}t|}|jd ur:|d tjkr:ddlm} |jdks.J d||	 d d\}}|S t
| |jfi |fi |S )	NTr   r   r  r   )jagged_from_listz;NJT with ragged_idx != 1 not supported for contiguous clone)r   )r   r   r   rK   rE   r  r   r  rL   unbindr   r   )	r`   ra   rb   r   r   r   new_metar  contigr   r   r   clone_default  s   


r	  zinput: jt, weight: t, bias: t?c                 O   @   t | ||dd\}}|d}t| |jfi |fi t|S NTr   r   r   r   r   r   r   r`   ra   rb   r   r   r   r   r   r   linear_default#  
   

"r  z6self: jt, grad_output: jt, weight: t, output_mask: anyc                 O   s  t | ||dd\}}|d}|d}|d}|d}d\}	}
}t| |d|d |d	 r>tt|j|fi t|}	|d
 r^|jd|	d	}|jd|	d
}t|
 |}
|d rtt|jjd
 }|dkrv|j }n	tj|j|dd}|	|
|fS )NTr   r   grad_outputr   output_mask)NNNselfr   r   rA   r   r   F)keepdim)r   r   rt   r   rE   matmulr   r   r   r{   rP   r   ranger   cloner   )r`   ra   rb   r   r   r   r  r   r  dsdwdbgrad_2dinput_2dreduce_dimsr   r   r   linear_backward_default.  s2   






r  zinput: jt_all, dtype: anyc                 O   r
  r  r  r  r   r   r   to_dtypeW  r  r  c                 O   s  ddl m} t| ||dd\}}|d}|d | |jfi |}|jj|jd}d }	|jd ur:|jj|jd}	dd	l	m
}
 dd
lm}m} |jd u rP|jn|j}|	d u rY|n|	}t||
|fro||}||}|j|_n|| ||< t|}||d< |	|d< t|fi |}|S )Nr   _tensor_symint_registryTr   r   layoutdevicer   
FakeTensorFunctionalTensormb_unwrap_functional_tensorr   r   )r   r   r   r   r   r   tor#  rK   torch._subclasses.fake_tensorr%  #torch._subclasses.functional_tensorr'  r(  r   nested_int_memor   r   )r`   ra   rb   r   r   r   r   
new_valuesnew_offsetsnew_lengthsr%  r'  r(  ragged_source	new_thingtgtsrc
inp_kwargsr$   r   r   r   to_copy_defaultb  s2   




r5  z-self: jt_all, src: jt_all, non_blocking: any?c                 O   s   t | ||dd\}}|d}|d}|j|jkrO| }dd |D }| }	dd |	D }
||
kr@td|j d	|j t||	D ]	\}}|| qE|j|j |S )
NTr   r   r3  c                 S      g | ]}|j qS r   r   r   cr   r   r   r.         z copy_default.<locals>.<listcomp>c                 S   r6  r   r7  r8  r   r   r   r.     r:  z<copy_(): expected compatible input and src shapes, but got: rr   )	r   r   rs   r  r%   r   ry   copy_r   )r`   ra   rb   r   r   r   r3  	inp_compsinp_comp_shapes	src_compssrc_comp_shapesinp_compsrc_compr   r   r   copy_default  s,   


rB  c                 O   s.  t | ||dd\}}|d}tj|d< | |jfi |}|jj|jd}d }|jd ur4|jj|jd}t	|}	d|	v r@||	d< d|	v rH||	d< |j|jkrdd	l
m}
 dd
lm}m} ddlm} |jd u rj|jn|j}|d u rs|n|}t||
|fr||}||}|j|_n|| ||< t|fi |	S )NTr   r   r!  r"  r   r   r   r$  r&  r   r  )r   r   rE   stridedr   r   r)  r#  rK   r   r*  r%  r+  r'  r(  r   r   r   r,  r   )r`   ra   rb   r   r   r   r-  r.  r/  output_kwargsr%  r'  r(  r   r0  r1  r2  r3  r   r   r   like_factory_default  s6   




rE  zself: jt_all, fill_value: anyzself: jt_all, high: anyz!self: jt_all, low: any, high: anyc                 O   s,   t | ||dd\}}|d}| |j |S r  r   r   r   r  r   r   r   zero__default  s   


rG  z*self: jt_all, dim: any, half_to_float: anyc                 O   sZ  t | ||dd\}}t|d trtd|d}t| |d fd|j\|d< }}}|r3td|r>|jdkr>td	|rI|jd urItd
|d d |d< |rt	j
jjt	jjj|j|jjd d|jg|jgtdd|jd}	t	jjj|	|jg|jjd djdg|jjdd  R  }
t|
fi t|S t| |jfi |fi t|S )NTr   r"   zHsoftmax(): not supported for dimensions of type 'tuple' for NestedTensorr   softmaxzRsoftmax(): not supported when reducing across the batch dimension for NestedTensorr   zesoftmax(): not supported when reducing along the ragged dimension for ragged_idx > 1 for NestedTensorzksoftmax(): not supported where lengths is not None if reducing across the ragged dimension for NestedTensorr   rA   z-inf)max_lengthspadding_valuer"   r   )r   r   r   r%   r   r8   r"   rL   rK   rE   nn
functionalrH  r   r   _jagged_to_padded_dense_forwardr   r   r   r   _max_seqlenfloat_padded_dense_to_jagged_forwardr   r   )r`   ra   rb   r   r   r   reduce_on_batchreduce_on_ragged_reduce_on_non_batchpadded_softmax_valuessoftmax_valuesr   r   r   _softmax_default  sx   


"rX  z7grad_output: jt, output: jt, dim: any, input_dtype: anyc                 O   N   t | ||dd\}}|d}|d}t| |j|jfi |fi t|S )NTr   r  r$   r  )r`   ra   rb   r   r   grad_outr$   r   r   r   _softmax_backwardL  s   


r[  z!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 r  r   r   r   r   r   )r`   ra   rb   r   r   r   out1out2r   r   r   native_dropout_default[  s   

r_  z%grad_output: jt, mask: jt, scale: anyc                 O   rY  )NTr   r  maskr  )r`   ra   rb   r   r   r  r`  r   r   r   native_dropout_backward_defaultk  s   


ra  z2self: jt_all, dim: any, keepdim: any?, dtype: any?c                 O      t | ddg|R i |S )Nr   r   _apply_reductionr   r   r   r   prod_dim_int{     re  zself: jt_all, dtype: any?c                 O   0   t | ||dd\}}|d}| |jfi |S r  rF  r  r   r   r   prod_default  
   

rh  z$self: jt, split_size: any, dim: any?c                    s^   t | ||dd\}}|d t  |d  jd|d< t fdd|  jfi |D S )NTr   r   r"   rX   c                 3   s&    | ]}t dd |it V  qdS )valuesNr   r   r   r>   r   r   r   r     s
    
zsplit_tensor.<locals>.<genexpr>)r   r   r-   r"   rL   r   r   r`   ra   rb   r   r   r   rl  r   split_tensor  s   

rn  z%self: jt, split_sizes: any, dim: any?c                    sZ   t | ||dd\}}|d t  |d  jd|d<  fdd|  jfi |D S )NTr   r   r"   split_with_sizesc                    "   g | ]}t dd |it qS rj  r   rk  r>   rl  r   r   r.         z,split_with_sizes_default.<locals>.<listcomp>)r   r   r-   r"   rL   r   rm  r   rl  r   split_with_sizes_default  s   


rs  z+self: jt, dim: any, start: any, length: anyc                 O   sd   t | ||dd\}}|d}t| |d |jd}| |j||d |d d}t|fi t|S )	NTr   r   r"   narrowstartlengthr"   ru  rv  )r   r   r-   r"   rL   r   r   r   )r`   ra   rb   r   r   r   r"   rj  r   r   r   rt    s   

rt  z self: jt, chunks: any, dim: any?c                    s   t | ||dd\}}|dt |d jddd\|d< }|rd|d }j }||}dd	 |D }	d
d	 |	D }	fdd	|	D dd	 |D }
j	|
  fdd	t
dt D S fdd	| jfi |D S )NTr   r   r"   chunkr)   chunksc                 S   s   g | ]	}t j|d dqS )r   rK  )rE   cumsumr>   r   r   r   r.     s    z!chunk_default.<locals>.<listcomp>c                 S   s   g | ]
}t j|d ddqS )r   r   r   )value)Fpadr>   r   r   r   r.     s    c                    s   g | ]}| j d qS ))r   rL   r   )r   per_offsetsrl  r   r   r.     s    
c                 S   s   g | ]}|   qS r   )r   itemr>   r   r   r   r.     rI   c                    s&   g | ]}t dd  | i| qS rq  r   r   rg   )chunk_valuesnested_kwargsr   r   r.     s    r   c                    rp  rq  rk  r>   rl  r   r   r.     rr  )r   r   r-   r"   rL   r   diffrx  r   rX   r  rZ   )r`   ra   rb   r   r   r,   rz  r   chunked_lengthschunked_offsetssplit_sizesr   )r  r   r  r   chunk_default  s0   





r  zself: jt_all, dim: any?c           
         s   t | ||dd\}}|d }|dkrtd|d}| | }| }|jddtt dt	tt  ffd	d
}	|d u rU|
   |	  tj d dS dkr]td|  | |	   fddt|jd D S )NTr   r"   r   z2unbind(): only supported for NestedTensor on dim=0r   rK   r   c                    s   d}j  d  }tt| D ],}t| |  t| | |k || | 7 }|d ur;t|| | |  |kdd  qt||k |d ur`tt|D ]}t||  t|| |k qMd S d S )Nr   r   c                   S   rN   )NzMunbind(): nested tensor offsets and lengths do not match ragged_idx dimensionr   r   r   r   r   rH     rO   z2unbind_int.<locals>._torch_check.<locals>.<lambda>)r   r  rZ   rE   _check_is_size_check)rK   r   lengths_sumragged_dim_sizerg   )r/   rj  r   r   _torch_check  s&   
z unbind_int.<locals>._torch_checkr   rK  zAunbind(): nested tensor ragged_idx out of bounds (should be >= 1)c                    s*   g | ]}t jd  |  | dqS )r   rw  )rE   rt  r  lengths_scalarsoffsets_scalarsr/   rj  r   r   r.   1  s    zunbind_int.<locals>.<listcomp>r   )r   r%   r   rj  r   r   rL   r   r   r   r  tolistrE   rX   r  r   )
r`   ra   rb   r   r   r"   r   r   r   r  r   r  r   
unbind_int  s4   

&
r  zself: jt, dim: anyc                 O   sb   t | ||dd\}}|d}|j}tt|j|d |jd|d< t| |fi |fi t|S )NTr   r   r"   r   )	r   r   r   r-   rZ   rs   rL   r   r   )r`   ra   rb   r   r   r   rj  r   r   r   squeeze_dim<  s   

 r  zself: jt_all, dim: anyc           	      O   s   t | ||dd\}}|d}|j}|d }tt|jd ||jddd|d< t|}|d |jd kr<|d  d7  < t| |fi |fi |S )	NTr   r   r"   r   	unsqueeze)r(   rL   )	r   r   r   r-   rZ   rs   rL   r   r   )	r`   ra   rb   r   r   r   rj  r"   rD  r   r   r   unsqueeze_defaultK  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| jd	|d< t| d
d |D fi |fi t|d S )NTr   tensorsc                 S   s   g | ]}|j r|qS r   )	is_nestedr   rP   r   r   r   r.   k  r@   zcat_default.<locals>.<listcomp>r   c                    s    g | ]}|j r	|n| qS r   )r  	expand_asr  firstr   r   r.   n  s     r"   catc                 S   r6  r   r   r  r   r   r   r.   w  r:  )r   r   rZ   r-   r   rL   r   r   )r`   ra   rb   r   r   r  nestedr"   r   r  r   cat_defaultb  s"   


r  zself: any, other: anyc           	         s(  t  ||dd\}}|d}|d} fdd} fdd}|jrl|jsl| d	krB| | krB|j| d
 k rB|||S | dkrk| | krk|j| d
 k rkt |j|fi |fi t|S n|js|jr| d	kr| | kr|jdkr|||S | dkr| | kr|jdkrt ||jfi |fi t|S nX|jr|jr| d	kr| d	krt||j	rt |j|jfi t|S | d	kr| d	kr|jdkr|jd
kr|
|j|
|jkrt|||S td|j	 d|j )NTr   r   otherc                    s     fddt |  | D S )Nc                    s   g | ]	\}} ||qS r   r   )r   a_compb_compr   r   r   r.     s    z8matmul_default.<locals>._unbind_impl.<locals>.<listcomp>)ry   r  )rn   rp   r   r   r   _unbind_impl  s   
z$matmul_default.<locals>._unbind_implc                    s   | j r| }n|}ddlm} |j}|j}|}|jj|jd  }|d u r%|}g |jd |j ||j|jd d  R }|jd|d}	| j rL |	|}
n | |	}
||
|j	|j|||dS )Nr   r           output_sizer   )
r  r   r   r   r   r   r   rL   to_padded_tensorr   )rn   rp   rz   r   r   r   r   r   padded_shape	padded_ntpadded_tr   r   r   _padded_impl  s:   
z$matmul_default.<locals>._padded_impl   r   r   z1matmul(): not supported between inputs of shapes rr   )r   r   r  r"   rL   r   r   r   r   rs   r{   rE   stackr%   r   )	r`   ra   rb   r   r   r   r  r  r  r   r   r   matmul_default{  sV   


%
&
&$r  zself: jt_all, mat2: anyc                 O   sd   t | ||dd\}}|d}|d}| dkrtd| dkr(tdttjjjj	||S )NTr   r   mat2r  zbmm(): input must be 3Dzbmm(): mat2 must be 3D)
r   r   r"   r[   r  rE   r   r   r  r   r`   ra   rb   r   r   r   r  r   r   r   bmm_default  s   


r  z'self: jt_all, size: any, implicit: any?c                    s   t | ||dd\}}|d |d d|vs|drJ t s.td j d  fdd	td
  D }t|  j|fi t	 S )NTr   r   r{   implicitzexpand(): cannot expand shape z -> c                    s"   g | ]}| j krd n| qS )rA   r   r   r   r{   r   r   r.   	  r   z"expand_default.<locals>.<listcomp>r   )
r   r   r   r%   rs   r  r"   r   r   r   )r`   ra   rb   r   r   
expand_argr   r  r   expand_default  s   

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


r  zself: jt_all, size: anyc                 O   sl   t | ||dd\}}|d}|d}t|| kr2|g dd t| t| D |S td)NTr   r   r{   c                 s   s    | ]}d V  qdS )r   Nr   )r   r   r   r   r   r   #  s    zbroadcast_to.<locals>.<genexpr>zwbroadcast_to(): broadcasting to a higher-dim shape is currently not supported for nested tensors with the jagged layout)r   r   rZ   r"   r   r  r[   )r`   ra   rb   r   r   r   r{   r   r   r   broadcast_to  s   


,r  ztensors: anyc           
      O   s   t | ||dd\}}|d}t|dkrtdt|dkr#|d S g }tjdd |D  }td	d |D }|D ],}	|	jrH||		| q:|	
 t|k rc|t|		|jjfi t| q:td
t|S )NTr   r  r   z7broadcast_tensors(): expected at least one tensor inputr   c                 s   s    | ]}|j V  qd S r   r7  r  r   r   r   r   8  s    z$broadcast_tensors.<locals>.<genexpr>c                 s   r   r   rM   r  r   r   r   r   :  r   zubroadcast_tensors(): broadcasting nested tensors with dense tensors of equal or higher dim is not currently supported)r   r   rZ   r[   rE   broadcast_shapesr   r  r   r  r"   r   r   r   r   r   )
r`   ra   rb   r   r   r  outsbroadcast_shaper   rP   r   r   r   broadcast_tensors+  s,   

r  z(condition: jt_all, self: any, other: anyc                 O   sp   t | ||dd\}}|d}|d}|d}t|||\}}}t| |j|j|jfi |fi t|S )NTr   	conditionr   r  )r   r   rE   r  r   r   r   )r`   ra   rb   r   r   r  r   r  r   r   r   
where_selfK  s   



r  zself: jt, device: any?c                 O   r
  r  r  r  r   r   r   _pin_memory_default`  r  r  c                 O   rg  r  rF  r  r   r   r   is_pinned_defaultk  ri  r  zself: jt_all, other: jt_allc                 O   s   |d j |d j kS r   )rs   r   r   r   r   is_same_size_defaultv  s   r  c                    sD  t | ||dd\}}|d |d d u p%t|d ttfo%t|d dk}|rU|  jfi |}|ddrSt|ttfrMt| fdd	|D }|S |	 j
}|S |d }	t|d ttf}
|
sg|	g}	t  |	|  j
\}}}}|
s||d }||d< |r jd urt| d
ddlm} |r|r|  jfi |}|ddr|dd |}|S |rt| d|d |
rĈ j
gn j
}|  |fd|i|S |rt| d|  jfi |}t |ddst|d ttfr|d n|d g}|D ]}| j
d k rd  d8  < q|fdd|S )NTr   r   r"   r   r  Fc                 3   s    | ]	}|  jV  qd S r   )r  rL   )r   orl  r   r   r     r   z#_apply_reduction.<locals>.<genexpr>zf(): reducing across the ragged dimension is not supported for non-contiguous nested tensors with holes)tree_mapc                 S   s
   |  dS )Nr   )r  r  r   r   r   rH     s   
 z"_apply_reduction.<locals>.<lambda>zW(): reducing along a ragged and non-batch dimension is not supported for nested tensorszg(): reducing along the batch dimension but not the ragged dimension is not supported for nested tensorsr   rL   c                    s   t | fi  S r   r   r  )
out_kwargsr   r   rH     s    )r   r   r   r   r   rZ   r   r   r   r  rL   r8   r"   rK   r%   torch.utils._pytreer  r  r   )r`   	func_nameidentity_elementra   rb   r   r   full_reductionoutdim_to_convert
is_dimlistconverted_dimrS  rT  reduce_on_non_batchr  dim_to_passdimlistr   r   )r   r  r   rd  }  s   

 

rd  c                 O   rg  r  rF  r  r   r   r   sum_default  ri  r  z3self: jt_all, dim: any?, keepdim: any?, dtype: any?c                 O   rb  )Nr   r   rc  r   r   r   r   sum_dim_IntList  rf  r  z"self: jt_all, dim0: any, dim1: anyc                 O   s.  t | ||dd\}}ddlm} |d}|| |d |d f\}}||jks.||jkrj|dks6|dkr:td||jkrB|}	n|}	t|}
|	|
d	< t|	 
tt|j||jtt|j||jfi |
S t| |d |jd
|d< t| |d |jd
|d< t| |jfi |fi t|S )NTr   r   r   r   dim0dim1z?Transpose is not supported on the batch dimension for jagged NTrL   	transpose)r   r   r   r   r"   rL   r[   r   r   rj  r  r   rZ   rs   r-   r   )r`   ra   rb   r   r   r   r   r  r  to_dimr4  r   r   r   transpose_int  s>   


"r  zself: jt_all, dims: anyc           
         s  t | ||dd\}}|d |d}t }t jt|kr3td ddt| d d	d
lm} ||}t|tt|krLtd j	d urUtd|d	 d	kr_td|
 j|d<  fdd|dd  D }	|	|d< t|  jfi |fi |S )NTr   r   r2   z5permute(): number of dimensions in the tensor input (z) zAdoes not match the length of the desired ordering of dimensions ().r   r   z*permute(): duplicate dims are not allowed.zBpermute(): not supported on jagged layout nested tensor with holesz=Permute is not supported on the batch dimension for jagged NTrL   c                    s   g | ]	}t | jqS r   )r   rL   )r   r"   r   inp_dimr   r   r.   H  s    z#permute_default.<locals>.<listcomp>r   )r   r   r   rZ   rs   r[   r   r   setrK   indexrL   r   r   )
r`   ra   rb   r   r   r2   r4  r   canonicalized_dims
inner_dimsr   r  r   permute_default'  s>   







r  c                    s  t | ||dd\}}|d|djdkr.tjtkr.tdj d dtd	k s9tsDtd
j d fdd  fddttd D }t	
  t| j|fi tW  d    S 1 szw   Y  d S )NTr   r   r{   r   zVview(): does not support ragged_idx != 1 except when inp._size == size. inp._size is (z) and size is (r  r  zview(): cannot view shape z as c                    s&   |  j d kr j| S | d  S rJ   )rL   r   r{   )	inner_idxr  r   r   get_inner_sizet  s   z$view_default.<locals>.get_inner_sizec                    s   g | ]} |qS r   r   r  )r  r   r   r.   {  s    z view_default.<locals>.<listcomp>)r   r   rL   r   rs   r%   rZ   r   r  rE   inference_modeis_inferencer   r   r   )r`   ra   rb   r   r   
inner_sizer   )r  r   r{   r   view_defaultP  s(   


$r  zHinput: jt_all, normalized_shape: any, weight: any?, bias: any?, eps: anyc                 O   s  t | ||dd\}}|d}| dkrtd|d }|j|j }| t| }|dkr3td||v r@|jd ur@td	||v rtj	j
j|jj|jd
|jg|jgd}	tj	j
jtj|jjd df|j|jd|jg|jgd|	j}
|j dd|	jd  }tj|	ddd| }|	| |
 }tjt|ddd| }t||d  }|| }tj	j
j||jg|jjd dd|j|jd d  }t|fi t|||fS | |jfi |\}}}t|fi t|||fS )NTr   r   r   zOlayer_norm(): not supported for NestedTensor objects with 2 or fewer dimensionsr   r   zVlayer_norm(): not supported when normalizing over the batch dimension for NestedTensorzklayer_norm(): not supported where lengths is not None if operating on the ragged dimension for NestedTensorr   )rI  r   )r#  dtype)r   r   )r"   r  r   rL  rA   )r   r   r"   r%   r   rL   rZ   rK   rE   r   r   rO  r   r   r   rP  onesr#  r  r   r  r  r   squaresqrtrR  	unflattenr   r   )r`   ra   rb   r   r   r   r   ragged_sizenum_dims_not_normalizedpadded_inputpadded_maskragged_lengthsmeanpadded_normalizedvariancestdpadded_layer_normjagged_layer_norm_valuesr$   r   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 )NTr   rZ  r   r\  )
r`   ra   rb   r   r   rZ  r   d_inputd_gammad_betar   r   r   "native_layer_norm_backward_default  s   



r  z"self: jt_all, dim: any, index: anyc                 O   s   t | ||dd\}}|d}t| |d |jddd\|d< }|r+| |d  S |jd ur4tdt|}|d |jd	 k rI|d
  d	8  < t	| |j
fi |fi |S )NTr   r   r"   selectry  r  zSselect(): not yet supported on dim != 0 for non-contiguous nested tensor with holesr   rL   )r   r   r-   r"   rL   r  rK   r[   r   r   r   )r`   ra   rb   r   r   r   r,   r  r   r   r   
select_int  s"   


r  z7self: jt, dim: any?, start: any?, end: any?, step: any?c                 O   s\   t | ||dd\}}|d}t| |d |jd|d< t| |jfi |fi t|S )NTr   r   r"   slice)r   r   r-   r"   rL   r   r   r   r  r   r   r   slice_tensor  s   

"r  z8input: jt_all, indices: any, values: t, accumulate: any?c                 O   s  t | ||dd\}}|d}|d}t|| ksJ t||jd k r| s/tdddlm} |j	}|j
}	|	}
|jj|jd  }|
d u rL|}
g |jd |j |
|j|jd d  R }|jd|d	}|| ||fi ||j|j|||	d
}| tjjjjkr|j|  |S |S | d u r|  }n| }tt||j |k d | |d  ||j  }|d|j |g ||jd d   }| tjjjjkr| |j|fi ||_|S t| |j|fi |fi t|S )NTr   r   indicesr   z[index_put(): If ragged dimension is not part of indices, this only works on contiguous NJTsr   r  r  r   z7Some indices in the ragged dimension are out of bounds!r   )r   r   rZ   r"   rL   is_contiguousr%   r   r   r   r   r   r   r  r   rE   r   r   
index_put_r   r;  rj  r   r   r  _assert_asyncrx   r   r   )r`   ra   rb   r   r   r   r  r   r   r   r   r   r  
padded_inpnew_njtr   ragged_indicesfunc_indicesr   r   r   r  '  sx   	


		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_default  s
   

"r  c                 O   s   t | ||dd\}}|d }t| |d d|j\}}}}|rg|sg|r&J |d }	d|d< ttjjjj	ddfi |}
|j
d urD|j
n|j }t|
 d D ]}|d	}qQ|
| }|	se||j}|S d
}t| d|fi |S )NTr   r   r"   r  r  r   r   rA   gzG?)r   r8   r"   rL   rd  rE   r   r   r   dim_IntListrK   r   r  r  r  r   )r`   ra   rb   r   r   r   rS  rT  r  r  intermediate_sumr   r  intermediate_valuer   r   r   mean_dim  s8   
r  c                 O   rg  r  rF  r  r   r   r   mean_default  ri  r  z&self: jt_all, dim: any?, keepdim: any?c                 O   rb  )Nr1   Frc  r   r   r   r   any_dims     r  z%self: jt_all, dim: any, keepdim: any?c                 O   :   t | ||dd\}}|d g|d< ttjjjjfi |S NTr   r"   )r   r  rE   r   r   r1   r2   rm  r   r   r   any_dim  
   
r  c                 O   rb  )Nrx   Trc  r   r   r   r   all_dims  r  r  c                 O   r  r  )r   r  rE   r   r   rx   r2   rm  r   r   r   all_dim  r  r  c                 O   rg  r  rF  r  r   r   r   all_any_max_min_default  s
   


r  c                 O   @   t | ||dd\}}t|d jj}t| d|g|R i |S )NTr   r   minr   rE   finfor  maxrd  r`   ra   rb   r   r   	dtype_maxr   r   r   min_dim  
   
r  c                 O   r  )NTr   r   r  r   rE   r  r  r  rd  r`   ra   rb   r   r   	dtype_minr   r   r   max_dim  r  r"  c                 O   r  )NTr   r   aminr  r  r   r   r   amin_default  
   
r$  c                 O   r  )NTr   r   amaxr  r   r   r   r   amax_default  r%  r'  c                 O   r  )NTr   r   argminr  r  r   r   r   argmin_default%  r%  r)  c                 O   r  )NTr   r   argmaxr  r   r   r   r   argmax_default1  r%  r+  zAgrad: jt_all, dim: any, indices: jt_all, sizes: any, keepdim: anyc           
         s   ddl m  t| ||dd\}}|d}|j|d< |d}|j|d< t fddt|d	 D }tt|d	 |d
 |d|d
< |d	}|j	|j
d ||< |dd  }||d	< t|}	||	d< t| di |fi |	S )Nr   r   Tr   gradr  c                 3   s     | ]\}} |r|V  qd S r   r   )r   rg   rv   r   r   r   r   M  r0   z=value_selecting_reduction_backward_default.<locals>.<genexpr>sizesr"   "value_selecting_reduction_backwardr   rL   r   )r   r   r   r   r   r   r]   r-   rZ   r{   rL   r   r   )
r`   ra   rb   r   r   r,  r  r/   r-  rD  r   r   r   *value_selecting_reduction_backward_default=  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 j	d
|d	< t| dd |D fi |fi t
|d S )NTr   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"   r  c                 S   r6  r   r   r  r   r   r   r.   |  r:  z!stack_default.<locals>.<listcomp>)r   r   r   r   r%   r"   r   r   r-   rL   r   )r`   ra   rb   r   r   r  rP   r   r   r   stack_defaulta  s0   



r0  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 )NTr   r  r   r  )r`   ra   rb   r   r   r  r   r   r   r   embedding_default  s   


r1  zYgrad_output: jt, indices: jt, num_weights: any, padding_idx: any, scale_grad_by_freq: anyc                 O   s>   t | ||dd\}}|d}|d}| |j|jfi |S )NTr   r  r  rF  )r`   ra   rb   r   r   r  r  r   r   r    embedding_dense_backward_default  s   


r2  c                 O   s(   t | ||dd\}}|d}|j S r  )r   r   r   detachr  r   r   r   values_default  s
   


r4  c                 O   s(   t | ||dd\}}|d}| |jS r  rF  r  r   r   r   all_default  s
   


r5  z-self: jt_all, padding: any, output_size: any?c                 O   sl  t | ||dd\}}|d}|jd urtd|d }|d ur&||j }n|jd ur.|jn|jd}|	 }|jdkrF|
|jd d}|j}	| dkrV|jdd	}n| dkra|d
}|jtju }
|
rr|jrr|tj}tjj||jg|g|d }|
r|jr|tj}t|	dkr|d
|	dd  }nt|	dkr|d
}|jdkr|
|jd}|S )NTr   r   z?to_padded_tensor(): not supported for nested tensors with holesr  r   r   r   r  rA   padding)r   r   rK   r%   rL   _max_seqlen_tensorrP  r   r{   rj  r  r   r"   r   r  r  rE   boolis_cudar)  halfr   r   rO  r   rZ   r  r   )r`   ra   rb   r   r   r   r  max_seq_lenrj  values_shapeis_bool
padded_outr   r   r   to_padded_tensor_default  sR   










r?  zcpadded: t, offsets: t, dummy: jt, ragged_idx: any?, min_seqlen: any?, max_seqlen: any?, sum_S: any?c                 O   s`  t | ||dd\}}|d |d }}|dd}|dkr#||d}|j}| dkr3|jdd	}n| dk r>|d
}|jtj	u }	|	rO|j
rO|tj}tjj||g|d }
|	rf|
j
rf|
tj	}
t|dkrw|
d
|dd  }
nt|dk r|
d
}
|dkr|
|d d}
|d }|d }i }|d ur||d< |d ur||d< t|
|||dS )NTr   paddedr   r/   r   r  r   r  rA   r   r   r   r   )rL   r   )r   r   r  r   r"   r   r  r  rE   r8  r9  r)  r:  r   r   rR  rZ   r  r   r   )r`   ra   rb   r   r   r@  r   r/   padded_ragged_dim1_shaper=  rj  r   r   metadata_cacher   r   r   "_nested_from_padded_tensor_default  sN   




rC  zcvalues: t, offsets: t, dummy: jt_all, lengths: t?, ragged_idx: any?, min_seqlen: t?, max_seqlen: t?c                 O   s~   t | ||dd\}}|d |d |d }}}|d }|d }	|d }
i }|	d ur.|	|d< |
d ur6|
|d< t|||||d	S )
NTr   r   r   r   r/   r   r   )r   rL   r   )r   r   )r`   ra   rb   r   r   rj  r   r   r/   r   r   rB  r   r   r    _nested_view_from_jagged_default6	  s,   

rD  c                 O   $   t | ||dd\}}|d}|jS r  )r   r   r   r  r   r   r   _nested_get_offsetsV	  
   

rF  c                 O   rE  r  )r   r   rK   r  r   r   r   _nested_get_lengths`	  rG  rH  c                 O   rE  r  )r   r   rL   r  r   r   r   _nested_get_ragged_idxj	  rG  rI  c                 O   ,   t | ||dd\}}|d}|jdd S )NTr   r   r   r   r   r   r   r  r   r   r   _nested_get_min_seqlent	  
   

rL  c                 O   rJ  )NTr   r   r   rK  r  r   r   r   _nested_get_max_seqlen~	  rM  rN  zself: jt, mask: anyc           	      O   s   t | ||dd\}}|d}|d}|jdkrtd|j|jkr/td|j d|j |j| }t	| j
d	d
d}t|}||j |d< tdd|i|S )NTr   r   r`  r   z3masked_select only support 2-D selections currentlyzMask with shape z& is not compatible with input's shape r   rK  r|  r   rj  r   )r   r   r   r%   r   r   masked_selectrj  r~  r  r{  r   r   r   )	r`   ra   rb   r   r   r   r`  
res_valuesmask_cumsumr   r   r   masked_select_default	  s(   



rR  z2grad_output: t, self: jt_all, dim: any, index: anyc                 O   sV   t | ||dd\}}|d}|d}tj||jd}||d |d | |S )NTr   r   r  )r  r"   r  )r   r   rE   
zeros_liker  r  r;  )r`   ra   rb   r   r   r   r  
grad_inputr   r   r   _nested_select_backward_default	  s   


rU  zself: jt_all, s: anyc                 O   sF   |d }|d }| |j | | |j| |jd ur!| |j| d S d S r   )r   r   rK   )r`   ra   rb   r   streamr   r   r   record_stream_default	  s   
rW  zRself: jt_all, size: any, dtype: any?, layout: any?, device: any?, pin_memory: any?c                 O   sH   t | ||dd\}}|d}t|d dkr | |jfi |S td)NTr   r   r{   r   z2new_empty() not supported for NJT with shape != ())r   r   rZ   r   r%   r  r   r   r   new_empty_default	  s   	

rX  zself: jt_all, ...c                 O   s:   t dd |D }t| dd |D i |fi t|S )Nc                 s   r   r   rM   r   r   r   r   r   	  r   z&activation_backward.<locals>.<genexpr>c                 s   s$    | ]}t |tr|jn|V  qd S r   )r   r   r   r   r   r   r   r   	  rw   r   )r`   ra   rb   r  r   r   r   activation_backward	  s   rY  zself: jt_all, value: anyc                 O   r
  r  r  r  r   r   r   fill_Scalar	  r  rZ  c                 O   s4   t | ||dd\}}|d}| |jfi | |S r  rF  r  r   r   r   fill__Scalar	  s   

r[  c           	      O   sT   t | ||dd\}}|d}t|}| |j\}}t|fi |t|fi |fS r  )r   r   r   r   r   )	r`   ra   rb   r   r   r   rD  mantissaexponentr   r   r   frexp_Tensor
  s   

r^  z+grad: any, self: any, other: any, mask: anyc                 O   s   t | ||dd\}}|d}|d}|d}|d}|d u r$dS d }	|d r4t||d	d
}	d }
|d rDt|d	d
|}
|	|
fS )NTr   r,  r   r  r`  r   r   rA   r   )r   r   rE   r  r  )r`   ra   rb   r   r   r,  r   r  grad_input_mask	grad_self
grad_otherr   r   r   matmul_backward_default
  s    




rc  )flex_attentionflex_attention_backward)GraphModuler   querykeyr}  	score_mod
block_maskscalekernel_optionsscore_mod_other_buffersmask_mod_other_buffersc	                 C   s   |   dkr|  dkr|  dksJ tdd || D r#tdt|  d| d| d||||||d	}	tjj|	d 	dd
d| j| j| j| jd		dd}
tjj|	d 	dd
d| j| j| j| jd		dd}|
|fS )
N   c                 s   s"    | ]}t |tjo|jV  qd S r   )r   rE   rF   r  )r   bufr   r   r   r   C
  s
    
zflex_njt.<locals>.<genexpr>zflex_attention(): Nested tensor score_mod / mask_mod buffers are not currently supported. Please file an issue if this is important to you.r   )ri  rj  rk  rl  rm  rn  r   r   r   r   )r"   r1   r%   flex_attention_hoprj  r  rE   r  nested_tensor_from_jaggedr  r   r   rK   r   r   )rg  rh  r}  ri  rj  rk  rl  rm  rn  r$   
output_njtlogsumexp_njtr   r   r   flex_njt4
  sJ   (rv  r  	logsumexprZ  grad_logsumexpfw_graphjoint_graph.c                 C   s  t |  d| d| d| d| d| d| d|||	|
|||d}|\}}}}tjj|ddd| j| j	| j
| jddd}tjj|ddd|j|j	|j
|jddd}tjj|ddd|j|j	|j
|jddd}||||fS )Nr   )r  rw  rZ  rx  ry  rz  rj  rk  rl  rm  rn  r   r   rq  )flex_attention_backward_hoprj  r  rE   r  rs  r  r   r   rK   r   r   )rg  rh  r}  r  rw  rZ  rx  ry  rz  rj  rk  rl  rm  rn  r$   dense_q_graddense_k_graddense_v_gradscore_mod_other_buffer_grads
njt_q_grad
njt_k_grad
njt_v_gradr   r   r   flex_njt_backwardm
  sZ   r  z	self: anyc                 O   s   ddl m} | S )Nr   )_nt_view_dummy)$torch.nested._internal.nested_tensorr  )r`   ra   rb   r  r   r   r   _nested_get_jagged_dummy
  s   r  r   IMPLCPUCUDAMeta)F)TFF)r   )r   r   )r   r   r   typingr   rE   torch.nn.functionalrM  rN  r~  torch.fx.operator_schemasr   torch.nested._internal.sdpar   r   r   r	   r   Any__annotations__r
   Dictr   r-   r8   strrm   rt   r   r   r   r   register_jagged_funcCallabler   r   r   r   r   r   r   r   r   r   r"   r   r   r   r   r   primr!  r   r{   r   r   r  r  r  r	  linearr  linear_backwardr  r)  r  r  _to_copyr5  r;  rB  r3  
empty_like	ones_likerS  	rand_like
randn_likerE  	full_likerandint_like	low_dtypezero_rG  _softmaxrX  _softmax_backward_datar[  native_dropoutr_  native_dropout_backwardra  r   dim_intre  rh  rX   rF   rn  ro  rs  rt  rx  r  r  r   r  r   r  r  r  r  r  r  r  bmmr  r   r  r  r  r  r  wherer  r  _pin_memoryr  	is_pinnedr  is_same_sizer  rd  r   r  r  r  r  r  permuter  view_unsafe_viewr  native_layer_normr  native_layer_norm_backwardr  r  r  r  r  	index_putr  convolutionr  r  r  r  r1   r2   r  r  rx   r  r  r  r  r  r  r"  r#  r$  r&  r'  r(  r)  r*  r+  r.  r/  r  r0  	embeddingr1  embedding_dense_backwardr2  rj  _nested_get_valuesr4  r5  r  r?  _nested_from_padded_tensorrC  _nested_view_from_jaggedrD  rF  rH  rI  rL  rN  rO  rR  _nested_select_backwardrU  record_streamrW  	new_empty	new_zerosnew_onesrX  elu_backwardhardshrink_backwardhardsigmoid_backwardhardtanh_backwardsoftplus_backwardsoftshrink_backwardrY  fillScalarrZ  fill_r[  frexpr^  matmul_backwardrc  &torch._higher_order_ops.flex_attentionrd  rr  re  r{  torch.fx.graph_modulerf  py_implTuplerQ  rv  Unionr  r  library_scoped_libraryimplr   r   r   r   <module>   sf  
@
	)
	NH






	








%


(







/


H












)
H



m










j




*
(
/

a






T



&












	

	
	
	
	
	
	

 












;

5


	
	
	
	


















	
	
8
	

 ?$