U
    yh8                      @  s  d Z ddlmZ 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	m
Z
mZ edZejeeeef Zejeef ZedZedZed	Zed
ZedZedZzddlmZ W n ek
r   edZY nX d2ddZd3ddZd4ddZd5ddZ d6ddZ!d7ddZ"dd Z#d8ddZ$d9dd Z%d:d!d"Z&d;d#d$Z'eee e!ee%e&e%e"e$e#e'd%Z(d&d' Z)d<d)d*Z*d+d, Z+ed(fd-d.Z,d=d(d/d0d1Z-dS )>zZ "Normalize" arguments: convert array_likes to tensors, dtypes to torch dtypes and so on.
    )annotationsN   )_dtypes_dtypes_impl_util	ArrayLike	DTypeLikeAxisLikeNDArrayCastingModesKeepDimsOutArray)NotImplementedTyper   c                 C  s   ddl m} || jS )Nr   )asarray)_ndarrayr   tensor)xparmr    r   N/var/www/html/venv/lib/python3.8/site-packages/torch/_numpy/_normalizations.pynormalize_array_like-   s    r   c                 C  s   t | r| S t| |S N)r   Zis_scalar_or_symbolicr   r   r   r   r   r   normalize_array_like_or_scalar3   s    
r   c                 C  s   | d krd S t | |S r   )r   r   r   r   r   'normalize_optional_array_like_or_scalar9   s    r   c                 C  s   | d krd S t | |S r   r   r   r   r   r   normalize_optional_array_like?   s    r   c                 C  s   t dd | D S )Nc                 s  s   | ]}t |V  qd S r   r   ).0valuer   r   r   	<genexpr>F   s     z+normalize_seq_array_like.<locals>.<genexpr>)tupler   r   r   r   normalize_seq_array_likeE   s    r!   c                 C  s    d }| d k	rt | } | j}|S r   )r   dtypetorch_dtype)r"   r   r#   r   r   r   normalize_dtypeI   s
    
r$   c                 C  s    | |j krtd|j dd S )N'z' parameter is not supported.)defaultNotImplementedErrornameargr   r   r   r   normalize_not_implementedR   s    
r+   c                 C  s$   ddl m} t| |r t| } | S Nr   ndarray)r   r.   
isinstanceoperatorindexr*   r   r.   r   r   r   normalize_axis_likeW   s    

r3   c                 C  s:   | d kr| S ddl m} t| |s4td|j d| jS Nr   r-   r%   z' must be an array)r   r.   r/   	TypeErrorr(   r   r2   r   r   r   normalize_ndarray_   s    
r6   c                 C  sL   | d kr| S ddl m} t| tjr,|| } t| |sHtd|j d| S r4   )r   r.   r/   torchTensorr5   r(   r2   r   r   r   normalize_outarrayk   s    
r9   c                 C  s   | dkrt d|  d| S )N)noequivsafeZ	same_kindunsafezMcasting must be one of 'no', 'equiv', 'safe', 'same_kind', or 'unsafe' (got 'z'))
ValueErrorr)   r   r   r   normalize_casting{   s
    
r?   )r   ArrayLikeOrScalarzOptional[ArrayLike]zSequence[ArrayLike]zOptional[ArrayLikeOrScalar]zOptional[NDArray]zOptional[OutArray]r
   zOptional[DTypeLike]r	   r   zOptional[CastingModes]c                 C  s    t |jd}|r|| |S | S )z,Normalize arg if a normalizer is registered.N)normalizersget
annotation)r*   r   
normalizerr   r   r   maybe_normalize   s    rE   Fc                   s   | d kr|S t |tjrv|j| jkrf| dko8| jdk} rL|rL| }ntd| j d|j d| j	| | S t |t
tfrt| fddt| |D S td S )Nr   r   z'Bad size of the out array: out.shape = z while result.shape = .c                 3  s   | ]\}}t || V  qd S r   )maybe_copy_to)r   orpromote_scalar_resultr   r   r      s    z maybe_copy_to.<locals>.<genexpr>)r/   r7   r8   shapeZnumelndimZsqueezer>   r   Zcopy_r    listtypezipAssertionError)outresultrK   Zcan_fitr   rJ   r   rG      s"    
rG   c                 C  sH   ddl m} t| tjr || S t| ttfrDt| dd | D } | S )Nr   r-   c                 s  s   | ]}t |V  qd S r   )wrap_tensors)r   r   r   r   r   r      s     zwrap_tensors.<locals>.<genexpr>)r   r.   r/   r7   r8   r    rN   rO   )rS   r.   r   r   r   rT      s    rT   c                 C  s(   |r||   S ddlm} || S d S r,   )itemr   r.   )valuesZpy_typeZreturn_scalarr.   r   r   r   array_or_scalar   s    rW   rJ   c                  s$    fdd}| d kr|S || S d S )Nc                   s   t   fdd}|S )Nc                    s,  t }|jtt   jt jjkrB fdd| D } n0t	dd t
|  D | t d   } fdd| D }| |}d }dkrd jdkr|j| |j}|dd	r| d
 }|d}t|||j}dkr |d kr
|j| |j}|d}t||}t|}|S )Nc                   s   g | ]}t | qS r   rE   )r   r*   )first_paramr   r   
<listcomp>   s     zInormalizer.<locals>.normalizer_inner.<locals>.wrapped.<locals>.<listcomp>c                 s  s   | ]\}}t ||V  qd S r   rX   )r   r*   r   r   r   r   r      s   zHnormalizer.<locals>.normalizer_inner.<locals>.wrapped.<locals>.<genexpr>c                   s,   i | ]$\}}|| kr$t | | n|qS r   rX   )r   r(   r*   )paramsr   r   
<dictcomp>   s    zInormalizer.<locals>.normalizer_inner.<locals>.wrapped.<locals>.<dictcomp>Zkeepdimsr   Fr   axisrR   )inspect	signature
parametersnextiterrV   kind	ParameterVAR_POSITIONALr    rP   lenitemsrC   bind	argumentsrB   r   Zapply_keepdimsrM   rG   rT   )argskwdssigrS   Z
bound_argsr   r]   rR   )funcrK   )rY   r[   r   wrapped   s:    






z5normalizer.<locals>.normalizer_inner.<locals>.wrapped)	functoolswraps)rm   rn   rJ   )rm   r   normalizer_inner   s    0z$normalizer.<locals>.normalizer_innerr   )Z_funcrK   rq   r   rJ   r   rD      s    4rD   )N)N)N)N)N)N)N)N)N)N)F)N).__doc__
__future__r   ro   r^   r0   typingr7    r   r   r   TypeVarr   UnionintfloatcomplexboolZScalarr@   r   r	   r
   r   r   r   r   ImportErrorr   r   r   r   r!   r$   r+   r3   r6   r9   r?   rA   rE   rG   rT   rW   rD   r   r   r   r   <module>   sb   












	



		

