o
    j9:jc                     @  s	  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
ZmZmZ d dlmZ d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ d d	l%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d d
l,m-Z- d dl.m/Z/ erd dl0m1Z1m2Z2 d dl%m3Z3 d dl4m5Z5 e(ej6B Z7edZ8edZ9edZ:ejj;Z<g dZ=i Z>g Z?ej@jAjBZBdddZCdddZDeCg eBjEjFeBjEjGeBjHjFeBjHjGeBjIjFeBjIjGeBjJjFeBjJjKeBjJjGeBjJjLeBjMjFeBjMjKeBjMjGeBjMjLeBjNjFeBjNjKeBjNj6eBjNjOeBjNjPeBjNjQeBjNjGeBjNjLeBjNjReBjNjSeBjNjTeBjNjUeBjVjFeBjVjGeBjWjFeBjWjGeBjXjFeBjXjGeBjYjFeBjYjGeBjZjFeBjZjGeBj[jFeBj[jGR  Z\eCeBj]jFeBj^jFeBj^jGeBj_jFeBj`jaeBj`jbeBjcjFeBjdjFeBjdjGeBjejFeBjejGZfeBjgfZhddd Ziejjdd#d$Zkdd(d)Zld d+d,Zmdd.d/Znele>jodd4d5Zpelekelg e\dd7d8ZqeleBjcjFdd9d:ZrelejAjsjtjF	ddd>d?ZtelejAjsjujFddAdBZuelejAjsjvjF	dddCdDZveleBj`jbeleBj`jaddEdFZwd dGdHZxelexddIdJZyeleBjzjFddKdLZzeleBj{jFddMdNZ{eldOdP d	dQdRZ|	S	T	Td
dTdUdd^d_Z}eleBj~jF	S	T	Td
dd`daZeleBjjddfdgZeleBjjF	S	T	Td
ddhdiZeleBjjF	T	T	dddjd\Z	TdddqdrZddwdxZ	S	Tddd{d|ZeleBjjFdd~dZeleBjjFeleBjjFdTddddZeleBjjFdddddZeleBjj6	ddddZelejAjBjjFelejAjBjjFdddZelejAjBjjFdddZelejAjBjjFdddZelejAjBjjF	ddddZdddZelejAjBjj6	 			dd ddZelejAjBjjFd!ddZelejAjBjjF			d"dddd#ddZelddP d	ddZd$ddZd%ddZeCdddZd ddZdddĄZelddP d&ddȄZeleBjj6dddʄZeleBjjFd'dd̈́ZeleBjjFeleBjjFeleBjjFeleBjjFeleBjjFdddτZeleBjjGeleBjjGdddфZeleBjjFeleBjjFdddӄZeleBj^jFeleBj^jGeleBjjFeleBjjFd	ddՄZelddׄ efD d	ddلZeleBjjFeBjjFgd(dd܄ZelejAjBjjF		 d)d*ddZelejAjBjjFd+ddZi Zd,ddZd-ddZejfd.ddZ	Tdd/ddZejjd0ddZdS (1      )annotationsN)reduce)AnycastTYPE_CHECKINGTypeVar)	ParamSpec)no_python_dispatcher)
OpOverload)canonicalize_dimelementwise_dtypesELEMENTWISE_TYPE_PROMOTION_KINDis_boolean_dtypeis_contiguous(is_contiguous_for_memory_format_or_falseis_contiguous_or_falseis_float_dtypeis_integer_dtypemake_contiguous_strides_for	ShapeType)DataDependentOutputExceptionDynamicOutputShapeException
FakeTensorin_kernel_invocation_managerrun_fallback_kernelUnsupportedOperatorException)_normalize_function_or_errorcount_label)CallableSequence)FakeTensorMode)IntLikeType_P_R_T)op_implementations_checksget_fast_op_implsstride_incorrect_ophas_metaitemsreturndict[_T, bool]c                  G  s   t | dS )NT)dictfromkeys)r*    r/   c/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/torch/_subclasses/fake_impls.pyordered_setI   s   r1   devicetorch.deviceboolc                 C  s
   | j dkS )Nhpu)typer2   r/   r/   r0   is_noncontiguous_supportedO      
r8   type_r   c                 C  s,   t jj }| |ptdd |  D S )Nc                 s  s    | ]}t |V  qd S N)contains_tensor_types).0er/   r/   r0   	<genexpr>       
z(contains_tensor_types.<locals>.<genexpr>)torch_C
TensorTypegetisSubtypeOfanycontainedTypes)r:   tensor_typer/   r/   r0   r<      s   r<   funcr
   c                 C  s`   t | tstdt|  | j}tdd |jD rdS t|jdko/|jd jt	j
