
    J/Ph.i                       d Z ddlZddlZddlmZ ddlZddlZddlm	Z	m
Z
mZmZ ddlmZ ddlmZmZmZ ddlmZmZmZ ddlmZmZmZ d	d
lmZmZmZ ddlm Z!  ej"        d          Z#e#$                                Z%e%Z& ej"        d          Z'e'$                                Z(ej)        Z)e)$                                Z*ej+        Z,ej-        r&ej+        Z.ej/        dej0        dej1        dej2        diZ3n%ej4        Z.ej5        dej6        dej7        dej8        diZ3dldZ9d Z:d Z;d Z< G d d          Z= G d d          Z>ej?        d             Z@d ZAd ZBd ZCd ZDd  ZEd! ZFd" ZGd# ZHd$ ZIdmd&ZJ eejK                  d'             ZL eejM                  d(             ZNd) ZO eejP                  d*             ZPd+ ZQd, ZRd- ZSd. ZT eejK                  d/             ZUej-        r ejV        d0 ejW                              ZXn ejV        d0 ejY                              ZXed1             ZZdnd3Z[d4 Z\d5 Z] ee]          d6             Z^ed7             Z_ed8             Z` eeja        jb                  d9             Zced:             Zddnd;Ze eeja        jf                  d<             Zg eeja        jh                  d=             Zi eeja        jj                  d>             Zk eeja        jl                  d?             Zm eeja        jn                  d@             Zo eeja        jp                  dodA            Zq eeja        jr                  dB             ZsdC Zt eet          dD             ZudE Zv eev          dF             ZwdG Zx eex          dH             ZydI Zz eez          dJ             Z{dK Z| ee|          dL             Z}dM Z~ ee~          dN             Z eeja        j                  dpdP            ZdQ Z ee          dR             Z eeja        j                  dS             Z eeja        j                  dqdU            ZdV Z eeja        j                  dW             Z eeja        j                  dX             ZdY Z ee          dZ             Zd[ Z ee          d\             Zd] Z eeja        j                  drd^            Z eeja        j                  drd_            Zed`             Z eeja        j                  drda            Z eeja        j                  db             Z eej                  dsdc            ZdnddZede             Zedf             Zdg Z eej                  drdh            Zdi Zdj Z eej                  dk             ZdS )tz.
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z<BLAS function>c                 d    t                               |           }|t          d|d          |S )Nzunsupported dtype for z())_blas_kindsgetr   )dtype	func_namekinds      O/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/np/linalg.pyget_blas_kindr%   ;   s4    ??5!!D|nYYYHIIIK    c                  J    	 dd l } d S # t          $ r t          d          w xY wNr   z*scipy 0.16+ is required for linear algebra)scipy.linalg.cython_blasImportErrorscipys    r$   ensure_blasr-   B   sH    H'''''' H H HFGGGH    "c                  J    	 dd l } d S # t          $ r t          d          w xY wr(   )scipy.linalg.cython_lapackr*   r+   s    r$   ensure_lapackr1   I   sH    H)))))) H H HFGGGHr.   c                 Z    |                      |||          }t          j        ||          S N)get_constant_genericr   alloca_once_value)contextbuildertyvalconsts        r$   make_constant_slotr;   P   s,    (("c::E$We444r&   c                   D    e Zd ZdZd Zed             Zed             ZdS )_BLASzM
    Functions to return type signatures for wrapped
    BLAS functions.
    c                 "    t                       d S r3   )r-   selfs    r$   __init__z_BLAS.__init__[   s    r&   c           	         t          |d|          }t          j        t          j        t          j        t          j        |          t          j        t          j        |                    }t          j        d|          S )Nunderlying_floatnumba_xxnrm2getattrr   intccharintpCPointerExternalFunctionclsr!   rtypesigs       r$   rD   z_BLAS.numba_xxnrm2^   sb    1599j....	0 0 %nc:::r&   c                    t          j        t           j        t           j        t           j        t           j        t           j        t           j        t          j        |          t          j        |          t           j        t          j        |          t           j        t          j        |          t          j        |          t           j                  }t          j        d|          S )Nnumba_xxgemmr   rG   rH   rI   rJ   rK   rM   r!   rO   s      r$   rQ   z_BLAS.numba_xxgemmi   s    jJJJJJJN5!!N5!!JN5!!JN5!!N5!!J
 
  %nc:::r&   N)__name__
__module____qualname____doc__rA   classmethodrD   rQ    r&   r$   r=   r=   U   sc         
   ; ; [; ; ; [; ; ;r&   r=   c                   
   e Zd ZdZd Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zed             ZdS )_LAPACKzO
    Functions to return type signatures for wrapped
    LAPACK functions.
    c                 "    t                       d S r3   )r1   r?   s    r$   rA   z_LAPACK.__init__   s    r&   c           
          t          j        t           j        t           j        t           j        t          j        |          t           j        t          j        t
                              }t          j        d|          S )Nnumba_xxgetrfr   rG   rH   rI   rJ   F_INT_nbtyperK   rS   s      r$   r^   z_LAPACK.numba_xxgetrf   sU    j..55  %os;;;r&   c           	          t          j        t           j        t           j        t          j        |          t           j        t          j        t
                              }t          j        d|          S )Nnumba_ez_xxgetrir_   rS   s      r$   rb   z_LAPACK.numba_ez_xxgetri   sQ    j..55	  %&8#>>>r&   c                    t          j        t           j        t           j        t           j        t           j        t          j        |          t           j        t          j        |          t          j        |          t          j        |          t           j        t          j        |          t           j                  }t          j        d|          S )Nnumba_ez_rgeevrR   rS   s      r$   rd   z_LAPACK.numba_ez_rgeev   s    j..........  %&6<<<r&   c                    t          j        t           j        t           j        t           j        t           j        t          j        |          t           j        t          j        |          t          j        |          t           j        t          j        |          t           j                  }t          j        d|          S )Nnumba_ez_cgeevrR   rS   s      r$   rf   z_LAPACK.numba_ez_cgeev   s    j........  %&6<<<r&   c                 .   t          |d|          }t          j        t          j        t          j        t          j        t          j        t          j        |          t          j        t          j        |                    }t          j        d|          S )NrC   numba_ez_xxxevdrE   )rM   r!   wtyperO   s       r$   rh   z_LAPACK.numba_ez_xxxevd   sm    1599j....  %&7===r&   c                     t          j        t           j        t           j        t           j        t          j        |          t           j                  }t          j        d|          S )Nnumba_xxpotrfrR   rS   s      r$   rk   z_LAPACK.numba_xxpotrf   sH    j..	  %os;;;r&   c                    t          |d|          }t          j        t          j        t          j        t          j        t          j        t          j        |          t          j        t          j        |          t          j        |          t          j        t          j        |          t          j                  }t          j        d|          S )NrC   numba_ez_gesddrE   )rM   r!   styperO   s       r$   rm   z_LAPACK.numba_ez_gesdd   s    1599jJJJJN5!!JN5!!N5!!JN5!!J
 
 %&6<<<r&   c           
          t          j        t           j        t           j        t           j        t          j        |          t           j        t          j        |                    }t          j        d|          S )Nnumba_ez_geqrfrR   rS   s      r$   rp   z_LAPACK.numba_ez_geqrf   sW    jJJJN5!!JN5!!
 
 %&6<<<r&   c                    t          j        t           j        t           j        t           j        t           j        t          j        |          t           j        t          j        |                    }t          j        d|          S )Nnumba_ez_xxgqrrR   rS   s      r$   rr   z_LAPACK.numba_ez_xxgqr   s\    jJJJJN5!!JN5!!
 
 %&6<<<r&   c                    t          |d|          }t          j        t          j        t          j        t          j        t          j        t          j        |          t          j        t          j        |          t          j        t          j        |          t          j        t          j        t          j                            }t          j        d|          S )NrC   numba_ez_gelsd)rF   r   rG   rH   rI   rJ   float64rK   rL   s       r$   rt   z_LAPACK.numba_ez_gelsd   s    1599jJJJJN5!!JN5!!JN5!!MN5:&&
 
 %&6<<<r&   c                 <   t          j        t           j        t           j        t           j        t          j        |          t           j        t          j        t
                    t          j        |          t           j                  }t          j        d|          S )Nnumba_xgesvr_   rS   s      r$   rw   z_LAPACK.numba_xgesv  sh    jJJJN5!!JN<((N5!!J	
 	
 %mS999r&   N)rT   rU   rV   rW   rA   rX   r^   rb   rd   rf   rh   rk   rm   rp   rr   rt   rw   rY   r&   r$   r[   r[   ~   sV        
   < < [< ? ? [? = = [=  = = [= 
> 
> [
> < < [< = = [=$ 	= 	= [	= 
= 
= [
= = = [=" : : [: : :r&   r[   c              #     K   g }g }g }t          |j        |          D ]\  }}t          |t          j                  r	|j        dv r||}
}	nP|                    d          }	t          |	|          }t          | |||f          }
|	                    |	|
f           |	                    |	           |	                    |
           t          |j
        g|R  t          |          fV  |D ]!\  }}| j                            |||           "dS )z
    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)r6   r7   rO   r~   newtysnewargscopiesr8   r9   newtynewvalcopysigs               r$   make_contiguousr   !  s8      FGFsx&& 	 	C"ek** 	+bi4.?.?6EEGG3G''Er**G'C6BBFMM5&/***ev
CO
-f
-
-
-uW~~
==== - -C7B,,,,- -r&   c                     dfd}|                      ||t          t          j        t          j                  |f           dS )z.
    Check whether *n* fits in a C `int`.
    ic                 2    | k    rt          d          d S )Nz$array size too large to fit in C int)OverflowError)n_maxints    r$   implzcheck_c_int.<locals>.impl@  s"    w;; FGGG ;r&   N)compile_internalr   r   nonerI   )r6   r7   r   r   r   s       @r$   check_c_intr   :  sj     GH H H H H Wd&uz5:>>F F F F Fr&   c                    |                     t          j        ||          d          5  |                     |          }|                                 |                    d           ddd           dS # 1 swxY w Y   dS )z[
    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r6   r7   respyapis       r$   check_blas_returnr   H  s    
 
