o
    j9:j[                      @  sn  d dl 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	d6dddddddddd7d!d"Ze	d6d#ddddddd$d8d'd(Ze			)d9d#ddddddd$d:d-d.ZeD ]ZeeeZeee e< qvd/d0 Zeg d1 Zd2d	 eeD Zg d3Zd4d5 ZeD ]ZeeeZeee e< qee Z dS );    )annotationsN   )_binary_ufuncs_impl_dtypes_impl_unary_ufuncs_impl_util)	ArrayLikeArrayLikeOrScalarCastingModes	DTypeLike
normalizerNotImplementedTypeOutArrayc                 C  s,   |d urt | |jj|} t| |j} | S N)r   typecast_tensordtypetorch_dtypetorchbroadcast_toshape)resultoutcasting r   [/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/torch/_numpy/_ufuncs.py_ufunc_postprocess   s   r   c                 C  s"   g | ]}| d s|dvr|qS )_)r   matmuldivmodldexp
startswith.0namer   r   r   
<listcomp>       r%   )addsubtractmultiplyfloor_dividetrue_dividedivide	remainderbitwise_and
bitwise_orbitwise_xorbitwise_left_shiftbitwise_right_shifthypotarctan2	logaddexp
logaddexp2	heavisidecopysignfmaxminimumfminmaximumfmodgcdlcmpowc              
     s<   t 	dddddddddd fdd} j|_ j|_|S )zCommon 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extobjr   OutArray | Nonex1r	   x2rD   r   r   CastingModes | NonerE   r   DTypeLike | NonerF   rG   rH   c                 s   |d ur fdd}
|
| |} |
||}n,t | tjr3t |tjr3t| |}t| |f| \} }nt| |jt	v j\} }| |}t
|| S )Nc                   s(   t | tjrt| | S tj| |dS )Nr   )
isinstancer   Tensorr   r   	as_tensor)xr   r   r   r   castY   s   z0deco_binary_ufunc.<locals>.wrapped.<locals>.cast)rO   r   rP   r   result_type_implr   typecast_tensorsnep50_to_tensors__name__NEP50_FUNCSr   )rJ   rK   r   rD   r   rE   r   rF   rG   rH   rT   r   
torch_funcrS   r   wrappedH   s   

z"deco_binary_ufunc.<locals>.wrappedr   r   rI   rJ   r	   rK   r	   rD   r   r   rL   rE   r   r   rM   rF   r   rG   r   rH   r   r   rX   __qualname__r[   r\   r   rZ   r   deco_binary_ufuncA   s   $ra   rA   rB   F)r   rE   r   rF   rG   rH   axesaxisr   rI   rJ   r   rK   r   rL   rE   r   r   rM   rF   rG   rH   rb   rc   c               C  sF   |d u r
t | |}t| |f||\} }t| |}t|||}|S r   )r   rU   r   rV   r   r   r   )rJ   rK   r   r   rE   r   rF   rG   rH   rb   rc   r   r   r   r   r   w   s   r   TrC   r	   rD   c               C  s   |d urt | tjrt| ||} ntj| |d} nt | tjs*t| } t| } t|}t|j	dkr;t
dt| |}
| j	tjkrM|
tj}
t|
||S )NrN   r   zldexp 2nd arg must be integer)rO   r   rP   r   r   rQ   cast_int_to_floatr   	_categoryr   
ValueErrorr   r   float16tor   )rJ   rK   r   rD   r   rE   r   rF   rG   rH   r   r   r   r   r      s   


r   NN'tuple[OutArray | None, OutArray | None]out1out2c               C  s   t dd ||fD }|dkrtd|dkr(|\}}|d us#|d ur'tdn|\}}|d u r6t| |}t| |f||\} }t| |\}}t	|||}t	|||}||fS )Nc                 s  s    | ]}|d uV  qd S r   r   )r#   rR   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)
sumrf   	TypeErrorr   rU   r   rV   r   r   r   )rJ   rK   rk   rl   r   rD   r   rE   r   rF   rG   rH   num_outso1o2quotremr   r   r   r      s$   r   c                O  s$   t | dg|R i |\}}||fS )Nr   )r   )rR   argskwdsrt   ru   r   r   r   modf   s   rx   )r   rx   r   r   c                 C  s"   g | ]}| d s|dkr|qS )r   r   r    r"   r   r   r   r%      r&   )arccosarccosharcsinarcsinharctanarctanhcbrtcoscoshdeg2raddegreesexpexp2expm1loglog10log1plog2rad2degradians
reciprocalsinsinhsqrtsquaretantanhtruncc              
     s<   t 	dddddddddd fdd} j|_ j|_|S )zCommon infra for unary ufuncs.

    Normalize arguments, sort out type casting, broadcasting and delegate to
    the pytorch functions for the actual work.
    NTrA   rB   FrC   r   rI   rR   r   r   rL   r   rM   rF   r   c         
        sB   |d urt | ||}  jtv rt | }  | }	t|	||}	|	S r   )r   r   rX   	_fp_unaryrd   r   )
rR   r   rD   r   rE   r   rF   rG   rH   r   rZ   r   r   r\   &  s   

z!deco_unary_ufunc.<locals>.wrappedr   )
r   rI   rR   r   r   rL   r   rM   rF   r   r^   r`   r   rZ   r   deco_unary_ufunc  s   r   r   )r   rI   rJ   r   rK   r   r   rL   rE   r   r   rM   rF   r   rG   r   rH   r   rb   r   rc   r   r]   )NNri   )r   rj   rJ   r   rK   r   rk   rI   rl   rI   rD   r   r   rL   rE   r   r   rM   rF   r   rG   r   rH   r   )!
__future__r   r    r   r   r   r   _normalizationsr   r	   r
   r   r   r   r   r   dir_binaryrY   ra   r   r   r   r$   getattrufuncvarsrx   _unaryr   r   __all__r   r   r   r   <module>   sx   $	6',
 (