j u S )Nz func must be an OpOverload, got c                 s  s    | ]}t |jV  qd S r;   )r<   r6   r=   argr/   r/   r0   r?          z)_is_tensor_constructor.<locals>.<genexpr>F   r   )
isinstancer
   AssertionErrorr6   _schemarF   	argumentslenreturnsrA   rB   rC   rD   )rI   schemar/   r/   r0   _is_tensor_constructor   s   
$rU   run_impl_checkUCallable[[OpOverload], bool] | OpOverload | list[OpOverload] | tuple[OpOverload, ...].Callable[[Callable[_P, _R]], Callable[_P, _R]]c                      d fdd}|S )Nop_implCallable[_P, _R]r+   c                   s   t  tr tv rtd  | t < | S t  ttfr* D ]}t||  q| S t s7tdt  t	
 | f | S )Nzduplicate registration: z%run_impl_check must be callable, got )rN   r
   op_implementations_dictrO   listtupleregister_op_implcallabler6   r&   append)rZ   oprV   r/   r0   impl_decorator   s   
z(register_op_impl.<locals>.impl_decoratorrZ   r[   r+   r[   r/   )rV   rd   r/   rc   r0   r_      s   r_   rb   c                 C  s   | t v S r;   r\   rb   r/   r/   r0   _is_op_registered_to_fake_rule   s   rh   Nonec                 C  s:   t | d  tD ]\}}|| u rt||f  d S qd S r;   )r\   popr&   remove)rb   checkimplr/   r/   r0   _deregister_op_impl   s   rn   	fake_moder!   argskwargsc                 O  s   t | | |g|R i |S r;   rf   ro   rI   rp   rq   r/   r/   r0   #dispatch_to_op_implementations_dict   s   rs   r   c           	      O  s   |t v rtd| t|||dd\}}d|v rt||tv r-|d j}|df}ntd}d}|dd }|d ur@|n|}td	|d< t|  ||i |}W d    n1 s_w   Y  t	| ||S )
Nz8func must not be in _non_kwarg_device_constructors, got Trp   rq   normalize_to_only_use_kwargsnamesinputcpur/   r2   meta)
_non_kwarg_device_constructorsrO   r   r   _like_tensor_constructorsr2   rj   rA   r   r   )	ro   rI   rp   rq   _
new_kwargsdefault_device
out_devicerr/   r/   r0   constructors   s*   



r   c                 O  sT   t |||dd\}}|d}t|  ||}W d    |S 1 s#w   Y  |S )NTru   rw   )r   rj   r   )ro   rI   rp   rq   r|   r}   inpr   r/   r/   r0   non_kwarg_is_pinned   s   




r   namestrobject | Nonec                 C  sR   t |  |||}W d    n1 sw   Y  tj|dd}t| |tdS )Nry   r7   rx   )r   rA   
empty_liker   r2   )ro   rI   r   rp   real_handlemeta_handler/   r/   r0   _record_function_enter  s
   
r   handlec                 C  s   d S r;   r/   )ro   rI   r   r/   r/   r0   _record_function_exit  s   r   c                 C  s6   t |  |||W  d    S 1 sw   Y  d S r;   r   )ro   rI   r   rp   r/   r/   r0   _record_function_enter_new  s   
$r   c           
      O  s   t |||dd\}}|d }|r|n|d j}td|d< |d}t|  ||fi |}	W d    n1 s:w   Y  | j| |	|S )NTr   r2   rw   ry   )r   r2   rA   rj   r   fake_tensor_converterfrom_meta_and_device)
ro   rI   rp   rq   r|   r}   input_devicer   r   r   r/   r/   r0   non_kwarg_to#  s   


r   c                 C     dS )NFr/   rg   r/   r/   r0   r(   7  s   r(   c                   sd   d
dd | j r.t fddt|| D }|s.t||f\}}t| |||td	S t	|)Nxobjectr+   r4   c                 S  s.   t | tr| jS t | tjtjtjfrdS dS )NTF)rN   r   _has_symbolic_sizes_stridesrA   SymIntSymFloatSymBoolr   r/   r/   r0   is_symbolicB  s
   
z3workaround_stride_incorrect_op.<locals>.is_symbolicc                 3      | ]} |V  qd S r;   r/   r=   r   r   r/   r0   r?   K  r@   z1workaround_stride_incorrect_op.<locals>.<genexpr>z2Cannot run fallback kernel for stride_incorrect_op)r   r   r+   r4   )
allow_fallback_kernelsrF   	itertoolschainvaluespytreetree_flattenr   RuntimeErrorr   )ro   rI   rp   rq   require_dynamic	flat_args	args_specr/   r   r0   workaround_stride_incorrect_op<  s   

