U
    d                     @   s  d dl Z d dlmZ e jdddZdd Zdd	 Ze jed
dd Z	e jeddd Z
e jeddd Ze jeddd Ze jeddd Ze jeddd Zdd Zeddd Ze jed!d=d#d$Ze jed%d&d' Ze jed(d)d* Ze jed+d,d-d.d/Ze jed0d1d2 Ze jed3dd4d5d6Ze jed7d8d9 Ze jed:d;d< ZdS )>    N)utilsZatenZIMPLZMetac                 C   s   | st |d S N)RuntimeError)bs r   =/tmp/pip-unpacked-wheel-ua33x9lu/torch/_meta_registrations.pycheck   s    r	   c                 C   s(   t jt jt jt jt jt ji}|| | S r   )torchZ	complex32ZhalfZcfloatfloatZcdoubledoubleget)dtypeZfrom_complexr   r   r   toRealValueType
   s       r   index_selectc                 C   s.   t |  }|  dkr$| ||< | |S )Nr   )listsizedimnumel	new_empty)selfr   indexZresult_sizer   r   r   meta_index_select   s    r   zindex_select.outc                 C   s(   t ||  | j |t | ||S r   )r
   _resize_output_r   devicecopy_r   )r   r   r   outr   r   r   meta_index_select_out   s    r   absc                 C   s6   |   r$t| j}| j|  |dS | |  S d S )Nr   )Z
is_complexr   r   r   r   )r   Z
float_typer   r   r   meta_abs   s    
r    zabs.outc                 C   s$   t ||  | j |t | S r   )r
   r   r   r   r   r   )r   r   r   r   r   meta_abs_out'   s    r!   maxc                 C   s
   |  dS Nr   r   r   r   r   r   meta_max,   s    r&   minc                 C   s
   |  dS r#   r$   r%   r   r   r   meta_min0   s    r(   c                 C   sX   |   dkst| d| d| dksTt| d| d d| d dd S )N   z3: The input tensor must have at least 2 dimensions.z5: A must be batches of square matrices, but they are z by z	 matrices)r   AssertionErrorr   )r   f_namer   r   r   squareCheckInputs4   s     r.   )uploc                 C   s6   |   }t| dkr|dks2|dks2td|  d S )N   ULz1Expected UPLO argument to be 'L' or 'U', but got )upperlenr,   )r/   Zuplo_uppercaser   r   r   	checkUplo;   s    r5   linalg_eighr2   c                 C   sd   t | d t| t| j}|  dks,t| j| j|d}|dd | | jd d }||fS )Nr6   r)   r   r+   r*   )	r.   r5   r   r   r   r,   r   shape
transpose_)r   r/   Z
real_dtypevaluesZvectorsr   r   r   meta_linalg_eigh@   s    

r:   Zreflection_pad2dc                 C   s   |  ddko|  ddk}t| jdkr,|pF| jdkoF|oF|  ddkd|   | jdkrl| j\}}}}nd}| j\}}}|\}}}	}
||	 |
 }|| | }| jdkr| |||fS | ||||fS d S )Nr0   r   r)         z:3D or 4D (batch mode) tensor expected for input, but got: )r   r	   ndimr7   r   )r   paddingZ
valid_dimsZnbatchZnplaneZinput_hZinput_wZpad_lZpad_rZpad_tZpad_bZoutput_hZoutput_wr   r   r   
meta_pad2dK   s     

r?   dotc                 C   s>   t |  dko| dkd|   d|  d | dS )Nr0   z1D tensors expected, but got zD and z	D tensorsr   )r	   r   r   )r   Ztensorr   r   r   meta_dotc   s
    rA   zvar_mean.correctionF)keepdimc                   sf   t j  |r2t fddtjD }nt j }j|tj	d}|}||fS )Nc                 3   s$   | ]}| krj | nd V  qdS )r0   N)r7   ).0ir   r   r   r   	<genexpr>o   s     z+meta_var_mean_correction.<locals>.<genexpr>r   )
r   Zreduction_dimsr7   tupleranger=   Zcompute_reduction_output_shaper   r   r   )r   r   Z
correctionrB   Zoutput_shapeZresult1Zresult2r   rE   r   meta_var_mean_correctionk   s     
rI   Zinversec                 C   s2   |   dkrt| S | | j}|dd |S )Nr   r+   r*   )r   r
   Z
empty_liker   r7   r8   )r   rr   r   r   meta_inversev   s
    
rK   zbernoulli.out)	generatorc                C   s   t ||  | j |S r   )r
   r   r   r   )r   rL   r   r   r   r   meta_bernoulli   s    rM   Z_adaptive_avg_pool2dc                 C   s>   t | jdkp| jdkd| j  | | jd d t| S )Nr;   r<   z"Expected 3D or 4D tensor, but got r+   r	   r=   r7   r   rG   r   Zoutput_sizer   r   r   meta_adaptive_avg_pool2d   s    "rP   Z_adaptive_avg_pool3dc                 C   s>   t | jdkp| jdkd| j  | | jd d t| S )Nr<      z"Expected 4D or 5D tensor, but got rN   rO   r   r   r   meta_adaptive_avg_pool3d   s    "rS   )r2   )r
   Ztorch._primsr   ZlibraryLibraryZmeta_libr	   r   implr   r   r    r!   r&   r(   r.   strr5   r:   r?   rA   rI   rK   rM   rP   rS   r   r   r   r   <module>   sD   	











