§
    2@ÄjžÃ  ã                   ó†  — 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ZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddl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ZddlmZ ddlZddl m!Z!mZ ddl"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z) dd	l*m+Z+m,Z,m-Z-m.Z.m/Z/ dd
l0m1Z1 ddl2m3Z3 ddl4Z4ddl5m6Z6 ddl7m8Z8 ddl5m9Z: ddl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA ddlBmCZC 	 ddlDZDn# eE$ r dZDY nw xY w	 ddlFZF eFjG        ¦   «          n# eE$ r Y nw xY w e,¦   «         ZHdeH_I         e,¦   «         ZJdeJ_K         e,¦   «         ZL e,¦   «         ZMdeM_N         e!jO        g d¢¦  «        ZP ePd¦  «        ZQejR        dk    ZSeSZT e4jU        eTd¦  «        ZV e4jW        e%jX        dk    d¦  «        ZY e4jW        e%jX        dk    d¦  «        ZZ e4jW        e%jX        dk    d¦  «        Z[ e4jU        e%jX        dk    oej         \                    d¦  «        d¦  «        Z] e4jW        e%jX        dk    d¦  «        Z^ e4jU        ej         \                    d ¦  «        o ej_        ¦   «         d!k    d"¦  «        Z` e4jU        eSd#¦  «        Zae8jb        d$k    Zc e4jU        ecd%¦  «        Zdej         \                    d ¦  «        o ej_        ¦   «         d&k    o
e8jb        d'k     Ze ef ege	jh         i                    d(d¦  «        ¦  «        ¦  «        Zj	  e4jU        ejd)¦  «        Zk  eled*d+„ ¦  «        ¦   «          Zm e4jU        emd,¦  «        Znd-„ Zod.„ Zpd/„ Zqd0„ Zrd1„ Zsd2„ Ztd3„ Zud4Zv e4jU        eDdu ev¦  «        Zw e4jW        e)jx        d5¦  «        Zyd6Zz e4jU        ej         \                    d ¦  «         ez¦  «        Z{d7Z| e4jU        ej         \                    d¦  «         e|¦  «        Z}d8Z~ e4jU        ej         \                    d¦  «        e~¦  «        Z ej_        ¦   «         d9k    Z€ e4jU        dd:¦  «        Z� e4jU         ej_        ¦   «         d;k    d<¦  «        Z‚ efe	jh         i                    d=d¦  «        ¦  «        Zƒ e4jW        eƒd>¦  «        Z„ e4jU        eƒd?¦  «        Z… e4jU         ej_        ¦   «         d;k    d@¦  «        Z† e4jU         ej_        ¦   «         d;k    dA¦  «        Z‡ ejˆ        ¦   «         Z‰e‰jŠ        dBk    Z‹ e4jU        e‹dC¦  «        ZŒe‹o
e‰j_        dDk    Z�e‰jŠ        dEk    o
e‰j_        dFk    ZŽ e4jU        eŽdG¦  «        Z�	 ddl�ZDdZ‘n# eE$ r dHZ‘Y nw xY w e4jW        e‘dI¦  «        Z’	 ddl“ZDdZ”n# eE$ r dHZ”Y nw xY w e4jW        e”dJ¦  «        Z•e	jh         i                    dKd¦  «        dLk    Z– e4jW        e–dM¦  «        Z—	 ddl˜Z˜dZ™n# eEešf$ r dHZ™Y nw xY w e4jW        e™dN¦  «        Z›dO„ Zœ G dP„ dQe4j�        ¦  «        Z� G dR„ dSež¦  «        ZŸej        dT„ ¦   «         Z ej        dU„ ¦   «         Z¡dV„ Z¢dWZ£e	j¤        dXk    r)e	j¥         ¦                     ej§        ¦   «         e£¦  «        Z£n:e	j¥         ¦                     ej§        ¦   «         e£›dY e	j¨        ¦   «         ›�¦  «        Z£dZZ©d[„ Zªd\„ Z«d]„ Z¬d^„ Z­d_„ Z®ej        d`„ ¦   «         Z¯da„ Z°db„ Z±ej        dc„ ¦   «         Z² G dd„ deež¦  «        Z³ G df„ dgež¦  «        Z´ G dh„ die³e´¦  «        Zµej        dj„ ¦   «         Z¶ej        dk„ ¦   «         Z·dl„ Z¸dm„ Z¹eºdfdn„Z»d}do„Z¼dp„ Z½ G dq„ drež¦  «        Z¾ds„ Z¿ej        dt„ ¦   «         ZÀd~dv„ZÁddx„ZÂdy„ ZÃ G dz„ d{e.¦  «        ZÄd|„ ZÅdS )€z&
Assorted utilities for use in tests.
é    N)Údefaultdict)Úcontextmanager)Úcached_property)ÚtestingÚtypes)ÚerrorsÚtypingÚutilsÚconfigÚcpu)Ú
cffi_utils)Úcompile_extraÚFlagsÚDEFAULT_FLAGSÚCompilerBaseÚDefaultPassBuilder)ÚIRLegalization)Ú
PreserveIR)Úrtsys)Únumpy_support)Ú_nrt_python)Úoverload_methodÚtypeof_implÚregister_modelÚunboxÚNativeValueÚmodels)ÚOpaqueModelT)Ú	importantÚlong_runningÚalways_testr!   ì        zparfors not supported)é   é
   zneeds Python 3.10 or laterzneeds Python 3.10©r#   é   zneeds Python 3.12©r#   é   Úwinz(Not supported on Python 3.13+ on Windows©r#   é   zneeds Python 3.14+ÚlinuxÚaarch64zNot supported on Linux aarch64zNot supported on 32 bit©é   r   zNot supported on numpy 2.0+Úx86_64)é   é   Ú_NUMBA_REDUCED_TESTINGzSkipped for reduced testingÚ_is_gil_enabledc                  ó   — dS )NT© r6   ó    úDC:\Projects\Historical\venv\Lib\site-packages\numba/tests/support.pyú<lambda>r9   ”   s   € ¸d€ r7   zWSkipped [NOT APPLICABLE] if using a free-threading build and free-threading is enabled.c                 óN   — t           j        dk    rt          j        | ¦  «        S | S )N)r#   é   ©r
   Ú	PYVERSIONÚunittestÚexpectedFailure©Úfns    r8   Úexpected_failure_py311rB   �   ó%   € Ý„˜'Ò!Ð!ÝÔ'¨Ñ+Ô+Ð+àˆ	r7   c                 óN   — t           j        dk    rt          j        | ¦  «        S | S )Nr%   r<   r@   s    r8   Úexpected_failure_py312rE   ¤   rC   r7   c                 óN   — t           j        dk    rt          j        | ¦  «        S | S )Nr'   r<   r@   s    r8   Úexpected_failure_py313rG   «   rC   r7   c                 óN   — t           j        dk    rt          j        | ¦  «        S | S )Nr*   r<   r@   s    r8   Úexpected_failure_py314rI   ±   rC   r7   c                 óN   — t           j        dk    rt          j        | ¦  «        S | S )N)r#   é   r<   r@   s    r8   Úexpected_failure_py315rL   ¸   rC   r7   c                 óN   — t           j        dk    rt          j        | ¦  «        S | S )Nr.   )r   Únumpy_versionr>   r?   r@   s    r8   Úexpected_failure_np2rO   ¿   s&   € ÝÔ" fÒ,Ð,ÝÔ'¨Ñ+Ô+Ð+àˆ	r7   c                  ó¸  — 	 ddl } |                      ¦   «         j        S # t          $ r Y nw xY wt          j                             d¦  «        rŒ	 t          d¦  «        5 }|D ]O}|                     d¦  «        r8t          | 	                    ¦   «         d         ¦  «        dz  c cddd¦  «         S ŒP	 ddd¦  «         n# 1 swxY w Y   n# t          $ r Y nw xY wdS )zÖ
    Best-effort lookup of currently available system memory, in bytes.
    Returns None if it can't be determined (psutil not installed, and not
    running on Linux where /proc/meminfo can be read directly).
    r   Nr,   z/proc/meminfozMemAvailable:r1   i   )ÚpsutilÚvirtual_memoryÚ	availableÚImportErrorÚsysÚplatformÚ
startswithÚopenÚintÚsplitÚOSError)rQ   ÚfÚlines      r8   Úavailable_memory_bytesr^   Æ   sa  € ðØˆˆˆØ×$Ò$Ñ&Ô&Ô0Ð0øÝð ð ð Øˆðøøøå
„|×Ò˜wÑ'Ô'ð ð	Ý�oÑ&Ô&ð ;¨!Øð ;ð ;�DØ—’ Ñ7Ô7ð ;Ý" 4§:¢:¡<¤<°¤?Ñ3Ô3°dÑ:Ð:Ð:ð;ð ;ð ;ð ;ñ ;ô ;ð ;ð ;ð;ð;ð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;øøõ ð 	ð 	ð 	ØˆDð	øøøàˆ4sO   ‚ Ÿ
,«,ÁC
 ÁAB>Â#C
 Â0B>Â2C
 Â>CÃC
 ÃCÃC
 Ã

CÃCzSciPy needed for testzrequires cffizlinux only testzWindows-only testznon Windows testÚarmv7lzTest disabledÚppc64lez?Hits: 'Parameter area must exist to pass an argument in memory'ÚNUMBA_USE_TYPEGUARDzTypeguard is not enabledzBroken if Typeguard is enabledz>Hits: 'mismatch in size of parameter area' in LowerCall_64SVR4zInvalid PPC CTR loopÚDarwinz-fenv.h-like functionality unreliable on macOSÚarm64ÚWindowsÚARM64zOAArch64 uimm12 fixup failure on win-arm64 for large UniTuple(unicode) argumentsFzLAPACK needs SciPy 1.0+zBLAS needs SciPy 1.0+ÚSUBPROC_TESTÚ1zneeds subprocess harnesszTest needs setuptoolsc                  óv   — t          j        dd¬¦  «         t          j        ddt          j        d¬¦  «         dS )zŠUse in testing within a ` warnings.catch_warnings` block to filter out
    warnings that are unrelated/internally generated by Numba.
    ÚignoreÚ	typeguard)Úmodulez.*TBB_INTERFACE_VERSION.*znumba\.np\.ufunc\.parallel.*)ÚactionÚmessageÚcategoryrk   N)ÚwarningsÚfilterwarningsr   ÚNumbaWarningr6   r7   r8   Úignore_internal_warningsrr   A  sR   € õ
 Ô˜H¨[Ð9Ñ9Ô9Ð9åÔ 8Ø$@Ý%+Ô%8Ø#BðDñ Dô Dð Dð Dð Dr7   c                   ón  — e Zd ZdZed„ ¦   «         Zd„ Zej        d„ ¦   «         Z	ej        d„ ¦   «         Z
d„ Zej        d„ ¦   «         Zeej        fZeefefej        feej        fgZefefej        gZeefgZeej        fZeej         fZ!d„ Z"d	„ Z#d
„ Z$d„ Z%	 	 	 dd„Z&	 	 	 dd„Z'	 	 	 dd„Z(dd„Z)d„ Z*d„ Z+dS )ÚTestCaseTc                 ó@   — t           j                             d¦  «        S )Né*   )ÚnpÚrandomÚRandomState©Úselfs    r8   rx   zTestCase.randomT  s   € åŒy×$Ò$ RÑ(Ô(Ð(r7   c                 ó|   — t          |t          ¦  «        rt          j        |         }	 |`dS # t
          $ r Y dS w xY w)z¶
        Reset the warnings registry of a module.  This can be necessary
        as the warnings module is buggy in that regard.
        See http://bugs.python.org/issue4180
        N)Ú
