
    ܙdH)                     D   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	Z	d dl
mZ d dlmZ d dlmZ d dlmZmZ ddlT  G d	 d
e          Z G d de          Z G d de          Z G d de          Zd Zd Zd Zd Zedk    r ej                     dS dS )    N)get_context)TypingError)TestCase)resolve_dispatcher_from_strdumpsloads   )*c                       e Zd Z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d Zd Zd Zd Zd Zd Zd Zd ZdS )TestDispatcherPicklingc                 \    t          t          j        dz             D ]} ||g|R i | d S )Nr
   )rangepickleHIGHEST_PROTOCOL)selfmethargskwargsprotos        :lib/python3.11/site-packages/numba/tests/test_serialize.pyrun_with_protocolsz)TestDispatcherPickling.run_with_protocols   sN    62Q677 	) 	)ED((((((((	) 	)    c              #      K   d}t          |          }|j        } t          |j                  |          |_        	 d V  ||_        d S # ||_        w xY w)Ncpu)r   targetdescrtype)r   hwstrdispatcher_cls	old_descrs       r   simulate_fresh_targetz,TestDispatcherPickling.simulate_fresh_target   so      4U;;".	%ET.*D%E%Ee%L%L"	3EEE *3N&&&N&2222s   A 	Ac                       fd} ||           t          j        ||          }                                 5  t          j        |          } ||           d d d            d S # 1 swxY w Y   d S )Nc                     t          t                    r&t          t                    r j        | gR   d S                      |             d S )N)
isinstancer   
issubclass	ExceptionassertRaisesassertPreciseEqual)funcr   expected_resultr   s    r   check_resultz7TestDispatcherPickling.check_call.<locals>.check_result'   sn    ?D11 F	::F!!/4?$??????''d_EEEEEr   )r   r   r!   r	   )r   r   r)   r*   r   r+   picklednew_funcs   `  ``   r   
check_callz!TestDispatcherPickling.check_call&   s    	F 	F 	F 	F 	F 	F 	F 	T,tU++'')) 	# 	#|G,,HL"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s    A,,A03A0c                     |                      | j        t          dd           |                      | j        t          dd           d S )N   r
      )333333?g@)r   r.   add_with_sigr   s    r   test_call_with_sigz)TestDispatcherPickling.test_call_with_sig5   s@    q&IIIq*MMMMMr   c                     |                      | j        t          dd           |                      | j        t          dd           |                      | j        t          dd           d S )Nr0   r1         @r3   g333333@abc)abc)r   r.   add_without_sigr5   s    r   test_call_without_sigz,TestDispatcherPickling.test_call_without_sig:   s\    !VLLL#zRRR%UUUUUr   c                     |                      | j        t          dd           |                      | j        t          t          t	                      t	                      f           d S )Nr8   r9   )r   r.   add_nopythonr   objectr5   s    r   test_call_nopythonz)TestDispatcherPickling.test_call_nopython@   sP    sJOOO{VXXW]W_W_L`aaaaar   c                 T    |                      | j        t          t          d           d S )Nr
      )r   r.   add_nopython_failr   r5   s    r   test_call_nopython_failz.TestDispatcherPickling.test_call_nopython_failE   s&    1BKQWXXXXXr   c                 J    |                      | j        t          dd           d S )Ng      @)g      @)r   r.   get_global_objmoder5   s    r   test_call_objmode_with_globalz4TestDispatcherPickling.test_call_objmode_with_globalI   s%    1CS&QQQQQr   c                 ^    t          d          }|                     | j        |dd           d S )Nr
      )rE      )closurer   r.   r   inners     r   test_call_closurez(TestDispatcherPickling.test_call_closureL   s/    

6BBBBBr   c                 X    t          di |}|                     | j        |dd           d S )N      @g      @      @)rS   )closure_with_globalsr   r.   )r   jit_argsrP   s      r   check_call_closure_with_globalsz6TestDispatcherPickling.check_call_closure_with_globalsP   s7    $55H55VDDDDDr   c                 2    |                      d           d S )NT)nopythonrX   r5   s    r   'test_call_closure_with_globals_nopythonz>TestDispatcherPickling.test_call_closure_with_globals_nopythonT       ,,d,;;;;;r   c                 2    |                      d           d S )NT)forceobjr[   r5   s    r   &test_call_closure_with_globals_objmodez=TestDispatcherPickling.test_call_closure_with_globals_objmodeW   r]   r   c                 ^    t          d          }|                     | j        |dd           d S )NrS   g      &@)rU   g      @)closure_calling_other_functionr   r.   rO   s     r   (test_call_closure_calling_other_functionz?TestDispatcherPickling.test_call_closure_calling_other_functionZ   s1    .s33jIIIIIr   c                 ^    t          d          }|                     | j        |dd           d S )NrS   g       @rT   )closure_calling_other_closurer   r.   rO   s     r   'test_call_closure_calling_other_closurez>TestDispatcherPickling.test_call_closure_calling_other_closure^   s1    -c22VDDDDDr   c                 J    |                      | j        t          dd           d S N$   )rL   )r   r.   dyn_funcr5   s    r   test_call_dyn_funcz)TestDispatcherPickling.test_call_dyn_funcb   s$    2tDDDDDr   c                 J    |                      | j        t          dd           d S rh   )r   r.   dyn_func_objmoder5   s    r   test_call_dyn_func_objmodez1TestDispatcherPickling.test_call_dyn_func_objmodef   s%    1A2tLLLLLr   c                 h    t          d          }|                     | j        t           |d           d S )N        )rp   )get_renamed_moduler   r.   )r   expecteds     r   test_renamed_modulez*TestDispatcherPickling.test_renamed_modulej   s?     &c**1C (&	2 	2 	2 	2 	2r   c                     |                      | j        t          dd           |                      | j        t          dd           d S )N.   rD   y      @      ?)y              ?rE   )r   r.   generated_addr5   s    r   test_call_generatedz*TestDispatcherPickling.test_call_generatedq   sR     "F	, 	, 	, &	1 	1 	1 	1 	1r   c                     t          d          }t          j        |          } dj        di t	                      }t          j        t          j        d|g           dS )z}
        Check that reconstructing doesn't depend on resources already
        instantiated in the original process.
        rS   zif 1:
            import pickle

            data = {pickled!r}
            func = pickle.loads(data)
            res = func(4.0)
            assert res == 8.0, res
            -cN )	re   r   r   formatlocals
