§
    2@Äjøˆ ã                   óZ  — 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! ddl"m#Z#  ej$        d¦  «        Z%e% &                    ¦   «         Z'e'Z( ej$        d¦  «        Z)e) &                    ¦   «         Z*ej+        Z+e+ &                    ¦   «         Z,d„ Z- e. e/e#dd¦  «        ¦  «        Z0e0Z1dZ2d„ Z3e1rej4        nej5        Z6e1rej4        nej5        Z7ej8        dej9        dej:        dej;        diZ<dqd„Z=d„ Z>d„ Z?d„ Z@ G d„ d¦  «        ZA G d„ d ¦  «        ZBejC        d!„ ¦   «         ZDd"„ ZEd#„ ZFd$„ ZGd%„ ZHd&„ ZId'„ ZJd(„ ZKd)„ ZLd*„ ZMdrd+„ZN eejO        ¦  «        d,„ ¦   «         ZP eejQ        ¦  «        d-„ ¦   «         ZRd.„ ZS eejT        ¦  «        d/„ ¦   «         ZTd0„ ZUd1„ ZVd2„ ZWd3„ ZX eejO        ¦  «        d4„ ¦   «         ZY ejZ        d5 ej[        ¦   «         ¦  «        Z\ed6„ ¦   «         Z]dsd8„Z^d9„ Z_d:„ Z` ee`¦  «        d;„ ¦   «         Zaed<„ ¦   «         Zbed=„ ¦   «         Zc eejd        je        ¦  «        d>„ ¦   «         Zfed?„ ¦   «         Zgdsd@„Zh eejd        ji        ¦  «        dA„ ¦   «         Zj eejd        jk        ¦  «        dB„ ¦   «         Zl eejd        jm        ¦  «        dC„ ¦   «         Zn eejd        jo        ¦  «        dD„ ¦   «         Zp eejd        jq        ¦  «        dE„ ¦   «         Zr eejd        js        ¦  «        dtdF„¦   «         Zt eejd        ju        ¦  «        dG„ ¦   «         ZvdH„ Zw eew¦  «        dI„ ¦   «         ZxdJ„ Zy eey¦  «        dK„ ¦   «         ZzdL„ Z{ ee{¦  «        dM„ ¦   «         Z|dN„ Z} ee}¦  «        dO„ ¦   «         Z~dP„ Z ee¦  «        dQ„ ¦   «         Z€dR„ Z� ee�¦  «        dS„ ¦   «         Z‚ eejd        jƒ        ¦  «        dudU„¦   «         Z„dV„ Z… ee…¦  «        dW„ ¦   «         Z† eejd        j‡        ¦  «        dX„ ¦   «         Zˆ eejd        j‰        ¦  «        dvdZ„¦   «         ZŠd[„ Z‹ eejd        jŒ        ¦  «        d\„ ¦   «         Z� eejd        jŽ        ¦  «        d]„ ¦   «         Z�d^„ Z� ee�¦  «        d_„ ¦   «         Z‘d`„ Z’ ee’¦  «        da„ ¦   «         Z“db„ Z” eejd        j•        ¦  «        dwdc„¦   «         Z– eejd        j—        ¦  «        dwdd„¦   «         Z˜ede„ ¦   «         Z™ eejd        jš        ¦  «        dwdf„¦   «         Z› eejd        jœ        ¦  «        dg„ ¦   «         Z� eejž        ¦  «        dxdh„¦   «         ZŸdsdi„Z edj„ ¦   «         Z¡edk„ ¦   «         Z¢dl„ Z£ eej¤        ¦  «        dwdm„¦   «         Z¥dn„ Z¦do„ Z§ eej¨        ¦  «        dp„ ¦   «         Z©dS )yz.
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)Ú
_helperlibé   é    c                  óŽ   — 	 ddl m}  t          | d         d         d         ¦  «        S # t          t          t
          f$ r Y dS w xY w)a  
    Whether the scipy actually installed *right now* provides ILP64 (64-bit
    Fortran integer) scipy.linalg.cython_blas / cython_lapack, as opposed to
    the usual 32-bit ("LP64") ones. This may differ from what numba's own
    _lapack.c wrappers were *built* for (see _LAPACK_BUILD_ILP64 below and
    _check_lapack_int_width()) -- scipy can be upgraded/downgraded/swapped
    independently of numba. SciPy records which ABI it built for in
    scipy.__config__ (see scipy.linalg.blas.HAS_LP64, which reads the same
    flag).
    r   ©ÚCONFIGzBuild DependenciesÚblaszcython blas ilp64F)Úscipy.__config__r   ÚboolÚImportErrorÚKeyErrorÚ	TypeErrorr   s    ú@C:\Projects\Historical\venv\Lib\site-packages\numba/np/linalg.pyÚ_lapack_runtime_is_ilp64r$   "   sc   € ðØ+Ð+Ð+Ð+Ð+Ð+Ý�FÐ/Ô0°Ô8Ð9LÔMÑNÔNÐNøÝ�¥9Ð-ð ð ð ð ˆuˆuðøøøs   ‚&) ©AÁAÚLAPACK_BUILD_ILP64FzYhttps://numba.readthedocs.io/en/stable/user/installing.html#numba-source-install-env_varsc            	      ó–   — t          ¦   «         } | t          k    r/t          rdnd}| rdnd}t          d|› d|› dt          › d�¦  «        ‚dS )a‹  
    Guard against a numba built for one Fortran integer width being used
    against a scipy providing the other one: the compiled numba_* wrappers
    assume a fixed width, so calling through the wrong one is silent memory
    corruption or wrong answers, not a clean error -- refuse outright
    instead. Called from ensure_blas()/ensure_lapack(), once scipy is
    confirmed importable.
    ÚILP64ÚLP64z!This copy of Numba was built for z3 BLAS/LAPACK, but the scipy installed now provides zí scipy.linalg.cython_blas/cython_lapack. Numba's compiled BLAS/LAPACK wrappers assume a fixed integer width and will produce wrong results or crash if called against the wrong one. Either install a matching SciPy or rebuild Numba -- see z for details.N)r$   Ú_LAPACK_BUILD_ILP64ÚRuntimeErrorÚ_LAPACK_INSTALL_DOCS_URL)Úruntime_ilp64Úbuilt_asÚfound_ass      r#   Ú_check_lapack_int_widthr/   E   sƒ   € õ -Ñ.Ô.€MØÕ+Ò+Ð+Ý1Ð=�7�7°vˆØ+Ð7�7�7°ˆÝð>°ð >ð >Ø08ð>ð >õ /ð>ð >ð >ñ
ô 
ð 	
ð ,Ð+ó    ÚsÚdÚcÚzú<BLAS function>c                 ód   — t                                | ¦  «        }|€t          d|›d�¦  «        ‚|S )Nzunsupported dtype for z())Ú_blas_kindsÚgetr   )ÚdtypeÚ	func_nameÚkinds      r#   Úget_blas_kindr<   j   s4   € Ý�?Š?˜5Ñ!Ô!€DØ€|Ýˆn¸Y¸Y¸YÐHÑIÔIÐIØ€Kr0   c                  óh   — 	 dd l } n# t          $ r t          d¦  «        ‚w xY wt          ¦   «          d S ©Nr   z*scipy 0.16+ is required for linear algebra)Úscipy.linalg.cython_blasr    r/   ©Úscipys    r#   Úensure_blasrB   q   sW   € ðHØ'Ð'Ð'Ð'Ð'øÝð Hð Hð HÝÐFÑGÔGÐGðHøøøåÑÔÐÐÐó   ‚ ‡!c                  óh   — 	 dd l } n# t          $ r t          d¦  «        ‚w xY wt          ¦   «          d S r>   )Úscipy.linalg.cython_lapackr    r/   r@   s    r#   Úensure_lapackrF   y   sW   € ðHØ)Ð)Ð)Ð)Ð)øÝð Hð Hð HÝÐFÑGÔGÐGðHøøøåÑÔÐÐÐrC   c                 óZ   — |                       |||¦  «        }t          j        ||¦  «        S ©N)Úget_constant_genericr   Úalloca_once_value)ÚcontextÚbuilderÚtyÚvalÚconsts        r#   Úmake_constant_slotrP   �   s,   € Ø×(Ò(¨°"°cÑ:Ô:€EÝÔ$ W¨eÑ4Ô4Ð4r0   c                   óD   — e Zd ZdZd„ Zed„ ¦   «         Zed„ ¦   «         ZdS )Ú_BLASzM
    Functions to return type signatures for wrapped
    BLAS functions.
    c                 ó"   — t          ¦   «          d S rH   )rB   ©Úselfs    r#   Ú__init__z_BLAS.__init__Œ   s   € Ý‰Œˆˆˆr0   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©Úclsr9   ÚrtypeÚsigs       r#   rY   z_BLAS.numba_xxnrm2�   sb   € å˜Ð1°5Ñ9Ô9ˆÝŒj�œÝœÝœ¨Ñ.Ô.ÝœÝœ¨Ñ.Ô.ñ	0ô 0ˆõ Ô% n°cÑ:Ô:Ð:r0   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   r\   r]   r^   r_   r`   ©rb   r9   rd   s      r#   rf   z_BLAS.numba_xxgemmš   s–   € åŒjÝŒJÝŒJÝŒJÝŒJÝŒJÝŒJÝŒN˜5Ñ!Ô!ÝŒN˜5Ñ!Ô!ÝŒJÝŒN˜5Ñ!Ô!ÝŒJÝŒN˜5Ñ!Ô!ÝŒN˜5Ñ!Ô!ÝŒJñ
ô 
ˆõ  Ô% n°cÑ:Ô:Ð:r0   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rV   ÚclassmethodrY   rf   © r0   r#   rR   rR   †   sc   € € € € € ðð ð
ð ð ð ð;ð ;ñ „[ð;ð ð;ð ;ñ „[ð;ð ;ð ;r0   rR   c                   ó
  — e Zd ZdZd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
ed„ ¦   «         Zed	„ ¦   «         Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         ZdS )Ú_LAPACKzO
    Functions to return type signatures for wrapped
    LAPACK functions.
    c                 ó"   — t          ¦   «          d S rH   )rF   rT   s    r#   rV   z_LAPACK.__init__µ   s   € Ý‰Œˆˆˆr0   c           
      ó   — t          j        t           j        t           j        t           j        t          j        |¦  «        t           j        t          j        t
          ¦  «        ¦  «        }t          j        d|¦  «        S )NÚnumba_xxgetrf©r   r\   r]   r^   r_   ÚF_INT_nbtyper`   rh   s      r#   rs   z_LAPACK.numba_xxgetrf¸   sU   € åŒj�œÝœÝœÝœ¨Ñ.Ô.ÝœÝœ­Ñ5Ô5ñô ˆõ Ô% o°sÑ;Ô;Ð;r0   c           	      óê   — t          j        t           j        t           j        t          j        |¦  «        t           j        t          j        t
          ¦  «        ¦  «        }t          j        d|¦  «        S )NÚnumba_ez_xxgetrirt   rh   s      r#   rw   z_LAPACK.numba_ez_xxgetriÃ   sQ   € åŒj�œÝœÝœ¨Ñ.Ô.ÝœÝœ­Ñ5Ô5ñ	ô ˆõ Ô%Ð&8¸#Ñ>Ô>Ð>r0   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_rgeevrg   rh   s      r#   ry   z_LAPACK.numba_ez_rgeevÍ   sŒ   € åŒj�œÝœÝœÝœÝœ¨Ñ.Ô.ÝœÝœ¨Ñ.Ô.Ýœ¨Ñ.Ô.Ýœ¨Ñ.Ô.ÝœÝœ¨Ñ.Ô.Ýœñô ˆõ Ô%Ð&6¸Ñ<Ô<Ð<r0   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_cgeevrg   rh   s      r#   r{   z_LAPACK.numba_ez_cgeevÞ   s   € åŒj�œÝœÝœÝœÝœ¨Ñ.Ô.ÝœÝœ¨Ñ.Ô.Ýœ¨Ñ.Ô.ÝœÝœ¨Ñ.Ô.Ýœñô ˆõ Ô%Ð&6¸Ñ<Ô<Ð<r0   c                 ó.  — t          |d|¦  «        }t          j        t          j        t          j        t          j        t          j        t          j        |¦  «        t          j        t          j        |¦  «        ¦  «        }t          j        d|¦  «        S )NrX   Únumba_ez_xxxevdrZ   )rb   r9   Úwtyperd   s       r#   r}   z_LAPACK.numba_ez_xxxevdî   sm   € å˜Ð1°5Ñ9Ô9ˆÝŒj�œÝœÝœÝœÝœ¨Ñ.Ô.ÝœÝœ¨Ñ.Ô.ñô ˆõ Ô%Ð&7¸Ñ=Ô=Ð=r0   c                 óÐ   — t          j        t           j        t           j        t           j        t          j        |¦  «        t           j        ¦  «        }t          j        d|¦  «        S )NÚnumba_xxpotrfrg   rh   s      r#   r€   z_LAPACK.numba_xxpotrfû   sH   € åŒj�œÝœÝœÝœ¨Ñ.Ô.Ýœñ	ô ˆõ Ô% o°sÑ;Ô;Ð;r0   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 )NrX   Únumba_ez_gesddrZ   )rb   r9   Ústyperd   s       r#   r‚   z_LAPACK.numba_ez_gesdd  s’   € å˜Ð1°5Ñ9Ô9ˆÝŒjÝŒJÝŒJÝŒJÝŒJÝŒN˜5Ñ!Ô!ÝŒJÝŒN˜5Ñ!Ô!ÝŒN˜5Ñ!Ô!ÝŒJÝŒN˜5Ñ!Ô!ÝŒJñ
ô 
ˆõ Ô%Ð&6¸Ñ<Ô<Ð<r0   c           
      óö   — t          j        t           j        t           j        t           j        t          j        |¦  «        t           j        t          j        |¦  «        ¦  «        }t          j        d|¦  «        S )NÚnumba_ez_geqrfrg   rh   s      r#   r…   z_LAPACK.numba_ez_geqrf  sW   € åŒjÝŒJÝŒJÝŒJÝŒN˜5Ñ!Ô!ÝŒJÝŒN˜5Ñ!Ô!ñ
ô 
ˆõ Ô%Ð&6¸Ñ<Ô<Ð<r0   c                 ó  — t          j        t           j        t           j        t           j        t           j        t          j        |¦  «        t           j        t          j        |¦  «        ¦  «        }t          j        d|¦  «        S )NÚnumba_ez_xxgqrrg   rh   s      r#   r‡   z_LAPACK.numba_ez_xxgqr$  s\   € åŒjÝŒJÝŒJÝŒJÝŒJÝŒN˜5Ñ!Ô!ÝŒJÝŒN˜5Ñ!Ô!ñ
ô 
ˆõ Ô%Ð&6¸Ñ<Ô<Ð<r0   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          ¦  «        ¦  «        }t          j        d|¦  «        S )NrX   Únumba_ez_gelsd)	r[   r   r\   r]   r^   r_   Úfloat64ru   r`   ra   s       r#   r‰   z_LAPACK.numba_ez_gelsd1  s’   € å˜Ð1°5Ñ9Ô9ˆÝŒjÝŒJÝŒJÝŒJÝŒJÝŒN˜5Ñ!Ô!ÝŒJÝŒN˜5Ñ!Ô!ÝŒJÝŒN˜5Ñ!Ô!ÝŒMÝŒN�<Ñ(Ô(ñ
ô 
ˆõ Ô%Ð&6¸Ñ<Ô<Ð<r0   c                 ó<  — t          j        t           j        t           j        t           j        t          j        |¦  «        t           j        t          j        t
          ¦  «        t          j        |¦  «        t           j        ¦  «        }t          j        d|¦  «        S )NÚnumba_xgesvrt   rh   s      r#   rŒ   z_LAPACK.numba_xgesvC  sh   € åŒjÝŒJÝŒJÝŒJÝŒN˜5Ñ!Ô!ÝŒJÝŒN�<Ñ(Ô(ÝŒN˜5Ñ!Ô!ÝŒJñ	
ô 	
ˆõ Ô% m°SÑ9Ô9Ð9r0   N)ri   rj   rk   rl   rV   rm   rs   rw   ry   r{   r}   r€   r‚   r…   r‡   r‰   rŒ   rn   r0   r#   rp   rp   ¯   sV  € € € € € ðð ð
ð ð ð ð<ð <ñ „[ð<ð ð?ð ?ñ „[ð?ð ð=ð =ñ „[ð=ð  ð=ð =ñ „[ð=ð ð
>ð 
>ñ „[ð
>ð ð<ð <ñ „[ð<ð ð=ð =ñ „[ð=ð$ ð	=ð 	=ñ „[ð	=ð ð
=ð 
=ñ „[ð
=ð ð=ð =ñ „[ð=ð" ð:ð :ñ „[ð:ð :ð :r0   rp   c              #   ó  K  — g }g }g }t          |j        |¦  «        D ]§\  }}t          |t          j        ¦  «        r	|j        dv r||}
}	nP|                     d¬¦  «        }	t          |	|¦  «        }t          | |||f¦  «        }
| 	                    |	|
f¦  «         | 	                    |	¦  «         | 	                    |
¦  «         Œ¨t          |j
        g|¢R Ž t          |¦  «        fV — |D ]!\  }}| j                             |||¦  «         Œ"dS )zƒ
    Ensure that all array arguments are contiguous, if necessary by
    copying them.
    A new (sig, args) tuple is yielded.
    ÚCFÚC©ÚlayoutN)ÚzipÚargsÚ
isinstancer   ÚArrayr‘   Úcopyr   r   ÚappendÚreturn_typeÚtupleÚnrtÚdecref)rK   rL   rd   r“   ÚnewtysÚnewargsÚcopiesrM   rN   ÚnewtyÚnewvalÚcopysigs               r#   Úmake_contiguousr¢   R  s8  è è € ð €FØ€GØ€FÝ�s”x Ñ&Ô&ð 	ð 	‰ˆˆCÝ˜"�eœkÑ*Ô*ð 	+¨b¬i¸4Ð.?Ð.?Ø �6ˆEˆEà—G’G 3�GÑ'Ô'ˆEÝ  rÑ*Ô*ˆGÝ ¨°'¸C¸6ÑBÔBˆFØ�MŠM˜5 &˜/Ñ*Ô*Ð*Ø�Š�eÑÔÐØ�Š�vÑÔÐÐÝ
�C”OÐ
- fÐ
-Ð
-Ð
-­u°W©~¬~Ð
=Ð=Ð=Ð=Øð -ð -‰ˆˆCØŒ×Ò˜7 B¨Ñ,Ô,Ð,Ð,ð-ð -r0   c                 óŒ   ‡— dŠˆfd„}|                       ||t          t          j        t          j        ¦  «        |f¦  «         dS )z.
    Check whether *n* fits in a C `int`.
    iÿÿÿc                 ó2   •— | ‰k    rt          d¦  «        ‚d S )Nz$array size too large to fit in C int)ÚOverflowError)ÚnÚ_maxints    €r#   Úimplzcheck_c_int.<locals>.implq  s"   ø€ ØˆwŠ;ˆ;ÝÐ FÑGÔGÐGð ˆ;r0   N)Úcompile_internalr   r   Únoner^   )rK   rL   r¦   r¨   r§   s       @r#   Úcheck_c_intr«   k  sj   ø€ ð €GðHð Hð Hð Hð Hð ×Ò˜W dÝ&¥u¤zµ5´:Ñ>Ô>ÀÀñFô Fð Fð Fð Fr0   c                 ó  — |                      t          j        ||¦  «        d¬¦  «        5  |                      |¦  «        }|                     ¦   «          |                     d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z[
    Check the integer error return from one of the BLAS wrappers in
    _helperlib.c.
    F©Úlikelyz#BLAS wrapper returned with an errorN©Úif_thenr   Úis_not_nullÚget_python_apiÚ