,Wc::5	I	I A A&&w//?@@@	A A A A A A A A A A A A A A A A A A   ?A77A;>A;c                    |                     t          j        ||          d          5  |                     |          }|                                 |                    d           ddd           dS # 1 swxY w Y   dS )z]
    Check the integer error return from one of the LAPACK wrappers in
    _helperlib.c.
    Fr   z%LAPACK wrapper returned with an errorNr   r   s       r$   check_lapack_returnr   T  s    
 
,Wc::5	I	I C C&&w//ABBB	C C C C C C C C C C C C C C C C C Cr   c                 |   t          j        t          j        d          t          t          t          t
          t
          t
          g          }t          j        |j        |d          }	t          |          }
t          j
        t          t          |
                    }t          j
        t          t          |                    }|                    |	||||                    |t
                    |                    |t
                    |                    |t
                    f          }t          | ||           dS )zQ
    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   )r6   r7   	conjugater!   r   a_datab_dataout_datafntyfnr#   kind_valr   s                r$   
call_xxdotr   `  s    
 ?2:b>>#Wf%y) D 
	'm	L	LBD{7CII..HGS^^44I
,,rHi#OOFI>>#OOFI>>#OOHi@@B C CC gw,,,,,r&   c                    t          j        t          j        d          t          t          t          t          t
          t
          t          t
          t
          t
          g
          }t          j        |j        |d          }	|j	        }
t          | ||
d          }t          | ||
d          }|j        dk    r|\  }}|d         }n|\  }}|d         }t          |
          }t          j        t          t          |                    }t          j        t          |rt          d          nt          d	                    }|                    |	|||||                    |t
                    |                    |t
                    ||                    |t
                    |                    |t
                    |                    |t
                    f
          }t#          | ||           d
S )zQ
    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   )r6   r7   do_transm_typem_shapesm_datav_datar   r   r   r!   alphabetamr   ldar#   r   transr   s                       r$   call_xxgemvr   v  s   
 ?2:b>>#W"F%y&%y) D 
	'n	M	MBLEw<<Egws;;D}1qk1qkD{7CII..HKX!CS3s88DDE
,,rHeQ#OOE9==#OOFI>>#OOFI>>#OOD)<<#OOHi@@B C CC gw,,,,,r&   c                   !" t          j        t          j        d          t          t          t          t          t          t          t
          t
          t          t
          t          t
          t
          t          g          }t          j        j        |d          }|\  }}|\  }}|j	        }t          | |d          }t          | |d          }t          j        t          t          d                    "t          j        t          t          d                    !!"fd} ||||          \  }}} ||||          \  }}} ||	|
          \  }}}t          |          }t          j        t          t          |                    }                    |||||||                    |t
                    ||||                    |t
                    ||f          } t!          | |            dS )	zQ
    Call the BLAS matrix * matrix product function for the given arguments.
    r   rQ   r   r   r   r   c                     | j         j         k    rn| j         dk    r|d         n|d                             |t                    fS )Nrz   r   r   )r|   r   r   )r8   shapesdatar7   notransout_typer   s      r$   get_array_paramz$call_xxgemm.<locals>.get_array_param  sP     yHO33GGc))F1IIvayOOD),,
 	
r&   N)r   r   r   r   r   r   r   r   r   r!   r;   r   r   r%   r   r   r   )#r6   r7   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     s    ?2:b>>##W"FF%y&%vy%v D 
	'n	M	MBDAqEBLEw<<Egws;;DKS**Ek'3s88,,G
 
 
 
 
 
 
 
 */&(FCCFC)/&(FCCFC$_Xz8DDNAsFD{7CII..H
,,rHffaA#OOE9==vs"Cy)I)I"C) * *C gw,,,,,r&   c                 f    d }|                      ||||          }t          | ||j        |          S )z 
    np.dot(matrix, matrix)
    c                     | j         \  }}|j         \  }}|dk    rt          j        ||f| j                  S t          j        ||f| j                  }t          j        | ||          S Nr   shapenpzerosr!   emptydot)abr   r   r   r   outs          r$   dot_implzdot_2_mm.<locals>.dot_impl  sd    w1A668QFAG,,,h1vqw''vaC   r&   r   r   r   r6   r7   rO   r~   r   r   s         r$   dot_2_mmr     B    ! ! ! 
"
"7Hc4
@
@CGWcosCCCr&   c                 f    d }|                      ||||          }t          | ||j        |          S )z 
    np.dot(vector, matrix)
    c                     | j         \  }|j         \  }}|dk    rt          j        |f| j                  S t          j        |f| j                  }t          j        | ||          S r   r   )r   r   r   _mr   r   s         r$   r   zdot_2_vm.<locals>.dot_impl  s^    WA668QE17+++huag&&vaC   r&   r   r   s         r$   dot_2_vmr     r   r&   c                 f    d }|                      ||||          }t          | ||j        |          S )z 
    np.dot(matrix, vector)
    c                     | j         \  }}|j         \  }|dk    rt          j        |f| j                  S t          j        |f| j                  }t          j        | ||          S r   r   )r   r   r   r   _nr   s         r$   r   zdot_2_mv.<locals>.dot_impl  s^    w1g668QE17+++huag&&vaC   r&   r   r   s         r$   dot_2_mvr     r   r&   Fc           
      "   |j         \  }}|j        } t          |          | ||d                   } t          |          | ||d                   }	t          j        ||j                  \  }
d }|                     ||t          t          j	        g|j         R  |           t          | ||
           t          j        ||                     |                    }t          | ||||
|j        |	j        |           |                    |          S )z<
    np.dot(vector, vector)
    np.vdot(vector, vector)
    r   r   c                 T    | j         \  }|j         \  }||k    rt          d          d S )Nz;incompatible array sizes for np.dot(a, b) (vector * vector)r   
ValueError)r   r   r   r   s       r$   
check_argszdot_2_vv.<locals>.check_args  s;    WW66 1 2 2 2 6r&   )r~   r   r   r   unpack_tupler   r   r   r   r   r   alloca_onceget_value_typer   r   load)r6   r7   rO   r~   r   atybtyr!   r   r   r   r  r   s                r$   dot_2_vvr    s   
 xHCOE
3$q'22A
3$q'22A		gqw	/	/BA2 2 2 Wj&uz=CH===tE E E!$$$

gw'='=e'D'D
E
ECwE1afafcJJJ<<r&   c                 $    t          d| |          S )z
    np.dot(a, b)
    znp.dot()
dot_2_implleftrights     r$   dot_2r    s    
 j$...r&   c                 $    t          d| |          S )z
    a @ b
    z'@'r  r  s     r$   matmul_2r     s    
 eT5)))r&   c                 
    t          |t          j                  rdt          |t          j                  rLt           fd            |j        dvs	|j        dvr!t          j         d||ft                     fdS d S d S )Nc                 j   |j         |j         ffd}|j        |j        k    rt          dz            dk    rt          j        |j        dd          }nHdk    sdk    rt          j        |j        dd          }n d	k    r|j        }nt          d
z            t          |||          |fS )Nc                    t                       t          | |||          5 \  }}dk    rt          | |||          cd d d            S dk    rt          | |||          cd d d            S dk    rt	          | |||          cd d d            S dk    rt          | |||          cd d d            S t          d          # 1 swxY w Y   d S )N   r  r  r   r   r  r   r   unreachable)r-   r   r   r   r   r  AssertionErrorr6   r7   rO   r~   ndimss       r$   _dot2_codegenz0dot_2_impl.<locals>._impl.<locals>._dot2_codegen.  s{   $WgsDAA 
<[c4'#tDD
< 
< 
< 
< 
< 
< 
< 
< &'#tDD	
< 
< 
< 
< 
< 
< 
< 
<
 &'#tDD
< 
< 
< 
< 
< 
< 
< 
< &'#tDD
< 
< 
< 
< 
< 
< 
< 
< -];;;
< 
< 
< 
< 
< 
< 
< 
< 
< 
<s)   C
C.CC6CC	C	z)%s arguments must all have the same dtyper  r  rz   r  r  r   r  z*%s: inputs must have compatible dimensions)ndimr!   r   r   r   r   )typingcontextr  r  r!  r   r   names        @r$   _implzdot_2_impl.<locals>._impl*  s    Y
+E< < < < < zU[((!?$FH H H #k$*a==&EVOO#k$*a==&"j! $037#8 9 9 9[$66EEr&   ry   z+ is faster on contiguous arrays, called on c                      | |          S r3   rY   r  r  r%  s     r$   <lambda>zdot_2_impl.<locals>.<lambda>Q      55u#5#5 r&   r   r   r   r	   r|   warningswarnr   )r$  r  r  r%  s   `  @r$   r  r  (  s    $$$ (6E5;)G)G (6		F 	F 	F 	F 
	FB ;d""el$&>&>MDD4--*+BD D D 65555Q(6 (6 (6 (6r&   c                     t          | t          j                  r`t          |t          j                  rHt          d             | j        dvs	|j        dvrt          j        d| |ft                     fdS dS dS )z
    np.vdot(a, b)
    c                     d }|j         dk    s|j         dk    rt          d          |j        |j        k    rt          d          t          |j        ||          |fS )Nc                     t                       t          | |||          5 \  }}t          | |||d          cd d d            S # 1 swxY w Y   d S )NT)r   )r-   r   r  )r6   r7   rO   r~   s       r$   codegenz$vdot.<locals>._impl.<locals>.codegen\  s    $WgsDAA Q#d#GWc44PPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Qs   AA	A	r   z&np.vdot() only supported on 1-D arraysz0np.vdot() arguments must all have the same dtype)r"  r   r!   r   )r#  r  r  r0  s       r$   r%  zvdot.<locals>._implZ  sz    Q Q Q yA~~q!"JKKKzU[((!FH H HTZu55w>>r&   ry   4np.vdot() is faster on contiguous arrays, called on c                      | |          S r3   rY   r'  s     r$   r(  zvdot.<locals>.<lambda>p  r)  r&   Nr*  r'  s     @r$   vdotr3  T  s    
 $$$ 6E5;)G)G 6		? 	? 
	?  ;d""el$&>&>MM%==#$;= = = 65555/6 6 6 6r&   c                     | j         \  }|j         \  }}||k    rt          d          |j         |fk    rt          d          d S )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_argsr5  s  sg    	
BAGEBBww : ; ; 	;
yQD ? @ @ 	@ r&   c                     | j         \  }}|j         \  }||k    rt          d          |j         |fk    rt          d          d S )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_argsr7  ~  sg    GEAr	
BABww - . . 	.
yQD ? @ @ 	@ r&   c                    |j         \  }}}||j        k    sJ |j        } t          |          | ||d                   } t          |          | ||d                   }	 t          |          | ||d                   }
t	          j        ||j                  }t	          j        ||	j                  }t	          j        ||
j                  }|j        |j        k     r5|}|}|d         }|d         }|j        dk    }|	j	        |j	        }}t          }n4|}|}|d         }|d         }|j        dk    }|j	        |	j	        }}t          }|                     ||t          t          j        g|j         R  |           |D ]}t!          | ||           |                     t          j        d          }|                    d||          }|                    d||          }|                    ||          }|                    |d          5 \  }}|5  t	          j        ||
j	        |                    |
j        |
j                  d           d	d	d	           n# 1 swxY w Y   |5  t5          | |||||||
j	                   d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   t7          | ||j        |
                                          S )
zE
    np.dot(vector, matrix, out)
    np.dot(matrix, vector, out)
    r   r   r  r   rz   ==Fr   N)r~   r   r!   r   r   r  r   r"  r|   r   r5  r7  r   r   r   r   r   get_constantrI   icmp_signedor_if_elsememsetmulitemsizenitemsr   r   	_getvalue)r6   r7   rO   r~   xtyytyouttyr!   xyr   r   r   r   mtyr   v_shaper   r   r   r   r  r9   zero
both_emptymatrix_emptyis_emptyr   nonemptys                                r$   dot_3_vmrO    s   
 hOCeCO####IE
3$q'22A
3$q'22A
*U

GWd1g
6
6C#GQW55H#GQW55H%gsy99J
x#( 1+qk:$(

 1+qk:$(
Wj&uz=CH===tE E E + +GWc****
A..D$$T7D99J&&tS$77L{{:|44H	%	0	0 *4EUH 	E 	EN7CH";;s|SZ@@!E E E	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E  	* 	*(C6* * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*	* * * * * * * * * * * * * * * Wgs ]]__. . .sZ   
J#;IJ#I	J#I	J#$J J#J	J#J	J##J'*J'c                 ^	   |j         \  }}}||j        k    sJ |j        } t          |          | ||d                   } t          |          | ||d                   }	 t          |          | ||d                   }
t	          j        ||j                  }t	          j        ||	j                  }t	          j        ||
j                  }|\  }}|\  }}|j        dk    sJ d }|                     ||t          t          j        g|j         R  |           t          | ||           t          | ||           t          | ||           |j        }|	j        }|
j        }|                     t          j        d          }|                    d||          }|                    d||          }|                    d||          }|                    ||                    ||                    }|                    |d          5 \  }}|5  t	          j        ||
j        |                    |
j        |
j                  d           d	d	d	           n# 1 swxY w Y   |5  |                     t          j        d          }|                    d||          }|                    d||          }|                    |          5 \  } }!| 5  |                    |          5 \  }"}#|"5  t/          | |d|||||           d	d	d	           n# 1 swxY w Y   |#5  |j        |j        k    }$t1          | ||$|||||           d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   |!5  |                    |          5 \  }%}&|%5  |j        |j        k    }$t1          | ||$|||||           d	d	d	           n# 1 swxY w Y   |&5  t3          | ||||||||||           d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   t5          | ||j        |
                                          S )
z%
    np.dot(matrix, matrix, out)
    r   r   r  rz   c                     | j         \  }}|j         \  }}||k    rt          d          |j         ||fk    rt          d          d S )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  zdot_3_mm.<locals>.check_args  sl    w1A77 1 2 2 29A C D D D r&   r9  Fr   N)r~   r   r!   r   r   r  r   r|   r   r   r   r   r   r   r:  rI   r;  r<  r=  r>  r?  r@  rA  r   r   r   r   rB  )'r6   r7   rO   r~   rC  rD  rE  r!   rF  rG  r   r   r   r   r   r   r   r   r  r   r   r   rJ  rK  x_emptyy_emptyrM  r   rN  oneis_left_vecis_right_vecr_vecr_matv_vm_vr   v_mm_ms'                                          r$   dot_3_mmr]    s    hOCeCO####IE
3$q'22A
3$q'22A
*U

GWd1g
6
6C#GQW55H#GQW55H%gsy99JDAqEB <3D D D Wj&uz=CH===tE E E !$$$!$$$!$$$VFVFxH 
A..D$$T1d33J!!$400G!!$400G{{:w{{7G'D'DEEH	%	0	0 $E4EUH 	E 	EN7CH";;s|SZ@@!E E E	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E   	E  	E &&uz155C!--dAs;;K"..tQ<<L.. E.5% 
Q 
Q 55 	Q#s  D D&w'(&&(D D DD D D D D D D D D D D D D D D ! Q Q'*zU\'AH'((+XvvxQ Q QQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q  E E 55 E#s  Q Q'*zU\'AH'((+XvvxQ Q QQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q
 ! E E'(+Xv(+Xv(-z8E E EE E E E E E E E E E E E E E EE E E E E E E E E E E E E E EE E E E E E E E E E E E E E EE E E E E E E E E E E E E E E 	E  	E  	E  	E  	E  	E  	E  	E  	E  	E  	E  	E  	E  	E  	E	$E $E $E $E $E $E $E $E $E $E $E $E $E $E $EL Wgs ]]__. . .s  Q;;I	Q;I	Q;I	Q;"A$Q$QM9	"M"(L?M"LM"LM"'M?M"MM"MM"M9	"M&&M9	)M&*M9	-Q9M==Q M=QP6	P"'O	POPOP"P<PPPPPP6	P##P6	&P#'P6	*Q6P::Q=P:>QQ$QQ$QQ$Q;$Q(	(Q;+Q(	,Q;;Q?Q?c                 J   t          | t          j                  rt          |t          j                  rkt          |t          j                  rSt          d             | j        dvs|j        dvs	|j        dvrt          j        d| |ft                     fdS dS dS dS )z
    np.dot(a, b, out)
    c                     d }|j         |j         k    s|j         |j         k    rt          d          t          ||||          |fS )Nc                 d   t                       t          | |||          5 \  }}t          d |j        d d         D                       }|dhk    rt	          | |||          cd d d            S |ddhk    rt          | |||          cd d d            S t          d          # 1 swxY w Y   d S )Nc              3   $   K   | ]}|j         V  d S r3   r"  ).0rF  s     r$   	<genexpr>z8dot_3.<locals>._impl.<locals>.codegen.<locals>.<genexpr>)  s$      ==1======r&   r  r   r  )r-   r   setr~   r]  rO  r  r  s        r$   r0  z%dot_3.<locals>._impl.<locals>.codegen$  s$   $WgsDAA < FLcFJ==!=====E||'#tDD	< < < < < < < <
 1a&'#tDD< < < < < < < < -];;;< < < < < < < < < <s   AB%0B%B%%B),B)z/np.dot() arguments must all have the same dtype)r!   r   r   )r#  r  r  r   r0  s        r$   r%  zdot_3.<locals>._impl"  sc    < < < zU[((DJ#),C,C!EG G G S$s33W<<r&   ry   r1  c                      | ||          S r3   rY   r  r  r   r%  s      r$   r(  zdot_3.<locals>.<lambda><  s    dE3(?(? r&   Nr*  rg  s      @r$   dot_3rh    s    
 	4%% @*UEK*H*H @sEK((@		= 	= 
	=& ;d""el$&>&>#*C CMM%==#$;= = = @????9@ @ @ @ @ @r&   numba_fatal_errorc                     t          j        |           D ]G}t          j        |                                          st           j                            d          Hd S )Nz$Array must not contain infs or NaNs.)r   nditerisfiniteitemlinalgLinAlgError)r   vs     r$   _check_finite_matrixrq  E  s_    Yq\\ 8 8{16688$$ 	8)''68 8 8	88 8r&   Tc                    |rdnd}||f}t          | t          j                  r| j        } t          | t          j                  sd|z  }t          |d          | j        dk    sd|z  }t          |d          t          | j        t          j        t          j	        f          sd|z  }t          |d          d S )	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   r"  r!   FloatComplex)r   r"   	la_prefixprefixinterpmsgs         r$   _check_linalg_matrixr  M  s     &/[[4Fi F!U^$$ Fa%% 36?#E22226Q;;5>#E2222agU];<< 3(*01#E22223 3r&   c                 |    |d         j         }|dd          D ]#}|j         |k    rd| z  }t          |d          $d S )Nr   r   zAnp.linalg.%s() only supports inputs that have homogeneous dtypes.Frt  )r!   r   )r"   r   t0r   r~  s        r$   _check_homogeneous_typesr  b  s\    	qB122Y 7 77b==UXaaCc6666 7 7r&   c                      d S r3   rY   rY   r&   r$   _copy_to_fortran_orderr  j  s    Dr&   c                 B    | j         dk    | j         dk    fd}|S )Nr   Ac                     rt          j        |           }nXrB| j        j        }|rt          j        | j                  j        }n)t          j        |           }nt          j        |           }|S r3   )r   r   flagsf_contiguousTasfortranarray)r   acpyflag_fA_layoutF_layouts      r$   r   z&ol_copy_to_fortran_order.<locals>.implt  st     	(71::DD 	(W)F , wqs||~ (++ $Q''Dr&   r{   )r   r   r  r  s     @@r$   ol_copy_to_fortran_orderr  n  sA     x3Hx3H     & Kr&   c                     | dk    r;| dk     rt                       J | dk    r!t          j                            d          d S d S )Nr   z(Matrix is singular to machine precision.)fatal_error_funcr   rn  ro  rs    r$   _inv_err_handlerr    sY    Avvq55Hq55)'':< < < v 5r&   c                     | d         S )zFpass a list of variables to be preserved through dead code eliminationr   rY   r   s    r$   _dummy_liveness_funcr    s     Q4Kr&   c                 2   t                       t          | d           t                                          | j                  t                                          | j                  t          t          | j        d                    fd}|S )Ninvc                    | j         d         }| j         d         |k    r!d}t          j                            |          t	          |            t          |           }|dk    r|S t          j        |t                    } |||j        ||j                  }t          |            ||j        ||j                  }t          |           t          |j        |j        g           |S )N.Last 2 dimensions of the array must be square.r   r!   )r   r   rn  ro  rq  r  r   F_INT_nptypectypesr  r  size)	r   r   r~  r  ipivr  r#   r^   numba_xxgetris	         r$   inv_implzinv_impl.<locals>.inv_impl  s    GBK72;!BC)'',,,Q%a((66Kx...M$1dk1dkBBM$4;4;?? 	di3444r&   )r1   r  r[   r^   r!   rb   r   r%   )r   r  r#   r^   r  s     @@@r$   r  r    s    OOOE"""II++AG44MII..qw77M}QWe,,--D      2 Or&   c                 l    | dk    r+| dk     rt                       J | dk    rt          d          d S d S )Nr   z&Internal algorithm failed to converge.)r  r  r  s    r$   %_handle_err_maybe_convergence_problemr    sK    Avvq55Hq55EFFF v 5r&   c                 &   |rdnd}||f}t          | t          j                  st          d|z            | j        dk    st          d|z            t          | j        t          j        t          j        f          st          d|z            d S )Nrs  r   z'%s.%s() only supported for array types r  +%s.%s() only supported on 1 and 2-D arrays rv  )r   r   r   r   r"  r!   ry  rz  r   r"   r{  r|  r}  s        r$   _check_linalg_1_or_2d_matrixr    s     &/[[4Fi Fa%% $C"# $ $ 	$6Q;;G"# $ $ 	$agU];<< @ 68>? @ @ 	@@ @r&   c                 "   t                       t          | d           t                                          | j                  t          t          | j        d                    t          d          t          d          }fd}|S )NcholeskyULc                    | j         d         }| j         d         |k    r!d}t          j                            |          |                                 }|dk    r|S  ||j        |          }|dk    r;|dk     rt                       J |dk    rt          j                            d          t          |          D ]}d|d ||f<   |S )Nr  r  r  r   z Matrix is not positive definite.)r   r   rn  ro  r   r  r  range)	r   r   r~  r   r  colUPr#   rk   s	         r$   cho_implzcho_impl.<locals>.cho_impl  s    GBK72;!BC)'',,, ffhh66J M$Asz155661uu """1uui++68 8 8 88 	 	CCc	NN
r&   )r1   r  r[   rk   r!   r   r%   )r   LOr  r  r#   rk   s      @@@r$   r  r    s    OOOJ'''II++AG44M}QWj1122D	SB	SB      < Or&   c                    t                       t          | d           t                                          | j                  t                                          | j                  t          t          | j        d                    t          d          t          d          fd}fd}t          | j        t          j
        j                  r|S |S )NeigNVc                    | j         d         }| j         d         |k    r!d}t          j                            |          t	          |            t          |           }d}|}t          j        || j                  }t          j        || j                  }t          j        ||f| j                  }t          j        ||f| j                  }	|dk    r	||	j        fS  ||j	        ||j	        |j	        |j	        ||	j	        |          }
t          |
           t          j        |          rt          d          t          |j        |j        |	j        |j        |j        g           ||	j        fS )z7
        eig() implementation for real arrays.
        r  r  r  r   r  r   z.eig() argument must not cause a domain change.)r   r   rn  ro  rq  r  r   r!   r  r  r  anyr  r  r  r   r   r~  r  ldvlldvrwrwivlvrr  JOBVLJOBVRr#   rd   s              r$   real_eig_implzeig_impl.<locals>.real_eig_impl  s    GBK72;!BC)'',,,Q%a((Xaqw'''Xaqw'''Xq$iqw///Xq$iqw///66:N4!! KIII I " " 	.a000 6":: 	B@B B B
 	di"'27BGLMMMBDzr&   c                 ^   | j         d         }| j         d         |k    r!d}t          j                            |          t	          |            t          |           }d}|}t          j        || j                  }t          j        ||f| j                  }t          j        ||f| j                  }|dk    r	||j        fS  
||j	        ||j	        |j	        ||j	        |          }	t          |	           t          |j        |j        |j        |j        g           ||j        fS )z:
        eig() implementation for complex arrays.
        r  r  r  r   r  r   )r   r   rn  ro  rq  r  r   r!   r  r  r  r  r  r   r   r~  r  r  r  wr  r  r  r  r  r#   rf   s             r$   cmplx_eig_implz eig_impl.<locals>.cmplx_eig_implP  s6    GBK72;!BC)'',,,Q%a((HQag&&&Xq$iqw///Xq$iqw///66rt9N4!! KHI I 
" 
" 	.a000 	di"'16BCCC24yr&   r1   r  r[   rd   r!   rf   r   r%   r   r   scalarsrz  )r   r  r  r  r  r#   rf   rd   s      @@@@@r$   eig_implr  
  s    OOOE"""YY--ag66NYY--ag66N}QWe,,--DHHEHHE6 6 6 6 6 6 6 6p& & & & & & & &P !'5=011 r&   c                    t                       t          | d           t                                          | j                  t                                          | j                  t          t          | j        d                    t          d          t          d          fd}fd}t          | j        t          j
        j                  r|S |S )Neigvalsr  c                    | j         d         }| j         d         |k    r!d}t          j                            |          t	          |            t          |           }d}d}t          j        || j                  }|dk    r|S t          j        || j                  }t          j        d| j                  }t          j        d| j                  }	 ||j        ||j        |j        |j        ||	j        |          }
t          |
           t          j
        |          rt          d          t          |j        |j        |	j        |j        |j        g           |S )z;
        eigvals() implementation for real arrays.
        r  r  r  r   r  r   z2eigvals() argument must not cause a domain change.)r   r   rn  ro  rq  r  r   r!   r  r  r  r  r  r  r  s              r$   real_eigvals_implz'eigvals_impl.<locals>.real_eigvals_impl  sl    GBK72;!BC)'',,,Q%a((Xaqw'''66IXaqw''' Xq)))Xq)))N4!! KIII I " " 	.a000 6":: 	FDF F F
 	di"'27BGLMMM	r&   c                 :   | j         d         }| j         d         |k    r!d}t          j                            |          t	          |            t          |           }d}d}t          j        || j                  }|dk    r|S t          j        d| j                  }t          j        d| j                  } 
||j        ||j        |j        ||j        |          }	t          |	           t          |j        |j        |j        |j        g           |S )z>
        eigvals() implementation for complex arrays.
        r  r  r  r   r  r   )r   r   rn  ro  rq  r  r   r!   r  r  r  r  r  s             r$   cmplx_eigvals_implz(eigvals_impl.<locals>.cmplx_eigvals_impl  s     GBK72;!BC)'',,,Q%a((HQag&&&66HXq)))Xq)))N4!! KHI I 
" 
" 	.a000 	di"'16BCCCr&   r  )r   r  r  r  r  r#   rf   rd   s      @@@@@r$   eigvals_implr  }  s    OOOI&&&YY--ag66NYY--ag66N}QWi0011DHHEHHE9 9 9 9 9 9 9 9v' ' ' ' ' ' ' 'R !'5=011 !!!  r&   c                    t                       t          | d           t          | j        d| j                  }t	          j        |          t                                          | j                  t          t          | j        d                    t          d          t          d          fd}|S )NeighrC   r  r  c           	         | j         d         }| j         d         |k    r!d}t          j                            |          t	          |            t          |           }t          j        |
          }|dk    r||fS  	||j        ||j                  }t          |           t          |j
        |j
        g           ||fS Nr  r  r  r  r   r   r   rn  ro  rq  r  r   r  r  r  r  r   r   r~  r  r  r  JOBZUPLOr#   rh   w_dtypes         r$   	eigh_implzeigh_impl.<locals>.eigh_impl  s    GBK72;!BC)'',,,Q%a((HQg&&&66t9OD   KH  	.a000 	di01114yr&   
r1   r  rF   r!   
np_supportas_dtyper[   rh   r   r%   )r   w_typer  r  r  r#   rh   r  s      @@@@@r$   r  r    s    OOOF### QW0!'::F!&))Gii//88O}QWf--..Ds88Ds88D        < r&   c                    t                       t          | d           t          | j        d| j                  }t	          j        |          t                                          | j                  t          t          | j        d                    t          d          t          d          fd}|S )NeigvalshrC   r  r  c           	         | j         d         }| j         d         |k    r!d}t          j                            |          t	          |            t          |           }t          j        |
          }|dk    r|S  	||j        ||j                  }t          |           t          |j
        |j
        g           |S r  r  r  s         r$   eigvalsh_implz$eigvalsh_impl.<locals>.eigvalsh_impl6  s    GBK72;!BC)'',,,Q%a((HQg&&&66HOD   KH  	.a000 	di0111r&   r  )r   r  r  r  r  r#   rh   r  s      @@@@@r$   r  r  %  s    OOOJ''' QW0!'::F!&))Gii//88O}QWj1122Ds88Ds88D        < r&   c                    t                       t          | d           t          | j        d| j                  }t	          j        |          t                                          | j                  t          t          | j        d                    t          d          t          d          dfd	}|S )NsvdrC   r  Sr   c                    | j         d         }| j         d         }|dk    s|dk    rt          j                            d          t	          |            t          |           }|}t          ||          }|r}|}|}	n}|}|}	t          j        ||f| j                  }
t          j        |          }t          j        ||	f| j                  } ||||j	        ||j	        |
j	        ||j	        |	          }t          |           t          |j        |j        |
j        |j        g           |
j        ||j        fS )Nr  r  r   Arrays cannot be emptyr  )r   r   rn  ro  rq  r  minr   r!   r  r  r  r  r  )r   full_matricesr   r   r  lduminmnr  ucolldvtur   vtr  JOBZ_AJOBZ_Sr#   rm   s_dtypes                 r$   svd_implzsvd_impl.<locals>.svd_implg  sY   GBKGBK66Q!VV)''(@AAAQ%a((Aq		 	DDDDDDDHdC[000HU'***Xq$iqw///NKHHI
 
 	.a000 	di!&!&ABBBQ~r&   r   )
r1   r  rF   r!   r  r  r[   rm   r   r%   )	r   r  s_typer  r  r  r#   rm   r  s	       @@@@@r$   r  r  V  s    OOOE""" QW0!'::F!&))GYY--ag66N}QWe,,--DXXFXXF, , , , , , , , , ,\ Or&   c                 2   t                       t          | d           t                                          | j                  t                                          | j                  t          t          | j        d                    fd}|S )Nqrc           	      F   | j         d         }| j         d         }|dk    s|dk    rt          j                            d          t	          |            t          |           }|}t          ||          }t          j        || j                  } |||j	        ||j	                  }|dk     rt                       J t          j        ||f| j                  j        }t          |          D ]&}	t          |	dz             D ]}
||
|	f         ||
|	f<   't          ||          D ]#}	t          |          D ]}
||
|	f         ||
|	f<   $ ||||j	        ||j	                  }t          |           t          |j        |j        g           |d d d |f         |fS )Nr  r  r   r  r  r   )r   r   rn  ro  rq  r  r  r   r!   r  r  r   r  r  r  r  r  )r   r   r   qr   r  tauretr  ijr#   rp   rr   s              r$   qr_implzqr_impl.<locals>.qr_impl  s   GBKGBK66Q!VV)''(@AAAQ #1%%Aq		hag...nHJ
 
 77H HaZqw///1 u 	" 	"A1q5\\ " "AqD'!Q$" ua 	" 	"A5\\ " "AqD'!Q$" nHJ
 
 	.c222 	ch/000!!!VeV)a  r&   )r1   r  r[   rp   r!   rr   r   r%   )r   r  r#   rp   rr   s     @@@r$   r  r    s    OOOD!!! YY--ag66NYY--ag66N}QWd++,,D7! 7! 7! 7! 7! 7! 7!r Nr&   c                     t           )z;
    Correctly copy 'b' into the 'bcpy' scratch space.
    NotImplementedErrorbcpyr   nrhss      r$   _system_copy_in_br    
     r&   c                 ,    |j         dk    rd }|S d }|S )Nr   c                 .    || d |j         d         df<   d S )Nr  r   r   r  s      r$   	oneD_implz)_system_copy_in_b_impl.<locals>.oneD_impl  s     $%D!'"+q!!!r&   c                 2    || d |j         d         d |f<   d S )Nr  r  r  s      r$   	twoD_implz)_system_copy_in_b_impl.<locals>.twoD_impl  s%    ()D!'"+uu$%%%r&   rb  )r  r   r  r  r  s        r$   _system_copy_in_b_implr    s7    v{{	& 	& 	&	* 	* 	*r&   c                     t           )zK
    Compute the number of right hand sides in the system of equations
    r  r   s    r$   _system_compute_nrhsr    r	  r&   c                 ,    | j         dk    rd }|S d }|S )Nr   c                     dS Nr   rY   r  s    r$   r  z,_system_compute_nrhs_impl.<locals>.oneD_impl  s    1r&   c                     | j         d         S )Nr  r  r  s    r$   r  z,_system_compute_nrhs_impl.<locals>.twoD_impl
  s    72;r&   rb  )r   r  r  s      r$   _system_compute_nrhs_implr    s7    v{{	 	 		 	 	r&   c                     t           )zD
    Check that AX=B style system input is dimensionally valid.
    r  r   r   s     r$   !_system_check_dimensionally_validr    r	  r&   c                 0    |j         }|dk    rd }|S d }|S )Nr   c                     | j         d         }|j         d         }||k    rt          j                            d          d S )Nr  r  <Incompatible array sizes, system is not dimensionally valid.r   r   rn  ro  r   r   ambms       r$   r  z9_system_check_dimensionally_valid_impl.<locals>.oneD_impl  H    BBRxxi++RT T T xr&   c                     | j         d         }|j         d         }||k    rt          j                            d          d S )Nr  r  r  r   s       r$   r  z9_system_check_dimensionally_valid_impl.<locals>.twoD_impl"  r#  r&   rb  r   r   r"  r  r  s        r$   &_system_check_dimensionally_valid_implr&    sF    6Dqyy	T 	T 	T 	T 	T 	T r&   c                     t           )z:
    Check that AX=B style system input is not empty.
    r  r  s     r$   _system_check_non_emptyr(  +  r	  r&   c                 0    |j         }|dk    rd }|S d }|S )Nr   c                     | j         d         }| j         d         }|j         d         }|dk    s|dk    s|dk    rt          j                            d          d S Nr  r  r   r  r  )r   r   r!  anr"  s        r$   r  z/_system_check_non_empty_impl.<locals>.oneD_impl6  sZ    BBBQww"''R1WWi++,DEEE &-Wr&   c                     | j         d         }| j         d         }|j         d         }|j         d         }|dk    s|dk    s|dk    s|dk    rt          j                            d          d S r+  r  )r   r   r!  r,  r"  bns         r$   r  z/_system_check_non_empty_impl.<locals>.twoD_impl>  sm    BBBBQww"''R1WWai++,DEEE 18r&   rb  r%  s        r$   _system_check_non_empty_implr/  2  sF    6Dqyy	F 	F 	F 	F 	F 	F r&   c                     t           )z:
    Compute the residual from the 'b' scratch space.
    r  )r   r   r  s      r$   _lstsq_residualr1  H  r	  r&   c                 "   | j         }| j        }t          j        t	          |d|                    |dk    r(t          |t          j                  rfd}|S fd}|S |dk    sJ t          |t          j                  rfd}|S fd}|S )NrC   r   c                     t          j        d          }t          j        t          j        | |d df                   dz            |d<   |S Nr  r  r   r  )r   r   sumabsr   r   r  r   
real_dtypes       r$   
cmplx_implz(_lstsq_residual_impl.<locals>.cmplx_implW  sJ    ht:666qQx 0 0! 344A
r&   c                 |    t          j        d          }t          j        | |d df         dz            |d<   |S r4  )r   r   r5  r7  s       r$   	real_implz'_lstsq_residual_impl.<locals>.real_impl]  s?    ht:666!""a%!,,A
r&   r  c                     t          j        |          }t          |          D ]8}t          j        t          j        | |d |f                   dz            ||<   9|S Nr  r  )r   r   r  r5  r6  r   r   r  r   r   r8  s        r$   r9  z(_lstsq_residual_impl.<locals>.cmplx_imple  sa    hZ888t 9 9AVBF1QRRU8$4$4a$788CFF
r&   c                     t          j        |          }t          |          D ]&}t          j        | |d |f         dz            ||<   '|S r=  )r   r   r  r5  r>  s        r$   r;  z'_lstsq_residual_impl.<locals>.real_impll  sV    hZ888t 1 1AVAabb!eHaK00CFF
r&   )r"  r!   r  r  rF   r   r   rz  )r   r   r  r"  r!   r9  r;  r8  s          @r$   _lstsq_residual_implr@  O  s    6DGE$WU4F%N%NOOJqyyeem-- 	          qyyyyeem-- 	    
     
 r&   c                     t           )z
    Extract 'x' (the lstsq solution) from the 'bcpy' scratch space.
    Note 'b' is only used to check the system input dimension...
    r  r   r  r   s      r$   _lstsq_solutionrC  t  
    
 r&   c                 ,    | j         dk    rd }|S d }|S )Nr   c                 D    |j                                         d |         S r3   r  ravelrB  s      r$   r  z'_lstsq_solution_impl.<locals>.oneD_impl  s    6<<>>"1"%%r&   c                 B    |d |d d f                                          S r3   r   rB  s      r$   r  z'_lstsq_solution_impl.<locals>.twoD_impl  s$    AAA;##%%%r&   rb  )r   r  r   r  r  s        r$   _lstsq_solution_implrK  |  s7    v{{	& 	& 	&	& 	& 	&r&         c                   	 t                       t          | d           t          |d           t          d| |           t	          j        | j                  | j        }t          |d|          }t	          j        |          	t                      	                    | j                  t          t          |d                    d	fd	}|S )NlstsqrC   rL  c                 l   | j         d         }| j         d         }t          |          }t          |            t          |           t          | |           t	          | |           t          ||          }t          ||          }t          |           }t          j	        ||f          j
        }	t          |	||           t          j	        |          }
t          j	        dt          j                  } ||||j        ||	j        ||
j        ||j                  }t          |           |d         }||k     s||k    rt          j	        d          }nt          |	||          }t!          ||	|          }t#          |j        |	j        |
j        |j        g           ||||
d |         fS )Nr  r  r  r   r   )r   r  rq  r(  r  r  maxr  r   r   r  r  int32r  r  r1  rC  r  r  )r   r   rcondr   r   r  r  maxmnr  r  r   rank_ptrr  rankr   rF  r#   np_dtrt   r8  s                   r$   
lstsq_implzlstsq_impl.<locals>.lstsq_impl  s   GBKGBK#A&& 	QQ 	 1%%% 	*!Q///Aq		Aq		 &a(( xuU3335$4((( HU*---8ARX...NKKHO
 
 	.a000 { !88qAvv(Aj111CC "$400C AtQ'' 	diAFHMJKKK3ai((r&   rL  )r1   r  r  r  r  r  r!   rF   r[   rt   r   r%   )
r   r   rR  nb_dtr_typerW  r#   rV  rt   r8  s
         @@@@r$   rW  rW    s    OOOG$$$ !G,,,Wa+++((EGE U.66F$V,,J YY--ag66N}UG,,--D=) =) =) =) =) =) =) =) =)~ r&   c                     t           )z
    Extract 'x' (the solution) from the 'bcpy' scratch space.
    Note 'b' is only used to check the system input dimension...
    r  r   r  s     r$   _solve_compute_returnr]    rD  r&   c                 ,    | j         dk    rd }|S d }|S )Nr   c                 4    |j                                         S r3   rG  r\  s     r$   r  z-_solve_compute_return_impl.<locals>.oneD_impl  s    6<<>>!r&   c                     |S r3   rY   r\  s     r$   r  z-_solve_compute_return_impl.<locals>.twoD_impl  s    Kr&   rb  )r   r  r  r  s       r$   _solve_compute_return_implra    s7    v{{	" 	" 	"	 	 	r&   c                 ^   t                       t          | d           t          |d           t          d| |           t	          j        | j                  | j        }t                                          | j                  t          t          |d                    fd}|S )Nsolvec           
      6   | j         d         }t          |          }t          |            t          |           t          | |           t	          |           }t          j        ||f	          j        }|dk    rt          ||          S t          |||           t          j        |t                    } 
|||j        ||j        |j        |          }t          |           t          |j        |j        |j        g           t          ||          S )Nr  r  r   )r   r  rq  r  r  r   r   r  r]  r  r  r  r  r  r  )r   r   r   r  r  r  r  r  r#   rV  rw   s           r$   
solve_implzsolve_impl.<locals>.solve_impl  s&   GBK#A&& 	QQ 	*!Q/// &a(( xq	///166(D111 	$4((( x...KKKK	
 	
 	 	diDI>???$Q---r&   )r1   r  r  r  r  r  r!   r[   rw   r   r%   )r   r   rY  re  r#   rV  rw   s       @@@r$   re  re    s    OOOG$$$ G,,,Wa+++((EGE ))''00K}UG,,--D'. '. '. '. '. '. '.R r&   V瞯<c           
        	
 t                       t          | d           t          | j        d| j                  }t	          j        |          t                                          | j                  	t                      	                    | j                  
t          t          | j        d                    t          d          t          d          t          d          t	          j        | j                  }t          j        dg|          t          j        dg|          d
	
f	d		}|S )NpinvrC   r  rz   r   r  r   rf  c                   	 | j         d         }| j         d         }t          |            t          |           }|dk    s|dk    r6|j                                                            | j                   j        S t          ||          }t          j        ||f| j	                  }t          j        |          }t          j        ||f| j	                  } |||j
        ||j
        |j
        ||j
        |          }	t          |	           |d         |z  }
d}t          |          D ]}||         |
k    rd||         z  ||<   |}|dz  }||k    r=t          |          D ],}t          |          D ]}|||f         ||         z  |||f<   -n>t          |          D ].}||         }t          |          D ]}|||f         |z  |||f<   / |||j
        |j
        ||j
        |j
        |j
        |          }	t          |j        |j        |j        |j        j        j        g           |j                                                            | j                   j        S )Nr  r  r   r  r   r   )r   rq  r  r  rH  reshaper  r   r   r!   r  r  r  r  r  )r   rR  r   r   r  r  r  r   r  r  cut_atcut_idxr   r  r   s_localJOBTRANSATRANSBr#   rm   rQ   rT  r  rJ  s                   r$   	pinv_implzpinv_impl.<locals>.pinv_implR  s   N GBKGBKQ%a((66Q!VV6<<>>))!'2244Aq		HeQZqw///HU'***Xq%j000NKHHI
 
 	.a000 1u 	 	Atf}}AaDy!1 661XX / /w / /A!!Q$x!A$Bq!tHH//
 7^^ 0 0A$u 0 0A1g/AadGG0 LJIHKK
 
0 	di!&!&#(I 	 	 	v||~~%%ag..00r&   rf  )r1   r  rF   r!   r  r  r[   rm   r=   rQ   r   r%   r   array)r   rR  r  dtrq  rn  ro  rp  r#   rm   rQ   rT  r  rJ  s        @@@@@@@@@r$   rq  rq  8  sW   OOOF### QW0!'::F!&))GYY--ag66N77''00L}QWf--..D
c((C XXFXXF 
	QW	%	%B8RD###D
(B4r
"
"
"CE1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1 E1N r&   c                     t          | j        t          j                  rt          d             }|S t          d             }|S )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                     |dz   }d}t          |           D ]E}t          j        |||f                   }||||f         |z  z  }|t          j        |          z   }F||fS )Ny                r   )r  r   r6  log)r   r   sgncsgnaccr   absels          r$   cmplx_diag_walkerz3_get_slogdet_diag_walker.<locals>.cmplx_diag_walker  sp     9DC1XX * *qAwqAw/BF5MM)#;r&   c                     d}t          |           D ]/}|||f         }|dk     r| }| }|t          j        |          z   }0|dz   |fS )Nr   )r  r   rw  )r   r   rx  rz  r   rp  s         r$   real_diag_walkerz2_get_slogdet_diag_walker.<locals>.real_diag_walker  sc     C1XX & &adGr66$CABF1IIo"Hc?"r&   )r   r!   r   rz  r   )r   r|  r~  s      r$   _get_slogdet_diag_walkerr    s^     !'5=))  		 	 
		 ! 	
	# 
	# 
	
	#  r&   c                 ~   t                       t          | d           t                                          | j                  t          t          | j        d                    t          |           |                     d           t          | j        d| j                  d          fd}|S )Nslogdetr   rC   r   c                 .   | j         d         }| j         d         |k    r!d}t          j                            |          |dk    r	fS t	          |            t          |           }t          j        |t                    } |||j        ||j                  }|dk    rdt          j	         fS t          |           d}t          |          D ]}|||         |dz   k    z   }|dz  }|dk    rd}t          |j        g            
|||          S )Nr  r  r  r   r  r   r   )r   r   rn  ro  rq  r  r   r  r  infr  r  r  r  )r   r   r~  r  r  r  rx  r   ONEZEROdiag_walkerr#   r^   s           r$   slogdet_implz"slogdet_impl.<locals>.slogdet_impl  s2   GBK72;!BC)'',,,66;Q%a((x...M$1dk1dkBBq55=  q 	- 	-AaQU+,CCAg!88C 	di[))){1dC(((r&   )	r1   r  r[   r^   r!   r   r%   r  rF   )r   r  r  r  r  r#   r^   s     @@@@@r$   r  r     s    OOOI&&&II++AG44M}QWi0011D*1--K
''!**C8717.88;;D') ') ') ') ') ') ') ') ')R r&   c                 H    t                       t          | d           d }|S )Ndetc                 t    t           j                            |           \  }}|t          j        |          z  S r3   )r   rn  r  exp)r   rx  r  s      r$   det_implzdet_impl.<locals>.det_implB  s.    **1--gRVG__$$r&   r1   r  )r   r  s     r$   r  r  ;  s3     OOOE"""% % % Or&   c                     t           )z)
    Compute singular values of *a*.
    r  r  s    r$   _compute_singular_valuesr  I  r	  r&   c                   	 t                                          | j                  t          t	          | j        d                    t          d          t          | j        d| j                  }t          j        |          t          j        | j                  }t          j	        d|          t          j	        d|          		fd}|S )z>
    Returns a function to compute singular values of `a`
    r  r  rC   r  r  c                    | j         d         }| j         d         }|dk    s|dk    rt          j                            d          t	          |            |}t          ||          }d}d}t          |           }t          j        |          } 
|||j        ||j        j        |j        |          }	t          |	           t          |j        j        j        |j        g           |S )z+
        Computes singular values.
        r  r  r   r  r   r  )r   r   rn  ro  rq  r  r  r   r  r  r  r  )r   r   r   r  r  r  r  r  r   r  JOBZ_Nr#   np_ret_typerm   r  r  s             r$   sv_functionz2_compute_singular_values_impl.<locals>.sv_functione  s    GBKGBK66Q!VV)''(@AAAQAq		 %a((
 HU+...NKHHI
 
 	.a000 	di!&!&ABBBr&   )
r[   rm   r!   r   r%   rF   r  r  r   r   )
r   nb_ret_typenp_dtyper  r  r#   r  rm   r  r  s
       @@@@@@r$   _compute_singular_values_implr  P  s    
 YY--ag66N}QWe,,--D XXF!'#5qw??K%k22K"17++H 	x(((A	&	)	)	)B- - - - - - - - - -^ r&   c                     t           )z.
    Compute the L2-norm of 1D-array *a*.
    r  r  s    r$   _oneD_norm_2r    r	  r&   c                    t          | j        d| j                  }t          j        |          t	                                          | j                  t          t          | j        d                    fd}|S )NrC   normc                 6   t          |           }t          j        d          }t          | j        d         | j        z            } || j        ||j                  }|dk     rt                       J t          |j	        | j	        g           |d         S )Nr  r  r   )
lenr   r   r   stridesr@  r  r  r  r  )r   r   r  jmpr  r#   r  xxnrm2s        r$   r   z_oneD_norm_2_impl.<locals>.impl  s     FFht;///!)A,+,,FHJ
 
 q55H
 	ch/0001vr&   )rF   r!   r  r  r=   rD   r   r%   )r   r  r   r#   r  r  s      @@@r$   _oneD_norm_2_implr    s    !'#5qw??K%k22KWW!!!'**F}QWf--..D      0 Kr&   c                   	
 t          | j        d| j                  }t          j        |          }t          j        | j                  }t	                                          | j                  }t          t          | j        d                    }| j        dk    r|d t          j
        fv rdd}ndd}|S | j        dk    r|d t          j
        fv rO| j        dk    rt          d             	n,| j        d	k    rt          d
             	nt          d             	d	fd	}n$t          j        |j                  j        
d
fd	}|S J )NrC   r  r   c                      t          |           S r3   )r  rF  r   s     r$   r  z!_get_norm_impl.<locals>.oneD_impl  s    #A&r&   c                    t          |           }|dk    rdS |dk    rt          |           S |t          j        k    rGt	          | d                   }t          d|          D ]}t	          | |                   }||k    r|} |S |t          j         k    rGt	          | d                   }t          d|          D ]}t	          | |                   }||k     r|} |S |dk    r'd}t          |          D ]}| |         dk    r|dz  }|S |dk    r.d}t          |          D ]}|t	          | |                   z  }|S d}t          |          D ]}|t	          | |                   |z  z  }|d|z  z  S )Nr   r   r  r   r   )r  r  r   r  r6  r  )rF  r   r   r  r   r9   s         r$   r  z!_get_norm_impl.<locals>.oneD_impl  s   FF 663 !88'??*BF]]ad))C"1a[[ & &!!A$ii99"%CJRVG^^ad))C"1a[[ & &!!A$ii99"%CJAXXC"1XX & &Q42::2ICJAXXC"1XX ) )s1Q4yy(J C"1XX . .s1Q4yy#~-c?*r&   r  rz   c                     | S r3   rY   rF  s    r$   array_preparez%_get_norm_impl.<locals>.array_prepare%	  s    Hr&   r   c                     | j         S r3   )r  r  s    r$   r  z%_get_norm_impl.<locals>.array_prepare)	  s     3Jr&   c                 *    |                                  S r3   rJ  r  s    r$   r  z%_get_norm_impl.<locals>.array_prepare.	  s    6688Or&   c                 |    | j         }|dk    rdS  |           }t          |                    |                    S )Nr   r   )r  r  rj  )rF  r   r   x_cr  s       r$   r  z!_get_norm_impl.<locals>.twoD_impl4	  s?    F663#mA&&#CKKNN333r&   c                    | j         d         }| j         d         }| j        dk    rdS |t          j        k    rLd}t	          |          D ]8}d}t	          |          D ]}|t          | ||f                   z  }||k    r|}9|S |t          j         k    rL	}t	          |          D ]8}d}t	          |          D ]}|t          | ||f                   z  }||k     r|}9|S |dk    rLd}t	          |          D ]8}d}t	          |          D ]}|t          | ||f                   z  }||k    r|}9|S |dk    rL	}t	          |          D ]8}d}t	          |          D ]}|t          | ||f                   z  }||k     r|}9|S |dk    rt          |           d         S |dk    rt          |           d         S t          d          )Nr  r  r   r   r   r  z Invalid norm order for matrices.)r   r  r   r  r  r6  r  r  )
rF  r   r   r   
global_maxiitmpjj
global_minmax_vals
            r$   r  z!_get_norm_impl.<locals>.twoD_impl?	  s<   GBKGBK 6Q;;3"&== "$J#Ahh - - "'(( 2 2B3qRy>>1CC++),J%%RVG^^ ")J#Ahh - - "'(( 2 2B3qRy>>1CC++),J%%AXX "$J#Ahh - - "'(( 2 2B3qRy>>1CC++),J%%BYY ")J#Ahh - - "'(( 2 2B3qRy>>1CC++),J%% AXX3A66q99BYY3A66r:: %%GHHHr&   r   r3   )rF   r!   r  r  r=   rD   r   r%   r"  r   r   r|   r   r   finforx  rP  )rF  ord_flagr  r  r  r  r#   r  r  r  r  s            @@r$   _get_norm_implr    s    !'#5qw??K%k22K"17++HWW!!!'**F}QWf--..Dv{{ ej)))' ' ' ' '8+ 8+ 8+ 8+r 	
1 ej))) x3!  "! S!  "!  "$ $ "!$
4 4 4 4 4 4 4 h{/004GDI DI DI DI DI DIJ r&   c                 ^    t                       t          | d           t          | |          S )Nr  )r1   r  r  r  s     r$   	norm_implr  	  s+    OOO F+++!S!!!r&   c                 J    t                       t          | d           dd}|S )Ncondc                    |dk    s|dk    s|[t          |           }|dk    s|"t          j        |d         |d                   }nt          j        |d         |d                   }nbt          j                            | |          }t          j                            t          j                            |           |          }||z  }t          j        |          rt          j        S |S )Nr  r  r   r  )r  r   dividern  r  r  isnanr  )rF  pr   r  norm_x
norm_inv_xs         r$   r   zcond_impl.<locals>.impl	  s    & 66Q"WW	(++AAvvIadAbE**IaeQqT**Y^^Aq))F	a(8(8!<<J#A 8A;; 	6MHr&   r3   r  )rF  r  r   s      r$   	cond_implr  	  s7    OOOF#### # # #H Kr&   c                 l    d}t          t          |                     D ]}| |         |k    r|dz   } |S )zJ
    Gets rank from singular values with cut-off at a given tolerance
    r   r   r  r  )svr   rU  r   s       r$   _get_rank_from_singular_valuesr  	  sD    
 D3r77^^  a5199!8DDKr&   c                 h    t                       t          | d           d fd} || |          S )ah  
    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                     |d t           j        fv rPt          | j        d| j                  }t	          j        |          }t          j        |          j        dfd	}|S dd}|S )NrC   c                     t          |           }| j        d         }| j        d         }t          ||          }|d         |z  z  }t          ||          S )Nr   r   )r  r   rP  r  )r  tolr   r  r   lr   eps_vals          r$   _2d_tol_none_implzImatrix_rank_impl.<locals>._2d_matrix_rank_impl.<locals>._2d_tol_none_impl	  sU    ,Q//GAJGAJ1IIaD1Hw&5a;;;r&   c                 @    t          |           }t          ||          S r3   )r  r  )r  r  r   s      r$   _2d_tol_not_none_implzMmatrix_rank_impl.<locals>._2d_matrix_rank_impl.<locals>._2d_tol_not_none_impl	  s    ,Q//5a===r&   r3   )	r   r   rF   r!   r  r  r   r  eps)r  r  nb_typenp_typer  r  r  s         @r$   _2d_matrix_rank_implz.matrix_rank_impl.<locals>._2d_matrix_rank_impl	  s     4$$$ag'917CCG )'22Ghw''+G< < < < < < %$> > > > )(r&   c                 R    | j         }|dk    rdd}|S |dk    r | |          S J )Nr   c                 b    t          t          |                     D ]}| |         dk    r dS dS )Nr   r   r   r  )r  r  r   s      r$   _1d_matrix_rank_implzMmatrix_rank_impl.<locals>._get_matrix_rank_impl.<locals>._1d_matrix_rank_impl
  s;    s1vv ! !Atrzz qq "qr&   r  r   r3   rb  )r  r  r"  r  r  s       r$   _get_matrix_rank_implz/matrix_rank_impl.<locals>._get_matrix_rank_impl	  sP    v199   
 ('QYY''3///Hr&   )r1   r  )r  r  r  r  s      @r$   matrix_rank_implr  	  s[     OOO M222) ) ).    4 ! C(((r&   c                     t          | d           t          j        | j                  t	          |d|          }t          |t          j                  st          d          fd}|S )zL
    Computes matrix power. Only integer powers are supported in numpy.
    matrix_powerr!   zExponent must be an integer.c                 &   |dk    rAt          j        | j        
          }t          | j        d                   D ]	}d|||f<   
|S | j        d         | j        d         }}||k    rt	          d          |dk    r|                                 S |dk     r=t           j                            |                                           }|dk    r|S | }n|dk    r|                                 S | }|dk     rK|d	k    rt          j        ||          S |d
k    r(t          j        t          j        ||          |          S d S |}|}|}d}	|dk    rA|dz  r|	r|}d}	nt          j        ||          }t          j        ||          }|dz	  }|dk    A|S )Nr   r  r   r  r  zinput must be a square arrayr      r     TF)	r   r   r   r  r  r   rn  r  r   )r   r   r  r   r!  r,  rz  r  r  flagr  s             r$   matrix_power_implz,matrix_power_impl.<locals>.matrix_power_impl
  s   66 111A171:&&  !Q$HagbkB88;<<< 776688O q55	a  %%''ABwwAAAvvvvxxAq55Avvva||#AvvvbfQllA... v CC C D((7 / /!$ fS#..fS#&&Qh (( Jr&   )	r  r  r  r!   rF   r   r   Integerr   )r   r   ntr  r  s       @r$   r  r  
  s}     N+++"17++H	GQ		Bb%-(( =;<<<= = = = =~ r&   c                     t          | dd           t          |t          t          j        f          st          d|z            dd}|S )z)
    Computes the trace of an array.
    traceFr{  z!integer argument expected, got %sr   c                     | j         \  }}|}|dk     r||z   }|dk    r||z
  }t          t          ||          d          }d}|dk    r#t          |          D ]}|| |||z   f         z  }n"t          |          D ]}|| ||z
  |f         z  }|S r   )r   rP  r  r  )r   offsetrowscolsr   r   r  r  s           r$   matrix_trace_implz,matrix_trace_impl.<locals>.matrix_trace_implk
  s    W
dq55!8Dq55!8DD$##661XX # #qAE{"# 1XX # #qQ{"
r&   r   )r  r   r   r   r  r   )r   r  r  s      r$   r  r  `
  sc     Gu5555fsEM233 K@6IJJJ   " r&   c                     |rdnd}||f}t          | t          j                  r| j        dk    st	          d|z  d          d S d S )Nrs  r   r  r  Frt  )r   r   r   r"  r   r  s        r$   _check_scalar_or_lt_2d_matr  
  sm    %/[[4Fi F!U[!! <v{{K &'5:< < < << <{r&   c                 ,   t          j        |           }t          j        |          }t          j        |                                                    |j        df          |                                                    d|j        f                    S r  r   asarraymultiplyrH  rj  r  r   r   r   aabbs        r$   outer_impl_noner  
  sm    	AB	AB;rxxzz))27A,77

**Arw<88: : :r&   c                 2   t          j        |           }t          j        |          }t          j        |                                                    |j        df          |                                                    d|j        f          |           |S r  r  r  s        r$   outer_impl_arrr  
  sw    	AB	ABK

""BGQ<00

""Arw<00   Jr&   c                 >    |d t           j        fv rt          S t          S r3   )r   r   r  r  )r   r   r   s      r$   _get_outer_implr  
  s     
tUZ   r&   c                 ~    t          | dd           t          |dd           t          | ||          dfd	}|S )NouterFr  c                      | ||          S r3   rY   )r   r   r   r   s      r$   
outer_implzouter_impl.<locals>.outer_impl
  s    tAq#r&   r3   )r  r  )r   r   r   r  r   s       @r$   r  r  
  sf     q'U;;;;q'U;;;;1a%%D      r&   c                    t          | t          j                  r_| j        dvr't	          d                    | j                            | j        dk    rt          d             }|S t          d             }|S t          d             }|S )N)rz   r   z^np.linalg.kron only supports 'C' or 'F' layout input arrays. Received an input of layout '{}'.r  c                 b    | j         d         }| j         d         }|                     ||          S )Nr  r  r   rj  )rF  xnxms      r$   	nrm_shapez(_kron_normaliser_impl.<locals>.nrm_shape
  s,    WR[WR[yyR(((r&   c                 H    | j         d         }|                     d|          S )Nr  r   r  )rF  r   s     r$   r  z(_kron_normaliser_impl.<locals>.nrm_shape
  s!    WR[yyB'''r&   c                 T    t          j        dt          |                     }| |d<   |S )Nr  r   )r   r   rx  )rF  r   s     r$   r  z(_kron_normaliser_impl.<locals>.nrm_shape
  s'    a))AAaDHr&   )r   r   r   r|   r   formatr"  r   )rF  r  s     r$   _kron_normaliser_implr  
  s    !U[!! 8:%% --3VAH-=-=? ? ? Vq[[) ) ) ( ( ( 		 	 
		 r&   c                 Z   t          | t          j                  }t          |t          j                  }|r<|r:| j        dk    s|j        dk    rt          d             }|S t          d             }|S |rt          d             }|S |rt          d             }|S t          d             }|S )Nr  c                     |S r3   rY   r   r   r   s      r$   r  z_kron_return.<locals>.ret
  s    r&   c                 6    |                     |j                  S r3   )rj  r  r	  s      r$   r  z_kron_return.<locals>.ret
  s    yy(((r&   c                 6    |                     | j                  S r3   rj  r   r	  s      r$   r  z_kron_return.<locals>.ret
      yy)))r&   c                 6    |                     |j                  S r3   r  r	  s      r$   r  z_kron_return.<locals>.ret
  r  r&   c                     |d         S r   rY   r	  s      r$   r  z_kron_return.<locals>.ret
  s    tr&   )r   r   r   r"  r   )r   r   a_is_arrb_is_arrr  s        r$   _kron_returnr  
  s     !U[))H!U[))H H 6Q;;!&A++  J) ) )J 	* * *J 		* * *J  Jr&   c                     t          | dd           t          |dd           t          |           t          |          t          | |          t          | d|           fd}|S )NkronFr  r!   c           	          |           } |          }|j         d         }|j         d         }|j         d         }|j         d         }||z  }||z  }	t          j        ||	f          }
t          |          D ]X}||z  }t          |          D ]A}||z   }||d d f         }t          |          D ]}||z  }|||f         |z  |
||||z   f<   BY | ||
          S )Nr  r  r  )r   r   r   r  )r   r   r  r  r!  r,  r"  r.  cmcnrz   r  rjmpr   irjmpslcr   cjmprt  fix_afix_bret_cs                     r$   	kron_implzkron_impl.<locals>.kron_impl
  s(   U1XXU1XXXb\Xb\Xb\Xb\"W"W Hb"XR((( r 	> 	>Ar6D2YY > >qAAAhr > >A r6D/1!Q$x#~AeT$)^+,,>> uQ1~~r&   )r  r  r  rF   )r   r   r  rt  r  r  r  s      @@@@r$   r  r  
  s     q&E::::q&E::::!!$$E!!$$EAE 
GQ		B& & & & & & & &P r&   )r   )F)Tr  rX  rr  r3   r  )rW   
contextlibr+  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_prQ  r  USE_LEGACY_TYPE_SYSTEMr`   float32ru   	complex64
complex128r   np_int32
np_float32
np_float64np_complex64np_complex128r%   r-   r1   r;   r=   r[   contextmanagerr   r   r   r   r   r   r   r   r   r   r  r   r  matmulr  r  r3  r5  r7  rO  r]  rh  rK   rG   r  c_intprq  r  r  r  r  r  r  rn  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/  r1  r@  rC  rK  rN  rW  r]  ra  rc  re  rh  rq  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  r  r  rY   r&   r$   <module>r<     s   
                J J J J J J J J J J J J ' ' ' ' ' ' F F F F F F F F F F - - - - - - - - - -          < < < < < < < < < < 0 0 0 0 0 0
"*Q--  		
"*R..  			 x	  ;L 	ss#	KK >L 	##CS	K   H H HH H H5 5 5
&; &; &; &; &; &; &; &;R`: `: `: `: `: `: `: `:F - - -0F F F	A 	A 	A	C 	C 	C- - -,"- "- "-J/- /- /-dD D D D D D D D D    6 
"&/ / / 
(/* * *)6 )6 )6X 
"'6 6 6<@ @ @@ @ @6. 6. 6.rV. V. V.r 
"& @  @  @F 
  S-u-.A:5:<<PP-u-.A<5<>>RR 8 8 83 3 3 3*7 7 7	 	 	 

 !!  "!6 < < <   
 
")-$ $ $N G G G@ @ @ @$ 
")
) ) )V 
")-p p pd 
")
t! t! t!l 
").. . .` 
")
. . .` 
")-> > > >B 
"),I I I`   

     

      

+,,  -,(   

!""  #"*   
/! ! !H   
/   
")/[ [ [ [|   

    !  
")/9 9 9x 
").` ` ` `F!  !  ! H 
")
7 7 7t 
")-
 
 
   

"##C C $#CL   
,     FD D DN 
")." " " " 
").) ) ) )X 
 
 
 
")
  >) >) >) ! >)B 
")
 !!K K "!K` 
"(   << < < < : : :      
"(
 
 
 
  :  D 
"'5 5 5 5 5r&   