
    if                    "   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,\RV                  r-\R\                  S\R^                  S\R`                  S\Rb                  S0r2SgS jr3S r4S r5S r6 " S S5      r7 " S S5      r8\Rr                  S 5       r:S r;S r<S r=S r>S r?S  r@S! rAS" rBS# rCShS$ jrD\" \R                  5      S% 5       rF\" \R                  5      S& 5       rHS' rI\" \R                  5      S( 5       rJS) rKS* rLS+ rMS, rN\" \R                  5      S- 5       rO\R                  " S.\R                  " 5       5      rR\S/ 5       rSSiS0 jrTS1 rUS2 rV\" \V5      S3 5       rW\S4 5       rX\S5 5       rY\" \R                  R                  5      S6 5       r\\S7 5       r]SiS8 jr^\" \R                  R                  5      S9 5       r`\" \R                  R                  5      S: 5       rb\" \R                  R                  5      S; 5       rd\" \R                  R                  5      S< 5       rf\" \R                  R                  5      S= 5       rh\" \R                  R                  5      SjS> j5       rj\" \R                  R                  5      S? 5       rlS@ rm\" \m5      SA 5       rnSB ro\" \o5      SC 5       rpSD rq\" \q5      SE 5       rrSF rs\" \s5      SG 5       rtSH ru\" \u5      SI 5       rvSJ rw\" \w5      SK 5       rx\" \R                  R                  5      SkSL j5       rzSM r{\" \{5      SN 5       r|\" \R                  R                  5      SO 5       r~\" \R                  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R$                  5      S] 5       r\" \GR(                  5      SnS^ j5       rSiS_ jr\S` 5       r\Sa 5       rSb r\" \GR4                  5      SmSc j5       rSd rSe r\" \GR<                  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      F/mnt/rpi/venvs/whisper/lib/python3.13/site-packages/numba/np/linalg.pyget_blas_kindr$   0   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,   7   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   >   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:   E   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)_BLASJ   zA
Functions to return type signatures for wrapped
BLAS functions.
c                     [        5         g r2   )r,   selfs    r#   __init___BLAS.__init__P   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_xxnrm2S   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_xxgemm^   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<   J   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)_LAPACKs   zC
Functions to return type signatures for wrapped
LAPACK functions.
c                     [        5         g r2   )r0   r?   s    r#   rA   _LAPACK.__init__y   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   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>.impl5  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   =  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   I  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   U  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   k  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r  r  s     r#   dot_2r(    s    
 j!''r%   c                     [        SX5      $ )z