isinstanceÚstrrU   ÚmodulesÚ__warningregistry__ÚAttributeError)r{   rk   s     r8   Úreset_module_warningszTestCase.reset_module_warningsX  sU   € õ �f�cÑ"Ô"ð 	)Ý”[ Ô(ˆFð	ØÐ*Ð*Ð*øÝð 	ð 	ð 	ØˆDˆDð	øøøs   ©- ­
;º;c              #   ó¶   K  — t           j        t           j        t          t          f}|                      |¦  «        5 }|V — ddd¦  «         dS # 1 swxY w Y   dS )zr
        A context manager that asserts the enclosed code block fails
        compiling in nopython mode.
        N)r   ÚLoweringErrorÚTypingErrorÚ	TypeErrorÚNotImplementedErrorÚassertRaises)r{   Ú_accepted_errorsÚcms      r8   ÚassertTypingErrorzTestCase.assertTypingErrore  s    è è € õ #Ô0µ&Ô2DÝ%Õ':ð<Ðà×ÒÐ/Ñ0Ô0ð 	°BØˆHˆHˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ¼AÁAÁAc              '   ó   K  — t          j        ¦   «          d„ |D ¦   «         }dV — t          j        ¦   «          d„ |D ¦   «         }t          |||¦  «        D ]'\  }}}||k    r|                      d|||fz  ¦  «         Œ(dS )z 
        A context manager that asserts the given objects have the
        same reference counts before and after executing the
        enclosed block.
        c                 ó6   — g | ]}t          j        |¦  «        ‘ŒS r6   ©rU   Úgetrefcount©Ú.0Úxs     r8   ú
<listcomp>z+TestCase.assertRefCount.<locals>.<listcomp>{  ó"   € Ð=Ð=Ð=°�œ¨Ñ+Ô+Ð=Ð=Ð=r7   Nc                 ó6   — g | ]}t          j        |¦  «        ‘ŒS r6   rŽ   r�   s     r8   r“   z+TestCase.assertRefCount.<locals>.<listcomp>€  r”   r7   z-Refcount changed from %d to %d for object: %r)ÚgcÚcollectÚzipÚfail)r{   ÚobjectsÚold_refcountsÚnew_refcountsÚoldÚnewÚobjs          r8   ÚassertRefCountzTestCase.assertRefCountp  s©   è è € õ 	Œ
‰ŒˆØ=Ð=°WÐ=Ñ=Ô=ˆàˆˆˆå
Œ
‰ŒˆØ=Ð=°WÐ=Ñ=Ô=ˆÝ  °¸wÑGÔGð 	-ð 	-‰MˆC��cØ�cŠzˆzØ—	’	ÐIØ  # s˜Oñ,ñ -ô -ð -øð	-ð 	-r7   c           
      óü   — t          j        ¦   «          d„ |D ¦   «         }|d         }t          t          |¦  «        ¦  «        dd …         D ]/}||         }||k    r|                      d|› d|› d|› d�¦  «         Œ0d S )Nc                 ó6   — g | ]}t          j        |¦  «        ‘ŒS r6   rŽ   r�   s     r8   r“   z0TestCase.assertRefCountEqual.<locals>.<listcomp>ˆ  s"   € Ð2Ð2Ð2 Q�cŒo˜aÑ Ô Ð2Ð2Ð2r7   r   r1   z(Refcount for objects does not match. #0(z) != #ú(z) does not match.)r–   r—   ÚrangeÚlenr™   )r{   rš   ÚrcÚrc_0ÚiÚrc_is         r8   ÚassertRefCountEqualzTestCase.assertRefCountEqual†  sÂ   € Ý
Œ
‰ŒˆØ2Ð2¨'Ð2Ñ2Ô2ˆØ�!ŒuˆÝ•s˜7‘|”|Ñ$Ô$ Q R RÔ(ð 	Ið 	IˆAØ�a”5ˆDØ�tŠ|ˆ|Ø—	’	ð HØ $ðHð HØ,-ðHð HØ04ðHð Hð Hñ Iô Ið Iøð	Ið 	Ir7   c              #   ó2  K  — t          j        ¦   «         }dV — t          j        ¦   «         }|j        |j        z
  }|j        |j        z
  }|j        |j        z
  }|j        |j        z
  }|                      ||d¦  «         |                      ||d¦  «         dS )z|
        A context manager that asserts no NRT leak was created during
        the execution of the enclosed block.
        Nz-number of data allocs != number of data freesz3number of meminfo allocs != number of meminfo frees)r   Úget_allocation_statsÚallocÚfreeÚmi_allocÚmi_freeÚassertEqual©r{   r�   rž   Útotal_allocÚ
total_freeÚtotal_mi_allocÚtotal_mi_frees          r8   ÚassertNoNRTLeakzTestCase.assertNoNRTLeak�  sµ   è è € õ Ô(Ñ*Ô*ˆØˆˆˆÝÔ(Ñ*Ô*ˆØ”i #¤)Ñ+ˆØ”X ¤Ñ(ˆ
Øœ¨¬Ñ4ˆØœ c¤kÑ1ˆØ×Ò˜ jØHñ	Jô 	Jð 	Jà×Ò˜¨ØNñ	Pô 	Pð 	Pð 	Pð 	Pr7   c                 ó^  — t          |t          j        ¦  «        rdS t          |t          j        ¦  «        rdS | j        D ]}t          ||¦  «        r dS Œ| j        D ]}t          ||¦  «        r dS Œ| j        D ]}t          ||¦  «        r dS Œ| j        D ]}t          ||¦  «        r dS ŒdS )zá
        This function returns a string description of the type family
        that the object in question belongs to.  Possible return values
        are: "exact", "complex", "approximate", "sequence", and "unknown"
        ÚndarrayÚenumÚsequenceÚexactÚcomplexÚapproximateÚunknown)	r}   rw   r¹   rº   ÚEnumÚ_sequence_typesetsÚ_exact_typesetsÚ_complex_typesÚ_approx_typesets)r{   Únumeric_objectÚtps      r8   Ú_detect_familyzTestCase._detect_family«  s  € õ �n¥b¤jÑ1Ô1ð 	Ø�9å�n¥d¤iÑ0Ô0ð 	Ø�6àÔ)ð 	"ð 	"ˆBÝ˜.¨"Ñ-Ô-ð "Ø!�z�zð"ð Ô&ð 	ð 	ˆBÝ˜.¨"Ñ-Ô-ð Ø�w�wðð Ô%ð 	!ð 	!ˆBÝ˜.¨"Ñ-Ô-ð !Ø �y�yð!ð Ô'ð 	%ð 	%ˆBÝ˜.¨"Ñ-Ô-ð %Ø$�}�}ð%ð ˆyr7   c                 óž   — t           j        dk    r<t           j        dk    r,|t          j        d¦  «        k    rt          j        d¦  «        S |S )z7
        Fix the given *dtype* for comparison.
        Úwin32r"   Úint32Úint64)rU   rV   Úmaxsizerw   Údtype)r{   rÍ   s     r8   Ú
_fix_dtypezTestCase._fix_dtypeÉ  sG   € õ ŒL˜GÒ#Ð#­¬°eÒ(;Ð(;Ø•R”X˜gÑ&Ô&Ò&Ð&Ý”8˜GÑ$Ô$Ð$àˆLr7   c                 ó|   ‡— ‰j         dk    rdg‰j        z  S ˆfd„t          ‰j        ‰j        ¦  «        D ¦   «         S )zˆ
        Return the strides of the given array, fixed for comparison.
        Strides for 0- or 1-sized dimensions are ignored.
        r   c                 ó6   •— g | ]\  }}|d k    ¯|‰j         z  ‘ŒS )r1   )Úitemsize)r‘   ÚstrideÚshapeÚarrs      €r8   r“   z)TestCase._fix_strides.<locals>.<listcomp>Ý  s5   ø€ ð "ð "ð "Ù'˜ Ø˜q’y�yð ˜Sœ\Ñ)à �y�yr7   )ÚsizeÚndimr˜   ÚstridesrÓ   )r{   rÔ   s    `r8   Ú_fix_strideszTestCase._fix_stridesÕ  sW   ø€ ð
 Œ8�qŠ=ˆ=Ø�3˜œ‘>Ð!ð"ð "ð "ð "Ý+.¨s¬{¸C¼IÑ+FÔ+Fð"ñ "ô "ð "r7   c                 ó  — |                       |j        |j        d¦  «         |                       |j        |j        d¦  «         |                       |                      |¦  «        |                      |¦  «        d¦  «         dS )zG
        Test that two arrays have the same shape and strides.
        zshapes differzitemsizes differzstrides differN)r±   rÓ   rÑ   rØ   )r{   ÚfirstÚseconds      r8   ÚassertStridesEqualzTestCase.assertStridesEqualá  s‚   € ð 	×Ò˜œ f¤l°OÑDÔDÐDØ×Ò˜œ¨¬Ð:LÑMÔMÐMØ×Ò˜×*Ò*¨5Ñ1Ô1°4×3DÒ3DÀVÑ3LÔ3LØ)ñ	+ô 	+ð 	+ð 	+ð 	+r7   r¼   r1   NFc           	      óÊ   — 	 |                       |||||||¦  «         dS # t          $ r}t          |¦  «        }	Y d}~nd}~ww xY w|                      d|›d|›d|	›�¦  «         dS )ag  
        Versatile equality testing function with more built-in checks than
        standard assertEqual().

        For arrays, test that layout, dtype, shape are identical, and
        recursively call assertPreciseEqual() on the contents.

        For other sequences, recursively call assertPreciseEqual() on
        the contents.

        For scalars, test that two scalars or have similar types and are
        equal up to a computed precision.
        If the scalars are instances of exact types or if *prec* is
        'exact', they are compared exactly.
        If the scalars are instances of inexact types (float, complex)
        and *prec* is not 'exact', then the number of significant bits
        is computed according to the value of *prec*: 53 bits if *prec*
        is 'double', 24 bits if *prec* is single.  This number of bits
        can be lowered by raising the *ulps* value.
        ignore_sign_on_zero can be set to True if zeros are to be considered
        equal regardless of their sign bit.
        abs_tol if this is set to a float value its value is used in the
        following. If, however, this is set to the string "eps" then machine
        precision of the type(first) is used in the following instead. This
        kwarg is used to check if the absolute difference in value between first
        and second is less than the value set, if so the numbers being compared
        are considered equal. (This is to handle small numbers typically of
        magnitude less than machine precision).

        Any value of *prec* other than 'exact', 'single' or 'double'
        will raise an error.
        Nzwhen comparing z and ú: )Ú_assertPreciseEqualÚAssertionErrorr~   r™   )
