
    
f&                          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     rd dlZnd dlmZ edz
  Z G d	 d
e          Z G d de          ZdS )    N)mock)confignjit)TestCase)_TIMEOUT)   	   )metadatag      N@c                       e Zd Zd Zd ZdS )_DummyClassc                     || _         d S Nvalue)selfr   s     <lib/python3.11/site-packages/numba/tests/test_entrypoints.py__init__z_DummyClass.__init__   s    


    c                     d| j         z  S )Nz_DummyClass(%f, %f)r   )r   s    r   __repr__z_DummyClass.__repr__   s    $tz11r   N)__name__
__module____qualname__r   r    r   r   r   r      s2          2 2 2 2 2r   r   c                       e Zd ZdZd Zd ZdZ ej        e	j
                            dd          ek    d          d             Zd	 Zd
 ZdS )TestEntrypointszE
    Test registration of init() functions from Numba extensions
    c                 z   t          j        d          }	 |t          j        |j        <   t          j        ddd          }t           j                            t
          dd|fi          5  dd	l	m
} d
|_        |                                 |j                                         |                                 |j                                         d d d            n# 1 swxY w Y   |j        t          j        v rt          j        |j        = d S d S # |j        t          j        v rt          j        |j        = w xY 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&   s       r   test_init_entrypointz$TestEntrypoints.test_init_entrypoint$   s    i!8999	.(+CK%.99;M M """0=2BC #   3 3 322222 490$$&&& 00222 $$&&&00222%3 3 3 3 3 3 3 3 3 3 3 3 3 3 3* |s{**K--- +*s|s{**K-----s1   AD +A(CD C##D &C#'D 'D:c                    t          j        d          } |j        di dt          d          i 	 |t          j        |j        <   t          j        ddd          }t           j	        
                    t          dd|fi	          5  d
dlm} d|_        t          j        d          5 }|                                 d d d            n# 1 swxY w Y   d}|D ]}|t#          |          v r nt          d          |j                                         d d d            n# 1 swxY w Y   |j        t          j        v rt          j        |j        = d S d S # |j        t          j        v rt          j        |j        = w xY 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_warningsr0   strr1   r2   )r   r3   r4   r&   wbad_strxs          r   test_entrypoint_tolerancez)TestEntrypoints.test_entrypoint_toleranceJ   s2    i!<===MM5z(7K7KLMMM$	.(+CK%.95" M """0=2BC #   3 3 322222380,D999 +Q((***+ + + + + + + + + + + + + + + O K KA#a&&(( ) %%IJJJ 00222+3 3 3 3 3 3 3 3 3 3 3 3 3 3 32 |s{**K--- +*s|s{**K-----sU   AE #D$*C?D$C	D$C	AD$E $D((E +D(,E 'E?	RUN_ENTRY_EP_MAGIC_TOKENNzneeds tokenc                     dd l fd}t          j        d          }||_        	 |t          j        |j        <   t          j        ddd          }t          j
                            t          dd|fi          5  t          d	             }t          d
          } ||           d d d            n# 1 swxY w Y   |j        t          j        v rt          j        |j        = d S d S # |j        t          j        v rt          j        |j        = w xY w)Nr   c                      G fddj         j                  j        j                            t
                    fd            } j                                       G fddj        j        j                              j        	                              fd            }j        
                              fd            }d S )Nc                   "     e Zd Z fdZ xZS )aTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyTypec                 P    t          |                               d           d S )N	DummyType)name)superr   )r   rJ   	__class__s    r   r   zjTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyType.__init__   s*    )T**333EEEEEr   r   r   r   r   __classcell__)rM   rJ   s   @r   rJ   rH      sH        F F F F F F F F F Fr   rJ   c                                  S r   r   )valcrJ   s     r   typer_DummyClasszhTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.typer_DummyClass   s     y{{"r   c                   $     e Zd Z fdZ xZS )bTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyModelc                 p    dj         j        fg}t          |                               |||           d S )Nr   )typesfloat64rL   r   )r   dmmfe_typemembers
