Ë
    üÇ:jàf ã                   ó  — d Z ddlZddlZddlmZ ddlZddlZddlm	Z	m
Z
mZmZ ddlmZ ddlmZmZmZ ddlmZmZmZ ddlmZmZmZ d	d
lmZmZmZ ddlm Z!  ejD                  d«      Z#e#jI                  «       Z%e%Z& ejD                  d«      Z'e'jI                  «       Z(ejR                  Z)e)jI                  «       Z*ejV                  Z,ejV                  Z-ej\                  dej^                  dej`                  dejb                  diZ2dgd„Z3d„ Z4d„ Z5d„ Z6 G d„ d«      Z7 G d„ d«      Z8ejr                  d„ «       Z:d„ Z;d„ Z<d„ Z=d„ Z>d„ Z?d „ Z@d!„ ZAd"„ ZBd#„ ZCdhd$„ZD eejŠ                  «      d%„ «       ZF eejŽ                  «      d&„ «       ZHd'„ ZI eej”                  «      d(„ «       ZJd)„ ZKd*„ ZLd+„ ZMd,„ ZN eejŠ                  «      d-„ «       ZO ej                   d. ej¢                  «       «      ZRed/„ «       ZSdid0„ZTd1„ ZUd2„ ZV eeV«      d3„ «       ZWed4„ «       ZXed5„ «       ZY eej´                  j¶                  «      d6„ «       Z\ed7„ «       Z]did8„Z^ eej´                  j¾                  «      d9„ «       Z` eej´                  jÂ                  «      d:„ «       Zb eej´                  jÆ                  «      d;„ «       Zd eej´                  jÊ                  «      d<„ «       Zf eej´                  jÎ                  «      d=„ «       Zh eej´                  jÒ                  «      djd>„«       Zj eej´                  jÖ                  «      d?„ «       Zld@„ Zm eem«      dA„ «       ZndB„ Zo eeo«      dC„ «       ZpdD„ Zq eeq«      dE„ «       ZrdF„ Zs ees«      dG„ «       ZtdH„ Zu eeu«      dI„ «       ZvdJ„ Zw eew«      dK„ «       Zx eej´                  jò                  «      dkdL„«       ZzdM„ Z{ ee{«      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„ «       Z…dT„ Z† ee†«      dU„ «       Z‡dV„ Zˆ eeˆ«      dW„ «       Z‰dX„ ZŠ eej´                  �j                  «      dmdY„«       ZŒ eej´                  �j                  «      dmdZ„«       ZŽed[„ «       Z� eej´                  �j                   «      dmd\„«       Z‘ eej´                  �j$                  «      d]„ «       Z“ ee�j(                  «      dnd^„«       Z•did_„Z–ed`„ «       Z—eda„ «       Z˜db„ Z™ ee�j4                  «      dmdc„«       Z›dd„ Zœde„ Z� ee�j<                  «      df„ «       ZŸy)oz.
Implementation of linear algebra operations.
é    N)Úir)Úlower_builtinÚimpl_ret_borrowedÚimpl_ret_new_refÚimpl_ret_untracked)Ú	signature)Ú	intrinsicÚoverloadÚregister_jitable)ÚtypesÚcgutilsÚconfig)ÚTypingErrorÚNumbaTypeErrorÚNumbaPerformanceWarningé   )Ú
make_arrayÚ_empty_nd_implÚ
array_copy)Únumpy_supporté   é    ÚsÚdÚcÚzc                 óR   — t         j                  | «      }|€t        d|›d�«      ‚|S )Nzunsupported dtype for z())Ú_blas_kindsÚgetr   )ÚdtypeÚ	func_nameÚkinds      úd/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/numba/np/linalg.pyÚget_blas_kindr$   0   s(   € Ü�?‰?˜5Ó!€DØ€|ÝºYÐHÓIÐIØ€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Ü×$Ñ$ W¨eÓ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`   € ä˜Ð1°5Ó9ˆÜ�j‰jœŸ™ÜŸ™ÜŸ™¨Ó.ÜŸ™ÜŸ™¨Ó.ó	0ˆô ×%Ñ% n°cÓ:Ð: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    € ä�j‰jÜ�J‰JÜ�J‰JÜ�J‰JÜ�J‰JÜ�J‰JÜ�J‰JÜ�N‰N˜5Ó!Ü�N‰N˜5Ó!Ü�J‰JÜ�N‰N˜5Ó!Ü�J‰JÜ�N‰N˜5Ó!Ü�N‰N˜5Ó!Ü�J‰Jó
ˆô  ×%Ñ% n°cÓ:Ð: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   € ä�j‰jœŸ™ÜŸ™ÜŸ™ÜŸ™¨Ó.ÜŸ™ÜŸ™¬Ó5óˆô ×%Ñ% o°sÓ;Ð;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   € ä�j‰jœŸ™ÜŸ™ÜŸ™¨Ó.ÜŸ™ÜŸ™¬Ó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’   € ä�j‰jœŸ™ÜŸ™ÜŸ™ÜŸ™ÜŸ™¨Ó.ÜŸ™ÜŸ™¨Ó.ÜŸ™¨Ó.ÜŸ™¨Ó.ÜŸ™ÜŸ™¨Ó.ÜŸ™óˆô ×%Ñ%Ð&6¸Ó<Ð<r%   c                 óÈ  — t        j                  t         j                  t         j                  t         j                  t         j                  t        j                  |«      t         j                  t        j                  |«      t        j                  |«      t         j                  t        j                  |«      t         j                  «      }t        j
                  d|«      S )NÚnumba_ez_cgeevrQ   rR   s      r#   re   z_LAPACK.numba_ez_cgeev¢   s†   € ä�j‰jœŸ™ÜŸ™ÜŸ™ÜŸ™ÜŸ™¨Ó.ÜŸ™ÜŸ™¨Ó.ÜŸ™¨Ó.ÜŸ™ÜŸ™¨Ó.ÜŸ™óˆô ×%Ñ%Ð&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   € ä˜Ð1°5Ó9ˆÜ�j‰jœŸ™ÜŸ™ÜŸ™ÜŸ™ÜŸ™¨Ó.ÜŸ™ÜŸ™¨Ó.óˆô ×%Ñ%Ð&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   € ä�j‰jœŸ™ÜŸ™ÜŸ™ÜŸ™¨Ó.ÜŸ™ó	ˆô ×%Ñ% o°sÓ;Ð;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–   € ä˜Ð1°5Ó9ˆÜ�j‰jÜ�J‰JÜ�J‰JÜ�J‰JÜ�J‰JÜ�N‰N˜5Ó!Ü�J‰JÜ�N‰N˜5Ó!Ü�N‰N˜5Ó!Ü�J‰JÜ�N‰N˜5Ó!Ü�J‰Jó
ˆô ×%Ñ%Ð&6¸Ó<Ð<r%   c           
      ó  — t        j                  t         j                  t         j                  t         j                  t        j                  |«      t         j                  t        j                  |«      «      }t        j
                  d|«      S )NÚnumba_ez_geqrfrQ   rR   s      r#   ro   z_LAPACK.numba_ez_geqrfÜ   sZ   € ä�j‰jÜ�J‰JÜ�J‰JÜ�J‰JÜ�N‰N˜5Ó!Ü�J‰JÜ�N‰N˜5Ó!ó
ˆô ×%Ñ%Ð&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   € ä�j‰jÜ�J‰JÜ�J‰JÜ�J‰JÜ�J‰JÜ�N‰N˜5Ó!Ü�J‰JÜ�N‰N˜5Ó!ó
ˆô ×%Ñ%Ð&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š   € ä˜Ð1°5Ó9ˆÜ�j‰jÜ�J‰JÜ�J‰JÜ�J‰JÜ�J‰JÜ�N‰N˜5Ó!Ü�J‰JÜ�N‰N˜5Ó!Ü�J‰JÜ�N‰N˜5Ó!Ü�M‰MÜ�N‰Nœ5Ÿ:™:Ó&ó
ˆô ×%Ñ%Ð&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   € ä�j‰jÜ�J‰JÜ�J‰JÜ�J‰JÜ�N‰N˜5Ó!Ü�J‰JÜ�N‰Nœ<Ó(Ü�N‰N˜5Ó!Ü�J‰Jó	
ˆô ×%Ñ% m°SÓ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Ü�s—x‘x Ó&ò 	‰ˆˆCÜ˜"œeŸk™kÔ*¨b¯i©i¸4Ñ.?Ø �6‰Eà—G‘G 3�GÓ'ˆEÜ  rÓ*ˆGÜ ¨°'¸C¸6ÓBˆFØ�M‰M˜5 &˜/Ô*Ø�‰�eÔØ�‰�vÕð	ô �C—O‘OÐ
- fÒ
-¬u°W«~Ð
=Ò=Øò -‰ˆˆCØ�‰×Ñ˜7 B¨Õ,ñ-ù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ð ×Ñ˜W dÜ&¤u§z¡z´5·:±:Ó>ÀÀõ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¢   =  se   € ð
 
�‰œ×,Ñ,¨W°cÓ:À5ˆÓ	Iñ Aà×&Ñ& wÓ/ˆØ×ÑÔØ×ÑÐ?Ô@÷	A÷ Añ Aúó   ¨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  se   € ð
 
�‰œ×,Ñ,¨W°cÓ:À5ˆÓ	Iñ Cà×&Ñ& wÓ/ˆØ×ÑÔØ×ÑÐAÔB÷	C÷ Cñ Cúr£   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›>Ü#¤W¬fÜ%¤y´)ðó€Dô 
×	'Ñ	'¨¯©¸¸mÓ	L€Bä˜Ó€DÜ�{‰{œ7¤C¨£IÓ.€HÜ—‘œG¤S¨£^Ó4€Ià
�,‰,�r˜H i°Ø#ŸO™O¨F´IÓ>Ø#ŸO™O¨F´IÓ>Ø#ŸO™O¨H´iÓ@ðBó C€Cô �g˜w¨Õ,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Ó	M€Bà�L‰L€EÜ˜w¨°¸Ó<€EÜ˜g w°°sÓ;€Dà‡}�}˜ÒØ‰ˆˆ1Ø�q‰k‰à‰ˆˆ1Ø�q‰kˆä˜Ó€DÜ�{‰{œ7¤C¨£IÓ.€HÜ�K‰Kœ©X¤ S¤¼3¸s»8ÓD€Eà
�,‰,�r˜H e¨Q°Ø#ŸO™O¨E´9Ó=Ø#ŸO™O¨F´IÓ>ÀØ#ŸO™O¨F´IÓ>Ø#ŸO™O¨D´)Ó<Ø#ŸO™O¨H´iÓ@ðBó C€Cô �g˜w¨Õ,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   ø€ ð —y‘y H§O¡OÒ3‰G¸àŸ™ cÒ)ˆF�1ŠI¨v°a©yà�O‰O˜D¤)Ó,ð
ð 	
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Ü"¤F¬FÜ%¤y´&Ü%¤v¬yÜ%¤vðó€Dô 
×	'Ñ	'¨¯©¸¸nÓ	M€Bà�D€A€qØ�E€BˆØ�L‰L€EÜ˜w¨°¸Ó<€EÜ˜g w°°sÓ;€Dä�K‰Kœ¤ S£Ó*€EÜ�k‰kœ'¤3 s£8Ó,€G÷
ñ *¨&°(¸FÓCÑ€FˆC�Ù)¨&°(¸FÓCÑ€FˆC�Ù$ X¨z¸8ÓD�N€A€sˆFä˜Ó€DÜ�{‰{œ7¤C¨£IÓ.€Hà
�,‰,�r˜H f¨f°a¸¸AØ#ŸO™O¨E´9Ó=¸vÀsØ" C¨¯©¸¼yÓ)IØ" Cð)ó *€Cô �g˜w¨Õ,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   € Ø�w‰w‰ˆˆ1Ø—‘‰ˆˆAØ�Š6Ü—8‘8˜Q ˜F A§G¡GÓ,Ð,Ü�h‰h˜˜1�v˜qŸw™wÓ'ˆÜ�v‰v�a˜˜CÓ Ð r%   ©r“   r   r‚   ©r5   r6   rN   r}   rò   r    s         r#   Údot_2_mmrõ   Â  ó4   € ò!ð ×
"Ñ
" 7¨H°c¸4Ó
@€CÜ˜G W¨c¯o©o¸sÓ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   € Ø�W‰W‰ˆØ—‘‰ˆˆAØ�Š6Ü—8‘8˜Q˜E 1§7¡7Ó+Ð+Ü�h‰h˜�u˜aŸg™gÓ&ˆÜ�v‰v�a˜˜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   € Ø�w‰w‰ˆˆ1Ø�g‰g‰ˆØ�Š6Ü—8‘8˜Q˜E 1§7¡7Ó+Ð+Ü�h‰h˜�u˜aŸg™gÓ&ˆÜ�v‰v�a˜˜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   € Ø�W‰W‰ˆØ�W‰W‰ˆØ�Š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é   € ð
 �x‰x�H€CˆØ�O‰O€EØŒ
�3‹˜ ¨$¨q©'Ó2€AØŒ
�3‹˜ ¨$¨q©'Ó2€AÜ	×	Ñ	˜g q§w¡wÓ	/�B€Aò2ð ×Ñ˜W jÜ&¤u§z¡zÐ=°C·H±HÒ=¸tôEä�˜ !Ô$ä
×
Ñ
˜g w×'=Ñ'=¸eÓ'DÓ
E€CÜˆw˜ ¨E°1°a·f±f¸a¿f¹fÀcÔJØ�<‰<˜ÓÐr%   c                 ó   — t        d| |«      S )z
    np.dot(a, b)
    znp.dot()©Ú
dot_2_impl©rï   rð   s     r#   Údot_2r    s   € ô
 �j ! QÓ'Ð'r%   c                 ó   — t        d| |«      S )z
    a @ b
    z'@'r  r  s     r#   Úmatmul_2r    s   € ô
 �e˜Q Ó"Ð"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»   ø€ Ü”ä$ W¨g°s¸DÓAð 
<Á[ÀcÈ4Ø ’Ü'¨°¸#¸tÓD÷
<ñ 
<ð  &šÜ'¨°¸#¸tÓD÷	
<ñ 
<ð
  &šÜ'¨°¸#¸tÓD÷
<ñ 
<ð  &šÜ'¨°¸#¸tÓD÷
<ñ 
<ô -¨]Ó;Ð;÷
<ð 
<ús"   š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Ã   ù€ à—V‘V˜QŸV™VÐ$ˆEô<ð �w‰w˜!Ÿ'™'Ò!Ü!Ø?À$ÑFóHð Hð ˜ŠÜ#Ÿk™k¨!¯'©'°1°cÓ:‘Ø˜&’ E¨V¢OÜ#Ÿk™k¨!¯'©'°1°cÓ:‘Ø˜&’ØŸg™g‘ä!ð $0Ø37ñ#8ó 9ð 9ä˜[¨!¨QÓ/°Ð>Ð>r%   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  s   ø€ ™E ! Q›K€ r%   ©r~   r   r   r	   r{   ÚwarningsÚwarnr   )r!  rï   rð   r"  s   `  @r#   r  r    sy   ù€ Ü�!”U—[‘[Ô!¤j°´E·K±KÔ&@Ü	ó	?ó 
ð	?ðB �8‰8˜4Ñ 1§8¡8°4Ñ#7Ü�M‰Mâ˜1˜a™&ð#Ü$;ô=ó (Ð'ðQ 'AÐ!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  sE   € Ü”ä$ W¨g°s¸DÓAð QÙ#˜˜dÜ# G¨W°c¸4È4ÔP÷Q÷ Qò Qús   ™6¶?r   z&np.vdot() only supported on 1-D arraysz0np.vdot() arguments must all have the same dtype)r  r   r    r   )r   ÚleftÚrightr+  s       r#   r"  zvdot.<locals>._implO  se   € òQð �y‰y˜AŠ~ §¡¨q¢Ü!Ð"JÓKÐKà�z‰z˜UŸ[™[Ò(Ü!ØFóHð Hä˜TŸZ™Z¨¨uÓ5°wÐ>Ð>r%   rx   ú4np.vdot() is faster on contiguous arrays, called on c                 ó   •—  ‰| |«      S r2   rX   ©r,  r-  r"  s     €r#   r$  zvdot.<locals>.<lambda>e  s   ø€ ¡5¨¨uÓ#5€ r%   Nr%  r0  s     @r#   Úvdotr1  I  sw   ø€ ô
 �$œŸ™Ô$¬°E¼5¿;¹;Ô)GÜ	ñ	?ó 