r{   rÚ   rÛ   ÚprecÚulpsÚmsgÚignore_sign_on_zeroÚabs_tolÚexcÚfailure_msgs
             r8   ÚassertPreciseEqualzTestCase.assertPreciseEqualê  s™   € ðH	Ø×$Ò$ U¨F°D¸$ÀØ# Wñ.ô .ð .ð ˆFøõ ð 	#ð 	#ð 	#Ý˜c™(œ(ˆKˆKˆKˆKˆKˆKøøøøð	#øøøð 	�	Š	ˆ	°E°E°E¸6¸6¸6À;À;ÐOÑPÔPÐPÐPÐPs   ‚ Ÿ
A©=½Ac           
      ó¸
  ‡ ‡‡— d"ˆˆˆ fd„	}‰                       |¦  «        }	‰                       |¦  «        }
d|	›d|
›d�}‰r|d‰›�z  }‰                      |	|
|¬¦  «         |	}|dk    �ro‰                      |j        ¦  «        }‰                      |‰                      |j        ¦  «        ¦  «         ‰                      |j        |j        d	¦  «         ‰                      |j        |j        d
¦  «         ‰                      |j        j        |j        j        d¦  «         ‰                      ‰                      |¦  «        ‰                      |¦  «        d¦  «         |j        |k    r| 	                    |¦  «        }|j        |k    r| 	                    |¦  «        }t          |j        |j        ¦  «        D ] \  }}‰                      ||||‰‰|¦  «         Œ!dS |dk    re‰                      t          |¦  «        t          |¦  «        ‰¬¦  «         t          ||¦  «        D ] \  }}‰                      ||||‰‰|¦  «         Œ!dS |dk    rd}n‡|dv rd}n€|dk    rG‰                      |j        |j        ¦  «         ‰                      |j        |j        ||‰‰|¦  «         dS |dk    r#‰                      |j        |j        ¦  «         d}n
J d¦   «         ‚t#          |d¦  «        r0t#          |d¦  «        r ‰                      |j        |j        ¦  «         t%          |‰ j        ¦  «        t%          |‰ j        ¦  «        k    r2d|j        ›d|j        ›d�}‰r|d‰›�z  }‰                      |¦  «         	 t+          j        |¦  «        rt+          j        |¦  «        rdS n# t.          $ r Y nw xY w|�o|dk    r't1          j        t5          |¦  «        ¦  «        j        }n*t%          |t8          ¦  «        r|}nt;          d|z  ¦  «        ‚t=          ||z
  ¦  «        |k     rdS |p|dk    }|sX|dk    rR|dk    rd}n|dk    rd}nt;          d|›�¦  «        ‚d ||z
  d!z
  z  }|t=          |¦  «        t=          |¦  «        z   z  }nd}t%          |‰ j        ¦  «        r0 ||j         |j         |¦  «          ||j!        |j!        |¦  «         dS t%          |t0          j"        t0          j#        f¦  «        r_t1          j$        |¦  «        r<‰                      t1          j$        |¦  «        t1          j$        |¦  «        ¦  «         dS  ||||¦  «         dS  ||||¦  «         dS )#z-Recursive workhorse for assertPreciseEqual().Nc                 óÄ  •— |�7| |cxk    rdk    s*n t          j        | ¦  «        st          j        |¦  «        rŒ‰                     | |‰¬¦  «         ‰sp	 t          j        d| ¦  «        t          j        d|¦  «        k    r0‰                     ‰                     ‰| ›d|›�¦  «        ¦  «         d S d S # t          $ r Y d S w xY wd S ‰                     | ||‰¬¦  «         d S )Ng        ©rã   r1   ú != )Údeltarã   )ÚmathÚisinfr±   Úcopysignr™   Ú_formatMessager†   ÚassertAlmostEqual)rÚ   rÛ   rí   rä   rã   r{   s      €€€r8   Ú_assertNumberEqualz8TestCase._assertPreciseEqual.<locals>._assertNumberEqual  s>  ø€ Ø� ¨&Ð!7Ð!7Ò!7Ð!7°CÒ!7Ð!7Ð!7Ð!7Ý”:˜eÑ$Ô$ð "8Ý(,¬
°6Ñ(:Ô(:ð "8à× Ò  ¨°CÐ Ñ8Ô8Ð8à*ð ðÝœ=¨¨EÑ2Ô2µd´mÀAÀvÑ6NÔ6NÒNÐNØ ŸIšIØ $× 3Ò 3°Cà5:°U°U¸F¸Fð5Dñ!Eô !EñFô Fð Fð Fð Fð OÐNøõ
 %ð ð ð Ø˜˜ðøøøðð ð ×&Ò& u¨f¸EÀsÐ&ÑKÔKÐKÐKÐKs   ÁAB4 Â4
CÃCzType Family mismatch. (rì   ú)rÞ   rë   r¹   zdifferent number of dimensionszdifferent shapeszdifferent mutabilityzdifferent stridesr»   r¼   T)r½   r¾   Frº   r¿   r   zunexpected familyrÍ   zMismatching return types (z vs. Úepsz)abs_tol is not "eps" or a float, found %sÚsingleé   Údoubleé5   zunsupported precision r/   r1   ©N)%rÇ   r±   rÎ   rÍ   rÖ   rÓ   ÚflagsÚ	writeablerØ   Úastyper˜   Úflatrß   r¥   ÚassertIsÚ	__class__ÚvalueÚhasattrr}   Ú_bool_typesr™   ÚcmathÚisnanr†   rw   ÚfinfoÚtyperõ   ÚfloatÚ
ValueErrorÚabsrÃ   ÚrealÚimagÚtimedelta64Ú
datetime64Úisnat)r{   rÚ   rÛ   rá   râ   rã   rä   rå   ró   Úfirst_familyÚsecond_familyÚassertion_messageÚcompare_familyrÍ   ÚaÚbÚexact_comparisonÚrtolÚbitsÚkrí   s   `    ``              r8   rß   zTestCase._assertPreciseEqual  ss  øøø€ ð
	Lð 	Lð 	Lð 	Lð 	Lð 	Lð 	Lð 	Lð" ×*Ò*¨5Ñ1Ô1ˆØ×+Ò+¨FÑ3Ô3ˆˆàBNÀ,À,ØˆMˆMðÐàð 	1ØÐ¨3¨3 Ñ0ÐØ×Ò˜ }Ð:KÐÑLÔLÐLð &ˆð ˜YÒ&Ñ&Ø—O’O E¤KÑ0Ô0ˆEØ×Ò˜U D§O¢O°F´LÑ$AÔ$AÑBÔBÐBØ×Ò˜UœZ¨¬Ø=ñ?ô ?ð ?à×Ò˜Uœ[¨&¬,Ø/ñ1ô 1ð 1à×Ò˜Uœ[Ô2°F´LÔ4JØ3ñ5ô 5ð 5ð ×Ò˜T×.Ò.¨uÑ5Ô5Ø×!Ò! &Ñ)Ô)Ð+>ñ@ô @ð @àŒ{˜eÒ#Ð#ØŸš UÑ+Ô+�ØŒ|˜uÒ$Ð$ØŸš uÑ-Ô-�Ý˜EœJ¨¬Ñ4Ô4ð Gð G‘��1Ø×(Ò(¨¨A¨t°T¸3Ø)<¸gñGô Gð Gð GàˆFà˜zÒ)Ð)Ø×Ò�S ™ZœZ­¨V©¬¸#ÐÑ>Ô>Ð>Ý˜E 6Ñ*Ô*ð Gð G‘��1Ø×(Ò(¨¨A¨t°T¸3Ø)<¸gñGô Gð Gð GàˆFà˜wÒ&Ð&Ø#ÐÐàÐ9Ð9Ð9Ø$ÐÐà˜vÒ%Ð%Ø�MŠM˜%œ/¨6Ô+;Ñ<Ô<Ð<Ø×$Ò$ U¤[°&´,Ø%)¨4°Ø%8¸'ñCô Cð Cð ˆFà˜yÒ(Ð(ð �MŠM˜%œ/¨6Ô+;Ñ<Ô<Ð<Ø#ÐÐð *Ð)Ñ)Ô)�1õ �5˜'Ñ"Ô"ð 	8¥w¨v°wÑ'?Ô'?ð 	8Ø×Ò˜Uœ[¨&¬,Ñ7Ô7Ð7õ �u˜dÔ.Ñ/Ô/Ý�v˜tÔ/Ñ0Ô0ò1ð 1ð 1ð %*¤O O O°VÔ5EÐ5EÐ5Eð"GÐàð 5Ø!Ð!¨s¨s _Ñ4Ð!Ø�IŠIÐ'Ñ(Ô(Ð(ð	ÝŒ{˜5Ñ!Ô!ð ¥e¤k°&Ñ&9Ô&9ð à�øøÝð 	ð 	ð 	àˆDð	øøøð
 ÐØ˜%ÒÐÝ”x¥ U¡¤Ñ,Ô,Ô0��Ý˜G¥UÑ+Ô+ð Ø��å Ð!NØñ"ñ ô ð å�5˜6‘>Ñ"Ô" TÒ)Ð)Ø�à+Ð>¨t°wªÐàð 
	 D¨G¢O OØ�xÒÐØ��Ø˜Ò!Ð!Ø��å �j¸t¸tÐ!EÑFÔFÐFØ�d˜T‘k A‘oÑ&ˆAØ�˜U™œ¥c¨&¡k¤kÑ1Ñ2ˆEˆEàˆEÝ�e˜TÔ0Ñ1Ô1ð 
	5ØÐ˜uœz¨6¬;¸Ñ>Ô>Ð>ØÐ˜uœz¨6¬;¸Ñ>Ô>Ð>Ð>Ð>Ý˜¥¤µ´Ð>Ñ?Ô?ð 	5åŒx˜‰Œð 9Ø× Ò ¥¤¨%¡¤µ"´(¸6Ñ2BÔ2BÑCÔCÐCÐCÐCà"Ð" 5¨&°%Ñ8Ô8Ð8Ð8Ð8àÐ˜u f¨eÑ4Ô4Ð4Ð4Ð4s   Í3(N Î
N+Î*N+é<   rg   c                 ó`  — | j         }t          | ¦  «        j        }	|||f}
d                     d„ |
D ¦   «         ¦  «        }g }|�F|                     ¦   «         D ]1\  }}|                     |› ¦  «         |                     |› ¦  «         Œ2t          j        g|¢d‘d‘|‘}t          j	         
                    ¦   «         }||d<   	 t          j	        d         |d<   n# t          $ r Y nw xY wt          j        |€i n|¦  «        }|                     |¦  «         t          j        |t          j        t          j        ||d	¬
