o
     Ǝi                     @   s  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 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 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	jj'Z(g d
Z)i Z*g Z+e	j,j-j.Z.dd Z/dd Z0e/e.j1j2e.j1j3e.j4j2e.j4j3e.j5j2e.j5j3e.j6j2e.j6j3e.j7j2e.j7j3e.j8j2e.j8j9e.j8j:e.j8j3e.j8j;e.j8j<e.j=j2e.j=j3e.j>j2e.j>j3e.j?j2e.j?j3e.j@j2e.j@j3e.jAj2e.jAj3e.jBj2e.jBj3ZCe/e.jDj2e.jEj2e.jEj3e.jFj2e.jGjHe.jGjIe.jJj2e.jKj2e.jKj3e.jLj2e.jLj3ZMe.jNfZOdd ZPe jQdefddZRdeeegeSf ef fddZTdd ZUdd ZVeTe*jWdd ZXeTeReTg eCdd ZYeTe.jJj2dd  ZZeTe.jGjIeTe.jGjHd!d" Z[d#d$ Z\eTe\d%d& Z]eTe.j^j2d'd( Z^eTe.j_j2d)d* Z_eTd+d, d-d. Z`	/	0	0dd0d1d2d3ZaeTe.jbj2	0dd4d5ZceTe.jdjed6d7 ZfeTe.jgj2	0dd8d9ZgeTe.jhj2dd:d;Zidd<d=Zjd>d? Zkdd@dAZleTe.jmj2eTe.jnj2dBdC ZoeTe.jpj2ddDdEdFZqeTe.jrj9ddGdHZseTe	j-j.jtj2eTe	j-j.juj2dIdJ ZveTe	j-j.jwj2dKdL ZweTe	j-j.jxj2dMdN ZxeTe	j-j.jyj2ddOdPZyeTe	j-j.jzj2dQdR ZzeTe	j-j.j{j2			ddddS	ddUdVZ|eTdWd, dXdY Z}dZd[ Z~d\d] Ze/d^d_d`Zdadb Zdcdd ZeTded, dfdg ZeTe.jj9dhdi ZeTe.jj2djdk ZeTe.jj2eTe.jj2eTe.jj2eTe.jj2dldm ZeTe.jj3eTe.jj3dndo ZeTe.jj2eTe.jj2dpdq ZeTe.jEj2eTe.jEj3eTe.jj2eTe.jj2drds ZeTdtdu eMD dvdw ZeTe.jj2e.jj2gdxdy ZeTe	j-j.jj2ddzd{ZeTe	j-j.jj2d|d} Zi Zdefd~dZdd ZejfddZdddZe jQdd ZdS )    N)reduce)CallableUnion)no_python_dispatcher)
OpOverload)	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)DataDependentOutputExceptionDynamicOutputShapeException
FakeTensorin_kernel_invocation_managerrun_fallback_kernelUnsupportedOperatorException)normalize_functioncount_label)op_implementations_checksget_fast_op_implsstride_incorrect_ophas_metac                  G   s   t | dS )NT)dictfromkeys)items r    X/home/jeff/fluffinator/venv/lib/python3.10/site-packages/torch/_subclasses/fake_impls.pyordered_set8   s   r"   c                 C   s
   | j dkS )Nhpu)typedevicer    r    r!   is_noncontiguous_supported>      
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    r!   	<genexpr>v       
z(contains_tensor_types.<locals>.<genexpr>)torch_C
TensorTypegetisSubtypeOfanycontainedTypes)r$   tensor_typer    r    r!   r*   t   s   r*   funcc                 C   sR   t | tsJ | j}tdd |jD rdS t|jdko(|jd jtj	j
 u S )Nc                 s   s    | ]}t |jV  qd S r)   )r*   r$   r+   argr    r    r!   r-          z)_is_tensor_constructor.<locals>.<genexpr>F   r   )
isinstancer   _schemar4   	argumentslenreturnsr$   r/   r0   r1   r2   )r7   schemar    r    r!   _is_tensor_constructor{   s   $rB   run_impl_checkc                        fdd}|S )Nc                    sr   t  tr tvsJ d  | t < | S t  ttfr* D ]}t||  q| S t s0J t | f | S )Nzduplicate registration: )	r<   r   op_implementations_dictlisttupleregister_op_implcallabler   append)op_imploprC   r    r!   impl_decorator   s   

