o
    ki|                 
   @   s:  U d dl Z d dlZd dlZd dlT 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
 Z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!dB 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-d0d1 Z4e ej'j(j5j*gd-dd2d3Z6e ej'j(j7j*d-d4d5 Z8e ej'j(j7j9d6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@j*d?d@dA ZAe ej'j(jBjCdBdCdD ZDe ej'j(jEj*d-dEdF ZFe ej'j(jGj*dGdHdI ZHe ej'j(jIj*d-e$ e ej'j(jJj*ej'j(jKj*ej'j(jLj*ej'j(jMj*ej'j(jNj*gd-dJdK ZOe ej'j(jPj*dLeO e ej'j(jQj*dMeO e ej'j(jQjRdNeO e ej'j(jSj*d-dOdP ZTe ej'j(jUj*dQdRdS ZVe ej'j(jWj*dQdTdU ZXe ej'j(jYj*dVdWdX ZZe ej'j(j[j*dYdZd[ Z\e ej'j(j]j*d\d]d^ Z^e ej'j(j_j`d_d`da Zae ej'j(j_j*dbdcdd Zbe ej'j(jcjddedfdg Zee ej'j(jfj*dhdidj Zge ej'j(jhj*dkdldm Zhe ej'j(jij*dndodp Zje ej'j(jkjldqdrds Zme ej'j(jnj,dtdudv Zoe ej'j(jpj*dwdxdy Zqe ej'j(jrj*dzd{d| Zse ej'j(jtj*d}d~d Zue ej'j(jvj*ddd Zwe ej'j(jxj*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 Z}e ej'j(j~jddd Ze ej'j(jj*ddd Ze ej'j(jj*ddd Ze ej'j(jj*ddd Zdd Ze ej'j(jj*dbdd Ze ej'j(jjddd Ze ej'j(jjld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(jjlddd Ze ej'j(jjdd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*db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*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*dz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dd  Ze ej'j(jj*ddddZe ej'j(jj*ej'j(jj*ej'j(jj*gddd 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(jjdd-dd Ze ej'j(jj*d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 sw   Y  dS (       N)*)normalize_function)#jagged_scaled_dot_product_attention   NestedTensor__all__JAGGED_OPS_TABLEc                 C   s>   | j r|dkrt| jS t| jS |dkrtdS tdS )Nmaxinf-inf)is_floating_pointtorchfinfor
   minfloat)dtypepadding_type r   d/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/nested/_internal/ops.py_get_padding_value   s   
r   Fc                    s   ddl m} t|ttfr$t| fdd|D }t|t|S |r+| |}|dkr3| k s=td| d  |dkrEd S |d S )Nr   canonicalize_dimsc                 3       | ]	}t  |V  qd S N_outer_to_inner_dim.0dndim
ragged_dimr   r   	<genexpr>#       z&_outer_to_inner_dim.<locals>.<genexpr>zdim z out of range for ndim r   )	torch._prims_commonr   
isinstancetuplelisttypedictfromkeysAssertionError)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_dim5   s   	
r8   c           	         s   ddl m  t|ttfst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>_   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#   e       z$_wrap_jagged_dims.<locals>.<genexpr>c                 3   r   r   r   r   )r!   r:   r   r   r#   i   r$   )
r%   r   r&   r'   r(   r,   r)   anyr*   r+   )	r!   dimsr1   r:   wrapped_dimsoperate_on_batchoperate_on_raggedoperate_on_non_batchouter_to_inner_dimr   )r   r!   r:   r   _wrap_jagged_dimsR   s   rC   
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 ]i\}}	|	 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   r9   q       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&   r   Tensorr   rJ   r   r   r   <lambda>       zcheck_schema.<locals>.<lambda>c                 S   s   t | to| jd u o| jdkS Nr   )r&   r   _lengths_ragged_idxrQ   r   r   r   rR      s   
 
c                 S   s
   t | tS r   r&   r   rQ   r   r   r   rR      s    c                 S      dS )NTr   rQ   r   r   r   rR          )tjtjt_allr<   z: rG   zUnknown arg type: z) missing required argument: c                    s   |r
| d u p	 | S  | S r   r   )rJ   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>)rZ   zt?r[   r\   r<   z): expected z	 to be a )splitcountlen
ValueError__name__	enumeraterH   r,   )rD   funcargskwargsnamed_arg_typesnum_optional_argsmin_argsarg_type_check_fnsinamed_arg_typenamearg_typer]   normalized_arg_typer`   type_to_descr   r^   r   check_schemao   s`   


ru   aa_namebb_namec                 C   s:   |j |j |j |j krtd| j d| d| dd S )NrN   z: expected  and z' to have the same exact offsets tensor.)_sizerV   r0   rf   )rh   rv   rw   rx   ry   r   r   r   check_ragged_dim_same   s
   r|   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 )rL   Nr   )r   nssr   r   r   r#         " z%raggedness_matches.<locals>.<genexpr>)rV   r{   rd   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)rZ   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   )ru   )ri   rj   )aten_oprh   rD   r   r   inner   s   z@register_func.<locals>.wrapper.<locals>.get_inner.<locals>.innerr   )r   r   )rh   rD   )r   r   	get_inner   s   z1register_func.<locals>.wrapper.<locals>.get_innerr   )rh   r   r   tableaten_opsrD   tablesrh   r   wrapper   s   zregister_func.<locals>.wrapper)r&   r(   )r   r   rD   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_intrN   z: invalid argument c                 s   s    | ]	}t |tjV  qd S r   )r&   r   rP   rI   r   r   r   r#   
  r$   z lookup_jagged.<locals>.<genexpr>r   z: jt_allz: anyrM   rF      zlhs: any, rhs: any, ...)r	   getr   Tag	pointwisetags%torch.fx.experimental.symbolic_shapesr   r0   rf   sum_schema	argumentsr&   r)   