¦  «        }d|j        › d|j        › �}|                      |j        d|¦  «         d}||j        v r|                      |¦  «         n|                      d|j        ¦  «         |S )aÉ  
        Runs named unit test(s) as specified in the arguments as:
        test_module.test_class.test_name. test_module must always be supplied
        and if no further refinement is made with test_class and test_name then
        all tests in the module will be run. The tests will be run in a
        subprocess with environment variables specified in `envvars`.
        If given, envvars must be a map of form:
            environment variable name (str) -> value (str)
        If given, flags must be a map of form:
            flag including the `-` (str) -> value (str)
        It is most convenient to use this method in conjunction with
        @needs_subprocess as the decorator will cause the decorated test to be
        skipped unless the `SUBPROC_TEST` environment variable is set to
        the same value of ``_subproc_test_env``
        (this special environment variable is set by this method such that the
        specified test(s) will not be skipped in the subprocess).


        Following execution in the subprocess this method will check the test(s)
        executed without error. The timeout kwarg can be used to allow more time
        for longer running tests, it defaults to 60 seconds.
        ú.c              3   ó   K  — | ]}|®|V — Œ	d S rú   r6   r�   s     r8   ú	<genexpr>z2TestCase.subprocess_test_runner.<locals>.<genexpr>Æ  s"   è è € Ð'JÐ'J¨a¸A¸M¨¸M¸M¸M¸MÐ'JÐ'Jr7   Nz-mznumba.runtestsrf   ÚCOVERAGE_RCFILEÚCOVERAGE_PROCESS_STARTT)ÚstdoutÚstderrÚtimeoutÚenvÚuniversal_newlinesz
captured stdout: z
captured stderr: r   zNO TESTS RANÚOK)Ú
__module__r  Ú__name__ÚjoinÚitemsÚappendrU   Ú
executableÚosÚenvironÚcopyÚKeyErrorÚpytypesÚMappingProxyTypeÚupdateÚ
subprocessÚrunÚPIPEr!  r"  r±   Ú
returncodeÚskipTestÚassertIn)r{   Útest_moduleÚ
test_classÚ	test_nameÚenvvarsr#  rû   Ú_subproc_test_envÚthemodÚtheclsÚpartsÚfully_qualified_testÚ
flags_argsÚflagr  ÚcmdÚenv_copyÚstatusÚstreamsÚno_tests_rans                       r8   Úsubprocess_test_runnerzTestCase.subprocess_test_runnerª  sñ  € ð2 ”ˆÝ�d‘”Ô$ˆØ˜j¨)Ð4ˆØ"ŸxšxÐ'JÐ'J°5Ð'JÑ'JÔ'JÑJÔJÐØˆ
ØÐØ$Ÿ{š{™}œ}ð .ð .‘��eØ×!Ò! T )Ñ,Ô,Ð,Ø×!Ò! U *Ñ-Ô-Ð-Ð-ÝŒ~ð % 
ð %¨Dð %Ð2Bð %Ø#ð%ˆå”:—?’?Ñ$Ô$ˆØ#4ˆ�Ñ ð	Ý13´Ð<MÔ1NˆHÐ-Ñ.Ð.øÝð 	ð 	ð 	ØˆDð	øøøåÔ*°°¨2¨2ÀgÑNÔNˆØ�Š˜Ñ Ô Ð Ý” ­J¬OÝ'1¤ÀØ$,ÀðGñ Gô Gˆð7¨¬ð 7ð 7Ø'-¤}ð7ð 7ˆà×Ò˜Ô*¨A¨wÑ7Ô7Ð7à%ˆØ˜6œ=Ð(Ð(Ø�MŠM˜,Ñ'Ô'Ð'Ð'à�MŠM˜$ ¤Ñ.Ô.Ð.Øˆs   ÃC Ã
C&Ã%C&c                 ó`   ‡‡— ˆˆfd„}t          | t          j        ¦  «        r || ¦  «        S |S )z¢Runs the decorated test in a subprocess via invoking numba's test
        runner. kwargs timeout and envvars are passed through to
        subprocess_test_runner.c                 ó   •‡ — ˆˆ ˆfd„}|S )Nc                 óà   •— t           j                             dd ¦  «        ‰j        k    r8| j        j        }|                      | j        |‰j        ‰‰‰j        ¬¦  «         d S  ‰| ¦  «         d S )Nrf   )r:  r;  r<  r#  r=  r>  )r-  r.  Úgetr(  r   rJ  r'  )r{   ÚargsÚkwargsÚ
class_namer=  Úfuncr#  s       €€€r8   Úinnerz?TestCase.run_test_in_subprocess.<locals>.wrapper.<locals>.inneré  s~   ø€ Ý”:—>’> .°$Ñ7Ô7¸4¼=ÒHÐHð "&¤Ô!8�JØ×/Ò/Ø$(¤OØ#-Ø"&¤-Ø 'Ø 'Ø*.¬-ð 0ñ ô ð ð ð ð �D˜‘J”J�J�J�Jr7   r6   )rR  rS  r=  r#  s   ` €€r8   Úwrapperz0TestCase.run_test_in_subprocess.<locals>.wrapperè  s.   øø€ ðð ð ð ð ð ð ð" ˆLr7   )r}   r1  ÚFunctionType)Ú	maybefuncr#  r=  rT  s    `` r8   Úrun_test_in_subprocesszTestCase.run_test_in_subprocessä  sN   øø€ ð	ð 	ð 	ð 	ð 	ð 	õ( �i¥Ô!5Ñ6Ô6ð 	Ø�7˜9Ñ%Ô%Ð%àˆNr7   c                 óv  ‡— |                       ¦   «         }t          d                     |¦  «        t          j        fi ¦  «        } |d¦  «        Š t          |¦  «        t          ¦  «          G d„ dt          ¦  «        }t          j	        |¦  «        ˆfd„¦   «         }t          |¦  «        d„ ¦   «         }||fS )z€Use to generate a dummy type unique to this test. Returns a python
        Dummy class and a corresponding Numba type DummyType.zDummyTypeFor{}Úmy_dummyc                   ó   — e Zd ZdS )ú'TestCase.make_dummy_type.<locals>.DummyN)r(  r'  Ú__qualname__r6   r7   r8   ÚDummyr[    s   € € € € € ØˆDr7   r]  c                 ó   •— ‰S rú   r6   )ÚvalÚcÚ
