
    |h9                     D   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SK	7  S SK
rS SKJr  S SKJr  S SKJrJrJrJrJrJrJrJr  S SKrSr\R6                  " \R8                  R;                  S5      (       + \5      r\R>                  RA                  \R>                  RC                  \"5      5      r#S r$\ " S	 S
\5      5       r% " S S\5      r&\\\ " S S\&5      5       5       5       r'\\\ " S S\5      5       5       5       r(\)S:X  a  \RT                  " 5         gg)    N)skip)*)utils)TestCasetagimport_dynamictemp_directoryhas_blasneeds_setuptoolsskip_if_py313_on_windowsskip_if_linux_aarch64zwindows onlywinc                  P    S[         R                  ;   a  [         R                  S	 gg)zNUnset MACOSX_DEPLOYMENT_TARGET because we are not building portable
libraries
MACOSX_DEPLOYMENT_TARGETN)osenviron     O/home/james-whalen/.local/lib/python3.13/site-packages/numba/tests/test_pycc.pyunset_macosx_deployment_targetr      s"     "RZZ/JJ12 0r   c                   $    \ rS rSr\S 5       rSrg)TestCompilerChecks'   c                     SSK Jn  [        R                  R	                  SS 5      S LnU(       a9  [        R                  R	                  SS 5      b  U R                  U" 5       5        g g g )Nr   )external_compiler_worksCONDA_BUILDVSINSTALLDIR)numba.pycc.platformr   r   r   get
assertTrue)selfr   is_running_conda_builds      r   test_windows_compiler_validity1TestCompilerChecks.test_windows_compiler_validity+   sU     	@!#t!DD!P!zz~~nd3? 7 9: @ "r   r   N)__name__
__module____qualname____firstlineno___windows_onlyr#   __static_attributes__r   r   r   r   r   '   s     ; ;r   r   c                   D    \ rS rSrS rS r\R                  S 5       rSr	g)BasePYCCTest:   c                 b    [        5         [        S5      U l        U R                  [        l        g )N	test_pycc)r   r	   tmpdirtempfiletempdirr!   s    r   setUpBasePYCCTest.setUp<   s"    &($[1  ;;r   c                 4    S [         l        SSKJn  U" 5         g )Nr   )clear_export_registry)r1   r2   numba.pycc.decoratorsr7   )r!   r7   s     r   tearDownBasePYCCTest.tearDownD   s     	@r   c              #   p  #    [         R                  R                  U5         [        U5      nUv   [         R                  R	                  U5        [         R
                  R                  US 5        g ! [         R                  R	                  U5        [         R
                  R                  US 5        f = f7fN)syspathappendr   removemodulespop)r!   extdirnamelibs       r   check_c_extBasePYCCTest.check_c_extO   sp     	( &CIHHOOF#KKOOD$' HHOOF#KKOOD$'s    B6A2 A B62AB33B6)r0   N)
r%   r&   r'   r(   r4   r9   
contextlibcontextmanagerrF   r*   r   r   r   r,   r,   :   s&    '	  ( (r   r,   c                      ^  \ rS rSrU 4S jr\R                  S 5       rS rS r	S r
S rS rS	 rS
 rS rS rS rS rSrU =r$ )TestCCZ   c                    > [         [        U ]  5         U R                  5         SSKJn  Xl        [        R                  " U R                  5        g )Nr   )compile_with_pycc)	superrK   r4   skip_if_no_external_compilernumba.testsrN   _test_module	importlibreload)r!   rN   	__class__s     r   r4   TestCC.setUp_   s9    fd!#))+1-**+r   c              #      #    U R                   Ul        UR                  5         U R                  U R                   UR                  5       nUv   S S S 5        g ! , (       d  f       g = f7fr<   )r0   
output_dircompilerF   rD   )r!   ccrE   s      r   check_cc_compiledTestCC.check_cc_compiledf   sE      


dkk2773sI 433s   AA)
A	A)
A&"A)c                     SUR                   [        R                  R                  UR                  5      S.-  nUR                  S5      U-   n[        R                  " [        R                  SU/5        g )Na  if 1:
            import sys
            import types
            # to disable numba package
            sys.modules['numba'] = types.ModuleType('numba')
            try:
                from numba import njit
            except ImportError:
                pass
            else:
                raise RuntimeError('cannot disable numba package')

            sys.path.insert(0, %(path)r)
            import %(name)s as lib
            )rD   r>    -c)