subprocessr.   sys
executable)r   r)   r,   codes       r   test_other_processz)TestDispatcherPickling.test_other_processw   sp    
 -S11,t$$  # #  # # 	s~tT:;;;;;r   c                    t          d          }t          j        |          }t          d          }t          j        |          }t          j        |          }t          j        |          }t          j        |          }|                     ||           |                      |dd          d           |                                 |                      |dd          d           |                     ||           |                      |dd          d           t          d          } |d	d
           t          j        |          }~t          j	                     t          j        |          }t          j        |          }|                     ||           |                      |dd          d           |                                 |                      |dd          d           dS )z
        Check that deserializing the same function multiple times re-uses
        the same dispatcher object.

        Note that "same function" is intentionally under-specified.
        r0   rL   rE   rM   
   r2         *   +         N)
rN   r   r   r	   assertIsassertEqualdisable_compileassertIsNotgccollect)r   r)   r,   func2pickled2fghs           r   
test_reusez!TestDispatcherPickling.test_reuse   s    qzz,t$$

<&&L!!L!!L""a1a"%%%	1a"%%%A1a"%%% qzzR,t$$

L!!L!!a1a"%%%	1a"%%%%%r   c                 L    d}t          j        t          j        d|g           dS )zN
        The imp module was deprecated in v3.4 in favour of importlib
        a  if 1:
            import pickle
            import warnings
            with warnings.catch_warnings(record=True) as w:
                warnings.simplefilter('always', DeprecationWarning)
                from numba import njit
                @njit
                def foo(x):
                    return x + 1
                foo(1)
                serialized_foo = pickle.dumps(foo)
            for x in w:
                if 'serialize.py' in x.filename:
                    assert "the imp module is deprecated" not in x.msg
        ry   N)r}   r.   r~   r   )r   r   s     r   test_imp_deprecationz+TestDispatcherPickling.test_imp_deprecation   s+     	s~tT:;;;;;r   N)__name__
