U
    ©Ê¹jš   ã                   @  sø  d dl mZ d dlmZmZ d dlZddlmZmZm	Z	m
Z
 ddlmZmZmZmZmZmZmZ dd„ Zd	d
„ eeƒD ƒZdZdd„ ZedFdddddddddœddddddddddddœdd„ƒZedGddddddddœdddddddddddœ
dd„ƒZedHddddddddœd!dddddddddddd"œd#d$„ƒZeD ]ZeeeƒZeeƒeƒ e< �q:d%d&„ Zed$d&ddg Zd'd
„ ee	ƒD ƒZ d(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCgZ!dDdE„ Z"e D ]Zee	eƒZe"eƒeƒ e< �qÌee  Z#dS )Ié    )Úannotations)ÚOptionalÚUnionNé   )Ú_binary_ufuncs_implÚ_dtypes_implÚ_unary_ufuncs_implÚ_util)Ú	ArrayLikeÚCastingModesÚ	DTypeLikeÚ
normalizerÚNotImplementedTypeÚOutArrayÚScalarc                 C  s,   |d k	r(t  | |jj|¡} t | |j¡} | S ©N)r	   Útypecast_tensorÚdtypeZtorch_dtypeÚtorchZbroadcast_toÚshape)ÚresultÚoutÚcasting© r   úS/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/_numpy/_ufuncs.pyÚ_ufunc_postprocess   s    r   c                 C  s"   g | ]}|  d ¡s|dkr|‘qS )Ú_)r   ÚmatmulÚdivmodÚldexp©Ú
startswith©Ú.0Únamer   r   r   Ú
<listcomp>   s   
 þr%   )ÚaddÚsubtractÚmultiplyZfloor_divideZtrue_divideÚdivideÚ	remainderZbitwise_andZ
bitwise_orZbitwise_xorZbitwise_left_shiftZbitwise_right_shiftÚhypotZarctan2Z	logaddexpZ
logaddexp2Z	heavisideÚcopysignZfmaxÚminimumZfminÚmaximumÚfmodÚgcdZlcmÚpowc                   sP   t dddddddddœdddd	d
d	dd	d	d	dœ
‡ fdd„ƒ}ˆ j|_ˆ j|_|S )z¡Common infra for binary ufuncs.

    Normalize arguments, sort out type casting, broadcasting and delegate to
    the pytorch functions for the actual work.
    NTÚ	same_kindÚKF©Úwherer   Úorderr   ÚsubokÚ	signatureÚextobjúOptional[OutArray]úUnion[ArrayLike, Scalar]r   úOptional[CastingModes]úOptional[DTypeLike]©
r   Úx1Úx2r5   r   r6   r   r7   r8   r9   c                 s”   |d k	r*‡ fdd„}
|
| |ƒ} |
||ƒ}nTt | tjƒrft |tjƒrft | |¡}t | |f|ˆ ¡\} }nt | |ˆjt	k¡\} }ˆ| |ƒ}t
||ˆ ƒS )Nc                   s,   t | tjƒrt | |ˆ ¡S tj| |d�S d S )N©r   )Ú
isinstancer   ÚTensorr	   r   Ú	as_tensor)Úxr   ©r   r   r   ÚcastY   s    z0deco_binary_ufunc.<locals>.wrapped.<locals>.cast)rB   r   rC   r   Úresult_type_implr	   Útypecast_tensorsZnep50_to_tensorsÚ__name__ÚNEP50_FUNCSr   )r?   r@   r   r5   r   r6   r   r7   r8   r9   rG   r   ©Ú
torch_funcrF   r   ÚwrappedH   s    
  ÿ