dummy_types     €r8   Útypeof_dummyz.TestCase.make_dummy_type.<locals>.typeof_dummy  s	   ø€ àÐr7   c                 óN   — t          |j                             ¦   «         ¦  «        S rú   )r   ÚcontextÚget_dummy_value)ÚtyprŸ   r`  s      r8   Úunbox_dummyz-TestCase.make_dummy_type.<locals>.unbox_dummy  s   € å˜qœy×8Ò8Ñ:Ô:Ñ;Ô;Ð;r7   )Úidr  Úformatr   ÚOpaquer   r   Úobjectr   Úregisterr   )r{   Útest_idÚ	DummyTyper]  rb  rg  ra  s         @r8   Úmake_dummy_typezTestCase.make_dummy_type  sé   ø€ ð
 —'’'‘)”)ˆÝÐ)×0Ò0°Ñ9Ô9½E¼L¸?ÈBÑOÔOˆ	à�Y˜zÑ*Ô*ˆ
Ø!��yÑ!Ô!¥+Ñ.Ô.Ð.ð	ð 	ð 	ð 	ð 	•Fñ 	ô 	ð 	õ 
Ô	˜eÑ	$Ô	$ð	ð 	ð 	ð 	ñ 
%Ô	$ð	õ 
ˆyÑ	Ô	ð	<ð 	<ñ 
Ô	ð	<ð �iÐÐr7   c                 óT   — ddl m}  |¦   «         s|                      d¦  «         dS dS )a  
        Call this to ensure the test is skipped if no suitable external compiler
        is found. This is a method on the TestCase opposed to a stand-alone
        decorator so as to make it "lazy" via runtime evaluation opposed to
        running at test-discovery time.
        r   )Úexternal_compiler_worksz(No suitable external compiler was found.N)Únumba.pycc.platformrq  r8  )r{   rq  s     r8   Úskip_if_no_external_compilerz%TestCase.skip_if_no_external_compiler  sN   € ð 	@Ð?Ð?Ð?Ð?Ð?Ø&Ð&Ñ(Ô(ð 	FØ�MŠMÐDÑEÔEÐEÐEÐEð	Fð 	Fr7   )r¼   r1   NFN)NNNr  Nrg   )Nr  N),r(  r'  r\  ÚlongMessager   rx   r‚   Ú
contextlibr   r‹   r    rª   r·   Úboolrw   Úbool_r  rY   r~   ÚintegerÚbytesÚbytes_rÂ   r  r½   ÚinexactrÄ   ÚtupleÚlistrÁ   ÚfloatingÚ_float_typesÚcomplexfloatingrÃ   rÇ   rÎ   rØ   rÜ   rè   rß   rJ  rW  ro  rs  r6   r7   r8   rt   rt   N  sý  € € € € € à€Kð ð)ð )ñ „_ð)ðð ð ð Ôðð ñ Ôðð Ôð-ð -ñ Ôð-ð*Ið Ið Ið ÔðPð Pñ ÔðPð$ ˜œÐ"€KØ" S F¨S¨F°R´Z°MØ˜rœyÐ)ð+€Oà˜ 7 *¨r¬zÐ;ÐØ  $˜-˜ÐØ˜2œ;Ð'€LØ˜rÔ1Ð2€Nðð ð ð<
ð 
ð 
ð
"ð 
"ð 
"ð+ð +ð +ð DEØ9>Ø#'ð.Qð .Qð .Qð .Qð` EFØ:?Ø$(ðN5ð N5ð N5ð N5ð` >BØEGØ=@ð8ð 8ð 8ð 8ðtð ð ð ð: ð  ð  ð0Fð Fð Fð Fð Fr7   rt   c                   ó   — e Zd ZdZdZdS )ÚSerialMixinz-Mixin to mark test for serial execution.
    FN)r(  r'  r\  Ú__doc__Ú_numba_parallel_test_r6   r7   r8   r‚  r‚  '  s    € € € € € ðð à!ÐÐÐr7   r‚  c              #   óÌ   K  — t          t          | ¦  «        }t          t          | |¦  «         	 dV — t          t          | |¦  «         dS # t          t          | |¦  «         w xY w)z«
    Return a context manager that temporarily sets Numba config variable
    *name* to *value*.  *name* must be the name of an existing variable
    in numba.config.
    N)Úgetattrr   Úsetattr)Únamer  Ú	old_values      r8   Úoverride_configrŠ  /  sg   è è € õ � Ñ%Ô%€IÝ�F�D˜%Ñ Ô Ð ð)Øˆˆˆå•˜˜iÑ(Ô(Ð(Ð(Ð(ø�•˜˜iÑ(Ô(Ð(Ð(øøøs   ¯A ÁA#c              #   óh  K  — t           j                             | ¦  «        }|t           j        | <   t          j        ¦   «          	 dV — |€t           j        | = n|t           j        | <   t          j        ¦   «          dS # |€t           j        | = n|t           j        | <   t          j        ¦   «          w xY w)zk
    Return a context manager that temporarily sets an Numba config environment
    *name* to *value*.
    N)r-  r.  rN  r   Úreload_config)rˆ  r  r�   s      r8   Úoverride_env_configr�  >  s±   è è € õ Œ*�.Š.˜Ñ
Ô
€CØ…B„JˆtÑÝ
ÔÑÔÐð
Øˆˆˆàˆ;å”
˜4Ð Ð ð  #�BŒJ�tÑåÔÑÔÐÐÐøð ˆ;å”
˜4Ð Ð ð  #�BŒJ�tÑåÔÑÔÐÐøøøs   ÁA= Á=4B1c                 ó~   — t          |                     ¦   «         dd¦  «        }i }t          |||¦  «         ||          S )zj
    Given a *code* string, compile it with globals *globs* and return
    the function named *name*.
    z<string>rö   )ÚcompileÚrstripÚeval)rˆ  ÚcodeÚglobsÚcoÚnss        r8   Úcompile_functionr–  U  s=   € õ
 
�—’‘” 
¨HÑ	5Ô	5€BØ	€BÝˆˆU�BÑÔÐØˆdŒ8€Or7   znumba-testsÚntr  i€Q c                  ó\   — 	 t          j        t          ¦  «         d S # t          $ r Y d S w xY wrú   )r-  ÚmkdirÚ_trashcan_dirÚFileExistsErrorr6   r7   r8   Ú_create_trashcan_dirrœ  o  s?   € ðÝ
Œ•ÑÔÐÐÐøÝð ð ð Øˆˆðøøøs   ‚ �
+ª+c                  ór  — t          j         ¦   «         t          z
  } t          t          j        t
          ¦  «        ¦  «        D ]t}t          j                             t
          |¦  «        }	 t          j        |¦  «        }|j	        | k     rt          j        |d¬¦  «         Œ^# t          $ r
}Y d }~Œmd }~ww xY wd S )NT)Úignore_errors)ÚtimeÚ_trashcan_timeoutÚsortedr-  Úlistdirrš  Úpathr)  ÚstatÚst_mtimeÚshutilÚrmtreer[   )Úfreshness_thresholdrA   ÚstÚes       r8   Ú_purge_trashcan_dirr«  u  s¶   € Ýœ)™+œ+Õ(9Ñ9ÐÝ•R”Z¥Ñ.Ô.Ñ/Ô/ð 	ð 	ˆÝŒW�\Š\�-¨Ñ,Ô,ˆð	Ý”˜‘”ˆBØŒ{Ð0Ò0Ð0Ý”˜b°Ð5Ñ5Ô5Ð5øøÝð 	ð 	ð 	ð ˆDˆDˆDˆDøøøøð	øøøð	ð 	s   Á*5B Â 
B4Â/B4c                 ó^   — t          ¦   «          t          j        | dz   t          ¬¦  «        }|S )Nú-)ÚprefixÚdir)r«  ÚtempfileÚmkdtemprš  )r®  r£  s     r8   Ú_create_trashcan_subdirr²  ‚  s,   € ÝÑÔÐÝÔ 6¨C¡<µ]ÐCÑCÔC€DØ€Kr7   c                 ó<   — t          ¦   «          t          | ¦  «        S )až  
    Create a temporary directory with the given *prefix* that will survive
    at least as long as this process invocation.  The temporary directory
    will be eventually deleted when it becomes stale enough.

    This is necessary because a DLL file can't be deleted while in use
    under Windows.

    An interesting side-effect is to be able to inspect the test files
    shortly after a test suite run.
    )rœ  r²  )r®  s    r8   Útemp_directoryr´  ‡  s   € õ ÑÔÐÝ" 6Ñ*Ô*Ð*r7   c                 ój   — ddl } |j        ¦   «          t          | ¦  «         t          j        |          S )z†
    Import and return a module of the given name.  Care is taken to
    avoid issues due to Python's internal directory caching.
    r   N)Ú	importlibÚinvalidate_cachesÚ
__import__rU   r   )Úmodnamer¶  s     r8   Úimport_dynamicrº  —  s<   € ð
 ÐÐÐØ€IÔÑ!Ô!Ð!ÝˆwÑÔÐÝŒ;�wÔÐr7   c              #   ó  K  — t          t          | ¦  «        }t          t          | t          j        ¦   «         ¦  «         	 t          t          | ¦  «        V — t          t          | |¦  «         dS # t          t          | |¦  «         w xY w)z‰Return a context manager used by captured_stdout/stdin/stderr
    that temporarily replaces the sys stream *stream_name* with a StringIO.N)r†  rU   r‡  ÚioÚStringIO)Ústream_nameÚorig_stdouts     r8   Úcaptured_outputrÀ  ¤  sz   è è € õ �#˜{Ñ+Ô+€KÝ�C��bœk™mœmÑ,Ô,Ð,ð/Ý•c˜;Ñ'Ô'Ð'Ð'Ð'å•�[ +Ñ.Ô.Ð.Ð.Ð.ø�•�[ +Ñ.Ô.Ð.Ð.øøøs   Á A/ Á/Bc                  ó    — t          d¦  «        S )zŸCapture the output of sys.stdout:

       with captured_stdout() as stdout:
           print("hello")
       self.assertEqual(stdout.getvalue(), "hello
")
    r!  ©rÀ  r6   r7   r8   Úcaptured_stdoutrÃ  ¯  ó   € õ ˜8Ñ$Ô$Ð$r7   c                  ó    — t          d¦  «        S )z°Capture the output of sys.stderr:

       with captured_stderr() as stderr:
           print("hello", file=sys.stderr)
       self.assertEqual(stderr.getvalue(), "hello
")
    r"  rÂ  r6   r7   r8   Úcaptured_stderrrÆ  ¸  rÄ  r7   c               #   ó°   K  — t          ¦   «         5 } t          dd¦  «        5  | V — d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )NÚDEBUG_CACHET)rÃ  rŠ  )Úouts    r8   Úcapture_cache_logrÊ  Â  sá   è è € å	Ñ	Ô	ð ˜cÝ˜]¨DÑ1Ô1ð 	ð 	ØˆIˆIˆIð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s,   ‘A¢3§A³7	·Aº7	»AÁAÁAc                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚEnableNRTStatsMixinz,Mixin to enable the NRT statistics counters.c                 ó,   — t          j        ¦   «          d S rú   )Ú_nrtÚmemsys_enable_statsrz   s    r8   ÚsetUpzEnableNRTStatsMixin.setUpÌ  s   € ÝÔ Ñ"Ô"Ð"Ð"Ð"r7   c                 ó,   — t          j        ¦   «          d S rú   )rÎ  Úmemsys_disable_statsrz   s    r8   ÚtearDownzEnableNRTStatsMixin.tearDownÏ  s   € ÝÔ!Ñ#Ô#Ð#Ð#Ð#r7   N)r(  r'  r\  rƒ  rÐ  rÓ  r6   r7   r8   rÌ  rÌ  É  s8   € € € € € Ø6Ð6ð#ð #ð #ð$ð $ð $ð $ð $r7   rÌ  c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )Ú
MemoryLeakTc                 ó\   — t          j        ¦   «          t          j        ¦   «         | _        d S rú   )r–   r—   r   r¬   Ú_MemoryLeak__init_statsrz   s    r8   Úmemory_leak_setupzMemoryLeak.memory_leak_setup×  s$   € å
Œ
‰ŒˆÝ!Ô6Ñ8Ô8ˆÔÐÐr7   c                 ó@   — | j         r|                      ¦   «          d S d S rú   )Ú_MemoryLeak__enable_leak_checkÚassert_no_memory_leakrz   s    r8   Úmemory_leak_teardownzMemoryLeak.memory_leak_teardownÜ  s/   € ØÔ#ð 	)Ø×&Ò&Ñ(Ô(Ð(Ð(Ð(ð	)ð 	)r7   c                 ó
  — | j         }t          j        ¦   «         }|j        |j        z
  }|j        |j        z
  }|j        |j        z
  }|j        |j        z
  }|                      ||¦  «         |                      ||¦  «         d S rú   )r×  r   r¬   r­   r®   r¯   r°   r±   r²   s          r8   rÛ  z MemoryLeak.assert_no_memory_leakà  s‚   € ØÔˆÝÔ(Ñ*Ô*ˆØ”i #¤)Ñ+ˆØ”X ¤Ñ(ˆ
Øœ¨¬Ñ4ˆØœ c¤kÑ1ˆØ×Ò˜ jÑ1Ô1Ð1Ø×Ò˜¨Ñ7Ô7Ð7Ð7Ð7r7   c                 ó   — d| _         d S )NF)rÚ  rz   s    r8   Údisable_leak_checkzMemoryLeak.disable_leak_checkê  s   € à#(ˆÔ Ð Ð r7   N)r(  r'  r\  rÚ  rØ  rÜ  rÛ  rß  r6   r7   r8   rÕ  rÕ  Ó  sV   € € € € € àÐð9ð 9ð 9ð
)ð )ð )ð8ð 8ð 8ð)ð )ð )ð )ð )r7   rÕ  c                   ó(   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ xZS )ÚMemoryLeakMixinc                 ó~   •— t          t          | ¦  «                             ¦   «          |                      ¦   «          d S rú   )Úsuperrá  rÐ  rØ  ©r{   r   s    €r8   rÐ  zMemoryLeakMixin.setUpñ  s7   ø€ Ý�o˜tÑ$Ô$×*Ò*Ñ,Ô,Ð,Ø×ÒÑ Ô Ð Ð Ð r7   c                 ó¤   •— t          j        ¦   «          |                      ¦   «          t          t          | ¦  «                             ¦   «          d S rú   )r–   r—   rÜ  rã  rá  rÓ  rä  s    €r8   rÓ  zMemoryLeakMixin.tearDownõ  sB   ø€ Ý
Œ
‰ŒˆØ×!Ò!Ñ#Ô#Ð#Ý�o˜tÑ$Ô$×-Ò-Ñ/Ô/Ð/Ð/Ð/r7   )r(  r'  r\  rÐ  rÓ  Ú__classcell__)r   s   @r8   rá  rá  ï  sQ   ø€ € € € € ð!ð !ð !ð !ð !ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r7   rá  c               #   óü  K  — ddl m}  dg}i }d„ }	 |D ]‚}|                     d¦  «        }| }|dd…         D ]}t          ||¦  «        }Œ|d         }t          ||¦  «        }t	          |¦  «        sJ d|z  ¦   «         ‚||||f<   t          |||¦  «         ŒƒdV — |                     ¦   «         D ]\  \  }}}t          |||¦  «         ŒdS # |                     ¦   «         D ]\  \  }}}t          |||¦  «         Œw xY w)	z¥
    Forbid LLVM code generation during the execution of the context
    manager's enclosed block.

    If code generation is invoked, a RuntimeError is raised.
    r   )Úcodegenz%CPUCodeLibrary._finalize_final_modulec                  ó    — t          d¦  «        ‚)Nzcodegen forbidden by test case)ÚRuntimeError)rO  rP  s     r8   r™   zforbid_codegen.<locals>.fail  s   € ÝÐ;Ñ<Ô<Ð<r7   r  Néÿÿÿÿz%r should be callable)Ú
numba.corerè  rZ   r†  Úcallabler‡  r*  )	rè  Úpatchpointsr�   r™   rˆ  rA  rŸ   Úattrnamer  s	            r8   Úforbid_codegenrð  û  se  è è € ð #Ð"Ð"Ð"Ð"Ð"Ø:Ð;€Kà
€Cð=ð =ð =ð*àð 		)ð 		)ˆDØ—J’J˜s‘O”OˆEØˆCØ! # 2 #œJð -ð -�Ý˜c 8Ñ,Ô,��Ø˜R”yˆHÝ˜C Ñ*Ô*ˆEÝ˜E‘?”?ÐDÐDÐ%<¸tÑ%CÑDÔD�?Ø!&ˆC��X�ÑÝ�C˜ 4Ñ(Ô(Ð(Ð(Øˆˆˆà&)§i¢i¡k¤kð 	*ð 	*Ñ"‰OˆS�(˜UÝ�C˜ 5Ñ)Ô)Ð)Ð)ð	*ð 	*ø c§i¢i¡k¤kð 	*ð 	*Ñ"‰OˆS�(˜UÝ�C˜ 5Ñ)Ô)Ð)Ð)ð	*øøøs   ’B	C Ã0C;c              #   ól  K  — ddl m} t          j        |j        ¦  «        }|                     ¦   «          t          j        | ¦  «        }t          j        ¦   «         \  }}	 t          j	        || ¦  «         t          j        |d¦  «        V — |                     ¦   «          t          j        |¦  «         t          j	        || ¦  «         t          j        |¦  «         dS # |                     ¦   «          t          j        |¦  «         t          j	        || ¦  «         t          j        |¦  «         w xY w)zt
    Temporarily redirect *fd* to a pipe's write end and return a file object
    wrapping the pipe's read end.
    r   )Ú
_helperlibÚrN)Únumbarò  ÚctypesÚCDLLÚ__file__Ú_numba_flush_stdoutr-  ÚdupÚpipeÚdup2r¼  rX   Úclose)Úfdrò  ÚlibnumbaÚsaveró  Úws         r8   Úredirect_fdr    s  è è € ð !Ð Ð Ð Ð Ð ÝŒ{˜:Ô.Ñ/Ô/€Hà× Ò Ñ"Ô"Ð"ÝŒ6�"‰:Œ:€DÝŒ7‰9Œ9�D€A€qðÝ
Œ��2‰ŒˆÝŒg�a˜‰oŒoÐÐÐà×$Ò$Ñ&Ô&Ð&Ý
Œ�‰ŒˆÝ
Œ��bÑÔÐÝ
Œ�‰Œˆˆˆøð 	×$Ò$Ñ&Ô&Ð&Ý
Œ�‰ŒˆÝ
Œ��bÑÔÐÝ
Œ�‰Œˆˆøøøs   Á!,C  Ã AD3c                  ó\   — t           j                             ¦   «         } t          | ¦  «        S )zRedirect C stdout
    )rU   Ú
__stdout__Úfilenor  ©rý  s    r8   Úredirect_c_stdoutr  5  ó#   € õ 
Œ×	Ò	Ñ	 Ô	 €BÝ�r‰?Œ?Ðr7   c                  ó\   — t           j                             ¦   «         } t          | ¦  «        S )zRedirect C stderr
    )rU   Ú
__stderr__r  r  r  s    r8   Úredirect_c_stderrr
  <  r  r7   c                 óD   — t          |¦  «        }t          | ||¬¦  «        S )aK  Spawn a new process to run `func` with a temporary cache directory.

    The childprocess's stdout and stderr will be captured and redirected to
    the current process's stdout and stderr.

    Returns
    -------
    ret : dict
        exitcode: 0 for success. 1 for exception-raised.
        stdout: str
        stderr: str
    )Úverbose)r´  Úrun_in_new_process_in_cache_dir)rR  Úcache_dir_prefixr  Ú	cache_dirs       r8   Úrun_in_new_process_cachingr  C  s'   € õ Ð/Ñ0Ô0€IÝ*¨4°ÀGÐLÑLÔLÐLr7   c                 ó4  — t          j        d¦  «        }|                     ¦   «         }t          d|¦  «        5  |                     t
          | |g¬¦  «        }|                     ¦   «          |                     ¦   «          |                     ¦   «         }|                     ¦   «         }|rT| 	                    ¦   «         r@t          ¦   «          t          d                     dd¦  «        ¦  «         t          |¦  «         |rx| 	                    ¦   «         rdt          t          j        ¬¦  «         t          d                     dd¦  «        t          j        ¬¦  «         t          |t          j        ¬¦  «         d	d	d	¦  «         n# 1 swxY w Y   |j        ||d
œS )aÛ  Spawn a new process to run `func` with a temporary cache directory.

    The childprocess's stdout and stderr will be captured and redirected to
    the current process's stdout and stderr.

    Similar to ``run_in_new_process_caching()`` but the ``cache_dir`` is a
    directory path instead of a name prefix for the directory path.

    Returns
    -------
    ret : dict
        exitcode: 0 for success. 1 for exception-raised.
        stdout: str
        stderr: str
    ÚspawnÚNUMBA_CACHE_DIR)ÚtargetrO  ÚSTDOUTéP   r­  )ÚfileÚSTDERRN)Úexitcoder!  r"  )ÚmpÚget_contextÚQueuer�  ÚProcessÚ_remote_runnerÚstartr)  Ú
get_nowaitÚstripÚprintÚcenterrU   r"  r  )rR  r  r  ÚctxÚqoutÚprocr!  r"  s           r8   r  r  T  sœ  € õ  Œ.˜Ñ
!Ô
!€CØ�9Š9‰;Œ;€DÝ	Ð.°	Ñ	:Ô	:ð +ð +Ø�{Š{¥.¸¸d°|ˆ{ÑDÔDˆØ�
Š
‰ŒˆØ�	Š	‰ŒˆØ—’Ñ"Ô"ˆØ—’Ñ"Ô"ˆØð 	�v—|’|‘~”~ð 	Ý‰GŒGˆGÝ�(—/’/ " cÑ*Ô*Ñ+Ô+Ð+Ý�&‰MŒMˆMØð 	+�v—|’|‘~”~ð 	+Ý•s”zÐ"Ñ"Ô"Ð"Ý�(—/’/ " cÑ*Ô*µ´Ð<Ñ<Ô<Ð<Ý�&�sœzÐ*Ñ*Ô*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð ”MØØðð ð s   ¹D?FÆFÆFc                 óÈ  — t          ¦   «         5 }t          ¦   «         5 }	  | ¦   «          d}n%# t          $ r t          j        ¦   «          d}Y nw xY wddd¦  «         n# 1 swxY w Y   |                     |                     ¦   «         ¦  «         ddd¦  «         n# 1 swxY w Y   |                     |                     ¦   «         ¦  «         t          j        |¦  «         dS )z+Used by `run_in_new_process_caching()`
    r   r1   N)	rÆ  rÃ  Ú	ExceptionÚ	tracebackÚ	print_excÚputÚgetvaluerU   Úexit)rA   r%  r"  r!  r  s        r8   r  r  {  s`  € õ 
Ñ	Ô	ð 	$˜fÝÑÔð 	 &ðØ�‘”�ð
 ��øõ	 ð ð ð ÝÔ#Ñ%Ô%Ð%Ø���ðøøøð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	�Š�—’Ñ"Ô"Ñ#Ô#Ð#ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð 	‡H‚HˆV�_Š_ÑÔÑÔÐÝ„HˆXÑÔÐÐÐsT   �BžA 
-ªA­AÁAÁAÁAÁBÁA"	Á"BÁ%A"	Á&*BÂB Â#B c                   ó2   — e Zd Zej        efd„¦   «         ZdS )ÚCheckWarningsMixinc              #   ó^  K  — t          j        d¬¦  «        5 }t          j        d¦  «         d V — d d d ¦  «         n# 1 swxY w Y   d}|D ]=}|D ]8}|t          |j        ¦  «        v r |                      |j        |¦  «         |dz  }Œ9Œ>|                      |t          |¦  «        ¦  «         d S )NT)ÚrecordÚalwaysr   r1   )ro   Úcatch_warningsÚsimplefilterr~   rm   r±   rn   r¥   )r{   Úmessagesrn   ÚcatchÚfoundr   Úms          r8   Úcheck_warningsz!CheckWarningsMixin.check_warningsŒ  s	  è è € åÔ$¨DÐ1Ñ1Ô1ð 	°UÝÔ! (Ñ+Ô+Ð+ØˆEˆEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ˆØð 	ð 	ˆAØð ð �Ø�˜AœI™œÐ&Ð&Ø×$Ò$ Q¤Z°Ñ:Ô:Ð:Ø˜Q‘J�Eøðð 	×Ò˜¥ H¡¤Ñ.Ô.Ð.Ð.Ð.s   ˜=½AÁAN)r(  r'  r\  ru  r   ÚRuntimeWarningr9  r6   r7   r8   r/  r/  ‹  s9   € € € € € ØÔØ0>ð 
/ð 
/ð 
/ñ Ôð
/ð 
/ð 
/r7   r/  c                  ó  — | sdS g }|                       ¦   «         D ]X\  }}t          |t          ¦  «        rd                     |¦  «        }|                     d                     ||¦  «        ¦  «         ŒYd                     |¦  «        S )NÚ z"{}"z{}={}z, )r*  r}   r~   ri  r+  r)  )Újit_optionsrÉ  Úkeyr  s       r8   Ú_format_jit_optionsr?  š  s‰   € Øð ØˆrØ
€CØ!×'Ò'Ñ)Ô)ð /ð /‰
ˆˆUÝ�e�SÑ!Ô!ð 	)Ø—M’M %Ñ(Ô(ˆEØ�
Š
�7—>’> # uÑ-Ô-Ñ.Ô.Ð.Ð.Ø�9Š9�S‰>Œ>Ðr7   c              +   ó‚  K  — 	 t          d¦  «        }d                     t          t          j        ¦   «         ¦  «                             dd¦  «        ¦  «        }t          j                             ||dz   ¦  «        }t          d
i |¤Ž}t          |d¦  «        5 }|                      |¬¦  «        }|                     |¦  «         ddd¦  «         n# 1 swxY w Y   t          j                             d	|¦  «         t          j        |¦  «        }|V — t          j                             |d¦  «         t          j                             |¦  «         t'          j        |¦  «         dS # t          j                             |d¦  «         t          j                             |¦  «         t'          j        |¦  «         w xY w)a  A context manager that creates and imports a temporary module
    from sources provided in ``source_lines``.

    Optionally it is possible to provide jit options for ``jit_module`` if it
    is explicitly used in ``source_lines`` like ``jit_module({jit_options})``.
    Útest_temp_moduleztest_temp_module_{}r­  Ú_z.pyr   )r=  Nr   r6   )r´  ri  r~   ÚuuidÚuuid4Úreplacer-  r£  r)  r?  rX   ÚwriterU   Úinsertr¶  Úimport_moduler   ÚpopÚremover¦  r§  )Úsource_linesr=  ÚtempdirÚtemp_module_nameÚtemp_module_pathr\   Úlinesr:  s           r8   Úcreate_temp_modulerP  ¥  sÁ  è è € ðÝ Ð!3Ñ4Ô4ˆà0×7Ò7Ý•”