r   c                 O  s:   t |  ||i |W  d    S 1 sw   Y  d S r;   r   rr   r/   r/   r0   
resize_as__  s   
$r   c                 O  s   t | |g|R i |S r;   )r   rr   r/   r/   r0   (_sparse_coo_tensor_with_dims_and_tensorsg  s   r   c                 C  s(   t jj| jv o| tjjtjjtj	jfvS r;   )
rA   Tagdynamic_output_shapetagsatenindexTensornonzerodefaultrepeat_interleaverI   r/   r/   r0   <lambda>p  s    r   c                 O     t |r;   )r   rr   r/   r/   r0   	dyn_shapeo  s   r   TFunique_consecutiverK   dim
int | Nonesortedreturn_inversereturn_countsr   )tuple[FakeTensor, FakeTensor, FakeTensor]c                C  s  | j d u s	| j jst||r|jn|j}|d us|d u rfddlm}	m}
 |
| s4| dkr4d}n%| j 	 }t
jd }|d u rF| n||}|
|sSt|}|	||d |d u rf|rc||_n||_|d u rr||fg}n|jg |jd | ||j|d d  R  g}|d uo|jtdk}|s|r|j|d u r|jn|j| ftjd}n|jdtjd}|| |s|r|j|d u r|d jn|d j| ftjd}n|jdtjd}|| t|S )Nr   _constrain_range_for_sizehas_free_symbolsrM   maxrx   dtype)	shape_envallow_dynamic_output_shape_opsr   unique_consecutive_memounique_memo%torch.fx.experimental.symbolic_shapesr   r   numelcreate_unbacked_symintsysmaxsizesizeint	new_emptyshapefake_devicerA   r2   int64ra   r^   )ro   rI   rK   r   r   r   r   r   nnzr   r   maxvalr   retreturn_if_dim_and_cpuinversecountsr/   r/   r0   _uniquez  sH   
	

2
$
r   c                 C  s   t | ||d |||S r;   r   )ro   rI   rK   r   r   r   r/   r/   r0   unique2  s   	r   selfr   r   r"   c                 C  s  ddl m} |jrtS | }t|dkdd  |dkr|n|| }||}t| }t|	 }	d }
||dkrG|
 ||	|   }
n||dk rY|
 || |	|   }
|
d u rr| jd u si| jjsm| jsmt|| j }
||= |	|= |
d u rtd|||	|
S )Nr   guard_or_falsec                   S  r   )Nz-select() cannot be applied to a 0-dim tensor.r/   r/   r/   r/   r0   r     s    zmeta_select.<locals>.<lambda>z#new_storage_offset must not be None)r   r   	is_sparseNotImplementedr   rA   _check_indexr   r]   stridestorage_offsetr   allow_scalar_outputsr   r   rO   
as_strided)ro   rI   r   r   r   r   ndimr   new_size
new_stridenew_storage_offsetr/   r/   r0   meta_select  s<   


r   c                 C  s,   t | |||dkr
|n|t|jd |||S )Nr   rM   )r   r   r   )ro   rI   rK   r   r   r   r   r/   r/   r0   
unique_dim
  s   
r   c              
   C  s   t | |||d||ddS )NFTr   r   )ro   rI   rK   r   r   r   r/   r/   r0   r      s   		old_shapeSequence[IntLikeType]
old_stride	new_shapesize_obliviouslist[IntLikeType] | Nonec                   s  ddl m mm} d fdd}dfdd	}t| dkr'd
gt| S ttj| d
}||dk}|rA||| |rAt|S dgt| }	|rwt	t|d
 ddD ] }
|
t|d
 krcd
|	|
< qTt
||
d
  d
|	|
d
   |	|
< qT|	S t|d
 }
|d }d
}d
}t	t| d
 ddD ]m}|| | 9 }|dks|| |d
  d
kr|||d
  || kr|
dkr|||k s|||
 d
kr|| |	|
< |||
 9 }|
d
8 }
|
dkr|||k s|||
 d
ks|||kr d S |dkr||d
  }d
}d
}q|
dkrd S |	S )Nr   )r   guard_or_truesym_eqr   r   r+   c                      r | S | S r;   r/   r   )r   r   r/   r0   maybe_guard_or_falseB     z-_compute_stride.<locals>.maybe_guard_or_falsec                   r   r;   r/   r   )r   r   r/   r0   maybe_guard_or_trueH  r   z,_compute_stride.<locals>.maybe_guard_or_truerM   )r   r   r+   r   )r   r   r   r   rR   r   operatormulr]   ranger   )r   r   r   r   r   r   r   r   
zero_numelr   view_dchunk_base_stridetensor_numel
view_numeltensor_dr/   )r   r   r   r0   _compute_stride6  sj   