r%   r   r>   dirname__file__strip
subprocess
check_callr=   
executable)r!   rE   codeprologs       r   check_cc_compiled_in_subprocess&TestCC.check_cc_compiled_in_subprocesso   s^     <<77??3<<8::  ||C 4's~~tT:;r   c                    U R                   R                  nU R                  UR                  S5        U R                   R                  R                  nU R                  [        R                  R                  U5      U5        U R                   R                  R                  nU R                  [        R                  R                  U5      U5        U R                  [        R                  R                  U5      R                  S5      U5        [        R                  R                  S5      (       a?  U R                  UR!                  S5      U5        SSKJn  U R'                  U" 5       U5        g g )Npycc_test_simplezpycc_test_simple.linuxz.sor   )find_pyext_ending)rR   rZ   assertEqualrD   rX   r    r   r>   isdiroutput_fileassertFalseexistsbasename
startswithr=   platformendswithr   rm   assertIn)r!   rZ   dfrm   s        r   test_cc_propertiesTestCC.test_cc_properties   s   !!"45   ++a(!,   ,,*A.((+667JKQO<<""7++OOAJJu-q1 >MM+-q1 ,r   c                    U R                  U R                  R                  5       nUR                  SS5      nU R	                  US5        UR                  SS5      nU R	                  US5        UR                  S5      nU R	                  US5        U R                  UR                  5       S 5        U R                  [        5         UR                  SS	5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)
N{   A  ;  i  g    lVA         r   )r[   rR   rZ   multiassertPreciseEqualmultfsquareassertIsget_noneassertRaisesZeroDivisionErrordiv)r!   rE   ress      r   test_compileTestCC.test_compile   s    ##D$5$5$8$89S))C%C##C3))C%C##C7**Q-C##C,MM#,,.$/""#451 6 :9 65 :9s$   B!C<C+C<+
C9	5C<<
D
c                 &   U R                   R                  nXl        U R                  U5       nUR	                  SS5      nU R                  US5        U R                  UR                  R                  S5        S S S 5        g ! , (       d  f       g = f)Nr}   r~   r   rk   )rR   rZ   
target_cpur[   r   r   rn   r&   )r!   cpu_namerZ   rE   r   s        r   check_compile_for_cpuTestCC.check_compile_for_cpu   so    !! ##B'3))C%C##C3SYY113EF (''s   AB
Bc                 L    U R                  [        R                  " 5       5        g r<   )r   llget_host_cpu_namer3   s    r   test_compile_for_cpuTestCC.test_compile_for_cpu   s    ""2#7#7#9:r   c                 &    U R                  S5        g )Nhost)r   r3   s    r   test_compile_for_cpu_host TestCC.test_compile_for_cpu_host   s    ""6*r   c                    U R                  U R                  R                  5       nUR                  SS5      nU R	                  US5        SS[
        R                  " S5      4 H&  nUR                  U5      nU R	                  US5        M(     SS[
        R                  " S5      4 H&  nUR                  U5      nU R	                  US	5        M(     UR                  S
5      nU R	                  US5        U R                  UR                  S5      UR                  S5      5        UR                  S5      n[
        R                  R                  S5      R                  5       nU R	                  X$5        UR                  [
        R                  " S/S-  5      5      nU R	                  US5        SSU0-  nU R!                  X5        S S S 5        g ! , (       d  f       g = f)N         y              y              ?         @       @      ?g      <*   r      aR  if 1:
                from numpy.testing import assert_equal, assert_allclose
                res = lib.power(2, 7)
                assert res == 128
                res = lib.random(42)
                assert_allclose(res, %(expected)s)
                res = lib.spacing(1.0)
                assert_allclose(res, 2**-52)
                expected)r[   rR   cc_helperlibpowerr   np
complex128sqrtfloat64np_sqrtspacingassertNotEqualrandomRandomStaterandom_samplesizerh   r!   rE   r   valr   rf   s         r   test_compile_helperlibTestCC.test_compile_helperlib   s   ##D$5$5$B$BCs))Aq/C##C-GR]]2%67hhsm''R0 8 3

1.kk#&''S1 / ++c"C##C0 

2

2?**R.Cyy,,R0>>@H##C2((2::qcAg./C##C+ "8,-D 00;; DCCs   F G
Gc                 ^   U R                  U R                  R                  5       nU R                  UR	                  S5      S5        UR                  S5      nU R                  [        U5      / SQ5        [        (       a#  UR                  S5      nU R                  US5        [        R                  " / SQ5      nUR                  U5      n[        R                  " U5      nU R                  X$5        S[        [        S	9-  nU R                  X5        S S S 5        g ! , (       d  f       g = f)
Nr   g        r   )r   r   r   r   g      >@)r   g      @r   g      @r   aB  if 1:
                from numpy.testing import assert_equal
                from numpy import float64, argsort
                res = lib.zero_scalar(1)
                assert res == 0.0
                res = lib.zeros(3)
                assert list(res) == [0, 0, 0]
                if %(has_blas)s:
                    res = lib.vector_dot(4)
                    assert res == 30.0
                val = float64([2., 5., 1., 3., 4.])
                res = lib.np_argsort(val)
                expected = argsort(val)
                assert_equal(res, expected)
                )r
   )r[   rR   cc_nrtr   zero_scalarzerosrn   listr
   
vector_dotr   r   
np_argsortargsortdictrh   r   s         r   test_compile_nrtTestCC.test_compile_nrt   s    ##D$5$5$<$<=##COOA$6<))A,CT#Y	2xnnQ'''T2**12C..%Czz#H##C2 H-.D 00;; >==s   C/D
D,c                 V   U R                  U R                  R                  5       nUR                  5       nU R	                  U[        S5      5        UR                  S5      nU R	                  U[        S5      5        SnU R                  X5        S S S 5        g ! , (       d  f       g = f)NAzif 1:
                from numpy.testing import assert_equal
                res = lib.hash_literal_str_A()
                assert_equal(res, hash("A"))
                res = lib.hash_str("A")
                assert_equal(res, hash("A"))
                )r[   rR   r   hash_literal_str_Ar   hashhash_strrh   )r!   rE   r   rf   s       r   test_hashingTestCC.test_hashing   s    ##D$5$5$<$<=((*C##Cc3,,s#C##Cc3D 00; >==s   A+B
B(c                    U R                  U R                  R                  5       n[        R                  " S[        R
                  S9nUR                  U5      nX"-  nU R                  X45        S S S 5        g ! , (       d  f       g = f)Nr   dtype)r[   rR   r   r   arangeintpdict_usecaser   )r!   rE   arrgotexpects        r   test_c_extension_usecaseTestCC.test_c_extension_usecase  sc    ##D$5$5$<$<=))Crww/C""3'CYF##C0	 >==s   A
A99
Bc                    U R                  U R                  R                  5       n[        R                  " S[        R
                  S9n[        R                  " S[        R
                  S9nUR                  X#5        U R                  X#5        [        R                  " S[        R
                  S9nUR                  X#5        U R                  X#5        [        R                  " S[        R
                  S9n[        R                  " S[        R
                  S9nU R                  [        5       nUR                  X#5        SSS5        U R                  SUR                   SUR                   3[        WR                  5      5        [        R                  " S[        R
                  S9n[        R                  " S[        R
                  S9nU R                  [        5       nUR                  X#5        SSS5        U R                  SUR                   SUR                   3[        UR                  5      5        SSS5        g! , (       d  f       GN= f! , (       d  f       Nh= f! , (       d  f       g= f)	zSee https://github.com/numba/numba/issues/9948

Dynamic exception uses a symbol that in PYCC compilation must become
linkonce_odr linkage to prevent symbol collision.
)r   r   r   )r   r   Nzcannot assign slice of shape z from input of shape )r      )r   r   )r[   rR   	cc_dynexcr   r   r   onesdo_setitem1r   do_setitem2r   
ValueErrorrw   shapestr	exception)r!   rE   abraisess        r   test_dynamic_excTestCC.test_dynamic_exc  s    ##D$5$5$?$?@Crzz2Abjj1AOOA!##A)rzz2AOOA!##A) rzz2Abjj1A"":.&% / MM/y 9""#'',F$$%'
 rzz2Abjj1A"":.&% / MM/y 9""#'',F$$%'7 A@ /. /.1 A@s>   D	I(/IB"I(#I5AI(
I	I(
I%	!I((
I6)rR   )r%   r&   r'   r(   r4   rH   rI   r[   rh   rz   r   r   r   r   r   r   r   r   r   r*   __classcell__rU   s   @r   rK   rK   Z   sa    
,  <(2&
G;+<@<@< 1$' $'r   rK   c                   L   ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
S	rU =r$ )
TestDistutilsSupporti2  c                 \  > [         TU ]  5         U R                  5         [        5         [	        S5      U l        [        R                  R                  [        S5      n[        R                  R                  U R
                  S5      U l
        [        R                  " XR                  5        g )Ntest_pycc_distutilspycc_distutils_usecasework)rO   r4   rP   r   r	   r0   r   r>   join	base_pathusecase_dirshutilcopytree)r!   
source_dirrU   s     r   r4   TestDistutilsSupport.setUp7  so    ))+&( %%:;WW\\)-EF
77<<V<
$4$45r   c                   ^ ^ SS K n[        R                  R                  [        R                  R	                  [        R                  R	                  UR
                  5      5      5      n[        [        R                  5      mTR                  SS5      (       a  U[        R                  -   TS   -   TS'   OUTS'   UU 4S jnU" USS/5        SnU" SU/5        g )	Nr   
PYTHONPATH c                 @  > [         R                  " [        R                  /U -   TR                  [         R
                  [         R                  TS9nUR                  5       u  p#UR                  5       nUS:w  a%  TR                  SUR                  SS5      -  5        g g N)cwdstdoutstderrenvr   z+python failed with the following output:
%szutf-8ignorerc   Popenr=   re   r   PIPESTDOUTcommunicatewaitfaildecodeargspout_rcr   r!   s        r   
run_python7TestDistutilsSupport.check_setup_py.<locals>.run_pythonO        #..!1D!8%)%5%5(2(2(9(9%(	*A
 ]]_FCBQw		HJJw9: ; r   	build_ext	--inplacezif 1:
            import pycc_compiled_module as lib
            assert lib.get_const() == 42
            res = lib.ones(3)
            assert list(res) == [1.0, 1.0, 1.0]
            r_   
numbar   r>   abspathr`   ra   r   r   r   pathsepr!   setup_py_filer  
numba_pathr  rf   r   s   `     @r   check_setup_py#TestDistutilsSupport.check_setup_pyD      WW__RWW__%'WW__U^^%D&F G
2::77<$$ *RZZ 7#l:K KC *C
	; 	M;<= 	D$< r   c                   ^ ^ SS K n[        R                  R                  [        R                  R	                  [        R                  R	                  UR
                  5      5      5      n[        [        R                  5      mTR                  SS5      (       a  U[        R                  -   TS   -   TS'   OUTS'   UU 4S jnU" USS/5        SnU" SU/5        g )	Nr   r   r   c                 @  > [         R                  " [        R                  /U -   TR                  [         R
                  [         R                  TS9nUR                  5       u  p#UR                  5       nUS:w  a%  TR                  SUR                  SS5      -  5        g g r   r   r  s        r   r  >TestDistutilsSupport.check_setup_nested_py.<locals>.run_pythono  r  r   r  r  zif 1:
            import nested.pycc_compiled_module as lib
            assert lib.get_const() == 42
            res = lib.ones(3)
            assert list(res) == [1.0, 1.0, 1.0]
            r_   r  r  s   `     @r   check_setup_nested_py*TestDistutilsSupport.check_setup_nested_pyd  r  r   c                 &    U R                  S5        g )Nzsetup_distutils.pyr  r3   s    r   test_setup_py_distutils,TestDistutilsSupport.test_setup_py_distutils  s    01r   c                 &    U R                  S5        g )Nzsetup_distutils_nested.pyr  r3   s    r   test_setup_py_distutils_nested3TestDistutilsSupport.test_setup_py_distutils_nested  s    ""#>?r   c                 &    U R                  S5        g )Nzsetup_setuptools.pyr"  r3   s    r   test_setup_py_setuptools-TestDistutilsSupport.test_setup_py_setuptools  s    12r   c                 &    U R                  S5        g )Nzsetup_setuptools_nested.pyr&  r3   s    r   test_setup_py_setuptools_nested4TestDistutilsSupport.test_setup_py_setuptools_nested  s    ""#?@r   )r0   r   )r%   r&   r'   r(   r4   r  r  r#  r'  r*  r-  r*   r   r   s   @r   r   r   2  s0    
6!@!@2@3A Ar   r   __main__)+rH   rS   r   r   rc   r=   r1   unittestr   ctypesnumpyr   llvmlite.bindingbindingr   
numba.corer   numba.tests.supportr   r   r   r	   r
   r   r   r   _skip_reasonskipIfru   rt   r)   r>   r`   r  ra   r   r   r   r,   rK   r   r%   mainr   r   r   <module>r:     s0     	   
      8 8 8  CLL$;$;E$B B ,. GGOOBGGOOH56	3 ; ; ;$(8 (@ R'\ R'   R'j YA8 YA   YAx zMMO r   