
    xKgP+                     "   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:                          yy)    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y)TestDispatcherPicklingc                 ^    t        t        j                  dz         D ]  } ||g|i |  y )N   )rangepickleHIGHEST_PROTOCOL)selfmethargskwargsprotos        ^/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_serialize.pyrun_with_protocolsz)TestDispatcherPickling.run_with_protocols   s.    622Q67E((( 8    c              #      K   d}t        |      }|j                  } t        |j                        |      |_        	 d  ||_        y # ||_        w xY ww)Ncpu)r   targetdescrtype)r   hwstrdispatcher_cls	old_descrs       r   simulate_fresh_targetz,TestDispatcherPickling.simulate_fresh_target   sT     4U;"..	%ET.*D*D%Ee%L"	3 *3N&N&s   :AA	 A		AAc                       fd} ||       t        j                  ||      } j                         5  t        j                  |      } ||       d d d        y # 1 sw Y   y xY w)Nc                     t        t              r%t        t              r j                  | g  y j                   |         y )N)
isinstancer   
issubclass	ExceptionassertRaisesassertPreciseEqual)funcr   expected_resultr   s    r   check_resultz7TestDispatcherPickling.check_call.<locals>.check_result&   sB    ?D1	:!!!/4?$?''d_Er   )r   r   r    r	   )r   r   r(   r)   r   r*   picklednew_funcs   `  ``   r   
check_callz!TestDispatcherPickling.check_call%   sQ    	F 	T,,tU+'')||G,H" *))s   A  A)c                     ddl m} | j                  | j                  |dd       | j                  | j                  |dd       y )Nr   )add_with_sig   r      )333333?g@)serialize_usecasesr/   r   r-   )r   r/   s     r   test_call_with_sigz)TestDispatcherPickling.test_call_with_sig4   s5    4q&Iq*Mr   c                     ddl m} | j                  | j                  |dd       | j                  | j                  |dd       | j                  | j                  |dd       y )	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:   sM    7!VL#zR%Ur   c                     ddl m} | j                  | j                  |dd       | j                  | j                  |t        t               t               f       y )Nr   )add_nopythonr8   r9   )r4   r?   r   r-   r   object)r   r?   s     r   test_call_nopythonz)TestDispatcherPickling.test_call_nopythonA   s@    4sJO{VXW]W_L`ar   c                 T    ddl m} | j                  | j                  |t        d       y )Nr   )add_nopython_fail)r      )r4   rC   r   r-   r   )r   rC   s     r   test_call_nopython_failz.TestDispatcherPickling.test_call_nopython_failG   s    91BKQWXr   c                 L    ddl m} | j                  | j                  |dd       y )Nr   )get_global_objmodeg      @)g      @)r4   rG   r   r-   )r   rG   s     r   test_call_objmode_with_globalz4TestDispatcherPickling.test_call_objmode_with_globalL   s    :1CS&Qr   c                 \    ddl m}  |d      }| j                  | j                  |dd       y )Nr   closure   )rD      )r4   rK   r   r-   )r   rK   inners      r   test_call_closurez(TestDispatcherPickling.test_call_closureP   s&    /
6Br   c                 \    ddl m}  |di |}| j                  | j                  |dd       y )Nr   )closure_with_globalsg      @      @)      @)r4   rQ   r   r-   )r   jit_argsrQ   rN   s       r   check_call_closure_with_globalsz6TestDispatcherPickling.check_call_closure_with_globalsU   s*    <$5H5VDr   c                 (    | j                  d       y )NT)nopythonrV   r   s    r   'test_call_closure_with_globals_nopythonz>TestDispatcherPickling.test_call_closure_with_globals_nopythonZ       ,,d,;r   c                 (    | j                  d       y )NT)forceobjrY   rZ   s    r   &test_call_closure_with_globals_objmodez=TestDispatcherPickling.test_call_closure_with_globals_objmode]   r\   r   c                 \    ddl m}  |d      }| j                  | j                  |dd       y )Nr   )closure_calling_other_functionrT   g      &@)rS   g      @)r4   ra   r   r-   )r   ra   rN   s      r   (test_call_closure_calling_other_functionz?TestDispatcherPickling.test_call_closure_calling_other_function`   s'    F.s3jIr   c                 \    ddl m}  |d      }| j                  | j                  |dd       y )Nr   closure_calling_other_closurerT   g       @rR   )r4   re   r   r-   )r   re   rN   s      r   'test_call_closure_calling_other_closurez>TestDispatcherPickling.test_call_closure_calling_other_closuree   s'    E-c2VDr   c                 L    ddl m} | j                  | j                  |dd       y )Nr   )dyn_func$   rL   )r4   rh   r   r-   )r   rh   s     r   test_call_dyn_funcz)TestDispatcherPickling.test_call_dyn_funcj   s    02tDr   c                 L    ddl m} | j                  | j                  |dd       y )Nr   )dyn_func_objmoderi   rj   )r4   rm   r   r-   )r   rm   s     r   test_call_dyn_func_objmodez1TestDispatcherPickling.test_call_dyn_func_objmodeo   s    81A2tLr   c                 \    ddl m}  |d      }| j                  | j                  ||d       y )Nr   )get_renamed_module        )rq   )r4   rp   r   r-   )r   rp   expecteds      r   test_renamed_modulez*TestDispatcherPickling.test_renamed_modulet   s-    : &c*1C (&	2r   c                     ddl m}  |d      }t        j                  |      } dj                  di t               }t        j                  t        j                  d|g       y)z}
        Check that reconstructing doesn't depend on resources already
        instantiated in the original process.
        r   rd   rT   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,S1,,t$  #  # 	s~~tT:;r   c                 r   ddl m}  |d      }t        j                  |      } |d      }t        j                  |      }t        j                  |      }t        j                  |      }t        j                  |      }| j                  ||       | j                   |dd      d       |j                          | j                   |dd      d	       | j                  ||       | j                   |dd      d	        |d
      } |dd       t        j                  |      }~t        j                          t        j                  |      }t        j                  |      }| j                  ||       | j                   |dd      d       |j                          | j                   |dd      d       y)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qz,,t$
