
    xKgc3                     
   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	 d dl
Zd dlmZ d dlmZ d dlmZmZmZmZmZmZ d dlZdZ ej2                  ej4                  j7                  d       e      Zej:                  j=                  ej:                  j?                  e             Z!d Z"e G d	 d
e             Z# G d de      Z$e G d de$             Z%e G d de             Z&e'dk(  r ejP                          yy)    N)skip)*)utils)TestCasetagimport_dynamictemp_directoryhas_blasneeds_setuptoolszwindows onlywinc                  L    dt         j                  v rt         j                  d= yy)zVUnset MACOSX_DEPLOYMENT_TARGET because we are not building portable
    libraries
    MACOSX_DEPLOYMENT_TARGETN)osenviron     Y/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_pycc.pyunset_macosx_deployment_targetr      s"     "RZZ/JJ12 0r   c                       e Zd Zed        Zy)TestCompilerChecksc                     ddl m} t        j                  j	                  dd       d u}|r8t        j                  j	                  dd       | j                   |              y y y )Nr   )external_compiler_worksCONDA_BUILDVSINSTALLDIR)numba.pycc.platformr   r   r   get
assertTrue)selfr   is_running_conda_builds      r   test_windows_compiler_validityz1TestCompilerChecks.test_windows_compiler_validity*   sU     	@!#t!DD!P!zz~~nd3? 7 9: @ "r   N)__name__
__module____qualname___windows_onlyr    r   r   r   r   r   &   s     ; ;r   r   c                   <    e Zd Zd Zd Zej                  d        Zy)BasePYCCTestc                 b    t                t        d      | _        | j                  t        _        y )N	test_pycc)r   r	   tmpdirtempfiletempdirr   s    r   setUpzBasePYCCTest.setUp;   s"    &($[1  ;;r   c                 4    d t         _        ddlm}  |        y )Nr   )clear_export_registry)r*   r+   numba.pycc.decoratorsr/   )r   r/   s     r   tearDownzBasePYCCTest.tearDownC   s     	@r   c              #   p  K   t         j                  j                  |       	 t        |      }| t         j                  j	                  |       t         j
                  j                  |d        y # t         j                  j	                  |       t         j
                  j                  |d        w xY wwN)syspathappendr   removemodulespop)r   extdirnamelibs       r   check_c_extzBasePYCCTest.check_c_extN   sq     	( &CIHHOOF#KKOOD$' HHOOF#KKOOD$'s    B6A2 A B62AB33B6N)r!   r"   r#   r-   r1   
contextlibcontextmanagerr=   r   r   r   r&   r&   9   s&    '	  ( (r   r&   c                   ~     e Zd Z fdZej
                  d        Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Z xZS )TestCCc                     t         t        |           | j                          ddlm} || _        t        j                  | j                         y )Nr   )compile_with_pycc)	superrA   r-   skip_if_no_external_compilernumba.testsrC   _test_module	importlibreload)r   rC   	__class__s     r   r-   zTestCC.setUp\   s;    fd!#))+1-**+r   c              #      K   | j                   |_        |j                          | j                  | j                   |j                        5 }| d d d        y # 1 sw Y   y xY wwr3   )r)   
output_dircompiler=   r;   )r   ccr<   s      r   check_cc_compiledzTestCC.check_cc_compiledc   sF      


dkk2773sI 433s   AA$
A	A$A!A$c                     d|j                   t        j                  j                  |j                        dz  }|j                  d      |z   }t        j                  t        j                  d|g       y )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
            )r;   r5    -c)