z(register_op_impl.<locals>.impl_decoratorr    )rC   rN   r    rM   r!   rH      s   rH   c                 C   s   | t v S r)   rE   rL   r    r    r!   _is_op_registered_to_fake_rule   s   rQ   c                 C   s<   | t v rt | = tD ]\}}|| u rt||f  d S q	d S r)   )rE   r   remove)rL   checkimplr    r    r!   _deregister_op_impl   s   rU   c                 O   s   t | | |g|R i |S r)   rO   	fake_moder7   argskwargsr    r    r!   #dispatch_to_op_implementations_dict   s   rZ   c           	      O   s   |t vsJ t|||dd\}}d|v rtd|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 sZw   Y  t| ||S )
NTrX   rY   normalize_to_only_use_kwargsnamesz+torch.compile doesn't support named tensorsinputcpur    r&   meta)	_non_kwarg_device_constructorsr   r   _like_tensor_constructorsr&   popr/   r   r   )	rW   r7   rX   rY   _
new_kwargsdefault_device
out_devicerr    r    r!   constructors   s(   



ri   c                 O   sT   t |||dd\}}|d}t|  ||}W d    |S 1 s#w   Y  |S )NTr\   r^   )r   rc   r   )rW   r7   rX   rY   rd   re   inprh   r    r    r!   non_kwarg_is_pinned   s   




