
    sh.i                    0   S r SSKrSSKrSSKJr  SSKrSSKrSSKJ	r	J
r
JrJr  SSKJr  SSKJrJrJr  SSKJrJrJr  SSKJrJrJr  S	S
KJrJrJr  SSKJ r!  \RD                  " S5      r#\#RI                  5       r%\%r&\RD                  " S5      r'\'RI                  5       r(\RR                  r)\)RI                  5       r*\RV                  r,\RZ                  (       a?  \RV                  r.\R^                  S\R`                  S\Rb                  S\Rd                  S0r3O>\Rh                  r.\Rj                  S\Rl                  S\Rn                  S\Rp                  S0r3SgS jr9S r:S r;S r< " S S5      r= " S S5      r>\R~                  S 5       r@S rAS rBS rCS rDS rES  rFS! rGS" rHS# rIShS$ jrJ\" \R                  5      S% 5       rL\" \R                  5      S& 5       rNS' rO\" \R                  5      S( 5       rPS) rQS* rRS+ rSS, rT\" \R                  5      S- 5       rU\RZ                  (       a#  \R                  " S.\R                  " 5       5      rXO"\R                  " S.\R                  " 5       5      rX\S/ 5       rZSiS0 jr[S1 r\S2 r]\" \]5      S3 5       r^\S4 5       r_\S5 5       r`\" \R                  R                  5      S6 5       rc\S7 5       rdSiS8 jre\" \R                  R                  5      S9 5       rg\" \R                  R                  5      S: 5       ri\" \R                  R                  5      S; 5       rk\" \R                  R                  5      S< 5       rm\" \R                  R                  5      S= 5       ro\" \R                  R                  5      SjS> j5       rq\" \R                  R                  5      S? 5       rsS@ rt\" \t5      SA 5       ruSB rv\" \v5      SC 5       rwSD rx\" \x5      SE 5       rySF rz\" \z5      SG 5       r{SH r|\" \|5      SI 5       r}SJ r~\" \~5      SK 5       r\" \R                  GR                   5      SkSL j5       rSM r\" \5      SN 5       r\" \R                  GR                  5      SO 5       r\" \R                  GR                  5      SlSP j5       rSQ r\" \R                  GR                  5      SR 5       r\" \R                  GR                  5      SS 5       rST r\" \5      SU 5       rSV r\" \5      SW 5       rSX r\" \R                  GR$                  5      SmSY j5       r\" \R                  GR(                  5      SmSZ j5       r\S[ 5       r\" \R                  GR.                  5      SmS\ j5       r\" \R                  GR2                  5      S] 5       r\" \GR6                  5      SnS^ j5       rSiS_ jr\S` 5       r\Sa 5       rSb r\" \GRB                  5      SmSc j5       rSd rSe r\" \GRJ                  5      Sf 5       rg)oz.
Implementation of linear algebra operations.
    N)ir)lower_builtinimpl_ret_borrowedimpl_ret_new_refimpl_ret_untracked)	signature)	intrinsicoverloadregister_jitable)typescgutilsconfig)TypingErrorNumbaTypeErrorNumbaPerformanceWarning   )
make_array_empty_nd_impl
array_copy)numpy_support       sdczc                 V    [         R                  U 5      nUc  [        SU< S35      eU$ )Nzunsupported dtype for z())_blas_kindsgetr   )dtype	func_namekinds      c/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/np/linalg.pyget_blas_kindr$   ;   s(    ??5!D|YHIIK    c                  @     SS K n g ! [         a    [        S5      ef = fNr   z*scipy 0.16+ is required for linear algebra)scipy.linalg.cython_blasImportErrorscipys    r#   ensure_blasr,   B   s(    H' HFGGH    c                  @     SS K n g ! [         a    [        S5      ef = fr'   )scipy.linalg.cython_lapackr)   r*   s    r#   ensure_lapackr0   I   s(    H) HFGGHr-   c                 R    U R                  XU5      n[        R                  " X5      $ N)get_constant_genericr   alloca_once_value)contextbuildertyvalconsts        r#   make_constant_slotr:   P   s%    ((c:E$$W44r%   c                   >    \ rS rSrSrS r\S 5       r\S 5       rSr	g)_BLASU   zA
Functions to return type signatures for wrapped
BLAS functions.
c                     [        5         g r2   )r,   selfs    r#   __init___BLAS.__init__[   s    r%   c           	      "   [        USU5      n[        R                  " [        R                  [        R                  [        R
                  " U5      [        R                  [        R
                  " U5      5      n[        R                  " SU5      $ )Nunderlying_floatnumba_xxnrm2getattrr   intccharintpCPointerExternalFunctionclsr    rtypesigs       r#   rE   _BLAS.numba_xxnrm2^   s`    159jj..	0 %%nc::r%   c                 :   [         R                  " [         R                  [         R                  [         R                  [         R                  [         R                  [         R                  [         R                  " U5      [         R                  " U5      [         R                  [         R                  " U5      [         R                  [         R                  " U5      [         R                  " U5      [         R                  5      n[         R
                  " SU5      $ )Nnumba_xxgemmr   rH   rI   rJ   rK   rL   rN   r    rP   s      r#   rS   _BLAS.numba_xxgemmi   s    jjJJJJJJJJJJJJNN5!NN5!JJNN5!JJNN5!NN5!JJ
  %%nc::r%    N)
__name__
__module____qualname____firstlineno____doc__rA   classmethodrE   rS   __static_attributes__rW   r%   r#   r<   r<   U   s4    
 ; ; ; ;r%   r<   c                       \ rS rSrSrS r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       rSrg)_LAPACK~   zC