a @ b
z'@'r%  r'  s     r#   matmul_2r*    s    
 eQ""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   r/  r/  r   r   r/  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 dtyper.  r/  r   r0  r1  r   r2  z*%s: inputs must have compatible dimensions)ndimr    r   r   r   r   )typingcontextr  r  r7  r   r6  names        @r#   _impldot_2_impl.<locals>._impl  s    VVQVV$E< ww!''!!?$FH H #kk!''1c:&EVO#kk!''1c:&gg! $037#8 9 9[Q/>>r%   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>F  s	    E!Kr%   r   r   r   r	   r   warningswarnr   )r;  r  r  r<  s   `  @r#   r&  r&    s}    !U[[!!jEKK&@&@		? 
	?B 8841884#7MM1&#$;= ('Q 'A!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>.codegenQ  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)r9  r   r    r   )r:  leftrightrG  s       r#   r<  vdot.<locals>._implO  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   rI  rJ  r<  s     r#   r?  vdot.<locals>.<lambda>e  s
    5#5r%   NrA  rN  s     @r#   vdotrP  I  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_argsrR  h  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_argsrT  s  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   r/  r   r   ==Fr   N)r   r   r    r   r   r  r   r9  r   r   rR  rT  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_vmrl  ~  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   r/  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%   rV  Fr   N)r   r   r    r   r   r  r   r   r   r   r   r   r   r   rW  rJ   rX  rY  rZ  r[  r\  r]  r^  r   r   r   r   r_  )'r5   r6   rP   r   r`  ra  rb  r    rc  rd  r  r   r   r   r   r   r   r   r  r   r   r   rg  rh  x_emptyy_emptyrj  r  rk  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   r9  ).0rc  s     r#   	<genexpr>8dot_3.<locals>._impl.<locals>.codegen.<locals>.<genexpr>  s     =1s   r/  r   r3  )r,   r   setr   r{  rl  r4  r5  s        r#   rG  %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  rG  s        r#   r<  dot_3.<locals>._impl  sN    < ww!''!QWW		%9!EG G SQ,g55r%   r   rL  c                    > T" XU5      $ r2   rW   r  r  r  r<  s      r#   r?  dot_3.<locals>.<lambda>1  s    qS!1r%   NrA  r  s      @r#   dot_3r    s    
 	1ekk""z!U[['A'AsEKK((		6 
	6& 8841884#73::<MM646 217 ) (B"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  7  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highlightingr/  z%%s.%s() only supported on 2-D arrays.3%s.%s() only supported on float and complex arrays.)
r   r   Optionaltyper   r   r9  r    FloatComplex)r  r!   	la_prefixprefixinterpmsgs         r#   _check_linalg_matrixr  ?  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  T  sB    	qB12Y77b=UXaaCc66 r%   c                      g r2   rW   rW   r%   r#   _copy_to_fortran_orderr  \  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>.implf  s    771:D  WW))F wwqss|~~ 	 ((+  $$Q'Dr%   r   )r  r   r  r  s     @@r#   ol_copy_to_fortran_orderr  `  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 r/  +%s.%s() only supported on 1 and 2-D arrays r  )r   r   r   r   r9  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_implB  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  o  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_impl(  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_implY  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!  H  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_br5    
     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   r2  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  r9  r2  s      r#   	twoD_impl)_system_copy_in_b_impl.<locals>.twoD_impl  s    ()!''"+uu$%r%   r  )r3  r  r4  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
r0  r  s    r#   _system_compute_nrhsrB    r6  r%   c                 6    U R                   S:X  a  S nU$ S nU$ )Nr   c                     gNr   rW   rA  s    r#   r:  ,_system_compute_nrhs_impl.<locals>.oneD_impl  s    r%   c                      U R                   S   $ )Nr  r9  rA  s    r#   r=  ,_system_compute_nrhs_impl.<locals>.twoD_impl  s    772;r%   r  )r  r:  r=  s      r#   _system_compute_nrhs_implrI    s#    vv{		r%   c                     [         e)z<
Check that AX=B style system input is dimensionally valid.
r0  r'  s     r#   !_system_check_dimensionally_validrK    r6  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  rN  rO  rP  s       r#   r=  9_system_check_dimensionally_valid_impl.<locals>.twoD_impl  rT  r%   r  r  r  r9  r:  r=  s        r#   &_system_check_dimensionally_valid_implrX    s.    66Dqy	T 	T r%   c                     [         e)z2
Check that AX=B style system input is not empty.
r0  r'  s     r#   _system_check_non_emptyrZ    r6  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  rO  )r  r  rQ  anrR  s        r#   r:  /_system_check_non_empty_impl.<locals>.oneD_impl(  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]  rO  )r  r  rQ  r^  rR  bns         r#   r=  /_system_check_non_empty_impl.<locals>.twoD_impl0  sj    BBBBQw"'R1Waii++,DEE 18r%   r  rW  s        r#   _system_check_non_empty_implrc  $  s.    66Dqy	F 	F r%   c                     [         e)z2
Compute the residual from the 'b' scratch space.
r0  )r  r   r4  s      r#   _lstsq_residualre  :  r6  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   r/  )r   r  sumabsr  r   r4  r   
real_dtypes       r#   
cmplx_impl(_lstsq_residual_impl.<locals>.cmplx_implI  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$ rh  )r   r  ri  rk  s       r#   	real_impl'_lstsq_residual_impl.<locals>.real_implO  s6    hht:6"a%!,A
r%   r/  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  r/  )r   r  r  ri  rj  r  r   r4  r   r   rl  s        r#   rm  rn  W  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$ rs  )r   r  r  ri  rt  s        r#   rp  rq  ^  sB    hhZ8tAVVAb!eHaK0CF %
r%   )r9  r    r	  r
  rG   r   r   r  )r  r   r4  r9  r    rm  rp  rl  s          @r#   _lstsq_residual_implrv  A  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...
r0  r  r3  r   s      r#   _lstsq_solutionry  f  
    
 r%   c                 6    U R                   S:X  a  S nU$ S nU$ )Nr   c                 <    UR                   R                  5       S U $ r2   r  ravelrx  s      r#   r:  '_lstsq_solution_impl.<locals>.oneD_implq  s    66<<>"1%%r%   c                 4    US U2S S 24   R                  5       $ r2   r   rx  s      r#   r=  '_lstsq_solution_impl.<locals>.twoD_implu  s    A;##%%r%   r  )r  r3  r   r:  r=  s        r#   _lstsq_solution_implr  n  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   rB  r  rZ  rK  r  maxr  r   r  r  r5  int32r  r  re  ry  r  r  )r  r  rcondr   r   r4  r  maxmnr  r3  r   rank_ptrr  rankr   rc  r"   np_dtr   rl  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   rl  s
         @@@@r#   r  r  z  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...