ð	?ð  �;‰;˜dÑ" e§l¡l¸$Ñ&>Ü�MŠMà˜%‘=ð#Ü$;ô=ó 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_argsr3  h  sZ   € Ø	
�‰�B€AØ�G‰G�E€BˆØˆB‚wÜð :ó ;ð 	;à
‡y�y�Q�DÒÜð ?ó @ð 	@ð 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_argsr5  s  sZ   € Ø�G‰G�E€A€rØ	
�‰�B€AØˆB‚wÜð -ó .ð 	.à
‡y�y�Q�DÒÜð ?ó @ð 	@ð 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Ð   r3  r5  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_vmrM  ~  s°  € ð
 —h‘h�O€CˆˆeØ�C—O‘OÒ#Ð#Ð#Ø�I‰I€EàŒ
�3‹˜ ¨$¨q©'Ó2€AØŒ
�3‹˜ ¨$¨q©'Ó2€AØ
Œ*�UÓ
˜G W¨d°1©gÓ
6€CÜ×#Ñ# G¨Q¯W©WÓ5€HÜ×#Ñ# G¨Q¯W©WÓ5€HÜ×%Ñ% g¨s¯y©yÓ9€JØ
‡x�x�#—(‘(Òð ˆØˆØ˜1‘+ˆØ�q‰kˆØ—:‘: Ñ$ˆØŸ™ §¡�ˆÜ(‰
ð ˆØˆØ˜1‘+ˆØ�q‰kˆØ—:‘: Ñ$ˆØŸ™ §¡�ˆÜ(ˆ
à×Ñ˜W jÜ&¤u§z¡zÐ=°C·H±HÒ=¸tôEàò +ˆÜ�G˜W cÕ*ð+ð ×Ñ¤§
¡
¨AÓ.€DØ×$Ñ$ T¨7°DÓ9€JØ×&Ñ& t¨S°$Ó7€LØ�{‰{˜: |Ó4€HØ	�‰˜¨%ˆÓ	0ð *Ñ4E°U¸HØñ 	EÜ�N‰N˜7 C§H¡HØ"Ÿ;™; s§|¡|°S·Z±ZÓ@À!ôE÷	Eð ñ 	*Ü˜ ¨(°C¸À6Ø §¡ô*÷	*÷	*ô ˜W g¨s¯©Ø Ÿ]™]›_ó.ð .÷	Eð 	Eú÷	*ð 	*ú÷	*ð *ús=   È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_   € Ø�w‰w‰ˆˆ1Ø—‘‰ˆˆAØ�Š7Üð 1ó 2ð 2à�9‰9˜˜A˜ÒÜð Có Dð Dð r%   r7  Fr—   N)r}   r‚   r    r   r   r  rê   r{   r“   r   r   r”   r•   rÐ   r8  rH   r9  r:  r;  r<  r=  r>  r?  r»   rÌ   rå   r   r@  )'r5   r6   rN   r}   rA  rB  rC  r    rD  rE  rñ   rÕ   rØ   rÚ   rÉ   rÛ   rÜ   r�   r  rÖ   rÙ   r·   rH  rI  Úx_emptyÚy_emptyrK  rí   rL  ÚoneÚis_left_vecÚis_right_vecÚr_vecÚr_matÚv_vÚm_vrÂ   Úv_mÚm_ms'                                          r#   Údot_3_mmr[  ·  s  € ð —h‘h�O€CˆˆeØ�C—O‘OÒ#Ð#Ð#Ø�I‰I€EàŒ
�3‹˜ ¨$¨q©'Ó2€AØŒ
�3‹˜ ¨$¨q©'Ó2€AØ
Œ*�UÓ
˜G W¨d°1©gÓ
6€CÜ×#Ñ# G¨Q¯W©WÓ5€HÜ×#Ñ# G¨Q¯W©WÓ5€HÜ×%Ñ% g¨s¯y©yÓ9€JØ�D€A€qØ�E€Bˆð �<‰<˜3ÒÐÐòDð ×Ñ˜W jÜ&¤u§z¡zÐ=°C·H±HÒ=¸tôEô �˜ !Ô$Ü�˜ !Ô$Ü�˜ !Ô$à�V‰V€FØ�V‰V€FØ�x‰x€Hð ×Ñ¤§
¡
¨AÓ.€DØ×$Ñ$ T¨1¨dÓ3€JØ×!Ñ! $¨¨4Ó0€GØ×!Ñ! $¨¨4Ó0€GØ�{‰{˜: w§{¡{°7¸GÓ'DÓE€HØ	�‰˜¨%ˆÓ	0ð $EÑ4E°U¸HØñ 	EÜ�N‰N˜7 C§H¡HØ"Ÿ;™; s§|¡|°S·Z±ZÓ@À!ôE÷	Eð ñ  	Eð ×&Ñ&¤u§z¡z°1Ó5ˆCØ!×-Ñ-¨d°A°sÓ;ˆKØ"×.Ñ.¨t°Q¸Ó<ˆLà—‘ Ó.ð E±.°5¸%Øñ 
QØ Ÿ™¨Ó5ð 	Q¹¸#¸sØ ñ Dä& w°¸ÀØ'(¨&°&¸(ôD÷Dð !ñ Qà'*§z¡z°U·\±\Ñ'A˜HÜ'¨°¸(Ø(+¨X°v¸vÀxôQ÷Q÷	Q÷
Qð ñ EØ Ÿ™¨Ó5ð E¹¸#¸sØ ñ Qà'*§z¡z°U·\±\Ñ'A˜HÜ'¨°¸(Ø(+¨X°v¸vÀxôQ÷Qð
 !ñ Eä'¨°Ø(+¨X°vØ(+¨X°vØ(-¨z¸8ôE÷E÷E÷E÷E÷ 	E÷	$EôL ˜W g¨s¯©Ø Ÿ]™]›_ó.ð .÷K	Eñ 	Eú÷Dñ Dú÷Qð Qú÷	Qð 	Qú÷
Qð 
Qú÷Qð Qú÷
Eð Eú÷Eð Eú÷Eð Eú÷Eð Eú÷ 	Eð  	Eú÷	$Eð $Eús  Ç=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                  «      r�t        |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  )Ú.0rD  s     r#   ú	<genexpr>z8dot_3.<locals>._impl.<locals>.codegen.<locals>.<genexpr>  s   è ø€ Ò=¨1 §¥Ñ=ùs   ‚r  r   r  )r,   rŒ   Úsetr}   r[  rM  r  r  s        r#   r+  z%dot_3.<locals>._impl.<locals>.codegen  sž   € Ü”ä$ W¨g°s¸DÓAð <ñ FLÀcØFJÜÑ=°·±¸¸!°Ô=Ó=�EØ  ’|Ü'¨°¸#¸tÓD÷	<ñ <ð
  1 a &šÜ'¨°¸#¸tÓD÷<ñ <ô -¨]Ó;Ð;÷<ð <ús   ™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   € ò<ð �w‰w˜!Ÿ'™'Ò! Q§W¡W°·	±	Ò%9Ü!ØEóGð Gô ˜S ! Q¨Ó,¨gÐ5Ð5r%   rx   r.  c                 ó   •—  ‰| ||«      S r2   rX   ©rï   rð   rñ   r"  s      €r#   r$  zdot_3.<locals>.<lambda>1  s   ø€ ¡ q¨!¨SÓ!1€ r%   Nr%  re  s      @r#   Údot_3rf    s˜   ø€ ô
 	�1”e—k‘kÔ"¤z°!´U·[±[Ô'AÜ�sœEŸK™KÔ(Ü	ñ	6ó 
ð	6ð& �8‰8˜4Ñ 1§8¡8°4Ñ#7¸3¿:¹:Øñ<ä�MŠMà�q‘6ðÜ4ô6ó 2Ð1ð7 )ð (BÐ"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_matrixro  7  sE   € ä�Y‰Y�q‹\ò 8ˆÜ�{‰{˜1Ÿ6™6›8Õ$Ü—)‘)×'Ñ'Ø6ó8ð 8ñ8r%   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±   € ñ &‰[¨4€FØ�iÐ €Fä�!”U—^‘^Ô$Ø�F‰FˆÜ�aœŸ™Ô%Ø6¸Ñ?ˆÜ˜#¨EÔ2Ð2Ø�6‰6�QŠ;Ø5¸Ñ>ˆÜ˜#¨EÔ2Ð2Ü�a—g‘g¤§¡¬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.Frr  )r    r   )r!   r   Út0rÁ   r|  s        r#   Ú_check_homogeneous_typesr€  T  sG   € Ø	ˆq‰�‰€BØ�1�2ˆYò 7ˆØ�7‰7�b‹=ØUÐXaÑaˆCÜ˜c°Ô6Ð6ñ7r%   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   ø€ Ùä—7‘7˜1“:ˆDð ˆñ à—W‘W×)Ñ)ˆFÙô —w‘w˜qŸs™s“|—~‘~�ð ˆô	 ×(Ñ(¨Ó+�ð ˆô ×$Ñ$ QÓ'ˆDØˆr%   rz   )rï   r’   rŒ  r�  s     @@r#   Úol_copy_to_fortran_orderrŽ  `  s+   ù€ ð �x‰x˜3‰€HØ�x‰x˜3‰€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ë   rl  rm  ©Úrs    r#   Ú_inv_err_handlerr“  |  sF   € àˆA‚vØˆqŠ5ÜÔØ�1ØˆqŠ5Ü—)‘)×'Ñ'Ø:ó<ð <ð ð	 r%   c                 ó   — | d   S )zFpass a list of variables to be preserved through dead code eliminationr   rX   ©rï   s    r#   Ú_dummy_liveness_funcr–  †  s   € ð ˆQ‰4€Kr%   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ë   rl  rm  ro  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Ê   ø€ Ø�G‰G�B‰KˆØ�7‰7�2‰;˜!ÒØBˆCÜ—)‘)×'Ñ'¨Ó,Ð,ä˜QÔä% aÓ(ˆà�Š6ØˆKä�x‰x˜¤Ô.ˆá˜$  1 d§k¡k°1°d·k±kÓBˆÜ˜Ôá˜$  4§;¡;°°4·;±;Ó?ˆÜ˜Ôô 	˜dŸi™i¨¯©Ð3Ô4Øˆr%   )r0   r}  rZ   r]   r    ra   r°   r$   )rï   r£  r"   r]   r¢  s     @@@r#   r£  r£  Œ  s_   ú€ ä„Oä˜˜EÔ"ä“I×+Ñ+¨A¯G©GÓ4€Mä“I×.Ñ.¨q¯w©wÓ7€MäŒ}˜QŸW™W eÓ,Ó-€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   € àˆA‚vØˆqŠ5ÜÔØ�1ØˆqŠ5ÜÐ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 )Nrq  rë   z'%s.%s() only supported for array types r  ú+%s.%s() only supported on 1 and 2-D arrays rt  )r~   r   r   r   r  r    rw  rx  ©rï   r!   ry  rz  r{  s        r#   Ú_check_linalg_1_or_2d_matrixr©  ¾  sœ   € ñ &‰[¨4€FØ�iÐ €Fä�aœŸ™Ô%ÜÐCØ"ñ#ó $ð 	$à�6‰6�QŠ;ÜÐGØ"ñ#ó $ð 	$ä�a—g‘g¤§¡¬U¯]©]Ð;Ô<Üð 6Ø8>ñ?ó @ð 	@ð =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ë   rl  rm  r€   rŸ  r�  Úrange)	rï   r�   r|  rñ   r’  ÚcolÚUPr"   rj   s	         €€€r#   Úcho_implzcho_impl.<locals>.cho_implÜ  sÐ   ø€ Ø�G‰G�B‰KˆØ�7‰7�2‰;˜!ÒØBˆCÜ—)‘)×'Ñ'¨Ó,Ð,ð �f‰f‹hˆà�Š6ØˆJñ ˜$  A s§z¡z°1Ó5ˆØ�Š6Ø�1ŠuÜ Ô"Ø�qØ�1ŠuÜ—i‘i×+Ñ+Ø6ó8ð 8ô ˜“8ò 	ˆCØˆC����c�	ŠNð	àˆ
r%   )r0   r}  rZ   rj   r    r°   r$   )rï   ÚLOr²  r±  r"   rj   s      @@@r#   r²  r²  Ð  s[   ú€ ä„Oä˜˜JÔ'ä“I×+Ñ+¨A¯G©GÓ4€MäŒ}˜QŸW™W jÓ1Ó2€DÜ	ˆ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ë   rl  rm  ro  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  ø€ ð �G‰G�B‰KˆØ�7‰7�2‰;˜!ÒØBˆCÜ—)‘)×'Ñ'¨Ó,Ð,ä˜QÔä% aÓ(ˆàˆØˆÜ�X‰X�a˜qŸw™wÔ'ˆÜ�X‰X�a˜qŸw™wÔ'ˆÜ�X‰X�q˜$�i q§w¡wÔ/ˆÜ�X‰X�q˜$�i q§w¡wÔ/ˆà�Š6Ø˜Ÿ™�:Ðá˜4Ø!Ø!ØØ ŸK™KØØŸI™IØŸI™IØŸI™IØ ØŸI™IØ ó"ˆô 	.¨aÔ0ô �6‰6�"Œ:ÜØ@óBð Bô
 	˜dŸi™i¨¯©°"·'±'¸2¿7¹7ÀBÇGÁGÐLÔMØ�B—D‘DˆzÐ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ë   rl  rm  ro  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&  ø€ ð �G‰G�B‰KˆØ�7‰7�2‰;˜!ÒØBˆCÜ—)‘)×'Ñ'¨Ó,Ð,ä˜QÔä% aÓ(ˆàˆØˆÜ�H‰H�Q˜aŸg™gÔ&ˆÜ�X‰X�q˜$�i q§w¡wÔ/ˆÜ�X‰X�q˜$�i q§w¡wÔ/ˆà�Š6Ø�r—t‘t�9Ðá˜4Ø!Ø!ØØ ŸK™KØØŸH™HØŸI™IØ ØŸI™IØ ó
"ˆô 	.¨aÔ0ô 	˜dŸi™i¨¯©°"·'±'¸1¿6¹6ÐBÔCØ�2—4‘4ˆyÐr%   ©r0   r}  rZ   rc   r    re   r°   r$   r~   r   Úscalarsrx  )rï   rÃ  rÇ  rÁ  rÂ  r"   re   rc   s      @@@@@r#   Úeig_implrÊ  ü  s—   ü€ ä„Oä˜˜EÔ"ä“Y×-Ñ-¨a¯g©gÓ6€NÜ“Y×-Ñ-¨a¯g©gÓ6€NäŒ}˜QŸW™W eÓ,Ó-€Dä�‹H€EÜ�‹H€E÷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ë   rl  rm  ro  r‚  rí   r    rŸ  r¥  r¹  r  r–  r   rº  s              €€€€r#   Úreal_eigvals_implz'eigvals_impl.<locals>.real_eigvals_impl}  sN  ø€ ð �G‰G�B‰KˆØ�7‰7�2‰;˜!ÒØBˆCÜ—)‘)×'Ñ'¨Ó,Ð,ä˜QÔä% aÓ(ˆàˆØˆÜ�X‰X�a˜qŸw™wÔ'ˆà�Š6ØˆIä�X‰X�a˜qŸw™wÔ'ˆô �X‰X�q §¡Ô)ˆÜ�X‰X�q §¡Ô)ˆá˜4Ø!Ø!ØØ ŸK™KØØŸI™IØŸI™IØŸI™IØ ØŸI™IØ ó"ˆô 	.¨aÔ0ô �6‰6�"Œ:ÜØDóFð Fô
 	˜dŸi™i¨¯©°"·'±'¸2¿7¹7ÀBÇGÁGÐ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ë   rl  rm  ro  r‚  rí   r    rŸ  r¥  r–  r   rÅ  s             €€€€r#   Úcmplx_eigvals_implz(eigvals_impl.<locals>.cmplx_eigvals_impl¸  s  ø€ ð �G‰G�B‰KˆØ�7‰7�2‰;˜!ÒØBˆCÜ—)‘)×'Ñ'¨Ó,Ð,ä˜QÔä% aÓ(ˆàˆØˆÜ�H‰H�Q˜aŸg™gÔ&ˆà�Š6ØˆHä�X‰X�q §¡Ô)ˆÜ�X‰X�q §¡Ô)ˆá˜4Ø!Ø!ØØ ŸK™KØØŸH™HØŸI™IØ ØŸI™IØ ó
