
    h;                       S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
JrJr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SKr S SKrS SK J!r"   S SK%r%S SK&J'r'  S SK(J)r)  S SK&J*r*  S SK&J+r+  S SK&J,r,  S SK-J.r.  S S	K-J/r/J0r0  S S
K-J1r1J2r2  S SK-J3r3  SSK4J5r5  SSK4J6r6  SSK4J7r7  SSK4J8r8  Sq9Sr: " S S5      r;\'Rx                  4S jr=S r>S r?S r@ " S S\R                  5      rB " S S\B5      rCS rDS rES rFS  rGS! rHS" rI\JS#:X  a  \R                  " 5         gg! \#\$4 a    SrSr" Nf = f! \# a    Sr% Nf = f)$    N)
itemgetter
attrgetterwrapspickle)register_pickle_by_value)unregister_pickle_by_value)list_registry_pickle_by_value)_should_pickle_by_reference)_make_empty_cellcell_set)_extract_class_dict_whichmodule)_lookup_module_and_qualname   )subprocess_pickle_echo)subprocess_pickle_string)assert_run_python_script)subprocess_workerdefault_valueanother_valuec                        \ rS rSrS rS rSrg)RaiserOnPickleB   c                     Xl         g Nexc)selfr   s     b/home/james-whalen/.local/lib/python3.13/site-packages/srsly/tests/cloudpickle/cloudpickle_test.py__init__RaiserOnPickle.__init__D   s        c                     U R                   er   r   r    s    r!   
__reduce__RaiserOnPickle.__reduce__G   s    hhr$   r   N)__name__
__module____qualname____firstlineno__r"   r'   __static_attributes__ r$   r!   r   r   B   s    r$   r   c                 R    [         R                  " [        R                  " XS95      $ )z]Helper function to test whether object pickled with cloudpickle can be
depickled with pickle
protocol)r   loadscloudpickledumps)objr1   s     r!   pickle_depickler6   K   s     <<))#ABBr$   c                 &    U R                  SS5      $ )N\z\\\\)replace)raw_filepaths    r!   _escaper;   R   s    g..r$   c                 L     U R                  U5        U $ ! [         a     U $ f = fr   )remove
ValueError)list_items     r!   _maybe_removerA   W   s3    T L  Ls    
##c                      " S S[         5      n  " S S5      n " S SX5      n[        U5      n[        UR                  5       5      / SQ:X  d   eUS   S	:X  d   eUS
   b   eUS   " U" 5       5      U" 5       R	                  5       :X  d   eg )Nc                       \ rS rSrSrS rSrg)"test_extract_class_dict.<locals>.A`   zA docstringc                     g)Nar.   r&   s    r!   method)test_extract_class_dict.<locals>.A.methodb       r$   r.   N)r)   r*   r+   r,   __doc__rH   r-   r.   r$   r!   ArD   `   s
    	r$   rL   c                   "    \ rS rSrSrSrS rSrg)"test_extract_class_dict.<locals>.Be   zB docstring*   c                     g)Nbr.   r&   s    r!   rH   )test_extract_class_dict.<locals>.B.methodi   rJ   r$   r.   N)r)   r*   r+   r,   rK   
B_CONSTANTrH   r-   r.   r$   r!   BrN   e   s    
	r$   rU   c                       \ rS rSrSrS rSrg)"test_extract_class_dict.<locals>.Cl   +   c                     g)Ncr.   r&   s    r!   method_c+test_extract_class_dict.<locals>.C.method_co   rJ   r$   r.   N)r)   r*   r+   r,   