gil_ensureÚfatal_error©rK   rL   ÚresÚpyapis       r#   Úcheck_blas_returnr¸   y  sÙ   € ð
 
�Š�Ô,¨W°cÑ:Ô:À5ˆÑ	IÔ	Ið Að Aà×&Ò& wÑ/Ô/ˆØ×ÒÑÔÐØ×ÒÐ?Ñ@Ô@Ð@ð	Að Að Añ Aô Að Að Að Að Að Að Að Aøøøð Að Að Að Að Að Aó   «?A7Á7A;Á>A;c                 ó  — |                      t          j        ||¦  «        d¬¦  «        5  |                      |¦  «        }|                     ¦   «          |                     d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z]
    Check the integer error return from one of the LAPACK wrappers in
    _helperlib.c.
    Fr­   z%LAPACK wrapper returned with an errorNr¯   rµ   s       r#   Úcheck_lapack_returnr»   …  sÙ   € ð
 
�Š�Ô,¨W°cÑ:Ô:À5ˆÑ	IÔ	Ið Cð Cà×&Ò& wÑ/Ô/ˆØ×ÒÑÔÐØ×ÒÐAÑBÔBÐBð	Cð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð Cð Cr¹   c                 ó|  — t          j        t          j        d¦  «        t          t          t          t
          t
          t
          g¦  «        }t          j        |j        |d¦  «        }	t          |¦  «        }
t          j
        t          t          |
¦  «        ¦  «        }t          j
        t          t          |¦  «        ¦  «        }|                     |	||||                     |t
          ¦  «        |                     |t
          ¦  «        |                     |t
          ¦  «        f¦  «        }t          | ||¦  «         dS )zQ
    Call the BLAS vector * vector product function for the given arguments.
    r   Únumba_xxdotN)r   ÚFunctionTypeÚIntTypeÚll_charÚintp_tÚ	ll_void_pr   Úget_or_insert_functionÚmoduler<   ÚConstantÚordÚintÚcallÚbitcastr¸   )rK   rL   Ú	conjugater9   r¦   Úa_dataÚb_dataÚout_dataÚfntyÚfnr;   Úkind_valr¶   s                r#   Ú
call_xxdotrÑ   ‘  sõ   € õ
 Œ?�2œ: b™>œ>Ý#¥W­fÝ%¥yµ)ðñô €Dõ 
Ô	'¨¬¸¸mÑ	LÔ	L€Bå˜ÑÔ€DÝŒ{�7¥C¨¡I¤IÑ.Ô.€HÝ”�G¥S¨¡^¤^Ñ4Ô4€Ià
�,Š,�r˜H i°Ø#ŸOšO¨FµIÑ>Ô>Ø#ŸOšO¨FµIÑ>Ô>Ø#ŸOšO¨HµiÑ@Ô@ðBñ Cô C€Cõ �g˜w¨Ñ,Ô,Ð,Ð,Ð,r0   c                 óÜ  — t          j        t          j        d¦  «        t          t          t          t          t
          t
          t          t
          t
          t
          g
¦  «        }t          j        |j        |d¦  «        }	|j	        }
t          | ||
d¦  «        }t          | ||
d¦  «        }|j        dk    r|\  }}|d         }n|\  }}|d         }t          |
¦  «        }t          j        t          t          |¦  «        ¦  «        }t          j        t          |rt          d¦  «        nt          d	¦  «        ¦  «        }|                     |	|||||                     |t
          ¦  «        |                     |t
          ¦  «        ||                     |t
          ¦  «        |                     |t
          ¦  «        |                     |t
          ¦  «        f
¦  «        }t#          | ||¦  «         d
S )zQ
    Call the BLAS matrix * vector product function for the given arguments.
    r   Únumba_xxgemvç      ð?ç        ÚFr   r   Útr¦   N)r   r¾   r¿   rÀ   rÁ   rÂ   r   rÃ   rÄ   r9   rP   r‘   r<   rÅ   rÆ   rÈ   rÉ   r¸   )rK   rL   Údo_transÚm_typeÚm_shapesÚm_dataÚv_datarÍ   rÎ   rÏ   r9   ÚalphaÚbetaÚmr¦   Úldar;   rÐ   Útransr¶   s                       r#   Úcall_xxgemvrâ   §  s”  € õ
 Œ?�2œ: b™>œ>Ý#¥WÝ"¥FÝ%¥yµ&Ý%¥yµ)ðñô €Dõ 
Ô	'¨¬¸¸nÑ	MÔ	M€BàŒL€EÝ˜w¨°¸Ñ<Ô<€EÝ˜g w°°sÑ;Ô;€Dà„}˜ÒÐØ‰ˆˆ1Ø�qŒkˆˆà‰ˆˆ1Ø�qŒkˆå˜ÑÔ€DÝŒ{�7¥C¨¡I¤IÑ.Ô.€HÝŒK�¨XÐ!C¥ S¡¤ ½3¸s¹8¼8ÑDÔ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€Cõ �g˜w¨Ñ,Ô,Ð,Ð,Ð,r0   c                 óð  ‡‡‡!‡"— t          j        t          j        d¦  «        t          t          t          t          t          t          t
          t
          t          t
          t          t
          t
          t          g¦  «        }t          j        ‰j        |d¦  «        }|\  }}|\  }}|j	        }t          | ‰|d¦  «        }t          | ‰|d¦  «        }t          j        t          t          d¦  «        ¦  «        Š"t          j        t          t          d¦  «        ¦  «        Š!ˆˆ!ˆˆ"fd„} ||||¦  «        \  }}} ||||¦  «        \  }}} |‰|	|
¦  «        \  }}}t          |¦  «        }t          j        t          t          |¦  «        ¦  «        }‰                     |||||||‰                     |t
          ¦  «        ||||‰                     |t
          ¦  «        ||f¦  «        } t!          | ‰| ¦  «         dS )	zQ
    Call the BLAS matrix * matrix product function for the given arguments.
    r   rf   rÔ   rÕ   r×   r¦   c                 ó–   •— | j         ‰j         k    r‰n‰| j         dk    r|d         n|d         ‰                     |t          ¦  «        fS )Nr�   r   r   )r‘   rÉ   rÂ   )rM   ÚshapesÚdatarL   ÚnotransÚout_typerá   s      €€€€r#   Úget_array_paramz$call_xxgemm.<locals>.get_array_paramæ  sP   ø€ ð ”y H¤OÒ3Ð3ˆGˆG¸àœ cÒ)Ð)ˆF�1ŒIˆI¨v°a¬yà�OŠO˜D¥)Ñ,Ô,ð
ð 	
r0   N)r   r¾   r¿   rÀ   rÁ   rÂ   r   rÃ   rÄ   r9   rP   rÅ   rÆ   r<   rÈ   rÉ   r¸   )#rK   rL   Úx_typeÚx_shapesÚx_dataÚy_typeÚy_shapesÚy_datarè   Ú
out_shapesrÍ   rÎ   rÏ   rß   ÚkÚ_kr¦   r9   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Ô	M€Bà�D€A€qØ�E€BˆØŒL€EÝ˜w¨°¸Ñ<Ô<€EÝ˜g w°°sÑ;Ô;€DåŒK�¥ S¡¤Ñ*Ô*€EÝŒk�'¥3 s¡8¤8Ñ,Ô,€Gð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð *˜/¨&°(¸FÑCÔCÑ€FˆC�Ø)˜/¨&°(¸FÑCÔCÑ€FˆC�Ø$�_ X¨z¸8ÑDÔD�N€A€sˆFå˜ÑÔ€DÝŒ{�7¥C¨¡I¤IÑ.Ô.€Hà
�,Š,�r˜H f¨f°a¸¸AØ#ŸOšO¨Eµ9Ñ=Ô=¸vÀsØ" C¨¯ª¸½yÑ)IÔ)IØ" Cð)ñ *ô *€Cõ �g˜w¨Ñ,Ô,Ð,Ð,Ð,r0   c                 óf   — d„ }|                       ||||¦  «        }t          | ||j        |¦  «        S )z 
    np.dot(matrix, matrix)
    c                 óÒ   — | j         \  }}|j         \  }}|dk    rt          j        ||f| j        ¦  «        S t          j        ||f| j        ¦  «        }t          j        | ||¦  «        S ©Nr   ©ÚshapeÚnpÚzerosr9   ÚemptyÚdot)ÚaÚbrß   rñ   rò   r¦   Úouts          r#   Údot_implzdot_2_mm.<locals>.dot_impl  sd   € ØŒw‰ˆˆ1Ø”‰ˆˆAØ�Š6ˆ6Ý”8˜Q ˜F A¤GÑ,Ô,Ð,ÝŒh˜˜1�v˜qœwÑ'Ô'ˆÝŒv�a˜˜CÑ Ô Ð r0   ©r©   r   r˜   ©rK   rL   rd   r“   r  r¶   s         r#   Údot_2_mmr  þ  óB   € ð!ð !ð !ð ×
"Ò
" 7¨H°c¸4Ñ
@Ô
@€CÝ˜G W¨c¬o¸sÑCÔCÐCr0   c                 óf   — d„ }|                       ||||¦  «        }t          | ||j        |¦  «        S )z 
    np.dot(vector, matrix)
    c                 óÌ   — | j         \  }|j         \  }}|dk    rt          j        |f| j        ¦  «        S t          j        |f| j        ¦  «        }t          j        | ||¦  «        S rþ   rÿ   )r  r  rß   Ú_mr¦   r  s         r#   r  zdot_2_vm.<locals>.dot_impl  s^   € ØŒW‰ˆØ”‰ˆˆAØ�Š6ˆ6Ý”8˜Q˜E 1¤7Ñ+Ô+Ð+ÝŒh˜�u˜aœgÑ&Ô&ˆÝŒv�a˜˜CÑ Ô Ð r0   r	  r
  s         r#   Údot_2_vmr    r  r0   c                 óf   — d„ }|                       ||||¦  «        }t          | ||j        |¦  «        S )z 
    np.dot(matrix, vector)
    c                 óÌ   — | j         \  }}|j         \  }|dk    rt          j        |f| j        ¦  «        S t          j        |f| j        ¦  «        }t          j        | ||¦  «        S rþ   rÿ   )r  r  rß   r¦   Ú_nr  s         r#   r  zdot_2_mv.<locals>.dot_impl"  s^   € ØŒw‰ˆˆ1ØŒg‰ˆØ�Š6ˆ6Ý”8˜Q˜E 1¤7Ñ+Ô+Ð+ÝŒh˜�u˜aœgÑ&Ô&ˆÝŒv�a˜˜CÑ Ô Ð r0   r	  r
  s         r#   Údot_2_mvr    r  r0   c           
      ó"  — |j         \  }}|j        } t          |¦  «        | ||d         ¦  «        } t          |¦  «        | ||d         ¦  «        }	t          j        ||j        ¦  «        \  }
d„ }|                      ||t          t          j	        g|j         ¢R Ž |¦  «         t          | ||
¦  «         t          j        ||                      |¦  «        ¦  «        }t          | ||||
|j        |	j        |¦  «         |                     |¦  «        S )z<
    np.dot(vector, vector)
    np.vdot(vector, vector)
    r   r   c                 óT   — | j         \  }|j         \  }||k    rt          d¦  «        ‚d S )Nz;incompatible array sizes for np.dot(a, b) (vector * vector)©r   Ú
ValueError)r  r  rß   r¦   s       r#   Ú
check_argszdot_2_vv.<locals>.check_args9  s;   € ØŒW‰ˆØŒW‰ˆØ�Š6ˆ6Ýð 1ñ 2ô 2ð 2ð ˆ6r0   )r“   r˜   r   r   Úunpack_tupler   r©   r   r   rª   r«   Úalloca_onceÚget_value_typerÑ   ræ   Úload)rK   rL   rd   r“   rÊ   ÚatyÚbtyr9   r  r  r¦   r  r  s                r#   Údot_2_vvr   .  s  € ð
 Œx�H€CˆØŒO€EØ�
�3‰Œ˜ ¨$¨q¬'Ñ2Ô2€AØ�
�3‰Œ˜ ¨$¨q¬'Ñ2Ô2€AÝ	Ô	˜g q¤wÑ	/Ô	/�B€Að2ð 2ð 2ð ×Ò˜W jÝ&¥u¤zÐ=°C´HÐ=Ð=Ð=¸tñEô Eð Eå�˜ !Ñ$Ô$Ð$å
Ô
˜g w×'=Ò'=¸eÑ'DÔ'DÑ
EÔ
E€CÝˆw˜ ¨E°1°a´f¸a¼fÀcÑJÔJÐJØ�<Š<˜ÑÔÐr0   c                 ó$   — t          d| |¦  «        S )z
    np.dot(a, b)
    znp.dot()©Ú
dot_2_impl©r  r  s     r#   Údot_2r%  I  s   € õ
 �j ! QÑ'Ô'Ð'r0   c                 ó$   — t          d| |¦  «        S )z
    a @ b
    z'@'r"  r$  s     r#   Úmatmul_2r'  Q  s   € õ
 �e˜Q Ñ"Ô"Ð"r0   c                 ó"  ‡ ‡— t          |t          j        ¦  «        rpt          |t          j        ¦  «        rXt          ˆ fd„¦   «         Š|j        dvs	|j        dvr-t
          j        s!t          j        ‰ ›d||f›�t          ¦  «         ˆfd„S d S d S )Nc                 ój  •‡— |j         |j         fŠˆfd„}|j        |j        k    rt          d‰z  ¦  «        ‚‰dk    rt          j        |j        dd¦  «        }nH‰dk    s‰dk    rt          j        |j        dd¦  «        }n ‰d	k    r|j        }nt          d