TensorTypeappendrq   joinru   	functoolspartialjagged_unary_pointwisejagged_binary_pointwise)	rh   ri   rj   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_cacherV   r   )r   rj   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   rW   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   rh   ri   rj   r   r   r   r   *  s   r   c                    sR  |d |d }}t |tst |tstdd}t |trOt |trOt||jrCt| |j|jg|dd  R i |fi t|S t|| j	|j|jt |t}|rZt|nt|}|rd||fn||f\ }|
  
 krvt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   z4At least one of the arguments must be a NestedTensorzHcannot 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   rV   )r   ro   rJ   r   padded_max_Sr   r   r9   n     " z+jagged_binary_pointwise.<locals>.<listcomp>r   r:   sum_S
min_seqlen
max_seqlen)r&   r   r,   r   r{   r   r   r0   formatrf   r-   NotImplementedErrorr   r   nested_tensorr   _maybe_min_seqlen_maybe_max_seqlenrV   expandrg   _offsets)rh   ri   rj   rv   rx   mismatch_error_msga_is_ntextracted_kwargsrZ   
t_squeezedlhsrhsr   r   r   total_Lt_as_ntr   r   r   r   3  s`   "
,
 r   c                    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d}t|||d	d
\}}|d}t	|
 |d |jddd}t	|
 |d |jddd}||kre|S ttj|j||d  }	g |jd | |	|j|d d  R }
|j|
 S | jdkr|d   jr S   \}}t j  |D ]}t |d }|d ur|  qW d     S 1 sw   Y   S | jdkr|d   jrdS   \}}|sdS t fdd|D S | jdkr@dddd}t|||d	d
\}}|d}|d}|
 |j d }t||kr#tdt j  | |i |W  d    S 1 s;w   Y  t| )Napply_r   r   flattenrL   rE   c                 S      d S r   r   )input	start_dimend_dimr   r   r   _flatten_sig     z+jagged_torch_function.<locals>._flatten_sigTri   rj   normalize_to_only_use_kwargsr   r   F)r2   r   share_memory_	is_sharedc                 3   s,    | ]}t  |d uot  | V  qd S r   )getattrr   )r   rq   r   r   r   r#     s
    
z(jagged_torch_function.<locals>.<genexpr>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   rL   rE   NNN)r   _C_nnscaled_dot_product_attentionr   rf   r   r   popr8   r-   rV   r   reduceoperatormulr   reshapeis_cuda__tensor_flatten__DisableTorchFunctionSubclassr   r   r   rd   re   r   )rh   ri   rj   r   _
new_kwargsinpr   r   product	new_shapenamesrq   	componentr   r   max_normalizabler   r   r   jagged_torch_function  s   
$


*






"r   zself: jt_allc                 O   s   | t jjjju r
dS | t jjjju r|d jS | t jjjju 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u rd|d jS | t jjjju rs|d j S d S )NFr   r   )r   opsatenis_non_overlapping_and_densedefaultsym_sizer{   r-   rd   	sym_numelnumelrU   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   )r   jaggedr   r   r   r   prim_layout_default
  s   r  c                 O   s   | t jjjju rtdd S )NznNestedTensor does not support directly calling torch.ops.aten.size; please use `nested_tensor.size()` instead.)r   r   r   r   r  r0   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   r   contiguous_formatpreserve_formatr   )rh   ri   rj   r  r   r   r   r   r   r   is_contiguous_general  s   

r  z!self: jt_all, memory_format: any?c                 O   sl   t | ||dd\}}|d}| d urdS |dtj|d< |d tjkr)dS tjjj	j
|jfi |S )NTr   r   Fr  )r   r   r   r   r   r  r  r   r   sym_is_contiguousr  r   rh   ri   rj   r   r   r   r   r   r   sym_is_contiguous_general5  s   

r  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r.t	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   rU   r   r  r   r  rV   r,   unbindr   r   )	rh   ri   rj   r   r   r   new_metar  contigr   r   r   clone_defaultL  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  r   r   r   linear_defaulti  
   

"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   rL   r   r   F)keepdim)r   r   r|   r   r   matmulr   r   r   r   rZ   r'   ranger!   cloner   )rh   ri   rj   r   r   r   r#  r   r$  dsdwdbgrad_2dinput_2dreduce_dimsr   r   r   linear_backward_defaultt  s2   






r0  zinput: jt_all, dtype: anyc                 O   r  r  r   r  r   r   r   to_dtype  r"  r1  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   r3  r   r   r   r   tor6  rU   torch._subclasses.fake_tensorr8  #torch._subclasses.functional_tensorr:  r;  r&   nested_int_memor   r   )rh   ri   rj   r3  r   r   r   
new_valuesnew_offsetsnew_lengthsr8  r:  r;  ragged_source	new_thingtgtsrc
inp_kwargsr/   r   r   r   to_copy_default  s2   




rH  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   rF  c                 S      g | ]}|j qS r   r   r   cr   r   r   r9         z copy_default.<locals>.<listcomp>c                 S   rI  r   rJ  rK  r   r   r   r9     rM  z<copy_(): expected compatible input and src shapes, but got: rz   )	r   r   r{   r  r0   r   r   copy_r   )rh   ri   rj   r   r   r   rF  	inp_compsinp_comp_shapes	src_compssrc_comp_shapesinp_compsrc_compr   r   r   copy_default  s,   


rU  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   r4  r5  r   r   r   r7  r9  r   r2  )r   r   r   stridedr   r   r<  r6  rU   r   r=  r8  r>  r:  r;  r   r3  r&   r?  r   )rh   ri   rj   r   r   r   r@  rA  rB  output_kwargsr8  r:  r;  r3  rC  rD  rE  rF  r   r   r   like_factory_default  s6   




rX  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   


rZ  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   rL   r   )max_lengthspadding_valuer-   r   )r   r&   r'   r0   r   rC   r-   rV   rU   r   nn
functionalr[  r   r   _jagged_to_padded_dense_forwardr   r   r   r   _max_seqlenr   _padded_dense_to_jagged_forwardr   r   )rh   ri   rj   r   r   r   reduce_on_batchreduce_on_ragged_reduce_on_non_batchpadded_softmax_valuessoftmax_valuesr   r   r   _softmax_defaultI  sx   


"rj  c           	      O   s   t | ||dd\}}t|d trtd|d}t| |d fd|j\|d< }}}|r3td|r9td|d d	 |d< t| |j	fi |fi t
|S )
NTr   r-   zLlog_softmax(): not supported for dimensions of type 'tuple' for NestedTensorr   log_softmaxzVlog_softmax(): not supported when reducing across the batch dimension for NestedTensorzVlog_softmax(): not supported when reducing along the ragged dimension for NestedTensorr   )r   r&   r'   r0   r   rC   r-   rV   r   r   r   )	rh   ri   rj   r   r   r   re  rf  rg  r   r   r   _log_softmax_default  s4   

"rl  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   )rh   ri   rj   r   r   grad_outr/   r   r   r   _softmax_backward  s   


ro  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   )rh   ri   rj   r   r   r   out1out2r   r   r   native_dropout_default  s   

rs  z%grad_output: jt, mask: jt, scale: anyc                 O   rm  )NTr   r#  maskr   )rh   ri   rj   r   r   r#  rt  r   r   r   native_dropout_backward_default  s   


ru  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     ry  zself: jt_all, dtype: any?c                 O   0   t | ||dd\}}|d}| |jfi |S r  rY  r  r   r   r   prod_default  
   

r|  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-   rb   c                 3   s&    | ]}t dd |it V  qdS )valuesNr   r   r   rI   r   r   r   r#     s
    
zsplit_tensor.<locals>.<genexpr>)r   r   r8   r-   rV   r'   r   rh   ri   rj   r   r   r   r  r   split_tensor  s   

r  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 r~  r   r  rI   r  r   r   r9          z,split_with_sizes_default.<locals>.<listcomp>)r   r   r8   r-   rV   r   r  r   r  r   split_with_sizes_default  s   


r  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-   r  r  )r   r   r8   r-   rV   r   r   r   )rh   ri   rj   r   r   r   r-   r~  r   r   r   r  &  s   

r  z self: jt, chunks: any, dim: any?c                    s   t | ||dd\}}|dt |d jddd\|d< }|rc|d }j }||}dd	 |D }	d
d	 |	D }	fdd	|	D dd	 |D }
j	|
  fdd	t
t D S fdd	| jfi |D S )NTr   r   r-   chunkr4   chunksc                 S   s   g | ]	}t j|d dqS )r   r^  )r   cumsumrI   r   r   r   r9   K  s    z!chunk_default.<locals>.<listcomp>c                 S   s   g | ]
}t j|d ddqS )r   r   r   )value)FpadrI   r   r   r   r9   L  s    c                    s   g | ]}| j d qS ))r   rV   r   )r   per_offsetsr  r   r   r9   M  s    
c                 S   s   g | ]}|   qS r   )r   itemrI   r   r   r   r9   S  rS   c                    s&   g | ]}t dd  | i| qS r  r   r   ro   )chunk_valuesnested_kwargsr   r   r9   X  s    c                    r  r  r  rI   r  r   r   r9   ]  r  )r   r   r8   r-   rV   r   diffr  r   rb   r(  rd   )rh   ri   rj   r   r   r7   r  r   chunked_lengthschunked_offsetssplit_sizesr   )r  r   r  r   chunk_default9  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 d B d	d ffd
d}	|d u rW|	 
  |	  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   rU   r   rE   c                    s   d}j  d  }tt| D ].}t| | dk t| | |k || | 7 }|d ur=t|| | |  |kdd  qt||k |d urdtt|D ]}t|| dk t|| |k qOd S d S )Nr   r   c                   S   rX   )NzMunbind(): nested tensor offsets and lengths do not match ragged_idx dimensionr   r   r   r   r   rR     rY   z2unbind_int.<locals>._torch_check.<locals>.<lambda>)r   r(  rd   r   _check)rU   r   lengths_sumragged_dim_sizero   )r:   r~  r   r   _torch_checkt  s&   
z unbind_int.<locals>._torch_checkr   r^  zAunbind(): nested tensor ragged_idx out of bounds (should be >= 1)c                    s*   g | ]}t jd  |  | dqS )r   r  )r   r  r  lengths_scalarsoffsets_scalarsr:   r~  r   r   r9     s    zunbind_int.<locals>.<listcomp>r   )r   r0   r   r~  r   r   rV   r(   r  r  tolistr   rb   r(  r   )
rh   ri   rj   r   r   r-   r   r   r   r  r   r  r   
unbind_intc  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   r8   rd   r{   rV   r   r   )rh   ri   rj   r   r   r   r~  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)r3   rV   )	r   r   r   r8   rd   r{   rV   r   r   )	rh   ri   rj   r   r   r   r~  r-   rW  r   r   r   unsqueeze_default  s   


r  ztensors: any, dim: any?c                    s   t | ||dd\}}|d}dd |D }t|dkr td|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   rZ   r   r   r   r9     rK   zcat_default.<locals>.<listcomp>r   z"At least one tensor must be nestedc                    s    g | ]}|j r	|n| qS r   )r  	expand_asr  firstr   r   r9     s     r-   catc                 S   rI  r   r   r  r   r   r   r9     rM  )	r   r   rd   r,   r8   r   rV   r   r   )rh   ri   rj   r   r   r  nestedr-   r   r  r   cat_default  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   r9     s    z8matmul_default.<locals>._unbind_impl.<locals>.<listcomp>)r   r  )rv   rx   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   rV   to_padded_tensorr   )rv   rx   r   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 rz   )r   r   r  r-   rV   r   r   r   r   r{   r   r   stackr0   r   )	rh   ri   rj   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-   re   r  r   r   r   r'  r  rh   ri   rj   r   r   r   r  r   r   r   bmm_defaultZ  s   


r  z'self: jt_all, size: any, implicit: any?c                    s   t | ||dd\}}|d |d d|v r |dr tdt s0td j d  fd	d
td  D }t|  j	|fi t
 S )NTr   r   r   implicitz implicit expand is not supportedzexpand(): cannot expand shape z -> c                    s"   g | ]}| j krd n| qS )rL   r   r   r   r   r   r   r9   {  r   z"expand_default.<locals>.<listcomp>r   )r   r   r,   r   r0   r{   r(  r-   r   r   r   )rh   ri   rj   r   r   
expand_argr   r  r   expand_defaultk  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   rd   r-   r   r(  re   )rh   ri   rj   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   rJ  r  r   r   r   r#     s    z$broadcast_tensors.<locals>.<genexpr>c                 s   r   r   rW   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   rd   re   r   broadcast_shapesr   r  r   r  r-   r   r   r   r   r'   )
rh   ri   rj   r   r   r  outsbroadcast_shaper   rZ   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   r   r  r   r   r   )rh   ri   rj   r   r   r  r   r  r   r   r   
where_self  s   



r  zself: jt, device: any?c                 O   r  r  r   r  r   r   r   _pin_memory_default  r"  r  c                 O   r{  r  rY  r  r   r   r   is_pinned_default  r}  r  zself: jt_all, other: jt_allc                 O   s   |d j |d j kS r   )r{   r   r   r   r   is_same_size_default  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  rV   )r   or  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   rR   +  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   rV   c                    s   t | fi  S r   r   r  )
out_kwargsr   r   rR   V  s    )r   r   r&   r'   r(   rd   r   r   r)   r  rV   rC   r-   rU   r0   torch.utils._pytreer  r  r   )rh   	func_nameidentity_elementri   rj   r   r   full_reductionoutdim_to_convert
is_dimlistconverted_dimre  rf  reduce_on_non_batchr  dim_to_passdimlistr   r   )r   r  r   rx    s   

 

rx  c                 O   r{  r  rY  r  r   r   r   sum_defaultY  r}  r  z3self: jt_all, dim: any?, keepdim: any?, dtype: any?c                 O   rv  )Nr   r   rw  r   r   r   r   sum_dim_IntListd  rz  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 NTrV   	transpose)r   r%   r   r   r-   rV   re   r   r   r~  r  r   rd   r{   r8   r   )rh   ri   rj   r   r   r   r   r  r  to_dimrG  r   r   r   transpose_intl  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   r=   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 NTrV   c                    s   g | ]	}t | jqS r   )r   rV   )r   r-   r   inp_dimr   r   r9     s    z#permute_default.<locals>.<listcomp>r   )r   r   r   rd   r{   re   r%   r   setrU   indexrV   r   r   )
rh   ri   rj   r   r   r=   rG  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 rT   )rV   r   r   )	inner_idxr  r   r   get_inner_size  s   z$view_default.<locals>.get_inner_sizec                    s   g | ]} |qS r   r   r  )r  r   r   r9     s    z view_default.<locals>.<listcomp>)r   r   rV   r'   r{   r0   rd   r   r(  r   inference_modeis_inferencer   r   r   )rh   ri   rj   r   r   
inner_sizer   )r  r   r   r   view_default  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   )r\  r   )r6  r   )r   r   )r-   r&  r   r_  rL   )r   r   r-   r0   r   rV   rd   rU   r   r   r   rb  r   r   r   rc  onesr6  r   r   r  r  r   squaresqrtrd  	unflattenr   r   )rh   ri   rj   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   rn  r   rp  )
rh   ri   rj   r   r   rn  r   d_inputd_gammad_betar   r   r   "native_layer_norm_backward_defaultZ  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-   selectr  r  zSselect(): not yet supported on dim != 0 for non-contiguous nested tensor with holesr   rV   )r   r   r8   r-   rV   r  rU   re   r   r   r   )rh   ri   rj   r   r   r   r7   r  r   r   r   
select_intk  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   r8   r-   rV   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r+tdt| d|  dt||jd k r| s<td	dd
lm	} |j
}|j}	|	}
|jj|jd  }|
d u rY|}
g |jd |j |
|j|jd d  R }|jd|d}|| ||fi ||j|j|||	d}| tjjjju 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u r| |j|fi ||_|S t| |j|fi |fi t|S )NTr   r   indiceszToo many indices: got z but tensor has z dimensionsr   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   rd   r-   r,   rV   is_contiguousr0   r   r   r   r   r   r   r  r   r   r   r   
index_put_r  rN  r~  r   r   r  _assert_asyncr   r   r   )rh   ri   rj   r   r   r   r  r   r   r   r   r   r  
padded_inpnew_njtr   ragged_indicesfunc_indicesr   r   r   r    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_default  s
   

"r  c                 O   s   t | ||dd\}}|d }t| |d d|j\}}}}|ri|si|r(td|d }	d|d< ttjjj	j
ddfi |}
|jd urF|jn|j }t|
 d	 D ]}|d
}qS|
| }|	sg||j}|S d}t| d|fi |S )NTr   r   r-   r  zTCannot reduce on both ragged and non-batch dimensions without also reducing on batchr&  r   r   rL   gzG?)r   rC   r-   rV   r,   rx  r   r   r   r   dim_IntListrU   r   r  r(  r  r   )rh   ri   rj   r   r   r   re  rf  r  r&  intermediate_sumr   r  intermediate_valuer   r   r   mean_dim  s>   
r  c                 O   r{  r  rY  r  r   r   r   mean_default4  r}  r  z&self: jt_all, dim: any?, keepdim: any?c                 O   rv  )Nr<   Frw  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  r   r   r   r<   r=   r  r   r   r   any_dimD  
   
r#  c                 O   rv  )Nr   Trw  r   r   r   r   all_dimsO  r   r%  c                 O   r!  r"  )r   r%  r   r   r   r   r=   r  r   r   r   all_dimT  r$  r&  c                 O   r{  r  rY  r  r   r   r   all_any_max_min_default_  s
   


r'  c                 O   (   t | ||dd\}}|d}| |jS r  rY  r  r   r   r   _is_true_defaultr  s
   


r)  c                 O   B   t | ||dd\}}|d j}t|d}t| d|g|R i |S )NTr   r   r
   r   r   r   r   rx  rh   ri   rj   r   r   r   	dtype_maxr   r   r   min_dim     


r.  c                 O   r*  )NTr   r   r   r
   r+  rh   ri   rj   r   r   r   	dtype_minr   r   r   max_dim  r/  r2  c                 O   r*  )NTr   r   r
   aminr+  r,  r   r   r   amin_default     


r4  c                 O   r*  )NTr   r   r   amaxr+  r0  r   r   r   amax_default  r5  r7  c                 O   r*  )NTr   r   r
   argminr+  r,  r   r   r   argmin_default  r5  r9  c                 O   r*  )NTr   r   r   argmaxr+  r0  r   r   r   argmax_default  r5  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   ro   r~   r   r   r   r#     r;   z=value_selecting_reduction_backward_default.<locals>.<genexpr>sizesr-   "value_selecting_reduction_backwardr   rV   r   )r   r   r   r   r   r   rg   r8   rd   r   rV   r   r   )
rh   ri   rj   r   r   r<  r  r:   r=  rW  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   rI  r   r   r  r   r   r   r9   	  rM  z!stack_default.<locals>.<listcomp>)r   r   r&   r   r0   r-   r   r   r8   rV   r   )rh   ri   rj   r   r   r  rZ   r   r   r   stack_default  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 )NTr   r  r   r   )rh   ri   rj   r   r   r  r   r   r   r   embedding_default	  s   


rA  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#  rY  )rh   ri   rj   r   r   r  r#  r   r   r    embedding_dense_backward_default	  s   

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


rD  c                 O   r(  r  rY  r  r   r   r   all_default?	  s
   


rE  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  rL   padding)r   r   rU   r0   rV   _max_seqlen_tensorrc  r   r   r~  r  r   r-   r   r  r   r   boolr   r<  halfr   r   rb  r   rd   r  r   )rh   ri   rj   r   r   r   r  max_seq_lenr~  values_shapeis_bool
padded_outr   r   r   to_padded_tensor_defaultJ	  sR   










rN  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  rL   r   r   r   r   )rV   r   )r   r   r  r   r-   r   r  r   r   rH  r   r<  rI  r   r   rd  rd   r  r   r   )rh   ri   rj   r   r   rO  r   r:   padded_ragged_dim1_shaperL  r~  r   r   metadata_cacher   r   r   "_nested_from_padded_tensor_default	  sN   




rR  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   rV   r   )r   r   )rh   ri   rj   r   r   r~  r   r   r:   r   r   rQ  r   r   r    _nested_view_from_jagged_default	  s,   

rS  c                 O   $   t | ||dd\}}|d}|jS r  )r   r   r   r  r   r   r   _nested_get_offsets	  
   

rU  c                 O   rT  r  )r   r   rU   r  r   r   r   _nested_get_lengths	  rV  rW  c                 O   rT  r  )r   r   rV   r  r   r   r   _nested_get_ragged_idx	  rV  rX  c                 O   ,   t | ||dd\}}|d}|jdd S )NTr   r   r   r   r   r   r   r  r   r   r   _nested_get_min_seqlen 
  
   

r[  c                 O   rY  )NTr   r   r   rZ  r  r   r   r   _nested_get_max_seqlen

  r\  r]  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   rt  r   z3masked_select only support 2-D selections currentlyzMask with shape z& is not compatible with input's shape r   r^  r  r   r~  r   )r   r   r!   r0   r   r   masked_selectr~  r  r  r  r   r   r   )	rh   ri   rj   r   r   r   rt  
res_valuesmask_cumsumr   r   r   masked_select_default
  s(   



ra  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   r   
zeros_liker   r  rN  )rh   ri   rj   r   r   r   r#  
grad_inputr   r   r   _nested_select_backward_default.
  s   


rd  zself: jt_all, s: anyc                 O   sF   |d }|d }| |j | | |j| |jd ur!| |j| d S d S r   )r   r   rU   )rh   ri   rj   r   streamr   r   r   record_stream_default@
  s   
rf  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   rd   r   r0   r  r   r   r   new_empty_defaultK
  s   	

rg  zself: jt_all, ...c                 O   s:   t dd |D }t| dd |D i |fi t|S )Nc                 s   r   r   rW   r   r   r   r   r#   m
  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#   p
  r   r   )rh   ri   rj   r#  r   r   r   activation_backward`
  s   rh  zself: jt_all, value: anyc                 O   r  r  r   r  r   r   r   fill_Scalarw
  r"  ri  c                 O   s4   t | ||dd\}}|d}| |jfi | |S r  rY  r  r   r   r   fill__Scalar
  s   

