o
    ei                     @  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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/m0Z0 erd dl1m2Z2m3Z3 d dl&m4Z4 d dl5m6Z6 ee)ej7f Z8edZ9edZ:edZ;ejj<Z=g dZ>i Z?g Z@ejAjBjCZCdddZDdddZEeDg eCjFjGeCjFjHeCjIjGeCjIjHeCjJjGeCjJjHeCjKjGeCjKjLeCjKjHeCjKjMeCjNjGeCjNjLeCjNjHeCjNjMeCjOjGeCjOjLeCjOj7eCjOjPeCjOjQeCjOjReCjOjHeCjOjMeCjOjSeCjOjTeCjOjUeCjOjVeCjWjGeCjWjHeCjXjGeCjXjHeCjYjGeCjYjHeCjZjGeCjZjHeCj[jGeCj[jHeCj\jGeCj\jHR  Z]eDeCj^jGeCj_jGeCj_jHeCj`jGeCjajbeCjajceCjdjGeCjejGeCjejHeCjfjGeCjfjHZgeCjhfZiddd Zjejkdd#d$Zldd(d)Zmdd+d,Zndd.d/Zoeme?jpd d4d5Zqemelemg e]dd7d8ZremeCjdjGdd9d:ZsemejBjtjujG	ddd>d?ZuemejBjtjvjGddAdBZvemejBjtjwjG	dddCdDZwemeCjajcemeCjajbddEdFZxddGdHZyemeyddIdJZzemeCj{jGddKdLZ{emeCj|jGddMdNZ|emdOdP ddQdRZ}	S	T	TddTdUd	d^d_Z~emeCjjG	S	T	Tdd
d`daZemeCjjddfdgZemeCjjG	S	T	TdddhdiZemeCjjG	T	T	dddjd\Z	TdddqdrZddwdxZ	Sdddzd{ZemeCjjGdd}d~ZemeCjjGemeCjjGdddZemeCjjGdddddZemeCjj7	ddddZemejBjCjjGemejBjCjjGdddZemejBjCjjGdddZemejBjCjjGdddZemejBjCjjG	ddddZdddZemejBjCjj7	 			ddddZemejBjCjjGdddZemejBjCjjG			d dddd!ddZemddP dddZd"ddZd#ddZeDdddZdddZdddZemddP d$ddƄZemeCjj7dddȄZemeCjjGd%dd˄ZemeCjjGemeCjjGemeCjjGemeCjjGemeCjjGddd̈́ZemeCjjHemeCjjHdddτZemeCjjGemeCjjGdddфZemeCj_jGemeCj_jHemeCjjGemeCjjGdddӄZemddՄ egD dddׄZemeCjjGeCjjGgd&ddڄZemejBjCjjG		 d'd(dd߄ZemejBjCjjGd)ddZi Zd*ddZd+ddZejfd,ddZ	Tdd-ddZejkd.ddZdS (/      )annotationsN)reduce)AnycastTYPE_CHECKINGTypeVarUnion)	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+    r0   f/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/_subclasses/fake_impls.pyordered_setI   s   r2   devicetorch.deviceboolc                 C  s
   | j dkS )Nhpu)typer3   r0   r0   r1   is_noncontiguous_supportedO      
r9   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er0   r0   r1   	<genexpr>       
z(contains_tensor_types.<locals>.<genexpr>)torch_C
TensorTypegetisSubtypeOfanycontainedTypes)r;   tensor_typer0   r0   r1   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=   r7   r>   argr0   r0   r1   r@          z)_is_tensor_constructor.<locals>.<genexpr>F   r   )
isinstancer   AssertionErrorr7   _schemarG   	argumentslenreturnsrB   rC   rD   rE   )rJ   schemar0   r0   r1   _is_tensor_constructor   s   
$rV   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 )rO   r   op_implementations_dictrP   listtupleregister_op_implcallabler7   r'   append)r[   oprW   r0   r1   impl_decorator   s   
z(register_op_impl.<locals>.impl_decoratorr[   r\   r,   r\   r0   )rW   re   r0   rd   r1   r`      s   r`   rc   c                 C  s   | t v S r<   r]   rc   r0   r0   r1   _is_op_registered_to_fake_rule   s   ri   Nonec                 C  s:   t | d  tD ]\}}|| u rt||f  d S qd S r<   )r]   popr'   remove)rc   checkimplr0   r0   r1   _deregister_op_impl   s   ro   	fake_moder"   argskwargsc                 O  s   t | | |g|R i |S r<   rg   rp   rJ   rq   rr   r0   r0   r1   #dispatch_to_op_implementations_dict   s   rt   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rq   rr   normalize_to_only_use_kwargsnamesinputcpur0   r3   meta)
_non_kwarg_device_constructorsrP   r   r   _like_tensor_constructorsr3   rk   rB   r   r   )	rp   rJ   rq   rr   _
new_kwargsdefault_device
out_devicerr0   r0   r1   constructors   s*   