‘”ÑÔ×%Ò% c¨3Ñ/Ô/ñ1ô 1Ðåœ7Ÿ<š<¨Ð1AÀEÑ1IÑJÔJÐå)Ð8Ð8¨KÐ8Ð8ˆÝÐ" CÑ(Ô(ð 	¨AØ ×'Ò'°KÐ'Ñ@Ô@ˆEØ�GŠG�E‰NŒNˆNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ 	Œ�Š˜˜7Ñ#Ô#Ð#ÝÔ-Ð.>Ñ?Ô?ˆØÐÐÐåŒ�ŠÐ(¨$Ñ/Ô/Ð/ÝŒ�Š˜Ñ Ô Ð ÝŒ�gÑÔÐÐÐøõ 	Œ�ŠÐ(¨$Ñ/Ô/Ð/ÝŒ�Š˜Ñ Ô Ð ÝŒ�gÑÔÐÐøøøs1   „BE) Â,CÃE) ÃCÃE) ÃCÃ;E) Å)AF>é   c                 ó6  — |€g }t           j        g|z   d| gz   }t          j        |t          j        t          j        |¬¦  «        }|                     |¬¦  «        \  }}|j        dk    r-d}t          ||j        |                     ¦   «         fz  ¦  «        ‚||fS )zöRun a snippet of Python code in a subprocess with flags, if any are
    given. 'env' is passed to subprocess.Popen(). 'timeout' is passed to
    popen.communicate().

    Returns the stdout and stderr of the subprocess after its termination.
    Nú-c)r!  r"  r$  )r#  r   z/process failed with code %s: stderr follows