r!   r   r5   dirname__file__strip
subprocess
check_callr4   
executable)r   r<   codeprologs       r   check_cc_compiled_in_subprocessz&TestCC.check_cc_compiled_in_subprocessl   s^     <<77??3<<8::  ||C 4's~~tT:;r   c                    | j                   j                  }| j                  |j                  d       | j                   j                  j                  }| j                  t        j                  j                  |      |       | j                   j                  j                  }| j                  t        j                  j                  |      |       | j                  t        j                  j                  |      j                  d      |       t        j                  j                  d      r?| j                  |j!                  d      |       ddlm} | j'                   |       |       y y )Npycc_test_simplezpycc_test_simple.linuxz.sor   )find_pyext_ending)rG   rN   assertEqualr;   rL   r   r   r5   isdiroutput_fileassertFalseexistsbasename
startswithr4   platformendswithr   r_   assertIn)r   rN   dfr_   s        r   test_cc_propertieszTestCC.test_cc_properties   s    !!"45   ++a(!,   ,,*A.((+667JKQO<<""7+OOAJJu-q1 >MM+-q1 ,r   c                    | j                  | j                  j                        5 }|j                  dd      }| j	                  |d       |j                  dd      }| j	                  |d       |j                  d      }| j	                  |d       | j                  |j                         d        | j                  t              5  |j                  dd	       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)
N{   A  ;  i  g    lVA         r   )rO   rG   rN   multiassertPreciseEqualmultfsquareassertIsget_noneassertRaisesZeroDivisionErrordiv)r   r<   ress      r   test_compilez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!C7C+C7+C4	0C77D c                    | j                   j                  }||_        | j                  |      5 }|j	                  dd      }| j                  |d       | j                  |j                  j                  d       d d d        y # 1 sw Y   y xY w)Nrn   ro   rp   r]   )rG   rN   
target_cpurO   rt   ru   r`   r"   )r   cpu_namerN   r<   r}   s        r   check_compile_for_cpuzTestCC.check_compile_for_cpu   sq    !! ##B'3))C%C##C3SYY113EF (''s   ABBc                 J    | j                  t        j                                y r3   )r   llget_host_cpu_namer,   s    r   test_compile_for_cpuzTestCC.test_compile_for_cpu   s    ""2#7#7#9:r   c                 &    | j                  d       y )Nhost)r   r,   s    r   test_compile_for_cpu_hostz TestCC.test_compile_for_cpu_host   s    ""6*r   c                    | j                  | j                  j                        5 }|j                  dd      }| j	                  |d       ddt        j                  d      fD ]%  }|j                  |      }| j	                  |d       ' ddt        j                  d      fD ]%  }|j                  |      }| j	                  |d	       ' |j                  d
      }| j	                  |d       | j                  |j                  d      |j                  d             |j                  d      }t
        j                  j                  d      j                         }| j	                  ||       |j                  t        j                  dgdz              }| j	                  |d       dd|iz  }| j!                  ||       d d d        y # 1 sw Y   y xY w)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)rO   rG   cc_helperlibpowerru   np
complex128sqrtfloat64np_sqrtspacingassertNotEqualrandomRandomStaterandom_samplesizer[   r   r<   r}   valr   rY   s         r   test_compile_helperlibz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;; DCCs   FG

Gc                 P   | j                  | j                  j                        5 }| j                  |j	                  d      d       |j                  d      }| j                  t        |      g d       t        r#|j                  d      }| j                  |d       t        j                  g d      }|j                  |      }t        j                  |      }| j                  ||       dt        t        	      z  }| j                  ||       d d d        y # 1 sw Y   y xY w)
Nrs   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
   )rO   rG   cc_nrtru   zero_scalarzerosr`   listr
   
vector_dotr   r   
np_argsortargsortdictr[   r   s         r   test_compile_nrtzTestCC.test_compile_nrt   s    ##D$5$5$<$<=##COOA$6<))A,CT#Y	2nnQ'''T2**12C..%Czz#H##C2 H-.D 00d;; >==s   C-DD%c                 N   | j                  | j                  j                        5 }|j                         }| j	                  |t        d             |j                  d      }| j	                  |t        d             d}| j                  ||       d d d        y # 1 sw Y   y xY w)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"))
                )rO   rG   r   hash_literal_str_Aru   hashhash_strr[   )r   r<   r}   rY   s       r   test_hashingzTestCC.test_hashing   s    ##D$5$5$<$<=((*C##Cc3,,s#C##Cc3D 00d; >==s   A,BB$c                    | j                  | j                  j                        5 }t        j                  dt        j
                        }|j                  |      }||z  }| j                  ||       d d d        y # 1 sw Y   y xY w)Nr   )dtype)rO   rG   r   r   arangeintpdict_usecaseru   )r   r<   arrgotexpects        r   test_c_extension_usecasezTestCC.test_c_extension_usecase   sg    ##D$5$5$<$<=))Crww/C""3'C3YF##C0	 >==s   AA==B)r!   r"   r#   r-   r>   r?   rO   r[   rl   r~   r   r   r   r   r   r   r   __classcell__rJ   s   @r   rA   rA   Y   sW    ,  <(2&
