o
    ,h                     @   s  d dl Z d dlZd dlZd dl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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 Z*e)e(j+j,e(j+j-e(j.j,e(j.j-e(j/j,e(j/j-e(j0j,e(j0j-e(j1j,e(j1j-e(j2j,e(j2j3e(j2j4e(j2j-e(j2j5e(j2j6e(j7j,e(j7j-e(j8j,e(j8j-e(j9j,e(j9j-e(j:j,e(j:j-e(j;j,e(j;j-e(j<j,e(j<j-Z=e)e(j>j,e(j?j,e(j?j-e(j@j,e(jAjBe(jAjCe(jDj,e(jEj,e(jEj-e(jFj,e(jFj-ZGe(jHfZIdd ZJe jKdefddZLdeeegeMf ef fddZNdd ZOdd ZPeNe$jQdd ZReNeLeNg e=dd ZSeNe(jDj,dd ZTeNe(jAjCeNe(jAjBd d! ZUd"d# ZVeNeVd$d% ZWeNe(jXj,d&d' ZXeNe(jYj,d(d) ZYeNd*d+ d,d- ZZ	.	/	/dzd/d0d1d2Z[eNe(j\j,	/dzd3d4Z]eNe(j^j,	/dzd5d6Z^eNe(j_j,d{d7d8Z`eNe(jaj3d|d9d:ZbeNej'j(jcj,eNej'j(jdj,d;d< ZeeNej'j(jfj,d=d> ZfeNej'j(jgj,d?d@ ZgeNej'j(jhj,d|dAdBZheNej'j(jij,dCdD ZieNej'j(jjj,			d}dddE	d~dGdHZkeNdId+ dJdK ZldLdM ZmdNdO Zne)dPdQdRZodSdT ZpdUdV ZqeNdWd+ dXdY ZreNe(jsj3dZd[ ZteNe(juj,d\d] ZveNe(jwj,eNe(jxj,eNe(jyj,eNe(jzj,d^d_ Z{eNe(jxj-eNe(jzj-d`da Z|eNe(j}j,eNe(j~j,dbdc ZeNe(j?j,eNe(j?j-eNe(jj,eNe(jj,ddde ZeNdfdg eGD dhdi ZeNe(jj,e(jj,gdjdk ZeNej'j(jj,ddldmZeNej'j(jj,dndo Zi ZdefdpdqZdrds ZejfdtduZddvdwZe jKdxdy ZdS )    N)CallableUnion)no_python_dispatcher)
OpOverload)'definitely_contiguous_for_memory_formatelementwise_dtypesELEMENTWISE_TYPE_PROMOTION_KINDis_boolean_dtypeis_float_dtypeis_integer_dtype)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   W/var/www/html/scripts/venv/lib/python3.10/site-packages/torch/_subclasses/fake_impls.pyordered_set2   s   r   c                 C   s
   | j dkS )Nhpu)typedevicer   r   r   is_noncontiguous_supported8      
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>p       
z(contains_tensor_types.<locals>.<genexpr>)torch_C
TensorTypegetisSubtypeOfanycontainedTypes)r    tensor_typer   r   r   r&   n   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)   y   s    z)_is_tensor_constructor.<locals>.<genexpr>F   r   )
isinstancer   _schemar0   	argumentslenreturnsr    r+   r,   r-   r.   )r3   schemar   r   r   _is_tensor_constructoru   s   $r=   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: )	r7   r   op_implementations_dictlisttupleregister_op_implcallabler   append)op_implopr>   r   r   impl_decorator   s   

z(register_op_impl.<locals>.impl_decoratorr   )r>   rI   r   rH   r   rC      s   rC   c                 C   s   | t v S r%   r@   rG   r   r   r   _is_op_registered_to_fake_rule   s   rL   c                 C   s<   | t v rt | = tD ]\}}|| u rt||f  d S q	d S r%   )r@   r   remove)rG   checkimplr   r   r   _deregister_op_impl   s   rP   c                 O   s   t | | |g|R i |S r%   rJ   	fake_moder3   argskwargsr   r   r   #dispatch_to_op_implementations_dict   s   rU   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rS   rT   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   )	rR   r3   rS   rT   _
new_kwargsdefault_device
out_devicerr   r   r   constructors   s(   



rd   c                 O   sT   t |||dd\}}|d}t|  ||}W d    |S 1 s#w   Y  |S )NTrW   rY   )r   r^   r   )rR   r3   rS   rT   r_   r`   inprc   r   r   r   non_kwarg_is_pinned   s   




rg   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 )NTre   r"   rY   r[   )r   r"   r+   r^   r   fake_tensor_converterfrom_meta_and_device)
rR   r3   rS   rT   r_   r`   input_devicerb   rf   rc   r   r   r   non_kwarg_to   s   


rk   c                 C   s   dS )NFr   rK   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)r7   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'   rp   rq   r   r   r)      r*   z1wordaround_stride_incorrect_op.<locals>.<genexpr>)	allow_fallback_kernelsr0   	itertoolschainvaluespytreetree_flattenr   r   )rR   r3   rS   rT   require_dynamic	flat_args	args_specr   rs   r   wordaround_stride_incorrect_op   s   r}   c                 O   s:   t |  ||i |W  d    S 1 sw   Y  d S r%   )r   rQ   r   r   r   
resize_as_  s   
$r~   c                 O   s   t | |g|R i |S r%   )rd   rQ   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r3   r   r   r   <lambda>  s    r   c                 O      t |r%   )r   rQ   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_symbolsr6   maxrZ   )	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"   rE   rB   )rR   r3   r5   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   )rR   r3   r5   r   r   r   r   r   r   unique2c  s   r   c                 C   s,   t | |||dkr
|n|t|jd |||S )Nr   r6   )r   r   ndim)rR   r3   r5   r   r   r   r   r   r   r   
unique_dimj  s   r   c              
   C   s   t | |||d||ddS )NFTr   r   )rR   r3   r5   r   r   r   r   r   r   r_   z  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   )rR   r3   repeatsoutput_sizer   r   r   r   repeat_interleave_tensor  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   allow_scalar_outputsr   r
   dtypecreate_unbacked_symfloatr   r   r	   create_unbacked_symboolNotImplementedError)rR   r3   r5   rc   r   r   r   local_scalar_dense  s"   



r   c                 C   s   t jjj|dS )Nr6   )r+   opsr   r   r   unbind)rR   r3   r5   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_sympyr6   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_ranger7   uppernew_empty_stridedr   r+   int64)rR   r3   r5   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 )Nr6   r   r   )minr      )r:   r   r   r   r   r   r   r   r   r   r   r   r   r   )	rR   r3   paddedoffsetstotal_Lr   r   r   output_shaper   r   r   _padded_dense_to_jagged_forward  s   



r   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 )Nr6   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   r7   r   r   )rR   r3   selfmaskr   r   r   r   r   r   num_elementsr   r   r   r   r   masked_select  s(   


r   )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   strider   r   r"   )rR   r3   tsizesstridesr   r"   r   r   r   r   assert_tensor_metadata5  s,   r   c                 C   s   t jj| jv S r%   )r+   r   data_dependent_outputr   r   r   r   r   r   X  s    c                 O   r   r%   )r   rQ   r   r   r   data_depX  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   )r3   r   indicesr   r   r   r   check_no_bool_index_tensors_  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 NTrV   rY   )r   r"   r   r#   r   r   r   )rR   r3   rS   rT   r_   r`   rb   outr   r   r   )run_and_return_new_tensor_of_input_devicee  s   


r   r   primsprimc                 C   s
   | j tv S r%   )	namespace_is_builtin_namespacesrK   r   r   r   
is_builtinx  r$   r   c                 C   s   t j|  dS )NMeta)r+   r,   ._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_)r   r   
startswithr   r   r   r   r   r     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   )r7   rA   rB   r:   r+   r   r4   r   r   r   
<listcomp>  s    z4foreach_run_and_map_input_device.<locals>.<listcomp>c                    s   g | ]}|  qS r   r   )r'   tlir   r   r     s    )ru   rv   rw   r   r   NotImplemented	enumerater   _find_common_devicerE   rh   ri   )
rR   r3   rS   rT   tensor_listsout_metaout_fakemeta_tr"   r_   r   r   r    foreach_run_and_map_input_device  s.   
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_TensorTrV   rY   )torch._meta_registrationsr  r   r"   to)	rR   r3   rS   rT   r  r_   r`   rb   r   r   r   r   index_tensor  s   

$r  c                 O   sB   ddl m} |  ||i |W  d    S 1 sw   Y  d S )Nr   )meta_embedding_bag)r  r  )rR   r3   rS   rT   r  r   r   r   embedding_bag  s   $r  c                 O   s   t | |||S r%   )r   rQ   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   )rR   r3   rS   rT   r_   r`   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 )	NTrV   rw   rY   r   r6   c                      s   d  d dj  dS )NzMismatching z device between self (z) and values ()r!   r   r3   self_devicerw   r   r   r     s    z index_put_impl.<locals>.<lambda>)
r   r   r+   _checkr   r   r   r   
index_put_r   )rR   r3   rS   rT   r_   r`   r   r   r
  r   index_put_impl  s   

r  c                 O   s   t d)Nz3torch.compile does not support strided NestedTensor)r   rQ   r   r   r   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  r"   prim_Device_nested_tensor_from_tensor_listr   rr   r   r   r   r     s    r   c                 O   s   |t vsJ d| d S )NzNYI: )_device_not_kwarg_opsrQ   r   r   r   nyi  s   r  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 )NTrV   rY   weightr   )has_hint   r   paddingdilation
transposedoutput_paddinggroups
bias_sizes)biasr   r  r  r  r  r  r  c                    s,   | d u r| S |d ur| j |d} t|  S )Nmemory_format)r  r   )r   mem_fmtr"   rR   r   r   convert4  s
   zconv.<locals>.convertr6   r   r   )r   r   r   r   r   r  	is_mkldnnis_xpur   convolutionr   r+   r,   _select_conv_backend%_conv_determine_backend_memory_formatr   )rR   r3   rS   rT   r_   kbatchr  r!  conv_backendr#  r   r   r"  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   )rR   r3   inputsweights	minlengthnew_sizer   r   r   r   bincountH  s   


