
    xKgg                       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 ddlmZmZmZ d	d
lmZmZmZ ddlmZ   ejB                  d      Z"e"jG                         Z$e$Z% ejB                  d      Z&e&jG                         Z'ejP                  Z(e(jG                         Z)ejT                  Z+ejT                  Z,ejZ                  dej\                  dej^                  dej`                  diZ1dgdZ2d Z3d Z4d Z5 G d d      Z6 G d d      Z7ejp                  d        Z9d Z:d Z;d Z<d Z=d Z>d  Z?d! Z@d" ZAd# ZBdhd$ZC eej                        d%        ZE eej                        d&        ZGd' ZH eej                        d(        ZId) ZJd* ZKd+ ZLd, ZM eej                        d-        ZN ej                  d. ej                               ZQed/        ZRdid0ZSd1 ZTd2 ZU eeU      d3        ZVed4        ZWed5        ZX eej                  j                        d6        Z[ed7        Z\did8Z] eej                  j                        d9        Z_ eej                  j                        d:        Za eej                  j                        d;        Zc eej                  j                        d<        Ze eej                  j                        d=        Zg eej                  j                        djd>       Zi eej                  j                        d?        Zkd@ Zl eel      dA        ZmdB Zn een      dC        ZodD Zp eep      dE        ZqdF Zr eer      dG        ZsdH Zt eet      dI        ZudJ Zv eev      dK        Zw eej                  j                        dkdL       ZydM Zz eez      dN        Z{ eej                  j                        dO        Z} eej                  j                        dldP       ZdQ Z eej                  j                        dR        Z eej                  j                        dS        ZdT Z ee      dU        ZdV Z ee      dW        ZdX Z eej                  j                        dmdY       Z eej                  j                        dmdZ       Zed[        Z eej                  j                        dmd\       Z eej                  j"                        d]        Z eej&                        dnd^       Zdid_Zed`        Zeda        Zdb Z eej2                        dmdc       Zdd Zde Z eej:                        df        Zy)oz.
Implementation of linear algebra operations.
    N)ir)lower_builtinimpl_ret_borrowedimpl_ret_new_refimpl_ret_untracked)	signature)	intrinsicoverloadregister_jitable)typescgutils)TypingErrorNumbaTypeErrorNumbaPerformanceWarning   )
make_array_empty_nd_impl
array_copy)numpy_support       sdczc                 R    t         j                  |       }|t        d|d      |S )Nzunsupported dtype for z())_blas_kindsget	TypeError)dtype	func_namekinds      S/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/np/linalg.pyget_blas_kindr$   0   s(    ??5!D|	CDDK    c                  >    	 dd l } y # 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,   7   s(    H' HFGGH    c                  >    	 dd l } y # t        $ r t        d      w xY wr'   )scipy.linalg.cython_lapackr)   r*   s    r#   ensure_lapackr0   >   s(    H) HFGGHr-   c                 T    | j                  |||      }t        j                  ||      S N)get_constant_genericr   alloca_once_value)contextbuildertyvalconsts        r#   make_constant_slotr:   E   s)    (("c:E$$We44r%   c                   6    e Zd ZdZd Zed        Zed        Zy)_BLASzM
    Functions to return type signatures for wrapped
    BLAS functions.
    c                     t                y r2   )r,   selfs    r#   __init__z_BLAS.__init__P   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#   rC   z_BLAS.numba_xxnrm2S   s`    159jj..	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   rF   rG   rH   rI   rJ   rL   r    rN   s      r#   rP   z_BLAS.numba_xxgemm^   s    jjJJJJJJJJJJJJNN5!NN5!JJNN5!JJNN5!NN5!JJ
  %%nc::r%   N)__name__
__module____qualname____doc__r@   classmethodrC   rP    r%   r#   r<   r<   J   s4    
 ; ; ; ;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y)_LAPACKzO
    Functions to return type signatures for wrapped
    LAPACK functions.
    c                     t                y r2   )r0   r>   s    r#   r@   z_LAPACK.__init__y   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   rF   rG   rH   rI   F_INT_nbtyperJ   rR   s      r#   r]   z_LAPACK.numba_xxgetrf|   sX    jj.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^   rR   s      r#   ra   z_LAPACK.numba_ez_xxgetri   sR    jj.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_rgeevrQ   rR   s      r#   rc   z_LAPACK.numba_ez_rgeev   s    jj..... %%&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_cgeevrQ   rR   s      r#   re   z_LAPACK.numba_ez_cgeev   s    jj.... %%&6<<r%   c                 V   t        |d|      }t        j                  t        j                  t        j                  t        j                  t        j                  t        j
                  |      t        j                  t        j
                  |            }t        j                  d|      S )NrB   numba_ez_xxxevdrD   )rL   r    wtyperN   s       r#   rg   z_LAPACK.numba_ez_xxxevd   so    159jj.. %%&7==r%   c                     t        j                  t         j                  t         j                  t         j                  t        j                  |      t         j                        }t        j
                  d|      S )Nnumba_xxpotrfrQ   rR   s      r#   rj   z_LAPACK.numba_xxpotrf   sL    jj.	 %%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 )NrB   numba_ez_gesddrD   )rL   r    styperN   s       r#   rl   z_LAPACK.numba_ez_gesdd   s    159jjJJJJJJJJNN5!JJNN5!NN5!JJNN5!JJ
 %%&6<<r%   c           
         t        j                  t         j                  t         j                  t         j                  t        j                  |      t         j                  t        j                  |            }t        j
                  d|      S )Nnumba_ez_geqrfrQ   rR   s      r#   ro   z_LAPACK.numba_ez_geqrf   sZ    jjJJJJJJNN5!JJNN5!
 %%&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_xxgqrrQ   rR   s      r#   rq   z_LAPACK.numba_ez_xxgqr   sa    jjJJJJJJJJNN5!JJNN5!
 %%&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 )NrB   numba_ez_gelsd)rE   r   rF   rG   rH   rI   float64rJ   rK   s       r#   rs   z_LAPACK.numba_ez_gelsd   s    159jjJJJJJJJJNN5!JJNN5!JJNN5!MMNN5::&
 %%&6<<r%   c                 l   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^   rR   s      r#   rv   z_LAPACK.numba_xgesv  sl    jjJJJJJJNN5!JJNN<(NN5!JJ	
 %%mS99r%   N)rS   rT   rU   rV   r@   rW   r]   ra   rc   re   rg   rj   rl   ro   rq   rs   rv   rX   r%   r#   rZ   rZ   s   s    
 < < ? ? = =  = = 