r0  r  r3  s     r#   _solve_compute_returnr    rz  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  r3  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   rB  r  rK  r  r   r  r  r  r5  r  r  r  r  r  )r  r  r   r4  r  r3  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   rr  r   rg  s                   r#   	pinv_implpinv_impl.<locals>.pinv_implD  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   rr  r   rg  s        @@@@@@@@@r#   r  r  *  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   rj  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_impl4  s+    **1-RVVG_$$r%   r0   r  )r  r  s     r#   r  r  -  s     OE"% Or%   c                     [         e)z!
Compute singular values of *a*.
r0  r  s    r#   _compute_singular_valuesr  ;  r6  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   r2  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_functionW  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  B  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*.
r0  r  s    r#   _oneD_norm_2r    r6  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  rc  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   r/  r   r   )r  r  r   r  rj  r  )rc  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%   r/  r   c                     U $ r2   rW   rc  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  )rc  r   r   x_cr  s       r#   r=  !_get_norm_impl.<locals>.twoD_impl&	  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   r/  z Invalid norm order for matrices.)r   r  r   r  r  rj  r  r  )
rc  r   r   r   
global_maxiitmpjj
global_minmax_vals
            r#   r=  r  1	  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$   r9  r   r   r   r   r   finfor  r  )rc  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$ )Nr/  r  r   r  )r  r   divider  r  r  isnanr  )rc  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  )rc  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%   r/  r2   r  )r  r  r9  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      r/     TF)	r   r  r   r  r  r   r  r  r  )r  r   r  r   rQ  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_impl]
  s    WW
q58Dq58DD#61XE{" 
 
 1X{" 
r%   r   )r  r   r   r   r+  r   )r  r1  r4  s      r#   r4  r4  R
  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   r/  r  Fr  )r   r   r   r9  r   r  s        r#   _check_scalar_or_lt_2d_matr8  q
  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      $ rE  r   asarraymultiplyr~  r  r  r  r  r  aabbs        r#   outer_impl_noner@  {
  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$ rE  r:  r=  s        r#   outer_impl_arrrB  
  si    	AB	ABKK
""BGGQ<0
""Arww<0 Jr%   c                 F    US [         R                  4;   a  [        $ [        $ r2   )r   r   r@  rB  )r  r  r  s      r#   _get_outer_implrD  
  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outerFr/  c                    > T" XU5      $ r2   rW   )r  r  r  r   s      r#   
outer_implouter_impl.<locals>.outer_impl
  s    A#r%   r2   )r8  rD  )r  r  r  rH  r   s       @r#   rH  rH  
  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 '{}'.r/  c                 `    U R                   S   nU R                   S   nU R                  X!5      $ )Nr  r  r   r  )rc  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   rL  )rc  rM  s     r#   rO  rP  
  s     WWR[yyB''r%   c                 N    [         R                  " S[        U 5      5      nXS'   U$ )Nr2  r   )r   r  r  )rc  r  s     r#   rO  rP  
  s"    a)AaDHr%   )r   r   r   r   r   formatr9  r   )rc  rO  s     r#   _kron_normaliser_implrT  
  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$ )Nr/  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  rW  s      r#   r*  rX  
  s    yy((r%   c                 8    UR                  U R                  5      $ r2   r  r   rW  s      r#   r*  rX  
      yy))r%   c                 8    UR                  UR                  5      $ r2   r[  rW  s      r#   r*  rX  
  r\  r%   c                     US   $ r   rW   rW  s      r#   r*  rX  
  s    tr%   )r   r   r   r9  r   )r  r  a_is_arrb_is_arrr*  s        r#   _kron_returnra  
  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kronFr/  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>  r?  rQ  r^  rR  ra  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%   )r8  rT  ra  rG   )r  r  rn  r  rk  rl  rm  s      @@@@r#   rn  rn  
  s^     q&E:q&E:!!$E!!$EE 
GQ	B& &P r%   )z<BLAS function>)F)Tr#  r  r  r2   r6  )r\   
contextlibrB  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  rg   float32r   	complex64
complex128r   r$   r,   r0   r:   r<   r`   contextmanagerr   r   r   r   r   r   r   r  r  r  r#  r  r(  matmulr*  r&  rP  rR  rT  rl  r{  r  rL   rH   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-  r5  r?  rB  rI  rK  rX  rZ  rc  re  rv  ry  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.  r4  r8  r@  rB  rD  rF  rH  rT  ra  rc  rn  rW   r%   r#   <module>r     s  
     J J ' F F - -  < < 0
**Q- 		
**R. 			 xx{{ 
MM3	MM3	OOS	c	HH5
&; &;R`: `:F - -0F	A	C-,"-J/-dD D D 6 
"&&( ( 
(//# #)(X 
"''6 6<@@6.rV.r 
"&& 2  2F ))*=uzz|L  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%   