r   c                 O  sT   t |||dd\}}|d}t|  ||}W d    |S 1 s#w   Y  |S )NTrv   rx   )r   rk   r   )rp   rJ   rq   rr   r}   r~   inpr   r0   r0   r1   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 )Nrz   r8   ry   )r   rB   
empty_liker   r3   )rp   rJ   r   rq   real_handlemeta_handler0   r0   r1   _record_function_enter  s
   
r   handlec                 C  s   d S r<   r0   )rp   rJ   r   r0   r0   r1   _record_function_exit  s   r   c                 C  s6   t |  |||W  d    S 1 sw   Y  d S r<   r   )rp   rJ   r   rq   r0   r0   r1   _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   r3   rx   rz   )r   r3   rB   rk   r   fake_tensor_converterfrom_meta_and_device)
rp   rJ   rq   rr   r}   r~   input_devicer   r   r   r0   r0   r1   non_kwarg_to#  s   


r   c                 C     dS )NFr0   rh   r0   r0   r1   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,   r5   c                 S  s.   t | tr| jS t | tjtjtjfrdS dS )NTF)rO   r   _has_symbolic_sizes_stridesrB   SymIntSymFloatSymBoolr   r0   r0   r1   is_symbolicB  s
   
z3workaround_stride_incorrect_op.<locals>.is_symbolicc                 3  s    | ]} |V  qd S r<   r0   r>   r   r   r0   r1   r@   K  rA   z1workaround_stride_incorrect_op.<locals>.<genexpr>z2Cannot run fallback kernel for stride_incorrect_op)r   r   r,   r5   )
allow_fallback_kernelsrG   	itertoolschainvaluespytreetree_flattenr   RuntimeErrorr   )rp   rJ   rq   rr   require_dynamic	flat_args	args_specr0   r   r1   workaround_stride_incorrect_op<  s   

r   c                 O  s:   t |  ||i |W  d    S 1 sw   Y  d S r<   r   rs   r0   r0   r1   
resize_as__  s   
$r   c                 O  s   t | |g|R i |S r<   )r   rs   r0   r0   r1   (_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<   )
rB   Tagdynamic_output_shapetagsatenindexTensornonzerodefaultrepeat_interleaverJ   r0   r0   r1   <lambda>p  s    r   c                 O     t |r<   )r   rs   r0   r0   r1   	dyn_shapeo  s   r   TFunique_consecutiverL   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||d u r|jn|j| f}n|d}|| |s|r||d u r|d jn|d j| f}n|d}|| t|S )Nr   _constrain_range_for_sizehas_free_symbolsrN   maxry   )	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_devicerB   r3   rb   r_   )rp   rJ   rL   r   r   r   r   r   nnzr   r   maxvalr   retreturn_if_dim_and_cpuinversecountsr0   r0   r1   _uniquez  s@   
	

2"

*

r   c                 C  s   t | ||d |||S r<   r   )rp   rJ   rL   r   r   r   r0   r0   r1   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.r0   r0   r0   r0   r1   r     s    zmeta_select.<locals>.<lambda>z#new_storage_offset must not be None)r   r   	is_sparseNotImplementedr   rB   _check_indexr   r^   stridestorage_offsetr   allow_scalar_outputsr   r   rP   
as_strided)rp   rJ   r   r   r   r   ndimr   new_size
new_stridenew_storage_offsetr0   r0   r1   meta_select  s<   