"ˆô 	.¨aÔ0ô 	˜dŸi™i¨¯©°"·'±'¸1¿6¹6ÐBÔCØˆr%   rÈ  )rï   rÎ  rÐ  rÁ  rÂ  r"   re   rc   s      @@@@@r#   Úeigvals_implrÑ  o  s—   ü€ ä„Oä˜˜IÔ&ä“Y×-Ñ-¨a¯g©gÓ6€NÜ“Y×-Ñ-¨a¯g©gÓ6€NäŒ}˜QŸW™W iÓ0Ó1€Dä�‹H€EÜ�‹H€E÷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ë   rl  rm  ro  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¾   ø€ Ø�G‰G�B‰Kˆà�7‰7�2‰;˜!ÒØBˆCÜ—)‘)×'Ñ'¨Ó,Ð,ä˜QÔä% aÓ(ˆä�H‰H�Q˜gÔ&ˆà�Š6Ø�t�9Ðá˜DØ Ø ØØ ŸK™KØØŸH™Hóˆô 	.¨aÔ0ô 	˜dŸi™i¨¯©Ð0Ô1Ø�4ˆyÐ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Ô#ô �Q—W‘WÐ0°!·'±'Ó:€FÜ×!Ñ! &Ó)€Gä“i×/Ñ/°·±Ó8€OäŒ}˜QŸW™W fÓ-Ó.€Däˆs‹8€DÜˆs‹8€D÷ð ð< Ð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´   ø€ Ø�G‰G�B‰Kˆà�7‰7�2‰;˜!ÒØBˆCÜ—)‘)×'Ñ'¨Ó,Ð,ä˜QÔä% aÓ(ˆä�H‰H�Q˜gÔ&ˆà�Š6ØˆHá˜DØ Ø ØØ ŸK™KØØŸH™Hóˆô 	.¨aÔ0ô 	˜dŸi™i¨¯©Ð0Ô1Øˆr%   rÜ  )rï   rß  rã  rØ  rÙ  r"   rg   rÚ  s      @@@@@r#   rã  rã    sŠ   ü€ ä„Oä˜˜JÔ'ô �Q—W‘WÐ0°!·'±'Ó:€FÜ×!Ñ! &Ó)€Gä“i×/Ñ/°·±Ó8€OäŒ}˜QŸW™W jÓ1Ó2€Däˆs‹8€DÜˆs‹8€D÷ð ð< Ð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ë   rl  rm  ro  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?  ø€ Ø�G‰G�B‰KˆØ�G‰G�B‰Kˆà�Š6�Q˜!’VÜ—)‘)×'Ñ'Ð(@ÓAÐAä˜QÔä% aÓ(ˆàˆÜ�A�q“	ˆáØˆDØˆDØ‰DàˆDØˆDØˆDä�H‰H�d˜C�[¨¯©Ô0ˆÜ�H‰H�U 'Ô*ˆÜ�X‰X�q˜$�i q§w¡wÔ/ˆáØØØØØ�K‰KØØ�H‰HØ�H‰HØØ�I‰IØó
ˆô 	.¨aÔ0ô 	˜dŸi™i¨¯©°!·&±&¸!¿&¹&Ð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Ô"ô �Q—W‘WÐ0°!·'±'Ó:€FÜ×!Ñ! &Ó)€Gä“Y×-Ñ-¨a¯g©gÓ6€NäŒ}˜QŸW™W eÓ,Ó-€Dä�‹X€FÜ�‹X€F÷,ñ ,ð\ €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ë   rl  rm  ro  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±  ø€ Ø�G‰G�B‰KˆØ�G‰G�B‰Kˆà�Š6�Q˜!’VÜ—)‘)×'Ñ'Ð(@ÓAÐAä˜QÔô # 1Ó%ˆàˆä�A�q“	ˆÜ�h‰h˜ a§g¡gÔ.ˆáØØØØ�H‰HØØ�J‰Jó
ˆð �Š7ÜÔØ�1ô �H‰H�a˜�Z q§w¡wÔ/×1Ñ1ˆô �u“ò 	"ˆAÜ˜1˜q™5“\ò "�Ø˜A˜q˜D™'��!�Q�$’ñ"ð	"ô
 �u˜a“ò 	"ˆAÜ˜5“\ò "�Ø˜A˜q˜D™'��!�Q�$’ñ"ð	"ñ ØØØØØ�H‰HØØ�J‰Jó
