U
    ©Ê¹j©  ã                   @  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   úR/var/www/html/bwave/python/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'   /   s    r'   )ÚoutzSequence[ArrayLike])Úinputsc                C  s   t j | ¡S r   )r   r&   Ú	multi_dot)r*   r)   r   r   r   r+   6   s    r+   ©r   r   c                 C  s   t | |ƒ\} }tj | |¡S r   )r   r   r&   Úsolver,   r   r   r   r-   ?   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   F   s    r0   c                 C  s   t | ƒ} tj | ¡}|S r   )r   r   r&   Úinv©r   Úresultr   r   r   r1   P   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   X   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   _   s    r8   é   c                 C  s   t | ƒ} tjj| |d�S )N)Úind)r   r   r&   Ú	tensorinv)r   r:   r   r   r   r;   f   s    r;   c                 C  s   t | ƒ} tj | ¡S r   )r   r   r&   Údetr   r   r   r   r<   p   s    r<   c                 C  s   t | ƒ} tj | ¡S r   )r   r   r&   Úslogdetr   r   r   r   r=   w   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Œ   
	