‰z  ¦  «        ‚t          |||¦  «        |fS )Nc                 ó¤  •— t          ¦   «          t          | |||¦  «        5 \  }}‰dk    rt          | |||¦  «        cd d d ¦  «         S ‰dk    rt          | |||¦  «        cd d d ¦  «         S ‰dk    rt	          | |||¦  «        cd d d ¦  «         S ‰dk    rt          | |||¦  «        cd d d ¦  «         S t          d¦  «        ‚# 1 swxY w Y   d S )N©é   r,  ©r,  r   ©r   r,  ©r   r   Úunreachable)rB   r¢   r  r  r  r   ÚAssertionError©rK   rL   rd   r“   Úndimss       €r#   Ú_dot2_codegenz0dot_2_impl.<locals>._impl.<locals>._dot2_codegen_  s{  ø€ Ý‘”�å$ W¨g°s¸DÑAÔAð 
<Á[ÀcÈ4Ø ’�Ý'¨°¸#¸tÑDÔDð
<ð 
<ð 
<ð 
<ñ 
<ô 
<ð 
<ð 
<ð  &š˜Ý'¨°¸#¸tÑDÔDð	
<ð 
<ð 
<ð 
<ñ 
<ô 
<ð 
<ð 
<ð
  &š˜Ý'¨°¸#¸tÑDÔDð
<ð 
<ð 
<ð 
<ñ 
<ô 
<ð 
<ð 
<ð  &š˜Ý'¨°¸#¸tÑDÔDð
<ð 
<ð 
<ð 
<ñ 
<ô 
<ð 
<ð 
<õ -¨]Ñ;Ô;Ð;ð
<ð 
<ð 
<ð 
<øøøð 
<ð 
<ð 
<ð 
<ð 
<ð 
<s)   ¢CÁ
CÁ.CÂCÂ6CÃC	ÃC	z)%s arguments must all have the same dtyper+  r,  r�   r-  r.  r   r/  z*%s: inputs must have compatible dimensions)Úndimr9   r   r   r•   r   )Útypingcontextr  r  r4  r˜   r3  Únames        @€r#   Ú_implzdot_2_impl.<locals>._impl[  së   øø€ à”V˜QœVÐ$ˆEð<ð <ð <ð <ð <ð Œw˜!œ'Ò!Ð!Ý!Ø?À$ÑFñHô Hð Hð ˜ŠˆÝ#œk¨!¬'°1°cÑ:Ô:��Ø˜&’� E¨V¢O OÝ#œk¨!¬'°1°cÑ:Ô:��Ø˜&’�Øœg��å!ð $0Ø37ñ#8ñ 9ô 9ð 9å˜[¨!¨QÑ/Ô/°Ð>Ð>r0   rŽ   z+ is faster on contiguous arrays, called on c                 ó   •—  ‰| |¦  «        S rH   rn   )r  r  r8  s     €r#   ú<lambda>zdot_2_impl.<locals>.<lambda>„  s   ø€ ˜E˜E ! Q™KœK€ r0   ©
r”   r   r•   r	   r‘   r   ÚDISABLE_PERFORMANCE_WARNINGSÚwarningsÚwarnr   )r7  r  r  r8  s   `  @r#   r#  r#  Y  sÆ   øø€ Ý�!•U”[Ñ!Ô!ð *(¥j°µE´KÑ&@Ô&@ð *(Ý	ð	?ð 	?ð 	?ð 	?ñ 
Œð	?ðD ŒH˜DÐ Ð  A¤H°DÐ$8Ð$8ÝÔ5ð %9åŒMà�D�D˜1˜a˜&˜&ð#Ý$;ñ=ô =ð =ð (Ð'Ð'Ð'Ð'ðU*(ð *(ð *(ð *(r0   c                 ó  ‡— t          | t          j        ¦  «        rlt          |t          j        ¦  «        rTt          d„ ¦   «         Š| j        dvs	|j        dvr+t
          j        st          j        d| |f›�t          ¦  «         ˆfd„S dS dS )z
    np.vdot(a, b)
    c                 óÀ   — d„ }|j         dk    s|j         dk    rt          d¦  «        ‚|j        |j        k    rt          d¦  «        ‚t          |j        ||¦  «        |fS )Nc                 ó¤   — t          ¦   «          t          | |||¦  «        5 \  }}t          | |||d¬¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )NT)rÊ   )rB   r¢   r   )rK   rL   rd   r“   s       r#   Úcodegenz$vdot.<locals>._impl.<locals>.codegen�  s®   € Ý‘”�å$ W¨g°s¸DÑAÔAð QÙ#˜˜dÝ# G¨W°c¸4È4ÐPÑPÔPðQð Qð Qð Qñ Qô Qð Qð Qð Qð Qð Qð Qøøøð Qð Qð Qð Qð Qð Qs   ¡AÁA	ÁA	r   z&np.vdot() only supported on 1-D arraysz0np.vdot() arguments must all have the same dtype)r5  r   r9   r   )r6  ÚleftÚrightrB  s       r#   r8  zvdot.<locals>._impl�  sz   € ðQð Qð Qð Œy˜AŠ~ˆ~ ¤¨q¢ Ý!Ð"JÑKÔKÐKàŒz˜Uœ[Ò(Ð(Ý!ØFñHô Hð Hå˜TœZ¨¨uÑ5Ô5°wÐ>Ð>r0   rŽ   ú4np.vdot() is faster on contiguous arrays, called on c                 ó   •—  ‰| |¦  «        S rH   rn   ©rC  rD  r8  s     €r#   r:  zvdot.<locals>.<lambda>¥  s   ø€  5 5¨¨uÑ#5Ô#5€ r0   Nr;  rG  s     @r#   ÚvdotrH  ‡  s¸   ø€ õ
 �$�œÑ$Ô$ð 6­°E½5¼;Ñ)GÔ)Gð 6Ý	ð	?ð 	?ñ 
Œð	?ð" ŒK˜tÐ#Ð# u¤|¸4Ð'?Ð'?ÝÔ5ð (@åŒMˆMà˜%�=�=ð#Ý$;ñ=ô =ð =ð 6Ð5Ð5Ð5Ð5ð36ð 6ð 6ð 6r0   c                 óŒ   — | j         \  }|j         \  }}||k    rt          d¦  «        ‚|j         |fk    rt          d¦  «        ‚d S )Nz;incompatible array sizes for np.dot(a, b) (vector * matrix)zFincompatible output array size for np.dot(a, b, out) (vector * matrix)r  )r  r  r  rß   r  r¦   s         r#   Údot_3_vm_check_argsrJ  ¨  sg   € Ø	
Œ�B€AØŒG�E€BˆØˆB‚w€wÝð :ñ ;ô ;ð 	;à
„y�Q�DÒÐÝð ?ñ @ô @ð 	@ð Ðr0   c                 óŒ   — | j         \  }}|j         \  }||k    rt          d¦  «        ‚|j         |fk    rt          d¦  «        ‚d S )Nz;incompatible array sizes for np.dot(a, b) (matrix * vector)zFincompatible output array size for np.dot(a, b, out) (matrix * vector)r  )r  r  r  rß   r  r¦   s         r#   Údot_3_mv_check_argsrL  ³  sg   € ØŒG�E€A€rØ	
Œ�B€AØˆB‚w€wÝð -ñ .ô .ð 	.à
„y�Q�DÒÐÝð ?ñ @ô @ð 	@ð Ðr0   c                 ó®  — |j         \  }}}||j        k    sJ ‚|j        } t          |¦  «        | ||d         ¦  «        } t          |¦  «        | ||d         ¦  «        }	 t          |¦  «        | ||d         ¦  «        }
t	          j        ||j        ¦  «        }t	          j        ||	j        ¦  «        }t	          j        ||
j        ¦  «        }|j        |j        k     r5|}|}|d         }|d         }|j        dk    }|	j	        |j	        }}t          }n4|}|}|d         }|d         }|j        dk    }|j	        |	j	        }}t          }|                      ||t          t          j        g|j         ¢R Ž |¦  «         |D ]}t!          | ||¦  «         Œ|                      t          j        d¦  «        }|                     d||¦  «        }|                     d||¦  «        }|                     ||¦  «        }|                     |d¬¦  «        5 \  }}|5  t	          j        ||
j	        |                     |
j        |
j        ¦  «        d¦  «         d	d	d	¦  «         n# 1 swxY w Y   |5  t5          | |||||||
j	        ¦  «         d	d	d	¦  «         n# 1 swxY w Y   d	d	d	¦  «         n# 1 swxY w Y   t7          | ||j        |
                     ¦   «         ¦  «        S )
zE
    np.dot(vector, matrix, out)
    np.dot(matrix, vector, out)
    r   r   r,  rÖ   r�   ú==Fr­   N)r“   r˜   r9   r   r   r  r   r5  r‘   ræ   rJ  rL  r©   r   r   rª   r«   Úget_constantr^   Úicmp_signedÚor_Úif_elseÚmemsetÚmulÚitemsizeÚnitemsrâ   r   Ú	_getvalue)rK   rL   rd   r“   ÚxtyÚytyÚouttyr9   ÚxÚyr  rë   rî   rð   ÚmtyrÚ   Úv_shaperà   rØ   rÛ   rÜ   r  rN   ÚzeroÚ
both_emptyÚmatrix_emptyÚis_emptyr  Únonemptys                                r#   Údot_3_vmrd  ¾  s³  € ð
 ”h�O€CˆˆeØ�C”OÒ#Ð#Ð#Ð#ØŒI€Eà�
�3‰Œ˜ ¨$¨q¬'Ñ2Ô2€AØ�
�3‰Œ˜ ¨$¨q¬'Ñ2Ô2€AØ
�*�UÑ
Ô
˜G W¨d°1¬gÑ
6Ô
6€CÝÔ# G¨Q¬WÑ5Ô5€HÝÔ# G¨Q¬WÑ5Ô5€HÝÔ% g¨s¬yÑ9Ô9€JØ
„x�#”(ÒÐð ˆØˆØ˜1”+ˆØ�qŒkˆØ”: Ò$ˆØœ ¤�ˆÝ(ˆ
ˆ
ð ˆØˆØ˜1”+ˆØ�qŒkˆØ”: Ò$ˆØœ ¤�ˆÝ(ˆ
à×Ò˜W jÝ&¥u¤zÐ=°C´HÐ=Ð=Ð=¸tñEô Eð Eàð +ð +ˆÝ�G˜W cÑ*Ô*Ð*Ð*à×Ò¥¤
¨AÑ.Ô.€DØ×$Ò$ T¨7°DÑ9Ô9€JØ×&Ò& t¨S°$Ñ7Ô7€LØ�{Š{˜: |Ñ4Ô4€HØ	�Š˜¨%ˆÑ	0Ô	0ð *Ñ4E°U¸HØð 	Eð 	EÝŒN˜7 C¤HØ"Ÿ;š; s¤|°S´ZÑ@Ô@À!ñEô Eð Eð	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eøøøð 	Eð 	Eð 	Eð 	Eð ð 	*ð 	*Ý˜ ¨(°C¸À6Ø ¤ñ*ô *ð *ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð	*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *õ ˜W g¨s¬Ø Ÿ]š]™_œ_ñ.ô .ð .sZ   È
J#È;IÉJ#ÉI	ÉJ#ÉI	ÉJ#É$JÊ J#ÊJ	ÊJ#ÊJ	ÊJ#Ê#J'Ê*J'c                 ó^	  — |j         \  }}}||j        k    sJ ‚|j        } t          |¦  «        | ||d         ¦  «        } t          |¦  «        | ||d         ¦  «        }	 t          |¦  «        | ||d         ¦  «        }
t	          j        ||j        ¦  «        }t	          j        ||	j        ¦  «        }t	          j        ||
j        ¦  «        }|\  }}|\  }}|j        dk    sJ ‚d„ }|                      ||t          t          j        g|j         ¢R Ž |¦  «         t          | ||¦  «         t          | ||¦  «         t          | ||¦  «         |j        }|	j        }|
j        }|                      t          j        d¦  «        }|                     d||¦  «        }|                     d||¦  «        }|                     d||¦  «        }|                     ||                     ||¦  «        ¦  «        }|                     |d¬¦  «        5 \  }}|5  t	          j        ||
j        |                     |
j        |
j        ¦  «        d¦  «         d	d	d	¦  «         n# 1 swxY w Y   |5  |                      t          j        d¦  «        }|                     d||¦  «        }|                     d||¦  «        }|                     |¦  «        5 \  } }!| 5  |                     |¦  «        5 \  }"}#|"5  t/          | |d|||||¦  «         d	d	d	¦  «         n# 1 swxY w Y   |#5  |j        |j        k    }$t1          | ||$|||||¦  «         d	d	d	¦  «         n# 1 swxY w Y   d	d	d	¦  «         n# 1 swxY w Y   d	d	d	¦  «         n# 1 swxY w Y   |!5  |                     |¦  «        5 \  }%}&|%5  |j        |j        k    }$t1          | ||$|||||¦  «         d	d	d	¦  «         n# 1 swxY w Y   |&5  t3          | ||||||||||¦  «         d	d	d	¦  «         n# 1 swxY w Y   d	d	d	¦  «         n# 1 swxY w Y   d	d	d	¦  «         n# 1 swxY w Y   d	d	d	¦  «         n# 1 swxY w Y   d	d	d	¦  «         n# 1 swxY w Y   d	d	d	¦  «         n# 1 swxY w Y   t5          | ||j        |
                     ¦   «         ¦  «        S )
z%
    np.dot(matrix, matrix, out)
    r   r   r,  r�   c                 ó�   — | j         \  }}|j         \  }}||k    rt          d¦  «        ‚|j         ||fk    rt          d¦  «        ‚d S )Nz;incompatible array sizes for np.dot(a, b) (matrix * matrix)zFincompatible output array size for np.dot(a, b, out) (matrix * matrix)r  )r  r  r  rß   rñ   rò   r¦   s          r#   r  zdot_3_mm.<locals>.check_args  sl   € ØŒw‰ˆˆ1Ø”‰ˆˆAØ�Š7ˆ7Ýð 1ñ 2ô 2ð 2àŒ9˜˜A˜ÒÐÝð Cñ Dô Dð Dð Ðr0   rN  Fr­   N)r“   r˜   r9   r   r   r  r   r‘   r©   r   r   rª   r«   ræ   rO  r^   rP  rQ  rR  rS  rT  rU  rV  rÑ   râ   rû   r   rW  )'rK   rL   rd   r“   rX  rY  rZ  r9   r[  r\  r  rë   rî   rð   rß   rñ   rò   r¦   r  rì   rï   rÍ   r_  r`  Úx_emptyÚy_emptyrb  r  rc  ÚoneÚis_left_vecÚis_right_vecÚr_vecÚr_matÚv_vÚm_vrØ   Úv_mÚm_ms'                                          r#   Údot_3_mmrr  ÷  s«  € ð ”h�O€CˆˆeØ�C”OÒ#Ð#Ð#Ð#ØŒI€Eà�
�3‰Œ˜ ¨$¨q¬'Ñ2Ô2€AØ�
�3‰Œ˜ ¨$¨q¬'Ñ2Ô2€AØ
�*�UÑ
Ô
˜G W¨d°1¬gÑ
6Ô
6€CÝÔ# G¨Q¬WÑ5Ô5€HÝÔ# G¨Q¬WÑ5Ô5€HÝÔ% g¨s¬yÑ9Ô9€JØ�D€A€qØ�E€Bˆð Œ<˜3ÒÐÐÐðDð Dð Dð ×Ò˜W jÝ&¥u¤zÐ=°C´HÐ=Ð=Ð=¸tñEô Eð Eõ �˜ !Ñ$Ô$Ð$Ý�˜ !Ñ$Ô$Ð$Ý�˜ !Ñ$Ô$Ð$àŒV€FØŒV€FØŒx€Hð ×Ò¥¤
¨AÑ.Ô.€DØ×$Ò$ T¨1¨dÑ3Ô3€JØ×!Ò! $¨¨4Ñ0Ô0€GØ×!Ò! $¨¨4Ñ0Ô0€GØ�{Š{˜: w§{¢{°7¸GÑ'DÔ'DÑEÔE€HØ	�Š˜¨%ˆÑ	0Ô	0ð $EÑ4E°U¸HØð 	Eð 	EÝŒN˜7 C¤HØ"Ÿ;š; s¤|°S´ZÑ@Ô@À!ñEô Eð Eð	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eøøøð 	Eð 	Eð 	Eð 	Eð ð  	Eð  	Eð ×&Ò&¥u¤z°1Ñ5Ô5ˆCØ!×-Ò-¨d°A°sÑ;Ô;ˆKØ"×.Ò.¨t°Q¸Ñ<Ô<ˆLà—’ Ñ.Ô.ð E±.°5¸%Øð 
Qð 
QØ Ÿš¨Ñ5Ô5ð 	Q¹¸#¸sØ ð Dð Då& w°¸ÀØ'(¨&°&¸(ñDô Dð DðDð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Dð !ð Qð Qà'*¤z°U´\Ò'A˜HÝ'¨°¸(Ø(+¨X°v¸vÀxñQô Qð QðQð Qð Qñ Qô Qð Qð Qð Qð Qð Qð Qøøøð Qð Qð Qð Qð	Qð 	Qð 	Qñ 	Qô 	Qð 	Qð 	Qð 	Qð 	Qð 	Qð 	Qøøøð 	Qð 	Qð 	Qð 	Qð
Qð 
Qð 
Qñ 
Qô 
Qð 
Qð 
Qð 
Qð 
Qð 
Qð 
Qøøøð 
Qð 
Qð 
Qð 
Qð ð Eð EØ Ÿš¨Ñ5Ô5ð E¹¸#¸sØ ð Qð Qà'*¤z°U´\Ò'A˜HÝ'¨°¸(Ø(+¨X°v¸vÀxñQô Qð QðQð Qð Qñ Qô Qð Qð Qð Qð Qð Qð Qøøøð Qð Qð Qð Qð
 !ð Eð Eå'¨°Ø(+¨X°vØ(+¨X°vØ(-¨z¸8ñEô Eð EðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð EðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð EðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð EðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eð 	Eð  	Eð  	Eñ  	Eô  	Eð  	Eð  	Eð  	Eð  	Eð  	Eð  	Eøøøð  	Eð  	Eð  	Eð  	Eð	$Eð $Eð $Eñ $Eô $Eð $Eð $Eð $Eð $Eð $Eð $Eøøøð $Eð $Eð $Eð $EõL ˜W g¨s¬Ø Ÿ]š]™_œ_ñ.ô .ð .sŸ  ÈQ;È;IÉ	Q;ÉI	ÉQ;ÉI	ÉQ;É"A$Q$ËQËM9	Ë"M"Ë(LË?M"ÌLÌM"ÌLÌM"Ì'MÌ?M"ÍMÍM"ÍMÍM"ÍM9	Í"M&Í&M9	Í)M&Í*M9	Í-QÍ9M=Í=QÎ M=ÎQÎP6	ÎPÎ"'OÏ	PÏOÏPÏOÏPÏ"PÏ<PÐPÐPÐPÐPÐP6	ÐP#Ð#P6	Ð&P#Ð'P6	Ð*QÐ6P:Ð:QÐ=P:Ð>QÑQ$ÑQÑQ$ÑQÑQ$ÑQ;Ñ$Q(	Ñ(Q;Ñ+Q(	Ñ,Q;Ñ;Q?ÒQ?c                 ób  ‡— t          | t          j        ¦  «        r�t          |t          j        ¦  «        rwt          |t          j        ¦  «        r_t          d„ ¦   «         Š| j        dvs|j        dvs	|j        dvr+t
          j        st          j        d| |f›�t          ¦  «         ˆfd„S dS dS dS )z
    np.dot(a, b, out)
    c                 óŽ   — d„ }|j         |j         k    s|j         |j         k    rt          d¦  «        ‚t          ||||¦  «        |fS )Nc                 ód  — t          ¦   «          t          | |||¦  «        5 \  }}t          d„ |j        d d…         D ¦   «         ¦  «        }|dhk    rt	          | |||¦  «        cd d d ¦  «         S |ddhk    rt          | |||¦  «        cd d d ¦  «         S t          d¦  «        ‚# 1 swxY w Y   d S )Nc              3   ó$   K  — | ]}|j         V — Œd S rH   ©r5  )Ú.0r[  s     r#   ú	<genexpr>z8dot_3.<locals>._impl.<locals>.codegen.<locals>.<genexpr>^  s$   è è € Ð=Ð=¨1 ¤Ð=Ð=Ð=Ð=Ð=Ð=r0   r,  r   r0  )rB   r¢   Úsetr“   rr  rd  r1  r2  s        r#   rB  z%dot_3.<locals>._impl.<locals>.codegenY  s$  € Ý‘”�å$ W¨g°s¸DÑAÔAð <ñ FLÀcØFJÝÐ=Ð=°´¸¸!¸´Ð=Ñ=Ô=Ñ=Ô=�EØ  ’|�|Ý'¨°¸#¸tÑDÔDð	<ð <ð <ð <ñ <ô <ð <ð <ð
  1 a &š˜Ý'¨°¸#¸tÑDÔDð<ð <ð <ð <ñ <ô <ð <ð <õ -¨]Ñ;Ô;Ð;ð<ð <ð <ð <øøøð <ð <ð <ð <ð <ð <s   ¡AB%Á0B%ÂB%Â%B)Â,B)z/np.dot() arguments must all have the same dtype)r9   r   r   )r6  r  r  r  rB  s        r#   r8  zdot_3.<locals>._implW  sc   € ð<ð <ð <ð Œw˜!œ'Ò!Ð! Q¤W°´	Ò%9Ð%9Ý!ØEñGô Gð Gõ ˜S ! Q¨Ñ,Ô,¨gÐ5Ð5r0   rŽ   rE  c                 ó   •—  ‰| ||¦  «        S rH   rn   ©r  r  r  r8  s      €r#   r:  zdot_3.<locals>.<lambda>t  s   ø€    q¨!¨SÑ!1Ô!1€ r0   Nr;  r|  s      @r#   Údot_3r}  P  sã   ø€ õ
 	�1•e”kÑ"Ô"ð 2¥z°!µU´[Ñ'AÔ'Að 2Ý�s�EœKÑ(Ô(ð2å	ð	6ð 	6ñ 
Œð	6ð( ŒH˜DÐ Ð ØŒx˜tÐ#Ð#ØŒz Ð%Ð%ÝÔ5ð &åŒMˆMà�q�6�6ðÝ4ñ6ô 6ð 6ð 2Ð1Ð1Ð1Ð1ð?2ð 2ð 2ð 2ð 2ð 2r0   Únumba_fatal_errorc                 ó¾   — t          j        | ¦  «        D ]G}t          j        |                     ¦   «         ¦  «        st           j                             d¦  «        ‚ŒHd S )Nz$Array must not contain infs or NaNs.)r  ÚnditerÚisfiniteÚitemÚlinalgÚLinAlgError)r  Úvs     r#   Ú_check_finite_matrixr†  z  s_   € åŒY�q‰\Œ\ð 8ð 8ˆÝŒ{˜1Ÿ6š6™8œ8Ñ$Ô$ð 	8Ý”)×'Ò'Ø6ñ8ô 8ð 8ð	8ð8ð 8r0   Tc                 ó€  — |rdnd}||f}t          | t          j        ¦  «        r| j        } t          | t          j        ¦  «        sd|z  }t          |d¬¦  «        ‚| j        dk    sd|z  }t          |d¬¦  «        ‚t          | j        t          j        t          j	        f¦  «        sd|z  }t          |d¬¦  «        ‚d S )	Nú	np.linalgr  z&%s.%s() only supported for array typesF©Úhighlightingr,  z%%s.%s() only supported on 2-D arrays.ú3%s.%s() only supported on float and complex arrays.)
r”   r   ÚOptionalÚtyper•   r   r5  r9   ÚFloatÚComplex)r  r:   Ú	la_prefixÚprefixÚinterpÚmsgs         r#   Ú_check_linalg_matrixr”  ‚  sÙ   € ð &Ð/ˆ[ˆ[¨4€FØ�iÐ €Få�!•U”^Ñ$Ô$ð ØŒFˆÝ�a�œÑ%Ô%ð 3Ø6¸Ñ?ˆÝ˜#¨EÐ2Ñ2Ô2Ð2ØŒ6�QŠ;ˆ;Ø5¸Ñ>ˆÝ˜#¨EÐ2Ñ2Ô2Ð2Ý�a”g¥¤­U¬]Ð;Ñ<Ô<ð 3ð(Ø*0ñ1ˆå˜#¨EÐ2Ñ2Ô2Ð2ð3ð 3r0   c                 ó|   — |d         j         }|dd …         D ]#}|j         |k    rd| z  }t          |d¬¦  «        ‚Œ$d S )Nr   r   zAnp.linalg.%s() only supports inputs that have homogeneous dtypes.Fr‰  )r9   r   )r:   r   Út0r×   r“  s        r#   Ú_check_homogeneous_typesr—  —  s\   € Ø	ˆqŒŒ€BØ�1�2�2ŒYð 7ð 7ˆØŒ7�bŠ=ˆ=ØUÐXaÑaˆCÝ˜c°Ð6Ñ6Ô6Ð6ð ð7ð 7r0   c                  ó   — d S rH   rn   rn   r0   r#   Ú_copy_to_fortran_orderr™  Ÿ  s   € Ø€Dr0   c                 óB   ‡‡— | j         dk    Š| j         dk    Šˆˆfd„}|S )NrÖ   ÚAc                 óæ   •— ‰rt          j        | ¦  «        }nX‰rB| j        j        }|rt          j        | j        ¦  «        j        }n)t          j        | ¦  «        }nt          j        | ¦  «        }|S rH   )r  r–   ÚflagsÚf_contiguousÚTÚasfortranarray)r  ÚacpyÚflag_fÚA_layoutÚF_layouts      €€r#   r¨   z&ol_copy_to_fortran_order.<locals>.impl©  st   ø€ Øð 	(å”7˜1‘:”:ˆDˆDØð 	(à”WÔ)ˆFØð ,õ ”w˜qœs‘|”|”~��õ Ô(¨Ñ+Ô+��õ Ô$ QÑ'Ô'ˆDØˆr0   r�   )r  r¨   r£  r¤  s     @@r#   Úol_copy_to_fortran_orderr¥  £  sA   øø€ ð Œx˜3Š€HØŒx˜3Š€Hðð ð ð ð ð ð& €Kr0   c                 óŒ   — | dk    r;| dk     rt          ¦   «          J ‚| dk    r!t          j                             d¦  «        ‚d S d S )Nr   z(Matrix is singular to machine precision.)Úfatal_error_funcr  rƒ  r„  ©Úrs    r#   Ú_inv_err_handlerrª  ¿  sY   € àˆA‚v€vØˆqŠ5ˆ5ÝÑÔÐØ�1ØˆqŠ5ˆ5Ý”)×'Ò'Ø:ñ<ô <ð <ð €vð ˆ5r0   c                 ó   — | d         S )zFpass a list of variables to be preserved through dead code eliminationr   rn   ©r  s    r#   Ú_dummy_liveness_funcr­  É  s   € ð ˆQŒ4€Kr0   c                 ó2  ‡‡‡— t          ¦   «          t          | d¦  «         t          ¦   «                              | j        ¦  «        Št          ¦   «                              | j        ¦  «        Št          t          | j        d¦  «        ¦  «        Šˆˆˆfd„}|S )NÚinvc                 óà  •— | j         d         }| j         d         |k    r!d}t          j                             |¦  «        ‚t	          | ¦  «         t          | ¦  «        }|dk    r|S t          j        |t          ¬¦  «        } ‰‰|||j        ||j        ¦  «        }t          |¦  «          ‰‰||j        ||j        ¦  «        }t          |¦  «         t          |j        |j        g¦  «         |S )Néÿÿÿÿéþÿÿÿú.Last 2 dimensions of the array must be square.r   ©r9   )r   r  rƒ  r„  r†  r™  r  ÚF_INT_nptypeÚctypesrª  r­  Úsize)	r  r¦   r“  r¡  Úipivr©  r;   rs   Únumba_xxgetris	         €€€r#   Úinv_implzinv_impl.<locals>.inv_implÛ  sé   ø€ ØŒG�BŒKˆØŒ7�2Œ;˜!ÒÐØBˆCÝ”)×'Ò'¨Ñ,Ô,Ð,å˜QÑÔÐå% aÑ(Ô(ˆà�Š6ˆ6ØˆKåŒx˜¥Ð.Ñ.Ô.ˆàˆM˜$  1 d¤k°1°d´kÑBÔBˆÝ˜ÑÔÐàˆM˜$  4¤;°°4´;Ñ?Ô?ˆÝ˜ÑÔÐõ 	˜dœi¨¬Ð3Ñ4Ô4Ð4Øˆr0   )rF   r”  rp   rs   r9   rw   rÆ   r<   )r  rº  r;   rs   r¹  s     @@@r#   rº  rº  Ï  s“   øøø€ å�O„O€Oå˜˜EÑ"Ô"Ð"å‘I”I×+Ò+¨A¬GÑ4Ô4€Må‘I”I×.Ò.¨q¬wÑ7Ô7€Må�}˜QœW eÑ,Ô,Ñ-Ô-€Dðð ð ð ð ð ð ð2 €Or0   c                 ól   — | dk    r+| dk     rt          ¦   «          J ‚| dk    rt          d¦  «        ‚d S d S )Nr   z&Internal algorithm failed to converge.)r§  r  r¨  s    r#   Ú%_handle_err_maybe_convergence_problemr¼  ÷  sK   € àˆA‚v€vØˆqŠ5ˆ5ÝÑÔÐØ�1ØˆqŠ5ˆ5ÝÐEÑFÔFÐFð €vð ˆ5r0   c                 ó&  — |rdnd}||f}t          | t          j        ¦  «        st          d|z  ¦  «        ‚| j        dk    st          d|z  ¦  «        ‚t          | j        t          j        t          j        f¦  «        st          d|z  ¦  «        ‚d S )Nrˆ  r  z'%s.%s() only supported for array types r,  ú+%s.%s() only supported on 1 and 2-D arrays r‹  )r”   r   r•   r   r5  r9   rŽ  r�  ©r  r:   r�  r‘  r’  s        r#   Ú_check_linalg_1_or_2d_matrixrÀ    sÁ   € ð &Ð/ˆ[ˆ[¨4€FØ�iÐ €Få�a�œÑ%Ô%ð $ÝÐCØ"ñ#ñ $ô $ð 	$àŒ6�QŠ;ˆ;ÝÐGØ"ñ#ñ $ô $ð 	$å�a”g¥¤­U¬]Ð;Ñ<Ô<ð @Ýð 6Ø8>ñ?ñ @ô @ð 	@ð@ð @r0   c                 ó"  ‡‡‡— t          ¦   «          t          | d¦  «         t          ¦   «                              | j        ¦  «        Št          t          | j        d¦  «        ¦  «        Št          d¦  «        Št          d¦  «        }ˆˆˆfd„}|S )NÚcholeskyÚUÚLc                 óž  •— | j         d         }| j         d         |k    r!d}t          j                             |¦  «        ‚|                      ¦   «         }|dk    r|S  ‰‰‰||j        |¦  «        }|dk    r;|dk     rt          ¦   «          J ‚|dk    rt          j                             d¦  «        ‚t          |¦  «        D ]}d|d |…|f<   Œ|S )Nr±  r²  r³  r   z Matrix is not positive definite.)r   r  rƒ  r„  r–   r¶  r§  Úrange)	r  r¦   r“  r  r©  ÚcolÚUPr;   r€   s	         €€€r#   Úcho_implzcho_impl.<locals>.cho_impl  sê   ø€ ØŒG�BŒKˆØŒ7�2Œ;˜!ÒÐØBˆCÝ”)×'Ò'¨Ñ,Ô,Ð,ð �fŠf‰hŒhˆà�Š6ˆ6ØˆJð ˆM˜$  A s¤z°1Ñ5Ô5ˆØ�Š6ˆ6Ø�1ŠuˆuÝ Ñ"Ô"Ð"Ø�qØ�1ŠuˆuÝ”i×+Ò+Ø6ñ8ô 8ð 8õ ˜‘8”8ð 	ð 	ˆCØˆC����c�	‰NˆNØˆ
r0   )rF   r”  rp   r€   r9   rÆ   r<   )r  ÚLOrÉ  rÈ  r;   r€   s      @@@r#   rÉ  rÉ    s�   øøø€ å�O„O€Oå˜˜JÑ'Ô'Ð'å‘I”I×+Ò+¨A¬GÑ4Ô4€Må�}˜QœW jÑ1Ô1Ñ2Ô2€DÝ	ˆS‰Œ€BÝ	ˆS‰Œ€Bðð ð ð ð ð ð ð< €Or0   c                 ó’  ‡‡‡‡‡‡	‡
— t          ¦   «          t          | d¦  «         t          ¦   «                              | j        ¦  «        Š
t          ¦   «                              | j        ¦  «        Š	t          t          | j        d¦  «        ¦  «        Št          d¦  «        Št          d¦  «        Št          j	        dk    Št          | j        d| j        ¦  «        }t          j        t          t          dd|j        z  › �¦  «        ¦  «        Šˆˆˆˆˆˆ
fd„}ˆˆˆˆ	fd	„}t          | j        t          j        j        ¦  «        r|S |S )
NÚeigÚNÚV©r,  é   rX   Úcomplexr,  c                 ó‚  •— | j         d         }| j         d         |k    r!d}t          j                             |¦  «        ‚t	          | ¦  «         t          | ¦  «        }d}|}t          j        || j        ¬¦  «        }t          j        || j        ¬¦  «        }t          j        ||f| j        ¬¦  «        }t          j        ||f| j        ¬¦  «        }	|dk    rB‰r7t          j        |‰¬¦  «        }
t          j        ||f‰¬¦  «        }|
|j        fS ||	j        fS  ‰‰‰‰||j	        ||j	        |j	        |j	        ||	j	        |¦  «        }t          |¦  «         ‰�rŒt          j        |‰¬¦  «        }
t          j        ||f‰¬¦  «        }d}||k     �r||         dk    rTt          ||         ||         ¦  «        |
|<   t          |¦  «        D ]}t          |	||f         d¦  «        |||f<   Œ |dz  }n¬t          ||         ||         ¦  «        |
|<   t          ||dz            ||dz            ¦  «        |
|dz   <   t          |¦  «        D ]P}|	||f         }|	|dz   |f         }||j        ||f<   ||j        ||f<   ||j        |dz   |f<   | |j        |dz   |f<   ŒQ|dz  }||k     �°t          |j        |j        |	j        |j        |j        |
j        |j        g¦  «         |
|j        fS 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   rÕ   r,  z.eig() argument must not cause a domain change.)r   r  rƒ  r„  r†  r™  r  r9   rŸ  r¶  r¼  rÑ  rÆ  ÚrealÚimagr­  r·  Úanyr  )r  r¦   r“  r¡  ÚldvlÚldvrÚwrÚwiÚvlÚvrÚwr…  r©  ÚiÚjÚreÚimÚJOBVLÚJOBVRÚ_eig_always_complexÚ_eig_cmplx_dtyper;   ry   s                    €€€€€€r#   Úreal_eig_implzeig_impl.<locals>.real_eig_implS  s…  ø€ ð ŒG�BŒKˆØŒ7�2Œ;˜!ÒÐØBˆCÝ”)×'Ò'¨Ñ,Ô,Ð,å˜QÑÔÐå% aÑ(Ô(ˆàˆØˆÝŒX�a˜qœwÐ'Ñ'Ô'ˆÝŒX�a˜qœwÐ'Ñ'Ô'ˆÝŒX�q˜$�i q¤wÐ/Ñ/Ô/ˆÝŒX�q˜$�i q¤wÐ/Ñ/Ô/ˆà�Š6ˆ6Ø"ð "Ý”H˜QÐ&6Ð7Ñ7Ô7�Ý”H˜a ˜VÐ+;Ð<Ñ<Ô<�Ø˜1œ3�x�à˜BœD�zÐ!àˆN˜4Ø!Ø!ØØ œKØØœIØœIØœIØ ØœIØ ñ"ô "ˆõ 	.¨aÑ0Ô0Ð0àñ 	õ ”˜Ð"2Ð3Ñ3Ô3ˆAÝ”˜!˜Q˜Ð'7Ð8Ñ8Ô8ˆAØˆAØ�a’%‘%Ø�a”5˜C’<�<Ý" 2 a¤5¨"¨Q¬%Ñ0Ô0�A�a‘DÝ" 1™XœXð 9ð 9˜Ý")¨"¨Q°¨T¬(°CÑ"8Ô"8˜˜!˜Q˜$™˜Ø˜‘F�A�Aå" 2 a¤5¨"¨Q¬%Ñ0Ô0�A�a‘DÝ& r¨!¨a©%¤y°"°Q¸±U´)Ñ<Ô<�A�a˜!‘e‘HÝ" 1™XœXð /ð /˜Ø  1 œX˜Ø  A¡ q œ\˜Ø')˜œ˜q !˜t™Ø')˜œ˜q !˜t™Ø+-˜œ˜q 1™u a˜xÑ(Ø,.¨3˜œ˜q 1™u a˜xÑ(Ð(Ø˜‘F�Að! �a’%‘%õ( ! $¤)¨R¬W°b´g¸r¼wØ"$¤'¨1¬6°1´6ð";ñ <ô <ð <à�q”s�8ˆOõ Œ6�"‰:Œ:ð 	BÝØ@ñBô Bð Bõ
 	˜dœi¨¬°"´'¸2¼7ÀBÄGÐLÑMÔMÐMà�B”DˆzÐr0   c                 ó^  •— | j         d         }| j         d         |k    r!d}t          j                             |¦  «        ‚t	          | ¦  «         t          | ¦  «        }d}|}t          j        || j        ¬¦  «        }t          j        ||f| j        ¬¦  «        }t          j        ||f| j        ¬¦  «        }|dk    r	||j        fS  ‰‰‰
‰||j	        ||j	        |j	        ||j	        |¦  «        }	t          |	¦  «         t          |j        |j        |j        |j        g¦  «         ||j        fS )z:
        eig() implementation for complex arrays.
        r±  r²  r³  r   r´  r   )r   r  rƒ  r„  r†  r™  r  r9   rŸ  r¶  r¼  r­  r·  ©r  r¦   r“  r¡  rÖ  r×  rÜ  rÚ  rÛ  r©  rá  râ  r;   r{   s             €€€€r#   Úcmplx_eig_implz eig_impl.<locals>.cmplx_eig_impl±  s6  ø€ ð ŒG�BŒKˆØŒ7�2Œ;˜!ÒÐØBˆCÝ”)×'Ò'¨Ñ,Ô,Ð,å˜QÑÔÐå% aÑ(Ô(ˆàˆØˆÝŒH�Q˜aœgÐ&Ñ&Ô&ˆÝŒX�q˜$�i q¤wÐ/Ñ/Ô/ˆÝŒX�q˜$�i q¤wÐ/Ñ/Ô/ˆà�Š6ˆ6Ø�r”t�9ÐàˆN˜4Ø!Ø!ØØ œKØØœHØœIØ ØœIØ ñ
"ô 
"ˆõ 	.¨aÑ0Ô0Ð0õ 	˜dœi¨¬°"´'¸1¼6ÐBÑCÔCÐCØ�2”4ˆyÐr0   ©rF   r”  rp   ry   r9   r{   rÆ   r<   Ú
np_supportÚnumpy_versionr[   Úas_dtyper   Úbitwidthr”   Úscalarsr�  )r  Ú_eig_real_tyrå  rè  rá  râ  rã  rä  r;   r{   ry   s       @@@@@@@r#   Úeig_implrð  ?  sg  øøøøøøø€ å�O„O€Oå˜˜EÑ"Ô"Ð"å‘Y”Y×-Ò-¨a¬gÑ6Ô6€NÝ‘Y”Y×-Ò-¨a¬gÑ6Ô6€Nå�}˜QœW eÑ,Ô,Ñ-Ô-€Då�‰HŒH€EÝ�‰HŒH€Eõ %Ô2°fÒ<ÐÝ˜1œ7Ð$6¸¼Ñ@Ô@€LÝ!Ô*Ý•Ð<  \Ô%:Ñ!:Ð<Ð<Ñ=Ô=ñ?ô ?Ðð\ð \ð \ð \ð \ð \ð \ð \ð \ð \ð|&ð &ð &ð &ð &ð &ð &ð &õP �!”'�5œ=Ô0Ñ1Ô1ð ØÐàÐr0   c                 ó’  ‡‡‡‡‡‡	‡
— t          ¦   «          t          | d¦  «         t          ¦   «                              | j        ¦  «        Š
t          ¦   «                              | j        ¦  «        Š	t          t          | j        d¦  «        ¦  «        Št          d¦  «        Št          d¦  «        Št          j	        dk    Št          | j        d| j        ¦  «        }t          j        t          t          dd|j        z  › �¦  «        ¦  «        Šˆˆˆˆˆˆ
fd„}ˆˆˆˆ	fd„}t          | j        t          j        j        ¦  «        r|S |S )	NÚeigvalsrÍ  rÏ  rX   rÑ  r,  c                 óú  •— | j         d         }| j         d         |k    r!d}t          j                             |¦  «        ‚t	          | ¦  «         t          | ¦  «        }d}d}t          j        || j        ¬¦  «        }|dk    r‰rt          j        |‰¬¦  «        S |S t          j        || j        ¬¦  «        }t          j        d| j        ¬¦  «        }t          j        d| j        ¬¦  «        }	 ‰‰‰‰||j        ||j        |j        |j        ||	j        |¦  «        }
t          |
¦  «         ‰r|t          j        |‰¬¦  «        }t          |¦  «        D ]!}t          ||         ||         ¦  «        ||<   Œ"t          |j        |j        |	j        |j        |j        |j        g¦  «         |S 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  rƒ  r„  r†  r™  r  r9   r¶  r¼  rÆ  rÑ  r­  r·  rÕ  r  )r  r¦   r“  r¡  rÖ  r×  rØ  rÙ  rÚ  rÛ  r©  rÜ  rÝ  rá  râ  Ú_eigvals_always_complexÚ_eigvals_cmplx_dtyper;   ry   s                €€€€€€r#   Úreal_eigvals_implz'eigvals_impl.<locals>.real_eigvals_implò  s  ø€ ð ŒG�BŒKˆØŒ7�2Œ;˜!ÒÐØBˆCÝ”)×'Ò'¨Ñ,Ô,Ð,å˜QÑÔÐå% aÑ(Ô(ˆàˆØˆÝŒX�a˜qœwÐ'Ñ'Ô'ˆà�Š6ˆ6Ø&ð Ý”x Ð)=Ð>Ñ>Ô>Ð>à�	åŒX�a˜qœwÐ'Ñ'Ô'ˆõ ŒX�q ¤Ð)Ñ)Ô)ˆÝŒX�q ¤Ð)Ñ)Ô)ˆàˆN˜4Ø!Ø!ØØ œKØØœIØœIØœIØ ØœIØ ñ"ô "ˆõ 	.¨aÑ0Ô0Ð0à"ð 		Ý”˜Ð"6Ð7Ñ7Ô7ˆAÝ˜1‘X”Xð -ð -�Ý˜r !œu b¨¤eÑ,Ô,��!‘�õ ! $¤)¨R¬W°b´g¸r¼wØ"$¤'¨1¬6ð"3ñ 4ô 4ð 4àˆHõ Œ6�"‰:Œ:ð 	FÝØDñFô Fð Fõ
 	˜dœi¨¬°"´'¸2¼7ÀBÄGÐLÑMÔMÐMØˆ	r0   c                 ó:  •— | j         d         }| j         d         |k    r!d}t          j                             |¦  «        ‚t	          | ¦  «         t          | ¦  «        }d}d}t          j        || j        ¬¦  «        }|dk    r|S t          j        d| j        ¬¦  «        }t          j        d| j        ¬¦  «        } ‰‰‰
