o
    2h                     @   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 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S )'    N)config)standardize_dtype)dtypes)cast)convert_to_tensorc                 C   s   t j| }t j|dS )NCholesky)tflinalgcholesky	debuggingcheck_numerics)aout r   ^/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/backend/tensorflow/linalg.pyr
   
   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   s    t j| \}}|t j|fS r   )r   r	   lumathinvert_permutation)r   r   pr   r   r   	lu_factor    s   r   Fc                    sX  ddl m} t| } | j}|j |d u rtt }nt|tr#|f}t	 fdd|D r8t
d  d| t|dkrB|d n|}t|trKdnt|}t| jdkr[t }nt| jt}t| |} |dkr|d u ss|d	krttj| tj|  ||d
S |tdkrtjjtj| ||d
S |tdkrtjjtj| ||d
S |dkrtjjtjt| d| jd||d
S t|trt
d| t|| jd}tjjttj| |||d
}t|d| S |d	kr%|d |d }	}
|	dk r|	  n|	}	|
dk r|
  n|
}
|d u s|dkr,ttj| tj|  ||d
S |dkrR|s=|
|	kr=|
d8 }
tjjtjtj| |	|d
|
|d
} | S |dkrx|sc|
|	krc|
d8 }
tjjtjtj| |	|d
|
|d
} | S |tdkr|s|	|
kr|	d8 }	tjjtjtj| |
|d
|	|d
} | S |tdkr|s|	|
kr|	d8 }	tjjtjtj| |
|d
|	|d
} | S |dv r|| |d} |dkrtjjtjj | dddd} n"|d	krtjjtjj | dddd} ntjjtjj | dddd} |rt!| |d } t!| |d } | S t
d| t
d| )Nr   )moveaxisc                 3   s"    | ]}|  k p| kV  qd S r   r   ).0r   ndimr   r   	<genexpr>0   s     znorm.<locals>.<genexpr>zPAll `axis` values must be in the range [-ndim, ndim). Received inputs with ndim=z, while axis=   int64   )axiskeepdimsinfz-infdtypez6Invalid `ord` argument for vector norm. Received: ord=g      ?fro)nucr%   )r.   r,   r.   F)
compute_uvr&   z6Invalid `ord` argument for matrix norm. Received: ord=z$Invalid axis values. Received: axis=)""keras.src.backend.tensorflow.numpyr   r   shaperanktuplerange
isinstanceintany
ValueErrorlenr   r*   r   floatxr   result_typefloatr   r   sqrt
reduce_sumr   conj
reduce_maxabs
reduce_min	not_equalstrpowr	   svdexpand_dims)xordr&   r'   r   x_shapenum_axesr*   r   row_axiscol_axisr   r    r   norm%   s   





2
*"


rO   reducedc                 C   s:   |dvrt d| |dkrtj| S tjj| ddS )N>   rP   completez]`mode` argument value not supported. Expected one of {'reduced', 'complete'}. Received: mode=rP   Tfull_matrices)r9   r   r	   qr)rI   moder   r   r   rT      s   rT   c                 C   sH   |j j| j jd krtj|dd}tjtj| |ddS tj| |S )Nr#   r,   r0   )r2   ndimsr   rH   squeezer	   solve)r   br   r   r   rX      s   rX   c                 C   sP   |j j| j jd krtj|dd}tjtjj| ||dddS tjj| ||dS )Nr#   r,   r0   )lower)r2   rV   r   rH   rW   r	   triangular_solve)r   rY   rZ   r   r   r   solve_triangular   s   r\   Tc                 C   sD   |du rt jj| |ddS t jj| ||d\}}}||t j|fS )NF)rS   r/   )r   r	   rG   adjoint)rI   rS   r/   suvr   r   r   rG      s   rG   c                 C   s  t | } t |}| jd |jd krtd|j}|dkr%|d d d f }| jdkr2t| j d|jdkr?t|j d| j\}}| j}tjj	|j
}| jdkrntjd| jd}tj|g|jdd  R | jd}	ne|d u rz|t|| }n	t|dk ||}t| d	d
\}
}}|tj ||jd|d  k}tjt||d| jd}t|d| dd d tjf }tttj|
|}tttj||| }	|dkrt|	dg}	|	S )Nr   z-Leading dimensions of input arrays must matchr#   r%   z7-dimensional array given. Array must be two-dimensionalz>-dimensional array given. Array must be one or two-dimensionalr   r)   FrR   r,   )r   r2   r9   r!   	TypeErrorr*   r   experimentalnumpyfinfoepszerosmaxwhererG   r   newaxismatmul	transposer   r@   reshape)r   rY   rcondb_orig_ndimmnr*   re   r^   rI   r_   vtmasksafe_ss_invu_t_br   r   r   lstsq   sB   





$ rv   )NNF)rP   )F)TTr   )
tensorflowr   keras.src.backendr   r   keras.src.backend.commonr   !keras.src.backend.tensorflow.corer   r   r
   r   r   r   r   r   rO   rT   rX   r\   rG   rv   r   r   r   r   <module>   s$    

y

		