%s
)	rU   r,  r4  ÚPopenr6  Úcommunicater7  rà   Údecode)	r’  rû   r$  r#  rE  ÚpopenrÉ  Úerrrã   s	            r8   Úrun_in_subprocessrY  Ã  s£   € ð €}ØˆÝŒ>Ð
˜eÑ
# t¨T lÑ
2€CÝÔ˜S­¬Ý$.¤O¸ð>ñ >ô >€Eà× Ò ¨Ð Ñ1Ô1�H€CˆØÔ˜1ÒÐØAˆÝ˜S EÔ$4°c·j²j±l´lÐ#CÑCÑDÔDÐDØ�ˆ8€Or7   r$   c           	      ó  ‡— t          j        d¦  «        5 }t          j        ¦   «         }t	          j        d¦  «        }|€t          d¦  «        ‚|ddt          |¦  «        dd                     |¦  «        d	|j	        g}t          j        |t          j        ¬
¦  «        Š‰j        }t          j        |‰j        ¦  «        }|                     ¦   «          dˆfd„	}		 t          j        ‰j        ¬¦  «        }
|
                     ¦   «           | ¦   «          |                     ¦   «          ‰                     ¦   «         € t          j        |t,          j        ¦  «         nd} |	|¦  «         ‰                     ¦   «           |	¦   «          |                     ¦   «         }|
                     ¦   «          |                     ¦   «          n-# |
                     ¦   «          |                     ¦   «          w xY w	 ddd¦  «         n# 1 swxY w Y   |S )a)  Runs strace whilst executing the function work() in the current process,
    captures the listed syscalls (list of strings). Takes an optional timeout in
    seconds, default is 10, if this is exceeded the process will be sent a
    SIGKILL. Returns a list of lines that are output by strace.
    zw+tÚstraceNz'No valid 'strace' binary could be foundz-qz-pz-eú,z-o)r!  r<  c                 óP   •— ‰j         }|dk    rd|› d| › �}t          |¦  «        ‚d S )Nr   z0strace exited non-zero, process return code was:z. )r7  rê  )ÚproblemÚretrã   rW  s      €r8   Úcheck_returnzstrace.<locals>.check_returnð  sJ   ø€ ØÔ"ˆCØ�aŠxˆxð+Øð+ð +Ø!(ð+ð +�å" 3Ñ'Ô'Ð'ð ˆxr7   )r  z)If this is SIGKILL, increase the timeout?)r<  )r°  ÚNamedTemporaryFiler-  Úgetpidr¦  Úwhichr	  r~   r)  rˆ  r4  rT  r6  ÚpidÚ	threadingÚTimerÚkillr  ÚThreadrU  ÚflushÚpollÚsignalÚSIGINTÚwaitÚ	readlinesÚcancel)ÚworkÚsyscallsr#  ÚntfÚ