DummyModelrM   numbas       r   r   zkTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyModel.__init__   s?     %+"56:G*d++44S'7KKKKKr   rN   )rM   r\   r]   s   @r   r\   rU      sN        L L L L L L L L L L Lr   r\   c                    |j                             |d          }j        j                            |           } ||j        |j                  }|j                             |          |_        |j         	                    |           |j         
                                }j        j                            |j        |          }j                            |                                |          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objrR   	value_objdummy_struct_proxydummy_structerr_flagr_   r]   s	           r   unbox_dummyzcTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.unbox_dummy   s    G99#wGG	%*Z%7%K%KC%P%P"11!)QYGG%&W%<%<Y%G%G"y)))7//11 :-99!)XNN22<3I3I3K3K<D 3 F F Fr   c                    	j         j                            |           } ||j        |j                  }|j                            |j                  }|j                            t                    }|j        
                    |          }|j                            ||f          }|j                            |           |j                            |           |S r   )rb   rc   rd   re   rf   r`   float_from_doubler   serialize_objectr   unserializecall_function_objargsrh   )
rn   rQ   rR   rq   rr   rp   serialized_clazz	class_objresr]   s
            r   	box_dummyzaTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.box_dummy   s    %*Z%7%K%KC%P%P"11!)QYGGG55l6HII	#$7#;#;K#H#H G//0@AA	g33I	|LLy)))y)))
r   )rW   Typerk   typeof_implregisterr   register_modelmodelsStructModelunboxbox)rS   rt   r}   r\   rJ   r]   s      @@r   init_functionzNTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function   se   F F F F F F FEK, F F F _(11+>># # # # ?># _++I66L L L L L L L LU_3? L L 76L _""9--	F 	F 	F 	F .-	F _  ++	 	 	 	 ,+	 	 	r   _test_numba_init_sequencer    z#_test_numba_init_sequence:init_funcr!   r"   r#   c                     | S r   r   )rA   s    r   foozDTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.foo   s    Hr   
   )r]   rW   
ModuleTyper1   r(   r)   r   r*   r+   r   r,   r-   r   r   )r   r   r3   r4   r   ivalr]   s         @r   'test_entrypoint_handles_type_extensionsz7TestEntrypoints.test_entrypoint_handles_type_extensionsy   s|   
 	)	 )	 )	 )	 )	V :;;%	.(+CK%.95" M """0=2BC #   
 

    #2D			
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 |s{**K--- +*s|s{**K-----s0   AC& ;+B2&C& 2B66C& 9B6:C& &'Dc                 
   t          j        |t           j        t           j        |          }t          j        t
          |j                  }	 |                                 |                                \  }}|j	        dk    r-t          d|j	        d|                                d          |                                |                                f|                                 S # |                                 w xY w)N)stdoutstderrenvr   zprocess failed with code z: stderr follows

)
subprocessPopenPIPE	threadingTimer_TEST_TIMEOUTkillstartcommunicate
returncodeAssertionErrordecodecancel)r   cmdliner   popentimeoutouterrs          r   run_cmdzTestEntrypoints.run_cmd   s     (2(2%(* * *
 /-<<		MMOOO((**HC1$$$n%%%szz||||56 6 6 ::<<-NNGNNs   B
C, ,Dc                 <   t           j                                        }t          | j                  |d<   | j        }t          |           j        }d}|d|d|}t          j	        dd|g}| 
                    ||          \  }}d}	|	rt          ||           d S d S )NrD   r   .z-mznumba.runtestsF)osenvironcopyr>   rD   r   typer   r(   
executabler   print)
r   env_copythemodtheclsmethnameinjected_methodr   r   r   _DEBUGs
             r   "test_entrypoint_extension_sequencez2TestEntrypoints.test_entrypoint_extension_sequence   s    :??$$&)$*>&?&?"#d$<(.A>4)9?K<<22S 	#sOOOOO	 	r   )r   r   r   __doc__r5   rB   rD   unittestskipIfr   r   getr   r   r   r   r   r   r   r      s         $. $. $.L+. +. +.Z "OX_RZ^^$5t<<O"$ $K. K.$ $K.Z  &    r   r   )r(   r   r   rW   r<   r   r   r   r]   r   r   numba.tests.supportr   numba.testing.mainr   _RUNNER_TIMEOUT	PYVERSIONr*   	importlibr
   r   r-   r   r   r   r   r   <module>r      s9   



          				                 ( ( ( ( ( ( : : : : : :	f888888#%2 2 2 2 2& 2 2 2G G G G Gh G G G G Gr   