r1  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   r6   )	r   r   r   r   r   r   	transposer   r   )
rR   r3   r-  lengthsbatch_firstnew_batch_sizer   res_sizepacked_data
batch_sizer   r   r   _pack_padded_sequenceZ  s   


r9  c                    r?   )Nc                    s   | t  < | S r%   )FAST_OP_IMPLEMENTATIONS)rF   r   r   r   rI   y  s   z-register_fast_op_impl.<locals>.impl_decoratorr   )r3   rI   r   r   r   register_fast_op_implx  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   )guard_or_falser6   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   r   r     s
    zinfer_size.<locals>.<lambda>)r   r<  r:   r   ranger+   r  rB   )
abr<  dimsAdimsBr   expandedSizesoffsetdimAdimBr   r>  r   
infer_size  s"   

rJ  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   )msg)rS   rT   modeslow_refr   r   slow  s   $z=make_fast_binary_impl.<locals>.fast_binary_impl.<locals>.slowzattempt fastr   r   )r<  sym_eqz#both tensors nontrivially broadcastrZ   FTtype_promotion_kindr6   errorr  zfast is_contiguousr[   )r   r"   r   r!   zfast channels_lastzno contiguity match)r   r7   r+   r   r   rJ  r   r<  rO  r:   r"   r    r   r   r   r#   r   contiguous_formatchannels_lastr   empty)rL  rS   rT   rN  operandsfinal_shaperG   r   r<  rO  rZ   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rM  rP  )rS   rT   rL  r   fast_binary_impl  s   







