o
    i                     @   s   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m	Z	 d dl
mZ d dlmZ d dlmZ ed ZG dd	 d	eZG d
d deZdS )    N)mock)njit)TestCase)_TIMEOUT)metadatag      N@c                   @   s   e Zd Zdd Zdd ZdS )_DummyClassc                 C   s
   || _ d S Nvalue)selfr
    r   Y/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/numba/tests/test_entrypoints.py__init__      
z_DummyClass.__init__c                 C   s
   d| j  S )Nz_DummyClass(%f, %f)r	   r   r   r   r   __repr__   r   z_DummyClass.__repr__N)__name__
__module____qualname__r   r   r   r   r   r   r      s    r   c                   @   sV   e Zd ZdZdd Zdd ZdZee	j
ddekd	d
d Zdd Zdd ZdS )TestEntrypointszE
    Test registration of init() functions from Numba extensions
    c                 C   s   t jdd}zT|tj|j< tddd}t jjtdd|fid# dd	l	m
} d
|_|  |j  |  |j  W d    n1 sFw   Y  W |jtjv rYtj|j= d S d S |jtjv rftj|j= w )N_test_numba_extensionr   initz_test_numba_extension:init_funcnumba_extensionsentry_pointsreturn_valuer   entrypointsF)r   Mocksysmodulesr   importlib_metadata
EntryPointpatchobject
numba.corer   _already_initializedinit_all	init_funcassert_called_once)r   modmy_entrypointr   r   r   r   test_init_entrypoint!   s.   
z$TestEntrypoints.test_init_entrypointc              	   C   s&  t jdd}|jdi dtdi zt|tj|j< tddd}t j	j
tdd|fid	C d
dlm} d|_tjdd}|  W d    n1 sKw   Y  d}|D ]
}|t|v r^ nqTtd|j  W d    n1 srw   Y  W |jtjv rtj|j= d S d S |jtjv rtj|j= w )N_test_numba_bad_extensionr   zinit_func.side_effectbrokenr   z#_test_numba_bad_extension:init_funcr   r   r   r   r   FT)recordz2Numba extension module '_test_numba_bad_extension'z"Expected warning message not foundr   )r   r   configure_mock
ValueErrorr    r!   r   r"   r#   r$   r%   r&   r   r'   warningscatch_warningsr(   strr)   r*   )r   r+   r,   r   wbad_strxr   r   r   test_entrypoint_toleranceG   s@   
z)TestEntrypoints.test_entrypoint_tolerance	RUN_ENTRY_EP_MAGIC_TOKENNzneeds tokenc                    s   dd l   fdd}td}||_zG|tj|j< tddd}t	j
jtdd|fid	 td
d }td}|| W d    n1 sEw   Y  W |jtjv rXtj|j= d S d S |jtjv retj|j= w )Nr   c                     s   G fdddj jjjtfdd} jG  fdddjjj j	fdd}j
fd	d
}d S )Nc                       s   e Zd Z fddZ  ZS )zaTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyTypec                    s   t  | jdd d S )N	DummyType)name)superr   r   )r<   	__class__r   r   r      s   zjTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyType.__init__r   r   r   r   __classcell__r   r<   r?   r   r<      s    r<   c                    s     S r   r   )valcrB   r   r   typer_DummyClass   s   zhTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.typer_DummyClassc                       s    e Zd Z fddZ  ZS )zbTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyModelc                    s&   dj jfg}t | ||| d S )Nr
   )typesfloat64r>   r   )r   dmmfe_typemembers)
DummyModelr?   numbar   r   r      s   
zkTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyModel.__init__r@   r   )rL   rM   rC   r   rL      s    rL   c                    st   |j |d} jj| }||j|j}|j ||_|j 	| |j 
 } jj|j|} jj| |dS )Nr
   )is_error)pyapiobject_getattr_stringcorecgutilscreate_struct_proxycontextbuilderfloat_as_doubler
   decreferr_occurredis_not_null	extendingNativeValue	_getvalue)typobjrE   	value_objdummy_struct_proxydummy_structerr_flagrN   rM   r   r   unbox_dummy   s   
zcTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.unbox_dummyc           	         sn    j j| }||j|j}|j|j}|jt	}|j
|}|j||f}|j| |j| |S r   )rQ   rR   rS   rT   rU   rO   float_from_doubler
   serialize_objectr   unserializecall_function_objargsrW   )	r]   rD   rE   r`   ra   r_   serialized_clazz	class_objresrc   r   r   	box_dummy   s   zaTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.box_dummy)rG   TyperZ   typeof_implregisterr   register_modelmodelsStructModelunboxbox)rF   rd   rl   rc   )rL   r<   r   init_function}   s   


zNTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function_test_numba_init_sequencer   z#_test_numba_init_sequence:init_funcr   r   r   c                 S   s   | S r   r   )r8   r   r   r   foo   s   zDTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.foo
   )rM   rG   
ModuleTyper)   r    r!   r   r"   r#   r   r$   r%   r   r   )r   ru   r+   r,   rw   ivalr   rc   r   'test_entrypoint_handles_type_extensionsv   s4   
+

z7TestEntrypoints.test_entrypoint_handles_type_extensionsc                 C   s~   t j|t jt j|d}tt|j}z'|  | \}}|j	dkr-t
d|j	| f | | fW |  S |  w )N)stdoutstderrenvr   z/process failed with code %s: stderr follows
%s
)
subprocessPopenPIPE	threadingTimer_TEST_TIMEOUTkillstartcommunicate
returncodeAssertionErrordecodecancel)r   cmdliner~   popentimeoutouterrr   r   r   run_cmd   s"   
zTestEntrypoints.run_cmdc           
      C   sr   t j }t| j|d< | j}t| j}d}d|||f }tj	dd|g}| 
||\}}d}	|	r7t|| d S d S )Nr;   r{   z%s.%s.%sz-mznumba.runtestsF)osenvironcopyr5   r;   r   typer   r    
executabler   print)
r   env_copythemodtheclsmethnameinjected_methodr   r   r   _DEBUGr   r   r   "test_entrypoint_extension_sequence   s   

z2TestEntrypoints.test_entrypoint_extension_sequence)r   r   r   __doc__r-   r9   r;   unittestskipIfr   r   getr{   r   r   r   r   r   r   r      s    &-
Mr   )r    r   r   rG   r3   r   r   r   rM   r   numba.tests.supportr   numba.testing.mainr   _RUNNER_TIMEOUT	importlibr   r"   r   r%   r   r   r   r   r   r   <module>   s    