C_CONSTANTr\   r-   r.   r$   r!   CrW   l   s    
	r$   r_   )r^   rK   r\   r^   rY   rK   r\   )intr   sortedkeysr\   )rL   rU   r_   clsdicts       r!   test_extract_class_dictrd   _   s    C 
 A  "!$G',,.!%JJJJ< B&&&9%%%:qs#qs||~555r$   c                   	   \ rS rSr\R
                  rS rS r\	R                  R                  \R                  " 5       S:g  =(       d%    \R                  S:  =(       a    \R                  S:  SS9S	 5       rS
 rS r\	R                  R'                  SS9S 5       rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#S r$S r%S r&S  r'S! r(S" r)\	R                  R                  \R                  " 5       S#:H  S$S9S% 5       r*S& r+S' r,S( r-S) r.S* r/S+ r0S, r1S- r2S. r3S/ r4S0 r5S1 r6S2 r7S3 r8S4 r9S5 r:S6 r;S7 r<S8 r=S9 r>S: r?S; r@\	R                  R                  \R                  " 5       S<:H  =(       a    \R                  S=S> S?:  =(       d\    \R                  " 5       S#:H  =(       dA    \R                  S=S> S?:H  =(       a    \R                  S@:  =(       d    \R                  S=S> SA:  SBS9SC 5       rBSD rC\	R                  R                  \R                  " 5       S#:H  SES9SF 5       rD\	R                  R                  \ES=L SGS9SH 5       rF\	R                  R                  SI\R                  s=:*  =(       a    SJ:  Os  SKS9SL 5       rGSM rHSN rISO rJSP rKSQ rLSR rMSS rNST rOSU rPSV rQSW rRSX rSSY rTSZ rUS[ rV\	R                  R'                  S\S9S] 5       rWS^ rXS_ rYS` rZSa r[\	R                  R                  \R                  " 5       S#:H  SbS9Sc 5       r\Sd r]Se r^Sf r_Sg r`Sh raSi rb\	R                  R'                  SjS9Sk 5       rcSl rdSm re\	R                  R                  \R                  Sn:  SoS9Sp 5       rfSq rgSr rhSs riSt rjSu rk\lR                  " \n" \oSv5      (       + Sw5      Sx 5       rpSy rqSz rrS{ rsS| rtS} ruS~ rv\	R                  R                  \n" \oR                  S5      (       + SS9S 5       rxS ryS rzS r{S r|S r}S r~S rS rS rS rS rS rS rS rS rS rS rS r\	R                  R'                  SS9S 5       rS rS r\	R                  R                  \R                  S:  SS9S 5       rSrg=)CloudPickleTesty   c                 6    [         R                  " SS9U l        g )Ntmp_cloudpickle_test_)prefix)tempfilemkdtemptmpdirr&   s    r!   setUpCloudPickleTest.setUp}   s    &&.EFr$   c                 D    [         R                  " U R                  5        g r   )shutilrmtreerm   r&   s    r!   tearDownCloudPickleTest.tearDown   s    dkk"r$   CPython)      r   )rv   rw      z3Underlying bug fixed upstream starting Python 3.8.2)reasonc                      " S S5      nU" 5       n[         R                  " U5      n[        R                  " U5        AU" 5       b   S5       eg )Nc                       \ rS rSrSrg)FCloudPickleTest.test_reducer_override_reference_cycle.<locals>.MyClass   r.   Nr)   r*   r+   r,   r-   r.   r$   r!   MyClassr|          r$   r   z)'del'-ed my_object has not been collected)weakrefrefr3   r4   )r    r   	my_objectwrs       r!   %test_reducer_override_reference_cycle5CloudPickleTest.test_reducer_override_reference_cycle   sF    	 	 I	[[#)$t|HHH|r$   c                    [        S5      n[        S5      n[        X R                  S9nU R	                  U" U5      U" U5      5        [        SS5      n[        X R                  S9nU R	                  U" U5      U" U5      5        g )N
   r   r0   r   rv   )ranger   r6   r1   assertEqual)r    dgettergetter2s       r!   test_itemgetterCloudPickleTest.test_itemgetter   sl    "IA!&==AGAJ/Aq!!&==AGAJ/r$   c                 "    " S S5      nU" 5       n[        S5      n[        X0R                  S9nU R                  U" U5      U" U5      5        [        SS5      n[        X0R                  S9nU R                  U" U5      U" U5      5        U" 5       Ul        [        S5      n[        X0R                  S9nU R                  U" U5      U" U5      5        [        SS5      n[        X0R                  S9nU R                  U" U5      U" U5      5        g )Nc                       \ rS rSrS rSrg)*CloudPickleTest.test_attrgetter.<locals>.C   c                     U$ r   r.   )r    r@   s     r!   __getattr__6CloudPickleTest.test_attrgetter.<locals>.C.__getattr__   s    r$   r.   Nr)   r*   r+   r,   r   r-   r.   r$   r!   r_   r      s    r$   r_   rG   r0   rR   ze.aze.b)r   r6   r1   r   e)r    r_   r   r   r   s        r!   test_attrgetterCloudPickleTest.test_attrgetter   s    	 	 CC!&==AGAJ/C%!&==AGAJ/cE"!&==AGAJ/E5)!&==AGAJ/r$   zRequires pytest -s to passc                     [         R                  n[        R                  " [        R
                  " XR                  S95      nU R                  X5        g Nr0   )sysstderrr   r2   r3   r4   r1   r   )r    out1out2s      r!   test_pickling_file_handles*CloudPickleTest.test_pickling_file_handles   s6    zz||K--d]]KL$r$   c                    ^   " S S5      nU" 5       q T R                  [        U 4S j5        S nT R                  SUR                  R
                  ;   5        [        R                  " U5        g )Nc                       \ rS rSrS rSrg)6CloudPickleTest.test_func_globals.<locals>.Unpicklable   c                     [        S5      e)Nznot picklable	Exceptionr&   s    r!   r'   ACloudPickleTest.test_func_globals.<locals>.Unpicklable.__reduce__   s    00r$   r.   Nr)   r*   r+   r,   r'   r-   r.   r$   r!   Unpicklabler      s    1r$   r   c                  J   > [         R                  " [        T R                  S9$ r   )r3   r4   exitr1   r&   s   r!   <lambda>3CloudPickleTest.test_func_globals.<locals>.<lambda>   s    [->->4==.*r$   c                  0    [         R                  " S5        g )Nr   )r   r   r.   r$   r!   foo.CloudPickleTest.test_func_globals.<locals>.foo   s    HHQKr$   r   )r   assertRaisesr   
assertTrue__code__co_namesr3   r4   )r    r   r   s   `  r!   test_func_globals!CloudPickleTest.test_func_globals   s[    	1 	1
 }) &* 	+	 	#,,"7"778#r$   c                     [        S5      n[        XR                  S9nU R                  U[	        U5      5        [        SSS5      n[        XR                  S9nU R                  U[	        U5      5        g ! [
         a     g f = f)NHellor0   rx   rv   )bufferr6   r1   r   str	NameError)r    
buffer_objbuffer_clones      r!   test_bufferCloudPickleTest.test_buffer   st    	J*:NL\3z?;A.J*:NL\3z?; 		s   A4A7 7
BBc                 |    [        S5      nU R                  [        XR                  S9UR	                  5       5        g )Ns   Hellor0   
memoryviewr   r6   r1   tobytesr    r   s     r!   test_memoryviewCloudPickleTest.test_memoryview   s1    )
mmL#++-	/r$   c                     SSS.R                  5       n[        U5      nU R                  X!5        [        U[        R
                  5      (       d   eg Nr   rx   rG   rR   )rb   r6   r   
isinstance_collections_abc	dict_keysr    rb   resultss      r!   test_dict_keysCloudPickleTest.test_dict_keys   sG    Q$$&!$'''#3#=#=>>>>r$   c                     SSS.R                  5       n[        U5      nU R                  [        U5      [        U5      5        [	        U[
        R                  5      (       d   eg r   )valuesr6   r   ra   r   r   dict_valuesr    r   r   s      r!   test_dict_values CloudPickleTest.test_dict_values   sQ    q!((*!&)&.9'#3#?#?@@@@r$   c                     SSS.R                  5       n[        U5      nU R                  X!5        [        U[        R
                  5      (       d   eg r   )itemsr6   r   r   r   
dict_itemsr    r   r   s      r!   test_dict_itemsCloudPickleTest.test_dict_items   sG    a &&(!%(('#3#>#>????r$   c                     [         R                  " SS/5      R                  5       n[        U5      nU R	                  X!5        [        U5      [        U5      :X  d   eg N)rG   r   )rR   rx   )collectionsOrderedDictrb   r6   r   typer   s      r!   test_odict_keysCloudPickleTest.test_odict_keys   sN    &&(';<AAC!$''DzT']***r$   c                     [         R                  " SS/5      R                  5       n[        U5      nU R	                  [        U5      [        U5      5        [        U5      [        U5      :X  d   eg r   )r   r   r   r6   r   listr   r   s      r!   test_odict_values!CloudPickleTest.test_odict_values   sX    (((H)=>EEG!&)gV5F|tG},,,r$   c                     [         R                  " SS/5      R                  5       n[        U5      nU R	                  X!5        [        U5      [        U5      :X  d   eg r   )r   r   r   r6   r   r   r   s      r!   test_odict_items CloudPickleTest.test_odict_items   sN    ''8(<=CCE!%((E{d7m+++r$   c                     [        S5      SSS2   nU R                  [        XR                  S9UR	                  5       5        g )Ns   Hello!Hello!Hello!rx      r0   r   r   s     r!   )test_sliced_and_non_contiguous_memoryview9CloudPickleTest.test_sliced_and_non_contiguous_memoryview  s<    .qAv6
mmL#++-	/r$   c                     [        S[        S5      -  5      nU R                  [        XR                  S9UR                  5       5        g )Ns   Hello!g    cAr0   )r   r`   r   r6   r1   r   r   s     r!   test_large_memoryview%CloudPickleTest.test_large_memoryview	  s:    	CH 45
mmL#++-	/r$   c                 X    U R                  [        S U R                  S9" 5       S5        g )Nc                      gNr   r.   r.   r$   r!   r   -CloudPickleTest.test_lambda.<locals>.<lambda>  s    r$   r0   r   r   r6   r1   r&   s    r!   test_lambdaCloudPickleTest.test_lambda  s$    	DMMBDa	Ir$   c                    ^^^ Su  mmU4S jmUU4S jnU R                  [        XR                  S9" S5      S5        g )N)r   rx   c                    > U T-   $ r   r.   )xrG   s    r!   r   5CloudPickleTest.test_nested_lambdas.<locals>.<lambda>  s	    q1ur$   c                    > T" U 5      T-  $ r   r.   )r   rR   f1s    r!   r   r     s    r!uzr$   r0   r   r   )r    f2rG   rR   r  s     @@@r!   test_nested_lambdas#CloudPickleTest.test_nested_lambdas  s4    1!mmDQGKr$   c                     S nS n[        U" 5       U R                  S9nU R                  U" 5       U5        [        U" S5      U R                  S9nU R                  U" S5      S5        g )Nc                     ^  U 4S jm T $ )Nc                     > T $ r   r.   gs   r!   r	  =CloudPickleTest.test_recursive_closure.<locals>.f1.<locals>.g  s    r$   r.   r  s   @r!   r  2CloudPickleTest.test_recursive_closure.<locals>.f1  s    Hr$   c                    ^ ^ U U4S jmT$ )Nc                 0   > U S::  a  T$ U T" U S-
  5      -  $ r   r.   )nbaser	  s    r!   r	  =CloudPickleTest.test_recursive_closure.<locals>.f2.<locals>.g  s      Avt71qQx<7r$   r.   )r  r	  s   `@r!   r  2CloudPickleTest.test_recursive_closure.<locals>.f2  s    8Hr$   r0   rx         r6   r1   r   )r    r  r  g1g2s        r!   test_recursive_closure&CloudPickleTest.test_recursive_closure  sZ    	
	
 RTDMM:r"RUT]];A$r$   c                     S nU R                  UR                  S L SS9  [        XR                  S9nU R                  UR                  S L SS9  g )Nc                      g)z-a function with no closure cells
            Nr.   r.   r$   r!   f9CloudPickleTest.test_closure_none_is_preserved.<locals>.f*      r$   zf actually has closure cells!msgr0   z.g now has closure cells even though f does not)r   __closure__r6   r1   r    r  r	  s      r!   test_closure_none_is_preserved.CloudPickleTest.test_closure_none_is_preserved)  sY    	 	MMT!/ 	 	

 A6MMT!@ 	 	
r$   c                 *   S nU" 5       n[         R                  " [        5         U" 5         S S S 5        [        X R                  S9n[         R                  " [        5         U" 5         S S S 5        g ! , (       d  f       NL= f! , (       d  f       g = f)Nc                     ^  U4S jn U $ )Nc                  
   > T   g r   r.   )cells   r!   r	  ?CloudPickleTest.test_empty_cell_preserved.<locals>.f.<locals>.g?  s    r$   r.   )r	  r'  s    @r!   r  4CloudPickleTest.test_empty_cell_preserved.<locals>.f;  s     Hr$   r0   )pytestraisesr   r6   r1   )r    r  r  r  s       r!   test_empty_cell_preserved)CloudPickleTest.test_empty_cell_preserved:  sa    	 S]]9%D & R--8]]9%D &%	 &% &%s   A3"B3
B
Bc                 j    S n[        U" 5       U R                  S9nU R                  U" 5       S5        g )Nc                     ^ SS1mU4S jn U $ )Nr   rx   c                     > [        T 5      $ r   )len)ss   r!   r	  =CloudPickleTest.test_unhashable_closure.<locals>.f.<locals>.gP  s    1vr$   r.   )r	  r2  s    @r!   r  2CloudPickleTest.test_unhashable_closure.<locals>.fM  s    AA Hr$   r0   rx   r  r!  s      r!   test_unhashable_closure'CloudPickleTest.test_unhashable_closureL  s-    	 AC$--8a r$   c                     " S S5      n " S SU5      nU R                  U" 5       R                  5       S5        [        X R                  S9nU R                  U" 5       R                  5       S5        U R                  UR                  S5        U" 5       n[        X@R                  S9nU R                  UR                  5       S5        g )Nc                       \ rS rSrS rSrg)NCloudPickleTest.test_dynamically_generated_class_that_uses_super.<locals>.BaseiZ  c                     gr   r.   r&   s    r!   rH   UCloudPickleTest.test_dynamically_generated_class_that_uses_super.<locals>.Base.method[  s    r$   r.   Nr)   r*   r+   r,   rH   r-   r.   r$   r!   Baser9  Z  s    r$   r=  c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )QCloudPickleTest.test_dynamically_generated_class_that_uses_super.<locals>.Derivedi^  Derived Docstringc                 &   > [         TU ]  5       S-   $ r   )superrH   )r    	__class__s    r!   rH   XCloudPickleTest.test_dynamically_generated_class_that_uses_super.<locals>.Derived.method`  s    w~'!++r$   r.   )r)   r*   r+   r,   rK   rH   r-   __classcell__)rC  s   @r!   Derivedr?  ^  s    , ,r$   rF  rx   r0   r@  )r   rH   r6   r1   rK   )r    r=  rF  UnpickledDerivedorig_dr   s         r!   0test_dynamically_generated_class_that_uses_super@CloudPickleTest.test_dynamically_generated_class_that_uses_superX  s    	 		,d 	,
 	))+Q/ +7]]K)+224a8 	)113FG F]];Q'r$   c                     " S S5      nXl         U" 5       Ul        [        XR                  S9n[        U" 5       5      nU R	                  U" 5       R                  5       S5        U R	                  UR                  5       R                  5       S5        U R	                  UR                  R                  5       S5        U R	                  UR                  5       S5        g )Nc                       \ rS rSrS rSrg):CloudPickleTest.test_cycle_in_classdict_globals.<locals>.Cit  c                     g)Nwoohoo!r.   r&   s    r!   it_worksCCloudPickleTest.test_cycle_in_classdict_globals.<locals>.C.it_worksv  s     r$   r.   N)r)   r*   r+   r,   rP  r-   r.   r$   r!   r_   rM  t  s    !r$   r_   r0   rO  )C_againinstance_of_Cr6   r1   r   rP  )r    r_   depickled_Cdepickled_instances       r!   test_cycle_in_classdict_globals/CloudPickleTest.test_cycle_in_classdict_globalsr  s    	! 	!
 	#%a--@,QS1 	//19=,,.7799E22;;=yI+446	Br$   c                   ^^^ SmU4S jmU R                  [        TU R                  S9" SS5      S5        U R                  [        TU R                  S9" SS5      S5        U4S	 jm " UUU4S
 jS5      n[        XR                  S9nU R                  U" S5      R                  5       S5        U R                  U" S5      R	                  S5      S5        [        XR                  S9nU R                  U" S5      R	                  S5      S5        U R                  [        U" S5      5      R                  5       S5        U R                  [        U" S5      5      R	                  S5      S5        [        U" S5      U R                  S9nU R                  UR	                  S5      S5        U R                  [        U" S5      R                  5      " 5       S5        U R                  [        U" S5      R                  5      " S5      S5        [        U" S5      R                  U R                  S9nU R                  U" S5      S5        g )NrP   c                 :   > [        [        S5      5        X-   T-  $ )Nr   )sumr   )r   yLOCAL_CONSTANTs     r!   some_functionNCloudPickleTest.test_locally_defined_function_and_class.<locals>.some_function  s    b	NE^++r$   r0   )   r   Q   rv   rx   c                     > T $ r   r.   )r\  s   r!   r   ICloudPickleTest.test_locally_defined_function_and_class.<locals>.<lambda>      .r$   c                   :   > \ rS rSrSrS rU U4S jrU4S jrSrg)JCloudPickleTest.test_locally_defined_function_and_class.<locals>.SomeClassi  z:Overly complicated class with nested references to symbolsc                     Xl         g r   valuer    rh  s     r!   r"   SCloudPickleTest.test_locally_defined_function_and_class.<locals>.SomeClass.__init__  s    "
r$   c                    > TT" 5       -  $ r   r.   )r    r\  hidden_constants    r!   oneNCloudPickleTest.test_locally_defined_function_and_class.<locals>.SomeClass.one  s    %(999r$   c                 R   > U R                  5       T" US5      -   U R                  -   $ r   )rm  rh  )r    r   r]  s     r!   some_methodVCloudPickleTest.test_locally_defined_function_and_class.<locals>.SomeClass.some_method  s$    xxzM!Q$77$**DDr$   rg  N)	r)   r*   r+   r,   rK   r"   rm  rp  r-   )r\  rl  r]  s   r!   	SomeClassre    s    L#:E Er$   rr  r     )r   r6   r1   rm  rp  r   )r    rr  clone_classnew_instance
new_methodr\  rl  r]  s        @@@r!   'test_locally_defined_function_and_class7CloudPickleTest.test_locally_defined_function_and_class  s   	, 	OPRTUVXYZOPRTUVXYZ0		E 		E &i--HQ++-q1Q33B7;,YOQ33B7; 	16::<a@16BB2FJ-il7;}}F11"5q9 	1)9)9:<a@1)A)AB2FJ+IaL,D,D59]]D
B+r$   c                     [         R                  " [        S5      n[        XR                  S9nU R                  U" S5      S5        g )Nr   r0      )	functoolspartialminr6   r1   r   )r    partial_objpartial_clones      r!   test_partialCloudPickleTest.test_partial  s7    ''Q/'mmLq)1-r$   PyPyz"Skip numpy and scipy tests on PyPyc                 6   [         (       aA  U R                  [        [         R                  U R                  S9[         R                  5        O [
        (       aA  U R                  [        [
        R                  U R                  S9[
        R                  5        g g r   )npr   r6   addr1   sppivr&   s    r!   
test_ufuncCloudPickleTest.test_ufunc  sd     2_RVVdmmLVV% 3_SVVdmmL VV% r$   c                     Sn[         R                  " [         R                  " XR                  S95      nU R	                  X5        g )Nr   rx   rv   rz  r0   )r3   r2   r4   r1   r   )r    r5   returned_objs      r!   test_loads_namespace$CloudPickleTest.test_loads_namespace  s9    "(():):--*) *+r$   c                     Sn[         R                  " 5       n[        R                  " X5        UR	                  S5        [        R
                  " U5      nU R                  X5        g )Nr  r   )ioBytesIOr3   dumpseekloadr   )r    r5   bior  s       r!   test_load_namespace#CloudPickleTest.test_load_namespace  sI    jjl""'',+r$   c                     S n[        XR                  S9n[        U" S5      5      [        U" S5      5      :X  d   e[        U" S5      5      [        [	        S5      5      :X  d   eg )Nc              3   8   #    [        U 5       H  nUv   M	     g 7fr   )r   )cntis     r!   some_generator6CloudPickleTest.test_generator.<locals>.some_generator  s     3Z  s   r0   rv   )r6   r1   r   r   r   )r    r  gen2s      r!   test_generatorCloudPickleTest.test_generator  sU    	 ~FDG}^A%6 7777DG}U1X...r$   c                 4    " S S5      nUR                   S   nUR                   S   n[        X R                  S9Ul        [        X0R                  S9Ul        U R                  UR                  5       S5        U R                  UR	                  5       S5        g )Nc                   4    \ rS rSr\S 5       r\S 5       rSrg)+CloudPickleTest.test_classmethod.<locals>.Ai  c                      g)Nsmr.   r.   r$   r!   test_sm3CloudPickleTest.test_classmethod.<locals>.A.test_sm      r$   c                     gNcmr.   clss    r!   test_cm3CloudPickleTest.test_classmethod.<locals>.A.test_cm  r  r$   r.   N)	r)   r*   r+   r,   staticmethodr  classmethodr  r-   r.   r$   r!   rL   r    s&      r$   rL   r  r  r0   r  r  )__dict__r6   r1   r  r  r   )r    rL   r  r  s       r!   test_classmethod CloudPickleTest.test_classmethod  sv    	 	 ZZ	"ZZ	"#B?	#B?	d+d+r$   c                      " S S5      n[        UR                  U R                  S9Ul        U R                  UR                  5       S5        g )Nc                   $    \ rS rSr\S 5       rSrg)1CloudPickleTest.test_bound_classmethod.<locals>.Ai  c                     gr  r.   r  s    r!   r  9CloudPickleTest.test_bound_classmethod.<locals>.A.test_cm  r  r$   r.   N)r)   r*   r+   r,   r  r  r-   r.   r$   r!   rL   r    s     r$   rL   r0   r  )r6   r  r1   r   )r    rL   s     r!   test_bound_classmethod&CloudPickleTest.test_bound_classmethod  s:    	 	
 $AIIF	d+r$   c                 f    [        [        R                  5      nU R                  U" S5      S5        g )NabcABC)r6   r   upperr   )r    r  s     r!   test_method_descriptors'CloudPickleTest.test_method_descriptors   s$    CII&55)r$   c                      " S S5      n[        UR                  U R                  S9nU R                  UR                  UR                  R                  5        g )Nc                       \ rS rSrS rSrg)<CloudPickleTest.test_instancemethods_without_self.<locals>.Fi  c                     US-   $ r   r.   r    r   s     r!   r  >CloudPickleTest.test_instancemethods_without_self.<locals>.F.f  s    1ur$   r.   N)r)   r*   r+   r,   r  r-   r.   r$   r!   Fr    s    r$   r  r0   )r6   r  r1   r   r)   )r    r  r	  s      r!   !test_instancemethods_without_self1CloudPickleTest.test_instancemethods_without_self  s>    	 	 ACC$--8QSS\\2r$   c                 `    [        [        U R                  S9nU R                  [        U5        g r   )r6   r   r1   r   )r    pickle_clones     r!   test_moduleCloudPickleTest.test_module  s"    &vF.r$   c                 .   [         R                  " S5      nSn[        [        R                  " U5      UR
                  5        [        XR                  S9nU R                  UR                  UR                  5        U R                  UR                  S5      UR                  S5      5        U R                  UR                  5       R                  S5      UR                  5       R                  S5      5        [        R                  " 5       S:w  a  [        XR                  S9nU R                  UR                  UR                  5        U R                  UR                  S5      UR                  S5      5        U R                  UR                  5       R                  S5      UR                  5       R                  S5      5        [        X/5      u  pSU R                  [!        U5      [!        U5      5         U["        R$                  S'   [        UR                  U R                  S9nU R                  UR                  S5      U" S5      5        ["        R$                  R'                  SS 5        g ! ["        R$                  R'                  SS 5        f = f)Nmodz
        x = 1
        def f(y):
            return x + y

        class Foo:
            def method(self, x):
                return f(x)
        r0   r  r  )types
ModuleTypeexectextwrapdedentr  r6   r1   r   r   r  FoorH   platformpython_implementationr   idr   modulespop)r    r  codemod2mod3mod1depickled_fs          r!   test_dynamic_module#CloudPickleTest.test_dynamic_module  s   u% 	X__T"CLL1s]];'q466!9-))!,dhhj.?.?.BC))+v5)#FDSUUDFF+SUU1Xtvvay1SWWY--a0$((*2C2CA2FG %cZ0
D2d8,	)!$CKK)#%%$--HKSUU1X{1~6KKOOE4(CKKOOE4(s   9AI2 2"Jc                    [         R                  R                  U R                  S5      nSnUR	                  [        U5      S9n SSKJn  U" 5       n[        US5       n[        R                  " XEU R                  S9  S S S 5        [        [        R                  " U5      5        [         R                  " U5        g ! , (       d  f       ND= f! [         R                  " U5        f = f)Nzlocal_func_g.pklz
        from srsly.cloudpickle.compat import pickle
        import gc
        with open("{pickled_func_path}", 'rb') as f:
            func = pickle.load(f)

        assert func(range(10)) == 45
        )pickled_func_pathr   )make_local_functionwbr0   )ospathjoinrm   formatr;   !srsly.tests.cloudpickle.testutilsr  openr3   r  r1   r   r  r  unlink)r    r  child_process_scriptr  r	  r  s         r!   test_module_locals_behavior+CloudPickleTest.test_module_locals_behavior6  s    
 GGLL6HI   4::")*;"<  ;  >	)M#%A'.!  > / %X__5I%JK II'( /. II'(s$   C  B=?'C =
CC C&c                     " S S5      n[         R                  " S5      n[        SUR                  5        UR	                  S5      S:X  d   eSUR                  ;   d   eU" 5       n[
        R                  " [        5         [        R                  " U5        S S S 5        [        UR                  S   [        5      (       a  X2R                  S   S'   O?[        UR                  S   [         R                  5      (       a  X2R                  S   l        [        X R                  S	9nSUR                  ;   d   e[        UR                  S   [        5      (       a  S
UR                  ;   d   eOI[        UR                  S   [         R                  5      (       a  [!        UR                  S
5      (       d   eUR	                  S5      S:X  d   eUR	                  S5      S:X  d   eg ! , (       d  f       GNT= f)Nc                       \ rS rSrS rSrg)XCloudPickleTest.test_dynamic_module_with_unpicklable_builtin.<locals>.UnpickleableObjecti\  c                     [        S5      e)NzUnpicklable object)r>   r&   s    r!   r'   cCloudPickleTest.test_dynamic_module_with_unpicklable_builtin.<locals>.UnpickleableObject.__reduce__]  s     !566r$   r.   Nr   r.   r$   r!   UnpickleableObjectr  \  s    7r$   r  r  zf = lambda x: abs(x)r   __builtins__unpickleable_objr0   abs)r  r  r  r  r  r*  r+  r>   r3   r4   r   dictr  r6   r1   r  hasattr)r    r  r  unpicklable_objdepickled_mods        r!   ,test_dynamic_module_with_unpicklable_builtin<CloudPickleTest.test_dynamic_module_with_unpicklable_builtinV  s   	7 	7 u%#S\\2uuRyA~~---,.]]:&o. ' cll>2D99?NLL();<^4e6F6FGG<KLL(9'mmD!7!7777m,,^<dCCM66666&&~68H8HJ J=55u====r"a''' uuRyA~~7 '&s   G%%
G4c                 l   [         R                  " S5      nSn[        [        R                  " U5      UR
                  5        [        R                  R                  U R                  S5      n[        R                  R                  U R                  S5      nSnSnUR                  US9nUR                  [        U5      [        U5      [        U5      U R                  S9n [        US	5       n[        R                  " XU R                  S
9  S S S 5        [!        [        R                  " U5      5        [        R                  R#                  U5      (       a  [        R$                  " U5        [        R                  R#                  U5      (       a  [        R$                  " U5        g g ! , (       d  f       N= f! [        R                  R#                  U5      (       a  [        R$                  " U5        [        R                  R#                  U5      (       a  [        R$                  " U5        f f = f)Nr  z
        x = 1
        z&dynamic_module_from_parent_process.pklz%dynamic_module_from_child_process.pklau  
            from srsly.cloudpickle.compat import pickle
            import textwrap

            import srsly.cloudpickle as cloudpickle
            from srsly.tests.cloudpickle.testutils import assert_run_python_script


            child_of_child_process_script = {child_of_child_process_script}

            with open('{parent_process_module_file}', 'rb') as f:
                mod = pickle.load(f)

            with open('{child_process_module_file}', 'wb') as f:
                cloudpickle.dump(mod, f, protocol={protocol})

            assert_run_python_script(textwrap.dedent(child_of_child_process_script))
            z '''
                from srsly.cloudpickle.compat import pickle
                with open('{child_process_module_file}','rb') as fid:
                    mod = pickle.load(fid)
                ''' )child_process_module_file)parent_process_module_filer  child_of_child_process_scriptr1   r  r0   )r  r  r  r  r  r  r  r  r  rm   r  r;   r1   r  r3   r  r   existsr  )r    r  r  r  r  r  r  fids           r!   .test_load_dynamic_module_in_grandchild_process>CloudPickleTest.test_load_dynamic_module_in_grandchild_process  s    u% 	X__T"CLL1 &(WW\\KKA&C"$&GGLLKK@%B! ()% )F(L(L*C )M )E%  4::'./I'J&-.G&H*12O*P]]	  ;  $	50$73  DMMB 8 %X__5I%JK ww~~899		45ww~~788		34 9 87 ww~~899		45ww~~788		34 9s%   "F< . F+'F< +
F95F< <A7H3c                    ^ S mS nU4S jn[         R                  " X R                  S9nSU;   d   eSU;   d   eSU;  d   eSU;  d   eg )	Nc                     U S-   $ r   r.   r   s    r!   nested_functionDCloudPickleTest.test_correct_globals_import.<locals>.nested_function  s    q5Lr$   c                 .    [         R                  " U 5      $ r   )mathexpr  s    r!   unwanted_functionFCloudPickleTest.test_correct_globals_import.<locals>.unwanted_function  s    88A;r$   c                    > T" U 5      U-   $ r   r.   )r   r[  r  s     r!   my_small_functionFCloudPickleTest.test_correct_globals_import.<locals>.my_small_function  s    "1%))r$   r0   s   my_small_functions   nested_functions   unwanted_functions   math)r3   r4   r1   )r    r  r  rR   r  s       @r!   test_correct_globals_import+CloudPickleTest.test_correct_globals_import  sc    			* /--H $q(((!Q&&&#1,,,ar$   c                    [         R                  " S5        SSKJn  SS KnSS KnSS Kn[        U5      (       d   e[        UR                  5      (       d   e[        U5      (       d   e[        UR                  5      (       d   e[        R                  " S5      n[        U5      (       a   e[        R                  " 5       S:X  a  SS Kn[        U5      (       d   eSS KJs  Jn  [        U5      (       d   e[%        X`R&                  S9UL d   eSSKJn  [        U5      (       d   e[%        XpR&                  S9UL d   e[         R,                  " [.        5         SS KnS S S 5        SSKJn	  [        U	5      (       a   e[5        U	S	5      (       a   e[%        XR&                  S9n
XLd   eU	R7                  S
5      U
R7                  S
5      :X  d   eSS KJs  Js  Jn  [        U5      (       d   e[%        XR&                  S9UL d   eSn[         R,                  " [<        US9   [        [?        5       5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)N_cloudpickle_testpkgr   r   dynamic_moduler  r0   )dynamic_submodule_two)submodule_threer*   r   z.cannot check importability of object instancesmatch) r*  importorskipsrsly.cloudpickle.compatr   os.pathr   collections.abcr   r  r  r  r  r  r  _codecs*_cloudpickle_testpkg.mod.dynamic_submoduler  dynamic_submoduler6   r1   _cloudpickle_testpkg.modr  r+  ImportError(_cloudpickle_testpkg.mod.submodule_threer  r  r  ?_cloudpickle_testpkg.mod.dynamic_submodule.dynamic_subsubmoduledynamic_subsubmodule	TypeErrorobject)r    r   r  r   r  r#  mm2r  m3depickled_m3r  expecteds                r!   test_module_importability)CloudPickleTest.test_module_importability  s   233*62222*2773333*;7777*;??;;;;))*:;.~>>>>))+v5.w7777 	?>*1----q==9Q>>> 	I +2....rMM:b@@@ ]];'; (B.r2222 2|,,,,&rMMB%%%ttAw,..++++ 	UT*2....rMM:b@@@C]]9H5'1 65' ('& 65s   H>!I>
I
Ic                 \    U R                  [        [        [        U R                  S95        g r   )r   Ellipsisr6   r1   r&   s    r!   test_EllipsisCloudPickleTest.test_Ellipsis  s!    (DMMJ	Lr$   c                 `    [        [        U R                  S9nU R                  [        U5        g r   )r6   NotImplementedr1   r   )r    ExcClones     r!   test_NotImplemented#CloudPickleTest.test_NotImplemented!  s"    ">DMMJ2r$   c                 t    [        [        S 5      U R                  S9nU R                  [        S 5      U5        g r   )r6   r   r1   r   r    ress     r!   test_NoneTypeCloudPickleTest.test_NoneType%  s*    d4j4==AdS)r$   c                     [        [        [        5      U R                  S9nU R	                  [        [        5      U5        g r   )r6   r   r5  r1   r   r>  s     r!   test_EllipsisType!CloudPickleTest.test_EllipsisType)  s*    d8nt}}Eh-r$   c                     [        [        [        5      U R                  S9nU R	                  [        [        5      U5        g r   )r6   r   r9  r1   r   r>  s     r!   test_NotImplementedType'CloudPickleTest.test_NotImplementedType-  s,    d>2T]]Kn-s3r$   c                     [        [        U R                  S9[        L d   eSSKJn  [        XR                  S9UL d   eg )Nr0   r   )mkdir)r6   zipr1   r  rI  )r    rI  s     r!   test_builtin_function%CloudPickleTest.test_builtin_function1  s7    
 sT]];sBBBu}}=FFFr$   c                     [         [        [        [        [        [
        4 H:  n[        UR                  U R                  S9n[        U" U5      U5      (       a  M:   e   g r   )
r   tupleset	frozensetr  r,  r6   __new__r1   r   )r    t
cloned_news      r!   test_builtin_type_constructor-CloudPickleTest.test_builtin_type_constructor<  sF    
 uc9dF:A(T]]KJjmQ//// ;r$   c                 4   SnUR                   n[        U5      R                   n[        U5      R                  S   nX4L d   e[        X R                  S9n[        X0R                  S9n[        X@R                  S9nU" 5       U" 5       :X  d   eXcL d   eXtL d   eg )N      ?hexr0   )rX  r   r  r6   r1   )r    r5   bound_classicmethodunbound_classicmethodclsdict_classicmethoddepickled_bound_methdepickled_unbound_methdepickled_clsdict_meths           r!   test_builtin_classicmethod*CloudPickleTest.test_builtin_classicmethodQ  s    !gg $S	 $S	 2 25 9$===.-- 9!0!MM";!0!MM";
 $%)<)>>>>%>>>%>>>r$   aarch64Nrx   )rv   r   )rv   r   rw   )rv      zFails on aarch64 + python 3.10+ in cibuildwheel, currently unable to replicate failure elsewhere; fails sometimes for pypy on conda-forge; fails for python 3.10.8+ and 3.11+c                 l   SnUR                   n[        U5      R                   n[        U5      R                  S   n[        X R                  S9n[        X0R                  S9n[        X@R                  S9nSnU" U5      U" U5      :X  d   eU" U5      U" U5      :X  d   e[
        R                  " 5       S:X  a  U" U5      U" [        U5      :X  d   e[
        R                  " 5       S:X  aK  [        U5      [        U5      :X  d   eUR                  [        U5      UR                  [        U5      :X  d   eg g )NrW  fromhexr0   0x1ru   r  )	rd  r   r  r6   r1   r  r  float__func__)	r    r5   bound_clsmethodunbound_clsmethodclsdict_clsmethodr\  r]  r^  args	            r!   test_builtin_classmethod(CloudPickleTest.test_builtin_classmethodh  sC    ++ I-- )%  /mm 5!0"7!0"7 
 $C(OC,@@@@%c*.?.DDDD))+y8 *#.2CE32OOOO))+v5 ./48I3JJJJ)22s099%EF F F 6r$   c                 (   SnUR                   n[        U5      R                   n[        U5      R                  S   n[        X R                  S9n[        X0R                  S9n[        X@R                  S9nU" 5       U" 5       :X  d   eXcL d   eXtL d   eg )NrW  __repr__r0   )ro  r   r  r6   r1   )r    r5   bound_slotmethodunbound_slotmethodclsdict_slotmethodr\  r]  r^  s           r!   test_builtin_slotmethod'CloudPickleTest.test_builtin_slotmethod  s    <<!#Y//!#Y//
;.}} 6!0"8!0"8
 $%)9);;;;%;;;%;;;r$   z0No known staticmethod example in the pypy stdlibc                 r   SnUR                   n[        U5      R                   n[        U5      R                  S   nX#L d   e[        X R                  S9n[        X0R                  S9n[        X@R                  S9nXRL d   eXcL d   eUR
                  UR
                  L d   e[        U5      [        U5      L   g )Nr   	maketransr0   )rv  r   r  r6   r1   rg  )r    r5   bound_staticmethodunbound_staticmethodclsdict_staticmethodr\  r]  r^  s           r!   test_builtin_staticmethod)CloudPickleTest.test_builtin_staticmethod  s      ]]#Cy22#Cy11+>!999. 8!0 ==":!0 ==": $999%=== &..2F2O2OOOO#$-A(BBr$   ztest needs Tornado installedc                   ^^	 SSK Jm	Jn  T	R                  U	4S j5       mT	R                  UU	4S j5       n[        R
                  " X"/U R                  S9nS =mn[        R                  " U5      u  pEU R                  XEL 5        UR                  R                  5       nUR                  [        R                  " US5      5      nU R                  US5        g )Nr   )genioloopc              3   Z   >#    TR                  U 5      v   TR                  US-   5      e7fr   )sleepReturn)r   r[  r}  s     r!   r  1CloudPickleTest.test_tornado_coroutine.<locals>.f  s'     ))A,**QU##s   (+c              3   J   >#    T" SU 5      v nTR                  US-   5      e7f)Ng{Gz?r   )r  )r[  r?  r  r}  s     r!   r	  1CloudPickleTest.test_tornado_coroutine.<locals>.g  s'     $
"C**S1W%%s    #r0   r  rs  )tornador}  r~  	coroutiner3   r4   r1   r   r2   r   IOLoopcurrentrun_syncr{  r|  r   )
r    r~  r	  datar  g3loopr?  r  r}  s
           @@r!   test_tornado_coroutine&CloudPickleTest.test_tornado_coroutine  s     	(		$ 
	$ 
	& 
	&   !$--@Ad#!}}$$&mmI--b!45a r$   )rv   rb  r   beta)rv   rb  r   r  rz  z.https://github.com/python/cpython/issues/92932c                 $   Sn[        SU5       Vs/ s H  nSU-  PM
     nn[        R                  " S5      nU Vs0 s H  oUUR                  S5      _M     nnSR	                  SR                  U5      S9n[        [        R                  " U5      Xf5        US	   nU" 5       n	[        R                  " X/U R                  S
9n
S =ph[        R                  " U
5      u  pU R                  XL 5        U R                  U" 5       U	5        g s  snf s  snf )Ni r   zg%drP   d   zx
        import zlib

        def f():
            x = {tup}
            return zlib.crc32(bytes(bytearray(x)))
        z, )tupr  r0   )r   randomRandom	randranger  r  r  r  r  r3   r4   r1   r   r2   r   r   )r    nvarsr  namesrnamer   r  r  r?  r  r  f3s                r!   test_extended_arg!CloudPickleTest.test_extended_arg  s     $)!UO4OqO4MM"0561;;s##6 Ftyy'F( 	 	X__T"A)cFc  !$--@d#!s#) 56s
   DDc                     SS K qS n[        R                  " XR                  S9nB[        [        R                  5       H.  nUR                  S5      S   S:X  d  M  [        R                  U	 M0     [        R                  " U5      nU" 5         g )Nr   c                  L    [         R                  R                  R                  n g r   xmletreeElementTreeCommentr  s    r!   example/CloudPickleTest.test_submodule.<locals>.example  s    		%%--Ar$   r0   .r  )xml.etree.ElementTreer  r3   r4   r1   r   r   r  splitr   r2   )r    r  r2  r@   r  s        r!   test_submoduleCloudPickleTest.test_submodule  so     	%	. g> %Dzz#q!U*KK% &
 LLO	r$   c                 $   S nU" 5       n[         R                  " X R                  S9n[        [        R
                  5       H.  nUR                  S5      S   S:X  d  M  [        R
                  U	 M0     [         R                  " U5      nU" 5         g )Nc                     ^ SS K mU4S jn U $ )Nr   c                  F   > TR                   R                  R                  n g r   )r  r  r  )r   r  s    r!   r  FCloudPickleTest.test_submodule_closure.<locals>.scope.<locals>.example  s    II))11r$   )r  )r  r  s    @r!   scope5CloudPickleTest.test_submodule_closure.<locals>.scope  s    (2Nr$   r0   r  r   r  )r3   r4   r1   r   r   r  r  r2   )r    r  r  r2  r@   r  s         r!   test_submodule_closure&CloudPickleTest.test_submodule_closure  sq    	
 'g> %Dzz#q!U*KK% & a 	r$   c                    S nSS K qU" 5       n[        R                  " X R                  S9nS[
        R                  " U5      R                  S5      -   S-   n[        R                  " [        R                  SU/5      (       a   eg )Nc                      S n U $ )Nc                  L    [         R                  R                  R                  n g r   r  r  s    r!   r  ACloudPickleTest.test_multiprocess.<locals>.scope.<locals>.example(  s    II))11r$   r.   )r  s    r!   r  0CloudPickleTest.test_multiprocess.<locals>.scope'  s    2Nr$   r   r0   [import base64; from srsly.cloudpickle.compat import pickle; pickle.loads(base64.b32decode('ascii'))()-c)r  r  r3   r4   r1   base64	b32encodedecode
subprocesscallr   
executabler    r  r  r2  commands        r!   test_multiprocess!CloudPickleTest.test_multiprocess%  s}    	
 	%'g>5 ##A&--g67 	
 ??CNND'#BCCCCCr$   c                    S nU" 5       nSS K Js  Jq  [        R                  " X R
                  S9nS[        R                  " U5      R                  S5      -   S-   n[        R                  " [        R                  SU/5      (       a   eg )Nc                      ^ SS K Jm  U4S jn U $ )Nr   c                  >   > [         R                  n TR                  n g r   )r  r  r  )r   foobars    r!   r  ;CloudPickleTest.test_import.<locals>.scope.<locals>.example@  s    MM&&r$   )	xml.etreer  )r  r  s    @r!   r  *CloudPickleTest.test_import.<locals>.scope>  s    &' Nr$   r   r0   r  r  r  r  )r  r  r  r3   r4   r1   r  r  r  r  r  r   r  r  s        r!   test_importCloudPickleTest.test_import:  s    	 '--g>5 ##A&--g67 	
 ??CNND'#BCCCCCr$   c                     [         R                  " 5       n[        R                  " [        SS9   [
        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nz4only be shared between processes through inheritancer  )multiprocessingLockr*  r+  RuntimeErrorr3   r4   )r    locks     r!    test_multiprocessing_lock_raises0CloudPickleTest.test_multiprocessing_lock_raisesP  s:    ##%]]</efd# gffs   A
Ac                     [        5       n[        R                  " [        5         UR                    S S S 5        [        5       n[        X5        U R                  UR                  UL SS9  g ! , (       d  f       N@= f)Nzcell contents not set correctlyr  )r   r*  r+  r>   cell_contentsr,  r   r   )r    r'  obs      r!   test_cell_manipulation&CloudPickleTest.test_cell_manipulationU  s`    !]]:& ' X"$1 	 	
 '&s   A,,
A:c                 v   [         R                  " U5      n[        X R                  S9nU R	                  X2L X245        [
        R                  " U5      nSR                  [        R                  " U5      R                  S5      5      n[        R                  " [        R                  SSU/[        R                  [        R                   S9nUR#                  5       u  pxU R%                  UR'                  5       S5        U R%                  UR)                  5       R                  5       SUR*                   S	35        g )
Nr0   zif 1:
            import base64, srsly.cloudpickle as cloudpickle, logging

            logging.basicConfig(level=logging.INFO)
            logger = cloudpickle.loads(base64.b32decode(b'{}'))
            logger.info('hello')
            r  z	-W ignorer  )stdoutr   r   zINFO:z:hello)logging	getLoggerr6   r1   r   r3   r4   r  r  r  r  r  Popenr   r  PIPESTDOUTcommunicater   waitstripr  )	r    r  loggerpickleddumpedr  procout_s	            r!   check_loggerCloudPickleTest.check_loggerb  s    ""4(!&==A)G+<=""6* v''/66w?@ 	 dD I'1'1'8'8: !!#a(++- V4	6r$   c                 H    U R                  S 5        U R                  S5        g )Nzcloudpickle.dummy_test_logger)r  r&   s    r!   test_loggerCloudPickleTest.test_loggerx  s    $9:r$   c                     [        [        R                  [        R                  5      (       d   e[        [        R                  5      nU R                  U[        R                  5        g r   )r   rf  realr  GetSetDescriptorTyper6   assertIs)r    depickled_descriptors     r!   test_getset_descriptor&CloudPickleTest.test_getset_descriptor~  sA    %**e&@&@AAAA.uzz:*EJJ7r$   c                    [         R                  " SS0 5      n " S S5      n " S S5      nUR                  U5        [        X!5      (       a   e[        X15      (       d   e[        R
                  " U5      nSU;  d   eSU;   d   e[        R                  " U5      n[        X%5      (       a   e[        X55      (       d   eg )	Nr   r.   c                       \ rS rSrSrg)DCloudPickleTest.test_abc_cache_not_pickled.<locals>.MyUnrelatedClassi  r.   Nr~   r.   r$   r!   MyUnrelatedClassr    r   r$   r  c                       \ rS rSrSrg)BCloudPickleTest.test_abc_cache_not_pickled.<locals>.MyRelatedClassi  r.   Nr~   r.   r$   r!   MyRelatedClassr    r   r$   r  s   MyUnrelatedClasss   MyRelatedClass)r  ABCMetaregister
issubclassr3   r4   r2   )r    r   r  r  r2  depickled_classs         r!   test_abc_cache_not_pickled*CloudPickleTest.test_abc_cache_not_pickled  s     ++iR0	 		 	 	(.8888.2222g&"!+++ A%%%%++A..@@@@.::::r$   c                 0  ^^  " S S[         R                  5      n " U4S jSU5      mUR                  [        5        T" 5       n[	        XR
                  S9n[	        TU R
                  S9n[	        U5      n[        [        U5      (       d   e[        [        U5      (       d   eU R                  U" 5       R                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       S5        U R                  U" 5       R                  5       S5        U R                  UR                  5       S5        U R                  U" 5       R                  S5        U R                  UR                  S5        U R                  [        U5         " U4S jSU5      mU R                  T" 5       R                  5       S	5         " S
 SU5      nU R                  [        U5        g )Nc                       \ rS rSr\R
                  S 5       r\\R
                  S 5       5       r\	\R
                  S 5       5       r
\\R
                  S 5       5       rSrg)/CloudPickleTest.test_abc.<locals>.AbstractClassi  c                     gzA methodNr.   r&   s    r!   rp  ;CloudPickleTest.test_abc.<locals>.AbstractClass.some_method  r  r$   c                     gzA classmethodNr.   r  s    r!   some_classmethod@CloudPickleTest.test_abc.<locals>.AbstractClass.some_classmethod  r  r$   c                      gzA staticmethodNr.   r.   r$   r!   some_staticmethodACloudPickleTest.test_abc.<locals>.AbstractClass.some_staticmethod  r  r$   c                      gz
A propertyNr.   r.   r$   r!   some_property=CloudPickleTest.test_abc.<locals>.AbstractClass.some_property  r  r$   r.   N)r)   r*   r+   r,   r  abstractmethodrp  r  r  r  r  propertyr  r-   r.   r$   r!   AbstractClassr    s       $   $ %   % !   !r$   r  c                   R   > \ rS rSrS r\U 4S j5       r\S 5       r\	S 5       r
Srg)/CloudPickleTest.test_abc.<locals>.ConcreteClassi  c                     gN	it works!r.   r&   s    r!   rp  ;CloudPickleTest.test_abc.<locals>.ConcreteClass.some_method      "r$   c                    > U T:X  d   egr  r.   r  ConcreteClasss    r!   r  @CloudPickleTest.test_abc.<locals>.ConcreteClass.some_classmethod      m+++"r$   c                      gr  r.   r.   r$   r!   r  ACloudPickleTest.test_abc.<locals>.ConcreteClass.some_staticmethod      "r$   c                     gr  r.   r&   s    r!   r  =CloudPickleTest.test_abc.<locals>.ConcreteClass.some_property  r'  r$   r.   Nr)   r*   r+   r,   rp  r  r  r  r  r  r  r-   r"  s   r!   r"  r    D    # # # # # # #r$   r"  r0   r  c                   R   > \ rS rSrS r\U 4S j5       r\S 5       r\	S 5       r
Srg)7CloudPickleTest.test_abc.<locals>.DepickledBaseSubclassi  c                     gNit works for realz!r.   r&   s    r!   rp  CCloudPickleTest.test_abc.<locals>.DepickledBaseSubclass.some_method      ,r$   c                    > U T:X  d   egr0  r.   r  DepickledBaseSubclasss    r!   r  HCloudPickleTest.test_abc.<locals>.DepickledBaseSubclass.some_classmethod      3333,r$   c                      gr0  r.   r.   r$   r!   r  ICloudPickleTest.test_abc.<locals>.DepickledBaseSubclass.some_staticmethod      ,r$   c                      gr0  r.   r.   r$   r!   r  ECloudPickleTest.test_abc.<locals>.DepickledBaseSubclass.some_property  r;  r$   r.   Nr*  r6  s   r!   r6  r.    D    - - - - - - -r$   r6  r1  c                       \ rS rSrS rSrg)8CloudPickleTest.test_abc.<locals>.IncompleteBaseSubclassi  c                     gNz&this class lacks some concrete methodsr.   r&   s    r!   rp  DCloudPickleTest.test_abc.<locals>.IncompleteBaseSubclass.some_method      ?r$   r.   Nr)   r*   r+   r,   rp  r-   r.   r$   r!   IncompleteBaseSubclassrA        @r$   rG  r  r  r  rN  r6   r1   r   r   rp  r  r  r  r   r+  	r    r  concrete_instancedepickled_baser  rU  rG  r"  r6  s	          @@r!   test_abcCloudPickleTest.test_abc  s   	!CGG 	!(	#M 	#& 	u%)O(O)-37==B,->?%////%0000*668+F+779;G99;[I+<<>L*<<>L+==?M*88+F+99;G)^4	-N 	-" 	.0<<>.	0	@^ 	@ 	)%;<r$   c                 0  ^^  " S S[         R                  5      n " U4S jSU5      mUR                  [        5        T" 5       n[	        XR
                  S9n[	        TU R
                  S9n[	        U5      n[        [        U5      (       d   e[        [        U5      (       d   eU R                  U" 5       R                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       S5        U R                  U" 5       R                  5       S5        U R                  UR                  5       S5        U R                  U" 5       R                  S5        U R                  UR                  S5        U R                  [        U5         " U4S jSU5      mU R                  T" 5       R                  5       S	5         " S
 SU5      nU R                  [        U5        g )Nc                       \ rS rSr\R
                  S 5       r\R                  S 5       r\R                  S 5       r
\R                  S 5       rSrg)5CloudPickleTest.test_abstracts.<locals>.AbstractClassi  c                     gr  r.   r&   s    r!   rp  ACloudPickleTest.test_abstracts.<locals>.AbstractClass.some_method  r  r$   c                     gr  r.   r  s    r!   r  FCloudPickleTest.test_abstracts.<locals>.AbstractClass.some_classmethod  r  r$   c                      gr  r.   r.   r$   r!   r  GCloudPickleTest.test_abstracts.<locals>.AbstractClass.some_staticmethod  r  r$   c                     gr  r.   r&   s    r!   r  CCloudPickleTest.test_abstracts.<locals>.AbstractClass.some_property	  r  r$   r.   N)r)   r*   r+   r,   r  r  rp  abstractclassmethodr  abstractstaticmethodr  abstractpropertyr  r-   r.   r$   r!   r  rQ    sh       $$$ %$ %%% &% !!! "!r$   r  c                   R   > \ rS rSrS r\U 4S j5       r\S 5       r\	S 5       r
Srg)5CloudPickleTest.test_abstracts.<locals>.ConcreteClassi  c                     gr  r.   r&   s    r!   rp  ACloudPickleTest.test_abstracts.<locals>.ConcreteClass.some_method  r  r$   c                    > U T:X  d   egr  r.   r!  s    r!   r  FCloudPickleTest.test_abstracts.<locals>.ConcreteClass.some_classmethod  r$  r$   c                      gr  r.   r.   r$   r!   r  GCloudPickleTest.test_abstracts.<locals>.ConcreteClass.some_staticmethod  r'  r$   c                     gr  r.   r&   s    r!   r  CCloudPickleTest.test_abstracts.<locals>.ConcreteClass.some_property  r'  r$   r.   Nr*  r+  s   r!   r"  r^    r,  r$   r"  r0   r  c                   R   > \ rS rSrS r\U 4S j5       r\S 5       r\	S 5       r
Srg)=CloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclassi8  c                     gr0  r.   r&   s    r!   rp  ICloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclass.some_method9  r3  r$   c                    > U T:X  d   egr0  r.   r5  s    r!   r  NCloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclass.some_classmethod<  r8  r$   c                      gr0  r.   r.   r$   r!   r  OCloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclass.some_staticmethodA  r;  r$   c                     gr0  r.   r&   s    r!   r  KCloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclass.some_propertyE  r;  r$   r.   Nr*  r>  s   r!   r6  rh  8  r?  r$   r6  r1  c                       \ rS rSrS rSrg)>CloudPickleTest.test_abstracts.<locals>.IncompleteBaseSubclassiL  c                     grC  r.   r&   s    r!   rp  JCloudPickleTest.test_abstracts.<locals>.IncompleteBaseSubclass.some_methodM  rE  r$   r.   NrF  r.   r$   r!   rG  rr  L  rH  r$   rG  rI  rJ  s	          @@r!   test_abstractsCloudPickleTest.test_abstracts  s   	!CGG 	!"	#M 	#& 	u%)O(O)-37==B,->?%////%0000*668+F+779;G99;[I+<<>L*<<>L+==?M*88+F+99;G)^4	-N 	-" 	.0<<>.	0	@^ 	@ 	)%;<r$   c                     " S S5      nU" S5      U" S5      U" S5      pCn[         R                  " X#/5      X#U/n[        XPR                  S9nUu  pxpU R	                  UR
                  S5        U R	                  U	R
                  S5        U R	                  U
R
                  S5        U R	                  [        U5      S5        U R	                  [        U5      X15        g )Nc                       \ rS rSrS rSrg)ECloudPickleTest.test_weakset_identity_preservation.<locals>.SomeClassiW  c                     Xl         g r   r  r  s     r!   r"   NCloudPickleTest.test_weakset_identity_preservation.<locals>.SomeClass.__init__X  s    r$   r  Nr)   r*   r+   r,   r"   r-   r.   r$   r!   rr  ry  W  s    r$   rr  r   rx   rv   r0   )r   WeakSetr6   r1   r   r   r1  rO  )r    rr  obj1obj2obj3thingsresultweakset
depickled1
depickled2
depickled3s              r!   "test_weakset_identity_preservation2CloudPickleTest.test_weakset_identity_preservationR  s    
	 	 %Q<1y|D//4,/TB --@6<3Zq)q)q)Wq)W
'?@r$   c                 &  ^ S mS Tl          " U4S jS5      nU" 5       nT" S5      S:X  d   eTUR                  L d   e[        R                  " [        5         UR
                  nS S S 5         U[        R                  S'   [        TS 5      nUS:w  d   eUb   e[        TU R                  S9nU" S5      S:X  d   e [        R                  R                  S5        g ! , (       d  f       N~= f! [        R                  R                  S5        f = f)Nc                     U S-  $ )Nrx   r.   r  s    r!   funcMCloudPickleTest.test_non_module_object_passing_whichmodule_test.<locals>.funcp  s    6Mr$   c                   (   > \ rS rSrS rU 4S jrSrg)XCloudPickleTest.test_non_module_object_passing_whichmodule_test.<locals>.NonModuleObjectiw  c                     S U l         g r   	some_attrr&   s    r!   __ini__`CloudPickleTest.test_non_module_object_passing_whichmodule_test.<locals>.NonModuleObject.__ini__x  s	    !%r$   c                     > US:X  a  T$ [         e)Nr  )AttributeError)r    r  r  s     r!   r   dCloudPickleTest.test_non_module_object_passing_whichmodule_test.<locals>.NonModuleObject.__getattr__{  s     6>K((r$   r  N)r)   r*   r+   r,   r  r   r-   )r  s   r!   NonModuleObjectr  w  s    &	) 	)r$   r  rx   rz  r0   )r*   r  r*  r+  r  r  r   r  r   r6   r1   r  )r    r  non_module_objectr  func_module_namedepickled_funcr  s         @r!   /test_non_module_object_passing_whichmodule_test?CloudPickleTest.test_non_module_object_passing_whichmodule_testi  s    	
 	) 	) ,-Aw!||(----- ]]>*!++A +	/->CKK)*+D$7#'8888#+++,TDMMJN!!$))) KKOO-. +* KKOO-.s   C/AC/ 
C,/!Dc                 >  ^ [         [        R                  4 H  nS H  m " S SU5      n " U4S jS5      nS nTUl        U[        R                  L a	  U" S5      nOU" 5       nU[        R
                  S'    U R                  [        U" 5       5      R                  5       S5        [        X@R                  S	9nU R                  U" 5       S5        [        R
                  R                  SS 5        M     M     g ! [        R
                  R                  SS 5        f = f)
N)_missing_moduleNc                       \ rS rSrS rSrg)BCloudPickleTest.test_unrelated_faulty_module.<locals>.FaultyModulei  c                     [        5       er   r   r    r  s     r!   r   NCloudPickleTest.test_unrelated_faulty_module.<locals>.FaultyModule.__getattr__  s     (k)r$   r.   Nr   r.   r$   r!   FaultyModuler    s    *r$   r  c                   "   > \ rS rSr Y rS rSrg)9CloudPickleTest.test_unrelated_faulty_module.<locals>.Fooi  c                     gr  r.   r&   s    r!   r   =CloudPickleTest.test_unrelated_faulty_module.<locals>.Foo.foo  s    *r$   r.   N)r)   r*   r+   r,   r   r-   )module_names   r!   r  r    s    !,J+r$   r  c                      gr  r.   r.   r$   r!   r   9CloudPickleTest.test_unrelated_faulty_module.<locals>.foo  s    &r$   _faulty_moduler  r0   )r,  r  r  r*   r   r  r   r6   r   r1   r  )r    
base_classr  r  r   faulty_moduleclonedr  s          @r!   test_unrelated_faulty_module,CloudPickleTest.test_unrelated_faulty_module  s    
 "5#3#34J8*: *+ +' "-!1!11$01A$BM$0NM0=,-<$$_SU%;%?%?%A;O -S==IF$$VX{;KKOO$4d;A  9 5B KKOO$4d;s   9AC::"Dzfails for pytest v7.2.0c                    ^ SS K mU4S jnSSKJn  SSKJn  UR                  UR
                  [        TR                  5      '   [        R                  " [        R                  " XR                  S95      nU" 5       nU R                  SU5        g )Nr   c                  \   > TR                   R                  S/5      n U R                  5       $ r   )builtinrO  r  )r2  pys    r!   r  5CloudPickleTest.test_dynamic_pytest_module.<locals>.f  s"    

s#A557Nr$   )CloudPickler)cloudpickle_fastr0   r   )r  srsly.cloudpickler  r  _module_reducedispatch_tabler   r  r3   r2   r4   r1   r   )r    r  r  cp_fastr	  r  r  s         @r!   test_dynamic_pytest_module*CloudPickleTest.test_dynamic_pytest_module  sj     		 	3A8?8N8N##D$45k//MMJKF#r$   c                 |    S n[        XR                  S9nU R                  UR                  UR                  5        g )Nc                     U $ r   r.   r  s    r!   r   ;CloudPickleTest.test_function_module_name.<locals>.<lambda>  s    r$   r0   )r6   r1   r   r*   r    r  r  s      r!   test_function_module_name)CloudPickleTest.test_function_module_name  s/     >**DOO<r$   c                    S n[        US5      (       a9  [        XR                  S9nU R                  UR                  UR                  5        SUl        [        XR                  S9nU R                  UR                  UR                  5        g )Nc                     U $ r   r.   r  s    r!   r  4CloudPickleTest.test_function_qualname.<locals>.func  s    Hr$   r+   r0   z<modifiedlambda>)r  r6   r1   r   r+   r  s      r!   test_function_qualname&CloudPickleTest.test_function_qualname  st    	 4(($TMMBFV00$2C2CD / >,,d.?.?@r$   c                 P    " S S5      nU" 5       nUR                   S:X  d   eUR                   R                  S:X  d   e[        R                  " [        5         SUl         S S S 5        SUl        [        U5      nUR                   S:X  d   eUR
                  S:X  d   e[        R                  " [        5         SUl         S S S 5        SUl        UR
                  S:X  d   e[        U5      R                   R                  S:H    g ! , (       d  f       N= f! , (       d  f       N[= f)Nc                   `    \ rS rSrSrSr\S 5       r\S 5       r\R                  S 5       rSr
g)/CloudPickleTest.test_property.<locals>.MyObjecti  r   c                     U R                   $ )A read-only attribute)_read_only_valuer&   s    r!   read_only_value?CloudPickleTest.test_property.<locals>.MyObject.read_only_value  s     ,,,r$   c                     U R                   $ r   _read_write_valuer&   s    r!   read_write_value@CloudPickleTest.test_property.<locals>.MyObject.read_write_value  s    ---r$   c                     Xl         g r   r  ri  s     r!   r  r    s    ).&r$   r  N)r)   r*   r+   r,   r  r  r  r  r  setterr-   r.   r$   r!   MyObjectr    sN      !- - . . $$/ %/r$   r  r   r  rx   rv   )r  rK   r*  r+  r  r  r6   r   )r    r  r   depickled_objs       r!   test_propertyCloudPickleTest.test_property  s    	/ 	/& J	((A---''//3JJJJ]]>*()I% +%&	"'	2,,111--222 ]]>*()I% + *+&--222]++337NN! +* +*s   D:D
D
D%c                     [         R                  " S/ SQ5      nU" SSS5      nU" SSS5      n[        X!U/U R                  S9u  pEn[	        XA5      (       d   eXB:X  d   eXQL d   e[	        Xa5      (       d   eXc:X  d   eg )NMyTuple)rG   rR   r[   r   rx   rv   r0   )r   
namedtupler6   r1   r   )r    r  t1t2depickled_t1depickled_MyTupledepickled_t2s          r!   test_namedtupleCloudPickleTest.test_namedtuple  s    ((ODQ1Q18G"975 ,0000!!! +++,0000!!!r$   z'fails sometimes for pypy on conda-forgec                 t    SR                  U R                  S9n[        [        R                  " U5      5        g )NaO          from srsly.tests.cloudpickle.testutils import subprocess_pickle_echo

        CONSTANT = 42

        class Foo(object):

            def method(self, x):
                return x

        foo = Foo()

        def f0(x):
            return x ** 2

        def f1():
            return Foo

        def f2(x):
            return Foo().method(x)

        def f3():
            return Foo().method(CONSTANT)

        def f4(x):
            return foo.method(x)

        def f5(x):
            # Recursive call to a dynamically defined function.
            if x <= 0:
                return f4(x)
            return f5(x - 1) + 1

        cloned = subprocess_pickle_echo(lambda x: x**2, protocol={protocol})
        assert cloned(3) == 9

        cloned = subprocess_pickle_echo(f0, protocol={protocol})
        assert cloned(3) == 9

        cloned = subprocess_pickle_echo(Foo, protocol={protocol})
        assert cloned().method(2) == Foo().method(2)

        cloned = subprocess_pickle_echo(Foo(), protocol={protocol})
        assert cloned.method(2) == Foo().method(2)

        cloned = subprocess_pickle_echo(f1, protocol={protocol})
        assert cloned()().method('a') == f1()().method('a')

        cloned = subprocess_pickle_echo(f2, protocol={protocol})
        assert cloned(2) == f2(2)

        cloned = subprocess_pickle_echo(f3, protocol={protocol})
        assert cloned() == f3()

        cloned = subprocess_pickle_echo(f4, protocol={protocol})
        assert cloned(2) == f4(2)

        cloned = subprocess_pickle_echo(f5, protocol={protocol})
        assert cloned(7) == f5(7) == 7
        r0   r  r1   r   r  r  r    r  s     r!   #test_interactively_defined_function3CloudPickleTest.test_interactively_defined_function'  s4    
;v FDMMF*w 	x 	!!67r$   c                     SnS H<  nUR                  U R                  US9n[        [        R                  " U5      5        M>     g )Na;          from srsly.tests.cloudpickle.testutils import subprocess_pickle_echo
        from srsly.cloudpickle import dumps, loads

        def local_clone(obj, protocol=None):
            return loads(dumps(obj, protocol=protocol))

        VARIABLE = "default_value"

        def f0():
            global VARIABLE
            VARIABLE = "changed_by_f0"

        def f1():
            return VARIABLE

        assert f0.__globals__ is f1.__globals__

        # pickle f0 and f1 inside the same pickle_string
        cloned_f0, cloned_f1 = {clone_func}([f0, f1], protocol={protocol})

        # cloned_f0 and cloned_f1 now share a global namespace that is isolated
        # from any previously existing namespace
        assert cloned_f0.__globals__ is cloned_f1.__globals__
        assert cloned_f0.__globals__ is not f0.__globals__

        # pickle f1 another time, but in a new pickle string
        pickled_f1 = dumps(f1, protocol={protocol})

        # Change the value of the global variable in f0's new global namespace
        cloned_f0()

        # thanks to cloudpickle isolation, depickling and calling f0 and f1
        # should not affect the globals of already existing modules
        assert VARIABLE == "default_value", VARIABLE

        # Ensure that cloned_f1 and cloned_f0 share the same globals, as f1 and
        # f0 shared the same globals at pickling time, and cloned_f1 was
        # depickled from the same pickle string as cloned_f0
        shared_global_var = cloned_f1()
        assert shared_global_var == "changed_by_f0", shared_global_var

        # f1 is unpickled another time, but because it comes from another
        # pickle string than pickled_f1 and pickled_f0, it will not share the
        # same globals as the latter two.
        new_cloned_f1 = loads(pickled_f1)
        assert new_cloned_f1.__globals__ is not cloned_f1.__globals__
        assert new_cloned_f1.__globals__ is not f1.__globals__

        # get the value of new_cloned_f1's VARIABLE
        new_global_var = new_cloned_f1()
        assert new_global_var == "default_value", new_global_var
        )local_cloner   )r1   
clone_funcr  )r    code_templater  r  s       r!   *test_interactively_defined_global_variable:CloudPickleTest.test_interactively_defined_global_variablej  sG    4j DJ ''3= ( ?D$X__T%:; Dr$   c                 .   [         S:X  d   e[         n S nS n[        X#/U R                  S9u  pEUR                  UR                  L d   eUR                  UR                  Ld   e[        R
                  " X0R                  S9nU" 5         [         S:X  d   eU" 5       nUS:X  d   U5       e[        R                  " U5      nUR                  UR                  Ld   eUR                  UR                  Ld   eU" 5       n	U	S:X  d   U	5       e Uq g ! Uq f = f)Nr   c                      Sq g )Nchanged_by_f0_TEST_GLOBAL_VARIABLEr.   r$   r!   f0KCloudPickleTest.test_closure_interacting_with_a_global_variable.<locals>.f0  s    (7%r$   c                      [         $ r   r  r.   r$   r!   r  KCloudPickleTest.test_closure_interacting_with_a_global_variable.<locals>.f1  s    ,,r$   r0   r  )r  r6   r1   __globals__r3   r4   r   r2   )
r    
orig_valuer  r  	cloned_f0	cloned_f1
pickled_f1shared_global_varnew_cloned_f1new_global_vars
             r!   /test_closure_interacting_with_a_global_variable?CloudPickleTest.test_closure_interacting_with_a_global_variable  s)   $777*
,	/8- $3B8<@MM$K I
 ((I,A,AAAA((>>> %**2FJ K )O;;;
 !*$7J9JJ7
 #LL4M ,,I4I4IIII ,,BNNBBB +_N!_4DnD4$.!J!s   C8D Dc                 L    SR                  U R                  S9n[        U5        g )Na  if __name__ == "__main__":
        from srsly.tests.cloudpickle.testutils import subprocess_worker

        def interactive_function(x):
            return x + 1

        with subprocess_worker(protocol={protocol}) as w:

            assert w.run(interactive_function, 41) == 42

            # Define a new function that will call an updated version of
            # the previously called function:

            def wrapper_func(x):
                return interactive_function(x)

            def interactive_function(x):
                return x - 1

            # The change in the definition of interactive_function in the main
            # module of the main process should be reflected transparently
            # in the worker process: the worker process does not recall the
            # previous definition of `interactive_function`:

            assert w.run(wrapper_func, 41) == 40
        r0   r  r1   r   r  s     r!   &test_interactive_remote_function_calls6CloudPickleTest.test_interactive_remote_function_calls  s(    2 FDMMF*3 	4 	!&r$   c                 L    SR                  U R                  S9n[        U5        g )NaS  if __name__ == "__main__":
        from srsly.tests.cloudpickle.testutils import subprocess_worker
        import sys

        with subprocess_worker(protocol={protocol}) as w:

            GLOBAL_VARIABLE = 0

            class CustomClass(object):

                def mutate_globals(self):
                    global GLOBAL_VARIABLE
                    GLOBAL_VARIABLE += 1
                    return GLOBAL_VARIABLE

            custom_object = CustomClass()
            assert w.run(custom_object.mutate_globals) == 1

            # The caller global variable is unchanged in the main process.

            assert GLOBAL_VARIABLE == 0

            # Calling the same function again starts again from zero. The
            # worker process is stateless: it has no memory of the past call:

            assert w.run(custom_object.mutate_globals) == 1

            # The symbols defined in the main process __main__ module are
            # not set in the worker process main module to leave the worker
            # as stateless as possible:

            def is_in_main(name):
                return hasattr(sys.modules["__main__"], name)

            assert is_in_main("CustomClass")
            assert not w.run(is_in_main, "CustomClass")

            assert is_in_main("GLOBAL_VARIABLE")
            assert not w.run(is_in_main, "GLOBAL_VARIABLE")

        r0   r  r  s     r!   5test_interactive_remote_function_calls_no_side_effectECloudPickleTest.test_interactive_remote_function_calls_no_side_effect  s+    (P FDMMF*Q 	R 	!&r$   c                 L    SR                  U R                  S9n[        U5        g )Na  if __name__ == "__main__":
        from srsly.tests.cloudpickle.testutils import subprocess_worker

        with subprocess_worker(protocol={protocol}) as w:

            class CustomCounter:
                def __init__(self):
                    self.count = 0
                def increment(self):
                    self.count += 1
                    return self

            counter = CustomCounter().increment()
            assert counter.count == 1

            returned_counter = w.run(counter.increment)
            assert returned_counter.count == 2, returned_counter.count

            # Check that the class definition of the returned instance was
            # matched back to the original class definition living in __main__.

            assert isinstance(returned_counter, CustomCounter)

            # Check that memoization does not break provenance tracking:

            def echo(*args):
                return args

            C1, C2, c1, c2 = w.run(echo, CustomCounter, CustomCounter,
                                   CustomCounter(), returned_counter)
            assert C1 is CustomCounter
            assert C2 is CustomCounter
            assert isinstance(c1, CustomCounter)
            assert isinstance(c2, CustomCounter)

        r0   r  r  s     r!   2test_interactive_dynamic_type_and_remote_instancesBCloudPickleTest.test_interactive_dynamic_type_and_remote_instances"  s+    #F FDMMF*G 	H 	!&r$   c                 L    SR                  U R                  S9n[        U5        g)zSimulate objects stored on workers to check isinstance semantics

Such instances stored in the memory of running worker processes are
similar to dask-distributed futures for instance.
a
  if __name__ == "__main__":
        import srsly.cloudpickle as cloudpickle, uuid
        from srsly.tests.cloudpickle.testutils import subprocess_worker

        with subprocess_worker(protocol={protocol}) as w:

            class A:
                '''Original class definition'''
                pass

            def store(x):
                storage = getattr(cloudpickle, "_test_storage", None)
                if storage is None:
                    storage = cloudpickle._test_storage = dict()
                obj_id = uuid.uuid4().hex
                storage[obj_id] = x
                return obj_id

            def lookup(obj_id):
                return cloudpickle._test_storage[obj_id]

            id1 = w.run(store, A())

            # The stored object on the worker is matched to a singleton class
            # definition thanks to provenance tracking:
            assert w.run(lambda obj_id: isinstance(lookup(obj_id), A), id1)

            # Retrieving the object from the worker yields a local copy that
            # is matched back the local class definition this instance
            # originally stems from.
            assert isinstance(w.run(lookup, id1), A)

            # Changing the local class definition should be taken into account
            # in all subsequent calls. In particular the old instances on the
            # worker do not map back to the new class definition, neither on
            # the worker itself, nor locally on the main program when the old
            # instance is retrieved:

            class A:
                '''Updated class definition'''
                pass

            assert not w.run(lambda obj_id: isinstance(lookup(obj_id), A), id1)
            retrieved1 = w.run(lookup, id1)
            assert not isinstance(retrieved1, A)
            assert retrieved1.__class__ is not A
            assert retrieved1.__class__.__doc__ == "Original class definition"

            # New instances on the other hand are proper instances of the new
            # class definition everywhere:

            a = A()
            id2 = w.run(store, a)
            assert w.run(lambda obj_id: isinstance(lookup(obj_id), A), id2)
            assert isinstance(w.run(lookup, id2), A)

            # Monkeypatch the class defintion in the main process to a new
            # class method:
            A.echo = lambda cls, x: x

            # Calling this method on an instance will automatically update
            # the remote class definition on the worker to propagate the monkey
            # patch dynamically.
            assert w.run(a.echo, 42) == 42

            # The stored instance can therefore also access the new class
            # method:
            assert w.run(lambda obj_id: lookup(obj_id).echo(43), id2) == 43

        r0   Nr  r  s     r!   9test_interactive_dynamic_type_and_stored_remote_instancesICloudPickleTest.test_interactive_dynamic_type_and_stored_remote_instancesI  s,    EJ FDMMF*K 	L 	!&r$   z1Seems to have issues outside of linux and CPythonc                 L    SR                  U R                  S9n[        U5        g )Na  if __name__ == "__main__":
        from srsly.tests.cloudpickle.testutils import subprocess_worker
        import struct

        with subprocess_worker(protocol={protocol}) as w:

            reference_size = w.memsize()
            assert reference_size > 0


            def make_big_closure(i):
                # Generate a byte string of size 1MB
                itemsize = len(struct.pack("l", 1))
                data = struct.pack("l", i) * (int(1e6) // itemsize)
                def process_data():
                    return len(data)
                return process_data

            for i in range(100):
                func = make_big_closure(i)
                result = w.run(func)
                assert result == int(1e6), result

            import gc
            w.run(gc.collect)

            # By this time the worker process has processed 100MB worth of data
            # passed in the closures. The worker memory size should not have
            # grown by more than a few MB as closures are garbage collected at
            # the end of each remote function call.
            growth = w.memsize() - reference_size

            # For some reason, the memory growth after processing 100MB of
            # data is ~10MB on MacOS, and ~1MB on Linux, so the upper bound on
            # memory growth we use is only tight for MacOS. However,
            # - 10MB is still 10x lower than the expected memory growth in case
            # of a leak (which would be the total size of the processed data,
            # 100MB)
            # - the memory usage growth does not increase if using 10000
            # iterations instead of 100 as used now (100x more data)
            assert growth < 1.5e7, growth

        r0   r  r  s     r!   5test_interactive_remote_function_calls_no_memory_leakECloudPickleTest.test_interactive_remote_function_calls_no_memory_leak  s+    *T FDMMF*U 	V 	!&r$   c                    [         [        [        [        4 Ha  n[	        U" S5      5      n[
        R                  " U[        R                  45         [        R                  " X R                  S9  S S S 5        Mc     g ! , (       d  f       Mu  = f)Nr   r0   )r   r>   r+  r  r   r*  r+  r   PicklingErrorr3   r4   r1   )r    exc_typer5   s      r!   test_pickle_reraise#CloudPickleTest.test_pickle_reraise  s]    "J	<HH %1C&*>*>?@!!#> A@ I@@s   A==
B	c                     SS0n[        UR                  U R                  S9nU R                  U" S5      S5        U R                  U" S5      S 5        g )NrG   r   r0   rR   )r6   getr1   r   )r    r   depickled_methods      r!   test_unhashable_function(CloudPickleTest.test_unhashable_function  sL    !H*1554==I)#.2)#.5r$   )rv      zJDeprecation warning in python 3.12 about future deprecation in python 3.14c                    [         R                  " SSS9n[        U5        [        U5        [        XR                  S9nU R                  XL5        [        S5       H'  nU R                  [        U5      [        U5      5        M)     g )Nr   rx   )stepr0   r   )	itertoolscountnextr6   r1   r   r   r   )r    counternew_counterr  s       r!   test_itertools_count$CloudPickleTest.test_itertools_count  sf    //!!, 	WW%gF23rAT']D,=> r$   c                    ^ SSK Jn  S mU" T5      U4S j5       n[        X R                  S9nU R	                  UR
                  TR
                  5        g )Nr   r   c                      g r   r.   r.   r$   r!   r  =CloudPickleTest.test_wraps_preserves_function_name.<locals>.f      r$   c                     > T " 5         g r   r.   r  s   r!   r	  =CloudPickleTest.test_wraps_preserves_function_name.<locals>.g      Cr$   r0   )r{  r   r6   r1   r   r)   r    r   r	  r  r  s       @r!   "test_wraps_preserves_function_name2CloudPickleTest.test_wraps_preserves_function_name  sK    #	 
q	 
	 Q7ajj1r$   c                    ^ SSK Jn  S mU" T5      U4S j5       n[        X R                  S9nU R	                  UR
                  TR
                  5        g )Nr   r   c                      g)42Nr.   r.   r$   r!   r  <CloudPickleTest.test_wraps_preserves_function_doc.<locals>.f  s    r$   c                     > T " 5         g r   r.   r.  s   r!   r	  <CloudPickleTest.test_wraps_preserves_function_doc.<locals>.g  r0  r$   r0   )r{  r   r6   r1   r   rK   r1  s       @r!   !test_wraps_preserves_function_doc1CloudPickleTest.test_wraps_preserves_function_doc  sK    #	 
q	 
	 Q7QYY/r$   c                    ^ S mS[         S.Tl        [        T5      U4S j5       n[        XR                  S9nU R                  UR                  TR                  5        g )Nc                     g r   r.   r  s    r!   r  DCloudPickleTest.test_wraps_preserves_function_annotations.<locals>.f  r,  r$   r   )r   returnc                    > T" U 5        g r   r.   )r   r  s    r!   r	  DCloudPickleTest.test_wraps_preserves_function_annotations.<locals>.g  s
    aDr$   r0   )rf  __annotations__r   r6   r1   r   )r    r	  r  r  s      @r!   )test_wraps_preserves_function_annotations9CloudPickleTest.test_wraps_preserves_function_annotations  sY    	 #$u5	q	 
	 Q7++Q->->?r$   c                 `    [         R                  [        [        4   n[	        U5      U:X  d   eg r   )typingUnionr   r`   r6   )r    rR  s     r!   test_type_hintCloudPickleTest.test_type_hint  s'    LLs#q!Q&&&r$   c                   ^ S/S4 H  m " U4S jS5      nU" 5       n[        X R                  S9nX#4 HI  nU R                  UR                  S5        [        R
                  " [        5         SUl        S S S 5        MK      " S SU5      nU" 5       n[        R                  " X@R                  S9nA[        R                  " U5      nUR                  S:X  a  M   e   g ! , (       d  f       M  = f)	Nregistered_attributec                   "   > \ rS rSr Y rS rSrg)@CloudPickleTest.test_instance_with_slots.<locals>.ClassWithSlotsi  c                     SU l         g )NrP   rK  r&   s    r!   r"   ICloudPickleTest.test_instance_with_slots.<locals>.ClassWithSlots.__init__  s
    02D-r$   rO  N)r)   r*   r+   r,   	__slots__r"   r-   )slotss   r!   ClassWithSlotsrM    s    !	3r$   rS  r0   rP   r   c                       \ rS rSrS rSrg)CCloudPickleTest.test_instance_with_slots.<locals>.SubclassWithSlotsi!  c                     SU l         g r   unregistered_attributer&   s    r!   r"   LCloudPickleTest.test_instance_with_slots.<locals>.SubclassWithSlots.__init__"  s
    23D/r$   rW  Nr|  r.   r$   r!   SubclassWithSlotsrU  !  s    4r$   rZ  )r6   r1   r   rK  r*  r+  r  non_registered_attributer3   r4   r2   rX  )r    rS  initial_objr  r5   rZ  r2  rR  s          @r!   test_instance_with_slots(CloudPickleTest.test_instance_with_slots  s    -.0FGE3 3 )*K+mm5M $3  !9!92>]]>234C0 32 4
4N 4 $%C!!#>A!'--a0M 771<<<1 H 32s   -C
C.MappingProxyTypez-Old versions of Python do not have this type.c                 f    [         R                  " SS05      nU[        XR                  S9:X  d   eg )Nsome_keyz
some valuer0   )r  r_  r6   r1   )r    mps     r!   test_mappingproxy!CloudPickleTest.test_mappingproxy,  s0     ##Z$>?_R--@@@@r$   c                    [         R                  " S5      nUR                  SS[        4/5      nU" SS9n[	        X R
                  S9  UR                  [	        X0R
                  S9R                  s=:X  a  S:X  d   e   eg )Ndataclasses	DataClassr   rP   r  r0   )r*  r  make_dataclassr`   r6   r1   r   )r    rf  rg  r  s       r!   test_dataclassCloudPickleTest.test_dataclass2  sk    ))-8..{c3ZLI	2	MM:vvFHHNBNNNNNr$   c                   ^  " S S[         [        R                  5      n " U4S jSU5      m[        TR                  TR                  T/U R
                  S9u  p#nX#L d   eX$R                  L d   eX$R                  Ld   e[        U[         5      (       d   eUR                  5       (       d   eUTR                  L d   eUTL d   e[        TR                  U R
                  S9nUTR                  L d   eg )Nc                       \ rS rSrSrSrg)=CloudPickleTest.test_locally_defined_enum.<locals>.StringEnumi<  z4Enum when all members are also (and must be) stringsr.   N)r)   r*   r+   r,   rK   r-   r.   r$   r!   
StringEnumrm  <  s    Fr$   rn  c                   2   > \ rS rSrSrSrSrSrU 4S jrSr	g)	8CloudPickleTest.test_locally_defined_enum.<locals>.Colori?  z3-element color space123c                     > U TR                   L $ r   )GREEN)r    Colors    r!   is_greenACloudPickleTest.test_locally_defined_enum.<locals>.Color.is_greenE  s    u{{**r$   r.   N)
r)   r*   r+   r,   rK   REDru  BLUErw  r-   )rv  s   r!   rv  rp  ?  s    'CED+ +r$   rv  r0   )	r   enumEnumr6   ru  r1   rz  r   rw  )r    rn  green1green2ClonedColorgreen3rv  s         @r!   test_locally_defined_enum)CloudPickleTest.test_locally_defined_enum;  s    	Gdii 	G	+J 	+ '6[[%++u-'G#*****-----&#&&&&     $$$e### t}}E$$$r$   c                     [         R                  " SSSSS.5      n[        UR                  UR                  U/U R                  S9u  p#nX#L d   eX$R                  L d   eX$R
                  Ld   eXAL d   eg )Nrv  r   rx   rv   )ry  ru  rz  r0   )r{  IntEnumr6   ru  r1   rz  )r    DynamicColorr}  r~  ClonedDynamicColors        r!   test_locally_defined_intenum,CloudPickleTest.test_locally_defined_intenumX  s    ||GQA-NO-<!3!3\B]].$** 1111144444!111r$   c                 L    SR                  U R                  S9n[        U5        g )Na  if __name__ == "__main__":
        from enum import Enum
        from srsly.tests.cloudpickle.testutils import subprocess_worker

        with subprocess_worker(protocol={protocol}) as w:

            class Color(Enum):
                RED = 1
                GREEN = 2

            def check_positive(x):
                return Color.GREEN if x >= 0 else Color.RED

            result = w.run(check_positive, 1)

            # Check that the returned enum instance is reconciled with the
            # locally defined Color enum type definition:

            assert result is Color.GREEN

            # Check that changing the definition of the Enum class is taken
            # into account on the worker for subsequent calls:

            class Color(Enum):
                RED = 1
                BLUE = 2

            def check_positive(x):
                return Color.BLUE if x >= 0 else Color.RED

            result = w.run(check_positive, 1)
            assert result is Color.BLUE
        r0   r  r  s     r!   test_interactively_defined_enum/CloudPickleTest.test_interactively_defined_enume  s+     @ FDMMF*A 	B 	!&r$   c                     [         R                  " S5        SSKJn  U" 5       u  p#[	        X#/SS/5       H:  u  pEU" 5       SU S3:X  d   e[        X@R                  S9nU" 5       SU S3:X  a  M:   e   g )	Nr  r   )relative_imports_factorymodulepackagezhello from a !r0   )r*  r  r  r  rJ  r6   r1   )r    r  r  r	  r  sourcecloned_funcs          r!   $test_relative_import_inside_function4CloudPickleTest.test_relative_import_inside_function  s}    23 	B')9(=>LD6}VHA6666 *$GK=mF81$==== ?r$   c                     SS.S jn[        XR                  S9nX4 H%  nU" S5      S:X  d   eUR                  SS0:X  a  M%   e   g )Nr   )rR   c                
    X-   $ r   r.   r   s     r!   r  UCloudPickleTest.test_interactively_defined_func_with_keyword_only_argument.<locals>.f  s	    5Lr$   r0   rx   rv   rR   )r6   r1   __kwdefaults__)r    r  r  r  s       r!   :test_interactively_defined_func_with_keyword_only_argumentJCloudPickleTest.test_interactively_defined_func_with_keyword_only_argument  sO     	 &a--@$D7a<<&&3(222 %r$   co_posonlyargcountz(Requires positional-only argument syntaxc                 t    SR                  U R                  S9n[        [        R                  " U5      5        g )Na  
        import pytest
        from srsly.cloudpickle import loads, dumps

        def f(a, /, b=1):
            return a + b

        depickled_f = loads(dumps(f, protocol={protocol}))

        for func in (f, depickled_f):
            assert func(2) == 3
            assert func.__code__.co_posonlyargcount == 1
            with pytest.raises(TypeError):
                func(a=2)

        r0   r  r  s     r!   =test_interactively_defined_func_with_positional_only_argumentMCloudPickleTest.test_interactively_defined_func_with_positional_only_argument  s1     FDMMF* 	  	!!67r$   c                     [         R                  " S5        SSKJn  UR	                  5       S:X  d   e[        XR                  S9nX!L d   eg )Nr  r   )some_singletonr  r0   )r*  r  r  r  r'   r6   r1   )r    r  depickled_singletons      r!   test___reduce___returns_string.CloudPickleTest.test___reduce___returns_string  sL     	237((*.>>>>-]]4"444r$   c                     S n[        [        R                  R                  UR                  5      R	                  5       5      nUS1:X  d   e[        UU R                  S9nU" 5       nU" 5       [        :X  d   eg )Nc                      S n U $ )Nc                      [         $ r   r  r.   r$   r!   inner_functioniCloudPickleTest.test_cloudpickle_extract_nested_globals.<locals>.function_factory.<locals>.inner_function  s    ,,r$   r.   )r  s    r!   function_factoryQCloudPickleTest.test_cloudpickle_extract_nested_globals.<locals>.function_factory  s    - "!r$   r  r0   )rO  r3   _extract_code_globalsr   rb   r6   r1   r  )r    r  globals_depickled_factory
inner_funcs        r!   'test_cloudpickle_extract_nested_globals7CloudPickleTest.test_cloudpickle_extract_nested_globals  sw    	" {..DD%%''+tv/34444+,<59]]D&(
|4444r$   c                      " S S5      nU" 5       n[         R                  " [        R                  SS9   [        R
                  " U5        S S S 5        g ! , (       d  f       g = f)Nc                       \ rS rSrS rSrg)9CloudPickleTest.test_recursion_during_pickling.<locals>.Ai  c                     [        X5      $ r   )getattrr  s     r!   __getattribute__JCloudPickleTest.test_recursion_during_pickling.<locals>.A.__getattribute__  s    t**r$   r.   N)r)   r*   r+   r,   r  r-   r.   r$   r!   rL   r    s    +r$   rL   	recursionr  )r*  r+  r   r  r3   r4   )r    rL   rG   s      r!   test_recursion_during_pickling.CloudPickleTest.test_recursion_during_pickling  sD    	+ 	+ C]]6//{Ca  DCCs   A
A#c                   ^ U R                   S:  a  [        R                  " S5        [        R                  " S5      m " U4S jS5      nU" 5       n/ n[        R
                  " X R                   UR                  S9n[        U5      S:X  d   e[        R                  " XCS9nTR                  R                  UR                  UR                  5        g )	Nr  zNeed Pickle Protocol 5 or laternumpyc                   <   > \ rS rSr Y R                  " S5      rSrg)ECloudPickleTest.test_out_of_band_buffers.<locals>.LocallyDefinedClassi  r   r.   N)r)   r*   r+   r,   zerosr  r-   )r  s   r!   LocallyDefinedClassr    s    88B<Dr$   r  )r1   buffer_callbackr   )buffers)r1   r*  skipr  r3   r4   appendr1  r   r2   testingassert_allcloser  )r    r  data_instancer  pickle_bytesreconstructedr  s         @r!   test_out_of_band_buffers(CloudPickleTest.test_out_of_band_buffers  s    ==1KK9:  )	  	  ,-"((9@I7|q   \C


""=#5#5}7I7IJr$   c                     [         R                  " S5      n[        XR                  S9n/ SQnU H  n[	        X5      [	        X$5      :X  a  M   e   g )NTr0   )r)   	__bound____constraints____covariant____contravariant__)rF  TypeVarr6   r1   r  )r    r  depickled_T	attr_listattrs        r!   test_pickle_dynamic_typevar+CloudPickleTest.test_pickle_dynamic_typevar  sI    NN3%a--@
	 D1#w{'AAAA r$   c                 b    [         R                  " S5      n[        XR                  S9nXL d   eg Nr  r0   )rF  r  r   r1   )r    r  T2s      r!   $test_pickle_dynamic_typevar_tracking4CloudPickleTest.test_pickle_dynamic_typevar_tracking  s'    NN3#A>wwr$   c                 j    [         R                  " S5      n[        X4U R                  S9u  p#X#L d   eg r  )rF  r  r6   r1   )r    r  depickled_T1depickled_T2s       r!   'test_pickle_dynamic_typevar_memoization7CloudPickleTest.test_pickle_dynamic_typevar_memoization  s5    NN3%4aV>Bmm&M"+++r$   c                     [         R                  " S5        SSKJn  [	        XR
                  S9nX!L d   eSSKJn  U[	        X0R
                  S9L d   eg )Nr  r   )r  r0   )AnyStr)r*  r  r  r  r6   r1   rF  r  )r    r  T1r  s       r!   test_pickle_importable_typevar.CloudPickleTest.test_pickle_importable_typevar	  sG    23*Q7ww 	"--HHHHr$   c                    [         R                  " S5      n " S S[         R                  U   5      n[        X R                  S9UL d   e[        U[
           U R                  S9U[
           :X  d   e[        U R                  S9 nS n[        U[
           SS5      S:g  nU" U[
           U[
        U5      S:X  d   eUR                  XB[
           U[
        U5      S:X  d   e S S S 5        g ! , (       d  f       g = f)	Nr  c                       \ rS rSrSrg),CloudPickleTest.test_generic_type.<locals>.Ci	  r.   Nr~   r.   r$   r!   r_   r  	  r   r$   r_   r0   c                    U R                   UL d   e[        UR                  5      S:X  d   eUR                  S   nUR                   [        R                  L d   eU(       a0  [        U R
                  5      S:X  d   eU R
                  S   UL d   eO/[        U R                  5      S:X  d   eU R                  S   UL d   e[        UR                  5      S:X  d   eg)Nr   r   ok)
__origin__r1  __orig_bases__rF  Generic__args____parameters__)genericorigin
type_valueuse_argsr  s        r!   check_generic8CloudPickleTest.test_generic_type.<locals>.check_generic	  s    ))V3336001Q666**1-}}666w//0A555"++A.*<<<w556!;;;"11!4
BBB2,,-222r$   r  r.   r  )	rF  r  r  r6   r1   r`   r   r  run)r    r  r_   workerr  r  s         r!   test_generic_type!CloudPickleTest.test_generic_type	  s    NN3	q! 	 q==9Q>>> qv>!C&HHH6&& qvz26"<H 3C:dBBB::msVQXF$NNN/ 766s   AC,,
C:c                 0   [         R                  " S5      n " S S[         R                  U   5      n " S SU5      n " S SU5      n " S S	U[           5      n " S
 SU5      n " S SX!   5      n " S SXq   5      nX#XEXgU/n	U	 H  n
[	        XR
                  S9U
L a  M   e   [        U R
                  S9 nS nU	 H:  n
U
R                  5       nU" X5      (       d   eUR                  XU5      S:X  a  M:   e   S S S 5        g ! , (       d  f       g = f)Nr  c                       \ rS rSrSrg)3CloudPickleTest.test_generic_subclass.<locals>.Basei7	  r.   Nr~   r.   r$   r!   r=  r  7	  r   r$   r=  c                       \ rS rSrSrg)9CloudPickleTest.test_generic_subclass.<locals>.DerivedAnyi:	  r.   Nr~   r.   r$   r!   
DerivedAnyr  :	  r   r$   r   c                       \ rS rSrSrg)6CloudPickleTest.test_generic_subclass.<locals>.LeafAnyi=	  r.   Nr~   r.   r$   r!   LeafAnyr  =	  r   r$   r  c                       \ rS rSrSrg)9CloudPickleTest.test_generic_subclass.<locals>.DerivedInti@	  r.   Nr~   r.   r$   r!   
DerivedIntr  @	  r   r$   r  c                       \ rS rSrSrg)6CloudPickleTest.test_generic_subclass.<locals>.LeafIntiC	  r.   Nr~   r.   r$   r!   LeafIntr  C	  r   r$   r	  c                       \ rS rSrSrg)7CloudPickleTest.test_generic_subclass.<locals>.DerivedTiF	  r.   Nr~   r.   r$   r!   DerivedTr  F	  r   r$   r  c                       \ rS rSrSrg)4CloudPickleTest.test_generic_subclass.<locals>.LeafTiI	  r.   Nr~   r.   r$   r!   LeafTr  I	  r   r$   r  r0   c                 0    U R                  5       U:X  d   eg)Nr  )mro)klassexpected_mros     r!   	check_mro8CloudPickleTest.test_generic_subclass.<locals>.check_mroT	  s    yy{l222r$   r  )	rF  r  r  r`   r6   r1   r   r  r  )r    r  r=  r   r  r  r	  r  r  klassesr  r  r  r  s                 r!   test_generic_subclass%CloudPickleTest.test_generic_subclass4	  s   NN3	6>>!$ 		 		j 		c 		j 		tw 		HK 	 g7e
 E"5==AUJJJ  6& !iik ,,,,zz)C8D@@@ ! 766s   :<D:D
Dc                   ^ [        U R                  S9 n[        5        HL  m " U4S jS5      nST0Ul        S nU" 5       nU" UTS5      S:X  d   eUR	                  X4TS5      S:X  a  ML   e   S S S 5        g ! , (       d  f       g = f)Nr0   c                   ,   > \ rS rSrS Y S Y 4S jrSrg)KCloudPickleTest.test_locally_defined_class_with_type_hints.<locals>.MyClassi`	  rk  r?  c                     U$ r   r.   )r    rk  s     r!   rH   RCloudPickleTest.test_locally_defined_class_with_type_hints.<locals>.MyClass.methoda	  s    "
r$   r.   Nr<  )type_s   r!   r   r  `	  s    #% #E #r$   r   	attributec                     U R                   S   U:X  d   eU R                  R                   S   U:X  d   eU R                  R                   S   U:X  d   eg)Nr  rk  r?  r  )rB  rH   )r5   expected_typeexpected_type_strs      r!   check_annotationsUCloudPickleTest.test_locally_defined_class_with_type_hints.<locals>.check_annotationse	  se    ..{;}LLL

2259]JJ 

228<())  r$   r  r  )r   r1   _all_types_to_testrB  r  )r    r  r   r#  r5   r  s        @r!   *test_locally_defined_class_with_type_hints:CloudPickleTest.test_locally_defined_class_with_type_hints]	  s    6&+-# # ,7*>'	  i(eW=EEEJJ0ugF$NN) . 766s   AA9,A99
Bc                     [         R                  " S5      nUR                  UR                  S   4 H  n[        X R                  S9nX2:X  a  M   e   g )Ntyping_extensionsrG   r0   )r*  r  Literalr6   r1   r    r)  r5   r  s       r!   test_generic_extensions_literal/CloudPickleTest.test_generic_extensions_literalv	  sP    "//0CD%--/@/H/H/MNC+C--HM ''' Or$   c                     [         R                  " S5      nUR                  UR                  [           4 H  n[	        X R
                  S9nX2:X  a  M   e   g )Nr)  r0   )r*  r  Finalr`   r6   r1   r+  s       r!   test_generic_extensions_final-CloudPickleTest.test_generic_extensions_final|	  sP    "//0CD%++->-D-DS-IJC+C--HM ''' Kr$   c                      " S S5      nS[         0Ul        [        XR                  S9nUR                  UR                  :X  d   eg )Nc                       \ rS rSrSrg)1CloudPickleTest.test_class_annotations.<locals>.Ci	  r.   Nr~   r.   r$   r!   r_   r4  	  r   r$   r_   rG   r0   )r`   rB  r6   r1   )r    r_   C1s      r!   test_class_annotations&CloudPickleTest.test_class_annotations	  s@    	 	 #JQ7!!Q%6%6666r$   c                     S[         S[        4S jn[        XR                  S9nUR                  UR                  :X  d   eg )NrG   r?  c                     g r   r.   )rG   s    r!   r  4CloudPickleTest.test_function_annotations.<locals>.f	  r,  r$   r0   )r`   r   r6   r1   rB  )r    r  r  s      r!   test_function_annotations)CloudPickleTest.test_function_annotations	  s?    	 	 	 Q7!!Q%6%6666r$   c                   ^ SS K n  " S S5      mU4S jnX!R                  T'   T" 5       n[        X0R                  S9n[	        US5      (       d   e UR                  R                  T5        g ! UR                  R                  T5        f = f)Nr   c                       \ rS rSrSrg)CCloudPickleTest.test_always_use_up_to_date_copyreg.<locals>.MyClassi	  r.   Nr~   r.   r$   r!   r   r?  	  s    r$   r   c                    > TSSS04$ )Nr.   custom_reduceTr.   )r   r   s    r!   reduce_myclassJCloudPickleTest.test_always_use_up_to_date_copyreg.<locals>.reduce_myclass	  s    _d$;;;r$   r0   rA  )copyregr  r6   r1   r  r  )r    rD  rB  my_objdepickled_myobjr   s        @r!   "test_always_use_up_to_date_copyreg2CloudPickleTest.test_always_use_up_to_date_copyreg	  s}     		0 < /=""7+YF-f}}MO?O<<<<""&&w/G""&&w/s   AA/ /Bc                 L     " S S5      nU" 5       n[        X R                  S9  g )Nc                   $    \ rS rSr\S 5       rSrg):CloudPickleTest.test_literal_misdetection.<locals>.MyClassi	  c                     g)Nr.   r.   r&   s    r!   
__values__ECloudPickleTest.test_literal_misdetection.<locals>.MyClass.__values__	  s    r$   r.   N)r)   r*   r+   r,   r  rM  r-   r.   r$   r!   r   rK  	  s     r$   r   r0   r6   r1   r    r   os      r!   test_literal_misdetection)CloudPickleTest.test_literal_misdetection	  s!    	 	
 IMM2r$   c                 L     " S S5      nU" 5       n[        X R                  S9  g )Nc                   $    \ rS rSr\S 5       rSrg)DCloudPickleTest.test_final_or_classvar_misdetection.<locals>.MyClassi	  c                     [         $ r   )r`   r&   s    r!   __type__MCloudPickleTest.test_final_or_classvar_misdetection.<locals>.MyClass.__type__	  s    
r$   r.   N)r)   r*   r+   r,   r  rX  r-   r.   r$   r!   r   rV  	  s     r$   r   r0   rO  rP  s      r!   #test_final_or_classvar_misdetection3CloudPickleTest.test_final_or_classvar_misdetection	  s!    	 	
 IMM2r$   c                 p  ^	^
^^^^^^^ [         R                  R                  5       n [        R                  R	                  [
        5      n[        [         R                  S5        [        [         R                  U5        [         R                  R                  SU5        [        U R                  S9 nUR                  S U5        SS KJm  SSKJmJm
Jm	  [         R"                  " [$        5         UR                  S 5        S S S 5        [         R"                  " [$        5         UR                  S 5        S S S 5        TTT
T	4 H;  m[         R"                  " [$        5         UR                  U4S j5        S S S 5        M=     ['        T5        UR                  U4S	 j5      T" 5       :X  d   eUR                  U
4S
 j5      T
R(                  :X  d   eUR                  U	4S j5      T	" 5       R+                  5       :X  d   eUR                  U4S j5      T" 5       :X  d   eSSKJnJnJm  UTUsmmm[         R"                  " [$        5         UR                  S 5        S S S 5        [         R"                  " [$        5         UR                  U4S j5        S S S 5        [5        T5        [         R"                  " [$        5         UR                  U4S j5        S S S 5        [         R"                  " [$        5         UR                  S 5        S S S 5        SS Kn['        U5        UR                  U4S j5      T" 5       :X  d   eUR                  U4S j5      T" 5       :X  d   e[5        U5        [         R"                  " [$        5         UR                  U4S j5        S S S 5        [         R"                  " [$        5         UR                  U4S j5        S S S 5        SS Kn['        UR8                  R:                  5        UR                  U4S j5      T" 5       :X  d   eUR                  U4S j5      TR(                  :X  d   eUR                  U4S j5      T" 5       R+                  5       :X  d   e[         R"                  " [$        5         UR                  U4S j5        S S S 5        [         R"                  " [$        5         UR                  S 5        S S S 5        [5        UR8                  R:                  5        [         R"                  " [$        5         UR                  U4S j5        S S S 5        SS Kn['        UR8                  5        UR                  U4S j5      T" 5       :X  d   eUR                  U4S j5      TR(                  :X  d   eUR                  U4S j5      T" 5       R+                  5       :X  d   e[5        UR8                  5        S S S 5        SnU[         l        Xw S 3U S!3U S"34 HQ  n[         R>                  RA                  US 5      mT(       d  M,  TR(                  [C        5       ;   d  MF  [5        T5        MS     g ! , (       d  f       GN[= f! , (       d  f       GN8= f! , (       d  f       GME  = f! , (       d  f       GN4= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN:= f! , (       d  f       GN= f! , (       d  f       GNX= f! , (       d  f       GN5= f! , (       d  f       GN= f! , (       d  f       GNY= f! SnU[         l        Xw S 3U S!3U S"34 HQ  n[         R>                  RA                  US 5      mT(       d  M,  TR(                  [C        5       ;   d  MF  [5        T5        MS     f = f)#N r   r0   c                 @    [         R                  R                  U 5      $ r   )r   r  r=   )ps    r!   r   eCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	  s    chhooa0r$   )local_functionLocalT
LocalClassc                      [        S5      $ Nzmock_local_folder.mod
__import__r.   r$   r!   r   r`  	  
    *-D"Er$   c                      [        S5      $ Nzmock_local_folder.subfolder.modrf  r.   r$   r!   r   r`  	  
    
+L Mr$   c                     > T $ r   r.   )rQ  s   r!   r   r`  	  s    ar$   c                     > T " 5       $ r   r.   ra  s   r!   r   r`  	      ^%5r$   c                     > T R                   $ r   r)   )rb  s   r!   r   r`  	  s	    V__r$   c                  .   > T " 5       R                  5       $ r   rH   )rc  s   r!   r   r`  	  s    *,"5"5"7r$   c                  $   > T R                  5       $ r   rn  )r  s   r!   r   r`  	  s    #"4"4"6r$   )LocalSubmodClassLocalSubmodTlocal_submod_functionc                      [        S5      $ rj  rf  r.   r$   r!   r   r`  

  rk  r$   c                     > T $ r   r.   rw  s   r!   r   r`  
      "7r$   c                     > T $ r   r.   rn  s   r!   r   r`  
  rc  r$   c                      [        S5      $ re  rf  r.   r$   r!   r   r`  
  rh  r$   c                     > T " 5       $ r   r.   rn  s   r!   r   r`  
  ro  r$   c                     > T " 5       $ r   r.   _funcs   r!   r   r`  
      UWr$   c                     > T $ r   r.   rn  s   r!   r   r`  
  rc  r$   c                     > T $ r   r.   rz  s   r!   r   r`  !
  r{  r$   c                     > T " 5       $ r   r.   r  s   r!   r   r`  '
  r  r$   c                     > T R                   $ r   rq  _ts   r!   r   r`  (
  	    R[[r$   c                  .   > T " 5       R                  5       $ r   rs  _classs   r!   r   r`  )
      VX__%6r$   c                     > T $ r   r.   rn  s   r!   r   r`  /
  rc  r$   c                      [        S5      $ re  rf  r.   r$   r!   r   r`  1
  rh  r$   c                     > T $ r   r.   rz  s   r!   r   r`  7
  r{  r$   c                     > T " 5       $ r   r.   r  s   r!   r   r`  <
  r  r$   c                     > T R                   $ r   rq  r  s   r!   r   r`  =
  r  r$   c                  .   > T " 5       R                  5       $ r   rs  r  s   r!   r   r`  >
  r  r$   mock_local_folderz.modz
.subfolderz.subfolder.submod)"r   r  copyr  dirname__file__rA   insertr   r1   r  mock_local_folder.modr  ra  rb  rc  r*  r+  r'  r	   r)   rH   "mock_local_folder.subfolder.submodru  rv  rw  r
   r  	subfoldersubmodmock_local_folder.subfolderr  r  r   )r    _prev_sys_path_mock_interactive_session_cwdwru  rv  r  _fnamer-  rc  rb  r  r  r  ra  rw  r  rQ  s            @@@@@@@@@r!   Ctest_pickle_constructs_from_module_registered_for_pickling_by_valueSCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value	  sl   N	4 -/GGOOH,E) #((B'#(($AB HHOOA<="DMM:a02O 4  ]];/EEEF 0]];/EEM 0
 ~vzBA{3i( 43 C )-uu56.:JJJJuu45HHH EE78!|**,--
 EE67>;KKK 
 !"79I "E6 ]];/EEM 0 ]];/EE78 0 +3/]];/EE01 0 ]];/EEEF 0 )():;uu56.:JJJJuu_-888*+<=]];/EE01 0]];/EE78 0
 :():)D)D)K)KLuu_-888uu01R[[@@@uu6768??;LLLL
 ]];/EE01 0]];/EEEF 0 +%//66 ]];/EE78 0 3():)D)DEuu_-888uu01R[[@@@uu6768??;LLLL*+<+F+FGg ;j )F%CHo&/D 124kkooa.33<<+H+JJ.s3	4E 0/// 43< 0/ 0/
 0/ 0/ 0/// 0/// 0/S ;:j )F%CHo&/D 124kkooa.33<<+H+JJ.s3	4sV  B
] 3>\11Y"\1&Y*9+\1$Y<:C\1Z""\1Z!-\1Z3"\1?[A<\1[$"\1[)B8\1[;*"\1\A\1 \6B)\1] 
Y'	"\1*
Y9	4\1<
Z	\1
Z	\1!
Z0	+\13
[	=\1
[	\1
[&	!\1)
[8	3\1;
\
	\1
\	\1
\.	)\11
] ;] A^5^5%^5c                   ^ [         R                  " S5        S GH  nUS:X  a  SS KnUR                  mUR                  nO$US:X  a  SS KJn  UR                  mUR                  n [        U R                  S9 nUR                  U4S j5      W:X  d   e[        W5        UR                  U4S j5      U:X  d   eS	Ul        UR                  U:w  d   eUR                  U4S
 j5      S	:X  d   e[        U5        S S S 5        WWl        UR                  [        5       ;   a  [        U5        GM  GM     g ! , (       d  f       NA= f! WWl        UR                  [        5       ;   a  [        U5        f f = f)Nr  )r  r  r  r   r  r0   c                     > T " 5       $ r   r.   r.  s   r!   r   qCloudPickleTest.test_pickle_constructs_from_installed_packages_registered_for_pickling_by_value.<locals>.<lambda>Y
      r$   c                     > T " 5       $ r   r.   r.  s   r!   r   r  _
  r  r$   modified globalc                     > T " 5       $ r   r.   r.  s   r!   r   r  b
  r  r$   )r*  r  r  package_function_with_globalglobal_variabler&  r  module_function_with_globalr   r1   r  r	   r
   r)   r   )r    package_or_moduler-  _original_globalr  r  s        @r!   Otest_pickle_constructs_from_installed_packages_registered_for_pickling_by_value_CloudPickleTest.test_pickle_constructs_from_installed_packages_registered_for_pickling_by_valueJ
  sL    	23!6 I-022#$#4#4 "h.411#$#4#4 2&>!55-1AAAA
 -Q/55-1AAAA(9A%,,0@@@@55-1BBBB.q1 ? %5!::!>!@@.q1 A1 "7 ?> %5!::!>!@@.q1 As%   &E9BD5:E5
E	?E-E3c                 D   [         R                  " S5        SS KnSSKJn  UR                  nS nS nS n [        U R                  S9 nUR                  U5        UR                  XRS5        [        U5        S	Ul        UR                  XRS
5        UR                  US5      U:X  d   eUR                  US
5      S	:X  d   e S S S 5        X1l        S[        5       ;   a  [        U5        g g ! , (       d  f       N/= f! X1l        S[        5       ;   a  [        U5        f f = f)Nr  r   )r  c                  B    [        S5      R                  S   n 0 U l        g Nr   __main__rg  r  _cloudpickle_registry)_mains    r!   _create_registryzCloudPickleTest.test_pickle_various_versions_of_the_same_function_with_different_pickling_method.<locals>._create_registryu
  s    u%--j9E*,E'r$   c                 P    [        S5      R                  S   nXR                  U'   g r  r  )vkr  s      r!   _add_to_registryzCloudPickleTest.test_pickle_various_versions_of_the_same_function_with_different_pickling_method.<locals>._add_to_registryz
  s%    u%--j9E-.''*r$   c                 Z    [        S5      R                  S   nUR                  U    " 5       $ r  r  )r  r  s     r!   _call_from_registry}CloudPickleTest.test_pickle_various_versions_of_the_same_function_with_different_pickling_method.<locals>._call_from_registry~
  s+    u%--j9E..q133r$   r0   f_by_refr  f_by_val)r*  r  r  r  r  r   r1   r  r	   r   r
   )r    r  r  r  r  r  r  r  s           r!   Ptest_pickle_various_versions_of_the_same_function_with_different_pickling_method`CloudPickleTest.test_pickle_various_versions_of_the_same_function_with_different_pickling_methodi
  s    	23
 	$J/??	-
	/	4	A"DMM:a&'&:6()=>7H$4&:6EE-z:>NNN EE-z:>OOO ; 4D0%)F)HH*+?@ I# ;: 4D0%)F)HH*+?@ Is$   C= 
A8C,C= ,
C:6C= ="D)rv   rs  z2Determinism can only be guaranteed for Python 3.7+c                 B   [        5       nS n[        S5       H2  nUR                  [        UU R                  S[        U5      0S95        M4     [        U5      S:  aB  U H  n[        R                  " U5        M     [        R                  " S[        U5      -  5        g g )Nc                      [         [        -   $ r   )r  _TEST_GLOBAL_VARIABLE2r.   r$   r!   func_with_globalsWCloudPickleTest.test_deterministic_pickle_bytes_for_function.<locals>.func_with_globals
  s    (+AAAr$   r  PYTHONHASHSEED)r1   add_envr   z1Expected a single deterministic payload, got %d/5)rO  r   r  r   r1   r   r1  pickletoolsdisr*  fail)r    valsr  r  vals        r!   ,test_deterministic_pickle_bytes_for_function<CloudPickleTest.test_deterministic_pickle_bytes_for_function
  s     u	B qAHH():26--2BCF1KMN 
 t9q=$ KKCc$iO	 r$   )rm   )r)   r*   r+   r,   r3   DEFAULT_PROTOCOLr1   rn   rs   r*  markskipifr  r  r   version_infor   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r"  r,  r5  rI  rV  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r2  r6  r;  r@  rC  rF  rK  rT  r_  machinerl  rs  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  rM  ru  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r'  r2  r:  rC  rH  r]  unittestskipIfr  r  rc  ri  r  r  r  r  r  CodeTyper  r  r  r  r  r  r  r  r  r  r  r&  r,  r0  r6  r;  rG  rR  rZ  r  r  r  r  r-   r.   r$   r!   rf   rf   y   s   ++HG# [[**,	9 M*Ks/?/?)/KH  JI	JI$	00* [[9:% ;%
"	/
?A@+-,/
/
IL%"
"$
!(4C&,,\.
 [[668FBC  EE$,,	/,$,*3/#)J)@,\E5N 082tL3*.4	G0*?. [[				y	(	LS-=-=bq-AW-L 	/--/69	/  !$/RC4D4D
4R	/ #w.   @$F@$FL<( [[&&(F2A  CCCC0 [[4=  ?!?!, [[c..FF1FF?  $	$40&D*D,$

6,;8
;4Y=vX=tA.2/h&<P [[67$ 8$&=
A+O\" [[668FB8  :?8:?8B;<z0/d':*'X%'NL'\ [[PQ,' R,'\?6 [[((G3  =I  J? J?20@'=8 __(:;;DFAFAO%:2"'H>	3 [[GENN4HIII  K8K8055 !K B
,I#OJ'AR2((770$33 [[9:P4 ;P4d2>,A\ [[6!C  	r$   rf   c                       \ rS rSrSrSrg)Protocol2CloudPickleTesti
  rx   r.   N)r)   r*   r+   r,   r1   r-   r.   r$   r!   r  r  
  s    Hr$   r  c                  `    [         R                  " S5      n [        X R                  S9nUb   eg )Nr  r  )rF  r  r   r)   )r  module_and_names     r!   /test_lookup_module_and_qualname_dynamic_typevarr  
  s*    sA1!**EO"""r$   c                      [         R                  " S5        SS Kn U R                  n[	        XR
                  S9nUc   eUu  p4X0L d   eUS:X  d   eg )Nr  r   r  r  )r*  r  r  r  r   r)   )r  r  r  r  r  s        r!   2test_lookup_module_and_qualname_importable_typevarr  
  sX    
./A1!**EO&&&"LF)))3;;r$   c                      [        [        R                  [        R                  R                  S9n U c   eU u  pU[        L d   eUS:X  d   eg )Nr  r  )r   rF  r  r)   )r  r  r  s      r!   .test_lookup_module_and_qualname_stdlib_typevarr  
  sO    1&--7=}}7M7MOO&&&"LFV8r$   c                     [         R                  " S5        SS Kn SS KJn  [        5       [        5       :X  d   e[        U 5        [        5       U R                  1:X  d   e[        U5        [        5       U R                  UR                  1:X  d   e[        U5        [        5       U R                  1:X  d   eSU R                   S3n[         R                  " [        US9   [        U R                  5        S S S 5        [        U 5        [        5       [        5       :X  d   eU  S3n[         R                  " [        [        R                  " U5      S9   [        U 5        S S S 5        SU R                   S3n[         R                  " [        US9   [        U R                  5        S S S 5        [        R                  " S5      nU S3n[         R                  " [        [        R                  " U5      S9   [        U5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)	Nr  r   z%Input should be a module object, got z insteadr  z& is not registered for pickle by valuedynamic_modzN was not imported correctly, have you used an `import` statement to access it?)r*  r  r  r&  r  r   rO  r	   r)   r
   r+  r>   reescaper  r  )pkgr  r  r  s       r!   test_register_pickle_by_valuer  
  s   
./&*(*ce333S!(*s||n<<<S!(*s||S\\.JJJJs#(*s||n<<<1#,,x
HC	z	-"3<<0 
. s#(*ce333E7
8C	z3	8"3' 
9 2#,,x
HC	z	- . 
. ""=1K- + 	,  
z3	8 - 
9	8' 
.	- 
9	8 
.	- 
9	8s0   H
HH-5H>

H
H*-
H;>
Ic                  ^   [         R                  " S5      n  " S S[         R                  U    5      nX[           U [         R                  [         R
                  [         R                  [         R                  [         R
                  [           [         R                  U    [         R                  [        /[         R                  4   [         R                  S[         R                  4   [         R                  / [         R                  4   [         R                  [        S4   [         R                  [        U[           4   [         R                  [           [         R                  [        [        4   [         R                  [         R                  U[              [         R                  /nU$ )Nr  c                       \ rS rSrSrg)_all_types_to_test.<locals>.Ci
  r.   Nr~   r.   r$   r!   r_   r  
  s    r$   r_   .)rF  r  r  r`   AnyOptionalrG  CallableTupleListDictr   ClassVarNoReturn)r  r_   types_to_tests      r!   r%  r%  
  s   sAFNN1  	
S6	6::vqvzz)*VZZ(FJJ'S#XS!C&[!CCH#M" r$   c                  x    [        [        S5      (       d   e[        R                  [        R                  L d   eg )NPickler)r  r3   r  r  r.   r$   r!   test_module_level_picklerr    s1     ;	****+":"::::r$   r  )Lr   r  r   r  r{  r  r"  r  r  r  operatorr   r   r  r  r  r  rq   r  r   rk   r  r  r  r   r  r{  rF  r   r*  r  r  scipy.specialspecialr  r'  r  r  r  r3   r   r   r	   r
   r   srsly.cloudpickle.cloudpickler   r   r   r   r   r   	testutilsr   r   r   r   r  r  r   r  r6   r;   rA   rd   TestCaserf   r  r  r  r  r  r%  r  r)   mainr.   r$   r!   <module>r     s_    
    	     +    	   
      	     
 ( + 6 8 ; E D K E - / / ( ( (   #.">"> C/
64v(h'' v(rQ 
#%.P4; zMMO mW 	\" 	B
C  Gs$   8
E E EEE('E(