r  atorch.Tensorr   ShapeType | tuple[ShapeType]c                   sd   ddl m  tj|dd}t fdd|  D p1t fdd|  D p1t fdd|D S )	Nr   has_guarding_hintFvalidatec                 3      | ]} | V  qd S r;   r/   r=   sr  r/   r0   r?     rL   z+_view_has_unbacked_input.<locals>.<genexpr>c                 3  r  r;   r/   r  r  r/   r0   r?     rL   c                 3  r  r;   r/   r  r  r/   r0   r?     rL   )r   r  utilsextract_shape_from_varargsrF   r   r   r  r   r/   r  r0   _view_has_unbacked_input  s   r  size_oblivious_enabled
allow_copyc                   s  ddl m} ddlm}m} tjddt   j	dkrA }D ]}t
|dk t
j|d}q&| u r?| S |S tdkrg } jD ]}t
|dk t
j|d}qL| u re| S |S ttjd}	t
  |	k fdd	 tt jkr|| jr| S |rt rnt rt}
 |
S t    |d
}|d ur |S |rt
jjjjst rt  d|dS |rt}
 j!t
j"d|
S d j d   d d}t#|)Nr   )view_ofr   r   Fr  rM   r   c                     s   d j  d dS )Nz&Could not reshape a tensor with shape  as a tensor with shape !)r   r/   r  r/   r0   r         z%_view_unbacked_meta.<locals>.<lambda>)r   )r  r  memory_formatz Cannot view a tensor with shape z and strides r  r  )$torch._primsr  r   r   r   r  r  
infer_sizer   r   rA   _check_refs	unsqueezerR   r   squeezer   r   r   r   r   r   r   r  r   r   fxexperimental_configbacked_size_obliviousr  _view_unbacked_metaclonecontiguous_format
ValueError)r  r   r  r  r  r   r   _alengthshape_numelstridesnew_stridesmsgr/   r  r0   r)    s`   


"
r)  FakeTensor | Exceptionc                 G  s|   |j s|jrtS tjg || R  }t|r,t| ||g|R  }tt	|j
tjdS t| |tt	|j
tjdg|R  S Nr  )r   	is_mkldnnr   r  r   r   r   
_view_metatyping_castr   r*  rA   r+  )ro   rI   r  r   viewr/   r/   r0   _reshape_copy  s   r9  r  c                G  sJ   t jjjjst||rttt|||dS ttt j	j
|g|R d|iS )Nr:  r  )rA   r%  r&  r'  r(  r  r7  r   r)  r"  _reshape_view_helper)ro   rI   r  r  r   r/   r/   r0   r6    s   	r6  )outr<  FakeTensor | Nonec                G  s6   t | ||g|R ddi}|d ur|S tdd |S )Nr  Tc                 S  s   | j tjdS r4  )r*  rA   r+  r   r/   r/   r0   r   $      z!_view_meta_copy.<locals>.<lambda>)r6  r   tree_map)ro   rI   r  r<  r   resultr/   r/   r0   _view_meta_copy  s   rA  repeatsoutput_sizeIntLikeType | Nonec                 C  sJ   |d u r | j d u s| j jst|| j  }ddlm} || ||S Nr   r   )r   r   r   r   r   r   r   )ro   rI   rB  rC  r   r/   r/   r0   repeat_interleave_tensor)  s   


rG  Bint | float | bool | torch.SymInt | torch.SymFloat | torch.SymBoolc                 C  s   |j  }d ur	|S | jd u s| jjs| jst|t|jr$| j }nt|jr/| j }nt	|jr:| j
 }ntd|j ||_ |S )Nz local_scalar_dense/item NYI for )	item_memor   r   r   r   r   create_unbacked_symfloatr   r   r   create_unbacked_symboolNotImplementedError)ro   rI   rK   r   r/   r/   r0   local_scalar_denseA  s"   



rM  list[FakeTensor]c                 C  s   t jjj|dS )NrM   )rA   opsr   r   r   unbind)ro   rI   rK   r/   r/   r0   nonzero_numpyZ  s   rQ  c                 C  s  | j d u s	| j jst||j }d u ruddlm}m} ddlm} ddl	m
} || s7| dkr7d}n;| j  }tjd }|| sNt| }nt|jj}	||	j|	j j}
t|
j|ritjd }n|
j}|||d ||_|j|| fd|ftjdS )Nr   r   IntInfinitybound_sympyrM   r   r   )r   r   r   nonzero_memor   r   r   torch.utils._sympy.numbersrS  torch.utils._sympy.value_rangesrU  r   r   r   r   r   mathprodr   nodeexprvar_to_rangerN   uppernew_empty_stridedr   rA   r   )ro   rI   rK   r   r   r   rS  rU  r   	prod_node
prod_ranger/   r/   r0   r   a  s0   
	


r   paddedoffsetstotal_Lc           	      C  s   t |dkrtdt | d|sD| jd u s| jjst|| j }tjd }ddlm	}m
} || s=t| }||d|d |g|jdd  R }||S )NrM   z&Only one jagged dim is supported, got z offsetsr   r   )minr      )rR   rO   r   r   r   r   r   r   r   r   r   r   r   r   r   )	ro   rI   rb  rc  rd  r   r   r   output_shaper/   r/   r0   _padded_dense_to_jagged_forward  s"   	



rh  r   c                 C  s   ddl m}m} |||dk|| kr|S |||dk ||  kr%||  S |||  k r.dS ||| kr6| S ||dkrBt|| S ||dk rPt||  dS d S )Nr   )r   sym_and)r   r   ri  rA   sym_minsym_max)r   r   r   ri  r/   r/   r0   _compute_slice_index  s   rl  rM   startendstepc                 C  s  ddl m}m} | j}	| }
|
dkrtdt| |}t| }t|	 }|dkr2td|d u r8dnt
|| |}||tjksJ|d u rN|| nt
|| |}d }|d ur|d ur|||krp|| | d | }n|||kryd}nt|| d}|| d | }|d u r|	d u rtd|	 }t|dk t||| k || | }|d ur| |||   }n|	d u rtd|	 }t|dk |||< |||< |jrtd||||S )Nr   )r   statically_known_truez,slice() cannot be applied to a 0-dim tensor.zslice step must be positiverM   z$Must have shape_env to create symintz<Slice decomposition for quantized tensors aren't implemented)r   r   rp  r   r   r   r   r]   r   r   rl  r   r   rA   rk  rO   r   r!  r   is_quantizedrL  r   )ro   rI   r   r   rm  rn  ro  r   rp  r   r   sizesr0  start_index	end_indexr   diffr   r   r/   r/   r0   slice_forward  sZ   
rv  maskc                 C  s   | j d u s	| j jst|| j  }tjd }ddlm}m} ddl	m
} ddlm}	 || s8t| }
nt|jj}|	|j|j j}t|j|rStjd }
n|j}
|
dkr\|
}|||d ||fS )NrM   r   r   rR  rT  rf  r   )r   r   r   r   r   r   r   r   r   rW  rS  rX  rU  r   r   rY  rZ  r   r[  r\  r]  rN   r^  r   )ro   rI   r   rw  r   r   r   r   rS  rU  num_elementsr`  ra  r/   r/   r0   masked_select  s(   


ry  )r2   layouttrr  torch.Size | Noner0  tuple[int, ...] | Noner   torch.dtype | Nonetorch.device | Nonerz  torch.layout | Nonec                C  s   |d ur|  |krtd| d|   |d ur,| |kr,td| d|  |d ur@|j|kr@td| d|j |d urT|j|krTtd| d|j |d urh|j|krjtd| d|j d S d S )Nz!Tensor sizes mismatch! Expected: z, Got: z#Tensor strides mismatch! Expected: z!Tensor dtype mismatch! Expected: z"Tensor layout mismatch! Expected: z"Tensor device mismatch! Expected: )r   rO   r   r   rz  r2   )ro   rI   r{  rr  r0  r   r2   rz  r/   r/   r0   assert_tensor_metadataJ  s6   


