
    pi.:              	       \   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mZmZmZ d dlZdZ ej8                  ej:                  j=                  d       e      Zej@                  jC                  ej@                  jE                  e#            Z$d Z%ee G d	 d
e                    Z&e G d de             Z'eee G d de'                           Z(eeee G d de                                  Z)e*dk(  r ejV                          yy)    N)skip)*)utils)	TestCasetagimport_dynamictemp_directoryhas_blasneeds_setuptoolsskip_if_py313plus_on_windowsskip_if_linux_aarch64skip_if_freethreadingz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     W/opt/services/ai/voice_agent/venv/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.decoratorsr2   )r!   r2   s     r   tearDownzBasePYCCTest.tearDownF   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_extQ   sq     	( &CIHHOOF#KKOOD$' HHOOF#KKOOD$'s    B6A2 A B62AB33B6N)r$   r%   r&   r0   r4   
contextlibcontextmanagerr@   r   r   r   r)   r)   ;   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d Z xZS )TestCCc                     t         t        |           | j                          ddlm} || _        t        j                  | j                         y )Nr   )compile_with_pycc)	superrD   r0   skip_if_no_external_compilernumba.testsrF   _test_module	importlibreload)r!   rF   	__class__s     r   r0   zTestCC.setUpa   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r6   )r,   
output_dircompiler@   r>   )r!   ccr?   s      r   check_cc_compiledzTestCC.check_cc_compiledh   sO      


dkk2773 	sI	 	 	s   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>   r8    -c)
r$   r   r8   dirname__file__strip
subprocess
check_callr7   
executable)r!   r?   codeprologs       r   check_cc_compiled_in_subprocessz&TestCC.check_cc_compiled_in_subprocessq   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)rJ   rQ   assertEqualr>   rO   r    r   r8   isdiroutput_fileassertFalseexistsbasename
startswithr7   platformendswithr   rb   assertIn)r!   rQ   dfrb   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   )rR   rJ   rQ   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9 		S))C%C##C3))C%C##C7**Q-C##C,MM#,,.$/""#45 1		 		 		 		s$   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)Nrq   rr   rs   r`   )rJ   rQ   
target_cpurR   rw   rx   rc   r%   )r!   cpu_namerQ   r?   r   s        r   check_compile_for_cpuzTestCC.check_compile_for_cpu   s~    !! ##B' 	G3))C%C##C3SYY113EF	G 	G 	Gs   ABBc                 J    | j                  t        j                                y r6   )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)rR   rJ   cc_helperlibpowerrx   np
complex128sqrtfloat64np_sqrtspacingassertNotEqualrandomRandomStaterandom_samplesizer^   r!   r?   r   valr   r\   s         r   test_compile_helperlibzTestCC.test_compile_helperlib   s   ##D$5$5$B$BC 	<s))Aq/C##C-GR]]2%67 1hhsm''R01 3

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

2

2?**R.Cyy,,R0>>@H##C2((2::qcAg./C##C+ "8,-D 00d;;	< 	< 	<s   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)
Nrv   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
   )rR   rJ   cc_nrtrx   zero_scalarzerosrc   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"))
                )rR   rJ   r   hash_literal_str_Arx   hashhash_strr^   )r!   r?   r   r\   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)rR   rJ   r   r   arangeintpdict_usecaserx   )r!   r?   arrgotexpects        r   test_c_extension_usecasezTestCC.test_c_extension_usecase  sp    ##D$5$5$<$<= 	1))Crww/C""3'C3YF##C0		1 	1 	1s   AA==Bc                    | j                  | j                  j                        5 }t        j                  dt        j
                        }t        j                  dt        j
                        }|j                  ||       | j                  ||       t        j                  dt        j
                        }|j                  ||       | j                  ||       t        j                  dt        j
                        }t        j                  dt        j
                        }| j                  t              5 }|j                  ||       ddd       | j                  d|j                   d|j                   t        j                               t        j                  dt        j
                        }t        j                  dt        j
                        }| j                  t              5 }|j                  ||       ddd       | j                  d|j                   d|j                   t        |j                               ddd       y# 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   yxY w)	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   rt   )rR   rJ   	cc_dynexcr   r   r   onesdo_setitem1rx   do_setitem2r}   
ValueErrorrl   shapestr	exception)r!   r?   abraisess        r   test_dynamic_exczTestCC.test_dynamic_exc  s    ##D$5$5$?$?@ 	'Crzz2Abjj1AOOAq!##Aq)rzz2AOOAq!##Aq) rzz2Abjj1A"":. &&1%& MM/y 9""#'',F$$%'
 rzz2Abjj1A"":. &&1%& MM/y 9""#'',F$$%'7	' 	'& && &1	' 	's>   DI2=IB&I26I&	AI2I#	I2&I/	+I22I;)r$   r%   r&   r0   rA   rB   rR   r^   ro   r   r   r   r   r   r   r   r   r   __classcell__rM   s   @r   rD   rD   \   s\    
,  <(2&
G;+<@<@< 1$'r   rD   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)rG   r0   rH   r   r	   r,   r   r8   join	base_pathusecase_dirshutilcopytree)r!   
source_dirrM   s     r   r0   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rY   Popenr7   r[   r   PIPESTDOUTcommunicatewaitfaildecodeargspout_rcr   r!   s        r   
run_pythonz7TestDistutilsSupport.check_setup_py.<locals>.run_pythonR        #..!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]
            rU   
numbar   r8   abspathrV   rW   r   r   r   pathsepr!   setup_py_filer   
numba_pathr   r\   r   s   `     @r   check_setup_pyz#TestDistutilsSupport.check_setup_pyG      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_pythonr  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]
            rU   r   r   s   `     @r   check_setup_nested_pyz*TestDistutilsSupport.check_setup_nested_pyg  r  r   c                 &    | j                  d       y )Nzsetup_distutils.pyr  r/   s    r   test_setup_py_distutilsz,TestDistutilsSupport.test_setup_py_distutils  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_nested  s    ""#?@r   )r$   r%   r&   r0   r  r  r	  r  r  r  r   r   s   @r   r   r   4  s*    6!@!@2@3Ar   r   __main__),rA   rK   r   r   rY   r7   r-   unittestr   ctypesnumpyr   llvmlite.bindingbindingr   
numba.corer   numba.tests.supportr   r   r   r	   r
   r   r   r   r   _skip_reasonskipIfrj   ri   r'   r8   rV   r   rW   r   r   r   r)   rD   r   r$   mainr   r   r   <module>r     sV     	   
      O O O  CLL$;$;E$B B ,. GGOOBGGOOH56	3 ; ;  ;$ (8 ( (@ R'\ R'   R'j YA8 YA    YAx zHMMO r   