rl   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 )NTrj   r&   r^   r`   )r   r&   r/   rc   r   fake_tensor_converterfrom_meta_and_device)
rW   r7   rX   rY   rd   re   input_devicerg   rk   rh   r    r    r!   non_kwarg_to   s   


rp   c                 C      dS )NFr    rP   r    r    r!   r      s   r   c                    s^   dd  | j r+t fddt|| D }|s+t||f\}}t| |||d S t|)Nc                 S   s.   t | tr| jS t | tjtjtjfrdS dS )NTF)r<   r   _has_symbolic_sizes_stridesr/   SymIntSymFloatSymBoolxr    r    r!   is_symbolic   s
   
z3wordaround_stride_incorrect_op.<locals>.is_symbolicc                 3   s    | ]} |V  qd S r)   r    r+   rw   rx   r    r!   r-      r.   z1wordaround_stride_incorrect_op.<locals>.<genexpr>)	allow_fallback_kernelsr4   	itertoolschainvaluespytreetree_flattenr   r   )rW   r7   rX   rY   require_dynamic	flat_args	args_specr    rz   r!   wordaround_stride_incorrect_op   s   r   c                 O   s:   t |  ||i |W  d    S 1 sw   Y  d S r)   )r   rV   r    r    r!   
resize_as_  s   
$r   c                 O   s   t | |g|R i |S r)   )ri   rV   r    r    r!   (_sparse_coo_tensor_with_dims_and_tensors  s   r   c                 C   s(   t jj| jv o| tjjtjjtj	jfvS r)   )
r/   Tagdynamic_output_shapetagsatenindexTensornonzerodefaultrepeat_interleaver7   r    r    r!   <lambda>  s    r   c                 O      t |r)   )r   rV   r    r    r!   	dyn_shape  s   r   TFunique_consecutivec                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_symbolsr;   maxr_   )	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_devicer/   r&   rJ   rG   )rW   r7   r9   dimsortedreturn_inversereturn_countsr   nnzr   r   maxvalr   retreturn_if_dim_and_cpuinversecountsr    r    r!   _unique  s@   
	

2"

*

r   c                 C   s   t | ||d |||S r)   r   )rW   r7   r9   r   r   r   r    r    r!   unique2i  s   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s~J |||	|
S )Nr   guard_or_falsec                   S   rq   )Nz-select() cannot be applied to a 0-dim tensor.r    r    r    r    r!   r   z  s    zmeta_select.<locals>.<lambda>)r   r   	is_sparseNotImplementedr   r/   _check_indexr   rF   stridestorage_offsetr   allow_scalar_outputsr   r   
as_strided)rW   r7   selfr   r   r   ndimr   new_size
new_stridenew_storage_offsetr    r    r!   meta_selectp  s:   


r   c                 C   s,   t | |||dkr
|n|t|jd |||S )Nr   r;   )r   r   r   )rW   r7   r9   r   r   r   r   r    r    r!   
unique_dim  s   r   c              
   C   s   t | |||d||ddS )NFTr   r   )rW   r7   r9   r   r   r   r    r    r!   rd     s   rd   c                    s  ddl m mm}  fdd}fdd}t| dkr%dgt| S ttj| d}||dk}|r=||| |r=|S dgt| }	|rstt|d ddD ] }
|
t|d kr_d|	|
< qPt	||
d  d|	|
d   |	|
< qP|	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rd S |	S )	Nr   )r   guard_or_truesym_eqc                       r | S | S r)   r    rv   )r   size_obliviousr    r!   maybe_guard_or_false     z-_compute_stride.<locals>.maybe_guard_or_falsec                    r   r)   r    rv   )r   r   r    r!   maybe_guard_or_true  r   z,_compute_stride.<locals>.maybe_guard_or_truer;   )
r   r   r   r   r?   r   operatormulranger   )	old_shape
old_stride	new_shaper   r   r   r   r   
zero_numelr   view_dchunk_base_stridetensor_numel
view_numeltensor_dr    )r   r   r   r!   _compute_stride  sj   


r   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)   r    r+   sr   r    r!   r-     r:   z+_view_has_unbacked_input.<locals>.<genexpr>c                 3   r   r)   r    r   r   r    r!   r-   	  r:   c                 3   r   r)   r    r   r   r    r!   r-   
  r:   )r   r   utilsextract_shape_from_varargsr4   r   r   ar   r    r   r!   _view_has_unbacked_input  s   r   c                    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   r;   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    r!   r   3      z%_view_unbacked_meta.<locals>.<lambda>)r   )size_oblivious_enabledz Cannot view a tensor with shape z and strides r   r   )"torch._primsr   r   r   r   r   r   
infer_sizer   r   r/   _check_refs	unsqueezer?   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msgr    r   r!   r     sV   


"
r   c                 G   s:   t jjjjst||rt||S t jj|g|R ddiS )N
allow_copyF)	r/   r   r   r   r   r   r   r   _reshape_view_helper)rW   r7   r   r   r    r    r!   
_view_metaS  s
   
r  )outc                G   s0   t | ||g|R  }|d ur|S tdd |S )Nc                 S   s   | j tjdS Nmemory_format)cloner/   contiguous_formatrv   r    r    r!   r   e      z!_view_meta_copy.<locals>.<lambda>)r  r   tree_map)rW   r7   r   r  r   resultr    r    r!   _view_meta_copy^  s   r  c                 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   )rW   r7   repeatsoutput_sizer   r    r    r!   repeat_interleave_tensorj  s   


r  c                 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)rW   r7   r9   rh   r    r    r!   local_scalar_dense}  s"   



r  c                 C   s   t jjj|dS )Nr;   )r/   opsr   r   r   unbind)rW   r7   r9   r    r    r!   nonzero_numpy  s   r  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_sympyr;   r   )r  )r   r   r   nonzero_memor   r   r   torch.utils._sympy.numbersr  torch.utils._sympy.value_rangesr  r   r   r   r   r   mathprodr   nodeexprvar_to_ranger<   uppernew_empty_stridedr   r/   int64)rW   r7   r9   r   r   r   r  r  r   	prod_node
prod_ranger    r    r!   r     s0   
	


r   c           	      C   s   t |dksJ |s<| jd u s| jjst|| j }tjd }ddlm}m	} ||
 s5t|
 }||d|d |g|jdd  R }||S )Nr;   r   r   )minr      )r?   r   r   r   r   r   r   r   r   r   r   r   r   r   )	rW   r7   paddedoffsetstotal_Lr   r   r   output_shaper    r    r!   _padded_dense_to_jagged_forward  s   



r1  c                 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 )Nr;   r   r   r  r  r,  r   )r   r   r   r   r   r   r   r   r   r  r  r   r  r   r   r!  r"  r   r#  r$  r%  r<   r&  r   )rW   r7   r   maskr   r   r   r   r  r  num_elementsr)  r*  r    r    r!   masked_select  s(   


r4  )r&   layoutreturnc                C   s   |d ur|  |ksJ d| d|   |d ur,| |ks,J d| d|  |d ur@|j|ks@J d| d|j |d urU|j|ksUJ d| d|  |d uri|j|kskJ 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   r   r  r5  r&   )rW   r7   tsizesr   r  r&   r5  r    r    r!   assert_tensor_metadata  s,   r9  c                 C   s   t jj| jv S r)   )r/   r   data_dependent_outputr   r   r    r    r!   r   :  r  c                 O   r   r)   )r   rV   r    r    r!   data_dep:  s   r;  c                 C   s0   |D ]}|d ur|j tjtjfv rt| qd S r)   )r  r/   booluint8r   )r7   r   indicesr   r    r    r!   check_no_bool_index_tensorsA  s
   r?  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 NTr[   r^   )r   r&   r   r'   r   r   r   )rW   r7   rX   rY   rd   re   rg   r  r    r    r!   )run_and_return_new_tensor_of_input_deviceG  s   


rA  r   primsprimc                 C   s
   | j tv S r)   )	namespace_is_builtin_namespacesrP   r    r    r!   
is_builtinZ  r(   rF  c                 C   s   t j|  dS )NMeta)r/   r0   ._dispatch_has_computed_kernel_for_dispatch_keynamer   r    r    r!   r   ^  s   r   c                 C   s   t | o|  dot| S )Nzaten::_foreach_)rF  rI  
startswithr   r   r    r    r!   r   d  s    c           
         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>J g }t|D ]\ }t| fdd|D \}}	|	| j
| || qD|S )Nc                 S   s6   g | ]}t |ttfrt|rt |d  tjr|qS )r   )r<   rF   rG   r?   r/   r   r8   r    r    r!   
<listcomp>i  s    z4foreach_run_and_map_input_device.<locals>.<listcomp>c                    s   g | ]}|  qS r    r    )r+   tlir    r!   rK  ~  r   )r|   r}   r~   r   r  r   	enumerater   _find_common_devicerJ   rm   rn   )
rW   r7   rX   rY   tensor_listsout_metaout_fakemeta_tr&   rd   r    rM  r!    foreach_run_and_map_input_devicec  s.   
rU  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_TensorTr[   r^   )torch._meta_registrationsrV  r   r&   to)	rW   r7   rX   rY   rV  rd   re   rg   r  r    r    r!   index_tensor  s   

$rY  c                 O   sB   ddl m} |  ||i |W  d    S 1 sw   Y  d S )Nr   )meta_embedding_bag)rW  rZ  )rW   r7   rX   rY   rZ  r    r    r!   embedding_bag  s   $r[  c                 O   s   t | |||S r)   )rA  rV   r    r    r!   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   )rW   r7   rX   rY   rd   re   r    r    r!   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 )	NTr[   r~   r^   r   r;   c                      s   d  d dj  dS )NzMismatching z device between self (z) and values ()r%   r    r7   self_devicer~   r    r!   r     s    z index_put_impl.<locals>.<lambda>)
r   r   r/   r   r   r   rA  r   
index_put_r   )rW   r7   rX   rY   rd   re   r  r    r_  r!   index_put_impl  s   

rb  c                 O   s   t d)Nz3torch.compile does not support strided NestedTensor)r   rV   r    r    r!   nested_tensors_unsupported  s   rc  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   rX  r&   prim_Device_nested_tensor_from_tensor_listr  ry   r    r    r!   rK    s    rK  c                 O   s   |t vsJ d| d S )NzNYI: )_device_not_kwarg_opsrV   r    r    r!   nyi  s   rh  c                    s  t |||dd\}}|d j p |d j}|d jd }ddlm} ||s+d }nO|dkr<|d js<|d js<d }n>|tj	j
u rLtjjdi |}	n"tjj|d |d d |d |d	 |d
 |d |d |d |d d
}	tj|d |d |	}W d    n1 sw   Y   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 )NTr[   r^   weightr   r      r   paddingdilation
transposedoutput_paddinggroups
bias_sizes)biasr   rk  rl  rm  rn  ro  rp  c                    s,   | d u r| S |d ur| j |d} t|  S r  )rX  r   )r7  mem_fmtr&   rW   r    r!   convert  s
   zconv.<locals>.convertr;   r,  r    )r   r   r   r   r   r   	is_mkldnnis_xpur   convolutionr   r/   r0   _select_conv_backend%_conv_determine_backend_memory_formatr   )rW   r7   rX   rY   rd   kbatchr   rr  conv_backendrt  r  r    rs  r!   conv  sT   


"
$r}  c                 C   sP   | j d u s	| j jst|| j  }ddlm} || t||k ||S r  )	r   r   r   r   r   r   r/   r   r   )rW   r7   inputsweights	minlengthr   r   r    r    r!   bincount*  s   


r  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   r  r;   )	r   r   r   r   r   r   	transposer   r   )
rW   r7   r~  lengthsbatch_firstnew_batch_sizer   res_sizepacked_data
batch_sizer    r    r!   _pack_padded_sequence<  s   


r  c                    rD   )Nc                    s   | t  < | S r)   )FAST_OP_IMPLEMENTATIONS)rK   r   r    r!   rN   [  s   z-register_fast_op_impl.<locals>.impl_decoratorr    )r7   rN   r    r   r!   register_fast_op_implZ  s   r  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   r;   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    rN  sizeAsizeBr    r!   r   ~  s
    zinfer_size.<locals>.<lambda>)r   r   r?   r   r   r/   r   rG   )
r   br   dimsAdimsBr   expandedSizesoffsetdimAdimBr    r  r!   r   c  s"   

r   c                    s    fdd}|S )Nc                    sV   fdd}t d  }d }|D ]}t|tjr|jnd}|d u r&|}t||}q|d us2J ddlm}m}	 |D ]}t|tjrWt	|jt	|krW||	|j|rW nq<|dS t
d}
|
}d }d	}|D ]'}t|tjstd
}qi||
kr|j
jdks|j
}|d u r|j}qi||jkrd
}qi|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}|ot|tjd}q|rt d ttj||dtjd|dS |r't d ttj||dtjd|dS |dS )Nc                    sD   t d|     i W  d    S 1 sw   Y  d S )Nzslow r   )r   )rX   rY   modeslow_refr    r!   slow  s   $z=make_fast_binary_impl.<locals>.fast_binary_impl.<locals>.slowzattempt fastr    r   r   z#both tensors nontrivially broadcastr_   FTtype_promotion_kindr;   errorr  zfast is_contiguousr`   )r  r&   r  r%   zfast channels_lastzno contiguity match)r   r<   r/   r   r   r   r   r   r   r?   r&   r$   r  r   r   r'   r   r  channels_lastr   empty)r  rX   rY   r  operandsfinal_shaperL   r   r   r   r_   common_devicecommon_dtypehas_different_input_dtypesrd   current_cpu_scalars_on_non_cpumax_cpu_scalars_on_non_cpudefinitely_contiguousdefinitely_channels_lastr  r  )rX   rY   r  r!   fast_binary_impl  s   