r  c                 C  s   t jj| jv S r;   )rA   r   data_dependent_outputr   r   r/   r/   r0   r   r  r>  c                 O  r   r;   )r   rr   r/   r/   r0   data_depr  s   r  indiceslist[FakeTensor | None]c                 C  s0   |D ]}|d ur|j tjtjfv rt| qd S r;   )r   rA   r4   uint8r   )rI   r   r  r   r/   r/   r0   check_no_bool_index_tensors{  s
   r  tuple[Any, ...]dict[str, Any]c                 C  s   t |||dd\}}|d j}t|  ||i |}t|s%||j}W d    n1 s/w   Y  ||d u r<|S t| ||S NTrt   rw   )r   r2   r   r8   r   r   r   )ro   rI   rp   rq   r|   r}   r   r<  r/   r/   r0   )run_and_return_new_tensor_of_input_device  s   


r  r   primsprimc                 C  s
   | j tv S r;   )	namespace_is_builtin_namespacesrg   r/   r/   r0   
is_builtin  r9   r  c                 C  s   t j|  dS )NMeta)rA   rB   ._dispatch_has_computed_kernel_for_dispatch_keyr   r   r/   r/   r0   r)     s   r)   c                 C  s   t | o|  dot| S )Nzaten::_foreach_)r  r   
startswithr)   r   r/   r/   r0   r     s    list[FakeTensor] | Nonec           
        s   dd t || D }zt|  ||i |}W d    n1 s$w   Y  W n ty5   t Y S w |s:|S |s@tdg }t|D ]\ }t	| fdd|D \}}	|