__module____qualname__r   
contextlibcontextmanagerr!   r.   r6   r>   rB   rG   rJ   rQ   rX   r\   r`   rc   rf   rk   rn   rs   rw   r   r   r   rz   r   r   r   r      s       ) ) ) 3 3 3# # #N N N
V V Vb b b
Y Y YR R RC C CE E E< < << < <J J JE E EE E EM M M2 2 21 1 1< < <"#& #& #&J< < < < <r   r   c                       e Zd Zd ZdS )TestSerializationMiscc                 4   ddl m} t                      }t          j        |          }t          |          } |t          |          ||          }|                     ||            |t          |          ||          }|                     ||           d S )Nr   )_numba_unpickle)	numba.core.serializer   rA   r   r   hashidr   r   )r   r   
random_objbytebufhashedgot1got2s          r   test_numba_unpicklez)TestSerializationMisc.test_numba_unpickle   s    888888XX
,z**j!!r*~~w??z***r*~~w??dD!!!!!r   N)r   r   r   r   rz   r   r   r   r      s#        " " " " "r   r   c                   d    e Zd ZdZdZd Z ej        e dk    d          d             Zd Z	d Z
d	S )
TestCloudPickleIssueszOThis test case includes issues specific to the cloudpickle implementation.
    Fc                       G d d          fd} fd}t                    } |              |             t          |            |             t          |            |             d S )Nc                       e Zd ZdZdS )ITestCloudPickleIssues.test_dynamic_class_reset_on_unpickle.<locals>.KlassNr   r   r   classvarrz   r   r   Klassr              HHHr   r   c                      d _         d S Nd   )r   r   s   r   mutatorzKTestCloudPickleIssues.test_dynamic_class_reset_on_unpickle.<locals>.mutator   s     ENNNr   c                  >                          j        d           d S r   )r   r   )r   r   s   r   checkzITestCloudPickleIssues.test_dynamic_class_reset_on_unpickle.<locals>.check   s!    U^S11111r   r   )r   r   r   savedr   s   `   @r   $test_dynamic_class_reset_on_unpicklez:TestCloudPickleIssues.test_dynamic_class_reset_on_unpickle   s    	 	 	 	 	 	 	 		! 	! 	! 	! 	!	2 	2 	2 	2 	2 	2 e			eer   __main__z*Test cannot run as when module is __main__c                     t          d          }|                    t                    }|                                 |                    d           |                     |j        d           d S )Nspawn)target<   timeoutr   )r   Process"check_main_class_reset_on_unpicklestartjoinr   exitcode)r   mpprocs      r   !test_main_class_reset_on_unpicklez7TestCloudPickleIssues.test_main_class_reset_on_unpickle   sd     !!zz!CzDD

		"	*****r   c                      G d d          }t          |          }t          d          }|                    t          |f          }|                                 |                    d           |                     |j        d           d S )Nc                       e Zd ZdZdS )RTestCloudPickleIssues.test_dynamic_class_reset_on_unpickle_new_proc.<locals>.KlassNr   rz   r   r   r   r      r   r   r   r   )r   r   r   r   r   )r   r   r   !check_unpickle_dyn_class_new_procr   r   r   r   )r   r   r   r   r   s        r   -test_dynamic_class_reset_on_unpickle_new_proczCTestCloudPickleIssues.test_dynamic_class_reset_on_unpickle_new_proc   s    	 	 	 	 	 	 	 	 e !!zz!B%zRR

		"	*****r   c                 t    t          j        t                    }|                      |            d           d S )N)r   r   )numbanjit
issue_7356r   )r   cfuncs     r   test_dynamic_class_issue_7356z3TestCloudPickleIssues.test_dynamic_class_issue_7356  s3    
:&&*-----r   N)r   r   r   __doc___numba_parallel_test_r   unittestskipIfr   r   r   rz   r   r   r   r      s         !  ( X_X+AC C+ +C C++ + +. . . . .r   r   c                       e Zd ZdZdS )DynClassN)r   r   r   r;   rz   r   r   r   r     s        AAAr   r   c                     t          j        d          5  dt          _        t          j        } d d d            n# 1 swxY w Y   t          j        d          5  t          j        }d d d            n# 1 swxY w Y   | |fS )Nintp)beforer   )after)r   objmoder   r;   )r   r   s     r   r   r     s    	f	%	%	%  
               
V	$	$	$  
              5=s   ;??A44A8;A8c                      t          j        dd          } | d         }|j        dk    sJ |j        dk    sJ t	          |          }d|_        t          ||           d S )Nz"numba.tests.cloudpickle_main_classr   )run_namer   r   )runpy
run_moduler   r   r   _check_dyn_class)glbsr   r   s      r   r   r     sy    ,  D
 MEz))))>S    %LLEENUE"""""r   c                 l    t          |           }|j        dk    sJ d|_        t          ||            d S r   )r	   r   r   )r   r   s     r   r   r   *  s=    %LLE>S    ENUE"""""r   c                       fd} |             t          |          }| urt          d           |             t          |          }| urt          d           |             d S )Nc                  <     j         dk    rt          d          d S )Nr   zCheck failed. Klass reset.)r   AssertionErrorr   s   r   r   z_check_dyn_class.<locals>.check4  s'    >S   !=>>> ! r   zExpected reuse)r	   r   )r   r   r   loadeds   `   r   r   r   3  s    ? ? ? ? ? 
EGGG5\\FU-...	EGGG5\\FU-...	EGGGGGr   r   )r   r   r   r   r}   r~   r   multiprocessingr   r   numba.core.errorsr   numba.tests.supportr   numba.core.target_extensionr   numba.cloudpickler   r	   serialize_usecasesr   r   r   rA   r   r   r   r   r   r   mainrz   r   r   <module>r      s       				       



  ' ' ' ' ' '  ) ) ) ) ) ) ( ( ( ( ( ( C C C C C C * * * * * * * * ! ! ! !n< n< n< n< n<X n< n< n<b" " " " "H " " "$3. 3. 3. 3. 3.H 3. 3. 3.l    v   
  # # #"# # #  " zHMOOOOO r   