o
    biR
                     @   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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)config)standardize_dtype)dtypes)cast)convert_to_tensorFc                 C   sH   t jj| |d}zt t |rtdW |S  tjjy#   Y |S w )N)upperzWCholesky decomposition failed. The input might not be a valid positive definite matrix.)	jnplinalgcholeskyanyisnan
ValueErrorjaxerrorsTracerBoolConversionError)ar   out r   P/home/ubuntu/.local/lib/python3.10/site-packages/keras/src/backend/jax/linalg.pyr
      s   	r
   c                 C   sV   t j| jd | jd}t| || d}|r t |t |}|S t t ||}|S )N)dtypelower)r   eyeshaper   solve_triangularmatmul	transpose)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	   eigxr   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+   3   r&   r+   c                 C   s8   t jj}| jdkrt| jd D ]}t|}q|| S )N   )jspr	   	lu_factorndimranger   vmap)r)   lu_factor_fnir   r   r   r.   7   s
   
r.   c                 C   sL   t | } t| jdkrt }nt| jt}t| |} t	j
j| |||dS )Nint64)ordaxiskeepdims)r   r   r   r   floatxr   result_typefloatr   r   r	   norm)r)   r5   r6   r7   r   r   r   r   r;   @   s   

r;   reducedc                 C   s&   |dvrt d| tjj| |dS )N>   r<   completez]`mode` argument value not supported. Expected one of {'reduced', 'complete'}. Received: mode=)mode)r   r   r	   qr)r)   r>   r   r   r   r?   J   s   r?   c                 C   s   t j| |S r#   )r   r	   solve)r   br   r   r   r@   T   s   r@   c                 C      t jj| ||dS )Nr   )r-   r	   r   )r   rA   r   r   r   r   r   X      r   Tc                 C   rB   )N)full_matrices
compute_uv)r   r	   svd)r)   rD   rE   r   r   r   rF   \   rC   rF   c                 C   s&   t | } t |}tjj| ||dd S )N)rcondr   )r   r   r	   lstsq)r   rA   rG   r   r   r   rH   `   s   rH   c                 C   s   t j| |||dS )N)has_aux)r   jvp)funprimalstangentsrI   r   r   r   rJ   f   rC   rJ   )F)NNF)r<   )TTr#   )r   	jax.numpynumpyr   	jax.scipyscipyr-   keras.src.backendr   r   keras.src.backend.commonr   keras.src.backend.jax.corer   r   r
   r!   r$   r'   r*   r+   r.   r;   r?   r@   r   rF   rH   rJ   r   r   r   r   <module>   s,    



	