| j| || qF|S )Nc                 S  s6   g | ]}t |ttfrt|rt |d  tjr|qS )r   )rN   r]   r^   rR   rA   r   rJ   r/   r/   r0   
<listcomp>  s    z4foreach_run_and_map_input_device.<locals>.<listcomp>ztensor_lists must not be emptyc                   s   g | ]}|  qS r/   r/   )r=   tlir/   r0   r    r  )r   r   r   r   rL  r   rO   	enumerater   _find_common_devicera   r   r   )
ro   rI   rp   rq   tensor_listsout_metaout_fakemeta_tr2   r|   r/   r  r0    foreach_run_and_map_input_device  s0   
r  c           	      O  sj   ddl m} t|||dd\}}|d j}|  ||i |}||W  d    S 1 s.w   Y  d S )Nr   )meta_index_TensorTrt   rw   )torch._meta_registrationsr  r   r2   to)	ro   rI   rp   rq   r  r|   r}   r   r<  r/   r/   r0   index_tensor  s   

$r  5tuple[FakeTensor, FakeTensor, FakeTensor, FakeTensor]c                 O  sB   ddl m} |  ||i |W  d    S 1 sw   Y  d S )Nr   )meta_embedding_bag)r  r  )ro   rI   rp   rq   r  r/   r/   r0   embedding_bag  s   $r  c                 O  s   t | |||S r;   )r  rr   r/   r/   r0   multi_device_op_default  s   r  c                 O  sR   t |  ||i | W d    n1 sw   Y  t|||dd\}}|d S r  )r   r   )ro   rI   rp   rq   r|   r}   r/   r/   r0   multi_device_op_out  s   

r  c                   s   t  ||dd\}}|d |d jtjkp$jdko$ dk fdd t|  ||} tjj	u r>|d S |S )	NTrt   r   rw   r   rM   c                     s   d  d dj  dS )NzMismatching z device between self (z) and values ()r7   r/   rI   self_devicer   r/   r0   r     s    z index_put_impl.<locals>.<lambda>)
r   r   rA   r!  r   r   r  r   
index_put_r   )ro   rI   rp   rq   r|   r}   r<  r/   r  r0   index_put_impl  s   

r  c                 O  r   r;   )r   rr   r/   r/   r0   nested_tensors_unsupported  s   r  c                 C  s6   g | ]}|t jjt jjt jjt jjt jjfvr|qS r/   )r   	is_pinnedr   r  r2   prim_Device_nested_tensor_from_tensor_listr<  r   r/   r/   r0   r  )  s    r  c                 O  s   |t v rtd| d S )NzNYI: )_device_not_kwarg_opsrO   rr   r/   r/   r0   nyi(  s   r  KFakeTensor | tuple[FakeTensor | None, FakeTensor | None, FakeTensor | None]c              
     s  t |||dd\}}|d }|d }|j ~ |j}ddlm tfdd|jD o8tfdd|jD }	|	s>d }
nP|d	}t|d
 |d |d |d |d |d |d}|d u re|d|d< t	j
j||fi |}|dkr|js|js| d}|d}t	j
|||}
W d    n1 sw   Y  d fdd}t5 |di |}|tjju r|||
W  d    S ||d |
||d |
||d d fW  d    S 1 sw   Y  d S )NTrt   rw   weightr   r  c                 3  r   r;   r/   r  r  r/   r0   r?   N  s    zconv.<locals>.<genexpr>biasr   paddingdilation
transposedoutput_paddinggroups)r   r  r  r  r  r  r  
bias_sizes   rf  r{  torch.Tensor | Nonemem_fmttorch.memory_format | Noner+   r=  c                   s\   | d u r| S |d ur(|   dkr"|tjkr"| dj|dd} n| j|d} t|  S )Nr  rf  r  )r   rA   channels_lastr#  r  r$  r   )r{  r  )r2   ro   r/   r0   converts  s   zconv.<locals>.convertrM   )r{  r  r  r  r+   r=  r/   )r   r   r   r   r  allr   rD   r-   rA   rB   _select_conv_backendr5  is_xpu
contiguousr#  %_conv_determine_backend_memory_formatr   r   convolutionr   )ro   rI   rp   rq   r|   r}   input_r  k
all_hintedr  r  select_kwargsconv_backendr  r<  r/   )r2   ro   r  r0   conv<  sd   
$
	
,
$r  inputsweights	minlengthc                 C  sP   | j d u s	| j jst|| j  }ddlm} || t||k ||S rE  )	r   r   r   r   r   r   rA   r!  r   )ro   rI   r  r  r  r   r   r/   r/   r0   bincount  s   
	