<<&LL!LL!LL"a1a"%	1a"%A1a"% qzR,,t$


LL!LL!a1a"%	1a"%r   c                 T    d}t        j                  t        j                  d|g       y)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      s    ) 3 3#NVbY
RC
E
<<J
E
E
M
2<$$&L<r   r   c                       e Zd Zd Zy)TestSerializationMiscc                     ddl m} t               }t        j                  |      }t        |      } |t        |      ||      }| j                  ||        |t        |      ||      }| j                  ||       y )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   sf    8X
,,z*j!r*~w?z*r*~w?dD!r   N)r   r   r   r   rv   r   r   r   r      s    "r   r   c                   ^    e Zd ZdZdZd Z ej                  e dk(  d      d        Zd Z	d Z
y	)
TestCloudPickleIssueszOThis test case includes issues specific to the cloudpickle implementation.
    Fc                       G d d      fd} fd}t              } |         |        t        |        |        t        |        |        y )Nc                       e Zd ZdZy)ITestCloudPickleIssues.test_dynamic_class_reset_on_unpickle.<locals>.KlassNr   r   r   classvarrv   r   r   Klassr          Hr   r   c                      d _         y Nd   )r   r   s   r   mutatorzKTestCloudPickleIssues.test_dynamic_class_reset_on_unpickle.<locals>.mutator   s
     ENr   c                  >    j                   j                  d       y r   )r   r   )r   r   s   r   checkzITestCloudPickleIssues.test_dynamic_class_reset_on_unpickle.<locals>.check   s    U^^S1r   r   )r   r   r   savedr   s   `   @r   $test_dynamic_class_reset_on_unpicklez:TestCloudPickleIssues.test_dynamic_class_reset_on_unpickle   sD    	 		!	2 e	eer   __main__z*Test cannot run as when module is __main__c                     t        d      }|j                  t              }|j                          |j	                  d       | j                  |j                  d       y )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   sJ     !zz!CzD

		"	*r   c                      G d d      }t        |      }t        d      }|j                  t        |f      }|j	                          |j                  d       | j                  |j                  d       y )Nc                       e Zd ZdZy)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   sc    	 	 e !zz!B%zR

		"	*r   c                 d    t        j                  t              }| j                   |       d       y )N)r   r   )numbanjit
issue_7356r   )r   cfuncs     r   test_dynamic_class_issue_7356z3TestCloudPickleIssues.test_dynamic_class_issue_7356  s"    

:&*-r   N)r   r   r   __doc___numba_parallel_test_r   unittestskipIfr   r   r   rv   r   r   r   r      sG    !( X__X+AC+C++.r   r   c                       e Zd ZdZy)DynClassN)r   r   r   r;   rv   r   r   r   r     s    Ar   r   c                     t        j                  d      5  dt        _        t        j                  } d d d        t        j                  d      5  t        j                  }d d d         |fS # 1 sw Y   <xY w# 1 sw Y    fS xY w)Nintp)beforer   )after)r   objmoder   r;   )r   r   s     r   r   r     sb    	f	%
 
& 
V	$

 
%5= 
&	% 
%5=s   A.A:.A7:Bc                      t        j                  dd      } | d   }|j                  dk(  sJ |j                  dk7  sJ t	        |      }d|_        t        ||       y )Nz"numba.tests.cloudpickle_main_classr   )run_namer   r   )runpy
run_moduler   r   r   _check_dyn_class)glbsr   r   s      r   r   r     sc    ,D
 MEz)))>>S   %LEENUE"r   c                 b    t        |       }|j                  dk7  sJ d|_        t        ||        y r   )r	   r   r   )r   r   s     r   r   r   0  s.    %LE>>S   ENUE"r   c                       fd} |        t        |      }| urt        d       |        t        |      }| urt        d       |        y )Nc                  :     j                   dk7  rt        d      y )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  sS    ? 
G5\FU-..	G5\FU-..	Gr   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 *v<X v<r"H ""3.H 3.lv 
#"#" zHMMO r   