ˆô 	.¨cÔ2ô 	˜cŸh™h¨¯©Ð/Ô0Ø’!�V�e�V�)‘˜aÐ Ð r%   )r0   r}  rZ   ro   r    rq   r°   r$   )rï   rÿ  r"   ro   rq   s     @@@r#   rÿ  rÿ  Š  sb   ú€ ä„Oä˜˜DÔ!ô “Y×-Ñ-¨a¯g©gÓ6€NÜ“Y×-Ñ-¨a¯g©gÓ6€NäŒ}˜QŸW™W dÓ+Ó,€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%   r`  )r  rð   r  r  r  s        r#   Ú_system_copy_in_b_implr  â  s#   € à‡v�v�‚{ò	&àÐò	*àÐr%   c                 ó   — t         ‚)zK
    Compute the number of right hand sides in the system of equations
    r  ©rð   s    r#   Ú_system_compute_nrhsr  î  r  r%   c                 ó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   € Ø—7‘7˜2‘;Ðr%   r`  )rð   r  r  s      r#   Ú_system_compute_nrhs_implr  õ  s#   € à‡v�v�‚{ò	àÐò	àÐr%   c                 ó   — t         ‚)zD
    Check that AX=B style system input is dimensionally valid.
    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ë   rl  rm  ©rï   rð   ÚamÚbms       r#   r  z9_system_check_dimensionally_valid_impl.<locals>.oneD_impl  óD   € Ø—‘˜‘ˆBØ—‘˜‘ˆBØ�RŠxÜ—i‘i×+Ñ+Ø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%   r`  ©rï   rð   r  r  r  s        r#   Ú&_system_check_dimensionally_valid_implr#    s.   € à�6‰6€DØˆq‚yò	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Ø�QŠw˜" š' R¨1¢WÜ—i‘i×+Ñ+Ð,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Ø�QŠw˜" š' R¨1¢W°°a²Ü—i‘i×+Ñ+Ð,DÓEÐEð 18r%   r`  r"  s        r#   Ú_system_check_non_empty_implr,  $  s.   € à�6‰6€DØˆq‚yò	Fð Ðò	Fð Ðr%   c                 ó   — t         ‚)z:
    Compute the residual from the 'b' scratch space.
    r  )rð   r�   r  s      r#   Ú_lstsq_residualr.  :  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   ø€ Ü—h‘h˜t¨:Ô6�ÜŸ™¤§¡ q¨©¨Q¨¡xÓ 0°!Ñ 3Ó4��A‘Ø�
r%   c                 óz   •— t        j                  d‰¬«      }t        j                  | |d …df   dz  «      |d<   |S r1  )rë   rí   r2  r4  s       €r#   Ú	real_implz'_lstsq_residual_impl.<locals>.real_implO  s8   ø€ Ü—h‘h˜t¨:Ô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¯  r2  r3  ©rð   r�   r  r    rÛ   r5  s        €r#   r6  z(_lstsq_residual_impl.<locals>.cmplx_implW  sU   ø€ Ü—h‘h ¨ZÔ8�Ü˜t›ò 9�AÜŸV™V¤B§F¡F¨1¨Q©R°¨U©8Ó$4°aÑ$7Ó8�C˜’Fð9à�
r%   c                 óš   •— t        j                  |‰¬«      }t        |«      D ]$  }t        j                  | |d …|f   dz  «      ||<   Œ& |S r:  )rë   rí   r¯  r2  r;  s        €r#   r8  z'_lstsq_residual_impl.<locals>.real_impl^  sK   ø€ Ü—h‘h ¨ZÔ8�Ü˜t›ò 1�AÜŸV™V A a¡b¨! e¡H¨a¡KÓ0�C˜’Fð1à�
r%   )r  r    rÝ  rÞ  rE   r~   r   rx  )rð   r�   r  r  r    r6  r8  r5  s          @r#   Ú_lstsq_residual_implr=  A  s’   ø€ à�6‰6€DØ�G‰G€EÜ×$Ñ$¤W¨UÐ4FÈÓ%NÓO€Jàˆq‚yÜ�eœeŸm™mÔ-ôð Ðôð Ðà�qŠyÐˆyÜ�eœeŸm™mÔ-ôð
 Ðôð
 Ð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_solutionr@  f  ó
   € ô
 Ðr%   c                 ó4   — | j                   dk(  rd„ }|S d„ }|S )Nr   c                 ó<   — |j                   j                  «       d | S r2   ©rˆ  Úravelr?  s      r#   r  z'_lstsq_solution_impl.<locals>.oneD_implq  s   € Ø—6‘6—<‘<“> " 1Ð%Ð%r%   c                 ó4   — |d |…d d …f   j                  «       S r2   ©r€   r?  s      r#   r  z'_lstsq_solution_impl.<locals>.twoD_implu  s   € Ø˜˜˜šA˜‘;×#Ñ#Ó%Ð%r%   r`  )rð   r  r�   r  r  s        r#   Ú_lstsq_solution_implrH  n  s#   € à‡v�v�‚{ò	&àÐò	&àÐ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  ro  r%  r  ré  Úmaxr‚  rë   rí   rˆ  r  Úint32rŸ  r¥  r.  r@  r–  r   )rï   rð   Úrcondr�   rÉ   r  rì  ÚmaxmnrŠ  r  r   Úrank_ptrr’  Úrankr    rD  r"   Únp_dtrs   r5  s                   €€€€r#   Ú