z"deco_binary_ufunc.<locals>.wrapped)N©r   rJ   Ú__qualname__©rM   rN   r   rL   r   Údeco_binary_ufuncA   s     üô*$rR   r2   r3   F)r   r6   r   r7   r8   r9   ÚaxesÚaxisr:   r
   r<   r   r=   )r   r?   r@   r   r6   r   r7   r8   r9   rS   rT   c               C  sF   |d krt  | |¡}t | |f||¡\} }t | |¡}t|||ƒ}|S r   )r   rH   r	   rI   r   r   r   )r?   r@   r   r   r6   r   r7   r8   r9   rS   rT   r   r   r   r   r   w   s    r   Tr4   r;   r>   c               C  s¦   |d k	r4t | tjƒr$t | ||¡} qTtj| |d�} n t | tjƒsTt | ¡} t | ¡} t |¡}t |j	¡dkrvt
dƒ‚t | |¡}
| j	tjkrš|
 tj¡}
t|
||ƒS )NrA   r   zldexp 2nd arg must be integer)rB   r   rC   r	   r   rD   Úcast_int_to_floatr   Z	_categoryr   Ú
ValueErrorr   r   Zfloat16Útor   )r?   r@   r   r5   r   r6   r   r7   r8   r9   r   r   r   r   r   ’   s    


r   ©NNz-tuple[Optional[OutArray], Optional[OutArray]])r   r?   r@   Úout1Úout2r5   r   r6   r   r7   r8   r9   c               C  s´   t dd„ ||fD ƒƒ}|dkr(tdƒ‚n2|dkrR|\}}|d k	sH|d k	rZtdƒ‚n|\}}|d krnt | |¡}t | |f||¡\} }t | |¡\}}t	|||ƒ}t	|||ƒ}||fS )Nc                 s  s   | ]}|d k	V  qd S r   r   )r#   rE   r   r   r   Ú	<genexpr>Í   s     zdivmod.<locals>.<genexpr>r   z&both out1 and out2 need to be providedé   z>cannot specify 'out' as both a positional and keyword argument)
ÚsumrV   Ú	TypeErrorr   rH   r	   rI   r   r   r   )r?   r@   rY   rZ   r   r5   r   r6   r   r7   r8   r9   Znum_outsZo1Úo2ÚquotÚremr   r   r   r   º   s"    
ÿr   c                O  s   t | df|ž|Ž\}}||fS )Nr   )r   )rE   ÚargsÚkwdsr`   ra   r   r   r   Úmodfì   s    rd   c                 C  s"   g | ]}|  d ¡s|dkr|‘qS )r   r   r    r"   r   r   r   r%   ÷   s   
 þZarccosZarccoshZarcsinZarcsinhZarctanZarctanhZcbrtÚcosÚcoshZdeg2radÚdegreesÚexpZexp2Úexpm1ÚlogÚlog10Úlog1pÚlog2Zrad2degÚradiansZ
reciprocalÚsinÚsinhÚsqrtZsquareÚtanÚtanhÚtruncc              
     sF   t dddddddddœddd	d
ddœ‡ fdd„ƒ}ˆ j|_ˆ j|_|S )z Common infra for unary ufuncs.

    Normalize arguments, sort out type casting, broadcasting and delegate to
    the pytorch functions for the actual work.
    NTr2   r3   Fr4   r:   r
   r<   r=   r   )r   rE   r   r   r7   c         
        sB   |d k	rt  | ||¡} ˆ jtkr*t  | ¡} ˆ | ƒ}	t|	||ƒ}	|	S r   )r	   r   rJ   Ú	_fp_unaryrU   r   )
rE   r   r5   r   r6   r   r7   r8   r9   r   rL   r   r   rN   &  s    

z!deco_unary_ufunc.<locals>.wrapped)NrO   rQ   r   rL   r   Údeco_unary_ufunc  s     ýõ rv   )N)N)NNrX   )$Ú
__future__r   Útypingr   r   r   Ú r   r   r   r	   Z_normalizationsr
   r   r   r   r   r   r   r   ÚdirÚ_binaryrK   rR   r   r   r   r$   ÚgetattrZufuncÚvarsrd   Z_unaryru   rv   Ú__all__r   r   r   r   Ú<module>   s°   $	þ6 üó( üô&'   úò*,
þ	ä (
