a
    9];	                     @   s   d dl mZ d dlZd dlmZ d dlmZ d dl	m
Z
mZmZmZ eejje  dddZe
ee d	d
 ZdddZe
eeddd dddZeee dd Zeee dd Zeee dS )    )divisionN)wrap_namespace)defvjpdefvjp_argnumsdefjvpdefjvp_argnumsT@   c                    s&   |sJ dt |   fdd}|S )Nz(sqrtm vjp not implemented for disp=Falsec                    s   t t  | S )N)anprealsolve_sylvestergZ
ans_transp e/var/www/html/gerincmet/prog_calc/prog_calc/venv/lib/python3.9/site-packages/autograd/scipy/linalg.pyvjp   s    z_vjp_sqrtm.<locals>.vjp)r	   	transpose)ansAdisp	blocksizer   r   r   r   
_vjp_sqrtm
   s    
r   c                 C   s.   t | r|dv rdS dS |dv r&dS dS d S )N)Nr   Hr   T)r	   Ziscomplexobjatransr   r   r   _flip   s    
r   Fc                    sP   t  dkA rtjntj fdddd  fdd}|S )Nr   c                    s   t  dkr| S | jS )Nr   )r   r   xr   r   r   <lambda>       z'grad_solve_triangular.<locals>.<lambda>c                 S   s   | j dkr| S | d S )N   ).N)ndimr   r   r   r   r!      r"   c                    s6   t  | t d}t|j S N)r   lower)solve_triangularr   r	   dotr   )r   vr   Zal2dr   r&   r   r   Ztrir   r   r      s    z"grad_solve_triangular.<locals>.vjp)r   r	   ZtrilZtriu)r   r   br   r&   kwargsr   r   r*   r   grad_solve_triangular   s
    r-   c                    s    fddS )Nc                    s   t  | t dS r%   )r'   r   r   r   r&   r   r   r   r!   $   r"   z<lambda>.<locals>.<lambda>r   )r   r   r+   r   r&   r,   r   r.   r   r!   #   s    r!   c                 C   s   |sJ dt ||| S )Nz(sqrtm jvp not implemented for disp=False)r   )ZdAr   r   r   r   r   r   r   
_jvp_sqrtm&   s    r/   c                 C   s   |\}}}d| v r0|d }d| v r*|d nd}	nd}d| v rD|d nd}	d| v rX|d nd}
|
t || t ||	 }t|||S )Nr   r#      )r	   r(   r   )argnumsZdmsr   args_r   r+   qdaZdbZdqrhsr   r   r   _jvp_sylvester+   s    
r8   c                    s    |\ } fdd}|S )Nc                    sz   g }t t t| }dv r>|t|t  dv r`|tt|  dv rr|| t|S )Nr   r#   r0   )r   r	   r   appendr(   tuple)r   ZvjpsZq_vjpr   r   r2   r+   r   r   r   :   s    ""z_vjp_sylvester.<locals>.vjpr   )r2   r   r3   r4   r5   r   r   r;   r   _vjp_sylvester8   s    
r<   )Tr   )r   F)r   F)Tr   )
__future__r   Zscipy.linalgZscipyZautograd.numpynumpyr	   Zautograd.numpy.numpy_wrapperr   Zautograd.extendr   r   r   r   Zlinalg__dict__globalsr   Zsqrtmr   r-   r'   r/   r8   r   r<   r   r   r   r   <module>   s&   


	