lstsq_implzlstsq_impl.<locals>.lstsq_impl—  sˆ  ø€ Ø�G‰G�B‰KˆØ�G‰G�B‰KˆÜ# AÓ&ˆô 	˜QÔÜ˜QÔô 	   1Ô%ô 	*¨!¨QÔ/ä�A�q“	ˆÜ�A�q“	ˆô & aÓ(ˆô �x‰x˜˜u˜¨UÔ3×5Ñ5ˆä˜$  4Ô(ô �H‰H�U *Ô-ˆÜ—8‘8˜A¤R§X¡XÔ.ˆáØØØØØ�K‰KØØ�K‰KØØ�H‰HØØ�O‰Oó
ˆô 	.¨aÔ0ð ˜‰{ˆð �!Š8�q˜A’vÜ—(‘(˜A jÔ1‰Cô " $¨¨4Ó0ˆCô ˜A˜t QÓ'ˆô 	˜dŸi™i¨¯©°A·F±F¸H¿M¹MÐJÔKØ�3˜˜a  ˜iÐ(Ð(r%   ©g      ð¿)r0   r}  r©  r€  rÝ  rÞ  r    rE   rZ   rs   r°   r$   )
rï   rð   rN  Únb_dtÚr_typerS  r"   rR  rs   r5  s
         @@@@r#   rS  rS  z  s¤   û€ ä„Oä˜˜GÔ$ô !  GÔ,ä˜W a¨Ô+ä×Ñ §¡Ó(€EØ�G‰G€Eô �UÐ.°Ó6€FÜ×$Ñ$ VÓ,€Jô “Y×-Ñ-¨a¯g©gÓ6€NäŒ}˜U GÓ,Ó-€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_returnrY  Ù  rA  r%   c                 ó4   — | j                   dk(  rd„ }|S d„ }|S )Nr   c                 ó6   — |j                   j                  «       S r2   rD  rX  s     r#   r  z-_solve_compute_return_impl.<locals>.oneD_implä  s   € Ø—6‘6—<‘<“>Ð!r%   c                 ó   — |S r2   rX   rX  s     r#   r  z-_solve_compute_return_impl.<locals>.twoD_implè  s   € ØˆKr%   r`  )rð   r  r  r  s       r#   Ú_solve_compute_return_implr]  á  s#   € à‡v�v�‚{ò	"àÐò	àÐ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  ro  r  r‚  rë   rí   rˆ  rY  r  rž  rŸ  r“  r–  r   )rï   rð   r�   r  rŠ  r  r¡  r’  r"   rR  rv   s           €€€r#   Ú
solve_implzsolve_impl.<locals>.solve_implþ  sö   ø€ Ø�G‰G�B‰KˆÜ# AÓ&ˆô 	˜QÔÜ˜QÔô 	*¨!¨QÔ/ô & aÓ(ˆô �x‰x˜˜q˜	¨Ô/×1Ñ1ˆØ�Š6Ü(¨¨DÓ1Ð1ô 	˜$  4Ô(ô �x‰x˜¤Ô.ˆáØØØØ�K‰KØØ�K‰KØ�K‰KØó	
ˆô 	˜Ôô 	˜dŸi™i¨¯©°D·I±IÐ>Ô?Ü$ Q¨Ó-Ð-r%   )r0   r}  r©  r€  rÝ  rÞ  r    rZ   rv   r°   r$   )rï   rð   rU  ra  r"   rR  rv   s       @@@r#   ra  ra  í  s|   ú€ ä„Oä˜˜GÔ$Ü   GÔ,ä˜W a¨Ô+ä×Ñ §¡Ó(€EØ�G‰G€Eô “)×'Ñ'¨¯©Ó0€KäŒ}˜U GÓ,Ó-€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ê   ro  r‚  rˆ  rE  Úreshaperé  rë   rí   r    rŸ  r¥  r¯  r–  r   )rï   rN  r�   rÉ   rŠ  rì  rï  r   rð  r’  Úcut_atÚcut_idxrÛ   rý  rþ  Ús_localÚJOBÚTRANSAÚTRANSBr"   rl   rP   rR  ró  rH  s                   €€€€€€€€€r#   Ú	pinv_implzpinv_impl.<locals>.pinv_implD  s�  ø€ ðN �G‰G�B‰KˆØ�G‰G�B‰Kˆä˜QÔä% aÓ(ˆà�Š6�Q˜!’VØ—6‘6—<‘<“>×)Ñ)¨!¯'©'Ó2×4Ñ4Ð4ä�A�q“	ˆä�H‰H�e˜Q�Z q§w¡wÔ/ˆÜ�H‰H�U 'Ô*ˆÜ�X‰X�q˜%�j¨¯©Ô0ˆáØØØØØ�K‰KØØ�H‰HØ�H‰HØØ�I‰IØó
ˆô 	.¨aÔ0ð �1‘˜‘ˆØˆÜ�u“ò 	ˆAØ�‰t�f‹}Ø˜A˜a™D‘y��!‘Ø‘ð	ð 	�1‰ˆð �Š6ä˜1“Xò /�Ü˜w›ò /�AØ! ! Q $™x¨!¨A©$™�B�q˜!�t’Hñ/ñ/ô
 ˜7“^ò 0�Ø˜A™$�Ü˜u›ò 0�AØ  1 ™g¨Ñ/�A�a˜�d’Gñ0ð0ñ ØØØØØØØ�J‰JØ�I‰IØØ�H‰HØØ�K‰KØ�K‰KØó
ˆô0 	˜dŸi™i¨¯©°!·&±&¸!¿&¹&À#Ç(Á(Ø�I‰Iðô 	à�v‰v�|‰|‹~×%Ñ% a§g¡gÓ.×0Ñ0Ð0r%   ©gVçž¯Ò<)r0   r}  rE   r    rÝ  rÞ  rZ   rl   r<   rP   r°   r$   rë   Úarray)rï   rN  rö  Údtrl  ri  rj  rk  r"   rl   rP   rR  ró  rH  s        @@@@@@@@@r#   rl  rl  *  sé   ÿø€ ä„Oä˜˜FÔ#ô �Q—W‘WÐ0°!·'±'Ó:€FÜ×!Ñ! &Ó)€Gä“Y×-Ñ-¨a¯g©gÓ6€Nä“7×'Ñ'¨¯©Ó0€LäŒ}˜QŸW™W fÓ-Ó.€DÜ
ˆc‹(€Cô �‹X€FÜ�‹X€Fô 
×	Ñ	˜QŸW™WÓ	%€BÜ�8‰8�R�D Ô#€DÜ
�(‰(�B�4˜rÔ
"€C÷E1õ E1ðN Ð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ë   r3  Úlog)r�   rï   ÚsgnÚcsgnÚaccrÛ   Úabsels          r#   Úcmplx_diag_walkerz3_get_slogdet_diag_walker.<locals>.cmplx_diag_walker×  sn   € ð ˜‘9ˆDØˆCÜ˜1“Xò *�ÜŸ™˜q  A ™w›�Ø˜q  A ™w¨™Ñ/�ØœBŸF™F 5›MÑ)‘ð*ð ˜#�;Ðr%   c                 óˆ   — d}t        | «      D ],  }|||f   }|dk  r| }| }|t        j                  |«      z   }Œ. |dz   |fS )Nr¿   )r¯  rë   rr  )r�   rï   rs  ru  rÛ   rn  s         r#   Úreal_diag_walkerz2_get_slogdet_diag_walker.<locals>.real_diag_walkerã  s_   € ð ˆCÜ˜1“Xò &�Ø�a˜�d‘G�Ø�r’6Ø˜$�CØ˜�AØœBŸF™F 1›I‘o‘ð&ð ˜"‘H˜c�?Ð"r%   )r~   r    r   rx  r   )rï   rw  ry  s      r#   Ú_get_slogdet_diag_walkerrz  Î  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ë   rl  rm  ro  r‚  rí   rž  rŸ  Úinfr“  r¯  r–  r   )rï   r�   r|  rŠ  r¡  r’  rs  rÛ   ÚONEÚZEROÚdiag_walkerr"   r]   s           €€€€€r#   Úslogdet_implz"slogdet_impl.<locals>.slogdet_impl  s  ø€ Ø�G‰G�B‰KˆØ�7‰7�2‰;˜!ÒØBˆCÜ—)‘)×'Ñ'¨Ó,Ð,à�Š6Ø˜�;Ðä˜QÔä% aÓ(ˆä�x‰x˜¤Ô.ˆá˜$  1 d§k¡k°1°d·k±kÓBˆàˆqŠ5àœŸ™˜�=Ð Ü˜Ôð ˆÜ�q“ò 	-ˆAØ˜˜a™ Q¨¡UÑ+Ñ,‰Cð	-ð �A‰gˆØ�!Š8ØˆCô 	˜dŸi™i˜[Ô)Ù˜1˜d CÓ(Ð(r%   )	r0   r}  rZ   r]   r    r°   r$   rz  rE   )rï   r‚  r  r€  r�  r"   r]   s     @@@@@r#   r‚  r‚  ò  s…   ü€ ä„Oä˜˜IÔ&ä“I×+Ñ+¨A¯G©GÓ4€MäŒ}˜QŸW™W iÓ0Ó1€Dä*¨1Ó-€Kà
�'‰'�!‹*€CØ8Œ7�1—7‘7Ð.°·±Ó8¸Ó;€D÷')ð ')ðR Ðr%   c                 ó8   — t        «        t        | d«       d„ }|S )NÚdetc                 óv   — t         j                  j                  | «      \  }}|t        j                  |«      z  S r2   )rë   rl  r|  Úexp)rï   rs  r|  s      r#   Údet_implzdet_impl.<locals>.det_impl4  s-   € ÜŸ™×*Ñ*¨1Ó-‰ˆˆgØ”R—V‘V˜G“_Ñ$Ð$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ë   rl  rm  ro  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ï   ø€ ð �G‰G�B‰KˆØ�G‰G�B‰KˆØ�Š6�Q˜!’VÜ—)‘)×'Ñ'Ð(@ÓAÐAÜ˜QÔàˆÜ�A�q“	ˆð ˆØˆä% aÓ(ˆô
 �H‰H�U +Ô.ˆáØØØØØ�K‰KØØ�H‰HØ�H‰HØØ�I‰IØó
