
    2Vh                         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 Z
d Zd	 Zd
 Zd Zd ZddZddZd ZddZddZddZy)    N)config)standardize_dtype)dtypes)cast)convert_to_tensorc                     t         j                  j                  |       }t         j                  j	                  |d      S )NCholesky)tflinalgcholesky	debuggingcheck_numerics)aouts     S/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/backend/tensorflow/linalg.pyr   r   
   s-    
))

Q
C<<&&sJ77    c                 @    t         j                  j                  |       S N)r
   r   detr   s    r   r   r          99==r   c                 @    t         j                  j                  |       S r   )r
   r   eigr   s    r   r   r      r   r   c                 @    t         j                  j                  |       S r   )r
   r   eighr   s    r   r   r      s    99>>!r   c                 @    t         j                  j                  |       S r   )r
   r   invr   s    r   r   r      r   r   c                     t         j                  j                  |       \  }}|t         j                  j	                  |      fS r   )r
   r   lumathinvert_permutation)r   r   ps      r   	lu_factorr#       s1    IILLOEBrww))!,,,r   c                    ddl m} t        |       } | j                  }|j                  |t        t                    }nt        |t              r|f}t        fd|D              rt        d d|       t        |      dk(  r|d   n|}t        |t              rdn
t        |      }t        | j                        dk(  rt        j                         }n$t!        j"                  | j                  t$              }t'        | |      } |dk(  r||dk(  rKt)        j*                  t)        j,                  | t(        j.                  j1                  |       z  ||	            S |t%        d
      k(  r?t(        j.                  j3                  t(        j.                  j5                  |       ||	      S |t%        d      k(  r?t(        j.                  j7                  t(        j.                  j5                  |       ||	      S |dk(  rUt(        j.                  j-                  t)        j&                  t)        j8                  | d      | j                        ||	      S t        |t:              rt        d|       t        || j                        }t(        j.                  j-                  t)        j<                  t(        j.                  j5                  |       |      ||	      }t)        j<                  |d|z        S |dk(  rE|d   |d   }
}	|	dk  r|	z   n|	}	|
dk  r|
z   n|
}
||dk(  rKt)        j*                  t)        j,                  | t(        j.                  j1                  |       z  ||	            S |dk(  rc|s
|
|	kD  r|
dz  }
t(        j.                  j3                  t)        j,                  t(        j.                  j5                  |       |	|	      |
|	      } | S |dk(  rc|s
|
|	kD  r|
dz  }
t(        j.                  j7                  t)        j,                  t(        j.                  j5                  |       |	|	      |
|	      } | S |t%        d
      k(  rc|s
|	|
kD  r|	dz  }	t(        j.                  j3                  t)        j,                  t(        j.                  j5                  |       |
|	      |	|	      } | S |t%        d      k(  rc|s
|	|
kD  r|	dz  }	t(        j.                  j7                  t)        j,                  t(        j.                  j5                  |       |
|	      |	|	      } | S |dv r || |d      } |dk(  rAt(        j.                  j7                  t(        j>                  jA                  | d      d      } n|dk(  rAt(        j.                  j3                  t(        j>                  jA                  | d      d      } n@t(        j.                  j-                  t(        j>                  jA                  | d      d      } |r2t)        jB                  | |d         } t)        jB                  | |d         } | S t        d|       t        d|       )Nr   )moveaxisc              3   8   K   | ]  }| k  xs |k\    y wr    ).0r   ndims     r   	<genexpr>znorm.<locals>.<genexpr>0   s#     
0a1u9!T	!
0s   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-   )r6   r4   r6   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   r2   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_axesr2   r   row_axiscol_axisr)   s              @r   normrW   %   s   ;!AggG<<D|U4[!	D#	w

04
00))-mD6C
 	
 $i1n47$DtS)qs4yH!W,""177E2QA 1};#(77a"'',,q/1xP  E%L 77%%ATH &   E&M!77%%ATH &   AX77%%Q*!'':! &  
 S!HN  $Cqww7C''$$rww{{1~s+$ % C 66#sSy))	Q!!Wd1g(&.l8d?&.l8d?;#,77a"'',,q/1xP  AX8 3A""bggkk!n8hO! # Ad [ BY8 3A""bggkk!n8hO! # AT K E%L 8 3A""bggkk!n8hO! # AD ; E&M!8 3A""bggkk!n8hO! # A4 + N"D(+AbyGG&&IIMM!M6R '  GG&&IIMM!M6R '  GG&&IIMM!M6R '  NN1d1g.NN1d1g.
  HN 
 ?vFGGr   c                     |dvrt        d|       |dk(  rt        j                  j                  |       S t        j                  j                  | d      S )N>   reducedcompletez]`mode` argument value not supported. Expected one of {'reduced', 'complete'}. Received: mode=rY   Tfull_matrices)rA   r
   r   qr)rQ   modes     r   r]   r]      sZ    **"V%
 	

 yyy||A99<<<..r   c                 :   |j                   j                  | j                   j                  dz
  k(  rLt        j                  |d      }t        j                  t        j
                  j                  | |      d      S t        j
                  j                  | |      S )Nr+   r4   r8   )r:   ndimsr
   rP   squeezer   solve)r   bs     r   rb   rb      sd    ww}}))NN12&zz"))//!Q/b9999??1a  r   c                 B   |j                   j                  | j                   j                  dz
  k(  rNt        j                  |d      }t        j                  t        j
                  j                  | ||      d      S t        j
                  j                  | ||      S )Nr+   r4   r8   )lower)r:   r`   r
   rP   ra   r   triangular_solve)r   rc   re   s      r   solve_triangularrg      sy    ww}}))NN12&zzII&&q!5&9
 	
 99%%a%%88r   c                     |du r"t         j                  j                  | |d      S t         j                  j                  | ||      \  }}}||t         j                  j                  |      fS )NF)r\   r7   )r
   r   rO   adjoint)rQ   r\   r7   suvs         r   rO   rO      se    Uyy}}Qm}NNiimm	:  GAq! a""1%%%r   c                    t        |       } t        |      }| j                  d   |j                  d   k7  rt        d      |j                  }|dk(  r	|d d d f   }| j                  dk7  rt	        | j                   d      |j                  dk7  rt	        |j                   d      | j                  \  }}| j
                  }t        j                  j                  j                  |      j                  }| j                  dk(  rUt        j                  d| j
                        }t        j                  |g|j                  dd  | j
                        }	n[||t        ||      z  }nt        j                  |dk  ||      }t        | d	
      \  }
}}|t        j                   ||j
                        |d   z  k\  }t        j                  t        j                  ||d      | j
                        }t        j                  |d|z  d      d d t        j                   f   }t        j"                  t        j$                  t        j&                  j)                  |
            |      }t        j"                  t        j$                  t        j&                  j)                  |            ||z        }	|dk(  rt        j*                  |	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'   r1   Fr[   r4   )r   r:   rA   r)   	TypeErrorr2   r
   experimentalnumpyfinfoepszerosmaxwhererO   r   newaxismatmul	transposer    rH   reshape)r   rc   rcondb_orig_ndimmnr2   rr   rj   rQ   rk   vtmasksafe_ss_invu_t_bs                   r   lstsqr      s;   !A!AwwqzQWWQZHII&&KaagJvv{vvhMN
 	
 	vv{vvh 3 3
 	
 77DAqGGE
//


%
%e
,
0
0Cww"}HHQagg&HHa&!''!"+&agg6=#a)OEHHUQYU3Eq.1bB((agg>1EE$1-QWW=q6z1-am<		",,rww||A7;IIbll277<<#34eemDaJJq2$Hr   )NNF)rY   )F)TTr   )
tensorflowr
   keras.src.backendr   r   keras.src.backend.commonr   !keras.src.backend.tensorflow.corer   r   r   r   r   r   r   r#   rW   r]   rb   rg   rO   r   r'   r   r   <module>r      sV     $ / + 2 ?8-
vHr	/!9&%r   