parent_pidÚstrace_binaryrE  Ú
strace_pidÚthread_timeoutr`  Úthread_commsr^  Ústrace_datarW  s                @r8   r[  r[  Ö  s:  ø€ õ 
Ô	$ UÑ	+Ô	+ð 4$¨så”Y‘[”[ˆ
Ýœ XÑ.Ô.ˆØÐ ÝÐFÑGÔGÐGØØØ•S˜‘_”_Ø�S—X’X˜hÑ'Ô'Ø�S”Xð	ˆõ Ô  ­Z¬_Ð>Ñ>Ô>ˆØ”Yˆ
Ý"œ¨°%´*Ñ=Ô=ˆØ×ÒÑÔÐð	(ð 	(ð 	(ð 	(ð 	(ð 	(ð	$õ %Ô+°5Ô3DÐEÑEÔEˆLØ×ÒÑ Ô Ð ð ˆD‰FŒFˆFà�IŠI‰KŒKˆKà�zŠz‰|Œ|Ð#Ý”˜
¥F¤MÑ2Ô2Ð2Ð2ð D�Ø�˜WÑ%Ô%Ð%ð �JŠJ‰LŒLˆLØˆL‰NŒNˆNàŸ-š-™/œ/ˆKð ×ÒÑÔÐà×!Ò!Ñ#Ô#Ð#Ð#øð ×ÒÑÔÐà×!Ò!Ñ#Ô#Ð#Ð#øøøÐ#ði4$ð 4$ð 4$ñ 4$ô 4$ð 4$ð 4$ð 4$ð 4$ð 4$ð 4$øøøð 4$ð 4$ð 4$ð 4$ðl Ðs+   –CG<ÃB?GÆ)G<Ç*G,Ç,G<Ç<H ÈH c                  óÄ   — t           j                             d¦  «        sdS d„ } d}	 t          | |g¦  «        }n# t          $ r Y dS w xY w|d                     |¦  «        v S )z)Checks if strace is supported and workingr,   Fc                  óH   — t          j        t          j        ddg¦  «         d S )NrS  zexit())r4  r5  rU   r,  r6   r7   r8   Úforce_clonez%strace_supported.<locals>.force_clone  s!   € ÝŒ�œ¨¨hÐ7Ñ8Ô8Ð8Ð8Ð8r7   Úcloner<  )rU   rV   rW   r[  r(  r)  )r{  ÚsyscallÚtraces      r8   Ústrace_supportedr    s†   € õ
 Œ<×"Ò" 7Ñ+Ô+ð Øˆuð9ð 9ð 9ð €GðÝ�{ W JÑ/Ô/ˆˆøÝð ð ð Øˆuˆuðøøøà�b—g’g˜e‘n”nÐ$Ð$s   ¨: º
AÁAc                   ó   — e Zd ZdZd„ ZdS )ÚIRPreservingTestPipelinez‡ Same as the standard pipeline, but preserves the func_ir into the
    metadata store after legalisation, useful for testing IR changesc                 ó²   — t          j        | j        d¦  «        }d|_        |                     t
          t          ¦  «         |                     ¦   «          |gS )NÚir_preserving_custom_pipeF)r   Údefine_nopython_pipelineÚstateÚ
_finalizedÚadd_pass_afterr   r   Úfinalize)r{   Úpipelines     r8   Údefine_pipelinesz)IRPreservingTestPipeline.define_pipelines.  sV   € Ý%Ô>ØŒJÐ3ñ5ô 5ˆð $ˆÔØ×Ò¥
­NÑ;Ô;Ð;à×ÒÑÔÐØˆzÐr7   N)r(  r'  r\  rƒ  rŠ  r6   r7   r8   r�  r�  *  s/   € € € € € ðHð Hðð ð ð ð r7   r�  c            
      ó®  — ddl } ddl m} t          j                             t          j                             t          ¦  «        ¦  «        }t          j                             |ddd¦  «        }t          j                             |¦  «        st          d¦  «        ‚t          t          j                             |¦  «        d¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   |                      ||¬¦  «        }|d         }t          d	„ ¦  «        }|dd
…         D ]I}	|	d         d         }
|
                     ¦   «         D ]$}||d                  |d         xx         dz  cc<   Œ%ŒJg d¢}t          j        j        |g|¢R Ž }t          j                             |¦  «        st          d¦  «        ‚t          t          j                             |¦  «        d¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   |                      ||¬¦  «        }|d         d         d         d         }
|
                     ¦   «         D ]$}||d                  |d         xx         dz  cc<   Œ%t          d¦  «         t          d¦  «         t!          |                     ¦   «         ¦  «        D ]8\  }}|                     ¦   «         D ]\  }}t          d|› d|d›d|› �¦  «         ŒŒ9t          d„ ¦  «        }t!          |                     ¦   «         ¦  «        D ]*\  }}|                     ¦   «         D ]\  }}|||         |<   ŒŒ+t          d¦  «         t          d¦  «         d„ }t!          |                     ¦   «         |¬¦  «        D ]8\  }}|                     ¦   «         D ]\  }}t          d|d›d|› d|› �¦  «         ŒŒ9dS )a-  This is a utility function that prints out the map of NumPy to Python
    versions and how many of that combination are being tested across all the
    declared config for azure-pipelines. It is useful to run when updating the
    azure-pipelines config to be able to quickly see what the coverage is.r   N)ÚLoaderú..zazure-pipelines.ymlz&'azure-pipelines.yml' is not availableÚrtÚjobsc                  ó*   — t          t          ¦  «        S rú   ©r   rY   r6   r7   r8   r9   z$print_azure_matrix.<locals>.<lambda>M  s   € ¥KµÑ$4Ô$4€ r7   r/   Ú
parametersÚmatrixÚNUMPYÚPYTHONr1   )r�  r�  ÚbuildscriptsÚazurezazure-windows.ymlz$'azure-windows.yml' is not availableÚstrategyzNumPy | Python | Countz-----------------------ú z |  z<4z  |   c                  ó*   — t          t          ¦  «        S rú   r‘  r6   r7   r8   r9   z$print_azure_matrix.<locals>.<lambda>i  s   € ¥+­cÑ"2Ô"2€ r7   z
Python | NumPy | Countc                 ó^   — t          | d                              d¦  «        d         ¦  «        S )Nr   r  r1   )rY   rZ   )r’   s    r8   r9   z$print_azure_matrix.<locals>.<lambda>o  s!   € •s˜1˜Qœ4Ÿ:š: c™?œ?¨1Ô-Ñ.Ô.€ r7   )r>  )ÚyamlrŒ  r-  r£  ÚdirnameÚabspathr÷  r)  Úisfilerê  rX   ÚreadÚloadr   Úvaluesr"  r¡  r*  )rœ  rŒ  Ú	base_pathÚ
azure_piper\   ÚdataÚpipe_ymlÚ	templatesÚ	py2np_mapÚtmpltr“  ÚsetupÚwinpathÚazure_windowsÚwindows_ymlÚnpverÚpysÚpyverÚcountÚrev_mapÚsorterÚnpss                         r8   Úprint_azure_matrixrµ  <  sv  € ð
 €K€K€KØÐÐÐÐÐÝ”—’¥¤§¢µÑ 9Ô 9Ñ:Ô:€IÝ”—’˜i¨¨tÐ5JÑKÔK€JÝŒ7�>Š>˜*Ñ%Ô%ð EÝÐCÑDÔDÐDÝ	�bŒg�oŠo˜jÑ)Ô)¨4Ñ	0Ô	0ð °AØ�vŠv‰xŒxˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à�yŠy˜ fˆyÑ-Ô-€Hà˜Ô €IåÐ4Ð4Ñ5Ô5€IØ˜2˜A˜2”ð :ð :ˆØ�|Ô$ XÔ.ˆØ—]’]‘_”_ð 	:ð 	:ˆEØ�e˜G”nÔ% e¨H¤oÐ6Ð6Ô6¸Ñ9Ð6Ð6Ñ6Ð6ð	:ð IÐHÐH€GÝ”G”L Ð5¨WÐ5Ð5Ð5€MÝŒ7�>Š>˜-Ñ(Ô(ð CÝÐAÑBÔBÐBÝ	�bŒg�oŠo˜mÑ,Ô,¨dÑ	3Ô	3ð °qØ�vŠv‰xŒxˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à—)’)˜D¨�)Ñ0Ô0€Kð ˜Ô  Ô# JÔ/°Ô9€FØ—’‘”ð 6ð 6ˆØ�%˜”.Ô! %¨¤/Ð2Ð2Ô2°AÑ5Ð2Ð2Ñ2Ð2å	Ð
"Ñ#Ô#Ð#Ý	Ð
#Ñ$Ô$Ð$Ý˜YŸ_š_Ñ.Ô.Ñ/Ô/ð :ð :‰
ˆˆsØŸIšI™KœKð 	:ð 	:‰LˆE�5ÝÐ8�eÐ8Ð8 Ð8Ð8Ð8°Ð8Ð8Ñ9Ô9Ð9Ð9ð	:õ Ð2Ð2Ñ3Ô3€GÝ˜YŸ_š_Ñ.Ô.Ñ/Ô/ð *ð *‰
ˆˆsØŸIšI™KœKð 	*ð 	*‰LˆE�5Ø$)ˆG�EŒN˜5Ñ!Ð!ð	*å	Ð
$Ñ%Ô%Ð%Ý	Ð
#Ñ$Ô$Ð$Ø.Ð.€FÝ˜WŸ]š]™_œ_°&Ð9Ñ9Ô9ð :ð :‰
ˆˆsØŸIšI™KœKð 	:ð 	:‰LˆE�5ÝÐ8�eÐ8Ð8Ð8 EÐ8Ð8°Ð8Ð8Ñ9Ô9Ð9Ð9ð	:ð:ð :s$   Ã	C*Ã*C.Ã1C.Ç.HÈHÈH)T)NNrQ  )r$   )Ærƒ  r  ru  Úcollectionsr   rº   r–   rî   rV   r-  rk  r¦  r4  rU   r°  re  rŸ  r¼  rõ  Úmultiprocessingr  ro   r)  r   rC  r¶  r   r1  Ú	functoolsr   Únumpyrw   rô  r   rì  r   r	   r
   r   r   Únumba.core.typingr   Únumba.core.compilerr   r   r   r   r   Únumba.core.typed_passesr   Únumba.core.untyped_passesr   r>   Únumba.core.runtimer   Únumba.npr   r   rÎ  Únumba.core.extendingr   r   r   r   r   r   Únumba.core.datamodel.modelsr   ÚscipyrT   ÚcoverageÚprocess_startupÚenable_pyobj_flagsÚenable_pyobjectÚforce_pyobj_flagsÚforce_pyobjectÚno_pyobj_flagsÚ	nrt_flagsÚnrtÚmake_tag_decoratorÚtagr!   rÌ   Ú_32bitÚis_parfors_unsupportedÚskipIfÚskip_parfors_unsupportedÚ
skipUnlessr=   Úskip_unless_py10_or_laterÚskip_unless_py10Úskip_unless_py312rW   Úskip_if_py313plus_on_windowsÚskip_unless_py314_or_laterÚmachineÚskip_if_linux_aarch64Úskip_if_32bitrN   Ú
IS_NUMPY_2Úskip_if_numpy_2Únumpy_sincos_low_precisionrv  rY   r.  rN  ÚREDUCED_TESTINGÚskip_if_reduced_testingr†  Ú_free_threadingÚskip_if_freethreadingrB   rE   rG   rI   rL   rO   r^   Ú_msgÚskip_unless_scipyÚ	SUPPORTEDÚskip_unless_cffiÚ_lnx_reasonÚ
linux_onlyÚ_win_reasonÚwindows_onlyÚ_non_win_reasonÚskip_if_windowsÚ
_is_armv7lÚdisabled_testÚskip_ppc64le_issue4563Úhas_typeguardÚskip_unless_typeguardÚskip_if_typeguardÚskip_ppc64le_issue6465Úskip_ppc64le_invalid_ctr_loopÚunameÚ_unameÚsystemÚIS_MACOSÚskip_macos_fenv_errorsÚIS_MACOS_ARM64ÚIS_WIN_ARM64Úskip_win_arm64_unittuple_uimm12Úscipy.linalg.cython_lapackÚ
has_lapackÚneeds_lapackÚscipy.linalg.cython_blasÚhas_blasÚ
needs_blasÚ
_exec_condÚneeds_subprocessÚ
setuptoolsÚhas_setuptoolsr[   Úneeds_setuptoolsrr   rt   rk  r‚  rŠ  r�  r–  rš  rˆ  r£  r)  Ú
gettempdirÚgetuidr   rœ  r«  r²  r´  rº  rÀ  rÃ  rÆ  rÊ  rÌ  rÕ  rá  rð  r  r  r
  r(  r  r  r  r/  r?  rP  rY  r[  r  r�  rµ  r6   r7   r8   ú<module>r	     s  ððð ð €€€Ø Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø (Ð (Ð (Ð (Ð (Ð (ð5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 3Ð 2Ð 2Ð 2Ð 2Ð 2Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø "Ð "Ð "Ð "Ð "Ð "Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3ðØ€L€L€L€LøØð ð ð Ø€E€E€EðøøøðØ€O€O€Oð €HÔÑÔÐÐøð ð 	ð 	ð 	Ø€Dð	øøøð
 �U‘W”WÐ Ø%)Ð Ô "à�E‘G”GÐ Ø#'Ð Ô  à�‘”€àˆE‰GŒG€	Ø€	„ð !€gÔ Ð!MÐ!MÐ!MÑNÔN€ð ˆc�-Ñ Ô €à	Œ˜Ò	€ØÐ Ø*˜8œ?ØØñô Ð ð
 0˜HÔ/Ø	„O�wÒØ ñô Ð ð
 '�8Ô&Ø	„O�wÒØñô Ð ð
 (�HÔ'Ø	„O�wÒØñô Ð ð
  /˜xœØ
„_˜ÒÐB C¤L×$;Ò$;¸EÑ$BÔ$BØ/ñ ô  Ð ð
 1˜XÔ0Ø	„O�wÒØñô Ð ð
 (˜œØ„L×Ò˜GÑ$Ô$ÐHÐ)9¨Ô)9Ñ);Ô);¸yÒ)HØ$ñô Ð ð
  �” Ð(AÑBÔB€àÔ(¨FÒ2€
Ø!�(”/ *Ø"?ñAô A€ð „L×Ò˜GÑ$Ô$ð *Ð)9¨Ô)9Ñ);Ô);¸xÒ)Gð *ØÔ 'Ò)ð ð
 �$�s�s˜2œ:Ÿ>š>Ð*BÀAÑFÔFÑGÔGÑHÔH€ðð
 *˜(œ/¨/Ø*GñIô IÐ ð D�g�g˜cÐ#4°l°lÑCÔCÑEÔEÐE€ð (˜œ¨ð*FñHô HÐ ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð, €Ø#�H”O E¨T M°4Ñ8Ô8Ð à&�8Ô& zÔ';¸_ÑMÔMÐ à€ØˆXŒ_ ¤×!8Ò!8¸Ñ!AÔ!AÐAÀ;ÑOÔO€
à!€ØˆxŒ 3¤<×#:Ò#:¸5Ñ#AÔ#AÐAÀ;ÑOÔO€à$€Ø!�(”/ #¤,×"9Ò"9¸%Ñ"@Ô"@À/ÑRÔR€àˆXÔÑÔ 8Ò+€
à�”  oÑ6Ô6€ð )˜œÐ)9¨Ô)9Ñ);Ô);¸yÒ)Hð+KñMô MÐ ð
 ��R”Z—^’^Ð$9¸1Ñ=Ô=Ñ>Ô>€à+˜Ô+ØÐ-ñô Ð ð $�H”OØÐ3ñô Ð ð
 )˜œÐ)9¨Ô)9Ñ);Ô);¸yÒ)Hð+=ñ?ô ?Ð ð !0 ¤Ø€HÔÑÔ˜)Ò#Øñ!ô !Ð ð 
ˆŒÑ	Ô	€ØŒ=˜HÒ$€Ø(˜œ¨Ø3ñ5ô 5Ð àÐ7˜fœn°Ò7€ØŒ} 	Ò)ÐG¨f¬nÀÒ.G€ð #2 (¤/Øðñ#ô #Ð ðØ%Ð%Ð%Ð%Ø€J€JøØð ð ð Ø€J€J€Jðøøøð #ˆxÔ" :Ø#<ñ>ô >€ðØ#Ð#Ð#Ð#Ø€H€HøØð ð ð Ø€H€H€Hðøøøð !ˆXÔ  Ð+BÑCÔC€
ð ŒZ�^Š^˜N¨DÑ1Ô1°SÒ8€
Ø&�8Ô& zÐ3MÑNÔNÐ ðØÐÐÐØ€N€NøØ�WÐð ð ð à€N€N€Nðøøøð '�8Ô& ~Ð7NÑOÔOÐ ð
Dð 
Dð 
DðVFð VFð VFð VFð VFˆxÔ ñ VFô VFð VFðr"ð "ð "ð "ð "�&ñ "ô "ð "ð Ôð)ð )ñ Ôð)ð Ôðð ñ Ôðð,ð ð ð €à„7ˆd‚?€?à”G—L’LÐ!4 Ô!4Ñ!6Ô!6¸ÑFÔF€M€Mð ”G—L’LÐ!4 Ô!4Ñ!6Ô!6Ø,9¨M¨M¸9¸2¼9¹;¼;¸;Ð!GñIô I€Mð
 Ð ðð ð ðð ð ðð ð ð
+ð +ð +ð  ð  ð  ð Ôð/ð /ñ Ôð/ð%ð %ð %ð%ð %ð %ð Ôðð ñ Ôðð$ð $ð $ð $ð $˜&ñ $ô $ð $ð)ð )ð )ð )ð )�ñ )ô )ð )ð8	0ð 	0ð 	0ð 	0ð 	0Ð)¨:ñ 	0ô 	0ð 	0ð Ôð*ð *ñ Ôð*ðD Ôðð ñ Ôðð,ð ð ðð ð ð 7?Èð Mð Mð Mð Mð"$ð $ð $ð $ðNð ð ð /ð /ð /ð /ð /˜ñ /ô /ð /ðð ð ð Ôðð ñ Ôðð:ð ð ð ð&>ð >ð >ð >ðB%ð %ð %ð&ð ð ð ð ˜|ñ ô ð ð$6:ð 6:ð 6:ð 6:ð 6:sZ   ÃC ÃC#Ã"C#Ã'C; Ã;DÄDÔT ÔT&Ô%T&Ô;U ÕUÕUÖV Ö	V$Ö#V$