‰||j        ||j        |j        ||j        |¦  «        }	t          |	¦  «         t          |j        |j        |j        |j        g¦  «         |S )z>
        eigvals() implementation for complex arrays.
        r±  r²  r³  r   r´  r   )r   r  rƒ  r„  r†  r™  r  r9   r¶  r¼  r­  r·  rç  s             €€€€r#   Úcmplx_eigvals_implz(eigvals_impl.<locals>.cmplx_eigvals_impl;  s   ø€ ð ŒG�BŒKˆØŒ7�2Œ;˜!ÒÐØBˆCÝ”)×'Ò'¨Ñ,Ô,Ð,å˜QÑÔÐå% aÑ(Ô(ˆàˆØˆÝŒH�Q˜aœgÐ&Ñ&Ô&ˆà�Š6ˆ6ØˆHåŒX�q ¤Ð)Ñ)Ô)ˆÝŒX�q ¤Ð)Ñ)Ô)ˆàˆN˜4Ø!Ø!ØØ œKØØœHØœIØ ØœIØ ñ
"ô 
"ˆõ 	.¨aÑ0Ô0Ð0õ 	˜dœi¨¬°"´'¸1¼6ÐBÑCÔCÐCØˆr0   ré  )r  Ú_eigvals_real_tyrö  rø  rá  râ  rô  rõ  r;   r{   ry   s       @@@@@@@r#   Úeigvals_implrú  Þ  sk  øøøøøøø€ å�O„O€Oå˜˜IÑ&Ô&Ð&å‘Y”Y×-Ò-¨a¬gÑ6Ô6€NÝ‘Y”Y×-Ò-¨a¬gÑ6Ô6€Nå�}˜QœW iÑ0Ô0Ñ1Ô1€Då�‰HŒH€EÝ�‰HŒH€Eõ )Ô6¸&Ò@ÐÝ˜qœwÐ(:¸A¼GÑDÔDÐÝ%Ô.Ý•Ð@ Ð%5Ô%>Ñ!>Ð@Ð@ÑAÔAñCô CÐðGð Gð Gð Gð Gð Gð Gð Gð Gð GðR'ð 'ð 'ð 'ð 'ð 'ð 'ð 'õR �!”'�5œ=Ô0Ñ1Ô1ð !Ø!Ð!à Ð r0   c                 óˆ  ‡‡‡‡‡— t          ¦   «          t          | d¦  «         t          | j        d| j        ¦  «        }t	          j        |¦  «        Št          ¦   «                              | j        ¦  «        Št          t          | j        d¦  «        ¦  «        Št          d¦  «        Št          d¦  «        Šˆˆˆˆˆfd„}|S )NÚeighrX   rÎ  rÄ  c           	      ó�  •— | j         d         }| j         d         |k    r!d}t          j                             |¦  «        ‚t	          | ¦  «         t          | ¦  «        }t          j        |‰
¬¦  «        }|dk    r||fS  ‰	‰‰‰||j        ||j        ¦  «        }t          |¦  «         t          |j
        |j
        g¦  «         ||fS ©Nr±  r²  r³  r´  r   ©r   r  rƒ  r„  r†  r™  r  r¶  r¼  r­  r·  ©r  r¦   r“  r¡  rÜ  r©  ÚJOBZÚUPLOr;   r}   Úw_dtypes         €€€€€r#   Ú	eigh_implzeigh_impl.<locals>.eigh_implz  sØ   ø€ ØŒG�BŒKˆàŒ7�2Œ;˜!ÒÐØBˆCÝ”)×'Ò'¨Ñ,Ô,Ð,å˜QÑÔÐå% aÑ(Ô(ˆåŒH�Q˜gÐ&Ñ&Ô&ˆà�Š6ˆ6Ø�t�9ÐàˆO˜DØ Ø ØØ œKØØœHñô ˆõ 	.¨aÑ0Ô0Ð0õ 	˜dœi¨¬Ð0Ñ1Ô1Ð1Ø�4ˆyÐr0   ©
rF   r”  r[   r9   rê  rì  rp   r}   rÆ   r<   )r  Úw_typer  r  r  r;   r}   r  s      @@@@@r#   r  r  i  sÅ   øøøøø€ å�O„O€Oå˜˜FÑ#Ô#Ð#õ �Q”WÐ0°!´'Ñ:Ô:€FÝÔ! &Ñ)Ô)€Gå‘i”i×/Ò/°´Ñ8Ô8€Oå�}˜QœW fÑ-Ô-Ñ.Ô.€Dåˆs‰8Œ8€DÝˆs‰8Œ8€Dðð ð ð ð ð ð ð ð ð< Ðr0   c                 óˆ  ‡‡‡‡‡— t          ¦   «          t          | d¦  «         t          | j        d| j        ¦  «        }t	          j        |¦  «        Št          ¦   «                              | j        ¦  «        Št          t          | j        d¦  «        ¦  «        Št          d¦  «        Št          d¦  «        Šˆˆˆˆˆfd„}|S )NÚeigvalshrX   rÍ  rÄ  c           	      óˆ  •— | j         d         }| j         d         |k    r!d}t          j                             |¦  «        ‚t	          | ¦  «         t          | ¦  «        }t          j        |‰
¬¦  «        }|dk    r|S  ‰	‰‰‰||j        ||j        ¦  «        }t          |¦  «         t          |j
        |j
        g¦  «         |S rþ  rÿ  r   s         €€€€€r#   Úeigvalsh_implz$eigvalsh_impl.<locals>.eigvalsh_impl«  sÎ   ø€ ØŒG�BŒKˆàŒ7�2Œ;˜!ÒÐØBˆCÝ”)×'Ò'¨Ñ,Ô,Ð,å˜QÑÔÐå% aÑ(Ô(ˆåŒH�Q˜gÐ&Ñ&Ô&ˆà�Š6ˆ6ØˆHàˆO˜DØ Ø ØØ œKØØœHñô ˆõ 	.¨aÑ0Ô0Ð0õ 	˜dœi¨¬Ð0Ñ1Ô1Ð1Øˆr0   r  )r  r  r
  r  r  r;   r}   r  s      @@@@@r#   r
  r
  š  sÅ   øøøøø€ å�O„O€Oå˜˜JÑ'Ô'Ð'õ �Q”WÐ0°!´'Ñ:Ô:€FÝÔ! &Ñ)Ô)€Gå‘i”i×/Ò/°´Ñ8Ô8€Oå�}˜QœW jÑ1Ô1Ñ2Ô2€Dåˆs‰8Œ8€DÝˆs‰8Œ8€Dðð ð ð ð ð ð ð ð ð< Ðr0   c                 óŠ  ‡‡‡‡‡— t          ¦   «          t          | d¦  «         t          | j        d| j        ¦  «        }t	          j        |¦  «        Št          ¦   «                              | j        ¦  «        Št          t          | j        d¦  «        ¦  «        Št          d¦  «        Št          d¦  «        Šdˆˆˆˆˆfd„	}|S )NÚsvdrX   r›  ÚSr   c                 óˆ  •— | j         d         }| j         d         }|dk    s|dk    rt          j                             d¦  «        ‚t	          | ¦  «         t          | ¦  «        }|}t          ||¦  «        }|r‰}|}|}	n‰}|}|}	t          j        ||f| j        ¬¦  «        }
t          j        |‰¬¦  «        }t          j        ||	f| j        ¬¦  «        } ‰‰||||j	        ||j	        |
j	        ||j	        |	¦  «        }t          |¦  «         t          |j        |j        |
j        |j        g¦  «         |
j        ||j        fS )Nr±  r²  r   úArrays cannot be emptyr´  )r   r  rƒ  r„  r†  r™  Úminr  r9   r¶  r¼  r­  r·  rŸ  )r  Úfull_matricesr¦   rß   r¡  ÚlduÚminmnr  ÚucolÚldvtÚur1   Úvtr©  ÚJOBZ_AÚJOBZ_Sr;   r‚   Ús_dtypes                 €€€€€r#   Úsvd_implzsvd_impl.<locals>.svd_implÜ  sY  ø€ ØŒG�BŒKˆØŒG�BŒKˆà�Š6ˆ6�Q˜!’V�VÝ”)×'Ò'Ð(@ÑAÔAÐAå˜QÑÔÐå% aÑ(Ô(ˆàˆÝ�A�q‘	”	ˆàð 	ØˆDØˆDØˆDˆDàˆDØˆDØˆDåŒH�d˜C�[¨¬Ð0Ñ0Ô0ˆÝŒH�U 'Ð*Ñ*Ô*ˆÝŒX�q˜$�i q¤wÐ/Ñ/Ô/ˆàˆNØØØØØŒKØØŒHØŒHØØŒIØñ
ô 
ˆõ 	.¨aÑ0Ô0Ð0õ 	˜dœi¨¬°!´&¸!¼&ÐAÑBÔBÐBØ”�Q˜œˆ~Ðr0   ©r   )
rF   r”  r[   r9   rê  rì  rp   r‚   rÆ   r<   )	r  r  Ús_typer  r  r  r;   r‚   r  s	       @@@@@r#   r  r  Ë  sÊ   øøøøø€ å�O„O€Oå˜˜EÑ"Ô"Ð"õ �Q”WÐ0°!´'Ñ:Ô:€FÝÔ! &Ñ)Ô)€Gå‘Y”Y×-Ò-¨a¬gÑ6Ô6€Nå�}˜QœW eÑ,Ô,Ñ-Ô-€Då�‰XŒX€FÝ�‰XŒX€Fð,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð\ €Or0   c                 ó2  ‡‡‡— t          ¦   «          t          | d¦  «         t          ¦   «                              | j        ¦  «        Št          ¦   «                              | j        ¦  «        Št          t          | j        d¦  «        ¦  «        Šˆˆˆfd„}|S )NÚqrc           	      óF  •— | j         d         }| j         d         }|dk    s|dk    rt          j                             d¦  «        ‚t	          | ¦  «         t          | ¦  «        }|}t          ||¦  «        }t          j        || j        ¬¦  «        } ‰‰|||j	        ||j	        ¦  «        }|dk     rt          ¦   «          J ‚t          j        ||f| j        ¬¦  «        j        }t          |¦  «        D ]&}	t          |	dz   ¦  «        D ]}
||
|	f         ||
|	f<   ŒŒ't          ||¦  «        D ]#}	t          |¦  «        D ]}
||
|	f         ||
|	f<   ŒŒ$ ‰‰||||j	        ||j	        ¦  «        }t          |¦  «         t          |j        |j        g¦  «         |d d …d |…f         |fS )Nr±  r²  r   r  r´  r   )r   r  rƒ  r„  r†  r™  r  r  r9   r¶  r§  r  rŸ  rÆ  r¼  r­  r·  )r  r¦   rß   Úqrà   r  ÚtauÚretr©  rÝ  rÞ  r;   r…   r‡   s              €€€r#   Úqr_implzqr_impl.<locals>.qr_impl  sî  ø€ ØŒG�BŒKˆØŒG�BŒKˆà�Š6ˆ6�Q˜!’V�VÝ”)×'Ò'Ð(@ÑAÔAÐAå˜QÑÔÐõ # 1Ñ%Ô%ˆàˆå�A�q‘	”	ˆÝŒh˜ a¤gÐ.Ñ.Ô.ˆàˆnØØØØŒHØØŒJñ
ô 
ˆð �Š7ˆ7ÝÑÔÐØ�1õ ŒH�a˜�Z q¤wÐ/Ñ/Ô/Ô1ˆõ �u‘”ð 	"ð 	"ˆAÝ˜1˜q™5‘\”\ð "ð "�Ø˜A˜q˜Dœ'��!�Q�$‘�ð"õ �u˜a‘”ð 	"ð 	"ˆAÝ˜5‘\”\ð "ð "�Ø˜A˜q˜Dœ'��!�Q�$‘�ð"ð ˆnØØØØØŒHØØŒJñ
ô 
ˆõ 	.¨cÑ2Ô2Ð2õ 	˜cœh¨¬Ð/Ñ0Ô0Ð0Ø�!�!�!�V�e�V�)”˜aÐ Ð r0   )rF   r”  rp   r…   r9   r‡   rÆ   r<   )r  r$  r;   r…   r‡   s     @@@r#   r$  r$    s–   øøø€ å�O„O€Oå˜˜DÑ!Ô!Ð!õ ‘Y”Y×-Ò-¨a¬gÑ6Ô6€NÝ‘Y”Y×-Ò-¨a¬gÑ6Ô6€Nå�}˜QœW dÑ+Ô+Ñ,Ô,€Dð7!ð 7!ð 7!ð 7!ð 7!ð 7!ð 7!ðr €Nr0   c                 ó   — t           ‚)z;
    Correctly copy 'b' into the 'bcpy' scratch space.
    ©ÚNotImplementedError©Úbcpyr  Únrhss      r#   Ú_system_copy_in_br+  ^  ó
   € õ Ðr0   c                 ó,   — |j         dk    rd„ }|S d„ }|S )Nr   c                 ó.   — || d |j         d         …df<   d S )Nr±  r   ©r   r(  s      r#   Ú	oneD_implz)_system_copy_in_b_impl.<locals>.oneD_implh  s    € Ø$%ˆD��!”'˜"”+�˜q�Ñ!Ð!Ð!r0   c                 ó2   — || d |j         d         …d |…f<   d S )Nr²  r/  r(  s      r#   Ú	twoD_implz)_system_copy_in_b_impl.<locals>.twoD_impll  s%   € Ø()ˆD��!”'˜"”+�˜u ˜uÐ$Ñ%Ð%Ð%r0   rw  )r)  r  r*  r0  r2  s        r#   Ú_system_copy_in_b_implr3  e  s7   € à„v�‚{€{ð	&ð 	&ð 	&àÐð	*ð 	*ð 	*àÐr0   c                 ó   — t           ‚)zK
    Compute the number of right hand sides in the system of equations
    r&  ©r  s    r#   Ú_system_compute_nrhsr6  q  r,  r0   c                 ó,   — | j         dk    rd„ }|S d„ }|S )Nr   c                 ó   — dS ©Nr   rn   r5  s    r#   r0  z,_system_compute_nrhs_impl.<locals>.oneD_impl{  s   € Ø�1r0   c                 ó   — | j         d         S )Nr±  r/  r5  s    r#   r2  z,_system_compute_nrhs_impl.<locals>.twoD_impl  s   € Ø”7˜2”;Ðr0   rw  )r  r0  r2  s      r#   Ú_system_compute_nrhs_implr;  x  s7   € à„v�‚{€{ð	ð 	ð 	àÐð	ð 	ð 	àÐr0   c                 ó   — t           ‚)zD
    Check that AX=B style system input is dimensionally valid.
    r&  r$  s     r#   Ú!_system_check_dimensionally_validr=  „  r,  r0   c                 ó0   — |j         }|dk    rd„ }|S d„ }|S )Nr   c                 ó„   — | j         d         }|j         d         }||k    rt          j                             d¦  «        ‚d S )Nr²  r±  ú<Incompatible array sizes, system is not dimensionally valid.©r   r  rƒ  r„  ©r  r  ÚamÚbms       r#   r0  z9_system_check_dimensionally_valid_impl.<locals>.oneD_impl�  óH   € Ø”˜”ˆBØ”˜”ˆBØ�RŠxˆxÝ”i×+Ò+ØRñTô Tð Tð ˆxr0   c                 ó„   — | j         d         }|j         d         }||k    rt          j                             d¦  «        ‚d S )Nr²  r@  rA  rB  s       r#   r2  z9_system_check_dimensionally_valid_impl.<locals>.twoD_impl—  rE  r0   rw  ©r  r  r5  r0  r2  s        r#   Ú&_system_check_dimensionally_valid_implrH  ‹  sF   € àŒ6€DØˆq‚y€yð	Tð 	Tð 	Tð Ðð	Tð 	Tð 	Tð Ðr0   c                 ó   — t           ‚)z:
    Check that AX=B style system input is not empty.
    r&  r$  s     r#   Ú_system_check_non_emptyrJ     r,  r0   c                 ó0   — |j         }|dk    rd„ }|S d„ }|S )Nr   c                 ó¶   — | j         d         }| j         d         }|j         d         }|dk    s|dk    s|dk    rt          j                             d¦  «        ‚d S ©Nr²  r±  r   r  rA  )r  r  rC  ÚanrD  s        r#   r0  z/_system_check_non_empty_impl.<locals>.oneD_impl«  sZ   € Ø”˜”ˆBØ”˜”ˆBØ”˜”ˆBØ�QŠwˆw˜" š'˜' R¨1¢W WÝ”i×+Ò+Ð,DÑEÔEÐEð &- Wr0   c                 óÜ   — | j         d         }| j         d         }|j         d         }|j         d         }|dk    s|dk    s|dk    s|dk    rt          j                             d¦  «        ‚d S rM  rA  )r  r  rC  rN  rD  Úbns         r#   r2  z/_system_check_non_empty_impl.<locals>.twoD_impl³  sm   € Ø”˜”ˆBØ”˜”ˆBØ”˜”ˆBØ”˜”ˆBØ�QŠwˆw˜" š'˜' R¨1¢W W°°a²°Ý”i×+Ò+Ð,DÑEÔEÐEð 18°r0   rw  rG  s        r#   Ú_system_check_non_empty_implrQ  §  sF   € àŒ6€DØˆq‚y€yð	Fð 	Fð 	Fð Ðð	Fð 	Fð 	Fð Ðr0   c                 ó   — t           ‚)z:
    Compute the residual from the 'b' scratch space.
    r&  )r  r¦   r*  s      r#   Ú_lstsq_residualrS  ½  r,  r0   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 )NrX   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_implÌ  sJ   ø€ Ý”h˜t¨:Ð6Ñ6Ô6�Ýœ¥¤ q¨¨¨¨Q¨¤xÑ 0Ô 0°!Ñ 3Ñ4Ô4��A‘Ø�
r0   c                 ó|   •— t          j        d‰¬¦  «        }t          j        | |d …df         dz  ¦  «        |d<   |S rV  )r  r  rW  rY  s       €r#   Ú	real_implz'_lstsq_residual_impl.<locals>.real_implÒ  s?   ø€ Ý”h˜t¨:Ð6Ñ6Ô6�Ýœ  ! " " a %¤¨!¡Ñ,Ô,��A‘Ø�
r0   r,  c                 óÄ   •— t          j        |‰¬¦  «        }t          |¦  «        D ]8}t          j        t          j        | |d …|f         ¦  «        dz  ¦  «        ||<   Œ9|S ©Nr´  r,  )r  r  rÆ  rW  rX  ©r  r¦   r*  r¶   rñ   rZ  s        €r#   r[  z(_lstsq_residual_impl.<locals>.cmplx_implÚ  sa   ø€ Ý”h ¨ZÐ8Ñ8Ô8�Ý˜t™œð 9ð 9�AÝœV¥B¤F¨1¨Q¨R¨R°¨U¬8Ñ$4Ô$4°aÑ$7Ñ8Ô8�C˜‘F�FØ�
r0   c                 ó    •— t          j        |‰¬¦  «        }t          |¦  «        D ]&}t          j        | |d …|f         dz  ¦  «        ||<   Œ'|S r_  )r  r  rÆ  rW  r`  s        €r#   r]  z'_lstsq_residual_impl.<locals>.real_implá  sV   ø€ Ý”h ¨ZÐ8Ñ8Ô8�Ý˜t™œð 1ð 1�AÝœV A a b b¨! e¤H¨a¡KÑ0Ô0�C˜‘F�FØ�
r0   )r5  r9   rê  rì  r[   r”   r   r�  )r  r¦   r*  r5  r9   r[  r]  rZ  s          @r#   Ú_lstsq_residual_implrb  Ä  sð   ø€ àŒ6€DØŒG€EÝÔ$¥W¨UÐ4FÈÑ%NÔ%NÑOÔO€Jàˆq‚y€yÝ�e�eœmÑ-Ô-ð 	ðð ð ð ð ð Ððð ð ð ð ð Ðà�qŠyˆyˆyˆyÝ�e�eœmÑ-Ô-ð 	ðð ð ð ð ð
 Ððð ð ð ð ð
 Ðr0   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_solutionre  é  ó
   € õ
 Ðr0   c                 ó,   — | j         dk    rd„ }|S d„ }|S )Nr   c                 óD   — |j                              ¦   «         d |…         S rH   ©rŸ  Úravelrd  s      r#   r0  z'_lstsq_solution_impl.<locals>.oneD_implô  s   € Ø”6—<’<‘>”> " 1 "Ô%Ð%r0   c                 óB   — |d |…d d …f                               ¦   «         S rH   ©r–   rd  s      r#   r2  z'_lstsq_solution_impl.<locals>.twoD_implø  s$   € Ø˜˜˜˜A˜A˜A˜”;×#Ò#Ñ%Ô%Ð%r0   rw  )r  r)  r¦   r0  r2  s        r#   Ú_lstsq_solution_implrm  ñ  s7   € à„v�‚{€{ð	&ð 	&ð 	&àÐð	&ð 	&ð 	&àÐr0   ç      ð¿c                 ó®  ‡‡‡‡	— t          ¦   «          t          | d¦  «         t          |d¦  «         t          d| |¦  «         t	          j        | j        ¦  «        Š| j        }t          |d|¦  «        }t	          j        |¦  «        Š	t          ¦   «          	                    | j        ¦  «        Št          t          |d¦  «        ¦  «        Šdˆˆˆˆ	fd„	}|S )NÚlstsqrX   rn  c                 ób  •— | 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        ¦  «        }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   r6  r†  rJ  r=  r  Úmaxr™  r  r  rŸ  r+  rµ  r¶  r¼  rS  re  r­  r·  )r  r  Úrcondr¦   rß   r*  r  Úmaxmnr¡  r)  r1   Úrank_ptrr©  Úrankr¶   r[  r;   Únp_dtr‰   rZ  s                   €€€€r#   Ú
lstsq_implzlstsq_impl.<locals>.lstsq_impl  sÆ  ø€ ØŒG�BŒKˆØŒG�BŒKˆÝ# AÑ&Ô&ˆõ 	˜QÑÔÐÝ˜QÑÔÐõ 	   1Ñ%Ô%Ð%õ 	*¨!¨QÑ/Ô/Ð/å�A�q‘	”	ˆÝ�A�q‘	”	ˆõ & aÑ(Ô(ˆõ Œx˜˜u˜¨UÐ3Ñ3Ô3Ô5ˆå˜$  4Ñ(Ô(Ð(õ ŒH�U *Ð-Ñ-Ô-ˆÝ”8˜A¥\Ð2Ñ2Ô2ˆàˆNØØØØØŒKØØŒKØØŒHØØŒOñ
ô 
ˆõ 	.¨aÑ0Ô0Ð0ð ˜Œ{ˆð �!Š8ˆ8�q˜A’v�vÝ”(˜A jÐ1Ñ1Ô1ˆCˆCõ " $¨¨4Ñ0Ô0ˆCõ ˜A˜t QÑ'Ô'ˆõ 	˜dœi¨¬°A´F¸H¼MÐJÑKÔKÐKØ�3˜˜a   œiÐ(Ð(r0   ©rn  )rF   r”  rÀ  r—  rê  rì  r9   r[   rp   r‰   rÆ   r<   )
r  r  rs  Únb_dtÚr_typerx  r;   rw  r‰   rZ  s
         @@@@r#   rx  rx  ý  sè   øøøø€ å�O„O€Oå˜˜GÑ$Ô$Ð$õ !  GÑ,Ô,Ð,å˜W a¨Ñ+Ô+Ð+åÔ ¤Ñ(Ô(€EØŒG€Eõ �UÐ.°Ñ6Ô6€FÝÔ$ VÑ,Ô,€Jõ ‘Y”Y×-Ò-¨a¬gÑ6Ô6€Nå�}˜U GÑ,Ô,Ñ-Ô-€Dð=)ð =)ð =)ð =)ð =)ð =)ð =)ð =)ð =)ð~ Ðr0   c                 ó   — t           ‚)z„
    Extract 'x' (the solution) from the 'bcpy' scratch space.
    Note 'b' is only used to check the system input dimension...
    r&  ©r  r)  s     r#   Ú_solve_compute_returnr~  \  rf  r0   c                 ó,   — | j         dk    rd„ }|S d„ }|S )Nr   c                 ó4   — |j                              ¦   «         S rH   ri  r}  s     r#   r0  z-_solve_compute_return_impl.<locals>.oneD_implg  s   € Ø”6—<’<‘>”>Ð!r0   c                 ó   — |S rH   rn   r}  s     r#   r2  z-_solve_compute_return_impl.<locals>.twoD_implk  s   € ØˆKr0   rw  )r  r)  r0  r2  s       r#   Ú_solve_compute_return_implr‚  d  s7   € à„v�‚{€{ð	"ð 	"ð 	"àÐð	ð 	ð 	àÐr0   c                 ó^  ‡‡‡— t          ¦   «          t          | d¦  «         t          |d¦  «         t          d| |¦  «         t	          j        | j        ¦  «        Š| j        }t          ¦   «                              | j        ¦  «        Št          t          |d¦  «        ¦  «        Šˆˆˆfd„}|S )NÚsolvec           
      ó6  •— | j         d         }t          |¦  «        }t          | ¦  «         t          |¦  «         t          | |¦  «         t	          | ¦  «        }t          j        ||f‰	¬¦  «        j        }|dk    rt          ||¦  «        S t          |||¦  «         t          j        |t          ¬¦  «        } ‰
‰|||j        ||j        |j        |¦  «        }t          |¦  «         t          |j        |j        |j        g¦  «         t          ||¦  «        S )Nr±  r´  r   )r   r6  r†  r=  r™  r  r  rŸ  r~  r+  rµ  r¶  rª  r­  r·  )r  r  r¦   r*  r¡  r)  r¸  r©  r;   rw  rŒ   s           €€€r#   Ú
solve_implzsolve_impl.<locals>.solve_impl�  s&  ø€ ØŒG�BŒKˆÝ# AÑ&Ô&ˆõ 	˜QÑÔÐÝ˜QÑÔÐõ 	*¨!¨QÑ/Ô/Ð/õ & aÑ(Ô(ˆõ Œx˜˜q˜	¨Ð/Ñ/Ô/Ô1ˆØ�Š6ˆ6Ý(¨¨DÑ1Ô1Ð1õ 	˜$  4Ñ(Ô(Ð(õ Œx˜¥Ð.Ñ.Ô.ˆàˆKØØØØŒKØØŒKØŒKØñ	
ô 	
ˆõ 	˜ÑÔÐõ 	˜dœi¨¬°D´IÐ>Ñ?Ô?Ð?Ý$ Q¨Ñ-Ô-Ð-r0   )rF   r”  rÀ  r—  rê  rì  r9   rp   rŒ   rÆ   r<   )r  r  rz  r†  r;   rw  rŒ   s       @@@r#   r†  r†  p  s·   øøø€ å�O„O€Oå˜˜GÑ$Ô$Ð$Ý   GÑ,Ô,Ð,å˜W a¨Ñ+Ô+Ð+åÔ ¤Ñ(Ô(€EØŒG€Eõ ‘)”)×'Ò'¨¬Ñ0Ô0€Kå�}˜U GÑ,Ô,Ñ-Ô-€Dð'.ð '.ð '.ð '.ð '.ð '.ð '.ðR Ðr0   çVçž¯Ò<c           
      ó’  ‡‡‡‡‡	‡
‡‡‡— t          ¦   «          t          | d¦  «         t          | j        d| j        ¦  «        }t	          j        |¦  «        Št          ¦   «                              | j        ¦  «        Š	t          ¦   «          	                    | j        ¦  «        Š
t          t          | j        d¦  «        ¦  «        Št          d¦  «        Št          d¦  «        Št          d¦  «        Št	          j        | j        ¦  «        }t          j        dg|¬¦  «        Št          j        dg|¬¦  «        Šd
ˆˆˆˆˆ	ˆ
ˆˆˆf	d	„	}|S )NÚpinvrX   r  r�   rÕ   r´  rÔ   r‡  c                 óÞ  •	— | j         d         }| j         d         }t          | ¦  «         t          | ¦  «        }|dk    s|dk    r6|j                             ¦   «                              | j         ¦  «        j        S t          ||¦  «        }t          j        ||f| j	        ¬¦  «        }t          j        |‰¬¦  «        }t          j        ||f| j	        ¬¦  «        } ‰‰‰|||j
        ||j
        |j
        ||j
        |¦  «        }	t          |	¦  «         |d         |z  }
d}t          |¦  «        D ]}||         |
k    rd||         z  ||<   |}Œ|dz  }||k    r=t          |¦  «        D ],}t          |¦  «        D ]}|||f         ||         z  |||f<   ŒŒ-n>t          |¦  «        D ].}||         }t          |¦  «        D ]}|||f         |z  |||f<   ŒŒ/ ‰‰‰‰|||‰j
        |j
        ||j
        |‰j
        |j
        |¦  «        }	t          |j        |j        |j        |j        ‰j        ‰j        g¦  «         |j                             ¦   «                              | j         ¦  «        j        S )Nr±  r²  r   r´  rÔ   r   )r   r†  r™  rŸ  rj  Úreshaper  r  r  r9   r¶  r¼  rÆ  r­  r·  )r  rs  r¦   rß   r¡  r  r  r1   r  r©  Úcut_atÚcut_idxrñ   rÝ  rÞ  Ús_localÚJOBÚTRANSAÚTRANSBr;   r‚   rf   ri  r  r_  s                   €€€€€€€€€r#   Ú	pinv_implzpinv_impl.<locals>.pinv_implÇ  s°  ø€ ðN ŒG�BŒKˆØŒG�BŒKˆå˜QÑÔÐå% aÑ(Ô(ˆà�Š6ˆ6�Q˜!’V�VØ”6—<’<‘>”>×)Ò)¨!¬'Ñ2Ô2Ô4Ð4å�A�q‘	”	ˆåŒH�e˜Q�Z q¤wÐ/Ñ/Ô/ˆÝŒH�U 'Ð*Ñ*Ô*ˆÝŒX�q˜%�j¨¬Ð0Ñ0Ô0ˆàˆNØØØØØŒKØØŒHØŒHØØŒIØñ
ô 
ˆõ 	.¨aÑ0Ô0Ð0ð �1”˜‘ˆØˆÝ�u‘”ð 	ð 	ˆAØ�Œt�fŠ}ˆ}Ø˜A˜aœD‘y��!‘Ø�øØ�1‰ˆð �Š6ˆ6å˜1‘X”Xð /ð /�Ý˜w™œð /ð /�AØ! ! Q $œx¨!¨A¬$™�B�q˜!�t‘H�Hð/ð/õ
 ˜7‘^”^ð 0ð 0�Ø˜Aœ$�Ý˜u™œð 0ð 0�AØ  1 œg¨Ñ/�A�a˜�d‘G�Gð0ð ˆLØØØØØØØŒJØŒIØØŒHØØŒKØŒKØñ
ô 
ˆõ0 	˜dœi¨¬°!´&¸!¼&À#Ä(ØŒIðñ 	ô 	ð 	àŒv�|Š|‰~Œ~×%Ò% a¤gÑ.Ô.Ô0Ð0r0   ©r‡  )rF   r”  r[   r9   rê  rì  rp   r‚   rR   rf   rÆ   r<   r  Úarray)r  rs  r  Údtr’  r�  r�  r‘  r;   r‚   rf   ri  r  r_  s        @@@@@@@@@r#   r’  r’  ­  sW  øøøøøøøøø€ å�O„O€Oå˜˜FÑ#Ô#Ð#õ �Q”WÐ0°!´'Ñ:Ô:€FÝÔ! &Ñ)Ô)€Gå‘Y”Y×-Ò-¨a¬gÑ6Ô6€Nå‘7”7×'Ò'¨¬Ñ0Ô0€Lå�}˜QœW fÑ-Ô-Ñ.Ô.€DÝ
ˆc‰(Œ(€Cõ �‰XŒX€FÝ�‰XŒX€Fõ 
Ô	˜QœWÑ	%Ô	%€BÝŒ8�R�D Ð#Ñ#Ô#€DÝ
Œ(�B�4˜rÐ
"Ñ
"Ô
"€CðE1ð E1ð E1ð E1ð E1ð E1ð E1ð E1ð E1ð E1ð E1ð E1ð E1ð E1ðN Ðr0   c                 óˆ   — t          | j        t          j        ¦  «        rt          d„ ¦   «         }|S t          d„ ¦   «         }|S )zù
    Walks the diag of a LUP decomposed matrix
    uses that det(A) = prod(diag(lup(A)))
    and also that log(a)+log(b) = log(a*b)
    The return sign is adjusted based on the values found
    such that the log(value) stays in the real domain.
    c                 óÂ   — |dz   }d}t          | ¦  «        D ]E}t          j        |||f         ¦  «        }||||f         |z  z  }|t          j        |¦  «        z   }ŒF||fS )Ny                rÕ   )rÆ  r  rX  Úlog)r¦   r  ÚsgnÚcsgnÚaccrñ   Úabsels          r#   Úcmplx_diag_walkerz3_get_slogdet_diag_walker.<locals>.cmplx_diag_walkerZ  sp   € ð ˜‘9ˆDØˆCÝ˜1‘X”Xð *ð *�Ýœ˜q  A œw™œ�Ø˜q  A œw¨™Ñ/�Ø�BœF 5™MœMÑ)��Ø˜#�;Ðr0   c                 ó’   — d}t          | ¦  «        D ]/}|||f         }|dk     r| }| }|t          j        |¦  «        z   }Œ0|dz   |fS )NrÕ   )rÆ  r  r˜  )r¦   r  r™  r›  rñ   r…  s         r#   Úreal_diag_walkerz2_get_slogdet_diag_walker.<locals>.real_diag_walkerf  sc   € ð ˆCÝ˜1‘X”Xð &ð &�Ø�a˜�d”G�Ø�r’6�6Ø˜$�CØ˜�AØ�BœF 1™IœI‘o��à˜"‘H˜c�?Ð"r0   )r”   r9   r   r�  r   )r  r�  rŸ  s      r#   Ú_get_slogdet_diag_walkerr   Q  s^   € õ �!”'�5œ=Ñ)Ô)ð  Ý	ð	ð 	ñ 
Ô	ð	ð !Ð å	ð
	#ð 
	#ñ 
Ô	ð
	#ð  Ðr0   c                 ó~  ‡‡‡‡‡— t          ¦   «          t          | d¦  «         t          ¦   «                              | j        ¦  «        Št          t          | j        d¦  «        ¦  «        Št          | ¦  «        Š|                      d¦  «        Š t          | j        d| j        ¦  «        d¦  «        Šˆˆˆˆˆfd„}|S )NÚslogdetr   rX   r   c                 ó.  •— | j         d         }| j         d         |k    r!d}t          j                             |¦  «        ‚|dk    r‰‰	fS t	          | ¦  «         t          | ¦  «        }t          j        |t          ¬¦  «        } ‰‰|||j        ||j        ¦  «        }|dk    rdt          j	         fS t          |¦  «         d}t          |¦  «        D ]}|||         |dz   k    z   }Œ|dz  }|dk    rd}t          |j        g¦  «          ‰
|||¦  «        S )Nr±  r²  r³  r   r´  rÕ   r   )r   r  rƒ  r„  r†  r™  r  rµ  r¶  Úinfrª  rÆ  r­  r·  )r  r¦   r“  r¡  r¸  r©  r™  rñ   ÚONEÚZEROÚdiag_walkerr;   rs   s           €€€€€r#   Úslogdet_implz"slogdet_impl.<locals>.slogdet_impl„  s2  ø€ ØŒG�BŒKˆØŒ7�2Œ;˜!ÒÐØBˆCÝ”)×'Ò'¨Ñ,Ô,Ð,à�Š6ˆ6Ø˜�;Ðå˜QÑÔÐå% aÑ(Ô(ˆåŒx˜¥Ð.Ñ.Ô.ˆàˆM˜$  1 d¤k°1°d´kÑBÔBˆàˆqŠ5ˆ5à�œ˜�=Ð Ý˜ÑÔÐð ˆÝ�q‘”ð 	-ð 	-ˆAØ˜˜aœ Q¨¡UÒ+Ñ,ˆCˆCà�A‰gˆØ�!Š8ˆ8ØˆCõ 	˜dœi˜[Ñ)Ô)Ð)Øˆ{˜1˜d CÑ(Ô(Ð(r0   )	rF   r”  rp   rs   r9   rÆ   r<   r   r[   )r  r¨  r¥  r¦  r§  r;   rs   s     @@@@@r#   r¨  r¨  u  sÄ   øøøøø€ å�O„O€Oå˜˜IÑ&Ô&Ð&å‘I”I×+Ò+¨A¬GÑ4Ô4€Må�}˜QœW iÑ0Ô0Ñ1Ô1€Då*¨1Ñ-Ô-€Kà
�'Š'�!‰*Œ*€CØ8�7�1”7Ð.°´Ñ8Ô8¸Ñ;Ô;€Dð')ð ')ð ')ð ')ð ')ð ')ð ')ð ')ð ')ðR Ðr0   c                 óH   — t          ¦   «          t          | d¦  «         d„ }|S )NÚdetc                 ót   — t           j                             | ¦  «        \  }}|t          j        |¦  «        z  S rH   )r  rƒ  r¢  Úexp)r  r™  r¢  s      r#   Údet_implzdet_impl.<locals>.det_impl·  s.   € Ýœ×*Ò*¨1Ñ-Ô-‰ˆˆgØ•R”V˜G‘_”_Ñ$Ð$r0   ©rF   r”  )r  r­  s     r#   r­  r­  °  s3   € õ �O„O€Oå˜˜EÑ"Ô"Ð"ð%ð %ð %ð €Or0   c                 ó   — t           ‚)z)
    Compute singular values of *a*.
    r&  r¬  s    r#   Ú_compute_singular_valuesr°  ¾  r,  r0   c                 ó¼  ‡‡‡‡‡‡	— t          ¦   «                              | j        ¦  «        Št          t	          | j        d¦  «        ¦  «        Št          d¦  «        Št          | j        d| j        ¦  «        }t          j        |¦  «        Št          j        | j        ¦  «        }t          j	        d|¬¦  «        Št          j	        d|¬¦  «        Š	ˆˆˆˆˆˆ	fd„}|S )z>
    Returns a function to compute singular values of `a`
    r  rÍ  rX   r/  r´  c                 óä  •— | j         d         }| j         d         }|dk    s|dk    rt          j                             d¦  «        ‚t	          | ¦  «         |}t          ||¦  «        }d}d}t          | ¦  «        }t          j        |‰¬¦  «        } ‰‰‰
