
    J/PhP+                     <   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  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loadsc                       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S )TestDispatcherPicklingc                 \    t          t          j        dz             D ]} ||g|R i | d S )N   )rangepickleHIGHEST_PROTOCOL)selfmethargskwargsprotos        Z/var/www/html/test/jupyter/venv/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                     ddl m} |                     | j        |dd           |                     | j        |dd           d S )Nr   )add_with_sig   r      )333333?g@)serialize_usecasesr/   r   r-   )r   r/   s     r   test_call_with_sigz)TestDispatcherPickling.test_call_with_sig4   sR    444444q&IIIq*MMMMMr   c                     ddl m} |                     | j        |dd           |                     | j        |dd           |                     | j        |dd           d S )	Nr   )add_without_sigr0   r1         @r3   g333333@abc)abc)r4   r7   r   r-   )r   r7   s     r   test_call_without_sigz,TestDispatcherPickling.test_call_without_sig:   sn    777777!VLLL#zRRR%UUUUUr   c                     ddl m} |                     | j        |dd           |                     | j        |t          t                      t                      f           d S )Nr   )add_nopythonr8   r9   )r4   r?   r   r-   r   object)r   r?   s     r   test_call_nopythonz)TestDispatcherPickling.test_call_nopythonA   sb    444444sJOOO{VXXW]W_W_L`aaaaar   c                 V    ddl m} |                     | j        |t          d           d S )Nr   )add_nopython_fail)r      )r4   rC   r   r-   r   )r   rC   s     r   test_call_nopython_failz.TestDispatcherPickling.test_call_nopython_failG   s8    9999991BKQWXXXXXr   c                 L    ddl m} |                     | j        |dd           d S )Nr   )get_global_objmodeg      @)g      @)r4   rG   r   r-   )r   rG   s     r   test_call_objmode_with_globalz4TestDispatcherPickling.test_call_objmode_with_globalL   s7    ::::::1CS&QQQQQr   c                 b    ddl m}  |d          }|                     | j        |dd           d S )Nr   closure   )rD      )r4   rK   r   r-   )r   rK   inners      r   test_call_closurez(TestDispatcherPickling.test_call_closureP   sC    //////

6BBBBBr   c                 \    ddl m}  |di |}|                     | j        |dd           d S )Nr   )closure_with_globals      @g      @      @)rR   )r4   rQ   r   r-   )r   jit_argsrQ   rN   s       r   check_call_closure_with_globalsz6TestDispatcherPickling.check_call_closure_with_globalsU   sL    <<<<<<$$55H55VDDDDDr   c                 2    |                      d           d S )NT)nopythonrV   r   s    r   'test_call_closure_with_globals_nopythonz>TestDispatcherPickling.test_call_closure_with_globals_nopythonZ       ,,d,;;;;;r   c                 2    |                      d           d S )NT)forceobjrY   rZ   s    r   &test_call_closure_with_globals_objmodez=TestDispatcherPickling.test_call_closure_with_globals_objmode]   r\   r   c                 b    ddl m}  |d          }|                     | j        |dd           d S )Nr   )closure_calling_other_functionrR   g      &@)rT   g      @)r4   ra   r   r-   )r   ra   rN   s      r   (test_call_closure_calling_other_functionz?TestDispatcherPickling.test_call_closure_calling_other_function`   sF    FFFFFF..s33jIIIIIr   c                 b    ddl m}  |d          }|                     | j        |dd           d S )Nr   closure_calling_other_closurerR   g       @rS   )r4   re   r   r-   )r   re   rN   s      r   'test_call_closure_calling_other_closurez>TestDispatcherPickling.test_call_closure_calling_other_closuree   sF    EEEEEE--c22VDDDDDr   c                 L    ddl m} |                     | j        |dd           d S )Nr   )dyn_func$   rL   )r4   rh   r   r-   )r   rh   s     r   test_call_dyn_funcz)TestDispatcherPickling.test_call_dyn_funcj   s6    0000002tDDDDDr   c                 L    ddl m} |                     | j        |dd           d S )Nr   )dyn_func_objmoderi   rj   )r4   rm   r   r-   )r   rm   s     r   test_call_dyn_func_objmodez1TestDispatcherPickling.test_call_dyn_func_objmodeo   s7    8888881A2tLLLLLr   c                 b    ddl m}  |d          }|                     | j        ||d           d S )Nr   )get_renamed_module        )rq   )r4   rp   r   r-   )r   rp   expecteds      r   test_renamed_modulez*TestDispatcherPickling.test_renamed_modulet   sT    :::::: &%c**1C (&	2 	2 	2 	2 	2r   c                     ddl m}  |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.
        r   rd   rR   zif 1:
            import pickle

            data = {pickled!r}
            func = pickle.loads(data)
            res = func(4.0)
            assert res == 8.0, res
            -cN )
r4   re   r   r   formatlocals
subprocessr-   sys
executable)r   re   r(   r+   codes        r   test_other_processz)TestDispatcherPickling.test_other_process|   s    
 	FEEEEE,,S11,t$$  # #  # # 	s~tT:;;;;;r   c                    ddl m}  |d          }t          j        |          } |d          }t          j        |          }t          j        |          }t          j        |          }t          j        |          }|                     ||           |                      |dd          d           |                                 |                      |dd          d	           |                     ||           |                      |dd          d	            |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.
        r   rJ   r0   rL   rD   rM   
   r2         *   +         N)r4   rK   r   r   r	   assertIsassertEqualdisable_compileassertIsNotgccollect)	r   rK   r(   r+   func2pickled2fghs	            r   
test_reusez!TestDispatcherPickling.test_reuse   s    	0/////wqzz,t$$

<&&L!!L!!L""a1a"%%%	1a"%%%A1a"%%% wqzz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
        ru   N)ry   r-   rz   r{   )r   r|   s     r   test_imp_deprecationz+TestDispatcherPickling.test_imp_deprecation   s+     	s~tT:;;;;;r   N)__name__
__module____qualname__r   
contextlibcontextmanagerr    r-   r5   r=   rA   rE   rH   rO   rV   r[   r_   rb   rf   rk   rn   rs   r}   r   r   rv   r   r   r   r      sr       ) ) ) 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< < <$$& $& $&L< < < < <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   r@   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   rv   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   classvarrv   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   rv   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   rv   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;   rv   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   0  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>.check:  s'    >S   !=>>> ! r   zExpected reuse)r	   r   )r   r   r   loadeds   `   r   r   r   9  s    ? ? ? ? ? 
EGGG5\\FU-...	EGGG5\\FU-...	EGGGGGr   r   )r   r   r   r   ry   rz   r   multiprocessingr   r   numba.core.errorsr   numba.tests.supportr   numba.core.target_extensionr   numba.cloudpickler   r	   r   r   r   r@   r   r   r   r   r   r   mainrv   r   r   <module>r      s       				       



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