o
    Ih9                      @  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yo   edZY nw d2ddZd2ddZd2ddZd2ddZ d2ddZ!d2ddZ"dd Z#d2ddZ$d2dd Z%d2d!d"Z&d2d#d$Z'eee e!ee%e&e%e"e$e#e'd%Z(d&d' Z)d3d)d*Z*d+d, Z+ed(fd-d.Z,d2d(d/d0d1Z-dS )4zZ "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   P/var/www/vscode/kcb/lib/python3.10/site-packages/torch/_numpy/_normalizations.pynormalize_array_like.   s   
r   c                 C  s   t | r| S t| |S N)r   is_scalar_or_symbolicr   r   r   r   r   r   normalize_array_like_or_scalar4   s   

r   c                 C     | d u rd S t | |S r   )r   r   r   r   r   'normalize_optional_array_like_or_scalar:   s   
r   c                 C  r   r   r   r   r   r   r   normalize_optional_array_like@   s   r   c                 C  s   t dd | D S )Nc                 s      | ]}t |V  qd S r   r   ).0valuer   r   r   	<genexpr>G       z+normalize_seq_array_like.<locals>.<genexpr>)tupler   r   r   r   normalize_seq_array_likeF   s   r%   c                 C  s    d }| d urt | } | j}|S r   )r   dtypetorch_dtype)r&   r   r'   r   r   r   normalize_dtypeJ   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_implementedS   s   
r/   c                 C  s$   ddl m} t| |rt| } | S Nr   ndarray)r   r2   
isinstanceoperatorindexr.   r   r2   r   r   r   normalize_axis_likeX   s   

r7   c                 C  s:   | d u r| S ddl m} t| |std|j d| jS Nr   r1   r)   z' must be an array)r   r2   r3   	TypeErrorr,   r   r6   r   r   r   normalize_ndarray`   s   
r:   c                 C  sL   | d u r| S ddl m} t| tjr|| } t| |s$td|j d| S r8   )r   r2   r3   torchTensorr9   r,   r6   r   r   r   normalize_outarrayl   s   
r=   c                 C  s   | dvrt d|  d| S )N)noequivsafe	same_kindunsafezMcasting must be one of 'no', 'equiv', 'safe', 'same_kind', or 'unsafe' (got 'z'))
ValueErrorr-   r   r   r   normalize_casting|   s
   
rD   )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   rJ   Fc                   s   | d u r|S t |tjr;|j| jkr3| dko| jdk} r&|r&| }ntd| j d|j d| j	| | S t |t
tfrRt| fddt| |D S t)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>)r3   r;   r<   shapenumelndimsqueezerC   r   copy_r$   listtypezipAssertionError)outresultrP   can_fitr   rO   r   rL      s&   

rL   c                 C  sH   ddl m} t| tjr|| S t| ttfr"t| dd | D } | S )Nr   r1   c                 s  r   r   )wrap_tensors)r    r   r   r   r   r"      r#   zwrap_tensors.<locals>.<genexpr>)r   r2   r3   r;   r<   r$   rV   rW   )r[   r2   r   r   r   r]      s   r]   c                 C  s$   |r||   S ddlm} || S r0   )itemr   r2   )valuespy_typereturn_scalarr2   r   r   r   array_or_scalar   s   rb   rO   c                  s     fdd}| d u r|S || S )Nc                   s   t   fdd}|S )Nc                    s4  t }|jtt   jt jjkr! fdd| D } nt	dd t
|  D | t d   } fdd| D }| i |}d }dv rxd jdkrx|j| i |j}|dd	rx| d
 }|d}t|||j}dv r|d u r|j| i |j}|d}t||}t|}|S )Nc                   s   g | ]}t | qS r   rJ   )r    r.   )first_paramr   r   
<listcomp>   s    zInormalizer.<locals>.normalizer_inner.<locals>.wrapped.<locals>.<listcomp>c                 s  s    | ]
\}}t ||V  qd S r   rc   )r    r.   r   r   r   r   r"      s
    
zHnormalizer.<locals>.normalizer_inner.<locals>.wrapped.<locals>.<genexpr>c                   s,   i | ]\}}|| v rt | | n|qS r   rc   )r    r,   r.   )paramsr   r   
<dictcomp>   s    zInormalizer.<locals>.normalizer_inner.<locals>.wrapped.<locals>.<dictcomp>keepdimsr   Fr   axisrZ   )inspect	signature
parametersnextiterr_   kind	ParameterVAR_POSITIONALr$   rX   lenitemsrH   bind	argumentsrG   r   apply_keepdimsrS   rL   r]   )argskwdssigr[   
bound_argsr   ri   rZ   )funcrP   )rd   rf   r   wrapped   s:   



z5normalizer.<locals>.normalizer_inner.<locals>.wrapped)	functoolswraps)r{   r|   rO   )r{   r   normalizer_inner   s   0z$normalizer.<locals>.normalizer_innerr   )_funcrP   r   r   rO   r   rI      s   4rI   r   )F).__doc__
__future__r   r}   rj   r4   typingr;    r   r   r   TypeVarr   UnionintfloatcomplexboolScalarrE   r   r	   r
   r   r   r   r   ImportErrorr   r   r   r   r%   r(   r/   r7   r:   r=   rD   rF   rJ   rL   r]   rb   rI   r   r   r   r   <module>   sf   












	



	
	
