o
    bi	                     @   s   d dl Zd dlmZ d dlmZ d dlmZ d dl	m
Z
 d$ddZd$dd	Zd
d Zdd Zdd Zdd Zdd Zd%ddZd&ddZdd Zd$ddZd'ddZd(d d!Zd$d"d#ZdS ))    N)standardize_dtype)dtypes)convert_to_tensorFc                 C   s   t jj| |dS )N)upper)nplinalgcholesky)ar    r
   R/home/ubuntu/.local/lib/python3.10/site-packages/keras/src/backend/numpy/linalg.pyr   	   s   r   c                 C   sN   t j| jd | jd}t| || d}|rt ||j}|S t |j|}|S )N)dtypelower)r   eyeshaper   solve_triangularmatmulT)r	   r   identityinv_chola_invr
   r
   r   cholesky_inverse   s   r   c                 C      t j| S N)r   r   detr	   r
   r
   r   r         r   c                 C   r   r   )r   r   eigr   r
   r
   r   r      r   r   c                 C   r   r   )r   r   eighr   r
   r
   r   r      r   r   c                 C   r   r   )r   r   invr   r
   r
   r   r    #   r   r    c                 C   sV   | j dkr
t| S | jdd  \}}d}|||krdnd7 }tjtj|d}|| S )N   z(m,n) -> (m,n), z(m)z(n)	signature)ndimsl	lu_factorr   r   	vectorize)r	   mnr$   _lu_factor_gufuncr
   r
   r   r'   '   s   

r'   c                 C   sJ   t | } t| j}d|v s|dkrt| jd}tjj| |||d|S )Nintboolfloat32)ordaxiskeepdims)	r   r   r   r   result_typer   r   normastype)xr/   r0   r1   r   r
   r
   r   r3   5   s   
r3   reducedc                 C   s&   |dvrt d| tjj| |dS )N>   r6   completez]`mode` argument value not supported. Expected one of {'reduced', 'complete'}. Received: mode=)mode)
ValueErrorr   r   qr)r5   r8   r
   r
   r   r:   ?   s   r:   c                 C   s   t j| |S r   )r   r   solver	   br
   r
   r   r;   I   s   r;   c                    sj   | j dkrtj| | dS tj fdddd}|j | j d kr0tj|dd	}|| |jdd	S || |S )
Nr!   r   c                    s   t j| | dS )Nr   )r&   r   r<   r   r
   r   <lambda>R   s    z"solve_triangular.<locals>.<lambda>z(n,n),(n,m)->(n,m)r#      r   )r0   )r%   r&   r   r   r(   expand_dimssqueeze)r	   r=   r   _vectorized_solve_triangularr
   r   r   r   M   s   


r   Tc                 C   s   t jj| ||dS )N)full_matrices
compute_uv)r   r   svd)r5   rC   rD   r
   r
   r   rE   [   s   rE   c                 C   s&   t | } t |}tjj| ||dd S )N)rcondr   )r   r   r   lstsq)r	   r=   rF   r
   r
   r   rG   _   s   rG   c                 C   s   t d)Nz*JVP is not supported by the Numpy backend.)NotImplementedError)funprimalstangentshas_auxr
   r
   r   jvpe   s   rM   )F)NNF)r6   )TTr   )numpyr   scipy.linalgr   r&   keras.src.backendr   keras.src.backend.commonr   keras.src.backend.numpy.corer   r   r   r   r   r   r    r'   r3   r:   r;   r   rE   rG   rM   r
   r
   r
   r   <module>   s&    









