U
    9%e&                      @   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	m
Z
 d dlmZ d dlmZ e	jdk rd dlZnd dlmZ ed ZG d	d
 d
eZG dd deZdS )    N)mock)config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   [/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_entrypoints.py__init__   s    z_DummyClass.__init__c                 C   s
   d| j  S )Nz_DummyClass(%f, %f)r   r   r   r   r   __repr__   s    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}zx|tj|j< tddd}t jjtdd|fid< dd	l	m
} d
|_|  |j  |  |j  W 5 Q R X W 5 |jtjkrtj|j= X d S )NZ_test_numba_extensionr   initz_test_numba_extension:init_funcnumba_extensionsentry_pointsZreturn_valuer   entrypointsF)r   Mockr   sysmodules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f dtdi z|tj|j< tddd}t j	j
tdd|fid	h d
dlm} d|_tjdd}|  W 5 Q R X d}|D ]}|t|kr qqtd|j  W 5 Q R X W 5 |jtjkrtj|j= X d S )NZ_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 found)r   r   Zconfigure_mock
ValueErrorr   r    r!   r"   r#   r$   r%   r&   r   r'   warningscatch_warningsr(   strr)   r*   )r   r+   r,   r   wZbad_strxr   r   r   test_entrypoint_toleranceJ   s4    z)TestEntrypoints.test_entrypoint_toleranceZ	RUN_ENTRY_EP_MAGIC_TOKENNzneeds tokenc              	      s   dd l   fdd}td}||_z^|tj|j< tddd}t	j
jtdd|fid	" td
d }td}|| W 5 Q R X W 5 |jtjkrtj|j= X d S )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   )r8   	__class__r   r   r      s    zjTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyType.__init__r   r   r   r   __classcell__r   r8   r;   r   r8      s   r8   c                    s     S r   r   )valcr>   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   )typesZfloat64r:   r   )r   ZdmmZfe_typemembers)
DummyModelr;   numbar   r   r      s    
zkTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyModel.__init__r<   r   )rE   rF   r?   r   rE      s   rE   c                    st   |j |d} jj| }||j|j}|j ||_|j 	| |j 
 } jj|j|} jj| |dS )Nr   )is_error)pyapiZobject_getattr_stringcorecgutilscreate_struct_proxycontextbuilderZfloat_as_doubler   decrefZerr_occurredZis_not_null	extendingZNativeValueZ	_getvalue)typobjrA   	value_objdummy_struct_proxydummy_structZerr_flagrG   rF   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   )rI   rJ   rK   rL   rM   rH   Zfloat_from_doubler   Zserialize_objectr
   ZunserializeZcall_function_objargsrN   )	rP   r@   rA   rS   rT   rR   Zserialized_clazzZ	class_objresrU   r   r   	box_dummy   s    zaTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.box_dummy)rC   TyperO   Ztypeof_implregisterr
   Zregister_modelmodelsZStructModelZunboxbox)rB   rV   rX   rU   )rE   r8   r   init_function   s    


zNTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_functionZ_test_numba_init_sequencer   z#_test_numba_init_sequence:init_funcr   r   r   c                 S   s   | S r   r   )r5   r   r   r   foo   s    zDTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.foo
   )rF   rC   
ModuleTyper)   r   r    r!   r"   r#   r   r$   r%   r   r
   )r   r]   r+   r,   r^   Zivalr   rU   r   'test_entrypoint_handles_type_extensionsy   s,    +

z7TestEntrypoints.test_entrypoint_handles_type_extensionsc                 C   s|   t j|t jt j|d}tt|j}zH|  |	 \}}|j
dkrZtd|j
| f | | fW S |  X dS )N)stdoutstderrenvr   z/process failed with code %s: stderr follows
%s
)NN)
subprocessPopenPIPE	threadingTimer_TEST_TIMEOUTkillcancelstartcommunicate
returncodeAssertionErrordecode)r   cmdlinerd   popentimeoutouterrr   r   r   run_cmd   s$    

zTestEntrypoints.run_cmdc           
      C   sn   t j }t| j|d< | j}t| j}d}d|||f }tj	dd|g}| 
||\}}d}	|	rjt|| d S )Nr7   ra   z%s.%s.%sz-mznumba.runtestsF)osenvironcopyr3   r7   r   typer   r    
executablerw   print)
r   Zenv_copyZthemodZtheclsZmethnameZinjected_methodrr   ru   rv   _DEBUGr   r   r   "test_entrypoint_extension_sequence   s    

z2TestEntrypoints.test_entrypoint_extension_sequence)r   r   r   __doc__r-   r6   r7   unittestZskipIfrx   ry   getra   rw   r   r   r   r   r   r      s   &-
Mr   )r    r   r   rC   r1   rx   re   rh   rF   r   r   Znumba.tests.supportr   Znumba.testing.mainr   Z_RUNNER_TIMEOUTZ	PYVERSIONr"   	importlibr	   rj   r%   r
   r   r   r   r   r   <module>   s    