z/make_fast_binary_impl.<locals>.fast_binary_implr   )rM  rP  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"   ra  )rR   rp   include_realr   r   r   r   fast_detach4  s    rd  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   )rP  )torch._refsr;  r   r   addr   r`  _refssubmuldivr   INT_TO_FLOATrb  r   rd  r:  )r+   r   r   r   r   <  s    

r   )TFF)FFNr%   )NNN)r   N)Nr   )F)	functoolsru   r   r   typingr   r   r+   torch._custom_optorch._loggingtorch._dispatch.pythonr   
torch._opsr   torch._prims_commonr   r   r   r	   r
   r   torch._subclasses.fake_tensorr   r   r   r   r   r   torch.fx.operator_schemasr   torch.utils._statsr   utils_pytreerx   __all__r@   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_onesr]   _resize_output_r  
pin_memoryr  r"   r  r  _pin_memory_resize_outputr  _list_to_tensorr\   r&   cacher=   r   rC   rL   rP   __contains__rU   rd   rg   rk   r   r}   r~   r   r   r   _unique2r   r   r   r_   r   r   item_local_scalar_denser   r   r   r   r   _assert_tensor_metadatar   r   r   r   r   r   r   r   r   r  _embedding_bagr  _unsafe_index_putcopycopy_slice_scatterr  r  	index_putr  r  _nested_view_from_buffer_nested_view_from_buffer_copyr  r  r&  convolution_backwardr,  r1  r9  r:  r;  rJ  DEFAULTr`  rd  r   r   r   r   r   <module>   sj    
  	











		
L




3
)

"


#
















<
	$
 