r  lengthsbatch_firsttuple[FakeTensor, FakeTensor]c           
      C  st   | j d u s	| j jst|| j  }ddlm} || |s$|dd}|jdd  }||}||f}	||	fS )Nr   rF  rM   )	r   r   r   r   r   r   	transposer   r   )
ro   rI   r  r  r  new_batch_sizer   res_sizepacked_data
batch_sizer/   r/   r0   _pack_padded_sequence  s   
	

r  c                   rY   )NrZ   r[   r+   c                   s   | t  < | S r;   )FAST_OP_IMPLEMENTATIONS)rZ   r   r/   r0   rd     s   z-register_fast_op_impl.<locals>.impl_decoratorre   r/   )rI   rd   r/   r   r0   register_fast_op_impl  s   r  btuple[IntLikeType, ...]c           
        s   ddl m} t| }t|}t||}dg| }t|d ddD ]N |d   }|d | }|d | }	|dkr<| | nd|	dkrF||	 ndt|dkpY|dkpYk fdd |dkrjn| < q t|S )Nr   r   rM   r   c                     s   d d d  dS )NzThe size of tensor a (z#) must match the size of tensor b (z) at non-singleton dimension r  r/   r/   r  sizeAsizeBr/   r0   r     s
    zinfer_size.<locals>.<lambda>)r   r   rR   r   r   rA   r!  r^   )
r  r  r   dimsAdimsBr   expandedSizesoffsetdimAdimBr/   r  r0   r     s"   

r   slow_refCallable[..., Any]type_promotion_kindr   Callable[..., FakeTensor]c                   s   d
 fdd	}|S )Nmoder!   rp   r   rq   r+   r   c                   sp  d fdd}t d  }d }|D ]}t|tjr|jnd}|d u r'|}t||}q|d u r5td	d
dlm}m	}	 |D ]}t|tjrZt
|jt
|krZ||	|j|rZ nq?|dS td}
|
}d }d}|D ]/}t|tjswd}ql||
kr|jjdkr|j}|d u rtjkrd}ql|j}ql||jkrd}ql|rt|di\}}d
}d}|D ]2}t|tjsq||
kr| d
kr|j|
kr||kr|d  S |d7 }q|j|kr|d  S qd}d}t|r|D ]}t|tjsq|ot|tjd}|ot|tjd}q|rt d ttj||dtjd|dS |r4t d ttj||dtjd|dS |dS )Nr2  r   r+   r   c                   sD   t d|     i W  d    S 1 sw   Y  d S )Nzslow r   )r2  )rp   rq   r  r  r/   r0   slow  s   $z=make_fast_binary_impl.<locals>.fast_binary_impl.<locals>.slowzattempt fastr/   zfinal_shape must not be Noner   r  z#both tensors nontrivially broadcastrx   FTr  rM   errorr  zfast is_contiguousry   )r   r2   r  r7   zfast channels_lastzno contiguity match)r2  r   r+   r   )r   rN   rA   r   r   r   rO   r   r   r   rR   r2   r6   r   DEFAULTr   r   r   r8   r   r+  r  r   empty)r  rp   rq   r  operandsfinal_shaperb   r   r   r   rx   common_devicecommon_dtypehas_different_input_dtypesr|   current_cpu_scalars_on_non_cpumax_cpu_scalars_on_non_cpudefinitely_contiguousdefinitely_channels_lastr  r  )rp   rq   r  r0   fast_binary_impl  s   









z/make_fast_binary_impl.<locals>.fast_binary_impl)r  r!   rp   r   rq   r   r+   r   r/   )r  r  r  r/   r  r0   make_fast_binary_impl  s    r  r   include_realc              	   C  s   t  $ t|  tjjj|}W d    n1 sw   Y  W d    n1 s*w   Y  |r;t| ||j|j	dS t| ||jS )N)real_tensor)
r	   r   rA   rO  r   detachr   r   r2   r  )ro   r   r  r<  r/   r/   r0   fast_detach  s    r  $dict[OpOverload, Callable[..., Any]]c                  C  s   dd l } t| jjjjt| jj t| jjjjt| jj t| jjj	jt| jj	 t| jjj
jt| jj
tjd t| jjjjt tS )Nr   )r  )torch._refsr  rO  r   addr   r  r"  subr   divr   INT_TO_FLOATr   r   r  r  )rA   r/   r/   r0   r'     s$   


r'   )r*   r%   r+   r,   )r2   r3   r+   r4   )r:   r   r+   r4   )rI   r
   r+   r4   )rV   rW   r+   rX   )rb   r
   r+   r4   )rb   r
   r+   ri   )
