a
    
d&                      @   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   e/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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}z|tj|j< tddd}t jjtdd|fidF dd	l	m
} d
|_|  |j  |  |j  W d    n1 s0    Y  W |jtjv rtj|j= n|jtjv rtj|j= 0 d S )NZ_test_numba_extensionr   initz_test_numba_extension:init_funcnumba_extensionsentry_pointsZ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f i dtdi z|tj|j< tddd}t j	j
tdd|fid	 d
dlm} d|_tjdd}|  W d    n1 s0    Y  d}|D ]}|t|v r qqtd|j  W d    n1 s0    Y  W |jtjv r$tj|j= n|jtjv r"tj|j= 0 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   s8    &*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 d    n1 s0    Y  W |jtjv rtj|j= n|jtjv rtj|j= 0 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   )types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   )rF   rG   r?   r   rF      s   rF   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_flagrH   rG   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   )rJ   rK   rL   rM   rN   rI   Zfloat_from_doubler   Zserialize_objectr
   ZunserializeZcall_function_objargsrO   )	rQ   r@   rA   rT   rU   rS   Zserialized_clazzZ	class_objresrV   r   r   	box_dummy   s    zaTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.box_dummy)rC   TyperP   Ztypeof_implregisterr
   Zregister_modelmodelsZStructModelZunboxZbox)rB   rW   rY   rV   )rF   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
   )rG   rC   
ModuleTyper)   r    r!   r   r"   r#   r   r$   r%   r   r
   )r   r]   r+   r,   r^   Zivalr   rV   r   'test_entrypoint_handles_type_extensionsy   s0    +

(z7TestEntrypoints.test_entrypoint_handles_type_extensionsc                 C   s   t j|t jt j|d}tt|j}zN|  | \}}|j	dkrZt
d|j	| f | | fW |  S |  0 dS )N)stdoutstderrenvr   z/process failed with code %s: stderr follows
%s
)NN)
subprocessPopenPIPE	threadingTimer_TEST_TIMEOUTkillstartcommunicate
returncodeAssertionErrordecodecancel)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   Z_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   rG   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    