r   c                 C  s,   t | |||dkr
|n|t|jd |||S )Nr   rN   )r   r   r   )rp   rJ   rL   r   r   r   r   r0   r0   r1   
unique_dim  s   
r   c              
   C  s   t | |||d||ddS )NFTr   r   )rp   rJ   rL   r   r   r   r0   r0   r1   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<   r0   r   )r   r   r0   r1   maybe_guard_or_false>     z-_compute_stride.<locals>.maybe_guard_or_falsec                   r   r<   r0   r   )r   r   r0   r1   maybe_guard_or_trueD  r   z,_compute_stride.<locals>.maybe_guard_or_truerN   )r   r   r,   r   )r   r   r   r   rS   r   operatormulr^   ranger   )r   r   r   r   r   r   r   r   
zero_numelr   view_dchunk_base_stridetensor_numel
view_numeltensor_dr0   )r   r   r   r1   _compute_stride2  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_hintFvalidatec                 3      | ]} | V  qd S r<   r0   r>   sr  r0   r1   r@     rM   z+_view_has_unbacked_input.<locals>.<genexpr>c                 3  r  r<   r0   r  r  r0   r1   r@     rM   c                 3  r  r<   r0   r  r  r0   r1   r@     rM   )r   r	  utilsextract_shape_from_varargsrG   r   r   r  r   r0   r  r1   _view_has_unbacked_input  s   r  size_oblivious_enabledc                   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 d j d   d d}t!|)Nr   )view_ofr   r   Fr
  rN   r   c                     s   d j  d dS )Nz&Could not reshape a tensor with shape  as a tensor with shape !)r   r0   r  r0   r1   r         z%_view_unbacked_meta.<locals>.<lambda>)r   )r  z Cannot view a tensor with shape z and strides r  r  )"torch._primsr  r   r   r   r  r  
infer_sizer   r   rB   _check_refs	unsqueezerS   r   squeezer   r   r   r   r   r   r   r  r   r   fxexperimental_configbacked_size_obliviousr  _view_unbacked_meta
ValueError)r  r   r  r  r   r   _alengthshape_numelstridesnew_stridesmsgr0   r  r1   r#    sV   


"
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 Nmemory_format)r   	is_mkldnnr   r  r  r   r   
_view_metatyping_castr   clonerB   contiguous_format)rp   rJ   r  r   viewr0   r0   r1   _reshape_copy  s   r5  c                 G  sF   t jjjjst||rttt||S ttt j	j
|g|R ddiS )N
allow_copyF)rB   r  r   r!  r"  r  r1  r   r#  r  _reshape_view_helper)rp   rJ   r  r   r0   r0   r1   r0    s   r0  )outr8  FakeTensor | Nonec                G  s0   t | ||g|R  }|d ur|S tdd |S )Nc                 S  s   | j tjdS r,  )r2  rB   r3  r   r0   r0   r1   r         z!_view_meta_copy.<locals>.<lambda>)r0  r   tree_map)rp   rJ   r  r8  r   resultr0   r0   r1   _view_meta_copy  s   r=  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   )rp   rJ   r>  r?  r   r0   r0   r1   repeat_interleave_tensor  s   


rC  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   dtypecreate_unbacked_symfloatr   r   r   create_unbacked_symboolNotImplementedError)rp   rJ   rL   r   r0   r0   r1   local_scalar_dense,  s"   