G;+<@<@< 1r   rA   c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )TestDistutilsSupportc                 \   t         |           | j                          t                t	        d      | _        t        j                  j                  t        d      }t        j                  j                  | j
                  d      | _
        t        j                  || j                         y )Ntest_pycc_distutilspycc_distutils_usecasework)rD   r-   rE   r   r	   r)   r   r5   join	base_pathusecase_dirshutilcopytree)r   
source_dirrJ   s     r   r-   zTestDistutilsSupport.setUp  sq    ))+&( %%:;WW\\)-EF
77<<V<
D$4$45r   c                     dd l }t        j                  j                  t        j                  j	                  t        j                  j	                  |j
                                    }t        t        j                        j                  dd      r|t        j                  z   d   z   d<   n|d<    fd} ||ddg       d} |d|g       y )	Nr   
PYTHONPATH c                 D   t        j                  t        j                  g| z   j                  t         j
                  t         j                        }|j                         \  }}|j                         }|dk7  r%j                  d|j                  dd      z         y y N)cwdstdoutstderrenvr   z+python failed with the following output:
%szutf-8ignorerV   Popenr4   rX   r   PIPESTDOUTcommunicatewaitfaildecodeargspout_rcr   r   s        r   
run_pythonz7TestDistutilsSupport.check_setup_py.<locals>.run_python$        #..!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]
            rR   
numbar   r5   abspathrS   rT   r   r   r   pathsepr   setup_py_filer   
numba_pathr   rY   r   s   `     @r   check_setup_pyz#TestDistutilsSupport.check_setup_py      WW__RWW__%'WW__U^^%D&F G
2::77<$ *RZZ 7#l:K KC *C
	; 	M;<= 	D$< r   c                     dd l }t        j                  j                  t        j                  j	                  t        j                  j	                  |j
                                    }t        t        j                        j                  dd      r|t        j                  z   d   z   d<   n|d<    fd} ||ddg       d} |d|g       y )	Nr   r   r   c                 D   t        j                  t        j                  g| z   j                  t         j
                  t         j                        }|j                         \  }}|j                         }|dk7  r%j                  d|j                  dd      z         y y r   r   r   s        r   r   z>TestDistutilsSupport.check_setup_nested_py.<locals>.run_pythonD  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]
            rR   r   r   s   `     @r   check_setup_nested_pyz*TestDistutilsSupport.check_setup_nested_py9  r   r   c                 &    | j                  d       y )Nzsetup_distutils.pyr   r,   s    r   test_setup_py_distutilsz,TestDistutilsSupport.test_setup_py_distutilsY  s    01r   c                 &    | j                  d       y )Nzsetup_distutils_nested.pyr   r,   s    r   test_setup_py_distutils_nestedz3TestDistutilsSupport.test_setup_py_distutils_nested\  s    ""#>?r   c                 &    | j                  d       y )Nzsetup_setuptools.pyr   r,   s    r   test_setup_py_setuptoolsz-TestDistutilsSupport.test_setup_py_setuptools_  s    12r   c                 &    | j                  d       y )Nzsetup_setuptools_nested.pyr   r,   s    r   test_setup_py_setuptools_nestedz4TestDistutilsSupport.test_setup_py_setuptools_nestedb  s    ""#?@r   )r!   r"   r#   r-   r   r   r   r   r   r   r   r   s   @r   r   r   	  s*    6!@!@2@3Ar   r   __main__))r>   rH   r   r   rV   r4   r*   unittestr   ctypesnumpyr   llvmlite.bindingbindingr   
numba.corer   numba.tests.supportr   r   r   r	   r
   r   _skip_reasonskipIfrg   rf   r$   r5   rS   r   rT   r   r   r   r&   rA   r   r!   mainr   r   r   <module>r
     s     	   
      = =  CLL$;$;E$B B ,. GGOOBGGOOH56	3 ; ; ;$(8 (@ l1\ l1 l1^ YA8 YA YAx zHMMO r   