|||j        ||j        ‰j        |‰j        |¦  «        }	t          |	¦  «         t          |j        ‰j        ‰j        |j        g¦  «         |S )z+
        Computes singular values.
        r±  r²  r   r  r   r´  )r   r  rƒ  r„  r†  r  r™  r  r¶  r¼  r­  r·  )r  r¦   rß   r  r  r  r  r¡  r1   r©  ÚJOBZ_Nr;   Únp_ret_typer‚   r  r  s             €€€€€€r#   Úsv_functionz2_compute_singular_values_impl.<locals>.sv_functionÚ  s  ø€ ð ŒG�BŒKˆØŒG�BŒKˆØ�Š6ˆ6�Q˜!’V�VÝ”)×'Ò'Ð(@ÑAÔAÐAÝ˜QÑÔÐàˆÝ�A�q‘	”	ˆð ˆØˆå% aÑ(Ô(ˆõ
 ŒH�U +Ð.Ñ.Ô.ˆàˆNØØØØØŒKØØŒHØŒHØØŒIØñ
ô 
ˆõ 	.¨aÑ0Ô0Ð0õ 	˜dœi¨¬°!´&¸!¼&ÐAÑBÔBÐBØˆr0   )
rp   r‚   r9   rÆ   r<   r[   rê  rì  r  r  )
r  Únb_ret_typeÚnp_dtyperµ  r³  r;   r´  r‚   r  r  s
       @@@@@@r#   Ú_compute_singular_values_implr¸  Å  sæ   øøøøøø€ õ
 ‘Y”Y×-Ò-¨a¬gÑ6Ô6€Nå�}˜QœW eÑ,Ô,Ñ-Ô-€Dõ �‰XŒX€Få˜!œ'Ð#5°q´wÑ?Ô?€KÝÔ% kÑ2Ô2€KÝÔ" 1¤7Ñ+Ô+€Hõ 	Œ�˜xÐ(Ñ(Ô(€AÝ	Œ�& Ð	)Ñ	)Ô	)€Bð-ð -ð -ð -ð -ð -ð -ð -ð -ð -ð^ Ðr0   c                 ó   — t           ‚)z.
    Compute the L2-norm of 1D-array *a*.
    r&  r¬  s    r#   Ú_oneD_norm_2rº  	  r,  r0   c                 ó  ‡‡‡— t          | j        d| j        ¦  «        }t          j        |¦  «        Št	          ¦   «                              | j        ¦  «        Št          t          | j        d¦  «        ¦  «        Šˆˆˆfd„}|S )NrX   Únormc                 ó6  •— t          | ¦  «        }t          j        d‰¬¦  «        }t          | j        d         | j        z  ¦  «        } ‰‰|| j        ||j        ¦  «        }|dk     rt          ¦   «          J ‚t          |j	        | j	        g¦  «         |d         S )Nr  r´  r   )
Úlenr  r  rÇ   ÚstridesrU  r¶  r§  r­  r·  )r  r¦   r#  Újmpr©  r;   r´  Úxxnrm2s        €€€r#   r¨   z_oneD_norm_2_impl.<locals>.impl	  s    ø€ õ �‰FŒFˆåŒh�t ;Ð/Ñ/Ô/ˆÝ�!”)˜A”, ¤Ñ+Ñ,Ô,ˆØˆFØØØŒHØØŒJñ
ô 
ˆð ˆqŠ5ˆ5ÝÑÔÐØ�1õ
 	˜cœh¨¬Ð/Ñ0Ô0Ð0Ø�1Œvˆr0   )r[   r9   rê  rì  rR   rY   rÆ   r<   )r  r¶  r¨   r;   r´  rÁ  s      @@@r#   Ú_oneD_norm_2_implrÂ  	  s‡   øøø€ å˜!œ'Ð#5°q´wÑ?Ô?€KÝÔ% kÑ2Ô2€Kå‰WŒW×!Ò! !¤'Ñ*Ô*€Få�}˜QœW fÑ-Ô-Ñ.Ô.€Dðð ð ð ð ð ð ð0 €Kr0   c                 ó–  ‡	‡
— t          | j        d| j        ¦  «        }t          j        |¦  «        }t          j        | j        ¦  «        }t	          ¦   «                              | j        ¦  «        }t          t          | j        d¦  «        ¦  «        }| j        dk    r|d t          j
        fv rdd„}ndd„}|S | j        dk    r…|d t          j
        fv rO| j        dk    rt          d„ ¦   «         Š	n,| j        d	k    rt          d
„ ¦   «         Š	nt          d„ ¦   «         Š	dˆ	fd„	}n$t          j        |j        ¦  «        j        Š
dˆ
fd„	}|S J ‚)NrX   r¼  r   c                 ó    — t          | ¦  «        S rH   )rº  ©r[  rÆ   s     r#   r0  z!_get_norm_impl.<locals>.oneD_implT	  s   € Ý# A‘”Ð&r0   c                 óè  — t          | ¦  «        }|dk    rdS |dk    rt          | ¦  «        S |t          j        k    rGt	          | d         ¦  «        }t          d|¦  «        D ]}t	          | |         ¦  «        }||k    r|}Œ |S |t          j         k    rGt	          | d         ¦  «        }t          d|¦  «        D ]}t	          | |         ¦  «        }||k     r|}Œ |S |dk    r'd}t          |¦  «        D ]}| |         dk    r|dz  }Œ|S |dk    r.d}t          |¦  «        D ]}|t	          | |         ¦  «        z  }Œ|S d}t          |¦  «        D ]}|t	          | |         ¦  «        |z  z  }Œ|d|z  z  S )Nr   rÕ   r,  r   rÔ   )r¾  rº  r  r¤  rX  rÆ  )r[  rÆ   r¦   r#  rñ   rN   s         r#   r0  z!_get_norm_impl.<locals>.oneD_implW	  sŸ  € Ý˜‘F”F�ð ˜’6�6Ø˜3ð ˜!’8�8Ý'¨™?œ?Ð*Ø�BœF’]�]å˜a œd™)œ)�CÝ" 1 a™[œ[ð &ð &˜Ý! ! A¤$™iœi˜Ø š9˜9Ø"%˜CøØ�Jà�RœV˜G’^�^å˜a œd™)œ)�CÝ" 1 a™[œ[ð &ð &˜Ý! ! A¤$™iœi˜Ø š9˜9Ø"%˜CøØ�Jà˜A’X�Xà�CÝ" 1™XœXð &ð &˜Ø˜Qœ4 2š:˜:Ø 2™I˜CøØ�Jà˜A’X�Xà�CÝ" 1™XœXð )ð )˜Ø�s 1 Q¤4™yœyÑ(˜˜Ø�Jð �CÝ" 1™XœXð .ð .˜Ø�s 1 Q¤4™yœy¨#™~Ñ-˜˜Ø  c¡™?Ð*r0   r,  r�   c                 ó   — | S rH   rn   ©r[  s    r#   Úarray_preparez%_get_norm_impl.<locals>.array_prepareš	  s   € à�Hr0   rÖ   c                 ó   — | j         S rH   )rŸ  rÈ  s    r#   rÉ  z%_get_norm_impl.<locals>.array_preparež	  s   € ð œ3�Jr0   c                 ó*   — |                       ¦   «         S rH   rl  rÈ  s    r#   rÉ  z%_get_norm_impl.<locals>.array_prepare£	  s   € àŸ6š6™8œ8�Or0   c                 ó|   •— | j         }|dk    rdS  ‰| ¦  «        }t          |                     |¦  «        ¦  «        S )Nr   rÕ   )r·  rº  r‹  )r[  rÆ   r¦   Úx_crÉ  s       €r#   r2  z!_get_norm_impl.<locals>.twoD_impl©	  s?   ø€ Ø”F�Ø˜’6�6à˜3Ø#�m AÑ&Ô&�Ý# C§K¢K°¡N¤NÑ3Ô3Ð3r0   c                 ó–  •— | j         d         }| j         d         }| j        dk    rdS |t          j        k    rLd}t	          |¦  «        D ]8}d}t	          |¦  «        D ]}|t          | ||f         ¦  «        z  }Œ||k    r|}Œ9|S |t          j         k    rL‰	}t	          |¦  «        D ]8}d}t	          |¦  «        D ]}|t          | ||f         ¦  «        z  }Œ||k     r|}Œ9|S |dk    rLd}t	          |¦  «        D ]8}d}t	          |¦  «        D ]}|t          | ||f         ¦  «        z  }Œ||k    r|}Œ9|S |dk    rL‰	}t	          |¦  «        D ]8}d}t	          |¦  «        D ]}|t          | ||f         ¦  «        z  }Œ||k     r|}Œ9|S |dk    rt          | ¦  «        d         S |dk    rt          | ¦  «        d         S t          d¦  «        ‚)Nr±  r²  r   rÕ   r   r,  z Invalid norm order for matrices.)r   r·  r  r¤  rÆ  rX  r°  r  )
r[  rÆ   r¦   rß   Ú
global_maxÚiiÚtmpÚjjÚ
global_minÚmax_vals
            €r#   r2  z!_get_norm_impl.<locals>.twoD_impl´	  s<  ø€ Ø”G˜B”K�Ø”G˜B”K�ð ”6˜Q’;�;Ø˜3à�"œ&’=�=ð "$�JÝ# A™hœhð -ð -˜Ø ˜Ý"'¨¡(¤(ð 2ð 2˜BØ¥3 q¨¨R¨¤y¡>¤>Ñ1˜C˜CØ Ò+Ð+Ø),˜JøØ%Ð%à�RœV˜G’^�^ð ")�JÝ# A™hœhð -ð -˜Ø ˜Ý"'¨¡(¤(ð 2ð 2˜BØ¥3 q¨¨R¨¤y¡>¤>Ñ1˜C˜CØ Ò+Ð+Ø),˜JøØ%Ð%Ø˜A’X�Xð "$�JÝ# A™hœhð -ð -˜Ø ˜Ý"'¨¡(¤(ð 2ð 2˜BØ¥3 q¨¨R¨¤y¡>¤>Ñ1˜C˜CØ Ò+Ð+Ø),˜JøØ%Ð%à˜B’Y�Yð ")�JÝ# A™hœhð -ð -˜Ø ˜Ý"'¨¡(¤(ð 2ð 2˜BØ¥3 q¨¨R¨¤y¡>¤>Ñ1˜C˜CØ Ò+Ð+Ø),˜JøØ%Ð%ð ˜A’X�Xå3°AÑ6Ô6°qÔ9Ð9Ø˜B’Y�Yå3°AÑ6Ô6°rÔ:Ð:õ %Ð%GÑHÔHÐHr0   r   rH   )r[   r9   rê  rì  rR   rY   rÆ   r<   r5  r   rª   r‘   r   r  Úfinfor�  rr  )r[  Úord_flagr¶  r´  r·  rÁ  r;   r0  r2  rÉ  rÔ  s            @@r#   Ú_get_norm_implr×  7	  sÈ  øø€ õ ˜!œ'Ð#5°q´wÑ?Ô?€KÝÔ% kÑ2Ô2€KåÔ" 1¤7Ñ+Ô+€Hå‰WŒW×!Ò! !¤'Ñ*Ô*€Få�}˜QœW fÑ-Ô-Ñ.Ô.€Dà„v�‚{€{ð ˜�eœjÐ)Ð)Ð)ð'ð 'ð 'ð 'ð 'ð8+ð 8+ð 8+ð 8+ðr Ðà	
Œ�1Šˆð ˜�eœjÐ)Ð)Ð)ð Œx˜3ŠˆÝ!ðð ñ "Ô!ðð à”˜S’�Ý!ðð ñ "Ô!ðð õ "ð$ð $ñ "Ô!ð$ð
4ð 4ð 4ð 4ð 4ð 4ð 4õ ”h˜{Ô/Ñ0Ô0Ô4ˆGðDIð DIð DIð DIð DIð DIðJ Ðàˆqr0   c                 ó^   — t          ¦   «          t          | d¦  «         t          | |¦  «        S )Nr¼  )rF   rÀ  r×  rÅ  s     r#   Ú	norm_implrÙ  þ	  s+   € å�O„O€Oå   FÑ+Ô+Ð+å˜!˜SÑ!Ô!Ð!r0   c                 óJ   — t          ¦   «          t          | d¦  «         dd„}|S )NÚcondc                 óÜ  — |dk    s|dk    s|€[t          | ¦  «        }|dk    s|€"t          j        |d         |d         ¦  «        }n„t          j        |d         |d         ¦  «        }nbt          j                             | |¦  «        }t          j                             t          j                             | ¦  «        |¦  «        }||z  }t          j        |¦  «        rt          j        S |S )Nr,  r²  r   r±  )r°  r  Údividerƒ  r¼  r¯  Úisnanr¤  )r[  Úpr1   r©  Únorm_xÚ
norm_inv_xs         r#   r¨   zcond_impl.<locals>.impl
  sÉ   € ð& �Š6ˆ6�Q˜"’W�W  	Ý(¨Ñ+Ô+ˆAØ�AŠvˆv˜˜Ý”I˜a œd A b¤EÑ*Ô*��å”I˜a œe Q q¤TÑ*Ô*��å”Y—^’^ A qÑ)Ô)ˆFÝœŸš­¬	¯ª°aÑ(8Ô(8¸!Ñ<Ô<ˆJØ˜Ñ#ˆAõ Œ8�A‰;Œ;ð 	Ý”6ˆMàˆHr0   rH   r®  )r[  rß  r¨   s      r#   Ú	cond_implrâ  
  s7   € å�O„O€Oå˜˜FÑ#Ô#Ð#ð#ð #ð #ð #ðH €Kr0   c                 ól   — d}t          t          | ¦  «        ¦  «        D ]}| |         |k    r|dz   }Œ |S )zJ
    Gets rank from singular values with cut-off at a given tolerance
    r   r   ©rÆ  r¾  )Úsvr×   rv  rñ   s       r#   Ú_get_rank_from_singular_valuesræ  4
  sD   € ð
 €DÝ•3�r‘7”7‰^Œ^ð ð ˆØˆaŒ5�1Š9ˆ9Ø˜!‘8ˆDˆDàØ€Kr0   c                 óh   ‡— t          ¦   «          t          | d¦  «         d„ Šˆfd„} || |¦  «        S )ah  
    Computes rank for matrices and vectors.
    The only issue that may arise is that because numpy uses double
    precision lapack calls whereas numba uses type specific lapack
    calls, some singular values may differ and therefore counting the
    number of them above a tolerance may lead to different counts,
    and therefore rank, in some cases.
    Úmatrix_rankc                 óÐ   ‡— |d t           j        fv rPt          | j        d| j        ¦  «        }t	          j        |¦  «        }t          j        |¦  «        j        Šdˆfd„	}|S dd„}|S )NrX   c                 ó²   •— t          | ¦  «        }| j        d         }| j        d         }t          ||¦  «        }|d         |z  ‰z  }t          ||¦  «        S )Nr   r   )r°  r   rr  ræ  )r›  Útolr1   r©  r3   Úlr×   Úeps_vals          €r#   Ú_2d_tol_none_implzImatrix_rank_impl.<locals>._2d_matrix_rank_impl.<locals>._2d_tol_none_implX
  sU   ø€ Ý,¨QÑ/Ô/�à”G˜A”J�Ø”G˜A”J�Ý˜˜1‘I”I�Ø�a”D˜1‘H˜wÑ&�Ý5°a¸Ñ;Ô;Ð;r0   c                 ó@   — t          | ¦  «        }t          ||¦  «        S rH   )r°  ræ  )r›  rë  r1   s      r#   Ú_2d_tol_not_none_implzMmatrix_rank_impl.<locals>._2d_matrix_rank_impl.<locals>._2d_tol_not_none_implb
  s   € Ý,¨QÑ/Ô/�Ý5°a¸Ñ=Ô=Ð=r0   rH   )	r   rª   r[   r9   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_implP
  s‘   ø€ ð �4�œÐ$Ð$Ð$Ý˜aœgÐ'9¸1¼7ÑCÔCˆGÝ Ô)¨'Ñ2Ô2ˆGÝ”h˜wÑ'Ô'Ô+ˆGð<ð <ð <ð <ð <ð <ð %Ð$ð>ð >ð >ð >ð )Ð(r0   c                 óR   •— | j         }|dk    rdd„}|S |dk    r ‰| |¦  «        S J ‚)Nr   c                 ób   — t          t          | ¦  «        ¦  «        D ]}| |         dk    r dS ŒdS )NrÕ   r   r   rä  )r›  rë  rñ   s      r#   Ú_1d_matrix_rank_implzMmatrix_rank_impl.<locals>._get_matrix_rank_impl.<locals>._1d_matrix_rank_implv
  s;   € Ý�s 1™vœv™œð !ð !�AØ˜”t˜r’z�zØ ˜q˜qð "à�qr0   r,  r   rH   rw  )r›  rë  r5  r÷  rô  s       €r#   Ú_get_matrix_rank_implz/matrix_rank_impl.<locals>._get_matrix_rank_implg
  sP   ø€ ØŒvˆØ�1Š9ˆ9ðð ð ð ð
 (Ð'Ø�QŠYˆYØ'Ð'¨¨3Ñ/Ô/Ð/à�1r0   )rF   rÀ  )r›  rë  rø  rô  s      @r#   Úmatrix_rank_implrù  B
  s[   ø€ õ �O„O€Oå   MÑ2Ô2Ð2ð)ð )ð )ð.ð ð ð ð ð4 !Ð   CÑ(Ô(Ð(r0   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_powerr9   zExponent must be an integer.c                 ó&  •— |dk    rAt          j        | j        ‰
¬¦  «        }t          | j        d         ¦  «        D ]	}d|||f<   Œ
|S | j        d         | j        d         }}||k    rt	          d¦  «        ‚|dk    r|                      ¦   «         S |dk     r=t           j                             | ¦  «                             ¦   «         }|dk    r|S | }n|dk    r|                      ¦   «         S | }|dk     rK|d	k    rt          j        ||¦  «        S |d
k    r(t          j        t          j        ||¦  «        |¦  «        S d S |}|}|}d}	|dk    rA|dz  r|	r|}d}	nt          j        ||¦  «        }t          j        ||¦  «        }|dz	  }|dk    °A|S )Nr   r´  rÔ   r±  r²  zinput must be a square arrayr   é   r,  é   TF)	r  r  r   rÆ  r  r–   rƒ  r¯  r  )r  r¦   r›  rñ   rC  rN  r›  r¬  r#  Úflagr·  s             €r#   Úmatrix_power_implz,matrix_power_impl.<locals>.matrix_power_impl‘
  sÄ  ø€ à�Š6ˆ6õ ”˜œ¨Ð1Ñ1Ô1ˆAÝ˜1œ7 1œ:Ñ&Ô&ð ð �Ø��!�Q�$‘�ØˆHà”˜”˜aœg bœkˆBˆØ�Š8ˆ8ÝÐ;Ñ<Ô<Ð<ð �Š7ˆ7Ø—6’6‘8”8ˆOð ˆqŠ5ˆ5Ý”	—’˜aÑ Ô ×%Ò%Ñ'Ô'ˆAØ�BŠwˆwØ�Ø�ˆAˆAà�AŠvˆvØ—v’v‘x”x�ØˆAàˆqŠ5ˆ5Ø�AŠvˆvÝ”v˜a ‘|”|Ð#Ø�AŠvˆvÝ”v�bœf Q¨™lœl¨AÑ.Ô.Ð.ð ˆvð ˆCØˆCð ˆCð ˆDØ˜’(�(Ø˜‘7ð /Øð /Ø!˜Ø$˜˜å œf S¨#Ñ.Ô.˜Ý”f˜S #Ñ&Ô&�Ø˜Q‘h�ð ˜’(�(ð ˆJr0   )	r”  rê  rì  r9   r[   r”   r   ÚIntegerr   )r  r¦   Úntr   r·  s       @r#   r   r   „
  s}   ø€ õ ˜˜NÑ+Ô+Ð+ÝÔ" 1¤7Ñ+Ô+€Hå	��G˜QÑ	Ô	€BÝ�b�%œ-Ñ(Ô(ð =ÝÐ;Ñ<Ô<Ð<ð=ð =ð =ð =ð =ð~ Ðr0   c                 ó˜   — t          | dd¬¦  «         t          |t          t          j        f¦  «        st          d|z  ¦  «        ‚dd„}|S )z)
    Computes the trace of an array.
    ÚtraceF©r�  z!integer argument expected, got %sr   c                 ó   — | j         \  }}|}|dk     r||z   }|dk    r||z
  }t          t          ||¦  «        d¦  «        }d}|dk    r#t          |¦  «        D ]}|| |||z   f         z  }Œn"t          |¦  «        D ]}|| ||z
  |f         z  }Œ|S rþ   )r   rr  r  rÆ  )r  ÚoffsetÚrowsÚcolsrñ   r¦   r#  rÝ  s           r#   Úmatrix_trace_implz,matrix_trace_impl.<locals>.matrix_trace_implà
  sÁ   € Ø”W‰