Functions to return type signatures for wrapped
LAPACK functions.
c                     [        5         g r2   )r0   r?   s    r#   rA   _LAPACK.__init__   s    r%   c           
      .   [         R                  " [         R                  [         R                  [         R                  [         R                  " U5      [         R                  [         R                  " [
        5      5      n[         R                  " SU5      $ )Nnumba_xxgetrfr   rH   rI   rJ   rK   F_INT_nbtyperL   rU   s      r#   re   _LAPACK.numba_xxgetrf   sX    jj.5 %%os;;r%   c           	         [         R                  " [         R                  [         R                  [         R                  " U5      [         R                  [         R                  " [
        5      5      n[         R                  " SU5      $ )Nnumba_ez_xxgetrirf   rU   s      r#   rj   _LAPACK.numba_ez_xxgetri   sR    jj.5	 %%&8#>>r%   c                    [         R                  " [         R                  [         R                  [         R                  [         R                  [         R                  " U5      [         R                  [         R                  " U5      [         R                  " U5      [         R                  " U5      [         R                  [         R                  " U5      [         R                  5      n[         R
                  " SU5      $ )Nnumba_ez_rgeevrT   rU   s      r#   rm   _LAPACK.numba_ez_rgeev   s    jj..... %%&6<<r%   c                    [         R                  " [         R                  [         R                  [         R                  [         R                  [         R                  " U5      [         R                  [         R                  " U5      [         R                  " U5      [         R                  [         R                  " U5      [         R                  5      n[         R
                  " SU5      $ )Nnumba_ez_cgeevrT   rU   s      r#   rp   _LAPACK.numba_ez_cgeev   s    jj.... %%&6<<r%   c                 ^   [        USU5      n[        R                  " [        R                  [        R                  [        R                  [        R                  [        R
                  " U5      [        R                  [        R
                  " U5      5      n[        R                  " SU5      $ )NrD   numba_ez_xxxevdrF   )rN   r    wtyperP   s       r#   rs   _LAPACK.numba_ez_xxxevd   so    159jj.. %%&7==r%   c                     [         R                  " [         R                  [         R                  [         R                  [         R                  " U5      [         R                  5      n[         R
                  " SU5      $ )Nnumba_xxpotrfrT   rU   s      r#   rw   _LAPACK.numba_xxpotrf   sL    jj.	 %%os;;r%   c                    [        USU5      n[        R                  " [        R                  [        R                  [        R                  [        R                  [        R
                  " U5      [        R                  [        R
                  " U5      [        R
                  " U5      [        R                  [        R
                  " U5      [        R                  5      n[        R                  " SU5      $ )NrD   numba_ez_gesddrF   )rN   r    styperP   s       r#   rz   _LAPACK.numba_ez_gesdd   s    159jjJJJJJJJJNN5!JJNN5!NN5!JJNN5!JJ
 %%&6<<r%   c           
      &   [         R                  " [         R                  [         R                  [         R                  [         R                  " U5      [         R                  [         R                  " U5      5      n[         R
                  " SU5      $ )Nnumba_ez_geqrfrT   rU   s      r#   r~   _LAPACK.numba_ez_geqrf   sZ    jjJJJJJJNN5!JJNN5!
 %%&6<<r%   c                 D   [         R                  " [         R                  [         R                  [         R                  [         R                  [         R                  " U5      [         R                  [         R                  " U5      5      n[         R
                  " SU5      $ )Nnumba_ez_xxgqrrT   rU   s      r#   r   _LAPACK.numba_ez_xxgqr   sa    jjJJJJJJJJNN5!JJNN5!
 %%&6<<r%   c                 
   [        USU5      n[        R                  " [        R                  [        R                  [        R                  [        R                  [        R
                  " U5      [        R                  [        R
                  " U5      [        R                  [        R
                  " U5      [        R                  [        R
                  " [        R                  5      5      n[        R                  " SU5      $ )NrD   numba_ez_gelsd)rG   r   rH   rI   rJ   rK   float64rL   rM   s       r#   r   _LAPACK.numba_ez_gelsd   s    159jjJJJJJJJJNN5!JJNN5!JJNN5!MMNN5::&
 %%&6<<r%   c                 v   [         R                  " [         R                  [         R                  [         R                  [         R                  " U5      [         R                  [         R                  " [
        5      [         R                  " U5      [         R                  5      n[         R                  " SU5      $ )Nnumba_xgesvrf   rU   s      r#   r   _LAPACK.numba_xgesv  sl    jjJJJJJJNN5!JJNN<(NN5!JJ	
 %%mS99r%   rW   N)rX   rY   rZ   r[   r\   rA   r]   re   rj   rm   rp   rs   rw   rz   r~   r   r   r   r^   rW   r%   r#   r`   r`   ~   s    
 < < ? ? = =  = = 
> 
> < < = =$ 	= 	= 
= 
= = =" : :r%   r`   c              #     #    / n/ n/ n[        UR                  U5       H  u  px[        U[        R                  5      (       a  UR
                  S;   a  XxpO9UR                  SS9n	[        X5      n[        XX45      n
UR                  X45        UR                  U	5        UR                  U
5        M     [        UR                  /UQ76 [        U5      4v   U H!  u  pxU R                  R                  XU5        M#     g7f)zs
Ensure that all array arguments are contiguous, if necessary by
copying them.
A new (sig, args) tuple is yielded.
CFClayoutN)zipargs
isinstancer   Arrayr   copyr   r   appendreturn_typetuplenrtdecref)r5   r6   rP   r   newtysnewargscopiesr7   r8   newtynewvalcopysigs               r#   make_contiguousr   !  s      FGFsxx&"ekk**bii4.?6GG3G'E*G'6BFMM5/*ev ' COO
-f
-uW~
==7, s   C>D c                    ^ SmU4S jnU R                  X[        [        R                  [        R                  5      U45        g)z&
Check whether *n* fits in a C `int`.
ic                 (   > U T:  a  [        S5      eg )Nz$array size too large to fit in C int)OverflowError)n_maxints    r#   implcheck_c_int.<locals>.impl@  s    w; FGG r%   N)compile_internalr   r   nonerJ   )r5   r6   r   r   r   s       @r#   check_c_intr   :  s9     GH W&uzz5::>Fr%   c                     UR                  [        R                  " X5      SS9   U R                  U5      nUR	                  5         UR                  S5        SSS5        g! , (       d  f       g= f)zO
Check the integer error return from one of the BLAS wrappers in
_helperlib.c.
Flikelyz#BLAS wrapper returned with an errorNif_thenr   is_not_nullget_python_api
gil_ensurefatal_errorr5   r6   respyapis       r#   check_blas_returnr   H  sW    
 
,,W:5	I&&w/?@	 
J	I	I   3A!!
A/c                     UR                  [        R                  " X5      SS9   U R                  U5      nUR	                  5         UR                  S5        SSS5        g! , (       d  f       g= f)zQ
Check the integer error return from one of the LAPACK wrappers in
_helperlib.c.
Fr   z%LAPACK wrapper returned with an errorNr   r   s       r#   check_lapack_returnr   T  sW    
 
,,W:5	I&&w/AB	 
J	I	Ir   c                 <   [         R                  " [         R                  " S5      [        [        [        [
        [
        [
        /5      n[        R                  " UR                  US5      n	[        U5      n
[         R                  " [        [        U
5      5      n[         R                  " [        [        U5      5      nUR                  XX$UR                  U[
        5      UR                  U[
        5      UR                  U[
        5      45      n[        XU5        g)zI
Call the BLAS vector * vector product function for the given arguments.
r   numba_xxdotN)r   FunctionTypeIntTypell_charintp_t	ll_void_pr   get_or_insert_functionmoduler$   Constantordintcallbitcastr   )r5   r6   	conjugater    r   a_datab_dataout_datafntyfnr"   kind_valr   s                r#   
call_xxdotr   `  s    
 ??2::b>#Wf%y)D 
	'	'm	LBD{{7CI.HGS^4I
,,ri#OOFI>#OOFI>#OOHi@B CC g,r%   c                 t   [         R                  " [         R                  " S5      [        [        [        [        [
        [
        [        [
        [
        [
        /
5      n[        R                  " UR                  US5      n	UR                  n
[        XU
S5      n[        XU
S5      nUR                  S:X  a
  Uu  pUS   nO	Uu  pUS   n[        U
5      n[         R                  " [        [        U5      5      n[         R                  " [        U(       a  [        S5      O
[        S	5      5      nUR                  U	UUXUR!                  U[
        5      UR!                  U[
        5      UUR!                  U[
        5      UR!                  U[
        5      UR!                  U[
        5      4
5      n[#        XU5        g
)zI
Call the BLAS matrix * vector product function for the given arguments.
r   numba_xxgemv      ?        Fr   r   tr   N)r   r   r   r   r   r   r   r   r   r    r:   r   r$   r   r   r   r   r   )r5   r6   do_transm_typem_shapesm_datav_datar   r   r   r    alphabetamr   ldar"   r   transr   s                       r#   call_xxgemvr   v  sO   
 ??2::b>#W"F%y&%y)D 
	'	'n	MBLLEw<Egs;D}}qkqkD{{7CI.HKKXS3s8DE
,,rHeQ#OOE9=#OOFI>#OOFI>#OOD)<#OOHi@B CC g,r%   c                   ^^^!^" [         R                  " [         R                  " S5      [        [        [        [        [        [        [
        [
        [        [
        [        [
        [
        [        /5      n[        R                  " TR                  US5      nUu  pUu  nnUR                  n[        U TUS5      n[        U TUS5      n[         R                  " [        [        S5      5      m"[         R                  " [        [        S5      5      m!UU!UU"4S jnU" XVU5      u  nnnU" X#U5      u  nnnU" TX5      u  nnn[        U5      n[         R                  " [        [        U5      5      nTR                  UUUUUXTR                  U[
        5      UUUUTR                  U[
        5      UU45      n [!        U TU 5        g)	zI
Call the BLAS matrix * matrix product function for the given arguments.
r   rS   r   r   r   r   c                    > U R                   TR                   :X  a  TOTU R                   S:X  a  US   OUS   TR                  U[        5      4$ )Nr   r   r   )r   r   r   )r7   shapesdatar6   notransout_typer   s      r#   get_array_param$call_xxgemm.<locals>.get_array_param  sI     yyHOO3Gc)F1IvayOOD),
 	
r%   N)r   r   r   r   r   r   r   r   r   r    r:   r   r   r$   r   r   r   )#r5   r6   x_typex_shapesx_datay_typey_shapesy_datar   
out_shapesr   r   r   r   k_kr   r    r   r   r   transar   data_atransbldbdata_b_ldcdata_cr"   r   r   r   r   s#    `      `                        @@r#   call_xxgemmr     sw    ??2::b>##W"FF%y&%vy%vD 
	'	'n	MBDAEBLLEw<Egws;DKKS*Ekk'3s8,G
 
 *&FCFC)&FCFC$XzDNAsFD{{7CI.H
,,rHffa#OOE9=vs"Cy)I"C) *C gw,r%   c                 Z    S nU R                  XX#5      n[        XUR                  U5      $ )z
np.dot(matrix, matrix)
c                     U R                   u  p#UR                   u  pEUS:X  a"  [        R                  " X%4U R                  5      $ [        R                  " X%4U R                  5      n[        R
                  " XU5      $ Nr   shapenpzerosr    emptydot)abr   r   r   r   outs          r#   dot_impldot_2_mm.<locals>.dot_impl  s]    ww688QFAGG,,hhvqww'vvaC  r%   r   r   r   r5   r6   rP   r   r  r   s         r#   dot_2_mmr    .    ! 
"
"7c
@CGcoosCCr%   c                 Z    S nU R                  XX#5      n[        XUR                  U5      $ )z
np.dot(vector, matrix)
c                     U R                   u  nUR                   u  p4US:X  a"  [        R                  " U4U R                  5      $ [        R                  " U4U R                  5      n[        R
                  " XU5      $ r   r   )r  r  r   _mr   r  s         r#   r  dot_2_vm.<locals>.dot_impl  s]    WW688QE177++hhuagg&vvaC  r%   r	  r
  s         r#   dot_2_vmr    r  r%   c                 Z    S nU R                  XX#5      n[        XUR                  U5      $ )z
np.dot(matrix, vector)
c                     U R                   u  p#UR                   u  nUS:X  a"  [        R                  " U4U R                  5      $ [        R                  " U4U R                  5      n[        R
                  " XU5      $ r   r   )r  r  r   r   _nr  s         r#   r  dot_2_mv.<locals>.dot_impl  s]    wwgg688QE177++hhuagg&vvaC  r%   r	  r
  s         r#   dot_2_mvr    r  r%   c           
         UR                   u  pVUR                  n[        U5      " XUS   5      n[        U5      " XUS   5      n	[        R                  " XR
                  5      u  n
S nU R                  X[        [        R                  /UR                   Q76 U5        [        XU
5        [        R                  " XR                  U5      5      n[        XXGXR                  U	R                  U5        UR                  U5      $ )z0
np.dot(vector, vector)
np.vdot(vector, vector)
r   r   c                 \    U R                   u  nUR                   u  nX#:w  a  [        S5      eg )Nz;incompatible array sizes for np.dot(a, b) (vector * vector)r   
ValueError)r  r  r   r   s       r#   
check_argsdot_2_vv.<locals>.check_args  s4    WWWW6 1 2 2 r%   )r   r   r   r   unpack_tupler   r   r   r   r   r   alloca_onceget_value_typer   r   load)r5   r6   rP   r   r   atybtyr    r  r  r   r  r  s                r#   dot_2_vvr#    s    
 xxHCOOE3$q'2A3$q'2A			gww	/BA2 W&uzz=CHH=tE!$


g'='=e'D
ECw1ffaffcJ<<r%   c                     [        SX5      $ )z
np.dot(a, b)
znp.dot()
dot_2_implleftrights     r#   dot_2r*    s    
 j$..r%   c                     [        SX5      $ )z
a @ b
z'@'r%  r'  s     r#   matmul_2r,     s    
 eT))r%   c                 6  ^ ^ [        U[        R                  5      (       ax  [        U[        R                  5      (       aX  [        U 4S j5       mUR                  S;  d  UR                  S;  a#  [
        R                  " T < SX4< 3[        5        U4S j$ g g )Nc                   >^ UR                   UR                   4mU4S jnUR                  UR                  :w  a  [        ST-  5      eTS:X  a#  [        R                  " UR                  SS5      nOPTS:X  d  TS:X  a#  [        R                  " UR                  SS5      nO!TS	:X  a  UR                  nO[        S
T-  5      e[        XAU5      U4$ )Nc                 F  > [        5         [        XX#5       u  p#TS:X  a  [        XX#5      sS S S 5        $ TS:X  a  [        XX#5      sS S S 5        $ TS:X  a  [	        XX#5      sS S S 5        $ TS:X  a  [        XX#5      sS S S 5        $ [        S5      e! , (       d  f       g = f)N   r1  r1  r   r   r1  r   r   unreachable)r,   r   r  r  r  r#  AssertionErrorr5   r6   rP   r   ndimss       r#   _dot2_codegen0dot_2_impl.<locals>._impl.<locals>._dot2_codegen.  s    $WsA[c'#D BA &'#D	 BA
 &'#D BA &'#D BA -];; BAs"   BBB,BB
B z)%s arguments must all have the same dtyper0  r1  r   r2  r3  r   r4  z*%s: inputs must have compatible dimensions)ndimr    r   r   r   r   )typingcontextr(  r)  r9  r   r8  names        @r#   _impldot_2_impl.<locals>._impl*  s    YY

+E< zzU[[(!?$FH H #kk$**a=&EVO#kk$**a=&"jj! $037#8 9 9[6EEr%   r   z+ is faster on contiguous arrays, called on c                    > T" X5      $ r2   rW   r(  r)  r>  s     r#   <lambda>dot_2_impl.<locals>.<lambda>Q  
    5#5r%   r   r   r   r	   r   warningswarnr   )r=  r(  r)  r>  s   `  @r#   r&  r&  (  s    $$$E5;;)G)G		F 
	FB ;;d"ell$&>MM4-*+BD 65Q *H$r%   c                 (  ^ [        U [        R                  5      (       ar  [        U[        R                  5      (       aR  [        S 5       mU R                  S;  d  UR                  S;  a   [
        R                  " SX4< 3[        5        U4S j$ gg)z
np.vdot(a, b)
c                     S nUR                   S:w  d  UR                   S:w  a  [        S5      eUR                  UR                  :w  a  [        S5      e[        UR                  X5      U4$ )Nc           	      ~    [        5         [        XX#5       u  p#[        XX#SS9sS S S 5        $ ! , (       d  f       g = f)NT)r   )r,   r   r#  )r5   r6   rP   r   s       r#   codegen$vdot.<locals>._impl.<locals>.codegen\  s/    $WsA##Gc4P BAAs   .
<r   z&np.vdot() only supported on 1-D arraysz0np.vdot() arguments must all have the same dtype)r;  r   r    r   )r<  r(  r)  rK  s       r#   r>  vdot.<locals>._implZ  sc    Q yyA~q!"JKKzzU[[(!FH HTZZ5w>>r%   r   4np.vdot() is faster on contiguous arrays, called on c                    > T" X5      $ r2   rW   rA  s     r#   rB  vdot.<locals>.<lambda>p  rD  r%   NrE  rA  s     @r#   vdotrQ  T  s{    
 $$$E5;;)G)G		? 
	?  ;;d"ell$&>MM=#$;= 65/ *H$r%   c                     U R                   u  nUR                   u  pEX4:w  a  [        S5      eUR                   U4:w  a  [        S5      eg )Nz;incompatible array sizes for np.dot(a, b) (vector * matrix)zFincompatible output array size for np.dot(a, b, out) (vector * matrix)r  )r  r  r  r   r  r   s         r#   dot_3_vm_check_argsrS  s  sV    	
BAGGEBw : ; 	;
yyQD ? @ 	@ r%   c                     U R                   u  p4UR                   u  nXT:w  a  [        S5      eUR                   U4:w  a  [        S5      eg )Nz;incompatible array sizes for np.dot(a, b) (matrix * vector)zFincompatible output array size for np.dot(a, b, out) (matrix * vector)r  )r  r  r  r   r  r   s         r#   dot_3_mv_check_argsrU  ~  sV    GGEA	
BAw - . 	.
yyQD ? @ 	@ r%   c                    UR                   u  pEnXbR                  :X  d   eUR                  n[        U5      " XUS   5      n[        U5      " XUS   5      n	[        U5      " XUS   5      n
[        R
                  " XR                  5      n[        R
                  " XR                  5      n[        R
                  " XR                  5      nUR                  UR                  :  a<  UnUnUS   nUS   nUR                  S:H  nU	R                  UR                  nn[        nO;UnUnUS   nUS   nUR                  S:H  nUR                  U	R                  nn[        nU R                  UU[        [        R                  /UR                   Q76 U5        U H  n[!        XU5        M     U R#                  [        R$                  S5      nUR'                  SUU5      nUR'                  SUU5      nUR)                  UU5      nUR+                  USS9 u  nnU   [        R,                  " XR                  UR/                  U
R0                  U
R2                  5      S5        S	S	S	5        U   [5        XUXUUU
R                  5        S	S	S	5        S	S	S	5        [7        XUR                  U
R9                  5       5      $ ! , (       d  f       N`= f! , (       d  f       NL= f! , (       d  f       NU= f)
z9
np.dot(vector, matrix, out)
np.dot(matrix, vector, out)
r   r   r1  r   r   ==Fr   N)r   r   r    r   r   r  r   r;  r   r   rS  rU  r   r   r   r   r   get_constantrJ   icmp_signedor_if_elsememsetmulitemsizenitemsr   r   	_getvalue)r5   r6   rP   r   xtyytyouttyr    xyr  r   r   r   mtyr   v_shaper   r   r   r   r  r8   zero
both_emptymatrix_emptyis_emptyr  nonemptys                                r#   dot_3_vmrm    sp   
 hhOCeOO###IIE3$q'2A3$q'2A
U
Gd1g
6C##GWW5H##GWW5H%%gyy9J
xx#(( 1+qk::$(
 1+qk::$(
Wj&uzz=CHH=tEGc*  

A.D$$T7D9J&&tS$7L{{:|4H	%	04EUHNN7HH";;s||SZZ@!E  (C6* 	 
1 Ws ]]_. . U X	 
1	0s=   KAJ7
K'KK7
K	K
K	K
K'c                 F	   UR                   u  pEnXbR                  :X  d   eUR                  n[        U5      " XUS   5      n[        U5      " XUS   5      n	[        U5      " XUS   5      n
[        R
                  " XR                  5      n[        R
                  " XR                  5      n[        R
                  " XR                  5      nUu  pUu  nnUR                  S:X  d   eS nU R                  UU[        [        R                  /UR                   Q76 U5        [        XU5        [        XU5        [        XU5        UR                  nU	R                  nU
R                  nU R                  [        R                  S5      nUR!                  SUU5      nUR!                  SUU5      nUR!                  SUU5      nUR#                  UUR#                  UU5      5      nUR%                  USS9 u  nnU   [        R&                  " XR                  UR)                  U
R*                  U
R,                  5      S5        S	S	S	5        U   U R                  [        R                  S5      nUR!                  SUU5      nUR!                  SUU5      nUR%                  U5       u  n n!U    UR%                  U5       u  n"n#U"   [/        XSUUUUU5        S	S	S	5        U#   UR                  UR                  :H  n$[1        XU$XKUUU5        S	S	S	5        S	S	S	5        S	S	S	5        U!   UR%                  U5       u  n%n&U%   UR                  UR                  :g  n$[1        XU$X\UUU5        S	S	S	5        U&   [3        XXKUX\UXmU5        S	S	S	5        S	S	S	5        S	S	S	5        S	S	S	5        S	S	S	5        S	S	S	5        [5        XUR                  U
R7                  5       5      $ ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f)
z
np.dot(matrix, matrix, out)
r   r   r1  r   c                     U R                   u  p4UR                   u  pVXE:w  a  [        S5      eUR                   X64:w  a  [        S5      eg )Nz;incompatible array sizes for np.dot(a, b) (matrix * matrix)zFincompatible output array size for np.dot(a, b, out) (matrix * matrix)r  )r  r  r  r   r   r   r   s          r#   r  dot_3_mm.<locals>.check_args  sW    ww7 1 2 299 C D D r%   rW  Fr   N)r   r   r    r   r   r  r   r   r   r   r   r   r   r   rX  rJ   rY  rZ  r[  r\  r]  r^  r_  r   r   r   r   r`  )'r5   r6   rP   r   ra  rb  rc  r    rd  re  r  r   r   r   r   r   r   r   r  r   r   r   rh  ri  x_emptyy_emptyrk  r  rl  oneis_left_vecis_right_vecr_vecr_matv_vm_vr   v_mm_ms'                                          r#   dot_3_mmr|    s    hhOCeOO###IIE3$q'2A3$q'2A
U
Gd1g
6C##GWW5H##GWW5H%%gyy9JDAEB <<3D Wj&uzz=CHH=tE !$!$!$VVFVVFxxH 

A.D$$T1d3J!!$40G!!$40G{{:w{{7G'DEH	%	04EUHNN7HH";;s||SZZ@!E   &&uzz15C!--dAs;K"..tQ<L..5% 5#s &w'(&&(D ! !'*zzU\\'AH'((+vvxQ ! 6   5#s '*zzU\\'AH'((+vvxQ !
 !'(+v(+v(-8E ! 6  / 	 
1L Ws ]]_. .K U !S !S 65 U !S
 !S 65 U /. X	 
1	0s  3R9AO 
R
AR"Q0(P	:P O%
P*O7PP	
Q0 Q	2Q8*P,"
Q,P=>QQ	Q0RR
O"	R%
O4/P7
PP
PP	
P)$Q0,
P:6Q=
QQ
QQ	
Q-)Q00
Q>:R
R	R
R c                   ^ [        U [        R                  5      (       a  [        U[        R                  5      (       a  [        U[        R                  5      (       ab  [        S 5       mU R                  S;  d   UR                  S;  d  UR                  S;  a   [
        R                  " SX4< 3[        5        U4S j$ ggg)z
np.dot(a, b, out)
c                     S nUR                   UR                   :w  d  UR                   UR                   :w  a  [        S5      e[        X1X#5      U4$ )Nc                    [        5         [        XX#5       u  nn[        S UR                  S S  5       5      nUS1:X  a  [	        XX#5      sS S S 5        $ USS1:X  a  [        XX#5      sS S S 5        $ [        S5      e! , (       d  f       g = f)Nc              3   8   #    U  H  oR                   v   M     g 7fr2   r;  ).0rd  s     r#   	<genexpr>8dot_3.<locals>._impl.<locals>.codegen.<locals>.<genexpr>)  s     =1s   r1  r   r5  )r,   r   setr   r|  rm  r6  r7  s        r#   rK  %dot_3.<locals>._impl.<locals>.codegen$  s    $WsA FLcFJ=!==E|'#D	 BA
 1a&'#D BA -];; BAs   5A>A>3A>>
Bz/np.dot() arguments must all have the same dtype)r    r   r   )r<  r(  r)  r  rK  s        r#   r>  dot_3.<locals>._impl"  sN    < zzU[[(DJJ#)),C!EG G S3W<<r%   r   rN  c                    > T" XU5      $ r2   rW   r(  r)  r  r>  s      r#   rB  dot_3.<locals>.<lambda><  s    d3(?r%   NrE  r  s      @r#   dot_3r    s    
 	4%%*UEKK*H*HsEKK((		= 
	=& ;;d"ell$&>#**CMM=#$;= @?7 ) +I%r%   numba_fatal_errorc                     [         R                  " U 5       HK  n[         R                  " UR                  5       5      (       a  M.  [         R                  R                  S5      e   g )Nz$Array must not contain infs or NaNs.)r   nditerisfiniteitemlinalgLinAlgError)r  vs     r#   _check_finite_matrixr  E  sC    YYq\{{1668$$))''68 8 r%   c                    U(       a  SOSnX14n[        U [        R                  5      (       a  U R                  n [        U [        R                  5      (       d  SU-  n[        USS9eU R                  S:X  d  SU-  n[        USS9e[        U R                  [        R                  [        R                  45      (       d  SU-  n[        USS9eg )	N	np.linalgr   z&%s.%s() only supported for array typesFhighlightingr1  z%%s.%s() only supported on 2-D arrays.3%s.%s() only supported on float and complex arrays.)
r   r   Optionaltyper   r   r;  r    FloatComplex)r  r!   	la_prefixprefixinterpmsgs         r#   _check_linalg_matrixr  M  s     &[4F F!U^^$$FFa%%6?#E2266Q;5>#E22aggU]];<<(*01#E22 =r%   c                 x    US   R                   nUSS   H"  nUR                   U:w  d  M  SU -  n[        USS9e   g )Nr   r   zAnp.linalg.%s() only supports inputs that have homogeneous dtypes.Fr  )r    r   )r!   r   t0r   r  s        r#   _check_homogeneous_typesr  b  sB    	qB12Y77b=UXaaCc66 r%   c                      g r2   rW   rW   r%   r#   _copy_to_fortran_orderr  j  s    r%   c                 T   ^^ U R                   S:H  mU R                   S:H  mUU4S jnU$ )Nr   Ac                 D  > T(       a  [         R                  " U 5      nU$ T(       ab  U R                  R                  nU(       a,  [         R                  " U R                  5      R                  nU$ [         R
                  " U 5      n U$ [         R
                  " U 5      nU$ r2   )r   r   flagsf_contiguousTasfortranarray)r  acpyflag_fA_layoutF_layouts      r#   r   &ol_copy_to_fortran_order.<locals>.implt  s    771:D  WW))F wwqss|~~ 	 ((+  $$Q'Dr%   r   )r  r   r  r  s     @@r#   ol_copy_to_fortran_orderr  n  s+     xx3Hxx3H& Kr%   c                     U S:w  a8  U S:  a  [        5          eU S:  a  [        R                  R                  S5      eg g )Nr   z(Matrix is singular to machine precision.)fatal_error_funcr   r  r  rs    r#   _inv_err_handlerr    sF    Avq51q5))'':< < 	 r%   c                     U S   $ )zFpass a list of variables to be preserved through dead code eliminationr   rW   r  s    r#   _dummy_liveness_funcr    s     Q4Kr%   c                   ^^^ [        5         [        U S5        [        5       R                  U R                  5      m[        5       R                  U R                  5      m[        [        U R                  S5      5      mUUU4S jnU$ )Ninvc                   > U R                   S   nU R                   S   U:w  a!  Sn[        R                  R                  U5      e[	        U 5        [        U 5      nUS:X  a  U$ [        R                  " U[        S9nT" TXUR                  XR                  5      n[        U5        T" TXR                  XR                  5      n[        U5        [        UR                  UR                  /5        U$ )N.Last 2 dimensions of the array must be square.r   r    )r   r   r  r  r  r  r  F_INT_nptypectypesr  r  size)	r  r   r  r  ipivr  r"   re   numba_xxgetris	         r#   inv_implinv_impl.<locals>.inv_impl  s    GGBK772;!BC))'',,Q%a(6Kxx.$dkk1kkB$;;;;? 	dii34r%   )r0   r  r`   re   r    rj   r   r$   )r  r  r"   re   r  s     @@@r#   r  r    s_    OE"I++AGG4MI..qww7M}QWWe,-D2 Or%   c                 X    U S:w  a$  U S:  a  [        5          eU S:  a  [        S5      eg g )Nr   z&Internal algorithm failed to converge.)r  r  r  s    r#   %_handle_err_maybe_convergence_problemr    s8    Avq51q5EFF 	 r%   c                 D   U(       a  SOSnX14n[        U [        R                  5      (       d  [        SU-  5      eU R                  S::  d  [        SU-  5      e[        U R
                  [        R                  [        R                  45      (       d  [        SU-  5      eg )Nr  r   z'%s.%s() only supported for array types r1  +%s.%s() only supported on 1 and 2-D arrays r  )r   r   r   r   r;  r    r  r  r  r!   r  r  r  s        r#   _check_linalg_1_or_2d_matrixr    s     &[4F Fa%%C"# $ 	$66Q;G"# $ 	$aggU]];<< 68>? @ 	@ =r%   c                    ^^^ [        5         [        U S5        [        5       R                  U R                  5      m[        [        U R                  S5      5      m[        S5      m[        S5      nUUU4S jnU$ )NcholeskyULc                   > U R                   S   nU R                   S   U:w  a!  Sn[        R                  R                  U5      eU R	                  5       nUS:X  a  U$ T" TTXR
                  U5      nUS:w  a7  US:  a  [        5          eUS:  a  [        R                  R                  S5      e[        U5       H  nSUS U2U4'   M     U$ )Nr  r  r  r   z Matrix is not positive definite.)r   r   r  r  r   r  r  range)	r  r   r  r  r  colUPr"   rw   s	         r#   cho_implcho_impl.<locals>.cho_impl  s    GGBK772;!BC))'',, ffh6J $Azz1561u "q1uii++68 8 8CCc	N 
r%   )r0   r  r`   rw   r    r   r$   )r  LOr  r  r"   rw   s      @@@r#   r  r    s[    OJ'I++AGG4M}QWWj12D	SB	SB< Or%   c                   ^^^^^ [        5         [        U S5        [        5       R                  U R                  5      m[        5       R                  U R                  5      m[        [        U R                  S5      5      m[        S5      m[        S5      mUUUU4S jnUUUU4S jn[        U R                  [        R                  R                  5      (       a  U$ U$ )NeigNVc                 f  > U R                   S   nU R                   S   U:w  a!  Sn[        R                  R                  U5      e[	        U 5        [        U 5      nSnUn[        R                  " XR                  S9n[        R                  " XR                  S9n[        R                  " X4U R                  S9n[        R                  " X4U R                  S9n	US:X  a  XiR                  4$ T" TTTUUR                  UUR                  UR                  UR                  UU	R                  U5      n
[        U
5        [        R                  " U5      (       a  [        S5      e[        UR                  UR                  U	R                  UR                  UR                  /5        XiR                  4$ )z'
eig() implementation for real arrays.
r  r  r  r   r  r   z.eig() argument must not cause a domain change.)r   r   r  r  r  r  r  r    r  r  r  anyr  r  r  r  r   r  r  ldvlldvrwrwivlvrr  JOBVLJOBVRr"   rm   s              r#   real_eig_impleig_impl.<locals>.real_eig_impl  s\    GGBK772;!BC))'',,Q%a(XXaww'XXaww'XXqiqww/XXqiqww/6:4!! KKIIIIII II " 	.a0 66"::@B B
 	dii"''277BGGLMDDzr%   c                   > U R                   S   nU R                   S   U:w  a!  Sn[        R                  R                  U5      e[	        U 5        [        U 5      nSnUn[        R                  " XR                  S9n[        R                  " X4U R                  S9n[        R                  " X4U R                  S9nUS:X  a  XhR                  4$ T" TT
TUUR                  UUR                  UR                  UUR                  U5      n	[        U	5        [        UR                  UR                  UR                  UR                  /5        XhR                  4$ )z*
eig() implementation for complex arrays.
r  r  r  r   r  r   )r   r   r  r  r  r  r  r    r  r  r  r  r  r  r   r  r  r  r  wr  r  r  r  r  r"   rp   s             r#   cmplx_eig_impl eig_impl.<locals>.cmplx_eig_implP  s    GGBK772;!BC))'',,Q%a(HHQgg&XXqiqww/XXqiqww/6tt94!! KKHHII II 
" 	.a0 	dii"''166BC44yr%   r0   r  r`   rm   r    rp   r   r$   r   r   scalarsr  )r  r  r  r  r  r"   rp   rm   s      @@@@@r#   eig_implr  
  s    OE"Y--agg6NY--agg6N}QWWe,-DHEHE6 6p& &P !''5==0011r%   c                   ^^^^^ [        5         [        U S5        [        5       R                  U R                  5      m[        5       R                  U R                  5      m[        [        U R                  S5      5      m[        S5      m[        S5      mUUUU4S jnUUUU4S jn[        U R                  [        R                  R                  5      (       a  U$ U$ )Neigvalsr  c                 6  > U R                   S   nU R                   S   U:w  a!  Sn[        R                  R                  U5      e[	        U 5        [        U 5      nSnSn[        R                  " XR                  S9nUS:X  a  U$ [        R                  " XR                  S9n[        R                  " SU R                  S9n[        R                  " SU R                  S9n	T" TTTUUR                  UUR                  UR                  UR                  UU	R                  U5      n
[        U
5        [        R                  " U5      (       a  [        S5      e[        UR                  UR                  U	R                  UR                  UR                  /5        U$ )z+
eigvals() implementation for real arrays.
r  r  r  r   r  r   z2eigvals() argument must not cause a domain change.)r   r   r  r  r  r  r  r    r  r  r  r  r  r  r  s              r#   real_eigvals_impl'eigvals_impl.<locals>.real_eigvals_impl  sL    GGBK772;!BC))'',,Q%a(XXaww'6IXXaww' XXq)XXq)4!! KKIIIIII II " 	.a0 66"::DF F
 	dii"''277BGGLM	r%   c                   > U R                   S   nU R                   S   U:w  a!  Sn[        R                  R                  U5      e[	        U 5        [        U 5      nSnSn[        R                  " XR                  S9nUS:X  a  U$ [        R                  " SU R                  S9n[        R                  " SU R                  S9nT" TT
TUUR                  UUR                  UR                  UUR                  U5      n	[        U	5        [        UR                  UR                  UR                  UR                  /5        U$ )z.
eigvals() implementation for complex arrays.
r  r  r  r   r  r   )r   r   r  r  r  r  r  r    r  r  r  r  r  s             r#   cmplx_eigvals_impl(eigvals_impl.<locals>.cmplx_eigvals_impl  s
    GGBK772;!BC))'',,Q%a(HHQgg&6HXXq)XXq)4!! KKHHII II 
" 	.a0 	dii"''166BCr%   r  )r  r  r  r  r  r"   rp   rm   s      @@@@@r#   eigvals_implr  }  s    OI&Y--agg6NY--agg6N}QWWi01DHEHE9 9v' 'R !''5==0011!!  r%   c                 n  ^^^^^ [        5         [        U S5        [        U R                  SU R                  5      n[        R
                  " U5      m[        5       R                  U R                  5      m[        [        U R                  S5      5      m[        S5      m[        S5      mUUUUU4S jnU$ )NeighrD   r  r  c           	        > U R                   S   nU R                   S   U:w  a!  Sn[        R                  R                  U5      e[	        U 5        [        U 5      n[        R                  " UT
S9nUS:X  a  XC4$ T	" TTTUUR                  UUR                  5      n[        U5        [        UR                  UR                  /5        XC4$ Nr  r  r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  JOBZUPLOr"   rs   w_dtypes         r#   	eigh_impleigh_impl.<locals>.eigh_impl  s    GGBK772;!BC))'',,Q%a(HHQg&69D   KKHH 	.a0 	dii01yr%   
r0   r  rG   r    
np_supportas_dtyper`   rs   r   r$   )r  w_typer  r  r  r"   rs   r  s      @@@@@r#   r  r    s    OF# QWW0!'':F!!&)Gi//8O}QWWf-.Ds8Ds8D < r%   c                 n  ^^^^^ [        5         [        U S5        [        U R                  SU R                  5      n[        R
                  " U5      m[        5       R                  U R                  5      m[        [        U R                  S5      5      m[        S5      m[        S5      mUUUUU4S jnU$ )NeigvalshrD   r  r  c           	        > U R                   S   nU R                   S   U:w  a!  Sn[        R                  R                  U5      e[	        U 5        [        U 5      n[        R                  " UT
S9nUS:X  a  U$ T	" TTTUUR                  UUR                  5      n[        U5        [        UR                  UR                  /5        U$ r  r  r  s         r#   eigvalsh_impl$eigvalsh_impl.<locals>.eigvalsh_impl6  s    GGBK772;!BC))'',,Q%a(HHQg&6HD   KKHH 	.a0 	dii01r%   r	  )r  r  r  r  r  r"   rs   r  s      @@@@@r#   r  r  %  s    OJ' QWW0!'':F!!&)Gi//8O}QWWj12Ds8Ds8D < r%   c                 r  ^^^^^ [        5         [        U S5        [        U R                  SU R                  5      n[        R
                  " U5      m[        5       R                  U R                  5      m[        [        U R                  S5      5      m[        S5      m[        S5      mSUUUUU4S jjnU$ )NsvdrD   r  Sc                   > U R                   S   nU R                   S   nUS:X  d  US:X  a  [        R                  R                  S5      e[	        U 5        [        U 5      nUn[        X25      nU(       a  TnUnUn	OTnUnUn	[        R                  " X4U R                  S9n
[        R                  " UTS9n[        R                  " X)4U R                  S9nT" TUUUUR                  UUR                  U
R                  UUR                  U	5      n[        U5        [        UR                  UR                  U
R                  UR                  /5        U
R                  XR                  4$ )Nr  r  r   Arrays cannot be emptyr  )r   r   r  r  r  r  minr  r    r  r  r  r  r  )r  full_matricesr   r   r  lduminmnr  ucolldvtur   vtr  JOBZ_AJOBZ_Sr"   rz   s_dtypes                 r#   svd_implsvd_impl.<locals>.svd_implg  s7   GGBKGGBK6Q!V))''(@AAQ%a(A	DDDDDDHHd[0HHU'*XXqiqww/KKHHHHII
 	.a0 	dii!&&!&&ABQ~r%   r   )
r0   r  rG   r    r
  r  r`   rz   r   r$   )	r  r  s_typer"  r  r   r"   rz   r!  s	       @@@@@r#   r"  r"  V  s    OE" QWW0!'':F!!&)GY--agg6N}QWWe,-DXFXF, ,\ Or%   c                   ^^^ [        5         [        U S5        [        5       R                  U R                  5      m[        5       R                  U R                  5      m[        [        U R                  S5      5      mUUU4S jnU$ )Nqrc           	      F  > U R                   S   nU R                   S   nUS:X  d  US:X  a  [        R                  R                  S5      e[	        U 5        [        U 5      nUn[        X!5      n[        R                  " XPR                  S9nT" TUUUR                  UUR                  5      nUS:  a  [        5          e[        R                  " X4U R                  S9R                  n[        U5       H"  n	[        U	S-   5       H  n
X:U	4   XU	4'   M     M$     [        XQ5       H  n	[        U5       H  n
X:U	4   XU	4'   M     M!     T" TUUUUR                  UUR                  5      n[        U5        [        UR                   UR                   /5        US S 2S U24   U4$ )Nr  r  r   r  r  r   )r   r   r  r  r  r  r  r  r    r  r  r  r  r  r  r  r  )r  r   r   qr   r  tauretr  ijr"   r~   r   s              r#   qr_implqr_impl.<locals>.qr_impl  s   GGBKGGBK6Q!V))''(@AAQ #1%A	hhgg.HHJJ
 71 HHaZqww/11 uA1q5\qD'Q$ " 
 uA5\qD'Q$ " ! HHJJ
 	.c2 	chh/0!VeV)a  r%   )r0   r  r`   r~   r    r   r   r$   )r  r.  r"   r~   r   s     @@@r#   r.  r.    sb    OD! Y--agg6NY--agg6N}QWWd+,D7!r Nr%   c                     [         e)z3
Correctly copy 'b' into the 'bcpy' scratch space.
NotImplementedErrorbcpyr  nrhss      r#   _system_copy_in_br6    
     r%   c                 6    UR                   S:X  a  S nU$ S nU$ )Nr   c                 .    XS UR                   S   2S4'   g )Nr  r   r   r3  s      r#   	oneD_impl)_system_copy_in_b_impl.<locals>.oneD_impl  s    $%!''"+q!r%   c                 2    XS UR                   S   2S U24'   g )Nr  r:  r3  s      r#   	twoD_impl)_system_copy_in_b_impl.<locals>.twoD_impl  s    ()!''"+uu$%r%   r  )r4  r  r5  r;  r>  s        r#   _system_copy_in_b_implr@    s#    vv{	&	*r%   c                     [         e)zC
Compute the number of right hand sides in the system of equations
r1  r  s    r#   _system_compute_nrhsrC    r7  r%   c                 6    U R                   S:X  a  S nU$ S nU$ )Nr   c                     gNr   rW   rB  s    r#   r;  ,_system_compute_nrhs_impl.<locals>.oneD_impl  s    r%   c                      U R                   S   $ )Nr  r:  rB  s    r#   r>  ,_system_compute_nrhs_impl.<locals>.twoD_impl
  s    772;r%   r  )r  r;  r>  s      r#   _system_compute_nrhs_implrJ    s#    vv{		r%   c                     [         e)z<
Check that AX=B style system input is dimensionally valid.
r1  r  r  s     r#   !_system_check_dimensionally_validrM    r7  r%   c                 :    UR                   nUS:X  a  S nU$ S nU$ )Nr   c                     U R                   S   nUR                   S   nX#:w  a  [        R                  R                  S5      eg )Nr  r  <Incompatible array sizes, system is not dimensionally valid.r   r   r  r  r  r  ambms       r#   r;  9_system_check_dimensionally_valid_impl.<locals>.oneD_impl  B    BBxii++RT T r%   c                     U R                   S   nUR                   S   nX#:w  a  [        R                  R                  S5      eg )Nr  rP  rQ  rR  s       r#   r>  9_system_check_dimensionally_valid_impl.<locals>.twoD_impl"  rV  r%   r  r  r  r;  r;  r>  s        r#   &_system_check_dimensionally_valid_implrZ    s.    66Dqy	T 	T r%   c                     [         e)z2
Check that AX=B style system input is not empty.
r1  rL  s     r#   _system_check_non_emptyr\  +  r7  r%   c                 :    UR                   nUS:X  a  S nU$ S nU$ )Nr   c                     U R                   S   nU R                   S   nUR                   S   nUS:X  d  US:X  d  US:X  a  [        R                  R                  S5      eg Nr  r  r   r  rQ  )r  r  rS  anrT  s        r#   r;  /_system_check_non_empty_impl.<locals>.oneD_impl6  sW    BBBQw"'R1Wii++,DEE &-r%   c                     U R                   S   nU R                   S   nUR                   S   nUR                   S   nUS:X  d  US:X  d  US:X  d  US:X  a  [        R                  R                  S5      eg r_  rQ  )r  r  rS  r`  rT  bns         r#   r>  /_system_check_non_empty_impl.<locals>.twoD_impl>  sj    BBBBQw"'R1Waii++,DEE 18r%   r  rY  s        r#   _system_check_non_empty_implre  2  s.    66Dqy	F 	F r%   c                     [         e)z2
Compute the residual from the 'b' scratch space.
r1  )r  r   r5  s      r#   _lstsq_residualrg  H  r7  r%   c                 N  ^ U R                   nU R                  n[        R                  " [	        USU5      5      mUS:X  a/  [        U[        R                  5      (       a  U4S jnU$ U4S jnU$ US:X  d   e[        U[        R                  5      (       a  U4S jnU$ U4S jnU$ )NrD   r   c                    > [         R                  " STS9n[         R                  " [         R                  " XS 2S4   5      S-  5      US'   U$ Nr$  r  r   r1  )r   r  sumabsr  r   r5  r   
real_dtypes       r#   
cmplx_impl(_lstsq_residual_impl.<locals>.cmplx_implW  s@    hht:6qQx 0! 34A
r%   c                 v   > [         R                  " STS9n[         R                  " XS 2S4   S-  5      US'   U$ rj  )r   r  rk  rm  s       r#   	real_impl'_lstsq_residual_impl.<locals>.real_impl]  s6    hht:6"a%!,A
r%   r1  c                    > [         R                  " UTS9n[        U5       H8  n[         R                  " [         R                  " XS 2U4   5      S-  5      X4'   M:     U$ Nr  r1  )r   r  r  rk  rl  r  r   r5  r   r   rn  s        r#   ro  rp  e  sL    hhZ8tAVVBFF1RU8$4a$78CF %
r%   c                    > [         R                  " UTS9n[        U5       H$  n[         R                  " XS 2U4   S-  5      X4'   M&     U$ ru  )r   r  r  rk  rv  s        r#   rr  rs  l  sB    hhZ8tAVVAb!eHaK0CF %
r%   )r;  r    r
  r  rG   r   r   r  )r  r   r5  r;  r    ro  rr  rn  s          @r#   _lstsq_residual_implrx  O  s    66DGGE$$WU4F%NOJqyeemm--  qyyeemm--
 
 r%   c                     [         e)z~
Extract 'x' (the lstsq solution) from the 'bcpy' scratch space.
Note 'b' is only used to check the system input dimension...
r1  r  r4  r   s      r#   _lstsq_solutionr{  t  
    
 r%   c                 6    U R                   S:X  a  S nU$ S nU$ )Nr   c                 <    UR                   R                  5       S U $ r2   r  ravelrz  s      r#   r;  '_lstsq_solution_impl.<locals>.oneD_impl  s    66<<>"1%%r%   c                 4    US U2S S 24   R                  5       $ r2   r   rz  s      r#   r>  '_lstsq_solution_impl.<locals>.twoD_impl  s    A;##%%r%   r  )r  r4  r   r;  r>  s        r#   _lstsq_solution_implr  |  s#    vv{	&	&r%   c                   ^^^^	 [        5         [        U S5        [        US5        [        SX5        [        R
                  " U R                  5      mU R                  n[        USU5      n[        R
                  " U5      m	[        5       R                  U R                  5      m[        [        US5      5      mSUUUU	4S jjnU$ )NlstsqrD   c                 8  > U R                   S   nU R                   S   n[        U5      n[        U 5        [        U5        [        X5        [	        X5        [        XC5      n[        XC5      n[        U 5      n[        R                  " XW4TS9R                  n	[        XU5        [        R                  " UTS9n
[        R                  " S[        R                  S9nT" TUUUUR                  UU	R                  UU
R                  UUR                  5      n[        U5        US   nX:  d  XC::  a  [        R                  " STS9nO[        XU5      n[!        XU5      n[#        UR$                  U	R$                  U
R$                  UR$                  /5        XXS U 4$ )Nr  r  r  r   r   )r   rC  r  r\  rM  r  maxr  r   r  r  r6  int32r  r  rg  r{  r  r  )r  r  rcondr   r   r5  r  maxmnr  r4  r   rank_ptrr  rankr   rd  r"   np_dtr   rn  s                   r#   
lstsq_impllstsq_impl.<locals>.lstsq_impl  sp   GGBKGGBK#A& 	QQ 	 % 	*!/A	A	 &a( xxU355$4( HHU*-88ARXX.KKKKHHOO
 	.a0 { 8qv((Aj1C "$40C AQ' 	diiAFFHMMJKi((r%   g      )r0   r  r  r  r
  r  r    rG   r`   r   r   r$   )
r  r  r  nb_dtr_typer  r"   r  r   rn  s
         @@@@r#   r  r    s    OG$ !G,Wa+(EGGE U.6F$$V,J Y--agg6N}UG,-D=) =)~ r%   c                     [         e)zx
Extract 'x' (the solution) from the 'bcpy' scratch space.
Note 'b' is only used to check the system input dimension...
r1  r  r4  s     r#   _solve_compute_returnr    r|  r%   c                 6    U R                   S:X  a  S nU$ S nU$ )Nr   c                 6    UR                   R                  5       $ r2   r  r  s     r#   r;  -_solve_compute_return_impl.<locals>.oneD_impl  s    66<<>!r%   c                     U$ r2   rW   r  s     r#   r>  -_solve_compute_return_impl.<locals>.twoD_impl  s    Kr%   r  )r  r4  r;  r>  s       r#   _solve_compute_return_implr    s#    vv{	"	r%   c                 @  ^^^ [        5         [        U S5        [        US5        [        SX5        [        R
                  " U R                  5      mU R                  n[        5       R                  U R                  5      m[        [        US5      5      mUUU4S jnU$ )Nsolvec           
        > U R                   S   n[        U5      n[        U 5        [        U5        [        X5        [	        U 5      n[
        R                  " X24T	S9R                  nUS:X  a  [        X5      $ [        XQU5        [
        R                  " U[        S9nT
" TUUUR                  UUR                  UR                  U5      n[        U5        [        UR                  UR                  UR                  /5        [        X5      $ )Nr  r  r   )r   rC  r  rM  r  r   r  r  r  r6  r  r  r  r  r  )r  r  r   r5  r  r4  r  r  r"   r  r   s           r#   
solve_implsolve_impl.<locals>.solve_impl  s    GGBK#A& 	QQ 	*!/ &a( xx	/116(11 	$4( xx.KKKKKK	
 	 	diiDII>?$Q--r%   )r0   r  r  r  r
  r  r    r`   r   r   r$   )r  r  r  r  r"   r  r   s       @@@r#   r  r    sz    OG$ G,Wa+(EGGE )''0K}UG,-D'.R r%   c           
      v  ^^^^^	^
^^^ [        5         [        U S5        [        U R                  SU R                  5      n[        R
                  " U5      m[        5       R                  U R                  5      m	[        5       R                  U R                  5      m
[        [        U R                  S5      5      m[        S5      m[        S5      m[        S5      m[        R
                  " U R                  5      n[        R                  " S/US9m[        R                  " S/US9mS	UUUUU	U
UUU4	S jjnU$ )
NpinvrD   r  r   r   r  r   c                 2  >	 U R                   S   nU R                   S   n[        U 5        [        U 5      nUS:X  d  US:X  a=  UR                  R	                  5       R                  U R                   5      R                  $ [        X25      n[        R                  " XS4U R                  S9n[        R                  " UTS9n[        R                  " X%4U R                  S9nT" TTUUUR                  UUR                  UR                  UUR                  U5      n	[        U	5        US   U-  n
Sn[        U5       H  nX|   U
:  d  M  SX|   -  X|'   UnM     US-  nX2:  a4  [        U5       H$  n[        U5       H  nXU4   X~   -  XU4'   M     M&     O5[        U5       H&  nX}   n[        U5       H  nXmU4   U-  XmU4'   M     M(     T" TTTUUUTR                  UR                  UUR                  UTR                  UR                  U5      n	[        UR                  UR                  UR                  UR                  TR                  TR                  /5        UR                  R	                  5       R                  U R                   5      R                  $ )Nr  r  r   r  r   r   )r   r  r  r  r  reshaper  r   r  r    r  r  r  r  r  )r  r  r   r   r  r  r  r   r  r  cut_atcut_idxr   r,  r-  s_localJOBTRANSATRANSBr"   rz   rS   rs  r!  rh  s                   r#   	pinv_implpinv_impl.<locals>.pinv_implR  sN   N GGBKGGBKQ%a(6Q!V66<<>))!''2444A	HHeZqww/HHU'*XXqj0KKHHHHII
 	.a0 1uAtf}ADy  	1 61XwA!Q$x!$B!tH ( 
 7^$uA1g/AdG & $ JJIIHHKKKK
0 	dii!&&!&&#((II 	vv||~%%agg.000r%   gV瞯<)r0   r  rG   r    r
  r  r`   rz   r<   rS   r   r$   r   array)r  r  r%  dtr  r  r  r  r"   rz   rS   rs  r!  rh  s        @@@@@@@@@r#   r  r  8  s    OF# QWW0!'':F!!&)GY--agg6N7''0L}QWWf-.D
c(C XFXF 
		QWW	%B88RD#D
((B4r
"CE1 E1N r%   c                     [        U R                  [        R                  5      (       a  [        S 5       nU$ [        S 5       nU$ )z
Walks the diag of a LUP decomposed matrix
uses that det(A) = prod(diag(lup(A)))
and also that log(a)+log(b) = log(a*b)
The return sign is adjusted based on the values found
such that the log(value) stays in the real domain.
c                     US-   nSn[        U 5       HA  n[        R                  " XU4   5      nX1XU4   U-  -  nU[        R                  " U5      -   nMC     X44$ )Ny                r   )r  r   rl  log)r   r  sgncsgnaccr   absels          r#   cmplx_diag_walker3_get_slogdet_diag_walker.<locals>.cmplx_diag_walker  sa     9DC1XqAww/BFF5M)  ;r%   c                     Sn[        U 5       H.  nXU4   nUS:  a  U* nU* nU[        R                  " U5      -   nM0     US-   U4$ )Nr   )r  r   r  )r   r  r  r  r   r  s         r#   real_diag_walker2_get_slogdet_diag_walker.<locals>.real_diag_walker  sX     C1XdGr6$CABFF1Io  "Hc?"r%   )r   r    r   r  r   )r  r  r  s      r#   _get_slogdet_diag_walkerr    sM     !''5==))		 
	 ! 	
	# 

	#  r%   c                 Z  ^^^^^ [        5         [        U S5        [        5       R                  U R                  5      m[        [        U R                  S5      5      m[        U 5      mU R	                  S5      m[        U R                  SU R                  5      " S5      mUUUUU4S jnU$ )Nslogdetr   rD   r   c                   > U R                   S   nU R                   S   U:w  a!  Sn[        R                  R                  U5      eUS:X  a  TT	4$ [	        U 5        [        U 5      n[        R                  " U[        S9nT" TXUR                  XR                  5      nUS:  a  S[        R                  * 4$ [        U5        Sn[        U5       H  nXdU   US-   :g  -   nM     US-  nUS:X  a  Sn[        UR                  /5        T
" XU5      $ )Nr  r  r  r   r  r   r   )r   r   r  r  r  r  r  r  r  infr  r  r  r  )r  r   r  r  r  r  r  r   ONEZEROdiag_walkerr"   re   s           r#   slogdet_impl"slogdet_impl.<locals>.slogdet_impl  s   GGBK772;!BC))'',,6;Q%a(xx.$dkk1kkBq5=  qAaQU+,C  Ag!8C 	dii[)1C((r%   )	r0   r  r`   re   r    r   r$   r  rG   )r  r  r  r  r  r"   re   s     @@@@@r#   r  r     s    OI&I++AGG4M}QWWi01D*1-K
''!*C177.8;D') ')R r%   c                 8    [        5         [        U S5        S nU$ )Ndetc                 v    [         R                  R                  U 5      u  pU[         R                  " U5      -  $ r2   )r   r  r  exp)r  r  r  s      r#   det_impldet_impl.<locals>.det_implB  s+    **1-RVVG_$$r%   r0   r  )r  r  s     r#   r  r  ;  s     OE"% Or%   c                     [         e)z!
Compute singular values of *a*.
r1  r  s    r#   _compute_singular_valuesr  I  r7  r%   c                   ^^^^^^	 [        5       R                  U R                  5      m[        [	        U R                  S5      5      m[        S5      m[        U R                  SU R                  5      n[        R                  " U5      m[        R                  " U R                  5      n[        R                  " SUS9m[        R                  " SUS9m	UUUUUU	4S jnU$ )z6
Returns a function to compute singular values of `a`
r  r  rD   r4  r  c                 
  > U R                   S   nU R                   S   nUS:X  d  US:X  a  [        R                  R                  S5      e[	        U 5        Un[        X!5      nSnSn[        U 5      n[        R                  " UTS9nT" TT
UUUR                  UUR                  TR                  UTR                  U5      n	[        U	5        [        UR                  TR                  TR                  UR                  /5        U$ )z
Computes singular values.
r  r  r   r  r   r  )r   r   r  r  r  r  r  r  r  r  r  r  )r  r   r   r  r  r  r  r  r   r  JOBZ_Nr"   np_ret_typerz   r  r  s             r#   sv_function2_compute_singular_values_impl.<locals>.sv_functione  s     GGBKGGBK6Q!V))''(@AAQA	 %a(
 HHU+.KKHHHHII
 	.a0 	dii!&&!&&ABr%   )
r`   rz   r    r   r$   rG   r
  r  r   r  )
r  nb_ret_typenp_dtyper  r  r"   r  rz   r  r  s
       @@@@@@r#   _compute_singular_values_implr  P  s    
 Y--agg6N}QWWe,-D XF!''#5qww?K%%k2K""177+H 	x(A	&	)B- -^ r%   c                     [         e)z&
Compute the L2-norm of 1D-array *a*.
r1  r  s    r#   _oneD_norm_2r    r7  r%   c                   ^^^ [        U R                  SU R                  5      n[        R                  " U5      m[	        5       R                  U R                  5      m[        [        U R                  S5      5      mUUU4S jnU$ )NrD   normc                 >  > [        U 5      n[        R                  " STS9n[        U R                  S   U R
                  -  5      nT" TUU R                  UUR                  5      nUS:  a  [        5          e[        UR                  U R                  /5        US   $ )Nr$  r  r   )
lenr   r  r   stridesr^  r  r  r  r  )r  r   r+  jmpr  r"   r  xxnrm2s        r#   r   _oneD_norm_2_impl.<locals>.impl  s     Fhht;/!))A,+,HHJJ
 q51
 	chh/01vr%   )rG   r    r
  r  r<   rE   r   r$   )r  r  r   r"   r  r  s      @@@r#   _oneD_norm_2_implr    sa    !''#5qww?K%%k2KW!!!''*F}QWWf-.D0 Kr%   c                   ^	^
 [        U R                  SU R                  5      n[        R                  " U5      n[        R                  " U R                  5      n[	        5       R                  U R                  5      n[        [        U R                  S5      5      nU R                  S:X  a$  US [        R                  4;   a  SS jnU$ SS jnU$ U R                  S:X  a  US [        R                  4;   aP  U R                  S:X  a  [        S 5       m	O)U R                  S	:X  a  [        S
 5       m	O[        S 5       m	SU	4S jjnU$ [        R                  " UR                  5      R                   m
SU
4S jjnU$  e)NrD   r  r   c                     [        U 5      $ r2   )r  rd  r   s     r#   r;  !_get_norm_impl.<locals>.oneD_impl  s    #A&r%   c                    [        U 5      nUS:X  a  gUS:X  a  [        U 5      $ U[        R                  :X  a9  [	        U S   5      n[        SU5       H  n[	        X   5      nXS:  d  M  UnM     U$ U[        R                  * :X  a9  [	        U S   5      n[        SU5       H  n[	        X   5      nXS:  d  M  UnM     U$ US:X  a%  Sn[        U5       H  nX   S:w  d  M  US-  nM     U$ US:X  a&  Sn[        U5       H  nU[	        X   5      -  nM     U$ Sn[        U5       H  nU[	        X   5      U-  -  nM     USU-  -  $ )Nr   r   r1  r   r   )r  r  r   r  rl  r  )rd  r   r   r+  r   r8   s         r#   r;  r    sM   F 6 !8'?*BFF]ad)C"1a[!!$i9"%C ) JRVVG^ad)C"1a[!!$i9"%C ) JAXC"1X42:2IC & JAXC"1Xs14y( &J C"1Xs14y#~- &c?*r%   r1  r   c                     U $ r2   rW   rd  s    r#   array_prepare%_get_norm_impl.<locals>.array_prepare%	  s    Hr%   r   c                     U R                   $ r2   )r  r  s    r#   r  r  )	  s     33Jr%   c                 "    U R                  5       $ r2   r  r  s    r#   r  r  .	  s    668Or%   c                 n   > U R                   nUS:X  a  gT" U 5      n[        UR                  U5      5      $ )Nr   r   )r  r  r  )rd  r   r   x_cr  s       r#   r>  !_get_norm_impl.<locals>.twoD_impl4	  s3    FF6#A&#CKKN33r%   c                 Z  > U R                   S   nU R                   S   nU R                  S:X  a  gU[        R                  :X  aE  Sn[	        U5       H2  nSn[	        U5       H  nU[        XU4   5      -  nM     Xd:  d  M0  UnM4     U$ U[        R                  * :X  aE  T	n[	        U5       H2  nSn[	        U5       H  nU[        XU4   5      -  nM     Xh:  d  M0  UnM4     U$ US:X  aE  Sn[	        U5       H2  nSn[	        U5       H  nU[        XU4   5      -  nM     Xd:  d  M0  UnM4     U$ US:X  aE  T	n[	        U5       H2  nSn[	        U5       H  nU[        XU4   5      -  nM     Xh:  d  M0  UnM4     U$ US:X  a  [        U 5      S   $ US:X  a  [        U 5      S   $ [        S5      e)Nr  r  r   r   r   r1  z Invalid norm order for matrices.)r   r  r   r  r  rl  r  r  )
rd  r   r   r   
global_maxiitmpjj
global_minmax_vals
            r#   r>  r  ?	  s   GGBKGGBK 66Q;"&&= "$J#Ah "'(B3qRy>1C #++),J ' &%RVVG^ ")J#Ah "'(B3qRy>1C #++),J ' &%AX "$J#Ah "'(B3qRy>1C #++),J ' &%BY ")J#Ah "'(B3qRy>1C #++),J ' &% AX3A6q99BY3A6r:: %%GHHr%   r2   )rG   r    r
  r  r<   rE   r   r$   r;  r   r   r   r   r   finfor  r  )rd  ord_flagr  r  r  r  r"   r;  r>  r  r  s            @@r#   _get_norm_implr    sT    !''#5qww?K%%k2K""177+HW!!!''*F}QWWf-.Dvv{ ejj))'x s8+r 	
1 ejj)) xx3! "S! " "$ "$
4` O hh{//044GDIJ qr%   c                 D    [        5         [        U S5        [        X5      $ )Nr  )r0   r  r  r  s     r#   	norm_implr  	  s    O F+!!!r%   c                 <    [        5         [        U S5        SS jnU$ )Ncondc                    US:X  d	  US:X  d  UcP  [        U 5      nUS:X  d  Uc  [        R                  " US   US   5      nO~[        R                  " US   US   5      nO`[        R                  R	                  X5      n[        R                  R	                  [        R                  R                  U 5      U5      nXE-  n[        R                  " U5      (       a  [        R                  $ U$ )Nr1  r  r   r  )r  r   divider  r  r  isnanr  )rd  pr   r  norm_x
norm_inv_xs         r#   r   cond_impl.<locals>.impl	  s    & 6Q"W	(+AAvIIadAbE*IIaeQqT*YY^^A)F		a(8!<J#A 88A;;66MHr%   r2   r  )rd  r  r   s      r#   	cond_implr  	  s    OF##H Kr%   c                 `    Sn[        [        U 5      5       H  nX   U:  a  US-   nM    U$    U$ )zB
Gets rank from singular values with cut-off at a given tolerance
r   r   r  r  )svr   r  r   s       r#   _get_rank_from_singular_valuesr  	  s<    
 D3r7^519!8DK 
 Kr%   c                 R   ^ [        5         [        U S5        S mU4S jnU" X5      $ )aL  
Computes rank for matrices and vectors.
The only issue that may arise is that because numpy uses double
precision lapack calls whereas numba uses type specific lapack
calls, some singular values may differ and therefore counting the
number of them above a tolerance may lead to different counts,
and therefore rank, in some cases.
matrix_rankc                    ^ US [         R                  4;   aa  [        U R                  SU R                  5      n[        R
                  " U5      n[        R                  " U5      R                  mSU4S jjnU$ SS jnU$ )NrD   c                    > [        U 5      nU R                  S   nU R                  S   n[        X45      nUS   U-  T-  n[        X&5      $ )Nr   r   )r  r   r  r  )r  tolr   r  r   lr   eps_vals          r#   _2d_tol_none_implImatrix_rank_impl.<locals>._2d_matrix_rank_impl.<locals>._2d_tol_none_impl	  sM    ,Q/GGAJGGAJIaD1Hw&5a;;r%   c                 .    [        U 5      n[        X!5      $ r2   )r  r  )r  r  r   s      r#   _2d_tol_not_none_implMmatrix_rank_impl.<locals>._2d_matrix_rank_impl.<locals>._2d_tol_not_none_impl	  s    ,Q/5a==r%   r2   )	r   r   rG   r    r
  r  r   r  eps)r  r  nb_typenp_typer  r  r  s         @r#   _2d_matrix_rank_impl.matrix_rank_impl.<locals>._2d_matrix_rank_impl	  sk     4$$agg'9177CG ))'2Ghhw'++G< %$> )(r%   c                 V   > U R                   nUS:X  a  SS jnU$ US:X  a  T" X5      $  e)Nr   c                 N    [        [        U 5      5       H  nX   S:w  d  M    g   g)Nr   r   r   r
  )r  r  r   s      r#   _1d_matrix_rank_implMmatrix_rank_impl.<locals>._get_matrix_rank_impl.<locals>._1d_matrix_rank_impl
  s%    s1vAtrz  ' r%   r1  r2   r  )r  r  r;  r   r  s       r#   _get_matrix_rank_impl/matrix_rank_impl.<locals>._get_matrix_rank_impl	  s7    vv19
 ('QY'//1r%   )r0   r  )r  r  r"  r  s      @r#   matrix_rank_implr$  	  s+     O M2).4 !((r%   c                    ^ [        U S5        [        R                  " U R                  5      m[	        USU5      n[        U[        R                  5      (       d  [        S5      eU4S jnU$ )zD
Computes matrix power. Only integer powers are supported in numpy.
matrix_powerr    zExponent must be an integer.c                 6  > US:X  aF  [         R                  " U R                  T
S9n[        U R                  S   5       H	  nSX#U4'   M     U$ U R                  S   U R                  S   pTXE:w  a  [	        S5      eUS:X  a  U R                  5       $ US:  a9  [         R                  R                  U 5      R                  5       nUS:X  a  U$ U* nOUS:X  a  U R                  5       $ U nUS:  aN  US	:X  a  [         R                  " X"5      $ US
:X  a+  [         R                  " [         R                  " X"5      U5      $ g UnUnUnSn	US:w  aO  US-  (       a"  U	(       a  UnSn	O[         R                  " X5      n[         R                  " Xf5      nUS-	  nUS:w  a  MO  U$ )Nr   r  r   r  r  zinput must be a square arrayr      r1     TF)	r   r  r   r  r  r   r  r  r  )r  r   r  r   rS  r`  r  r  r+  flagr  s             r#   matrix_power_impl,matrix_power_impl.<locals>.matrix_power_impl
  s|   6 1A1771:&Q$ 'HaggbkB8;<< 7668O q5		a %%'ABwAAvvvxAq5Avvva|#AvvvbffQlA..  CC C D(7!$ ffS.ffS&Qh ( Jr%   )	r  r
  r  r    rG   r   r   Integerr   )r  r   ntr+  r  s       @r#   r+  r+  
  s\     N+""177+H	GQ	Bb%--((;<<=~ r%   c                     [        U SSS9  [        U[        [        R                  45      (       d  [        SU-  5      eSS jnU$ )z!
Computes the trace of an array.
traceFr  z!integer argument expected, got %sc                     U R                   u  p#UnUS:  a  X$-   nUS:  a  X4-
  n[        [        X#5      S5      nSnUS:  a  [        U5       H  nX`XtU-   4   -  nM     U$ [        U5       H  nX`Xt-
  U4   -  nM     U$ r   )r   r  r  r  )r  offsetrowscolsr   r   r+  r,  s           r#   matrix_trace_impl,matrix_trace_impl.<locals>.matrix_trace_implk
  s    WW
q58Dq58DD#61XE{" 
 
 1X{" 
r%   r   )r  r   r   r   r-  r   )r  r3  r6  s      r#   r6  r6  `
  sD     Gu5fsEMM233@6IJJ" r%   c                     U(       a  SOSnX14n[        U [        R                  5      (       a  U R                  S::  d  [	        SU-  SS9eg g )Nr  r   r1  r  Fr  )r   r   r   r;  r   r  s        r#   _check_scalar_or_lt_2d_matr:  
  sT    %[4F F!U[[!!vv{K &'5:< <  "r%   c                 ,   [         R                  " U 5      n[         R                  " U5      n[         R                  " UR                  5       R	                  UR
                  S45      UR                  5       R	                  SUR
                  45      5      $ rF  r   asarraymultiplyr  r  r  r  r  r  aabbs        r#   outer_impl_nonerB  
  sd    	AB	AB;;rxxz))277A,7
**Arww<8: :r%   c                 2   [         R                  " U 5      n[         R                  " U5      n[         R                  " UR                  5       R	                  UR
                  S45      UR                  5       R	                  SUR
                  45      U5        U$ rF  r<  r?  s        r#   outer_impl_arrrD  
  si    	AB	ABKK
""BGGQ<0
""Arww<0 Jr%   c                 F    US [         R                  4;   a  [        $ [        $ r2   )r   r   rB  rD  )r  r  r  s      r#   _get_outer_implrF  
  s    
tUZZ  r%   c                 \   ^ [        U SSS9  [        USSS9  [        XU5      mSU4S jjnU$ )NouterFr1  c                    > T" XU5      $ r2   rW   )r  r  r  r   s      r#   
outer_implouter_impl.<locals>.outer_impl
  s    A#r%   r2   )r:  rF  )r  r  r  rJ  r   s       @r#   rJ  rJ  
  s6     q'U;q'U;1%D r%   c                    [        U [        R                  5      (       a`  U R                  S;  a$  [	        SR                  U R                  5      5      eU R                  S:X  a  [        S 5       nU$ [        S 5       nU$ [        S 5       nU$ )N)r   r   z^np.linalg.kron only supports 'C' or 'F' layout input arrays. Received an input of layout '{}'.r1  c                 `    U R                   S   nU R                   S   nU R                  X!5      $ )Nr  r  r   r  )rd  xnxms      r#   	nrm_shape(_kron_normaliser_impl.<locals>.nrm_shape
  s+    WWR[WWR[yy((r%   c                 D    U R                   S   nU R                  SU5      $ )Nr  r   rN  )rd  rO  s     r#   rQ  rR  
  s     WWR[yyB''r%   c                 N    [         R                  " S[        U 5      5      nXS'   U$ )Nr4  r   )r   r  r  )rd  r  s     r#   rQ  rR  
  s"    a)AaDHr%   )r   r   r   r   r   formatr;  r   )rd  rQ  s     r#   _kron_normaliser_implrV  
  s    !U[[!!88:% --3VAHH-=? ? VVq[) ) ( ( 		 
	 r%   c                 n   [        U [        R                  5      n[        U[        R                  5      nU(       aC  U(       a<  U R                  S:X  d  UR                  S:X  a  [        S 5       nU$ [        S 5       nU$ U(       a  [        S 5       nU$ U(       a  [        S 5       nU$ [        S 5       nU$ )Nr1  c                     U$ r2   rW   r  r  r   s      r#   r+  _kron_return.<locals>.ret
  s    r%   c                 8    UR                  UR                  5      $ r2   )r  r  rY  s      r#   r+  rZ  
  s    yy((r%   c                 8    UR                  U R                  5      $ r2   r  r   rY  s      r#   r+  rZ  
      yy))r%   c                 8    UR                  UR                  5      $ r2   r]  rY  s      r#   r+  rZ  
  r^  r%   c                     US   $ r   rW   rY  s      r#   r+  rZ  
  s    tr%   )r   r   r   r;  r   )r  r  a_is_arrb_is_arrr+  s        r#   _kron_returnrc  
  s     !U[[)H!U[[)HH66Q;!&&A+ J) )J* *J* *J Jr%   c                    ^^^^ [        U SSS9  [        USSS9  [        U 5      m[        U5      m[        X5      m[        U SU 5      mUUUU4S jnU$ )NkronFr1  r    c           	        > T" U 5      nT" U5      nUR                   S   nUR                   S   nUR                   S   nUR                   S   nXF-  nXW-  n	[        R                  " X4TS9n
[        U5       HN  nX-  n[        U5       H8  nX-   nX=S S 24   n[        U5       H  nUU-  nX+U4   U-  XUUU-   24'   M     M:     MP     T" XU
5      $ )Nr  r  r  )r   r   r  r  )r  r  r@  rA  rS  r`  rT  rc  cmcnr   r,  rjmpr   irjmpslcr-  cjmpr  fix_afix_bret_cs                     r#   	kron_implkron_impl.<locals>.kron_impl
  s    1X1XXXb\XXb\XXb\XXb\WW HHbXR( rA6D2YAhrA r6D/1Q$x#~AT$)^+, # 	 " Q1~r%   )r:  rV  rc  rG   )r  r  rp  r  rm  rn  ro  s      @@@@r#   rp  rp  
  s^     q&E:q&E:!!$E!!$EE 
GQ	B& &P r%   )z<BLAS function>)F)Tr$  r  r  r2   r8  )r\   
contextlibrF  llvmliter   numpyr   operatornumba.core.imputilsr   r   r   r   numba.core.typingr   numba.core.extendingr	   r
   r   
numba.corer   r   r   numba.core.errorsr   r   r   arrayobjr   r   r   numba.npr   r
  r   r   
as_pointer	ll_char_pr   ll_intc	ll_intc_pr   	ll_intp_pr  r  USE_LEGACY_TYPE_SYSTEMrg   float32r   	complex64
complex128r   np_int32
np_float32
np_float64np_complex64np_complex128r$   r,   r0   r:   r<   r`   contextmanagerr   r   r   r   r   r   r   r  r  r  r#  r  r*  matmulr,  r&  rQ  rS  rU  rm  r|  r  rL   rH   r  c_intpr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r'  r.  r6  r@  rC  rJ  rM  rZ  r\  re  rg  rx  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r$  r&  r+  r0  r6  r:  rB  rD  rF  rH  rJ  rV  rc  re  rp  rW   r%   r#   <module>r     s%  
     J J ' F F - -  < < 0
**Q- 		
**R. 			 xx	  ;;L 	ss#	K >>L 	##CS	KHH5
&; &;R`: `:F - -0F	A	C-,"-J/-dD D D 6 
"&&/ / 
(//* *)6X 
"''6 6<@@6.rV.r 
"&& @  @F 
  --.A5::<P--.A5<<>R 8 83*7	 

 ! "6 < <  
 
"))--$ $N G G@$ 
"))

) )V 
"))--p pd 
"))

t! t!l 
"))... .` 
"))

. .` 
"))--> >B 
")),,I I` 

  

   

+, -( 

!" #* 
/! !H 
/  
"))//[ [| 

  ! 
"))//9 9x 
"))..` `F! H 
"))

7 7t 
"))--
 
 

"#C $CL 
,   FDN 
")).." " 
"))..) )X 
 
 
"))

 >) !>)B 
"))
 
 !K "K` 
"(( << : :   
"((
 
:D 
"''5 5r%   