ro   r!   rI   r
   rp   r   rq   r   r+   r   )
ro   r!   rI   r
   rp   r   rq   r   r+   r   )
ro   r!   rI   r
   rp   r   rq   r   r+   r4   r;   )
ro   r!   rI   r
   r   r   rp   r   r+   r   )ro   r!   rI   r
   r   r   r+   ri   )
ro   r!   rI   r
   r   r   rp   r   r+   r   )
ro   r!   rI   r
   rp   r   rq   r   r+   ri   )TFF)ro   r!   rI   r
   rK   r   r   r   r   r4   r   r4   r   r4   r   r4   r+   r   )ro   r!   rI   r
   rK   r   r   r4   r   r4   r   r4   r+   r   )ro   r!   rI   r
   r   r   r   r   r   r"   r+   r   )ro   r!   rI   r
   rK   r   r   r   r   r4   r   r4   r   r4   r+   r   )FFN)ro   r!   rI   r
   rK   r   r   r4   r   r4   r   r   r+   r   )F)
r   r   r   r   r   r   r   r4   r+   r   )r  r	  r   r
  r+   r4   )TF)
r  r	  r   r
  r  r4   r  r4   r+   r	  )
ro   r!   rI   r
   r  r   r   r   r+   r3  )ro   r!   rI   r
   r  r   r   r   r  r4   r+   r   )ro   r!   rI   r
   r  r   r   r"   r<  r=  r+   r   )
ro   r!   rI   r
   rB  r   rC  rD  r+   r   )ro   r!   rI   r
   rK   r   r+   rH  )ro   r!   rI   r
   rK   r   r+   rN  )ro   r!   rI   r
   rK   r   r+   r   )ro   r!   rI   r
   rb  r   rc  rN  rd  rD  r+   r   )r   r"   r   r"   r+   rD  )r   NNrM   )ro   r!   rI   r
   r   r   r   r   rm  r   rn  r   ro  r   r+   r   )
ro   r!   rI   r
   r   r   rw  r   r+   r   )NNN)ro   r!   rI   r
   r{  r   rr  r|  r0  r}  r   r~  r2   r  rz  r  r+   ri   )rI   r
   r   r   r  r  r+   ri   )
ro   r!   rI   r
   rp   r  rq   r  r+   r   )
ro   r!   rI   r
   rp   r   rq   r   r+   r  )
ro   r!   rI   r
   rp   r   rq   r   r+   r  )
ro   r!   rI   r
   rp   r   rq   r   r+   r  )Nr   )ro   r!   rI   r
   r  r   r  r=  r  r"   r+   r   )ro   r!   rI   r
   r  r   r  r   r  r4   r+   r  )rI   r
   r+   rX   )r  r   r  r   r+   r  )r  r  r  r   r+   r  )ro   r!   r   r   r  r4   r+   r   )r+   r  )
__future__r   	functoolsr   rY  r   r   r   typingr   r   r7  r   r   typing_extensionsr   rA   torch._custom_optorch._loggingtorch._prims_common_prims_commonr  torch._dispatch.pythonr	   
torch._opsr
   r   r   r   r   r   r   r   r   r   r   r   torch._subclasses.fake_tensorr   r   r   r   r   r   torch.fx.operator_schemasr   torch.utils._statsr   collections.abcr   r    r!   torch.typesr"   r   FakeTensorLiker#   r$   r%   _pytreer   __all__r\   r&   _opsrO  r   r1   r8   r   r   r<  	full_like	ones_like	rand_like	generatorgenerator_out
randn_likerandint_likeTensor_generator
Tensor_outTensor_generator_out	low_dtypelow_generator_dtypelow_dtype_outlow_generator_dtype_out
zeros_liker   r_  new_full	new_zerosnew_onesr{   _resize_output_r  
pin_memoryr  r2   r  r  _pin_memory_resize_outputr  _list_to_tensorrz   r<   cacherU   r_   rh   rn   __contains__rs   r   r   profilerr   r   r   r   r(   r   r   r   r   r   _unique2r   selectr   r   r   r   r  r  r)  r9  r8  _unsafe_viewr6  	view_copyrA  r   rG  item_local_scalar_denserM  rQ  r   rh  rl  slicerv  ry  _assert_tensor_metadatar  r  r  r  r  r  r)   r  r   r  _embedding_bagr  _unsafe_index_putcopycopy_slice_scatterdiagonal_scatterr  r  	index_putr  r  _nested_view_from_buffer_nested_view_from_buffer_copyr  r  r  convolution_backwardr  r  r  r  r  r   r  r  r  r'   r/   r/   r/   r0   <module>   s8   4 



	
 !"#$%&*



 
	

"
	
R

1
O
S



2(M+
'

&














P' 