ˆô 	.¨aÔ0ô 	˜dŸi™i¨¯©°!·&±&¸!¿&¹&Ð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×-Ñ-¨a¯g©gÓ6€NäŒ}˜QŸW™W eÓ,Ó-€Dô �‹X€Fä˜!Ÿ'™'Ð#5°q·w±wÓ?€KÜ×%Ñ% kÓ2€KÜ×"Ñ" 1§7¡7Ó+€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ˆä�h‰h�t ;Ô/ˆÜ�!—)‘)˜A‘, §¡Ñ+Ó,ˆÙØØØ�H‰HØØ�J‰Jó
ˆð ˆqŠ5ÜÔØ�1ô
 	˜cŸh™h¨¯©Ð/Ô0Ø�1‰vˆr%   )rE   r    rÝ  rÞ  r<   rC   r°   r$   )rï   r�  r’   r"   rŽ  r›  s      @@@r#   Ú_oneD_norm_2_implrœ  �  sa   ú€ ä˜!Ÿ'™'Ð#5°q·w±wÓ?€KÜ×%Ñ% kÓ2€Kä‹W×!Ñ! !§'¡'Ó*€FäŒ}˜QŸW™W fÓ-Ó.€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”  ©rD  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~  r3  r¯  )rD  r°   r�   rü  rÛ   r8   s         r#   r  z!_get_norm_impl.<locals>.oneD_implÔ  st  € Ü˜“F�ð ˜’6Øð ˜!’8Ü'¨›?Ð*ØœBŸF™F’]ä˜a ™d›)�CÜ" 1 a›[ò &˜Ü! ! A¡$›i˜Ø ›9Ø"%™Cð&ð �JàœRŸV™V˜G’^ä˜a ™d›)�CÜ" 1 a›[ò &˜Ü! ! A¡$›i˜Ø ›9Ø"%™Cð&ð �Jà˜A’Xà�CÜ" 1›Xò &˜Ø˜Q™4 2›:Ø 2™I™Cð&ð �Jà˜A’Xà�CÜ" 1›Xò )˜Øœs 1 Q¡4›yÑ(™ð)à�Jð �CÜ" 1›Xò .˜Øœs 1 Q¡4›y¨#™~Ñ-™ð.à  c¡™?Ð*r%   r  ry   c                 ó   — | S r2   rX   ©rD  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   € ð Ÿ3™3�Jr%   c                 ó"   — | j                  «       S r2   rG  r¢  s    r#   r£  z%_get_norm_impl.<locals>.array_prepare 	  s   € àŸ6™6›8�Or%   c                 ól   •— | j                   }|dk(  ry ‰| «      }t        |j                  |«      «      S )Nr   r¿   )r   r”  re  )rD  r°   r�   Úx_cr£  s       €r#   r  z!_get_norm_impl.<locals>.twoD_impl&	  s3   ø€ Ø—F‘F�Ø˜’6àÙ# AÓ&�Ü# C§K¡K°£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¯  r3  rŠ  r  )
rD  r°   r�   rÉ   Ú
global_maxÚiiÚtmpÚjjÚ
global_minÚmax_vals
            €r#   r  z!_get_norm_impl.<locals>.twoD_impl1	  s  ø€ Ø—G‘G˜B‘K�Ø—G‘G˜B‘K�ð —6‘6˜Q’;Øàœ"Ÿ&™&’=ð "$�JÜ# A›hò -˜Ø ˜Ü"'¨£(ò 2˜BØ¤3 q¨¨R¨¡y£>Ñ1™Cð2à Ó+Ø),™Jð-ð &Ð%àœRŸV™V˜G’^ð ")�JÜ# A›hò -˜Ø ˜Ü"'¨£(ò 2˜BØ¤3 q¨¨R¨¡y£>Ñ1™Cð2à Ó+Ø),™Jð-ð &Ð%Ø˜A’Xð "$�JÜ# A›hò -˜Ø ˜Ü"'¨£(ò 2˜BØ¤3 q¨¨R¨¡y£>Ñ1™Cð2à Ó+Ø),™Jð-ð &Ð%à˜B’Yð ")�JÜ# A›hò -˜Ø ˜Ü"'¨£(ò 2˜BØ¤3 q¨¨R¨¡y£>Ñ1™Cð2à Ó+Ø),™Jð-ð &Ð%ð ˜A’Xä3°AÓ6°qÑ9Ð9Ø˜B’Yä3°AÓ6°rÑ:Ð:ô %Ð%GÓHÐHr%   r2   )rE   r    rÝ  rÞ  r<   rC   r°   r$   r  r   r”   r{   r   rë   Úfinforv  rL  )rD  Úord_flagr�  rŽ  r‘  r›  r"   r  r  r£  r®  s            @@r#   Ú_get_norm_implr±  ´  sT  ù€ ô ˜!Ÿ'™'Ð#5°q·w±wÓ?€KÜ×%Ñ% kÓ2€Kä×"Ñ" 1§7¡7Ó+€Hä‹W×!Ñ! !§'¡'Ó*€FäŒ}˜QŸW™W fÓ-Ó.€Dà‡v�v�‚{ð ˜œeŸj™jÐ)Ñ)ó'ðx Ðós8+ðr Ðà	
�‰�1Šð ˜œeŸj™jÐ)Ñ)ð �x‰x˜3ŠÜ!ñó "ñà—‘˜S’Ü!ñó "ñô "ñ$ó "ð$õ
4ð` ÐôO —h‘h˜{×/Ñ/Ó0×4Ñ4ˆGõ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ë   Údividerl  r–  r˜  Úisnanr~  )rD  Úpr   r’  Únorm_xÚ
norm_inv_xs         r#   r’   zcond_impl.<locals>.implŠ	  s´   € ð& �Š6�Q˜"’W  	Ü(¨Ó+ˆAØ�AŠv˜˜Ü—I‘I˜a ™d A b¡EÓ*‘ä—I‘I˜a ™e Q q¡TÓ*‘ä—Y‘Y—^‘^ A qÓ)ˆFÜŸ™Ÿ™¬¯	©	¯©°aÓ(8¸!Ó<ˆJØ˜Ñ#ˆAô �8‰8�AŒ;Ü—6‘6ˆMàˆHr%   r2   rˆ  )rD  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Á   rQ  rÛ   s       r#   Ú_get_rank_from_singular_valuesrÀ  ±	  sC   € ð
 €DÜ”3�r“7‹^ò ˆØˆa‰5�1Š9Ø˜!‘8‰DàØ€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ê   rL  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Ó/�à—G‘G˜A‘J�Ø—G‘G˜A‘J�Ü˜˜1“I�Ø�a‘D˜1‘H˜wÑ&�Ü5°a¸Ó;Ð;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Ó/�Ü5°a¸Ó=Ð=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œŸ™Ð$Ñ$Ü˜aŸg™gÐ'9¸1¿7¹7ÓCˆGÜ ×)Ñ)¨'Ó2ˆGÜ—h‘h˜wÓ'×+Ñ+ˆ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,   € Üœs 1›v›ò !�AØ˜‘t˜r“zÙ ð!ð r%   r  r2   r`  )r„  rÅ  r  rÑ  rÎ  s       €r#   Ú_get_matrix_rank_implz/matrix_rank_impl.<locals>._get_matrix_rank_implä	  s9   ø€ Ø�v‰vˆØ�1Š9óð
 (Ð'Ø�QŠYÙ'¨¨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€   rl  r˜  rî   )rï   r�   r„  rÛ   r  r)  ru  r†  rü  Úflagr‘  s             €r#   Úmatrix_power_implz,matrix_power_impl.<locals>.matrix_power_impl
  s�  ø€ à�Š6ô —‘˜Ÿ™¨Ô1ˆAÜ˜1Ÿ7™7 1™:Ó&ò �Ø��!�Q�$’ðàˆHà—‘˜‘˜aŸg™g b™kˆBˆØ�Š8ÜÐ;Ó<Ð<ð �Š7Ø—6‘6“8ˆOð ˆqŠ5Ü—	‘	—‘˜aÓ ×%Ñ%Ó'ˆAØ�BŠwØ�Ø�‰Aà�AŠvØ—v‘v“x�ØˆAàˆqŠ5Ø�AŠvÜ—v‘v˜a “|Ð#Ø�AŠvÜ—v‘vœbŸf™f Q¨›l¨AÓ.Ð.ð ð ˆCØˆCð ˆCð ˆDØ˜’(Ø˜’7ÙØ!˜Ø$™ä Ÿf™f S¨#Ó.˜Ü—f‘f˜S #Ó&�Ø˜Q‘h�ð ˜“(ð ˆJr%   )	r}  rÝ  rÞ  r    rE   r~   r   ÚIntegerr   )rï   r�   ÚntrÚ  r‘  s       @r#   rÚ  rÚ  
  sY   ø€ ô ˜˜NÔ+Ü×"Ñ" 1§7¡7Ó+€Hä	��G˜QÓ	€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©ry  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ê   rL  ré  r¯  )rï   ÚoffsetÚrowsÚcolsrÛ   r�   rü  rý  s           r#   Úmatrix_trace_implz,matrix_trace_impl.<locals>.matrix_trace_impl]
  s²   € Ø—W‘W‰