> 
> < < = =$ 	= 	= 
= 
= = =" : :r%   rZ   c              #     K   g }g }g }t        |j                  |      D ]  \  }}t        |t        j                        r|j
                  dv r||}
}	n@|j                  d      }	t        |	|      }t        | |||f      }
|j                  |	|
f       |j                  |	       |j                  |
        t        |j                  g| t        |      f |D ]"  \  }}| j                  j                  |||       $ yw)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)r5   r6   rN   r}   newtysnewargscopiesr7   r8   newtynewvalcopysigs               r#   make_contiguousr     s      FGFsxx&C"ekk*bii4.?6EGG3G'Er*G'C6BFMM5&/*ev ' COO
-f
-uW~
==C7B, s   C?Dc                     dfd}| j                  ||t        t        j                  t        j                        |f       y)z.
    Check whether *n* fits in a C `int`.
    ic                 &    | kD  rt        d      y )Nz$array size too large to fit in C int)OverflowError)n_maxints    r#   implzcheck_c_int.<locals>.impl5  s    w; FGG r%   N)compile_internalr   r   nonerH   )r5   r6   r   r   r   s       @r#   check_c_intr   /  s;     GH Wd&uzz5::>Fr%   c                     |j                  t        j                  ||      d      5  | j                  |      }|j	                          |j                  d       ddd       y# 1 sw Y   yxY w)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r5   r6   respyapis       r#   check_blas_returnr   =  sY    
 
,,Wc:5	I&&w/?@	 
J	I	I   3A$$A-c                     |j                  t        j                  ||      d      5  | j                  |      }|j	                          |j                  d       ddd       y# 1 sw Y   yxY w)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   I  sY    
 
,,Wc:5	I&&w/AB	 
J	I	Ir   c                 8   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        |            }|j                  |	||||j                  |t
              |j                  |t
              |j                  |t
              f      }t        | ||       y)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   )r5   r6   	conjugater    r   a_datab_dataout_datafntyfnr"   kind_valr   s                r#   
call_xxdotr   U  s    
 ??2::b>#Wf%y)D 
	'	'm	LBD{{7CI.HGS^4I
,,rHi#OOFI>#OOFI>#OOHi@B CC gw,r%   c                 j   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	            }|j                  |	|||||j!                  |t
              |j!                  |t
              ||j!                  |t
              |j!                  |t
              |j!                  |t
              f
      }t#        | ||       y
)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   )r5   r6   do_transm_typem_shapesm_datav_datar   r   r   r    alphabetamr   ldar"   r   transr   s                       r#   call_xxgemvr   k  s[   
 ??2::b>#W"F%y&%y)D 
	'	'n	MBLLEw<Egws;D}}1qk1qkD{{7CI.HKKXS3s8DE
,,rHeQ#OOE9=#OOFI>#OOFI>#OOD)<#OOHi@B 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        |            }j                  |||||||j                  |t
              ||||j                  |t
              ||f      } t!        | |        y)	zQ
    Call the BLAS matrix * matrix product function for the given arguments.
    r   rP   r   r   r   r   c                     | j                   j                   k(  rn| j                   dk(  r|d   n|d   j                  |t              fS )Nry   r   r   )r{   r   r   )r7   shapesdatar6   notransout_typer   s      r#   get_array_paramz$call_xxgemm.<locals>.get_array_param  sI     yyHOO3Gc)F1IvayOOD),
 	
r%   N)r   r   r   r   r   r   r   r   r   r    r:   r   r   r$   r   r   r   )#r5   r6   x_typex_shapesx_datay_typey_shapesy_datar   
out_shapesr   r   r   r   k_kr   r    r   r   r   transar   data_atransbldbdata_b_ldcdata_cr"   r   r   r   r   s#    `      `                        @@r#   call_xxgemmr     s|    ??2::b>##W"FF%y&%vy%vD 
	'	'n	MBDAqEBLLEw<Egws;DKKS*Ekk'3s8,G
 *&(FCFC)&(FCFC$Xz8DNAsFD{{7CI.H
,,rHffaA#OOE9=vs"Cy)I"C) *C gw,r%   c                 `    d }| j                  ||||      }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  sg    ww1A688QFAGG,,hh1vqww'vvaC  r%   r   r   r   r5   r6   rN   r}   r   r   s         r#   dot_2_mmr     4    ! 
"
"7Hc4
@CGWcoosCCr%   c                 `    d }| j                  ||||      }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  sa    WWA688QE177++hhuagg&vvaC  r%   r   r   s         r#   dot_2_vmr     r   r%   c                 `    d }| j                  ||||      }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  sa    ww1gg688QE177++hhuagg&vvaC  r%   r   r   s         r#   dot_2_mvr     r   r%   c           
         |j                   \  }}|j                  } t        |      | ||d         } t        |      | ||d         }	t        j                  ||j
                        \  }
d }| j                  ||t        t        j                  g|j                    |       t        | ||
       t        j                  || j                  |            }t        | ||||
|j                  |	j                  |       |j                  |      S )z<
    np.dot(vector, vector)
    np.vdot(vector, vector)
    r   r   c                 \    | j                   \  }|j                   \  }||k7  rt        d      y )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  s6    WWWW6 1 2 2 r%   )r}   r   r   r   unpack_tupler   r   r   r   r   r   alloca_onceget_value_typer   r   load)r5   r6   rN   r}   r   atybtyr    r   r   r   r  r   s                r#   dot_2_vvr
    s    
 xxHCOOE
3$q'2A
3$q'2A			gqww	/BA2 Wj&uzz=CHH=tE!$


gw'='=e'D
ECwE1affaffc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                        rkt        |t        j                        rPt         fd       |j                  dvs|j                  dvr!t        j                   d||ft               fdS y y )Nc                    |j                   |j                   ffd}|j                  |j                  k7  rt        dz        dk(  r"t        j                  |j                  dd      }nLdk(  sdk(  r"t        j                  |j                  dd      }n d	k(  r|j                  }nt        d
z        t        |||      |fS )Nc                 J   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 Y   y xY w)N   r  r  r   r   r  r   r   unreachable)r,   r   r   r   r   r
  AssertionErrorr5   r6   rN   r}   ndimss       r#   _dot2_codegenz0dot_2_impl.<locals>._impl.<locals>._dot2_codegen#  s    $WgsDA[c4'#tD BA &'#tD	 BA
 &'#tD BA &'#tD BA -];; BAs"   BBB2BBB"z)%s arguments must all have the same dtyper  r  ry   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    YY

+E< zzU[[(!?$FH H #kk$**a=&EVO#kk$**a=&"jj! $037#8 9 9[$6EEr%   rx   z+ is faster on contiguous arrays, called on c                      | |      S r2   rX   r  r  r$  s     r#   <lambda>zdot_2_impl.<locals>.<lambda>F      5u#5r%   r~   r   r   r	   r{   warningswarnr   )r#  r  r  r$  s   `  @r#   r  r    s|    $$E5;;)G		F 
	FB ;;d"ell$&>MM4-*+BD 65Q *H$r%   c                    t        | t        j                        rgt        |t        j                        rLt        d        | j                  dvs|j                  dvrt        j                  d| |ft               fdS yy)z
    np.vdot(a, b)
    c                     d }|j                   dk7  s|j                   dk7  rt        d      |j                  |j                  k7  rt        d      t        |j                  ||      |fS )Nc                     t                t        | |||      5 \  }}t        | |||d      cd d d        S # 1 sw Y   y xY w)NT)r   )r,   r   r
  )r5   r6   rN   r}   s       r#   codegenz$vdot.<locals>._impl.<locals>.codegenQ  s9    $WgsDA#d#GWc44P BAAs   6?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  r/  s       r#   r$  zvdot.<locals>._implO  se    Q yyA~q!"JKKzzU[[(!FH HTZZu5w>>r%   rx   4np.vdot() is faster on contiguous arrays, called on c                      | |      S r2   rX   r&  s     r#   r'  zvdot.<locals>.<lambda>e  r(  r%   Nr)  r&  s     @r#   vdotr2  I  sw    
 $$E5;;)G		? 
	?  ;;d"ell$&>MM%=#$;= 65/ *H$r%   c                     | j                   \  }|j                   \  }}||k7  rt        d      |j                   |fk7  rt        d      y )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_argsr4  h  sZ    	
BAGGEBBw : ; 	;
yyQD ? @ 	@ r%   c                     | j                   \  }}|j                   \  }||k7  rt        d      |j                   |fk7  rt        d      y )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_argsr6  s  sZ    GGEAr	
BABw - . 	.
yyQD ? @ 	@ 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  r<|}|}|d   }|d   }|j                  dk(  }|	j                  |j                  }}t        }n;|}|}|d   }|d   }|j                  dk(  }|j                  |	j                  }}t        }| j                  ||t        t        j                  g|j                    |       |D ]  }t!        | ||        | j#                  t        j$                  d      }|j'                  d||      }|j'                  d||      }|j)                  ||      }|j+                  |d      5 \  }}|5  t	        j,                  ||
j                  |j/                  |
j0                  |
j2                        d       d	d	d	       |5  t5        | |||||||
j                         d	d	d	       d	d	d	       t7        | ||j                  |
j9                               S # 1 sw Y   ^xY w# 1 sw Y   CxY w# 1 sw Y   GxY w)
zE
    np.dot(vector, matrix, out)
    np.dot(matrix, vector, out)
    r   r   r  r   ry   ==Fr   N)r}   r   r    r   r   r  r   r!  r{   r   r4  r6  r   r   r   r   r   get_constantrH   icmp_signedor_if_elsememsetmulitemsizenitemsr   r   	_getvalue)r5   r6   rN   r}   xtyytyouttyr    xyr   r   r   r   mtyr   v_shaper   r   r   r   r  r8   zero
both_emptymatrix_emptyis_emptyr   nonemptys                                r#   dot_3_vmrN  ~  s   
 hhOCeCOO###IIE
3$q'2A
3$q'2A
*U
GWd1g
6C##GQWW5H##GQWW5H%%gsyy9J
xx#(( 1+qk::$(
 1+qk::$(
Wj&uzz=CHH=tEGWc*  

A.D$$T7D9J&&tS$7L{{:|4H	%	04EUHNN7CHH";;s||SZZ@!E  (C6* 	 
1 Wgs ]]_. . U X	 
1	0s=   KAJ?"
K,K	K?K	KK	KK 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 }| j                  ||t        t        j                  g|j                    |       t        | ||       t        | ||       t        | ||       |j                  }|	j                  }|
j                  }| j                  t        j                  d      }|j!                  d||      }|j!                  d||      }|j!                  d||      }|j#                  ||j#                  ||            }|j%                  |d      5 \  }}|5  t	        j&                  ||
j                  |j)                  |
j*                  |
j,                        d       d	d	d	       |5  | j                  t        j                  d      }|j!                  d||      }|j!                  d||      }|j%                  |      5 \  } }!| 5  |j%                  |      5 \  }"}#|"5  t/        | |d|||||       d	d	d	       |#5  |j                  |j                  k(  }$t1        | ||$|||||       d	d	d	       d	d	d	       d	d	d	       |!5  |j%                  |      5 \  }%}&|%5  |j                  |j                  k7  }$t1        | ||$|||||       d	d	d	       |&5  t3        | ||||||||||       d	d	d	       d	d	d	       d	d	d	       d	d	d	       d	d	d	       d	d	d	       t5        | ||j                  |
j7                               S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)
z%
    np.dot(matrix, matrix, out)
    r   r   r  ry   c                     | j                   \  }}|j                   \  }}||k7  rt        d      |j                   ||fk7  rt        d      y )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  s_    ww1A7 1 2 299A C D D r%   r8  Fr   N)r}   r   r    r   r   r  r   r{   r   r   r   r   r   r   r9  rH   r:  r;  r<  r=  r>  r?  r@  r   r   r   r   rA  )'r5   r6   rN   r}   rB  rC  rD  r    rE  rF  r   r   r   r   r   r   r   r   r  r   r   r   rI  rJ  x_emptyy_emptyrL  r   rM  oneis_left_vecis_right_vecr_vecr_matv_vm_vr   v_mm_ms'                                          r#   dot_3_mmr\    s    hhOCeCOO###IIE
3$q'2A
3$q'2A
*U
GWd1g
6C##GQWW5H##GQWW5H%%gsyy9JDAqEB <<3D Wj&uzz=CHH=tE !$!$!$VVFVVFxxH 

A.D$$T1d3J!!$40G!!$40G{{:w{{7G'DEH	%	04EUHNN7CHH";;s||SZZ@!E   &&uzz15C!--dAs;K"..tQ<L..5% 5#s &w'(&&(D ! !'*zzU\\'AH'((+XvvxQ ! 6   5#s '*zzU\\'AH'((+XvvxQ !
 !'(+Xv(+Xv(-z8E ! 6  / 	 
1L Wgs ]]_. .K U !S !S 65 U !S
 !S 65 U /. X	 
1	0s  =Q-AO'

Q-AQ!,Q2P	P
O4
P',PPP	#
Q-Q		?P=,P%1
P=;P1P=Q		!Q)Q!1Q-'O1	,Q-4O>9PP
PPP	P"Q%P.*P=1P:6P==QQ			QQQQ!!Q*	&Q--Q6c                 Z   t        | t        j                        rt        |t        j                        rut        |t        j                        rZt        d        | j                  dvs|j                  dvs|j                  dvrt        j                  d| |ft               fdS yyy)z
    np.dot(a, b, out)
    c                     d }|j                   |j                   k7  s|j                   |j                   k7  rt        d      t        ||||      |fS )Nc                    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 Y   y xY w)Nc              3   4   K   | ]  }|j                     y wr2   r!  ).0rE  s     r#   	<genexpr>z8dot_3.<locals>._impl.<locals>.codegen.<locals>.<genexpr>  s     =1s   r  r   r  )r,   r   setr}   r\  rN  r  r  s        r#   r/  z%dot_3.<locals>._impl.<locals>.codegen  s    $WgsDA FLcFJ=!==E|'#tD	 BA
 1a&'#tD BA -];; BAs   6BB7BBz/np.dot() arguments must all have the same dtype)r    r   r   )r"  r  r  r   r/  s        r#   r$  zdot_3.<locals>._impl  sR    < zzU[[(DJJ#)),C!EG G S$s3W<<r%   rx   r0  c                      | ||      S r2   rX   r  r  r   r$  s      r#   r'  zdot_3.<locals>.<lambda>1  s    dE3(?r%   Nr)  rf  s      @r#   dot_3rg    s    
 	4%*UEKK*HsEKK(		= 
	=& ;;d"ell$&>#**CMM%=#$;= @?7 ) +I%r%   numba_fatal_errorc                     t        j                  |       D ]D  }t        j                  |j                               r't         j                  j                  d       y )Nz$Array must not contain infs or NaNs.)r   nditerisfiniteitemlinalgLinAlgError)r   vs     r#   _check_finite_matrixrp  7  s@    YYq\{{1668$))''68 8 r%   c                    |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      y )	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~  ?  s     &[4Fi F!U^^$FFa%6?#E2266Q;5>#E22aggU]];<(*01#E22 =r%   c                 x    |d   j                   }|dd  D ]#  }|j                   |k7  sd| z  }t        |d       y )Nr   r   zAnp.linalg.%s() only supports inputs that have homogeneous dtypes.Frs  )r    r   )r!   r   t0r   r}  s        r#   _check_homogeneous_typesr  T  sB    	qB12Y77b=UXaaCc66 r%   c                       y r2   rX   rX   r%   r#   _copy_to_fortran_orderr  \  s    r%   c                 R    | j                   dk(  | j                   dk(  fd}|S )Nr   Ac                    rt        j                  |       }|S rZ| j                  j                  }|r+t        j                  | j                        j                  }|S t        j
                  |       }|S t        j
                  |       }|S r2   )r   r   flagsf_contiguousTasfortranarray)r   acpyflag_fA_layoutF_layouts      r#   r   z&ol_copy_to_fortran_order.<locals>.implf  s    771:D  WW))F wwqss|~~ 	 ((+  $$Q'Dr%   rz   )r   r   r  r  s     @@r#   ol_copy_to_fortran_orderr  `  s+     xx3Hxx3H& Kr%   c                 z    | dk7  r6| dk  rt                J | dkD  rt        j                  j                  d      y y )Nr   z(Matrix is singular to machine precision.)fatal_error_funcr   rm  rn  rs    r#   _inv_err_handlerr  |  sF    Avq51q5))'':< < 	 r%   c                     | d   S )zFpass a list of variables to be preserved through dead code eliminationr   rX   r   s    r#   _dummy_liveness_funcr    s     Q4Kr%   c                    t                t        | d       t               j                  | j                        t               j                  | j                        t        t        | j                  d            fd}|S )Ninvc                    | j                   d   }| j                   d   |k7  r!d}t        j                  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   rm  rn  rp  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    GGBK772;!BC))'',,Q%a(6Kxx.$1dkk1dkkB$4;;4;;? 	dii34r%   )r0   r~  rZ   r]   r    ra   r   r$   )r   r  r"   r]   r  s     @@@r#   r  r    s_    OE"I++AGG4MI..qww7M}QWWe,-D2 Or%   c                 R    | dk7  r"| dk  rt                J | dkD  rt        d      y y )Nr   z&Internal algorithm failed to converge.)r  r  r  s    r#   %_handle_err_maybe_convergence_problemr    s8    Avq51q5EFF 	 r%   c                 &   |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        y )Nrr  r   z'%s.%s() only supported for array types r  +%s.%s() only supported on 1 and 2-D arrays ru  )r~   r   r   r   r!  r    rx  ry  r   r!   rz  r{  r|  s        r#   _check_linalg_1_or_2d_matrixr    s     &[4Fi Fa%C"# $ 	$66Q;G"# $ 	$aggU]];< 68>? @ 	@ =r%   c                     t                t        | d       t               j                  | j                        t        t        | j                  d            t        d      t        d      }fd}|S )NcholeskyULc                    | j                   d   }| j                   d   |k7  r!d}t        j                  j                  |      | j	                         }|dk(  r|S  ||j
                  |      }|dk7  r5|dk  rt                J |dkD  rt        j                  j                  d      t        |      D ]  }d|d ||f<    |S )Nr  r  r  r   z Matrix is not positive definite.)r   r   rm  rn  r   r  r  range)	r   r   r}  r   r  colUPr"   rj   s	         r#   cho_implzcho_impl.<locals>.cho_impl  s    GGBK772;!BC))'',, ffh6J $Aszz1561u "q1uii++68 8 8CCc	N 
r%   )r0   r~  rZ   rj   r    r   r$   )r   LOr  r  r"   rj   s      @@@r#   r  r    s[    OJ'I++AGG4M}QWWj12D	SB	SB< Or%   c                    t                t        | d       t               j                  | j                        t               j                  | 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                 r   | j                   d   }| j                   d   |k7  r!d}t        j                  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   rm  rn  rp  r  r   r    r  r  r  anyr  r  r  r   r   r}  r  ldvlldvrwrwivlvrr  JOBVLJOBVRr"   rc   s              r#   real_eig_implzeig_impl.<locals>.real_eig_impl
  sf    GGBK772;!BC))'',,Q%a(XXaqww'XXaqww'XXq$iqww/XXq$iqww/6:4!! KKIIIIII II " 	.a0 66":@B B
 	dii"''277BGGLMBDDzr%   c                    | j                   d   }| j                   d   |k7  r!d}t        j                  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   rm  rn  rp  r  r   r    r  r  r  r  r  r   r   r}  r  r  r  wr  r  r  r  r  r"   re   s             r#   cmplx_eig_implz eig_impl.<locals>.cmplx_eig_implB  s&    GGBK772;!BC))'',,Q%a(HHQagg&XXq$iqww/XXq$iqww/6rtt94!! KKHHII II 
" 	.a0 	dii"''166BC244yr%   r0   r~  rZ   rc   r    re   r   r$   r~   r   scalarsry  )r   r  r  r  r  r"   re   rc   s      @@@@@r#   eig_implr    s    OE"Y--agg6NY--agg6N}QWWe,-DHEHE6p&P !''5==001r%   c                    t                t        | d       t               j                  | j                        t               j                  | 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   |k7  r!d}t        j                  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   rm  rn  rp  r  r   r    r  r  r  r  r  r  r  s              r#   real_eigvals_implz'eigvals_impl.<locals>.real_eigvals_impl}  sN    GGBK772;!BC))'',,Q%a(XXaqww'6IXXaqww' XXq)XXq)4!! KKIIIIII II " 	.a0 66":DF F
 	dii"''277BGGLM	r%   c                    | j                   d   }| j                   d   |k7  r!d}t        j                  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   rm  rn  rp  r  r   r    r  r  r  r  r  s             r#   cmplx_eigvals_implz(eigvals_impl.<locals>.cmplx_eigvals_impl  s    GGBK772;!BC))'',,Q%a(HHQagg&6HXXq)XXq)4!! KKHHII II 
" 	.a0 	dii"''166BCr%   r  )r   r  r  r  r  r"   re   rc   s      @@@@@r#   eigvals_implr  o  s    OI&Y--agg6NY--agg6N}QWWi01DHEHE9v'R !''5==001!!  r%   c                 j   t                t        | d       t        | j                  d| j                        }t	        j
                  |      t               j                  | j                        t        t        | j                  d            t        d      t        d      fd}|S )NeighrB   r  r  c           	         | j                   d   }| j                   d   |k7  r!d}t        j                  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   rm  rn  rp  r  r   r  r  r  r  r   r   r}  r  r  r  JOBZUPLOr"   rg   w_dtypes         r#   	eigh_implzeigh_impl.<locals>.eigh_impl  s    GGBK772;!BC))'',,Q%a(HHQg&6t9D   KKHH 	.a0 	dii014yr%   
r0   r~  rE   r    
np_supportas_dtyperZ   rg   r   r$   )r   w_typer  r  r  r"   rg   r  s      @@@@@r#   r  r    s    OF# QWW0!'':F!!&)Gi//8O}QWWf-.Ds8Ds8D < r%   c                 j   t                t        | d       t        | j                  d| j                        }t	        j
                  |      t               j                  | j                        t        t        | j                  d            t        d      t        d      fd}|S )NeigvalshrB   r  r  c           	         | j                   d   }| j                   d   |k7  r!d}t        j                  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_impl(  s    GGBK772;!BC))'',,Q%a(HHQg&6HD   KKHH 	.a0 	dii01r%   r  )r   r  r  r  r  r"   rg   r  s      @@@@@r#   r  r    s    OJ' QWW0!'':F!!&)Gi//8O}QWWj12Ds8Ds8D < r%   c                 l   t                t        | d       t        | j                  d| j                        }t	        j
                  |      t               j                  | j                        t        t        | j                  d            t        d      t        d      dfd	}|S )NsvdrB   r  Sc                    | j                   d   }| j                   d   }|dk(  s|dk(  rt        j                  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   rm  rn  rp  r  minr   r    r  r  r  r  r  )r   full_matricesr   r   r  lduminmnr  ucolldvtur   vtr  JOBZ_AJOBZ_Sr"   rl   s_dtypes                 r#   svd_implzsvd_impl.<locals>.svd_implY  s?   GGBKGGBK6Q!V))''(@AAQ%a(Aq	DDDDDDHHdC[0HHU'*XXq$iqww/KKHHHHII
 	.a0 	dii!&&!&&ABQ~r%   r   )
r0   r~  rE   r    r  r  rZ   rl   r   r$   )	r   r  s_typer  r  r  r"   rl   r  s	       @@@@@r#   r  r  H  s    OE" QWW0!'':F!!&)GY--agg6N}QWWe,-DXFXF, ,\ Or%   c                    t                t        | d       t               j                  | j                        t               j                  | j                        t        t        | j                  d            fd}|S )Nqrc           	      H   | j                   d   }| j                   d   }|dk(  s|dk(  rt        j                  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   rm  rn  rp  r  r  r   r    r  r  r   r  r  r  r  r  )r   r   r   qr   r  tauretr  ijr"   ro   rq   s              r#   qr_implzqr_impl.<locals>.qr_impl  s   GGBKGGBK6Q!V))''(@AAQ #1%Aq	hhagg.HHJJ
 71 HHaZqww/11 uA1q5\AqD'!Q$ " 
 uaA5\AqD'!Q$ " ! HHJJ
 	.c2 	chh/0!VeV)a  r%   )r0   r~  rZ   ro   r    rq   r   r$   )r   r   r"   ro   rq   s     @@@r#   r   r     sb    OD! Y--agg6NY--agg6N}QWWd+,D7!r Nr%   c                     t         )z;
    Correctly copy 'b' into the 'bcpy' scratch space.
    NotImplementedErrorbcpyr   nrhss      r#   _system_copy_in_br    
     r%   c                 4    |j                   dk(  rd }|S d }|S )Nr   c                 0    || d |j                   d   df<   y )Nr  r   r   r  s      r#   	oneD_implz)_system_copy_in_b_impl.<locals>.oneD_impl  s    $%D!''"+q!r%   c                 4    || d |j                   d   d |f<   y )Nr  r  r  s      r#   	twoD_implz)_system_copy_in_b_impl.<locals>.twoD_impl  s!    ()D!''"+uu$%r%   ra  )r  r   r  r  r  s        r#   _system_copy_in_b_implr    s#    vv{	&	*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                 4    | j                   dk(  rd }|S d }|S )Nr   c                      yNr   rX   r  s    r#   r  z,_system_compute_nrhs_impl.<locals>.oneD_impl  s    r%   c                      | j                   d   S )Nr  r  r  s    r#   r  z,_system_compute_nrhs_impl.<locals>.twoD_impl  s    772;r%   ra  )r   r  r  s      r#   _system_compute_nrhs_implr    s#    vv{		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                 8    |j                   }|dk(  rd }|S d }|S )Nr   c                     | j                   d   }|j                   d   }||k7  rt        j                  j                  d      y )Nr  r  <Incompatible array sizes, system is not dimensionally valid.r   r   rm  rn  r   r   ambms       r#   r  z9_system_check_dimensionally_valid_impl.<locals>.oneD_impl  D    BBRxii++RT T r%   c                     | j                   d   }|j                   d   }||k7  rt        j                  j                  d      y )Nr  r  r  r  s       r#   r  z9_system_check_dimensionally_valid_impl.<locals>.twoD_impl  r"  r%   ra  r   r   r!  r  r  s        r#   &_system_check_dimensionally_valid_implr%    s.    66Dqy	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                 8    |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                  j                  d      y Nr  r  r   r  r  )r   r   r   anr!  s        r#   r  z/_system_check_non_empty_impl.<locals>.oneD_impl(  sW    BBBQw"'R1Wii++,DEE &-r%   c                     | j                   d   }| j                   d   }|j                   d   }|j                   d   }|dk(  s|dk(  s
|dk(  s|dk(  rt        j                  j                  d      y r*  r  )r   r   r   r+  r!  bns         r#   r  z/_system_check_non_empty_impl.<locals>.twoD_impl0  sj    BBBBQw"'R1Waii++,DEE 18r%   ra  r$  s        r#   _system_check_non_empty_implr.  $  s.    66Dqy	F 	F r%   c                     t         )z:
    Compute the residual from the 'b' scratch space.
    r  )r   r   r  s      r#   _lstsq_residualr0  :  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 )NrB   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_implI  sB    hht:6qQx 0! 34A
r%   c                 z    t        j                  d      }t        j                  | |d df   dz        |d<   |S r3  )r   r   r4  r6  s       r#   	real_implz'_lstsq_residual_impl.<locals>.real_implO  s8    hht:6!"a%!,A
r%   r  c                     t        j                  |      }t        |      D ]7  }t        j                  t        j                  | |d |f         dz        ||<   9 |S Nr  r  )r   r   r  r4  r5  r   r   r  r   r   r7  s        r#   r8  z(_lstsq_residual_impl.<locals>.cmplx_implW  sP    hhZ8tAVVBFF1QRU8$4a$78CF %
r%   c                     t        j                  |      }t        |      D ]$  }t        j                  | |d |f   dz        ||<   & |S r<  )r   r   r  r4  r=  s        r#   r:  z'_lstsq_residual_impl.<locals>.real_impl^  sF    hhZ8tAVVAab!eHaK0CF %
r%   )r!  r    r  r  rE   r~   r   ry  )r   r   r  r!  r    r8  r:  r7  s          @r#   _lstsq_residual_implr?  A  s    66DGGE$$WU4F%NOJqyeemm-  qyyeemm-
 
 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_solutionrB  f  
    
 r%   c                 4    | j                   dk(  rd }|S d }|S )Nr   c                 <    |j                   j                         d | S r2   r  ravelrA  s      r#   r  z'_lstsq_solution_impl.<locals>.oneD_implq  s    66<<>"1%%r%   c                 4    |d |d d f   j                         S r2   r   rA  s      r#   r  z'_lstsq_solution_impl.<locals>.twoD_implu  s    A;##%%r%   ra  )r   r  r   r  r  s        r#   _lstsq_solution_implrJ  n  s#    vv{	&	&r%   c                   	 t                t        | d       t        |d       t        d| |       t	        j
                  | j                        | j                  }t        |d|      }t	        j
                  |      	t               j                  | j                        t        t        |d            d	fd	}|S )NlstsqrB   c                 \   | 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  rp  r'  r  r  maxr  r   r   r  r  int32r  r  r0  rB  r  r  )r   r   rcondr   r   r  r  maxmnr  r  r   rank_ptrr  rankr   rE  r"   np_dtrs   r7  s                   r#   
lstsq_implzlstsq_impl.<locals>.lstsq_impl  s   GGBKGGBK#A& 	QQ 	 1% 	*!Q/Aq	Aq	 &a( xxuU355$4( HHU*-88ARXX.KKKKHHOO
 	.a0 { !8qAv((Aj1C "$40C AtQ' 	diiAFFHMMJK3ai((r%   g      )r0   r~  r  r  r  r  r    rE   rZ   rs   r   r$   )
r   r   rP  nb_dtr_typerU  r"   rT  rs   r7  s
         @@@@r#   rU  rU  z  s    OG$ !G,Wa+(EGGE U.6F$$V,J Y--agg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[    rC  r%   c                 4    | j                   dk(  rd }|S d }|S )Nr   c                 6    |j                   j                         S r2   rF  rZ  s     r#   r  z-_solve_compute_return_impl.<locals>.oneD_impl  s    66<<>!r%   c                     |S r2   rX   rZ  s     r#   r  z-_solve_compute_return_impl.<locals>.twoD_impl  s    Kr%   ra  )r   r  r  r  s       r#   _solve_compute_return_implr_    s#    vv{	"	r%   c                 >   t                t        | d       t        |d       t        d| |       t	        j
                  | j                        | j                  }t               j                  | j                        t        t        |d            fd}|S )Nsolvec           
      *   | 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  rp  r  r  r   r   r  r[  r  r  r  r  r  r  )r   r   r   r  r  r  r  r  r"   rT  rv   s           r#   
solve_implzsolve_impl.<locals>.solve_impl  s    GGBK#A& 	QQ 	*!Q/ &a( xxq	/116(D11 	$4( xx.KKKKKK	
 	 	diiDII>?$Q--r%   )r0   r~  r  r  r  r  r    rZ   rv   r   r$   )r   r   rW  rc  r"   rT  rv   s       @@@r#   rc  rc    s|    OG$ G,Wa+(EGGE )''0K}UG,-D'.R r%   c           
      v  	
 t                t        | d       t        | j                  d| j                        }t	        j
                  |      t               j                  | j                        	t               j                  | 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pinvrB   r  ry   r   r  r   c                 :  	 | j                   d   }| j                   d   }t        |        t        |       }|dk(  s|dk(  r=|j                  j	                         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 ]  }||   |
kD  sd||   z  ||<   |} |dz  }||k\  r3t        |      D ]$  }t        |      D ]  }|||f   ||   z  |||f<    & n4t        |      D ]&  }||   }t        |      D ]  }|||f   |z  |||f<    (  |||j                  |j                  ||j                  |j                  |j                  |      }	t        |j                  |j                  |j                  |j                  j                  j                  g       |j                  j	                         j                  | j                         j                  S )Nr  r  r   r  r   r   )r   rp  r  r  rG  reshaper  r   r   r    r  r  r  r  r  )r   rP  r   r   r  r  r  r   r  r  cut_atcut_idxr   r  r  s_localJOBTRANSATRANSBr"   rl   rP   rS  r  rI  s                   r#   	pinv_implzpinv_impl.<locals>.pinv_implD  sh   N GGBKGGBKQ%a(6Q!V66<<>))!''2444Aq	HHeQZqww/HHU'*XXq%j0KKHHHHII
 	.a0 1uAtf}AaDy!  	1 61XwA!!Q$x!A$Bq!tH ( 
 7^A$uA1g/AadG & $ JJIIHHKKKK
0 	dii!&&!&&#((II 	vv||~%%agg.000r%   gV瞯<)r0   r~  rE   r    r  r  rZ   rl   r<   rP   r   r$   r   array)r   rP  r  dtrn  rk  rl  rm  r"   rl   rP   rS  r  rI  s        @@@@@@@@@r#   rn  rn  *  s    OF# QWW0!'':F!!&)GY--agg6N7''0L}QWWf-.D
c(C XFXF 
		QWW	%B88RD#D
((B4r
"CE1 E1N r%   c                     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 ]A  }t        j                  |||f         }||||f   |z  z  }|t        j                  |      z   }C ||fS )Ny                r   )r  r   r5  log)r   r   sgncsgnaccr   absels          r#   cmplx_diag_walkerz3_get_slogdet_diag_walker.<locals>.cmplx_diag_walker  si     9DC1XqAwqAw/BFF5M)  #;r%   c                     d}t        |       D ],  }|||f   }|dk  r| }| }|t        j                  |      z   }. |dz   |fS )Nr   )r  r   rt  )r   r   ru  rw  r   ro  s         r#   real_diag_walkerz2_get_slogdet_diag_walker.<locals>.real_diag_walker  sZ     C1XadGr6$CABFF1Io  "Hc?"r%   )r~   r    r   ry  r   )r   ry  r{  s      r#   _get_slogdet_diag_walkerr|    sJ     !''5==)		 
	 ! 	
	# 

	#  r%   c                 X   t                t        | d       t               j                  | j                        t        t        | j                  d            t        |       | j	                  d       t        | j                  d| j                        d      fd}|S )Nslogdetr   rB   r   c                    | j                   d   }| j                   d   |k7  r!d}t        j                  j                  |      |dk(  r	fS t	        |        t        |       }t        j                  |t              } |||j                  ||j                        }|dkD  rdt        j                   fS t        |       d}t        |      D ]  }|||   |dz   k7  z   } |dz  }|dk(  rd}t        |j                  g        
|||      S )Nr  r  r  r   r  r   r   )r   r   rm  rn  rp  r  r   r  r  infr  r  r  r  )r   r   r}  r  r  r  ru  r   ONEZEROdiag_walkerr"   r]   s           r#   slogdet_implz"slogdet_impl.<locals>.slogdet_impl  s
   GGBK772;!BC))'',,6;Q%a(xx.$1dkk1dkkBq5=  qAaQU+,C  Ag!8C 	dii[)1dC((r%   )	r0   r~  rZ   r]   r    r   r$   r|  rE   )r   r  r  r  r  r"   r]   s     @@@@@r#   r  r    s    OI&I++AGG4M}QWWi01D*1-K
''!*C87177.8;D') ')R r%   c                 8    t                t        | d       d }|S )Ndetc                 v    t         j                  j                  |       \  }}|t        j                  |      z  S r2   )r   rm  r~  exp)r   ru  r~  s      r#   det_implzdet_impl.<locals>.det_impl4  s-    **1-gRVVG_$$r%   r0   r~  )r   r  s     r#   r  r  -  s     OE"% Or%   c                     t         )z)
    Compute singular values of *a*.
    r  r  s    r#   _compute_singular_valuesr  ;  r  r%   c                   	 t               j                  | 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  rB   r  r  c                    | j                   d   }| j                   d   }|dk(  s|dk(  rt        j                  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   rm  rn  rp  r  r  r   r  r  r  r  )r   r   r   r  r  r  r  r  r   r  JOBZ_Nr"   np_ret_typerl   r  r  s             r#   sv_functionz2_compute_singular_values_impl.<locals>.sv_functionW  s     GGBKGGBK6Q!V))''(@AAQAq	 %a(
 HHU+.KKHHHHII
 	.a0 	dii!&&!&&ABr%   )
rZ   rl   r    r   r$   rE   r  r  r   r   )
r   nb_ret_typenp_dtyper  r  r"   r  rl   r  r  s
       @@@@@@r#   _compute_singular_values_implr  B  s    
 Y--agg6N}QWWe,-D XF!''#5qww?K%%k2K""177+H 	x(A	&	)B- -^ r%   c                     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                  | j                        t        t        | j                  d            fd}|S )NrB   normc                 @   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     Fhht;/!))A,+,HHJJ
 q51
 	chh/01vr%   )rE   r    r  r  r<   rC   r   r$   )r   r  r   r"   r  r  s      @@@r#   _oneD_norm_2_implr    sa    !''#5qww?K%%k2KW!!!''*F}QWWf-.D0 Kr%   c                   	
 t        | j                  d| j                        }t        j                  |      }t        j                  | j                        }t	               j                  | j                        }t        t        | j                  d            }| j                  dk(  r |d t        j                  fv rdd}|S dd}|S | j                  dk(  r|d t        j                  fv rL| j                  dk(  rt        d        	n(| j                  d	k(  rt        d
        	nt        d        	d	fd	}|S t        j                  |j                        j                   
d
fd	}|S J )NrB   r  r   c                     t        |       S r2   )r  rE  r   s     r#   r  z!_get_norm_impl.<locals>.oneD_impl  s    #A&r%   c                 l   t        |       }|dk(  ry|dk(  rt        |       S |t        j                  k(  r7t	        | d         }t        d|      D ]  }t	        | |         }||kD  s|} |S |t        j                   k(  r7t	        | d         }t        d|      D ]  }t	        | |         }||k  s|} |S |dk(  r"d}t        |      D ]  }| |   dk7  s|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  r5  r  )rE  r   r   r  r   r8   s         r#   r  z!_get_norm_impl.<locals>.oneD_impl  s[   F 6 !8'?*BFF]ad)C"1a[!!A$i9"%C ) JRVVG^ad)C"1a[!!A$i9"%C ) JAXC"1XQ42:2IC & JAXC"1Xs1Q4y( &J C"1Xs1Q4y#~- &c?*r%   r  ry   c                     | S r2   rX   rE  s    r#   array_preparez%_get_norm_impl.<locals>.array_prepare	  s    Hr%   r   c                     | j                   S r2   )r  r  s    r#   r  z%_get_norm_impl.<locals>.array_prepare	  s     33Jr%   c                 "    | j                         S r2   rI  r  s    r#   r  z%_get_norm_impl.<locals>.array_prepare 	  s    668Or%   c                 l    | j                   }|dk(  ry |       }t        |j                  |            S )Nr   r   )r  r  rg  )rE  r   r   x_cr  s       r#   r  z!_get_norm_impl.<locals>.twoD_impl&	  s3    FF6#A&#CKKN33r%   c                 ,   | j                   d   }| j                   d   }| j                  dk(  ry|t        j                  k(  rAd}t	        |      D ]/  }d}t	        |      D ]  }|t        | ||f         z  } ||kD  s.|}1 |S |t        j                   k(  rA	}t	        |      D ]/  }d}t	        |      D ]  }|t        | ||f         z  } ||k  s.|}1 |S |dk(  rAd}t	        |      D ]/  }d}t	        |      D ]  }|t        | ||f         z  } ||kD  s.|}1 |S |dk(  rA	}t	        |      D ]/  }d}t	        |      D ]  }|t        | ||f         z  } ||k  s.|}1 |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  r5  r  r  )
rE  r   r   r   
global_maxiitmpjj
global_minmax_vals
            r#   r  z!_get_norm_impl.<locals>.twoD_impl1	  s   GGBKGGBK 66Q;"&&= "$J#Ah "'(B3qRy>1C #++),J ' &%RVVG^ ")J#Ah "'(B3qRy>1C #++),J ' &%AX "$J#Ah "'(B3qRy>1C #++),J ' &%BY ")J#Ah "'(B3qRy>1C #++),J ' &% AX3A6q99BY3A6r:: %%GHHr%   r2   )rE   r    r  r  r<   rC   r   r$   r!  r   r   r{   r   r   finforw  rN  )rE  ord_flagr  r  r  r  r"   r  r  r  r  s            @@r#   _get_norm_implr    sT    !''#5qww?K%%k2K""177+HW!!!''*F}QWWf-.Dvv{ ejj))'x s8+r 	
1 ejj)) xx3! "S! " "$ "$
4` O hh{//044GDIJ qr%   c                 F    t                t        | d       t        | |      S )Nr  )r0   r  r  r  s     r#   	norm_implr  {	  s    O F+!S!!r%   c                 :    t                t        | d       dd}|S )Ncondc                    |dk(  s|dk(  s|Lt        |       }|dk(  s|t        j                  |d   |d         }nt        j                  |d   |d         }nbt        j                  j	                  | |      }t        j                  j	                  t        j                  j                  |       |      }||z  }t        j                  |      rt        j                  S |S )Nr  r  r   r  )r  r   dividerm  r  r  isnanr  )rE  pr   r  norm_x
norm_inv_xs         r#   r   zcond_impl.<locals>.impl	  s    & 6Q"W	(+AAvIIadAbE*IIaeQqT*YY^^Aq)F		a(8!<J#A 88A;66MHr%   r2   r  )rE  r  r   s      r#   	cond_implr  	  s    OF##H Kr%   c                 \    d}t        t        |             D ]  }| |   |kD  r|dz   } |S  |S )zJ
    Gets rank from singular values with cut-off at a given tolerance
    r   r   r  r  )svr   rS  r   s       r#   _get_rank_from_singular_valuesr  	  s>    
 D3r7^a519!8DK 
 Kr%   c                 R    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 r]t        | j                  d| j                        }t	        j
                  |      }t        j                  |      j                  dfd	}|S dd}|S )NrB   c                     t        |       }| j                  d   }| j                  d   }t        ||      }|d   |z  z  }t        ||      S )Nr   r   )r  r   rN  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	  sQ    ,Q/GGAJGGAJ1IaD1Hw&5a;;r%   c                 0    t        |       }t        ||      S r2   )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%   r2   )	r   r   rE   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	  sk     4$$agg'9177CG ))'2Ghhw'++G< %$> )(r%   c                 R    | j                   }|dk(  rdd}|S |dk(  r	 | |      S J )Nr   c                 J    t        t        |             D ]  }| |   dk7  s y y)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'    s1vAtrz  ' r%   r  r2   ra  )r  r  r!  r  r  s       r#   _get_matrix_rank_implz/matrix_rank_impl.<locals>._get_matrix_rank_impl	  s9    vv19
 ('QY'3//1r%   )r0   r  )r  r  r  r  s      @r#   matrix_rank_implr  	  s-     O M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(  rGt        j                  | j                  
      }t        | j                  d         D ]	  }d|||f<    |S | j                  d   | j                  d   }}||k7  rt	        d      |dk(  r| j                         S |dk  r8t         j                  j                  |       j                         }|dk(  r|S | }n|dk(  r| j                         S | }|dk  rK|d	k(  rt        j                  ||      S |d
k(  r*t        j                  t        j                  ||      |      S y |}|}|}d}	|dk7  rC|dz  r|	r|}d}	nt        j                  ||      }t        j                  ||      }|dz	  }|dk7  rC|S )Nr   r  r   r  r  zinput must be a square arrayr      r     TF)	r   r   r   r  r  r   rm  r  r   )r   r   r  r   r   r+  rw  r  r  flagr  s             r#   matrix_power_implz,matrix_power_impl.<locals>.matrix_power_impl
  s   6 1A1771:&!Q$ 'HaggbkB8;<< 7668O q5		a %%'ABwAAvvvxAq5Avvva|#AvvvbffQlA..  CC C D(7!$ ffS#.ffS#&Qh ( Jr%   )	r~  r  r  r    rE   r~   r   Integerr   )r   r   ntr  r  s       @r#   r  r  
  sY     N+""177+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rz  z!integer argument expected, got %sc                    | j                   \  }}|}|dk  r||z   }|dkD  r||z
  }t        t        ||      d      }d}|dk\  rt        |      D ]  }|| |||z   f   z  } |S t        |      D ]  }|| ||z
  |f   z  } |S r   )r   rN  r  r  )r   offsetrowscolsr   r   r  r  s           r#   matrix_trace_implz,matrix_trace_impl.<locals>.matrix_trace_impl]
  s    WW
dq5!8Dq5!8DD$#61XqAE{" 
 
 1XqQ{" 
r%   r   )r~  r~   r   r   r  r   )r   r  r  s      r#   r  r  R
  sA     Gu5fsEMM23@6IJJ" r%   c                     |rdnd}||f}t        | t        j                        r | j                  dk  st	        d|z  d      y y )Nrr  r   r  r  Frs  )r~   r   r   r!  r   r  s        r#   _check_scalar_or_lt_2d_matr  q
  sS    %[4Fi F!U[[!vv{K &'5:< <  "r%   c                 &   t        j                  |       }t        j                  |      }t        j                  |j                         j	                  |j
                  df      |j                         j	                  d|j
                  f            S r  r   asarraymultiplyrG  rg  r  r   r   r   aabbs        r#   outer_impl_noner  {
  sd    	AB	AB;;rxxz))277A,7
**Arww<8: :r%   c                 ,   t        j                  |       }t        j                  |      }t        j                  |j                         j	                  |j
                  df      |j                         j	                  d|j
                  f      |       |S r  r  r  s        r#   outer_impl_arrr  
  si    	AB	ABKK
""BGGQ<0
""Arww<0 Jr%   c                 B    |d t         j                  fv rt        S t        S r2   )r   r   r  r  )r   r   r   s      r#   _get_outer_implr  
  s    
tUZZ  r%   c                 f    t        | dd       t        |dd       t        | ||      dfd	}|S )NouterFr  c                      | ||      S r2   rX   )r   r   r   r   s      r#   
outer_implzouter_impl.<locals>.outer_impl
  s    Aq#r%   r2   )r  r  )r   r   r   r  r   s       @r#   r  r  
  s8     q'U;q'U;1a%D r%   c                    t        | t        j                        r]| j                  dvr$t	        dj                  | j                              | j                  dk(  rt        d        }|S t        d        }|S t        d        }|S )N)ry   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   }| j                  ||      S )Nr  r  r   rg  )rE  xnxms      r#   	nrm_shapez(_kron_normaliser_impl.<locals>.nrm_shape
  s-    WWR[WWR[yyR((r%   c                 D    | j                   d   }| j                  d|      S )Nr  r   r  )rE  r  s     r#   r  z(_kron_normaliser_impl.<locals>.nrm_shape
  s     WWR[yyB''r%   c                 N    t        j                  dt        |             }| |d<   |S )Nr  r   )r   r   rw  )rE  r   s     r#   r  z(_kron_normaliser_impl.<locals>.nrm_shape
  s$    a)AAaDHr%   )r~   r   r   r{   r   formatr!  r   )rE  r  s     r#   _kron_normaliser_implr  
  s    !U[[!88:% --3VAHH-=? ? VVq[) ) ( ( 		 
	 r%   c                 B   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 r2   rX   r   r   r   s      r#   r  z_kron_return.<locals>.ret
  s    r%   c                 8    |j                  |j                        S r2   )rg  r  r  s      r#   r  z_kron_return.<locals>.ret
  s    yy((r%   c                 8    |j                  | j                        S r2   rg  r   r  s      r#   r  z_kron_return.<locals>.ret
      yy))r%   c                 8    |j                  |j                        S r2   r	  r  s      r#   r  z_kron_return.<locals>.ret
  r
  r%   c                     |d   S r   rX   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66Q;!&&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 ]N  }||z  }t        |      D ]9  }||z   }||d d f   }t        |      D ]  }||z  }|||f   |z  |
||||z   f<    ; P  | ||
      S )Nr  r  r  )r   r   r   r  )r   r   r  r  r   r+  r!  r-  cmcnry   r  rjmpr   irjmpslcr  cjmprq  fix_afix_bret_cs                     r#   	kron_implzkron_impl.<locals>.kron_impl
  s    1X1XXXb\XXb\XXb\XXb\"W"W HHb"XR( rAr6D2YqAhrA r6D/1!Q$x#~AeT$)^+, # 	 " Q1~r%   )r  r  r  rE   )r   r   r  rq  r  r  r  s      @@@@r#   r  r  
  s[     q&E:q&E:!!$E!!$EAE 
GQ	B&P r%   )z<BLAS function>)F)Tr  rV  ro  r2   r  )rV   
contextlibr*  llvmliter   numpyr   operatornumba.core.imputilsr   r   r   r   numba.core.typingr   numba.core.extendingr	   r
   r   
numba.corer   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_prO  r  r_   float32rt   	complex64
complex128r   r$   r,   r0   r:   r<   rZ   contextmanagerr   r   r   r   r   r   r   r   r   r   r
  r   r  matmulr  r  r2  r4  r6  rN  r\  rg  rJ   rF   r  rp  r~  r  r  r  r  r  rm  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r%  r'  r.  r0  r?  rB  rJ  rL  rU  r[  r_  ra  rc  re  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  r  r  r  r  r  rX   r%   r#   <module>r2     s  
     J J ' F F %  < < 0
"**Q- 		
"**R. 			 xx{{ 
MM3	MM3	OOS	c	HH5
&; &;R`: `:F - -0F	A	C-,"-J/-dD D D 6 
"&&/ / 
(//* *)6X 
"''6 6<@@6.rV.r 
"&& @  @F *5))*=zuzz|L  8 83*7	 

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

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

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

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

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

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

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