rj  c           	      O   sT   t | ||dd\}}|d}t|}| |j\}}t|fi |t|fi |fS r  )r   r   r   r   r   )	rh   ri   rj   r   r   r   rW  mantissaexponentr   r   r   frexp_Tensor
  s   

rm  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  rt  r   r   rL   r   )r   r   r   r'  r  )rh   ri   rj   r   r   r<  r   r  grad_input_mask	grad_self
grad_otherr   r   r   matmul_backward_default
  s    




rr  z	self: anyc                 O   s   ddl m} | S )Nr   )_nt_view_dummy)$torch.nested._internal.nested_tensorrs  )rh   ri   rj   rs  r   r   r   _nested_get_jagged_dummy
  s   ru  r   IMPLCPUCUDAMeta)F)TFF)r   r   )r   r  r   typingr   torch.nn.functionalr`  ra  r  torch.fx.operator_schemasr   torch.nested._internal.sdpar   r   r   r   r(   Any__annotations__r	   Dictr   r   r8   rC   strru   r|   r   r   r   r   register_jagged_funcCallabler   r   r   r   r   r   r   r  r  r  r-   r  r  r	  r  r  primr4  r  r   r  r  r  r  r  r  r)  r  linearr!  linear_backwardr0  r<  r   r1  _to_copyrH  rN  rU  rC  
empty_like	ones_likerb  	rand_like
randn_likerX  	full_likerandint_like	low_dtypezero_rZ  _softmaxrj  _log_softmaxrl  _softmax_backward_dataro  native_dropoutrs  native_dropout_backwardru  r  dim_intry  r|  rb   rP   r  r  r  r  r  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  rx  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  r<   r=   r  r#  r   r%  r&  r
   r   r'  _is_all_true_is_any_truer)  r.  r2  r3  r4  r6  r7  r8  r9  r:  r;  r>  r?  r  r@  	embeddingrA  embedding_dense_backwardrB  r~  _nested_get_valuesrD  rE  r  rN  _nested_from_padded_tensorrR  _nested_view_from_jaggedrS  rU  rW  rX  r[  r]  r^  ra  _nested_select_backwardrd  record_streamrf  	new_empty	new_zerosnew_onesrg  elu_backwardhardshrink_backwardhardsigmoid_backwardhardtanh_backwardsoftplus_backwardsoftshrink_backwardrh  fillScalarri  fill_rj  frexprm  matmul_backwardrr  ru  library_scoped_libraryimplr   r   r   r   <module>   s  
@
	)
	Of






	








%


)







0


H
%












)
H



m










j




*
(
/

a






X



)












	

	












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






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














$