rJ  list[FakeTensor]c                 C  s   t jjj|dS )NrN   )rB   opsr   r   r   unbind)rp   rJ   rL   r0   r0   r1   nonzero_numpyE  s   rN  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_sympyrN   r   )rF  )r   r   r   nonzero_memor   r   r   torch.utils._sympy.numbersrP  torch.utils._sympy.value_rangesrR  r   r   r   r   r   mathprodr   nodeexprvar_to_rangerO   uppernew_empty_stridedr   rB   int64)rp   rJ   rL   r   r   r   rP  rR  r   	prod_node
prod_ranger0   r0   r1   r   L  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 )NrN   z&Only one jagged dim is supported, got z offsetsr   r   )minr      )rS   rP   r   r   r   r   r   r   r   r   r   r   r   r   r   )	rp   rJ   r`  ra  rb  r   r   r   output_shaper0   r0   r1   _padded_dense_to_jagged_forward  s"   	



rf  r   c                 C  sp   ddl m}m} |||dk|| kr|S |||dk ||  kr%||  S |||  k r.dS ||| kr6| S d S )Nr   )r   sym_and)r   r   rg  )r   r   r   rg  r0   r0   r1   _compute_slice_index  s   rh  rN   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rx|d urx|||krp|| | d | }n|||krxd}|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 positiverN   z$Must have shape_env to create symintz<Slice decomposition for quantized tensors aren't implemented)r   r   rl  r   r   r   r   r^   r   r   rh  r   r   rP   r   rB   r  r   is_quantizedrI  r   )rp   rJ   r   r   ri  rj  rk  r   rl  r   r   sizesr(  start_index	end_indexr   r   r   r0   r0   r1   slice_forward  sV   
rq  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 )NrN   r   r   rO  rQ  rd  r   )r   r   r   r   r   r   r   r   r   rT  rP  rU  rR  r   r   rV  rW  r   rX  rY  rZ  rO   r[  r   )rp   rJ   r   rr  r   r   r   r   rP  rR  num_elementsr^  r_  r0   r0   r1   masked_select  s(   


rt  )r3   layouttrn  torch.Size | Noner(  tuple[int, ...] | NonerF  torch.dtype | Nonetorch.device | Noneru  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   rP   r   rF  ru  r3   )rp   rJ   rv  rn  r(  rF  r3   ru  r0   r0   r1   assert_tensor_metadata*  s6   


r|  c                 C  s   t jj| jv S r<   )rB   r   data_dependent_outputr   r   r0   r0   r1   r   R  r:  c                 O  r   r<   )r   rs   r0   r0   r1   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<   )rF  rB   r5   uint8r   )rJ   r   r  r   r0   r0   r1   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 NTru   rx   )r   r3   r   r9   r   r   r   )rp   rJ   rq   rr   r}   r~   r   r8  r0   r0   r1   )run_and_return_new_tensor_of_input_devicec  s   


r  r   primsprimc                 C  s
   | j tv S r<   )	namespace_is_builtin_namespacesrh   r0   r0   r1   
is_builtin{  r:   r  c                 C  s   t j|  dS )NMeta)rB   rC   ._dispatch_has_computed_kernel_for_dispatch_keyr   r   r0   r0   r1   r*     s   r*   c                 C  s   t | o|  dot| S )Nzaten::_foreach_)r  r   
startswithr*   r   r0   r0   r1   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   )rO   r^   r_   rS   rB   r   rK   r0   r0   r1   
<listcomp>  s    z4foreach_run_and_map_input_device.<locals>.<listcomp>ztensor_lists must not be emptyc                   s   g | ]}|  qS r0   r0   )r>   tlir0   r1   r    r  )r   r   r   r   rI  r   rP   	enumerater   _find_common_devicerb   r   r   )
rp   rJ   rq   rr   tensor_listsout_metaout_fakemeta_tr3   r}   r0   r  r1    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_TensorTru   rx   )torch._meta_registrationsr  r   r3   to)	rp   rJ   rq   rr   r  r}   r~   r   r8  r0   r0   r1   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  )rp   rJ   rq   rr   r  r0   r0   r1   embedding_bag  s   $r  c                 O  s   t | |||S r<   )r  rs   r0   r0   r1   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   )rp   rJ   rq   rr   r}   r~   r0   r0   r1   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 )	NTru   r   rx   r   rN   c                     s   d  d dj  dS )NzMismatching z device between self (z) and values ()r8   r0   rJ   self_devicer   r0   r1   r     s    z index_put_impl.<locals>.<lambda>)
r   r   rB   r  r   r   r  r   
index_put_r   )rp   rJ   rq   rr   r}   r~   r8  r0   r  r1   index_put_impl  s   

r  c                 O  r   r<   )r   rs   r0   r0   r1   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 r0   )r   	is_pinnedr   r  r3   prim_Device_nested_tensor_from_tensor_listr8  r   r0   r0   r1   r  	  s    r  c                 O  s   |t v rtd| d S )NzNYI: )_device_not_kwarg_opsrP   rs   r0   r0   r1   nyi  s   r  KFakeTensor | tuple[FakeTensor | None, FakeTensor | None, FakeTensor | None]c                   s  t |||dd\}}|d j  |d j}|d jd }ddlm} ||s+d }	n|tjju r;t	j
jdi |}
n"t	j
j|d |d d |d |d |d	 |d
 |d |d |d d
}
|dkr|d js|d js|d  d|d< |d d|d< t|d dkr|d dd |d dd |d	 dd |d dd t	j
|d |d |
}	|dkr|d js|d js|d d|d< |d d|d< t|d dkr|d d |d d |d	 d |d d W d    n	1 sw   Y  d fdd}t6 |di |}|tjju r.|||	W  d    S ||d |	||d |	||d d fW  d    S 1 sMw   Y  d S )NTru   rx   weightr   r  r   paddingdilation
transposedoutput_paddinggroups
bias_sizes)biasr   r  r  r  r  r  r     rd  rN   rv  torch.Tensor | Nonemem_fmttorch.memory_format | Noner,   r9  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  rd  r-  )r   rB   channels_lastr  r  r  r   )rv  r  r3   rp   r0   r1   convertb  s   zconv.<locals>.convertr0   )rv  r  r  r  r,   r9  )r   r   r   r   r   r	  r   convolutionr   rB   rC   _select_conv_backendr/  is_xpu
contiguousr  rS   insert%_conv_determine_backend_memory_formatr  rk   r   )rp   rJ   rq   rr   r}   r~   kbatchr	  r  conv_backendr  r8  r0   r  r1   conv  s   


=
&r  inputsweights	minlengthc                 C  sP   | j d u s	| j jst|| j  }ddlm} || t||k ||S rA  )	r   r   r   r   r   r   rB   r  r   )rp   rJ   r  r  r  r   r   r0   r0   r1   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   rB  rN   )	r   r   r   r   r   r   	transposer   r   )
rp   rJ   r  r  r  new_batch_sizer   res_sizepacked_data
batch_sizer0   r0   r1   _pack_padded_sequence  s   
	

r  c                   rZ   )Nr[   r\   r,   c                   s   | t  < | S r<   )FAST_OP_IMPLEMENTATIONS)r[   r   r0   r1   re     s   z-register_fast_op_impl.<locals>.impl_decoratorrf   r0   )rJ   re   r0   r   r1   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   rN   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  r0   r0   r  sizeAsizeBr0   r1   r     s
    zinfer_size.<locals>.<lambda>)r   r   rS   r   r   rB   r  r_   )
r  r  r   dimsAdimsBr   expandedSizesoffsetdimAdimBr0   r  r1   r    s"   

r  slow_refCallable[..., Any]type_promotion_kindr   Callable[..., FakeTensor]c                   s   d
 fdd	}|S )Nmoder"   rq   r   rr   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 )Nr*  r   r,   r   c                   sD   t d|     i W  d    S 1 sw   Y  d S )Nzslow r   )r*  )rq   rr   r  r  r0   r1   slow  s   $z=make_fast_binary_impl.<locals>.fast_binary_impl.<locals>.slowzattempt fastr0   zfinal_shape must not be Noner   r  z#both tensors nontrivially broadcastry   FTr  rN   errorr-  zfast is_contiguousrz   )rF  r3   r.  r8   zfast channels_lastzno contiguity match)r*  r   r,   r   )r   rO   rB   r   r   r  rP   r   r   r   rS   r3   r7   r   DEFAULTrF  r   r   r9   r   r3  r  r   empty)r  rq   rr   r  operandsfinal_shaperc   r   r   r   ry   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  )rq   rr   r  r1   fast_binary_impl  s   









z/make_fast_binary_impl.<locals>.fast_binary_impl)r  r"   rq   r   rr   r   r,   r   r0   )r  r  r  r0   r  r1   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   rB   rL  r   detachr   r   r3   r  )rp   r   r  r8  r0   r0   r1   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  rL  r   addr   r  r  subr   divr   INT_TO_FLOATr  r   r  r  )rB   r0   r0   r1   r(     s$   


r(   )r+   r&   r,   r-   )r3   r4   r,   r5   )r;   r   r,   r5   )rJ   r   r,   r5   )rW   rX   r,   rY   )rc   r   r,   r5   )rc   r   r,   rj   )
rp   r"   rJ   r   rq   r   rr   r   r,   r   )
rp   r"   rJ   r   rq   r   rr   r   r,   r   )
rp   r"   rJ   r   rq   r   rr   r   r,   r5   r<   )
rp   r"   rJ   r   r   r   rq   r   r,   r   )rp   r"   rJ   r   r   r   r,   rj   )
rp   r"   rJ   r   r   r   rq   r   r,   r   )
rp   r"   rJ   r   rq   r   rr   r   r,   rj   )TFF)rp   r"   rJ   r   rL   r   r   r   r   r5   r   r5   r   r5   r   r5   r,   r   )rp   r"   rJ   r   rL   r   r   r5   r   r5   r   r5   r,   r   )rp   r"   rJ   r   r   r   r   r   r   r#   r,   r   )rp   r"   rJ   r   rL   r   r   r   r   r5   r   r5   r   r5   r,   r   )FFN)rp   r"   rJ   r   rL   r   r   r5   r   r5   r   r   r,   r   )F)
r   r   r   r   r   r   r   r5   r,   r   )r  r  r   r  r,   r5   )T)r  r  r   r  r  r5   r,   r  )
rp   r"   rJ   r   r  r   r   r   r,   r+  )
rp   r"   rJ   r   r  r   r   r   r,   r   )rp   r"   rJ   r   r  r   r   r#   r8  r9  r,   r   )
rp   r"   rJ   r   r>  r   r?  r@  r,   r   )rp   r"   rJ   r   rL   r   r,   rD  )rp   r"   rJ   r   rL   r   r,   rK  )rp   r"   rJ   r   rL   r   r,   r   )rp   r"   rJ   r   r`  r   ra  rK  rb  r@  r,   r   )r   r#   r   r#   r,   r@  )r   NNrN   )rp   r"   rJ   r   r   r   r   r   ri  r   rj  r   rk  r   r,   r   )
rp   r"   rJ   r   r   r   rr  r   r,   r   )NNN)rp   r"   rJ   r   rv  r   rn  rw  r(  rx  rF  ry  r3   rz  ru  r{  r,   rj   )rJ   r   r   r   r  r  r,   rj   )
rp   r"   rJ   r   rq   r  rr   r  r,   r   )
rp   r"   rJ   r   rq   r   rr   r   r,   r  )
rp   r"   rJ   r   rq   r   rr   r   r,   r  )
rp   r"   rJ   r   rq   r   rr   r   r,   r  )Nr   )rp   r"   rJ   r   r  r   r  r9  r  r#   r,   r   )rp   r"   rJ   r   r  r   r  r   r  r5   r,   r  )rJ   r   r,   rY   )r  r   r  r   r,   r  )r  r  r  r   r,   r  )rp   r"   r   r   r  r5   r,   r   )r,   r  )
__future__r   	functoolsr   rV  r   r   r   typingr   r   r1  r   r   r   typing_extensionsr	   rB   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'   _opsrL  r   r2   r9   r   r   r8  	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  r3   r  r  _pin_memory_resize_outputr  _list_to_tensorr{   r=   cacherV   r`   ri   ro   __contains__rt   r   r   profilerr   r   r   r   r)   r   r   r   r   r   _unique2r   selectr   r   r   r   r  r  r#  r5  r4  _unsafe_viewr0  	view_copyr=  r   rC  item_local_scalar_denserJ  rN  r   rf  rh  slicerq  rt  _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(   r0   r0   r0   r1   <module>   s4   4 


	
 !"#$%&*





 
	


"
	
N

1
O
I



2(G+
'


&



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