z/make_fast_binary_impl.<locals>.fast_binary_implr    )r  r  r  r    r  r!   make_fast_binary_impl  s    
r  c              	   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   r/   r  r   detachr   r   r&   r  )rW   rw   include_realr  r    r    r!   fast_detach  s    r  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  r  r   addr   r  r   subr   divr   INT_TO_FLOATr  r   r  r  )r/   r    r    r!   r     s$   


r   )TFF)FFN)F)Tr)   )NNN)r6  N)Nr   )	functoolsr|   r!  r   r   r   typingr   r   r/   torch._custom_optorch._loggingtorch._prims_common_prims_commonr   torch._dispatch.pythonr   
torch._opsr   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   _pytreer   __all__rE   r   _opsr  r   r"   r'   
empty_liker   r  	full_like	ones_like	rand_like
randn_likerandint_liker   
Tensor_out	low_dtypelow_dtype_out
zeros_liker   r'  new_full	new_zerosnew_onesrb   _resize_output_rf  
pin_memoryrX  r&   re  rd  _pin_memory_resize_outputrg  _list_to_tensorra   r*   cacherB   r<  rH   rQ   rU   __contains__rZ   ri   rl   rp   r   r   r   r   r   r   _unique2r   selectr   r   r   r   rd   r   r   r   view_unsafe_viewr  	view_copyr  r   r  item_local_scalar_denser  r  r   r1  r4  _assert_tensor_metadatar9  r;  r?  rA  rE  rF  r   rU  r   rY  _embedding_bagr[  _unsafe_index_putcopycopy_slice_scatterr\  r]  	index_putra  rb  _nested_view_from_buffer_nested_view_from_buffer_copyrc  rh  rw  convolution_backwardr}  r  r  r  r  r   DEFAULTr  r  r   r    r    r    r!   <module>   s  , 
  	











		
L


)

I

E

	


3
)

"


#
















<
	$
 