ˆˆdØˆØˆqŠ5ˆ5Ø˜!‘8ˆDØˆqŠ5ˆ5Ø˜!‘8ˆDÝ•�D˜$‘” Ñ#Ô#ˆØˆØ�Š6ˆ6Ý˜1‘X”Xð #ð #�Ø�q˜˜A ™E˜”{Ñ"��ð#õ ˜1‘X”Xð #ð #�Ø�q˜˜Q™ ˜”{Ñ"��Øˆ
r0   ©r   )r”  r”   rÇ   r   r  r   )r  r  r
  s      r#   r
  r
  Õ
  sc   € õ ˜˜G¨uÐ5Ñ5Ô5Ð5å�f�s¥E¤MÐ2Ñ3Ô3ð KÝÐ@À6ÑIÑJÔJÐJðð ð ð ð" Ðr0   c                 ó�   — |rdnd}||f}t          | t          j        ¦  «        r| j        dk    st	          d|z  d¬¦  «        ‚d S d S )Nrˆ  r  r,  r¾  Fr‰  )r”   r   r•   r5  r   r¿  s        r#   Ú_check_scalar_or_lt_2d_matr  ô
  sm   € Ø%Ð/ˆ[ˆ[¨4€FØ�iÐ €Få�!•U”[Ñ!Ô!ð <ØŒv˜Š{ˆ{ÝÐKØ &ñ'Ø5:ð<ñ <ô <ð <ð<ð <Øˆ{r0   c                 ó,  — t          j        | ¦  «        }t          j        |¦  «        }t          j        |                     ¦   «                              |j        df¦  «        |                     ¦   «                              d|j        f¦  «        ¦  «        S r9  ©r  ÚasarrayÚmultiplyrj  r‹  r·  ©r  r  r  ÚaaÚbbs        r#   Úouter_impl_noner  þ
  sm   € å	Œ�A‰Œ€BÝ	Œ�A‰Œ€BÝŒ;�r—x’x‘z”z×)Ò)¨2¬7°A¨,Ñ7Ô7ØŸš™
œ
×*Ò*¨A¨r¬w¨<Ñ8Ô8ñ:ô :ð :r0   c                 ó2  — t          j        | ¦  «        }t          j        |¦  «        }t          j        |                     ¦   «                              |j        df¦  «        |                     ¦   «                              d|j        f¦  «        |¦  «         |S r9  r  r  s        r#   Úouter_impl_arrr    sw   € å	Œ�A‰Œ€BÝ	Œ�A‰Œ€BÝ„K�—’‘
”
×"Ò" B¤G¨Q <Ñ0Ô0Ø—’‘
”
×"Ò" A r¤w <Ñ0Ô0Øñô ð ð €Jr0   c                 ó>   — |d t           j        fv rt          S t          S rH   )r   rª   r  r  )r  r  r  s      r#   Ú_get_outer_implr    s    € Ø
ˆt•U”ZÐ Ð Ð ÝÐåÐr0   c                 ó~   ‡— t          | dd¬¦  «         t          |dd¬¦  «         t          | ||¦  «        Šdˆfd„	}|S )NÚouterFr  c                 ó   •—  ‰| ||¦  «        S rH   rn   )r  r  r  r¨   s      €r#   Ú
outer_implzouter_impl.<locals>.outer_impl  s   ø€ Øˆt�A�q˜#‰ŒÐr0   rH   )r  r  )r  r  r  r  r¨   s       @r#   r  r    sf   ø€ õ ˜q '°UÐ;Ñ;Ô;Ð;Ý˜q '°UÐ;Ñ;Ô;Ð;å˜1˜a Ñ%Ô%€Dðð ð ð ð ð ð Ðr0   c                 ó  — t          | t          j        ¦  «        r_| j        dvr't	          d                     | j        ¦  «        ¦  «        ‚| j        dk    rt          d„ ¦   «         }|S t          d„ ¦   «         }|S t          d„ ¦   «         }|S )N)r�   rÖ   z^np.linalg.kron only supports 'C' or 'F' layout input arrays. Received an input of layout '{}'.r,  c                 ób   — | j         d         }| j         d         }|                      ||¦  «        S )Nr±  r²  ©r   r‹  )r[  ÚxnÚxms      r#   Ú	nrm_shapez(_kron_normaliser_impl.<locals>.nrm_shape-  s,   € à”W˜R”[�Ø”W˜R”[�Ø—y’y  RÑ(Ô(Ð(r0   c                 óH   — | j         d         }|                      d|¦  «        S )Nr±  r   r   )r[  r!  s     r#   r#  z(_kron_normaliser_impl.<locals>.nrm_shape4  s!   € à”W˜R”[�Ø—y’y  BÑ'Ô'Ð'r0   c                 óT   — t          j        dt          | ¦  «        ¦  «        }| |d<   |S )Nr/  r   )r  r  r�  )r[  r  s     r#   r#  z(_kron_normaliser_impl.<locals>.nrm_shape:  s'   € å”˜¥ a¡¤Ñ)Ô)ˆAØˆAˆa‰DØˆHr0   )r”   r   r•   r‘   r   Úformatr5  r   )r[  r#  s     r#   Ú_kron_normaliser_implr'  %  s¼   € å�!•U”[Ñ!Ô!ð ØŒ8˜:Ð%Ð%Ýð -ç-3ªV°A´HÑ-=Ô-=ñ?ô ?ð ?ð ŒV�qŠ[ˆ[Ýð)ð )ñ Ôð)ð Ðåð(ð (ñ Ôð(ð Ðå	ð	ð 	ñ 
Ô	ð	ð Ðr0   c                 óZ  — t          | t          j        ¦  «        }t          |t          j        ¦  «        }|r<|r:| j        dk    s|j        dk    rt          d„ ¦   «         }|S t          d„ ¦   «         }|S |rt          d„ ¦   «         }|S |rt          d„ ¦   «         }|S t          d„ ¦   «         }|S )Nr,  c                 ó   — |S rH   rn   ©r  r  r3   s      r#   r#  z_kron_return.<locals>.retI  s   € à�r0   c                 ó6   — |                      |j        ¦  «        S rH   )r‹  r·  r*  s      r#   r#  z_kron_return.<locals>.retN  s   € à—y’y ¤Ñ(Ô(Ð(r0   c                 ó6   — |                      | j        ¦  «        S rH   ©r‹  r   r*  s      r#   r#  z_kron_return.<locals>.retT  ó   € à—y’y ¤Ñ)Ô)Ð)r0   c                 ó6   — |                      |j        ¦  «        S rH   r-  r*  s      r#   r#  z_kron_return.<locals>.retY  r.  r0   c                 ó   — |d         S rþ   rn   r*  s      r#   r#  z_kron_return.<locals>.ret^  s   € à˜”t�r0   )r”   r   r•   r5  r   )r  r  Úa_is_arrÚb_is_arrr#  s        r#   Ú_kron_returnr3  B  sõ   € õ ˜!�Uœ[Ñ)Ô)€HÝ˜!�Uœ[Ñ)Ô)€HØð �Hð ØŒ6�QŠ;ˆ;˜!œ& Aš+˜+Ýðð ñ ÔðàˆJåð)ð )ñ Ôð)àˆJàð 	Ýð*ð *ñ Ôð*àˆJØð 		Ýð*ð *ñ Ôð*àˆJåðð ñ ÔðàˆJr0   c                 óä   ‡‡‡‡— t          | dd¬¦  «         t          |dd¬¦  «         t          | ¦  «        Št          |¦  «        Št          | |¦  «        Št          | d| ¦  «        Šˆˆˆˆfd„}|S )NÚkronFr  r9   c           	      óÆ  •—  ‰| ¦  «        } ‰|¦  «        }|j         d         }|j         d         }|j         d         }|j         d         }||z  }||z  }	t          j        ||	f‰¬¦  «        }
t          |¦  «        D ]X}||z  }t          |¦  «        D ]A}||z   }||d d …f         }t          |¦  «        D ]}||z  }|||f         |z  |
||||z   …f<   ŒŒBŒY ‰| ||
¦  «        S )Nr²  r±  r´  )r   r  r  rÆ  )r  r  r  r  rC  rN  rD  rP  ÚcmÚcnr�   rÝ  Úrjmprñ   ÚirjmpÚslcrÞ  Úcjmpr•  Úfix_aÚfix_bÚret_cs                     €€€€r#   Ú	kron_implzkron_impl.<locals>.kron_implr  s(  ø€ àˆU�1‰XŒXˆØˆU�1‰XŒXˆàŒX�bŒ\ˆØŒX�bŒ\ˆØŒX�bŒ\ˆØŒX�bŒ\ˆà�"‰WˆØ�"‰Wˆõ ŒH�b˜"�X RÐ(Ñ(Ô(ˆõ �r‘”ð 	>ð 	>ˆAà�r‘6ˆDå˜2‘Y”Yð >ð >�à˜q™�à˜˜A˜A˜A˜”h�å˜r™œð >ð >�Að ˜r™6�DØ/1°!°Q°$¬x¸#©~�A�e˜T $¨¡)˜^Ð+Ñ,Ð,ð>ð>ð ˆu�Q˜˜1‰~Œ~Ðr0   )r  r'  r3  r[   )r  r  r@  r•  r=  r>  r?  s      @@@@r#   r@  r@  d  sŸ   øøøø€ õ ˜q &°EÐ:Ñ:Ô:Ð:Ý˜q &°EÐ:Ñ:Ô:Ð:å! !Ñ$Ô$€EÝ! !Ñ$Ô$€EÝ˜˜AÑÔ€Eõ 
��G˜QÑ	Ô	€Bð&ð &ð &ð &ð &ð &ð &ð &ðP Ðr0   )r5   )F)Tr  ry  r“  rH   r  )ªrl   Ú
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ê  Únumbar   r¿   rÀ   Ú
as_pointerÚ	ll_char_prÂ   Úll_intcÚ	ll_intc_prÁ   Ú	ll_intp_pr$   r   r[   r)   Ú_LAPACK_ILP64r+   r/   Úint64Úint32rµ  ru   Úfloat32rŠ   Ú	complex64Ú
complex128r7   r<   rB   rF   rP   rR   rp   Úcontextmanagerr¢   r«   r¸   r»   rÑ   râ   rû   r  r  r  r   r  r%  Úmatmulr'  r#  rH  rJ  rL  rd  rr  r}  r`   r\   r§  r†  r”  r—  r™  r¥  rª  r­  rƒ  r¯  rº  r¼  rÀ  rÂ  rÉ  rÌ  rð  rò  rú  rü  r  r  r
  r  r  r  r$  r+  r3  r6  r;  r=  rH  rJ  rQ  rS  rb  re  rm  rp  rx  r~  r‚  r„  r†  r‰  r’  r   r¢  r¨  rª  r­  r°  r¸  rº  rÂ  r×  r¼  rÙ  rÛ  râ  ræ  rè  rù  rû  r   r  r
  r  r  r  r  r  r  r'  r3  r5  r@  rn   r0   r#   ú<module>rZ     só  ððð ð
 Ð Ð Ð Ø €€€à Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€ðJð Jð Jð Jð Jð Jð Jð Jð Jð Jð Jð Jà 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø Ð Ð Ð Ð Ð à
ˆ"Œ*�Q‰-Œ-€Ø×ÒÑ Ô €	Ø€	Ø
ˆ"Œ*�R‰.Œ.€Ø×ÒÑ Ô €	Ø	Œ€Ø×ÒÑÔ€	ðð ð ð4 �d˜7˜7 :Ð/CÀUÑKÔKÑLÔLÐ Ø#€ð%ð ð
ð 
ð 
ð2 )Ð6ˆrŒxˆx¨b¬h€Ø+Ð<ˆuŒ{ˆ{°´€ð 
„M�3Ø	„M�3Ø	„O�SØ	Ô�cð	€ðð ð ð ðð ð ðð ð ð5ð 5ð 5ð
&;ð &;ð &;ð &;ð &;ñ &;ô &;ð &;ðR`:ð `:ð `:ð `:ð `:ñ `:ô `:ð `:ðF Ôð-ð -ñ Ôð-ð0Fð Fð Fð	Að 	Að 	Að	Cð 	Cð 	Cð-ð -ð -ð,"-ð "-ð "-ðJ/-ð /-ð /-ðdDð Dð Dð Dð Dð Dð Dð Dð Dð ð ð ð ð6 
€ˆ"Œ&ÑÔð(ð (ñ Ôð(ð 
€ˆ(Œ/ÑÔð#ð #ñ Ôð#ð+(ð +(ð +(ð\ 
€ˆ"Œ'ÑÔð6ð 6ñ Ôð6ð@@ð @ð @ð@ð @ð @ð6.ð 6.ð 6.ðrV.ð V.ð V.ðr 
€ˆ"Œ&ÑÔð#2ð #2ñ Ôð#2ðL *�5Ô)Ð*=¸z¸u¼z¹|¼|ÑLÔLÐ ð ð8ð 8ñ Ôð8ð3ð 3ð 3ð 3ð*7ð 7ð 7ð	ð 	ð 	ð 
€Ð
 Ñ!Ô!ðð ñ "Ô!ðð6 ð<ð <ñ Ôð<ð ðð ñ Ôðð
 
€ˆ"Œ)Œ-ÑÔð$ð $ñ Ôð$ðN ðGð Gñ ÔðGð@ð @ð @ð @ð$ 
€ˆ"Œ)Ô
ÑÔð)ð )ñ Ôð)ðV 
€ˆ"Œ)Œ-ÑÔð\ð \ñ Ôð\ð| 
€ˆ"Œ)Ô
ÑÔðH!ð H!ñ ÔðH!ðT 
€ˆ"Œ)Œ.ÑÔð.ð .ñ Ôð.ð` 
€ˆ"Œ)Ô
ÑÔð.ð .ñ Ôð.ð` 
€ˆ"Œ)Œ-ÑÔð>ð >ð >ñ Ôð>ðB 
€ˆ"Œ)Œ,ÑÔðIð Iñ ÔðIð`ð ð ð 
€Ð
ÑÔðð ñ Ôððð ð ð 
€Ð
ÑÔðð ñ  Ôððð ð ð 
€Ð
+Ñ,Ô,ðð ñ -Ô,ðð(ð ð ð 
€Ð
!Ñ"Ô"ðð ñ #Ô"ðð*ð ð ð 
€ˆ/ÑÔð!ð !ñ Ôð!ðHð ð ð 
€ˆ/ÑÔðð ñ Ôðð 
€ˆ"Œ)Œ/ÑÔð[ð [ð [ñ Ôð[ð|ð ð ð 
€Ð
Ñ Ô ðð ñ !Ô ðð 
€ˆ"Œ)Œ/ÑÔð9ð 9ñ Ôð9ðx 
€ˆ"Œ)Œ.ÑÔð`ð `ð `ñ Ôð`ðF! ð ! ð ! ðH 
€ˆ"Œ)Ô
ÑÔð7ð 7ñ Ôð7ðt 
€ˆ"Œ)Œ-ÑÔð
ð 
ñ Ôð
ðð ð ð 
€Ð
"Ñ#Ô#ðCð Cñ $Ô#ðCðLð ð ð 
€ˆ,ÑÔð ð  ñ Ôð ðFDð Dð DðN 
€ˆ"Œ)Œ.ÑÔð"ð "ð "ñ Ôð"ð 
€ˆ"Œ)Œ.ÑÔð)ð )ð )ñ Ôð)ðX ð
ð 
ñ Ôð
ð 
€ˆ"Œ)Ô
Ñ Ô ð>)ð >)ð >)ñ !Ô ð>)ðB 
€ˆ"Œ)Ô
 Ñ!Ô!ðKð Kñ "Ô!ðKð` 
€ˆ"Œ(ÑÔðð ð ñ Ôðð<<ð <ð <ð <ð ð:ð :ñ Ôð:ð ðð ñ Ôððð ð ð 
€ˆ"Œ(ÑÔð
ð 
ð 
ñ Ôð
ðð ð ð:ð ð ðD 
€ˆ"Œ'ÑÔð5ð 5ñ Ôð5ð 5ð 5r0   