ˆˆdØˆØˆqŠ5Ø˜!‘8ˆDØˆqŠ5Ø˜!‘8ˆDÜ”�D˜$“ Ó#ˆØˆØ�Š6Ü˜1“Xò #�Ø�q˜˜A ™E˜‘{Ñ"‘ð#ð
 ˆ
ô ˜1“Xò #�Ø�q˜˜Q™ ˜‘{Ñ"‘ð#àˆ
r%   ©r   )r}  r~   r±   r   rÛ  r   )rï   rá  rä  s      r#   rä  rä  R
  sA   € ô ˜˜G¨uÕ5ä�fœs¤E§M¡MÐ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 )Nrq  rë   r  r§  Frr  )r~   r   r   r  r   r¨  s        r#   Ú_check_scalar_or_lt_2d_matrç  q
  sS   € Ù%‰[¨4€FØ�iÐ €Fä�!”U—[‘[Ô!Ø�v‰v˜Š{ÜÐKØ &ñ'Ø5:ô<ð <ð ð "r%   c                 ó&  — t        j                  | «      }t        j                  |«      }t        j                  |j                  «       j	                  |j
                  df«      |j                  «       j	                  d|j
                  f«      «      S r  ©rë   ÚasarrayÚmultiplyrE  re  r   ©rï   rð   rñ   ÚaaÚbbs        r#   Úouter_impl_nonerï  {
  sd   € ä	�‰�A‹€BÜ	�‰�A‹€BÜ�;‰;�r—x‘x“z×)Ñ)¨2¯7©7°A¨,Ó7ØŸ™›
×*Ñ*¨A¨r¯w©w¨<Ó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Ü‡K�K�—‘“
×"Ñ" B§G¡G¨Q <Ó0Ø—‘“
×"Ñ" A r§w¡w <Ó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   € Ø
ˆt”U—Z‘ZÐ Ñ ÜÐäÐ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   ø€ Ù�A�q˜#‹Ðr%   r2   )rç  ró  )rï   rð   rñ   r÷  r’   s       @r#   r÷  r÷  ”
  s8   ø€ ô ˜q '°UÕ;Ü˜q '°UÕ;ä˜1˜a Ó%€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ê   re  )rD  ÚxnÚxms      r#   Ú	nrm_shapez(_kron_normaliser_impl.<locals>.nrm_shapeª
  s-   € à—W‘W˜R‘[�Ø—W‘W˜R‘[�Ø—y‘y  RÓ(Ð(r%   c                 óD   — | j                   d   }| j                  d|«      S )Nrš  r   rú  )rD  rû  s     r#   rý  z(_kron_normaliser_impl.<locals>.nrm_shape±
  s    € à—W‘W˜R‘[�Ø—y‘y  BÓ'Ð'r%   c                 óN   — t        j                  dt        | «      «      }| |d<   |S )Nr  r   )rë   rí   rv  )rD  rï   s     r#   rý  z(_kron_normaliser_impl.<locals>.nrm_shape·
  s$   € ä—‘˜¤ a£Ó)ˆAØˆAˆa‰DØˆHr%   )r~   r   r   r{   r   Úformatr  r   )rD  rý  s     r#   Ú_kron_normaliser_implr  ¢
  s—   € ä�!”U—[‘[Ô!Ø�8‰8˜:Ñ%Üð -ç-3©V°A·H±HÓ-=ó?ð ?ð �V‰V�qŠ[Üñ)ó ð)ð Ðäñ(ó ð(ð Ðä	ñ	ó 
ð	ð Ð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   )re  r   r  s      r#   rü  z_kron_return.<locals>.retË
  s   € à—y‘y §¡Ó(Ð(r%   c                 ó8   — |j                  | j                  «      S r2   ©re  rê   r  s      r#   rü  z_kron_return.<locals>.retÑ
  ó   € à—y‘y §¡Ó)Ð)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Ø�6‰6�QŠ;˜!Ÿ&™& 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þ  Úcjmpro  Úfix_aÚfix_bÚret_cs                     €€€€r#   Ú	kron_implzkron_impl.<locals>.kron_implï
  s	  ø€ á�1‹XˆÙ�1‹Xˆà�X‰X�b‰\ˆØ�X‰X�b‰\ˆØ�X‰X�b‰\ˆØ�X‰X�b‰\ˆà�"‰WˆØ�"‰Wˆô �H‰H�b˜"�X RÔ(ˆô �r“ò 	>ˆAà�r‘6ˆDä˜2“Yò >�à˜q™�à˜šA˜‘h�ä˜r›ò >�Að ˜r™6�DØ/1°!°Q°$©x¸#©~�A�e˜T $¨¡)˜^Ð+Ò,ñ>ñ>ð		>ñ" �Q˜˜1‹~Ðr%   )rç  r  r  rE   )rï   rð   r  ro  r  r  r  s      @@@@r#   r  r  á
  s[   û€ ô ˜q &°EÕ:Ü˜q &°EÕ:ä! !Ó$€EÜ! !Ó$€EÜ˜˜AÓ€Eô 
��G˜QÓ	€B÷&ðP Ðr%   )z<BLAS function>)F)Trõ  rT  rm  r2   rå  ) rV   Ú
contextlibr&  Úllvmliter   Únumpyrë   ÚoperatorÚnumba.core.imputilsr   r   r   r   Únumba.core.typingr   Únumba.core.extendingr	   r
   r   Ú
numba.corer   r   r   Únumba.core.errorsr   r   r   Úarrayobjr   r   r   Únumba.npr   rÝ  r©   rª   Ú
as_pointerÚ	ll_char_pr¬   Úll_intcÚ	ll_intc_pr«   Ú	ll_intp_prM  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  r1  r3  r5  rM  r[  rf  rJ   rF   r�  ro  r}  r€  r‚  rŽ  r“  r–  rl  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@  rH  rJ  rS  rY  r]  r_  ra  rc  rl  rz  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>r0     s¿  ðñó
 Û å ã Û ÷Jó Jå 'ß FÑ Fß -Ñ -÷ñ ç <Ñ <Ý 0à
ˆ"�*‰*�Q‹-€Ø×ÑÓ €	Ø€	Ø
ˆ"�*‰*�R‹.€Ø×ÑÓ €	Ø	�‰€Ø×ÑÓ€	ð �x‰x€Ø�{‰{€ð 
‡M�M�3Ø	‡M�M�3Ø	‡O�O�SØ	×Ñ�cð	€óòHòHò5÷
&;ñ &;÷R`:ñ `:ðF ×Ññ-ó ð-ò0Fò	Aò	Cò-ò,"-òJ/-òdDò Dò Dó ñ6 
ˆ"�&‰&Óñ(ó ð(ñ 
ˆ(�/‰/Óñ#ó ð#ò)(ñX 
ˆ"�'‰'Óñ6ó ð6ò<@ò@ò6.òrV.ñr 
ˆ"�&‰&Óñ 2ó ð 2ðF *�5×)Ñ)Ð*=¸z¸u¿z¹z»|Ó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%   