U
    yh                     @  s\  d dl mZ d dlZd dlZd dlmZ d dlZddlmZm	Z	 ddl
mZmZmZ G dd deZd	d
 Zdd Zdd ZeeddddZeeddddddZeedddddZeedFdddddZeeddddZeedGddd!d"ZeedHdddd#d$ZeedIddd&d'Zeeddd(d)Zeeddd*d+ZeedJdd,d-d.ZeedKddd/d0ZeedLdd1d2d3d4Zeeddd5d6Z eedMddd8d9Z!eedNddd;d<Z"eeddd=d>Z#eedOddd@dAZ$eedddBdCZ%eedPdddDdEZ&dS )Q    )annotationsN)Sequence   )_dtypes_impl_util)	ArrayLikeKeepDims
normalizerc                   @  s   e Zd ZdS )LinAlgErrorN)__name__
__module____qualname__ r   r   E/var/www/html/venv/lib/python3.8/site-packages/torch/_numpy/linalg.pyr
      s   r
   c                 C  s$   | j js | j js | t j} | S N)dtypeis_floating_point
is_complextor   default_dtypesfloat_dtypear   r   r   _atleast_float_1   s    r   c                 C  sB   t | |}|js"|js"t  j}t| |} t||}| |fS r   )r   Zresult_type_implr   r   r   r   r   Zcast_if_needed)r   bZdtypr   r   r   _atleast_float_2   s    
r   c                   s   t   fdd}|S )Nc               
     sB   z | |W S  t jjk
r< } zt|j W 5 d }~X Y nX d S r   )torchZ_CZ_LinAlgErrorr
   args)r   kwdsefuncr   r   wrapped$   s    zlinalg_errors.<locals>.wrapped)	functoolswraps)r!   r"   r   r    r   linalg_errors#   s    r%   r   r   c                 C  s   t | } tj| |S r   )r   r   linalgmatrix_power)r   nr   r   r   r'   1   s    r'   )outzSequence[ArrayLike])inputsc                C  s   t j| S r   )r   r&   	multi_dot)r*   r)   r   r   r   r+   8   s    r+   r   r   c                 C  s   t | |\} }tj| |S r   )r   r   r&   solver,   r   r   r   r-   A   s    r-   c                 C  s6   t | |\} }| js|jrdnd}tjj| |||dS )NZgelsZgelsd)rconddriver)r   Zis_cudar   r&   lstsq)r   r   r.   r/   r   r   r   r0   H   s    r0   c                 C  s   t | } tj| }|S r   )r   r   r&   invr   resultr   r   r   r1   R   s    r1   V瞯<Fc                 C  s   t | } tjj| ||dS )N)rtol	hermitian)r   r   r&   pinv)r   r.   r6   r   r   r   r7   Z   s    r7   c                 C  s    t | |\} }tjj| ||dS )N)Zdims)r   r   r&   tensorsolve)r   r   Zaxesr   r   r   r8   a   s    r8      c                 C  s   t | } tjj| |dS )N)ind)r   r   r&   	tensorinv)r   r:   r   r   r   r;   h   s    r;   c                 C  s   t | } tj| S r   )r   r   r&   detr   r   r   r   r<   r   s    r<   c                 C  s   t | } tj| S r   )r   r   r&   slogdetr   r   r   r   r=   y   s    r=   )xc                 C  s\   t | } |  dkr4t| jdd  dkr4tdtjj| |d}t	t
|td|S )Nr   z#cond is not defined on empty arrays)pinf)r   Znumelmathprodshaper
   r   r&   condwhereisnanfloat)r>   r@   r3   r   r   r   rE      s
    $rE   c                 C  sn   t | } | jdk r"t| dk S |d krPd}t| jdd  t| jj	 }n
|d }}tj
j| |||dS )Nr9   r   r?   )atolr5   r6   )r   ndimintanymaxrD   r   Zfinfor   epsr&   matrix_rank)r   Ztolr6   rI   r5   r   r   r   rO      s    
"
rO   r   )r>   keepdimsc                 C  s   t | } tjj| ||dS )N)orddim)r   r   r&   norm)r>   rQ   ZaxisrP   r   r   r   rS      s    rS   c                 C  s   t | } tj| S r   )r   r   r&   choleskyr   r   r   r   rT      s    rT   reducedc                 C  s*   t | } tjj| |d}|dkr&|j}|S )N)moder)r   r   r&   qrR)r   rV   r3   r   r   r   rX      s
    rX   Tc                 C  s,   t | } |stj| S tjj| |d}|S )N)full_matrices)r   r   r&   Zsvdvalssvd)r   rZ   Z
compute_uvr6   r3   r   r   r   r[      s
    r[   c                 C  sJ   t | } tj| \}}|  sB| rB|jdk rB|j}|j}||fS Nr   )r   r   r&   eigr   imagallreal)r   wvtr   r   r   r]      s    r]   Lc                 C  s   t | } tjj| |dS N)UPLO)r   r   r&   eighr   re   r   r   r   rf      s    rf   c                 C  s<   t | } tj| }|  s8| r8|jdk r8|j}|S r\   )r   r   r&   eigvalsr   r^   r_   r`   r2   r   r   r   rh      s
    rh   c                 C  s   t | } tjj| |dS rd   )r   r   r&   eigvalshrg   r   r   r   ri      s    ri   )N)r4   F)N)r9   )N)NF)NNF)rU   )TTF)rc   )rc   )'
__future__r   r#   rB   typingr   r    r   r   Z_normalizationsr   r   r	   	Exceptionr
   r   r   r%   r'   r+   r-   r0   r1   r7   r8   r;   r<   r=   rE   rO   rS   rT   rX   r[   r]   rf   rh   ri   r   r   r   r   <module>   s   
	
