
    i;                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlZ	 d dlZd dl m!Z" 	 d dl%Z%d dl&m'Z' d dl(m)Z) d dl&m*Z* d dl&m+Z+ d dl&m,Z, d dl-m.Z. d d	l-m/Z/m0Z0 d d
l-m1Z1m2Z2 d dl-m3Z3 ddl4m5Z5 ddl4m6Z6 ddl4m7Z7 ddl4m8Z8 da9dZ: G d d      Z;e'jx                  fdZ=d Z>d Z?d Z@ G d dej                        ZB G d deB      ZCd ZDd ZEd ZFd  ZGd! ZHd" ZIeJd#k(  r ej                          yy# e#e$f$ r dZdZ"Y w xY w# e#$ r dZ%Y w xY w)$    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                       e Zd Zd Zd Zy)RaiserOnPicklec                     || _         y Nexc)selfr   s     y/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/srsly/tests/cloudpickle/cloudpickle_test.py__init__zRaiserOnPickle.__init__D   s	        c                     | j                   r   r   r   s    r    
__reduce__zRaiserOnPickle.__reduce__G   s    hhr"   N)__name__
__module____qualname__r!   r%    r"   r    r   r   B   s    r"   r   c                 V    t        j                  t        j                  | |            S )zeHelper function to test whether object pickled with cloudpickle can be
    depickled with pickle
    protocol)r   loadscloudpickledumps)objr,   s     r    pickle_depickler1   K   s      <<))#ABBr"   c                 &    | j                  dd      S )N\z\\\\)replace)raw_filepaths    r    _escaper6   R   s    g..r"   c                 J    	 | j                  |       | S # t        $ r Y | S w xY wr   )remove
ValueError)list_items     r    _maybe_remover<   W   s3    T L  Ls    	""c                      G d dt               }  G d d      } G d d| |      }t        |      }t        |j                               g dk(  sJ |d   d	k(  sJ |d
   J  |d    |              |       j	                         k(  sJ y )Nc                       e Zd ZdZd Zy)"test_extract_class_dict.<locals>.AzA docstringc                      y)Nar)   r$   s    r    methodz)test_extract_class_dict.<locals>.A.methodb       r"   N)r&   r'   r(   __doc__rB   r)   r"   r    Ar?   `   s
    	r"   rE   c                       e Zd ZdZdZd Zy)"test_extract_class_dict.<locals>.BzB docstring*   c                      y)Nbr)   r$   s    r    rB   z)test_extract_class_dict.<locals>.B.methodi   rC   r"   N)r&   r'   r(   rD   
B_CONSTANTrB   r)   r"   r    BrG   e   s    
	r"   rL   c                       e Zd ZdZd Zy)"test_extract_class_dict.<locals>.C+   c                      y)Ncr)   r$   s    r    method_cz+test_extract_class_dict.<locals>.C.method_co   rC   r"   N)r&   r'   r(   
C_CONSTANTrR   r)   r"   r    CrN   l   s    
	r"   rT   )rS   rD   rR   rS   rO   rD   rR   )intr   sortedkeysrR   )rE   rL   rT   clsdicts       r    test_extract_class_dictrY   _   s    C 
 Aq  "!$G',,.!%JJJJ< B&&&9%%%7:qs#qs||~555r"   c                      e Zd Zej                  Zd Zd Zej                  j                   ej                         dk7  xs  ej                  dk\  xr ej                  dk  d      d        Zd	 Zd
 Zej                  j%                  d      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d  Z'd! Z(ej                  j                   ej                         d"k(  d#      d$        Z)d% Z*d& Z+d' Z,d( Z-d) Z.d* Z/d+ Z0d, Z1d- Z2d. Z3d/ Z4d0 Z5d1 Z6d2 Z7d3 Z8d4 Z9d5 Z:d6 Z;d7 Z<d8 Z=d9 Z>d: Z?ej                  j                   ej                         d;k(  xr ej                  d<d= d>k\  xsM  ej                         d"k(  xs7 ej                  d<d= d>k(  xr ej                  d?k\  xs ej                  d<d= d@k\  dA      dB        ZAdC ZBej                  j                   ej                         d"k(  dD      dE        ZCej                  j                  eDd<u dF      dG        ZEej                  j                  dHej                  cxk  xr dIk  nc dJ      dK        ZFdL ZGdM ZHdN ZIdO ZJdP ZKdQ ZLdR ZMdS ZNdT ZOdU ZPdV ZQdW ZRdX ZSdY ZTdZ ZUej                  j%                  d[      d\        ZVd] ZWd^ ZXd_ ZYd` ZZej                  j                   ej                         d"k(  da      db        Z[dc Z\dd Z]de Z^df Z_dg Z`dh Zaej                  j%                  di      dj        Zbdk Zcdl Zdej                  j                  ej                  dmk\  dn      do        Zedp Zfdq Zgdr Zhds Zidt Zj ekj                   emendu       dv      dw        Zodx Zpdy Zqdz Zrd{ Zsd| Ztd} Zuej                  j                   emenj                  d~       d      d        Zwd Zxd Zyd Zzd Z{d Z|d Z}d Z~d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                  j%                  d      d        Zd Zd Zej                  j                  ej                  dk  d      d        Zy<)CloudPickleTestc                 :    t        j                  d      | _        y )Ntmp_cloudpickle_test_)prefix)tempfilemkdtemptmpdirr$   s    r    setUpzCloudPickleTest.setUp}   s    &&.EFr"   c                 B    t        j                  | j                         y r   )shutilrmtreera   r$   s    r    tearDownzCloudPickleTest.tearDown   s    dkk"r"   CPython)      r   )rh   ri      z3Underlying bug fixed upstream starting Python 3.8.2)reasonc                      G d d      } |       }t        j                  |      }t        j                  |       ~ |       J d       y )Nc                       e Zd Zy)FCloudPickleTest.test_reducer_override_reference_cycle.<locals>.MyClassNr&   r'   r(   r)   r"   r    MyClassrn          r"   rp   z)'del'-ed my_object has not been collected)weakrefrefr.   r/   )r   rp   	my_objectwrs       r    %test_reducer_override_reference_cyclez5CloudPickleTest.test_reducer_override_reference_cycle   sF    	 	 I	[[#)$t|HHH|r"   c                    t        d      }t        d      }t        || j                        }| j	                   ||       ||             t        dd      }t        || j                        }| j	                   ||       ||             y )N
   r   r+   r   rh   )ranger   r1   r,   assertEqual)r   dgettergetter2s       r    test_itemgetterzCloudPickleTest.test_itemgetter   sp    "IA!&4==AGAJ/Aq!!&4==AGAJ/r"   c                 B    G d d      } |       }t        d      }t        || j                        }| j                   ||       ||             t        dd      }t        || j                        }| j                   ||       ||              |       |_        t        d      }t        || j                        }| j                   ||       ||             t        dd      }t        || j                        }| j                   ||       ||             y )Nc                       e Zd Zd Zy)*CloudPickleTest.test_attrgetter.<locals>.Cc                     |S r   r)   )r   r;   s     r    __getattr__z6CloudPickleTest.test_attrgetter.<locals>.C.__getattr__   s    r"   Nr&   r'   r(   r   r)   r"   r    rT   r      s    r"   rT   rA   r+   rJ   ze.aze.b)r   r1   r,   rz   e)r   rT   r{   r|   r}   s        r    test_attrgetterzCloudPickleTest.test_attrgetter   s    	 	 CC!&4==AGAJ/C%!&4==AGAJ/cE"!&4==AGAJ/E5)!&4==AGAJ/r"   zRequires pytest -s to passc                     t         j                  }t        j                  t	        j
                  || j                              }| j                  ||       y Nr+   )sysstderrr   r-   r.   r/   r,   rz   )r   out1out2s      r    test_pickling_file_handlesz*CloudPickleTest.test_pickling_file_handles   s:    zz||K--dT]]KLt$r"   c                       G d d      } |       a  j                  t         fd       d } j                  d|j                  j
                  v        t        j                  |       y )Nc                       e Zd Zd Zy)6CloudPickleTest.test_func_globals.<locals>.Unpicklablec                     t        d      )Nznot picklable	Exceptionr$   s    r    r%   zACloudPickleTest.test_func_globals.<locals>.Unpicklable.__reduce__   s    00r"   Nr&   r'   r(   r%   r)   r"   r    Unpicklabler      s    1r"   r   c                  N    t        j                  t         j                        S r   )r.   r/   exitr,   r$   s   r    <lambda>z3CloudPickleTest.test_func_globals.<locals>.<lambda>   s    [->->4==.* r"   c                  .    t        j                  d       y )Nr   )r   r   r)   r"   r    fooz.CloudPickleTest.test_func_globals.<locals>.foo   s    HHQKr"   r   )r   assertRaisesr   
assertTrue__code__co_namesr.   r/   )r   r   r   s   `  r    test_func_globalsz!CloudPickleTest.test_func_globals   s[    	1 	1
 }) &* 	+	 	#,,"7"778#r"   c                    	 t        d      }t        || j                        }| j                  |t	        |             t        ddd      }t        || j                        }| j                  |t	        |             y # t
        $ r Y y w xY w)NHellor+   rj   rh   )bufferr1   r,   rz   str	NameError)r   
buffer_objbuffer_clones      r    test_bufferzCloudPickleTest.test_buffer   sx    	J*:NL\3z?;A.J*:NL\3z?; 		s   A<A? ?	B
Bc                     t        d      }| j                  t        || j                        |j	                                y )Ns   Hellor+   
memoryviewrz   r1   r,   tobytesr   r   s     r    test_memoryviewzCloudPickleTest.test_memoryview   s3    )
dmmL#++-	/r"   c                     dddj                         }t        |      }| j                  ||       t        |t        j
                        sJ y Nr   rj   rA   rJ   )rW   r1   rz   
isinstance_collections_abc	dict_keysr   rW   resultss      r    test_dict_keyszCloudPickleTest.test_dict_keys   sF    Q$$&!$'$''#3#=#=>>>r"   c                     dddj                         }t        |      }| j                  t        |      t        |             t	        |t
        j                        sJ y r   )valuesr1   rz   rV   r   r   dict_valuesr   r   r   s      r    test_dict_valuesz CloudPickleTest.test_dict_values   sN    q!((*!&)&.9'#3#?#?@@@r"   c                     dddj                         }t        |      }| j                  ||       t        |t        j
                        sJ y r   )itemsr1   rz   r   r   
dict_itemsr   r   r   s      r    test_dict_itemszCloudPickleTest.test_dict_items   sF    a &&(!%(%('#3#>#>???r"   c                     t        j                  ddg      j                         }t        |      }| j	                  ||       t        |      t        |      k(  sJ y N)rA   r   )rJ   rj   )collectionsOrderedDictrW   r1   rz   typer   s      r    test_odict_keyszCloudPickleTest.test_odict_keys   sP    &&(';<AAC!$'$'DzT']***r"   c                     t        j                  ddg      j                         }t        |      }| j	                  t        |      t        |             t        |      t        |      k(  sJ y r   )r   r   r   r1   rz   listr   r   s      r    test_odict_valuesz!CloudPickleTest.test_odict_values   sX    (((H)=>EEG!&)gV5F|tG},,,r"   c                     t        j                  ddg      j                         }t        |      }| j	                  ||       t        |      t        |      k(  sJ y r   )r   r   r   r1   rz   r   r   s      r    test_odict_itemsz CloudPickleTest.test_odict_items   sP    ''8(<=CCE!%(%(E{d7m+++r"   c                     t        d      ddd   }| j                  t        || j                        |j	                                y )Ns   Hello!Hello!Hello!rj      r+   r   r   s     r    )test_sliced_and_non_contiguous_memoryviewz9CloudPickleTest.test_sliced_and_non_contiguous_memoryview  s>    .qAv6
dmmL#++-	/r"   c                     t        dt        d      z        }| j                  t        || j                        |j                                y )Ns   Hello!g    cAr+   )r   rU   rz   r1   r,   r   r   s     r    test_large_memoryviewz%CloudPickleTest.test_large_memoryview	  s<    	CH 45
dmmL#++-	/r"   c                 ^    | j                   t        d | j                               d       y )Nc                       yNr   r)   r)   r"   r    r   z-CloudPickleTest.test_lambda.<locals>.<lambda>      r"   r+   r   rz   r1   r,   r$   s    r    test_lambdazCloudPickleTest.test_lambda  s&    B	DMMBDa	Ir"   c                     d\  fdfd}| j                   t        || j                        d      d       y )N)r   rj   c                     | z   S r   r)   )xrA   s    r    r   z5CloudPickleTest.test_nested_lambdas.<locals>.<lambda>  s    q1u r"   c                      |       z  S r   r)   )r   rJ   f1s    r    r   z5CloudPickleTest.test_nested_lambdas.<locals>.<lambda>  s    r!uz r"   r+   r   r   )r   f2rA   rJ   r   s     @@@r    test_nested_lambdasz#CloudPickleTest.test_nested_lambdas  s9    1!DdmmDQGKr"   c                     d }d }t         |       | j                        }| j                   |       |       t         |d      | j                        }| j                   |d      d       y )Nc                        fd  S )Nc                       S r   r)   gs   r    r   z=CloudPickleTest.test_recursive_closure.<locals>.f1.<locals>.g  s    r"   r)   r   s   @r    r   z2CloudPickleTest.test_recursive_closure.<locals>.f1  s    Hr"   c                       fdS )Nc                 .    | dk  rS |  | dz
        z  S r   r)   )nbaser   s    r    r   z=CloudPickleTest.test_recursive_closure.<locals>.f2.<locals>.g  s      Avt71qQx<7r"   r)   )r   r   s   `@r    r   z2CloudPickleTest.test_recursive_closure.<locals>.f2  s    8Hr"   r+   rj         r1   r,   rz   )r   r   r   g1g2s        r    test_recursive_closurez&CloudPickleTest.test_recursive_closure  sZ    	
	
 RTDMM:r"RUT]];A$r"   c                     d }| j                  |j                  d u d       t        || j                        }| j                  |j                  d u d       y )Nc                       y)z-a function with no closure cells
            Nr)   r)   r"   r    fz9CloudPickleTest.test_closure_none_is_preserved.<locals>.f*  r   r"   zf actually has closure cells!msgr+   z.g now has closure cells even though f does not)r   __closure__r1   r,   r   r   r   s      r    test_closure_none_is_preservedz.CloudPickleTest.test_closure_none_is_preserved)  s[    	 	MMT!/ 	 	

 A6MMT!@ 	 	
r"   c                    d } |       }t        j                  t              5   |        d d d        t        || j                        }t        j                  t              5   |        d d d        y # 1 sw Y   JxY w# 1 sw Y   y xY w)Nc                      	 fd} | S )Nc                  
      y r   r)   )cells   r    r   z?CloudPickleTest.test_empty_cell_preserved.<locals>.f.<locals>.g?  s    r"   r)   )r   r   s    @r    r   z4CloudPickleTest.test_empty_cell_preserved.<locals>.f;  s     Hr"   r+   )pytestraisesr   r1   r,   )r   r   r   r   s       r    test_empty_cell_preservedz)CloudPickleTest.test_empty_cell_preserved:  ss    	 S]]9% 	D	 R$--8]]9% 	D	 			 		 	s   A5$B5A>B
c                 p    d }t         |       | j                        }| j                   |       d       y )Nc                      ddhfd} | S )Nr   rj   c                      t               S r   )len)ss   r    r   z=CloudPickleTest.test_unhashable_closure.<locals>.f.<locals>.gP  s    1vr"   r)   )r   r   s    @r    r   z2CloudPickleTest.test_unhashable_closure.<locals>.fM  s    AA Hr"   r+   rj   r   r   s      r    test_unhashable_closurez'CloudPickleTest.test_unhashable_closureL  s-    	 AC$--8a r"   c                     G d d      } G d d|      }| j                   |       j                         d       t        || j                        }| j                   |       j                         d       | j                  |j                  d        |       }t        || j                        }| j                  |j                         d       y )Nc                       e Zd Zd Zy)NCloudPickleTest.test_dynamically_generated_class_that_uses_super.<locals>.Basec                      yr   r)   r$   s    r    rB   zUCloudPickleTest.test_dynamically_generated_class_that_uses_super.<locals>.Base.method[  s    r"   Nr&   r'   r(   rB   r)   r"   r    Baser  Z  s    r"   r  c                   "     e Zd ZdZ fdZ xZS )QCloudPickleTest.test_dynamically_generated_class_that_uses_super.<locals>.DerivedDerived Docstringc                 &    t         |          dz   S r   )superrB   )r   	__class__s    r    rB   zXCloudPickleTest.test_dynamically_generated_class_that_uses_super.<locals>.Derived.method`  s    w~'!++r"   )r&   r'   r(   rD   rB   __classcell__)r  s   @r    Derivedr	  ^  s    , ,r"   r  rj   r+   r
  )rz   rB   r1   r,   rD   )r   r  r  UnpickledDerivedorig_dr{   s         r    0test_dynamically_generated_class_that_uses_superz@CloudPickleTest.test_dynamically_generated_class_that_uses_superX  s    	 		,d 	,
 	))+Q/ +7T]]K)+224a8 	)113FG FT]];Q'r"   c                     G d d      }||_          |       |_        t        || j                        }t         |             }| j	                   |       j                         d       | j	                  |j                         j                         d       | j	                  |j                  j                         d       | j	                  |j                         d       y )Nc                       e Zd Zd Zy):CloudPickleTest.test_cycle_in_classdict_globals.<locals>.Cc                      y)Nwoohoo!r)   r$   s    r    it_workszCCloudPickleTest.test_cycle_in_classdict_globals.<locals>.C.it_worksv  s     r"   N)r&   r'   r(   r  r)   r"   r    rT   r  t  s    !r"   rT   r+   r  )C_againinstance_of_Cr1   r,   rz   r  )r   rT   depickled_Cdepickled_instances       r    test_cycle_in_classdict_globalsz/CloudPickleTest.test_cycle_in_classdict_globalsr  s    	! 	!
 	#%a$--@,QS1 	//19=,,.7799E22;;=yI+446	Br"   c                    dfd| j                   t        | j                        dd      d       | j                   t        | j                        dd      d       fd	 G fd
d      }t        || j                        }| j                   |d      j                         d       | j                   |d      j	                  d      d       t        || j                        }| j                   |d      j	                  d      d       | j                  t         |d            j                         d       | j                  t         |d            j	                  d      d       t         |d      | j                        }| j                  |j	                  d      d       | j                   t         |d      j                               d       | j                   t         |d      j                        d      d       t         |d      j                  | j                        }| j                   |d      d       y )NrH   c                 <    t        t        d             | |z   z  S )Nrx   )sumry   )r   yLOCAL_CONSTANTs     r    some_functionzNCloudPickleTest.test_locally_defined_function_and_class.<locals>.some_function  s    b	NE^++r"   r+   )   r   Q   rh   rj   c                       S r   r)   )r"  s   r    r   zICloudPickleTest.test_locally_defined_function_and_class.<locals>.<lambda>      . r"   c                   .    e Zd ZdZd Z fdZfdZy)JCloudPickleTest.test_locally_defined_function_and_class.<locals>.SomeClassz:Overly complicated class with nested references to symbolsc                     || _         y r   )valuer   r+  s     r    r!   zSCloudPickleTest.test_locally_defined_function_and_class.<locals>.SomeClass.__init__  s	    "
r"   c                             z  S r   r)   )r   r"  hidden_constants    r    onezNCloudPickleTest.test_locally_defined_function_and_class.<locals>.SomeClass.one  s    %(999r"   c                 R    | j                          |d      z   | j                  z   S r   )r/  r+  )r   r   r#  s     r    some_methodzVCloudPickleTest.test_locally_defined_function_and_class.<locals>.SomeClass.some_method  s$    xxzM!Q$77$**DDr"   N)r&   r'   r(   rD   r!   r/  r1  )r"  r.  r#  s   r    	SomeClassr)    s    L#:Er"   r2  r      )rz   r1   r,   r/  r1  r   )r   r2  clone_classnew_instance
new_methodr"  r.  r#  s        @@@r    'test_locally_defined_function_and_classz7CloudPickleTest.test_locally_defined_function_and_class  s   	, 	OOPRTUVXYZO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@B1)A)AB2FJ+IaL,D,D59]]D
B+r"   c                     t        j                  t        d      }t        || j                        }| j                   |d      d       y )Nr   r+      )	functoolspartialminr1   r,   rz   )r   partial_objpartial_clones      r    test_partialzCloudPickleTest.test_partial  s9    ''Q/'dmmLq)1-r"   PyPyz"Skip numpy and scipy tests on PyPyc                 .   t         rD| j                  t        t         j                  | j                        t         j                         n	 t
        rD| j                  t        t
        j                  | j                        t
        j                         y y r   )nprz   r1   addr,   sppivr$   s    r    
test_ufunczCloudPickleTest.test_ufunc  s`     _RVVdmmLVV% _SVVdmmL VV% r"   c                     d}t        j                  t        j                  || j                              }| j	                  ||       y )Nr   rj   rh   r9  r+   )r.   r-   r/   r,   rz   )r   r0   returned_objs      r    test_loads_namespacez$CloudPickleTest.test_loads_namespace  s=    "(():):$--*) *l+r"   c                     d}t        j                         }t        j                  ||       |j	                  d       t        j
                  |      }| j                  ||       y )NrH  r   )ioBytesIOr.   dumpseekloadrz   )r   r0   biorI  s       r    test_load_namespacez#CloudPickleTest.test_load_namespace  sM    jjlc""'',l+r"   c                     d }t        || j                        }t         |d            t         |d            k(  sJ t         |d            t        t	        d            k(  sJ y )Nc              3   4   K   t        |       D ]  }|  y wr   )ry   )cntis     r    some_generatorz6CloudPickleTest.test_generator.<locals>.some_generator  s     3Z s   r+   rh   )r1   r,   r   r   ry   )r   rW  gen2s      r    test_generatorzCloudPickleTest.test_generator  sW    	 ~FDG}^A%6 7777DG}U1X...r"   c                 D    G d d      }|j                   d   }|j                   d   }t        || j                        |_        t        || j                        |_        | j                  |j                         d       | j                  |j	                         d       y )Nc                   ,    e Zd Zed        Zed        Zy)+CloudPickleTest.test_classmethod.<locals>.Ac                       y)Nsmr)   r)   r"   r    test_smz3CloudPickleTest.test_classmethod.<locals>.A.test_sm      r"   c                      yNcmr)   clss    r    test_cmz3CloudPickleTest.test_classmethod.<locals>.A.test_cm  r`  r"   N)r&   r'   r(   staticmethodr_  classmethodrf  r)   r"   r    rE   r\    s&      r"   rE   r_  rf  r+   r^  rc  )__dict__r1   r,   r_  rf  rz   )r   rE   r^  rc  s       r    test_classmethodz CloudPickleTest.test_classmethod  sz    	 	 ZZ	"ZZ	"#B?	#B?	d+d+r"   c                      G d d      }t        |j                  | j                        |_        | j                  |j                         d       y )Nc                       e Zd Zed        Zy)1CloudPickleTest.test_bound_classmethod.<locals>.Ac                      yrb  r)   rd  s    r    rf  z9CloudPickleTest.test_bound_classmethod.<locals>.A.test_cm  r`  r"   N)r&   r'   r(   rh  rf  r)   r"   r    rE   rm    s     r"   rE   r+   rc  )r1   rf  r,   rz   )r   rE   s     r    test_bound_classmethodz&CloudPickleTest.test_bound_classmethod  s:    	 	
 $AIIF	d+r"   c                 f    t        t        j                        }| j                   |d      d       y )NabcABC)r1   r   upperrz   )r   r   s     r    test_method_descriptorsz'CloudPickleTest.test_method_descriptors   s$    CII&55)r"   c                      G d d      }t        |j                  | j                        }| j                  |j                  |j                  j                         y )Nc                       e Zd Zd Zy)<CloudPickleTest.test_instancemethods_without_self.<locals>.Fc                     |dz   S r   r)   r   r   s     r    r   z>CloudPickleTest.test_instancemethods_without_self.<locals>.F.f  s    1ur"   N)r&   r'   r(   r   r)   r"   r    Frw    s    r"   rz  r+   )r1   r   r,   rz   r&   )r   rz  r   s      r    !test_instancemethods_without_selfz1CloudPickleTest.test_instancemethods_without_self  s>    	 	 ACC$--8QSS\\2r"   c                 f    t        t        | j                        }| j                  t        |       y r   )r1   r   r,   rz   )r   pickle_clones     r    test_modulezCloudPickleTest.test_module  s"    &vF.r"   c                 @   t        j                  d      }d}t        t        j                  |      |j
                         t        || j                        }| j                  |j                  |j                         | j                  |j                  d      |j                  d             | j                  |j                         j                  d      |j                         j                  d             t        j                         dk7  rt        || j                        }| j                  |j                  |j                         | j                  |j                  d      |j                  d             | j                  |j                         j                  d      |j                         j                  d             t        ||g      \  }}| j                  t!        |      t!        |             	 |t"        j$                  d<   t        |j                  | j                        }| j                  |j                  d       |d             t"        j$                  j'                  dd        y # t"        j$                  j'                  dd        w xY w)Nmodz
        x = 1
        def f(y):
            return x + y

        class Foo:
            def method(self, x):
                return f(x)
        r+   r   r@  )types
ModuleTypeexectextwrapdedentri  r1   r,   rz   r   r   FoorB   platformpython_implementationr   idr   modulespop)r   r  codemod2mod3mod1depickled_fs          r    test_dynamic_modulez#CloudPickleTest.test_dynamic_module  s   u% 	X__T"CLL1sT]];'q466!9-))!,dhhj.?.?.BC))+v5)#FDSUUDFF+SUU1Xtvvay1SWWY--a0$((*2C2CA2FG %c3Z0
dD2d8,	)!$CKK)#%%$--HKSUU1X{1~6KKOOE4(CKKOOE4(s   ?AI; ;"Jc                    t         j                  j                  | j                  d      }d}|j	                  t        |            }	 ddlm}  |       }t        |d      5 }t        j                  ||| j                         d d d        t        t        j                  |             t        j                  |       y # 1 sw Y   =xY w# t        j                  |       w xY w)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wbr+   )ospathjoinra   formatr6   !srsly.tests.cloudpickle.testutilsr  openr.   rN  r,   r   r  r  unlink)r   r  child_process_scriptr  r   r   s         r    test_module_locals_behaviorz+CloudPickleTest.test_module_locals_behavior6  s    
 GGLL6HI   4::")*;"<  ;  >	)M#%A'. ?!  A>? %X__5I%JK II'(? ? II'(s$   	C "#C&C C
C C$c                     G d d      }t        j                  d      }t        d|j                         |j	                  d      dk(  sJ d|j                  v sJ  |       }t        j                  t              5  t        j                  |       d d d        t        |j                  d   t              r||j                  d   d<   n;t        |j                  d   t         j                        r||j                  d   _        t        || j                  	      }d|j                  v sJ t        |j                  d   t              rd
|j                  v sAJ t        |j                  d   t         j                        rt!        |j                  d
      sJ |j	                  d      dk(  sJ |j	                  d      dk(  sJ y # 1 sw Y   5xY w)Nc                       e Zd Zd Zy)XCloudPickleTest.test_dynamic_module_with_unpicklable_builtin.<locals>.UnpickleableObjectc                     t        d      )NzUnpicklable object)r9   r$   s    r    r%   zcCloudPickleTest.test_dynamic_module_with_unpicklable_builtin.<locals>.UnpickleableObject.__reduce__]  s     !566r"   Nr   r)   r"   r    UnpickleableObjectr  \  s    7r"   r  r  zf = lambda x: abs(x)r   __builtins__unpickleable_objr+   abs)r  r  r  ri  r   r   r   r9   r.   r/   r   dictr  r1   r,   r  hasattr)r   r  r  unpicklable_objdepickled_mods        r    ,test_dynamic_module_with_unpicklable_builtinz<CloudPickleTest.test_dynamic_module_with_unpicklable_builtinV  s   	7 	7 u%#S\\2uuRyA~~---,.]]:& 	/o.	/ cll>2D9?NCLL();<^4e6F6FG<KCLL(9'dmmD!7!7777m,,^<dCM66666&&~68H8HJ=55u===r"a''' uuRyA~~7	/ 	/s   <GGc                 >   t        j                  d      }d}t        t        j                  |      |j
                         t        j                  j                  | j                  d      }t        j                  j                  | j                  d      }d}d}|j                  |      }|j                  t        |      t        |      t        |      | j                        }	 t        |d	      5 }t        j                  ||| j                  
       d d d        t!        t        j                  |             t        j                  j#                  |      rt        j$                  |       t        j                  j#                  |      rt        j$                  |       y y # 1 sw Y   xY w# t        j                  j#                  |      rt        j$                  |       t        j                  j#                  |      rt        j$                  |       w w xY w)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_scriptr,   r  r+   )r  r  r  r  r  ri  r  r  r  ra   r  r6   r,   r  r.   rN  r   existsr  )r   r  r  r  r  r  r  fids           r    .test_load_dynamic_module_in_grandchild_processz>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$7 C3  cDMMBC %X__5I%JK ww~~89		45ww~~78		34 9C C ww~~89		45ww~~78		34 9s%   &F1 2#F%&F1 %F.*F1 1A+Hc                     d d }fd}t        j                  || j                        }d|v sJ d|v sJ d|vsJ d|vsJ y )	Nc                     | dz   S r   r)   r   s    r    nested_functionzDCloudPickleTest.test_correct_globals_import.<locals>.nested_function      q5Lr"   c                 ,    t        j                  |       S r   )mathexpr  s    r    unwanted_functionzFCloudPickleTest.test_correct_globals_import.<locals>.unwanted_function  s    88A;r"   c                      |       |z   S r   r)   )r   r!  r  s     r    my_small_functionzFCloudPickleTest.test_correct_globals_import.<locals>.my_small_function  s    "1%))r"   r+   s   my_small_functions   nested_functions   unwanted_functions   math)r.   r/   r,   )r   r  r  rJ   r  s       @r    test_correct_globals_importz+CloudPickleTest.test_correct_globals_import  se    			* /$--H $q(((!Q&&&#1,,,ar"   c                 P   t        j                  d       ddlm} dd l}dd l}dd l}t        |      sJ t        |j                        sJ t        |      sJ t        |j                        sJ t        j                  d      }t        |      rJ t        j                         dk(  rdd l}t        |      sJ dd lmc m} t        |      sJ t%        || j&                        |u sJ ddlm} t        |      sJ t%        || j&                        |u sJ t        j,                  t.              5  dd l}d d d        ddlm}	 t        |	      rJ t5        |	d	      rJ t%        |	| j&                        }
|
|	usJ |	j7                  d
      |
j7                  d
      k(  sJ dd lmc mc m} t        |      sJ t%        || j&                        |u sJ d}t        j,                  t<        |      5  t        t?                      d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)N_cloudpickle_testpkgr   r   dynamic_moduler@  r+   )dynamic_submodule_two)submodule_threer'   r   z.cannot check importability of object instancesmatch) r   importorskipsrsly.cloudpickle.compatr   os.pathr   collections.abcr   r  rq  r  r  r  r  _codecs*_cloudpickle_testpkg.mod.dynamic_submoduler  dynamic_submoduler1   r,   _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_importabilityz)CloudPickleTest.test_module_importability  s   233*6222*277333*;777*;??;;;))*:;.~>>>))+v5.w777 	?>*1---q4==9Q>>> 	I +2...rDMM:b@@@ ]];' 	<;	<B.r222 2|,,,&rDMMB2%%%ttAw,..++++ 	UT*2...rDMM:b@@@C]]9H5 	2'1	2 	2'	< 	<&	2 	2s   2H3HHH%c                 b    | j                  t        t        t        | j                               y r   )rz   Ellipsisr1   r,   r$   s    r    test_EllipsiszCloudPickleTest.test_Ellipsis  s!    (DMMJ	Lr"   c                 f    t        t        | j                        }| j                  t        |       y r   )r1   NotImplementedr,   rz   )r   ExcClones     r    test_NotImplementedz#CloudPickleTest.test_NotImplemented!  s"    ">DMMJ2r"   c                 z    t        t        d       | j                        }| j                  t        d       |       y r   )r1   r   r,   rz   r   ress     r    test_NoneTypezCloudPickleTest.test_NoneType%  s*    d4j4==AdS)r"   c                     t        t        t              | j                        }| j	                  t        t              |       y r   )r1   r   r  r,   rz   r  s     r    test_EllipsisTypez!CloudPickleTest.test_EllipsisType)  s*    d8nt}}Eh-r"   c                     t        t        t              | j                        }| j	                  t        t              |       y r   )r1   r   r  r,   rz   r  s     r    test_NotImplementedTypez'CloudPickleTest.test_NotImplementedType-  s,    d>2T]]Kn-s3r"   c                     t        t        | j                        t        u sJ ddlm} t        || j                        |u sJ y )Nr+   r   )mkdir)r1   zipr,   r  r  )r   r  s     r    test_builtin_functionz%CloudPickleTest.test_builtin_function1  s9    
 sT]];sBBBut}}=FFFr"   c                     t         t        t        t        t        t
        fD ]7  }t        |j                  | j                        }t         ||      |      r7J  y r   )
r   tupleset	frozensetr  r  r1   __new__r,   r   )r   t
cloned_news      r    test_builtin_type_constructorz-CloudPickleTest.test_builtin_type_constructor<  sH    
 uc9dF: 	0A(T]]KJjmQ///	0r"   c                 J   d}|j                   }t        |      j                   }t        |      j                  d   }||u sJ t        || j                        }t        || j                        }t        || j                        } |        |       k(  sJ ||u sJ ||u sJ y )N      ?hexr+   )r  r   ri  r1   r,   )r   r0   bound_classicmethodunbound_classicmethodclsdict_classicmethoddepickled_bound_methdepickled_unbound_methdepickled_clsdict_meths           r    test_builtin_classicmethodz*CloudPickleTest.test_builtin_classicmethodQ  s    !gg $S	 $S	 2 25 9$(====.$-- 9!0!DMM";!0!DMM";
 $%)<)>>>>%)>>>>%)>>>>r"   aarch64Nrj   )rh   rx   )rh   rx   ri   )rh      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                 r   d}|j                   }t        |      j                   }t        |      j                  d   }t        || j                        }t        || j                        }t        || j                        }d} ||       ||      k(  sJ  ||       ||      k(  sJ t        j                         dk(  r ||       |t        |      k(  sJ t        j                         dk(  rIt        |      t        |      k(  sJ |j                  t        |      |j                  t        |      k(  sJ y y )Nr  fromhexr+   0x1rg   r@  )	r  r   ri  r1   r,   r  r  float__func__)	r   r0   bound_clsmethodunbound_clsmethodclsdict_clsmethodr  r  r  args	            r    test_builtin_classmethodz(CloudPickleTest.test_builtin_classmethodh  sI    ++ I-- )%  /dmm 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                 >   d}|j                   }t        |      j                   }t        |      j                  d   }t        || j                        }t        || j                        }t        || j                        } |        |       k(  sJ ||u sJ ||u sJ y )Nr  __repr__r+   )r  r   ri  r1   r,   )r   r0   bound_slotmethodunbound_slotmethodclsdict_slotmethodr  r  r  s           r    test_builtin_slotmethodz'CloudPickleTest.test_builtin_slotmethod  s    <<!#Y//!#Y//
;.t}} 6!0"8!0"8
 $%)9);;;;%);;;;%);;;;r"   z0No known staticmethod example in the pypy stdlibc                    d}|j                   }t        |      j                   }t        |      j                  d   }||u sJ t        || j                        }t        || j                        }t        || j                        }||u sJ ||u sJ |j
                  |j
                  u sJ t        |      t        |      u  y )Nr   	maketransr+   )r  r   ri  r1   r,   r  )r   r0   bound_staticmethodunbound_staticmethodclsdict_staticmethodr  r  r  s           r    test_builtin_staticmethodz)CloudPickleTest.test_builtin_staticmethod  s      ]]#Cy22#Cy11+>!%9999. 8!0 4==":!0 4==": $'9999%)==== &..2F2O2OOOO#$-A(BBr"   ztest needs Tornado installedc                   	 ddl m	m} 	j                  	fd       	j                  	fd       }t	        j
                  ||g| j                        }d x}t        j                  |      \  }}| j                  ||u        |j                  j                         }|j                  t        j                  |d            }| j                  |d       y )Nr   )genioloopc              3   Z   K   j                  |        j                  |dz         wr   )sleepReturn)r   r!  r  s     r    r   z1CloudPickleTest.test_tornado_coroutine.<locals>.f  s(     ))A,**QU##s   (+c              3   J   K    d|       }j                  |dz         w)Ng{Gz?r   )r  )r!  r  r   r  s     r    r   z1CloudPickleTest.test_tornado_coroutine.<locals>.g  s(     $
"C**S1W%%s    #r+   r   r3  )tornador  r  	coroutiner.   r/   r,   r   r-   r   IOLoopcurrentrun_syncr:  r;  rz   )
r   r  r   datar   g3loopr  r   r  s
           @@r    test_tornado_coroutinez&CloudPickleTest.test_tornado_coroutine  s     	(		$ 
	$ 
	& 
	&   !Q$--@Ad#Bb!}}$$&mmI--b!45a r"   )rh   r  r   beta)rh   r  r   r(  r9  z.https://github.com/python/cpython/issues/92932c                 (   d}t        d|      D cg c]  }d|z  	 }}t        j                  d      }|D ci c]  }||j                  d       }}dj	                  dj                  |            }t        t        j                  |      ||       |d	   } |       }	t        j                  ||g| j                  
      }
d x}}t        j                  |
      \  }}| j                  ||u        | j                   |       |	       y c c}w c c}w )Ni r   zg%drH   d   zx
        import zlib

        def f():
            x = {tup}
            return zlib.crc32(bytes(bytearray(x)))
        z, )tupr   r+   )ry   randomRandom	randranger  r  r  r  r  r.   r/   r,   r   r-   r   rz   )r   nvarsrV  namesrnamer{   r  r   r  r$  r   f3s                r    test_extended_argz!CloudPickleTest.test_extended_arg  s     $)!UO4q44MM"056T1;;s##66 Ftyy'F( 	 	X__T"Aq)cFc  !Q$--@Ad#Bb!s#) 56s
   D
Dc                    dd l ad }t        j                  || j                        }bt        t        j                        D ]+  }|j                  d      d   dk(  st        j                  |= - t        j                  |      } |        y )Nr   c                  L    t         j                  j                  j                  } y r   xmletreeElementTreeCommentr  s    r    examplez/CloudPickleTest.test_submodule.<locals>.example  s    		%%--Ar"   r+   .r8  )xml.etree.ElementTreer8  r.   r/   r,   r   r   r  splitr   r-   )r   r<  r   r;   r   s        r    test_submodulezCloudPickleTest.test_submodule  sv     	%	. g> % 	&Dzz#q!U*KK%	&
 LLO	r"   c                     d } |       }t        j                  || j                        }t        t        j
                        D ]+  }|j                  d      d   dk(  st        j
                  |= - t        j                  |      } |        y )Nc                      dd l fd} | S )Nr   c                  F    j                   j                  j                  } y r   )r9  r:  r;  )r   r8  s    r    r<  zFCloudPickleTest.test_submodule_closure.<locals>.scope.<locals>.example  s    II))11r"   )r>  )r<  r8  s    @r    scopez5CloudPickleTest.test_submodule_closure.<locals>.scope  s    (2Nr"   r+   r=  r   r8  )r.   r/   r,   r   r   r  r?  r-   )r   rD  r<  r   r;   r   s         r    test_submodule_closurez&CloudPickleTest.test_submodule_closure  sx    	
 'g> % 	&Dzz#q!U*KK%	& a 	r"   c                    d }dd l a |       }t        j                  || j                        }dt        j                  |      j                  d      z   dz   }t        j                  t        j                  d|g      rJ y )Nc                      d } | S )Nc                  L    t         j                  j                  j                  } y r   r7  r  s    r    r<  zACloudPickleTest.test_multiprocess.<locals>.scope.<locals>.example(  s    II))11r"   r)   )r<  s    r    rD  z0CloudPickleTest.test_multiprocess.<locals>.scope'  s    2Nr"   r   r+   [import base64; from srsly.cloudpickle.compat import pickle; pickle.loads(base64.b32decode('ascii'))()-c)r>  r8  r.   r/   r,   base64	b32encodedecode
subprocesscallr   
executabler   rD  r<  r   commands        r    test_multiprocessz!CloudPickleTest.test_multiprocess%  s|    	
 	%'g>5 ##A&--g67 	
 ??CNND'#BCCCCr"   c                    d } |       }dd l mc ma t        j                  || j
                        }dt        j                  |      j                  d      z   dz   }t        j                  t        j                  d|g      rJ y )Nc                      dd l m fd} | S )Nr   c                  >    t         j                  } j                  } y r   )r9  r;  r:  )r   foobars    r    r<  z;CloudPickleTest.test_import.<locals>.scope.<locals>.example@  s    MM&&r"   )	xml.etreer9  )r<  rY  s    @r    rD  z*CloudPickleTest.test_import.<locals>.scope>  s    &' Nr"   r   r+   rI  rJ  rK  rL  )r>  r9  r:  r.   r/   r,   rM  rN  rO  rP  rQ  r   rR  rS  s        r    test_importzCloudPickleTest.test_import:  s    	 '--g>5 ##A&--g67 	
 ??CNND'#BCCCCr"   c                     t        j                         }t        j                  t        d      5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nz4only be shared between processes through inheritancer  )multiprocessingLockr   r   RuntimeErrorr.   r/   )r   locks     r     test_multiprocessing_lock_raisesz0CloudPickleTest.test_multiprocessing_lock_raisesP  sB    ##%]]</ef 	$d#	$ 	$ 	$s   AAc                     t               }t        j                  t              5  |j                   d d d        t               }t        ||       | j                  |j                  |u d       y # 1 sw Y   ?xY w)Nzcell contents not set correctlyr   )r   r   r   r9   cell_contentsr  r   r   )r   r   obs      r    test_cell_manipulationz&CloudPickleTest.test_cell_manipulationU  si    !]]:& 		 Xr"$1 	 	
	 	s   A//A8c                    t        j                  |      }t        || j                        }| j	                  ||u ||f       t        j                  |      }dj                  t        j                  |      j                  d            }t        j                  t        j                  dd|gt        j                  t        j                         }|j#                         \  }}| j%                  |j'                         d       | j%                  |j)                         j                         d|j*                   d	       y )
Nr+   zif 1:
            import base64, srsly.cloudpickle as cloudpickle, logging

            logging.basicConfig(level=logging.INFO)
            logger = cloudpickle.loads(base64.b32decode(b'{}'))
            logger.info('hello')
            rJ  z	-W ignorerL  )stdoutr   r   zINFO:z:hello)logging	getLoggerr1   r,   r   r.   r/   r  rM  rN  rO  rP  Popenr   rR  PIPESTDOUTcommunicaterz   waitstripr2  )	r   r2  loggerpickleddumpedr  procout_s	            r    check_loggerzCloudPickleTest.check_loggerb  s    ""4(!&4==A6)GV+<=""6* v''/66w?@ 	 dD I'1'1'8'8: !!#Qa(++- V4	6r"   c                 H    | j                  d        | j                  d       y )Nzcloudpickle.dummy_test_logger)rv  r$   s    r    test_loggerzCloudPickleTest.test_loggerx  s    $9:r"   c                     t        t        j                  t        j                        sJ t        t        j                        }| j                  |t        j                         y r   )r   r  realr  GetSetDescriptorTyper1   assertIs)r   depickled_descriptors     r    test_getset_descriptorz&CloudPickleTest.test_getset_descriptor~  s>    %**e&@&@AAA.uzz:*EJJ7r"   c                 X   t        j                  ddi       } G d d      } G d d      }|j                  |       t        ||      rJ t        ||      sJ t	        j
                  |      }d|vsJ d|v sJ t	        j                  |      }t        ||      rJ t        ||      sJ y )	Nrp   r)   c                       e Zd Zy)DCloudPickleTest.test_abc_cache_not_pickled.<locals>.MyUnrelatedClassNro   r)   r"   r    MyUnrelatedClassr    rq   r"   r  c                       e Zd Zy)BCloudPickleTest.test_abc_cache_not_pickled.<locals>.MyRelatedClassNro   r)   r"   r    MyRelatedClassr    rq   r"   r  s   MyUnrelatedClasss   MyRelatedClass)rq  ABCMetaregister
issubclassr.   r/   r-   )r   rp   r  r  r   depickled_classs         r    test_abc_cache_not_pickledz*CloudPickleTest.test_abc_cache_not_pickled  s     ++iR0	 		 	 	(.888.'222g&"!+++ A%%%%++A..@@@./:::r"   c                 &    G d dt         j                        } G fdd|      |j                  t                       }t	        || j
                        }t	        | j
                        }t	        |      }t        t        |      sJ t        t        |      sJ | j                   |       j                         d       | j                  |j                         d       | j                  |j                         d       | j                  |j                         d       | j                   |       j                         d       | j                  |j                         d       | j                   |       j                  d       | j                  |j                  d       | j                  t        |        G fdd|      | j                          j                         d	        G d
 d|      }| j                  t        |       y )Nc                       e Zd Zej                  d        Zeej                  d               Zeej                  d               Z	e
ej                  d               Zy)/CloudPickleTest.test_abc.<locals>.AbstractClassc                      yzA methodNr)   r$   s    r    r1  z;CloudPickleTest.test_abc.<locals>.AbstractClass.some_method  r   r"   c                      yzA classmethodNr)   rd  s    r    some_classmethodz@CloudPickleTest.test_abc.<locals>.AbstractClass.some_classmethod  r   r"   c                       yzA staticmethodNr)   r)   r"   r    some_staticmethodzACloudPickleTest.test_abc.<locals>.AbstractClass.some_staticmethod  r   r"   c                       yz
A propertyNr)   r)   r"   r    some_propertyz=CloudPickleTest.test_abc.<locals>.AbstractClass.some_property  r   r"   N)r&   r'   r(   rq  abstractmethodr1  rh  r  rg  r  propertyr  r)   r"   r    AbstractClassr    s       $   $ %   % !   !r"   r  c                   H    e Zd Zd Ze fd       Zed        Zed        Z	y)/CloudPickleTest.test_abc.<locals>.ConcreteClassc                      yN	it works!r)   r$   s    r    r1  z;CloudPickleTest.test_abc.<locals>.ConcreteClass.some_method      "r"   c                     | k(  sJ yr  r)   re  ConcreteClasss    r    r  z@CloudPickleTest.test_abc.<locals>.ConcreteClass.some_classmethod      m+++"r"   c                       yr  r)   r)   r"   r    r  zACloudPickleTest.test_abc.<locals>.ConcreteClass.some_staticmethod      "r"   c                      yr  r)   r$   s    r    r  z=CloudPickleTest.test_abc.<locals>.ConcreteClass.some_property  r  r"   N
r&   r'   r(   r1  rh  r  rg  r  r  r  r  s   r    r  r    D    # # # # # # #r"   r  r+   r  c                   H    e Zd Zd Ze fd       Zed        Zed        Z	y)7CloudPickleTest.test_abc.<locals>.DepickledBaseSubclassc                      yNit works for realz!r)   r$   s    r    r1  zCCloudPickleTest.test_abc.<locals>.DepickledBaseSubclass.some_method      ,r"   c                     | k(  sJ yr  r)   re  DepickledBaseSubclasss    r    r  zHCloudPickleTest.test_abc.<locals>.DepickledBaseSubclass.some_classmethod      3333,r"   c                       yr  r)   r)   r"   r    r  zICloudPickleTest.test_abc.<locals>.DepickledBaseSubclass.some_staticmethod      ,r"   c                       yr  r)   r)   r"   r    r  zECloudPickleTest.test_abc.<locals>.DepickledBaseSubclass.some_property  r  r"   Nr  r  s   r    r  r    D    - - - - - - -r"   r  r  c                       e Zd Zd Zy)8CloudPickleTest.test_abc.<locals>.IncompleteBaseSubclassc                      yNz&this class lacks some concrete methodsr)   r$   s    r    r1  zDCloudPickleTest.test_abc.<locals>.IncompleteBaseSubclass.some_method      ?r"   Nr&   r'   r(   r1  r)   r"   r    IncompleteBaseSubclassr        @r"   r  rq  rr  r  r  r1   r,   r  rz   r1  r  r  r  r   r  	r   r  concrete_instancedepickled_baser  r  r  r  r  s	          @@r    test_abczCloudPickleTest.test_abc  s   	!CGG 	!(	#M 	#& 	u%)O(O)-37==B,->?%///%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                 &    G d dt         j                        } G fdd|      |j                  t                       }t	        || j
                        }t	        | j
                        }t	        |      }t        t        |      sJ t        t        |      sJ | j                   |       j                         d       | j                  |j                         d       | j                  |j                         d       | j                  |j                         d       | j                   |       j                         d       | j                  |j                         d       | j                   |       j                  d       | j                  |j                  d       | j                  t        |        G fdd|      | j                          j                         d	        G d
 d|      }| j                  t        |       y )Nc                       e Zd Zej                  d        Zej                  d        Zej                  d        Z	ej                  d        Zy)5CloudPickleTest.test_abstracts.<locals>.AbstractClassc                      yr  r)   r$   s    r    r1  zACloudPickleTest.test_abstracts.<locals>.AbstractClass.some_method  r   r"   c                      yr  r)   rd  s    r    r  zFCloudPickleTest.test_abstracts.<locals>.AbstractClass.some_classmethod  r   r"   c                       yr  r)   r)   r"   r    r  zGCloudPickleTest.test_abstracts.<locals>.AbstractClass.some_staticmethod  r   r"   c                      yr  r)   r$   s    r    r  zCCloudPickleTest.test_abstracts.<locals>.AbstractClass.some_property	  r   r"   N)r&   r'   r(   rq  r  r1  abstractclassmethodr  abstractstaticmethodr  abstractpropertyr  r)   r"   r    r  r    sh       $$$ %$ %%% &% !!! "!r"   r  c                   H    e Zd Zd Ze fd       Zed        Zed        Z	y)5CloudPickleTest.test_abstracts.<locals>.ConcreteClassc                      yr  r)   r$   s    r    r1  zACloudPickleTest.test_abstracts.<locals>.ConcreteClass.some_method  r  r"   c                     | k(  sJ yr  r)   r  s    r    r  zFCloudPickleTest.test_abstracts.<locals>.ConcreteClass.some_classmethod  r  r"   c                       yr  r)   r)   r"   r    r  zGCloudPickleTest.test_abstracts.<locals>.ConcreteClass.some_staticmethod  r  r"   c                      yr  r)   r$   s    r    r  zCCloudPickleTest.test_abstracts.<locals>.ConcreteClass.some_property  r  r"   Nr  r  s   r    r  r    r  r"   r  r+   r  c                   H    e Zd Zd Ze fd       Zed        Zed        Z	y)=CloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclassc                      yr  r)   r$   s    r    r1  zICloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclass.some_method9  r  r"   c                     | k(  sJ yr  r)   r  s    r    r  zNCloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclass.some_classmethod<  r  r"   c                       yr  r)   r)   r"   r    r  zOCloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclass.some_staticmethodA  r  r"   c                      yr  r)   r$   s    r    r  zKCloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclass.some_propertyE  r  r"   Nr  r  s   r    r  r  8  r  r"   r  r  c                       e Zd Zd Zy)>CloudPickleTest.test_abstracts.<locals>.IncompleteBaseSubclassc                      yr  r)   r$   s    r    r1  zJCloudPickleTest.test_abstracts.<locals>.IncompleteBaseSubclass.some_methodM  r  r"   Nr  r)   r"   r    r  r  L  r  r"   r  r  r  s	          @@r    test_abstractszCloudPickleTest.test_abstracts  s   	!CGG 	!"	#M 	#& 	u%)O(O)-37==B,->?%///%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                     G d d      } |d       |d       |d      }}}t        j                  ||g      |||g}t        || j                        }|\  }}}	}
| j	                  |j
                  d       | j	                  |	j
                  d       | j	                  |
j
                  d       | j	                  t        |      d       | j	                  t        |      ||	h       y )Nc                       e Zd Zd Zy)ECloudPickleTest.test_weakset_identity_preservation.<locals>.SomeClassc                     || _         y r   r  ry  s     r    r!   zNCloudPickleTest.test_weakset_identity_preservation.<locals>.SomeClass.__init__X  s	    r"   Nr&   r'   r(   r!   r)   r"   r    r2  r  W  s    r"   r2  r   rj   rh   r+   )rr   WeakSetr1   r,   rz   r   r   r  )r   r2  obj1obj2obj3thingsresultweakset
depickled1
depickled2
depickled3s              r    "test_weakset_identity_preservationz2CloudPickleTest.test_weakset_identity_preservationR  s    
	 	 %Q<1y|Dd//4,/tTB $--@6<3Zq)q)q)Wq)W
J'?@r"   c                    d d _          G fdd      } |       } d      dk(  sJ |j                  u sJ t        j                  t              5  |j
                  }d d d        	 |t        j                  d<   t        d       }|dk7  sJ |J t        | j                        } |d      dk(  sJ 	 t        j                  j                  d       y # 1 sw Y   yxY w# t        j                  j                  d       w xY w)Nc                     | dz  S )Nrj   r)   r  s    r    funczMCloudPickleTest.test_non_module_object_passing_whichmodule_test.<locals>.funcp  s    6Mr"   c                       e Zd Zd Z fdZy)XCloudPickleTest.test_non_module_object_passing_whichmodule_test.<locals>.NonModuleObjectc                     d | _         y r   )	some_attrr$   s    r    __ini__z`CloudPickleTest.test_non_module_object_passing_whichmodule_test.<locals>.NonModuleObject.__ini__x  s	    !%r"   c                     |dk(  rS t         )Nr  )AttributeError)r   r2  r  s     r    r   zdCloudPickleTest.test_non_module_object_passing_whichmodule_test.<locals>.NonModuleObject.__getattr__{  s     6>K((r"   N)r&   r'   r(   r  r   )r  s   r    NonModuleObjectr  w  s    &	)r"   r  rj   r9  r+   )r'   r  r   r   r  r  r   r  r   r1   r,   r  )r   r  non_module_objectru  func_module_namedepickled_funcr  s         @r    /test_non_module_object_passing_whichmodule_testz?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                 :   t         t        j                  fD ]  }dD ]   G d d|      } G fdd      }d }|_        |t        j                  u r	 |d      }n |       }|t        j
                  d<   	 | j                  t         |             j                         d       t        || j                  	      }| j                   |       d       t        j
                  j                  dd          y # t        j
                  j                  dd        w xY w)
N)_missing_moduleNc                       e Zd Zd Zy)BCloudPickleTest.test_unrelated_faulty_module.<locals>.FaultyModulec                     t               r   r   r   r2  s     r    r   zNCloudPickleTest.test_unrelated_faulty_module.<locals>.FaultyModule.__getattr__  s     (k)r"   Nr   r)   r"   r    FaultyModuler    s    *r"   r  c                       e Zd ZW  Zd Zy)9CloudPickleTest.test_unrelated_faulty_module.<locals>.Fooc                      yr  r)   r$   s    r    r   z=CloudPickleTest.test_unrelated_faulty_module.<locals>.Foo.foo  s    *r"   N)r&   r'   r(   r   )module_names   r    r  r	    s    !,J+r"   r  c                       yr  r)   r)   r"   r    r   z9CloudPickleTest.test_unrelated_faulty_module.<locals>.foo  s    &r"   _faulty_moduler  r+   )r  r  r  r'   r   r  rz   r1   r   r,   r  )r   
base_classr  r  r   faulty_moduleclonedr  s          @r    test_unrelated_faulty_modulez,CloudPickleTest.test_unrelated_faulty_module  s    
 "5#3#34 !	<J8  <*: *+ +' "-!1!11$01A$BM$0NM0=,-<$$_SU%;%?%?%A;O -S4==IF$$VX{;KKOO$4d;A <!	<B KKOO$4d;s   7AC88"Dzfails for pytest v7.2.0c                 "   dd l fd}ddlm} ddlm} |j                  |j
                  t        j                        <   t        j                  t        j                  || j                              } |       }| j                  d|       y )Nr   c                  \    j                   j                  dg      } | j                         S r   )builtinr  r  )r   pys    r    r   z5CloudPickleTest.test_dynamic_pytest_module.<locals>.f  s"    

s#A557Nr"   )CloudPickler)cloudpickle_fastr+   r   )r  srsly.cloudpickler  r  _module_reducedispatch_tabler   r  r.   r-   r/   r,   rz   )r   r   r  cp_fastr   r  r  s         @r    test_dynamic_pytest_modulez*CloudPickleTest.test_dynamic_pytest_module  sl     		 	3A8?8N8N##D$45k//DMMJKF#r"   c                     d }t        || j                        }| j                  |j                  |j                         y )Nc                     | S r   r)   r  s    r    r   z;CloudPickleTest.test_function_module_name.<locals>.<lambda>  s     r"   r+   )r1   r,   rz   r'   r   r  r  s      r    test_function_module_namez)CloudPickleTest.test_function_module_name  s1     >**DOO<r"   c                 $   d }t        |d      r=t        || j                        }| j                  |j                  |j                         d|_        t        || j                        }| j                  |j                  |j                         y )Nc                     | S r   r)   r  s    r    r  z4CloudPickleTest.test_function_qualname.<locals>.func  s    Hr"   r(   r+   z<modifiedlambda>)r  r1   r,   rz   r(   r  s      r    test_function_qualnamez&CloudPickleTest.test_function_qualname  su    	 4($TDMMBFV00$2C2CD / >,,d.?.?@r"   c                 .    G d d      } |       }|j                   dk(  sJ |j                   j                  dk(  sJ t        j                  t              5  d|_         d d d        d|_        t        |      }|j                   dk(  sJ |j
                  dk(  sJ t        j                  t              5  d|_         d d d        d|_        |j
                  dk(  sJ t        |      j                   j                  dk(   y # 1 sw Y   xY w# 1 sw Y   PxY w)Nc                   X    e Zd ZdZdZed        Zed        Zej                  d        Zy)/CloudPickleTest.test_property.<locals>.MyObjectr   c                     | j                   S )A read-only attribute)_read_only_valuer$   s    r    read_only_valuez?CloudPickleTest.test_property.<locals>.MyObject.read_only_value  s     ,,,r"   c                     | j                   S r   _read_write_valuer$   s    r    read_write_valuez@CloudPickleTest.test_property.<locals>.MyObject.read_write_value  s    ---r"   c                     || _         y r   r,  r,  s     r    r.  z@CloudPickleTest.test_property.<locals>.MyObject.read_write_value  s
    ).&r"   N)	r&   r'   r(   r)  r-  r  r*  r.  setterr)   r"   r    MyObjectr&    sN      !- - . . $$/ %/r"   r1  r   r(  rj   rh   )r*  rD   r   r   r  r.  r1   r   )r   r1  rt   depickled_objs       r    test_propertyz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   C?4D?DDc                     t        j                  dg d      } |ddd      } |ddd      }t        |||g| j                        \  }}}t	        ||      sJ ||k(  sJ ||u sJ t	        ||      sJ ||k(  sJ y )NMyTuple)rA   rJ   rQ   r   rj   rh   r+   )r   
namedtupler1   r,   r   )r   r5  t1t2depickled_t1depickled_MyTupledepickled_t2s          r    test_namedtuplezCloudPickleTest.test_namedtuple  s    ((ODQ1Q18G"975' ,000r!!! G+++,000r!!!r"   z'fails sometimes for pypy on conda-forgec                 x    dj                  | j                        }t        t        j                  |             y )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
        r+   r  r,   r   r  r  r   r  s     r    #test_interactively_defined_functionz3CloudPickleTest.test_interactively_defined_function'  s4    
;v FDMMF*w 	x 	!!67r"   c                     d}dD ]=  }|j                  | j                  |      }t        t        j                  |             ? y )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   )r,   
clone_funcr>  )r   code_templaterC  r  s       r    *test_interactively_defined_global_variablez:CloudPickleTest.test_interactively_defined_global_variablej  sK    4j D 	<J ''3= ( ?D$X__T%:;	<r"   c                 ,   t         dk(  sJ t         }	 d }d }t        ||g| j                        \  }}|j                  |j                  u sJ |j                  |j                  usJ t	        j
                  || j                        } |        t         dk(  sJ  |       }|dk(  sJ |       t        j                  |      }|j                  |j                  usJ |j                  |j                  usJ  |       }	|	dk(  sJ |	       	 |a y # |a w xY w)Nr   c                      da y )Nchanged_by_f0_TEST_GLOBAL_VARIABLEr)   r"   r    f0zKCloudPickleTest.test_closure_interacting_with_a_global_variable.<locals>.f0  s    (7%r"   c                      t         S r   rI  r)   r"   r    r   zKCloudPickleTest.test_closure_interacting_with_a_global_variable.<locals>.f1  s    ,,r"   r+   rH  )rJ  r1   r,   __globals__r.   r/   r   r-   )
r   
orig_valuerK  r   	cloned_f0	cloned_f1
pickled_f1shared_global_varnew_cloned_f1new_global_vars
             r    /test_closure_interacting_with_a_global_variablez?CloudPickleTest.test_closure_interacting_with_a_global_variable  s/   $777*
,	/8- $3B8<@MM$K Iy
 ((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                 R    dj                  | j                        }t        |       y )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
        r+   r  r,   r   r?  s     r    &test_interactive_remote_function_callsz6CloudPickleTest.test_interactive_remote_function_calls  s(    2 FDMMF*3 	4 	!&r"   c                 R    dj                  | j                        }t        |       y )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")

        r+   rW  r?  s     r    5test_interactive_remote_function_calls_no_side_effectzECloudPickleTest.test_interactive_remote_function_calls_no_side_effect  s+    (P FDMMF*Q 	R 	!&r"   c                 R    dj                  | j                        }t        |       y )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)

        r+   rW  r?  s     r    2test_interactive_dynamic_type_and_remote_instanceszBCloudPickleTest.test_interactive_dynamic_type_and_remote_instances"  s+    #F FDMMF*G 	H 	!&r"   c                 R    dj                  | j                        }t        |       y)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

        r+   NrW  r?  s     r    9test_interactive_dynamic_type_and_stored_remote_instanceszICloudPickleTest.test_interactive_dynamic_type_and_stored_remote_instancesI  s,    EJ FDMMF*K 	L 	!&r"   z1Seems to have issues outside of linux and CPythonc                 R    dj                  | j                        }t        |       y )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

        r+   rW  r?  s     r    5test_interactive_remote_function_calls_no_memory_leakzECloudPickleTest.test_interactive_remote_function_calls_no_memory_leak  s+    *T FDMMF*U 	V 	!&r"   c                    t         t        t        t        fD ]b  }t	         |d            }t        j                  |t        j                  f      5  t        j                  || j                         d d d        d y # 1 sw Y   oxY w)Nr   r+   )r   r9   r  r_  r   r   r   r   PicklingErrorr.   r/   r,   )r   exc_typer0   s      r    test_pickle_reraisez#CloudPickleTest.test_pickle_reraise  sm    "J	<H 	?H %1C&*>*>?@ ?!!#>? ?	?? ?s   "A==B	c                     ddi}t        |j                  | j                        }| j                   |d      d       | j                   |d      d        y )NrA   r   r+   rJ   )r1   getr,   rz   )r   r{   depickled_methods      r    test_unhashable_functionz(CloudPickleTest.test_unhashable_function  sL    !H*1554==I)#.2)#.5r"   )rh      zJDeprecation warning in python 3.12 about future deprecation in python 3.14c                    t        j                  dd      }t        |       t        |       t        || j                        }| j                  ||u       t        d      D ]&  }| j                  t        |      t        |             ( y )Nr   rj   )stepr+   rx   )	itertoolscountnextr1   r,   r   ry   rz   )r   counternew_counterru  s       r    test_itertools_countz$CloudPickleTest.test_itertools_count  so    //!!, 	WW%gF{23r 	?AT']D,=>	?r"   c                     ddl m} d  |      fd       }t        || j                        }| j	                  |j
                  j
                         y )Nr   r   c                       y r   r)   r)   r"   r    r   z=CloudPickleTest.test_wraps_preserves_function_name.<locals>.f      r"   c                                y r   r)   r   s   r    r   z=CloudPickleTest.test_wraps_preserves_function_name.<locals>.g      Cr"   r+   )r:  r   r1   r,   rz   r&   r   r   r   r   r   s       @r    "test_wraps_preserves_function_namez2CloudPickleTest.test_wraps_preserves_function_name  sM    #	 
q	 
	 Q7ajj1r"   c                     ddl m} d  |      fd       }t        || j                        }| j	                  |j
                  j
                         y )Nr   r   c                       y)42Nr)   r)   r"   r    r   z<CloudPickleTest.test_wraps_preserves_function_doc.<locals>.f  s    r"   c                                y r   r)   rv  s   r    r   z<CloudPickleTest.test_wraps_preserves_function_doc.<locals>.g  rw  r"   r+   )r:  r   r1   r,   rz   rD   rx  s       @r    !test_wraps_preserves_function_docz1CloudPickleTest.test_wraps_preserves_function_doc  sM    #	 
q	 
	 Q7QYY/r"   c                     d dt         d_        t              fd       }t        || j                        }| j                  |j                  j                         y )Nc                      y r   r)   r  s    r    r   zDCloudPickleTest.test_wraps_preserves_function_annotations.<locals>.f  rt  r"   r   )r   returnc                      |        y r   r)   )r   r   s    r    r   zDCloudPickleTest.test_wraps_preserves_function_annotations.<locals>.g  s
    aDr"   r+   )r  __annotations__r   r1   r,   rz   )r   r   r   r   s      @r    )test_wraps_preserves_function_annotationsz9CloudPickleTest.test_wraps_preserves_function_annotations  s[    	 #$u5	q	 
	 Q7++Q->->?r"   c                 ^    t         j                  t        t        f   }t	        |      |k(  sJ y r   )typingUnionr   rU   r1   )r   r  s     r    test_type_hintzCloudPickleTest.test_type_hint  s'    LLs#q!Q&&&r"   c                    dgdfD ]   G fdd      } |       }t        || j                        }||fD ]G  }| j                  |j                  d       t	        j
                  t              5  d|_        d d d        I  G d d|      } |       }t        j                  || j                        }~t        j                  |      }|j                  dk(  rJ  y # 1 sw Y   xY w)	Nregistered_attributec                       e Zd ZW  Zd Zy)@CloudPickleTest.test_instance_with_slots.<locals>.ClassWithSlotsc                     d| _         y )NrH   )r  r$   s    r    r!   zICloudPickleTest.test_instance_with_slots.<locals>.ClassWithSlots.__init__  s
    02D-r"   N)r&   r'   r(   	__slots__r!   )slotss   r    ClassWithSlotsr    s    !	3r"   r  r+   rH   r   c                       e Zd Zd Zy)CCloudPickleTest.test_instance_with_slots.<locals>.SubclassWithSlotsc                     d| _         y r   )unregistered_attributer$   s    r    r!   zLCloudPickleTest.test_instance_with_slots.<locals>.SubclassWithSlots.__init__"  s
    23D/r"   Nr  r)   r"   r    SubclassWithSlotsr  !  s    4r"   r  )r1   r,   rz   r  r   r   r  non_registered_attributer.   r/   r-   r  )r   r  initial_objr2  r0   r  r   r  s          @r    test_instance_with_slotsz(CloudPickleTest.test_instance_with_slots  s    -.0FG 	=E3 3 )*K+dmm5M $]3 5  !9!92>]]>2 534C05 55
4N 4 $%C!!#>A!'--a0M 771<<<1	=5 5s   0CC(MappingProxyTypez-Old versions of Python do not have this type.c                 j    t        j                  ddi      }|t        || j                        k(  sJ y )Nsome_keyz
some valuer+   )r  r  r1   r,   )r   mps     r    test_mappingproxyz!CloudPickleTest.test_mappingproxy,  s2     ##Z$>?_R$--@@@@r"   c                    t        j                  d      }|j                  ddt        fg      } |d      }t	        || j
                         |j                  t	        || j
                        j                  cxk(  rdk(  sJ  J y )Ndataclasses	DataClassr   rH   r  r+   )r   r  make_dataclassrU   r1   r,   r   )r   r  r  r$  s       r    test_dataclasszCloudPickleTest.test_dataclass2  so    ))-8..{c3ZLI	2	DMM:vvFHHNBNNNNNr"   c                     G d dt         t        j                        } G fdd|      t        j                  j                  g| j
                        \  }}}||u sJ ||j                  u sJ ||j                  usJ t        |t               sJ |j                         sJ |j                  u sJ |u sJ t        j                  | j
                        }|j                  u sJ y )Nc                       e Zd ZdZy)=CloudPickleTest.test_locally_defined_enum.<locals>.StringEnumz4Enum when all members are also (and must be) stringsN)r&   r'   r(   rD   r)   r"   r    
StringEnumr  <  s    Fr"   r  c                   (    e Zd ZdZdZdZdZ fdZy)8CloudPickleTest.test_locally_defined_enum.<locals>.Colorz3-element color space123c                      | j                   u S r   )GREEN)r   Colors    r    is_greenzACloudPickleTest.test_locally_defined_enum.<locals>.Color.is_greenE  s    u{{**r"   N)r&   r'   r(   rD   REDr  BLUEr  )r  s   r    r  r  ?  s    'CED+r"   r  r+   )	r   enumEnumr1   r  r,   r  r   r  )r   r  green1green2ClonedColorgreen3r  s         @r    test_locally_defined_enumz)CloudPickleTest.test_locally_defined_enum;  s    	Gdii 	G	+J 	+ '6[[%++u-'G#*****[-----&#&&&    $$$e### t}}E$$$r"   c                     t        j                  ddddd      }t        |j                  |j                  |g| j                        \  }}}||u sJ ||j                  u sJ ||j
                  usJ ||u sJ y )Nr  r   rj   rh   )r  r  r  r+   )r  IntEnumr1   r  r,   r  )r   DynamicColorr  r  ClonedDynamicColors        r    test_locally_defined_intenumz,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                 R    dj                  | j                        }t        |       y )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
        r+   rW  r?  s     r    test_interactively_defined_enumz/CloudPickleTest.test_interactively_defined_enume  s+     @ FDMMF*A 	B 	!&r"   c                     t        j                  d       ddlm}  |       \  }}t	        ||gddg      D ]<  \  }} |       d| dk(  sJ t        || j                        } |       d| dk(  r<J  y )	Nr  r   )relative_imports_factorymodulepackagezhello from a !r+   )r   r  r  r  r  r1   r,   )r   r  r   r   r  sourcecloned_funcs          r    $test_relative_import_inside_functionz4CloudPickleTest.test_relative_import_inside_function  s    23 	B')1A9(=> 	>LD&6}VHA6666 *$GK=mF81$====	>r"   c                     ddd}t        || j                        }||fD ]"  } |d      dk(  sJ |j                  ddik(  r"J  y )Nr   )rJ   c                    | |z   S r   r)   r   s     r    r   zUCloudPickleTest.test_interactively_defined_func_with_keyword_only_argument.<locals>.f  r  r"   r+   rj   rh   rJ   )r1   r,   __kwdefaults__)r   r   r  r  s       r    :test_interactively_defined_func_with_keyword_only_argumentzJCloudPickleTest.test_interactively_defined_func_with_keyword_only_argument  sX     	 &a$--@$ 	3D7a<<&&3(222	3r"   co_posonlyargcountz(Requires positional-only argument syntaxc                 x    dj                  | j                        }t        t        j                  |             y )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)

        r+   r>  r?  s     r    =test_interactively_defined_func_with_positional_only_argumentzMCloudPickleTest.test_interactively_defined_func_with_positional_only_argument  s1     FDMMF* 	  	!!67r"   c                     t        j                  d       ddlm} |j	                         dk(  sJ t        || j                        }||u sJ y )Nr  r   )some_singletonr  r+   )r   r  r  r  r%   r1   r,   )r   r  depickled_singletons      r    test___reduce___returns_stringz.CloudPickleTest.test___reduce___returns_string  sP     	237((*.>>>>-T]]4"n444r"   c                     d }t        t        j                  j                  |j                        j	                               }|dhk(  sJ t        || j                        } |       } |       t        k(  sJ y )Nc                      d } | S )Nc                      t         S r   rI  r)   r"   r    inner_functionziCloudPickleTest.test_cloudpickle_extract_nested_globals.<locals>.function_factory.<locals>.inner_function  s    ,,r"   r)   )r  s    r    function_factoryzQCloudPickleTest.test_cloudpickle_extract_nested_globals.<locals>.function_factory  s    - "!r"   rJ  r+   )r  r.   _extract_code_globalsr   rW   r1   r,   rJ  )r   r  globals_depickled_factory
inner_funcs        r    'test_cloudpickle_extract_nested_globalsz7CloudPickleTest.test_cloudpickle_extract_nested_globals  sw    	" {..DD%%''+tv/34444+,<59]]D&(
|4444r"   c                      G d d      } |       }t        j                  t        j                  d      5  t	        j
                  |       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zy)9CloudPickleTest.test_recursion_during_pickling.<locals>.Ac                     t        | |      S r   )getattrr  s     r    __getattribute__zJCloudPickleTest.test_recursion_during_pickling.<locals>.A.__getattribute__  s    tT**r"   N)r&   r'   r(   r  r)   r"   r    rE   r    s    +r"   rE   	recursionr  )r   r   r   rb  r.   r/   )r   rE   rA   s      r    test_recursion_during_picklingz.CloudPickleTest.test_recursion_during_pickling  sL    	+ 	+ C]]6//{C 	!a 	! 	! 	!s   AAc                    | j                   dk  rt        j                  d       t        j                  d       G fdd      } |       }g }t	        j
                  || j                   |j                        }t        |      dk(  sJ t        j                  ||      }j                  j                  |j                  |j                         y )	Nr   zNeed Pickle Protocol 5 or laternumpyc                   4    e Zd Z W  j                  d      Zy)ECloudPickleTest.test_out_of_band_buffers.<locals>.LocallyDefinedClassrx   N)r&   r'   r(   zerosr$  )rB  s   r    LocallyDefinedClassr    s    288B<Dr"   r  )r,   buffer_callbackr   )buffers)r,   r   skipr  r.   r/   appendr   r   r-   testingassert_allcloser$  )r   r  data_instancer  pickle_bytesreconstructedrB  s         @r    test_out_of_band_buffersz(CloudPickleTest.test_out_of_band_buffers  s    ==1KK9:  )	  	  ,-"((9@I7|q   \7C


""=#5#5}7I7IJr"   c                     t        j                  d      }t        || j                        }g d}|D ]  }t	        ||      t	        ||      k(  rJ  y )NTr+   )r&   	__bound____constraints____covariant____contravariant__)r  TypeVarr1   r,   r  )r   r  depickled_T	attr_listattrs        r    test_pickle_dynamic_typevarz+CloudPickleTest.test_pickle_dynamic_typevar  sV    NN3%a$--@
	  	BD1d#w{D'AAAA	Br"   c                 h    t        j                  d      }t        || j                        }||u sJ y Nr  r+   )r  r  r   r,   )r   r  T2s      r    $test_pickle_dynamic_typevar_trackingz4CloudPickleTest.test_pickle_dynamic_typevar_tracking  s+    NN3#A>Bwwr"   c                 r    t        j                  d      }t        ||f| j                        \  }}||u sJ y r  )r  r  r1   r,   )r   r  depickled_T1depickled_T2s       r    'test_pickle_dynamic_typevar_memoizationz7CloudPickleTest.test_pickle_dynamic_typevar_memoization  s;    NN3%4aV>Bmm&M"l|+++r"   c                     t        j                  d       ddlm} t	        || j
                        }||u sJ ddlm} |t	        || j
                        u sJ y )Nr  r   )r  r+   )AnyStr)r   r  r  r  r1   r,   r  r	  )r   r  T1r	  s       r    test_pickle_importable_typevarz.CloudPickleTest.test_pickle_importable_typevar	  sM    23*Q7Qww 	"$--HHHHr"   c                    t        j                  d      } G d dt         j                  |         }t        || j                        |u sJ t        |t
           | j                        |t
           k(  sJ t        | j                        5 }d }t        |t
           dd      dk7  } ||t
           |t
        |      dk(  sJ |j                  ||t
           |t
        |      dk(  sJ 	 d d d        y # 1 sw Y   y xY w)	Nr  c                       e Zd Zy),CloudPickleTest.test_generic_type.<locals>.CNro   r)   r"   r    rT   r  	  rq   r"   rT   r+   c                    | j                   |u sJ t        |j                        dk(  sJ |j                  d   }|j                   t        j                  u sJ |r-t        | j
                        dk(  sJ | j
                  d   |u s/J t        | j                        dk(  sJ | j                  d   |u sJ t        |j                        dk(  sJ y)Nr   r   ok)
__origin__r   __orig_bases__r  Generic__args____parameters__)genericorigin
type_valueuse_argsrd  s        r    check_genericz8CloudPickleTest.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  )	r  r  r  r1   r,   rU   r   r  run)r   r  rT   workerr  r  s         r    test_generic_typez!CloudPickleTest.test_generic_type	  s    NN3	q! 	 q4==9Q>>> qv>!C&HHH6 	O&& qvz26"<H 3C:dBBB::mQsVQXF$NNN/	O 	O 	Os   AC22C;c                 ,   t        j                  d      } G d dt         j                  |         } G d d|      } G d d|      } G d d	|t                 } G d
 d|      } G d d||         } G d d||         }|||||||g}	|	D ]  }
t	        |
| j
                        |
u rJ  t        | j
                        5 }d }|	D ]5  }
|
j                         } ||
|      sJ |j                  ||
|      dk(  r5J  	 d d d        y # 1 sw Y   y xY w)Nr  c                       e Zd Zy)3CloudPickleTest.test_generic_subclass.<locals>.BaseNro   r)   r"   r    r  r   7	  rq   r"   r  c                       e Zd Zy)9CloudPickleTest.test_generic_subclass.<locals>.DerivedAnyNro   r)   r"   r    
DerivedAnyr"  :	  rq   r"   r#  c                       e Zd Zy)6CloudPickleTest.test_generic_subclass.<locals>.LeafAnyNro   r)   r"   r    LeafAnyr%  =	  rq   r"   r&  c                       e Zd Zy)9CloudPickleTest.test_generic_subclass.<locals>.DerivedIntNro   r)   r"   r    
DerivedIntr(  @	  rq   r"   r)  c                       e Zd Zy)6CloudPickleTest.test_generic_subclass.<locals>.LeafIntNro   r)   r"   r    LeafIntr+  C	  rq   r"   r,  c                       e Zd Zy)7CloudPickleTest.test_generic_subclass.<locals>.DerivedTNro   r)   r"   r    DerivedTr.  F	  rq   r"   r/  c                       e Zd Zy)4CloudPickleTest.test_generic_subclass.<locals>.LeafTNro   r)   r"   r    LeafTr1  I	  rq   r"   r2  r+   c                 .    | j                         |k(  sJ y)Nr  )mro)klassexpected_mros     r    	check_mroz8CloudPickleTest.test_generic_subclass.<locals>.check_mroT	  s    yy{l222r"   r  )	r  r  r  rU   r1   r,   r   r4  r  )r   r  r  r#  r&  r)  r,  r/  r2  klassesr5  r  r7  r4  s                 r    test_generic_subclassz%CloudPickleTest.test_generic_subclass4	  s4   NN3	6>>!$ 		 		j 		c 		j 		tAw 		HQK 	 *gz7He
  	KE"54==AUJJJ	K 6 		A& ! Aiik ,,,zz)UC8D@@@A		A 		A 		As   :D
=D

Dc                 
   t        | j                        5 }t               D ]I   G fdd      }di|_        d } |       } ||d      dk(  sJ |j	                  ||d      dk(  rIJ  	 d d d        y # 1 sw Y   y xY w)Nr+   c                   "    e Zd ZdW  dW  fdZy)KCloudPickleTest.test_locally_defined_class_with_type_hints.<locals>.MyClassr
  r  c                     |S r   r)   )r   r
  s     r    rB   zRCloudPickleTest.test_locally_defined_class_with_type_hints.<locals>.MyClass.methoda	  s    "
r"   Nr  )type_s   r    rp   r<  `	  s    #% #E #r"   rp   	attributec                     | j                   d   |k(  sJ | j                  j                   d   |k(  sJ | j                  j                   d   |k(  sJ y)Nr?  r
  r  r  )r  rB   )r0   expected_typeexpected_type_strs      r    check_annotationszUCloudPickleTest.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   r,   _all_types_to_testr  r  )r   r  rp   rC  r0   r>  s        @r    *test_locally_defined_class_with_type_hintsz:CloudPickleTest.test_locally_defined_class_with_type_hints]	  s    6 	&+- # # ,7*>'	  i(eW=EEEJJ0#ugF$NN)	 	 	s   AA9,A99Bc                     t        j                  d      }|j                  |j                  d   fD ]   }t        || j                        }||k(  r J  y )Ntyping_extensionsrA   r+   )r   r  Literalr1   r,   r   rG  r0   r2  s       r    test_generic_extensions_literalz/CloudPickleTest.test_generic_extensions_literalv	  sX    "//0CD%--/@/H/H/MN 	(C+C$--HM C'''	(r"   c                     t        j                  d      }|j                  |j                  t           fD ]   }t	        || j
                        }||k(  r J  y )NrG  r+   )r   r  FinalrU   r1   r,   rI  s       r    test_generic_extensions_finalz-CloudPickleTest.test_generic_extensions_final|	  sX    "//0CD%++->-D-DS-IJ 	(C+C$--HM C'''	(r"   c                      G d d      }dt         i|_        t        || j                        }|j                  |j                  k(  sJ y )Nc                       e Zd Zy)1CloudPickleTest.test_class_annotations.<locals>.CNro   r)   r"   r    rT   rP  	  rq   r"   rT   rA   r+   )rU   r  r1   r,   )r   rT   C1s      r    test_class_annotationsz&CloudPickleTest.test_class_annotations	  sB    	 	 #JQ7!!Q%6%6666r"   c                     dt         dt        fd}t        || j                        }|j                  |j                  k(  sJ y )NrA   r  c                      y r   r)   )rA   s    r    r   z4CloudPickleTest.test_function_annotations.<locals>.f	  rt  r"   r+   )rU   r   r1   r,   r  )r   r   r   s      r    test_function_annotationsz)CloudPickleTest.test_function_annotations	  sA    	 	 	 Q7!!Q%6%6666r"   c                    dd l }	  G d d      fd}||j                  <           }t        || j                        }t	        |d      sJ 	 |j                  j                         y # |j                  j                         w xY w)Nr   c                       e Zd Zy)CCloudPickleTest.test_always_use_up_to_date_copyreg.<locals>.MyClassNro   r)   r"   r    rp   rX  	  s    r"   rp   c                     dddifS )Nr)   custom_reduceTr)   )r   rp   s    r    reduce_myclasszJCloudPickleTest.test_always_use_up_to_date_copyreg.<locals>.reduce_myclass	  s    _d$;;;r"   r+   rZ  )copyregr  r1   r,   r  r  )r   r\  r[  my_objdepickled_myobjrp   s        @r    "test_always_use_up_to_date_copyregz2CloudPickleTest.test_always_use_up_to_date_copyreg	  s~     		0 < /=G""7+YF-ft}}MO?O<<<""&&w/G""&&w/s   A
A. .Bc                 T     G d d      } |       }t        || j                         y )Nc                       e Zd Zed        Zy):CloudPickleTest.test_literal_misdetection.<locals>.MyClassc                      y)Nr)   r)   r$   s    r    
__values__zECloudPickleTest.test_literal_misdetection.<locals>.MyClass.__values__	  s    r"   N)r&   r'   r(   r  rd  r)   r"   r    rp   rb  	  s     r"   rp   r+   r1   r,   r   rp   os      r    test_literal_misdetectionz)CloudPickleTest.test_literal_misdetection	  s#    	 	
 IDMM2r"   c                 T     G d d      } |       }t        || j                         y )Nc                       e Zd Zed        Zy)DCloudPickleTest.test_final_or_classvar_misdetection.<locals>.MyClassc                     t         S r   )rU   r$   s    r    __type__zMCloudPickleTest.test_final_or_classvar_misdetection.<locals>.MyClass.__type__	  s    
r"   N)r&   r'   r(   r  rm  r)   r"   r    rp   rk  	  s     r"   rp   r+   re  rf  s      r    #test_final_or_classvar_misdetectionz3CloudPickleTest.test_final_or_classvar_misdetection	  s#    	 	
 IDMM2r"   c                 p  	
 t         j                  j                         }	 t        j                  j	                  t
              }t        t         j                  d       t        t         j                  |       t         j                  j                  d|       t        | j                        5 }|j                  d |       dd lm ddlmm
m	 t!        j"                  t$              5  |j                  d        d d d        t!        j"                  t$              5  |j                  d        d d d        
	fD ]8  t!        j"                  t$              5  |j                  fd       d d d        : t'               |j                  fd	              k(  sJ |j                  
fd
      
j(                  k(  sJ |j                  	fd       	       j+                         k(  sJ |j                  fd              k(  sJ ddlm}m}m ||ct!        j"                  t$              5  |j                  d        d d d        t!        j"                  t$              5  |j                  fd       d d d        t5               t!        j"                  t$              5  |j                  fd       d d d        t!        j"                  t$              5  |j                  d        d d d        dd l}t'        |       |j                  fd              k(  sJ |j                  fd              k(  sJ t5        |       t!        j"                  t$              5  |j                  fd       d d d        t!        j"                  t$              5  |j                  fd       d d d        dd l}t'        |j8                  j:                         |j                  fd              k(  sJ |j                  fd      j(                  k(  sJ |j                  fd              j+                         k(  sJ t!        j"                  t$              5  |j                  fd       d d d        t!        j"                  t$              5  |j                  d        d d d        t5        |j8                  j:                         t!        j"                  t$              5  |j                  fd       d d d        dd l}t'        |j8                         |j                  fd              k(  sJ |j                  fd      j(                  k(  sJ |j                  fd              j+                         k(  sJ t5        |j8                         d d d        d}|t         _        || d | d!| d"fD ]G  }t         j>                  jA                  |d       s&j(                  tC               v s=t5               I y # 1 sw Y    xY w# 1 sw Y   xY w# 1 sw Y    xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   sxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# d}|t         _        || d | d!| d"fD ]G  }t         j>                  jA                  |d       s&j(                  tC               v s=t5               I w xY w)#N r   r+   c                 @    t         j                  j                  |       S r   )r   r  r8   )ps    r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	  s    chhooa0 r"   )local_functionLocalT
LocalClassc                      t        d      S Nzmock_local_folder.mod
__import__r)   r"   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	      *-D"E r"   c                      t        d      S Nzmock_local_folder.subfolder.modrx  r)   r"   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	      
+L M r"   c                       S r   r)   )rg  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	  s    a r"   c                               S r   r)   rs  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	  
    ^%5 r"   c                       j                   S r   r&   )rt  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	  s    V__ r"   c                  .             j                         S r   rB   )ru  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	  s    *,"5"5"7 r"   c                  $     j                         S r   r  )r  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	  s    #"4"4"6 r"   )LocalSubmodClassLocalSubmodTlocal_submod_functionc                      t        d      S r|  rx  r)   r"   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>

  r}  r"   c                       S r   r)   r  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>
      "7 r"   c                       S r   r)   r  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>
  r'  r"   c                      t        d      S rw  rx  r)   r"   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>
  rz  r"   c                               S r   r)   r  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>
  r  r"   c                               S r   r)   _funcs   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>
  	    UW r"   c                       S r   r)   r  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>
  r'  r"   c                       S r   r)   r  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>!
  r  r"   c                               S r   r)   r  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>'
  r  r"   c                       j                   S r   r  _ts   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>(
      R[[ r"   c                  .             j                         S r   r  _classs   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>)
      VX__%6 r"   c                       S r   r)   r  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>/
  r'  r"   c                      t        d      S rw  rx  r)   r"   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>1
  rz  r"   c                       S r   r)   r  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>7
  r  r"   c                               S r   r)   r  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda><
  r  r"   c                       j                   S r   r  r  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>=
  r  r"   c                  .             j                         S r   r  r  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>>
  r  r"   mock_local_folderz.modz
.subfolderz.subfolder.submod)"r   r  copyr  dirname__file__r<   insertr   r,   r  mock_local_folder.modr  rs  rt  ru  r   r   r  r	   r&   rB   "mock_local_folder.subfolder.submodr  r  r  r
   r  	subfoldersubmodmock_local_folder.subfolderr  r  r   )r   _prev_sys_path_mock_interactive_session_cwdwr  r  r  _fnamer  ru  rt  r  r  r  rs  r  r  rg  s            @@@@@@@@@r    Ctest_pickle_constructs_from_module_registered_for_pickling_by_valuezSCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value	  s   N	4 -/GGOOH,E) #((B'#(($AB HHOOA<="DMM: sHa02O 4  ]];/ GEEEFG]];/ EEM
 ~vzB )A{3 )i() )) )-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 ]];/ 9EE789 +3/]];/ 2EE012 ]];/ GEEEFG )():;uu56.:JJJJuu_-888*+<=]];/ 2EE012]];/ 9EE789
 :():)D)D)K)KLuu_-888uu01R[[@@@uu6768??;LLLL
 ]];/ 2EE012]];/ GEEEFG +%//66 ]];/ 9EE789 3():)D)DEuu_-888uu01R[[@@@uu6768??;LLLL*+<+F+FGgsHj )F%CHo&/D 124 4kkooa.3<<+H+JJ.s3	4EG G ) )< 9 9
2 2G G2 29 92 2G G9 9SsH sHj )F%CHo&/D 124 4kkooa.3<<+H+JJ.s3	4sV  B[ 6=[ 3X$![ 'X1:*[ $X>9C
[ Y![ 7Y,[ 8Y%![ .Y2A7[ 8Y?![ .ZB1[ 4Z	![ *Z&=A [ =Z3B#[ 5[ $X.	)[ 1X;	6[ >Y[ Y	[ Y"	[ %Y/	*[ 2Y<	7[ ?Z		[ Z	[ Z#	[ &Z0	+[ 3Z=	8[  [
[ A\5\5'\5c                    t        j                  d       dD ]  }|dk(  rdd l}|j                  |j                  }n#|dk(  rdd lm} |j                  |j                  }	 t        | j                        5 }|j                  fd      k(  sJ t               |j                  fd      |k(  sJ d	|_        |j                  |k7  sJ |j                  fd
      d	k(  sJ t        |       d d d        _        |j                  t               v st        |        y # 1 sw Y   7xY w# _        |j                  t               v rt        |       w w xY w)Nr  )r  r  r  r   r  r+   c                               S r   r)   rv  s   r    r   zqCloudPickleTest.test_pickle_constructs_from_installed_packages_registered_for_pickling_by_value.<locals>.<lambda>Y
  	     r"   c                               S r   r)   rv  s   r    r   zqCloudPickleTest.test_pickle_constructs_from_installed_packages_registered_for_pickling_by_value.<locals>.<lambda>_
  r  r"   modified globalc                               S r   r)   rv  s   r    r   zqCloudPickleTest.test_pickle_constructs_from_installed_packages_registered_for_pickling_by_value.<locals>.<lambda>b
  r  r"   )r   r  r  package_function_with_globalglobal_variabler  r  module_function_with_globalr   r,   r  r	   r
   r&   r   )r   package_or_moduler  _original_globalr  r   s        @r    Otest_pickle_constructs_from_installed_packages_registered_for_pickling_by_valuez_CloudPickleTest.test_pickle_constructs_from_installed_packages_registered_for_pickling_by_valueJ
  sR    	23!6 	2 I-022#$#4#4 "h.411#$#4#4 2&> 2!55-1AAAA
 -Q/55-1AAAA(9A%,,0@@@@55-1BBBB.q12 %5!::!>!@@.q13	22 2 %5!::!>!@@.q1 As%   #D59A:D)3D5)D2	.D55+E c                 :   t        j                  d       dd l}ddlm} |j                  }d }d }d }	 t        | j                        5 }|j                  |       |j                  ||d       t        |       d	|_        |j                  ||d
       |j                  |d      |k(  sJ |j                  |d
      d	k(  sJ 	 d d d        ||_        dt               v rt        |       y y # 1 sw Y   )xY w# ||_        dt               v rt        |       w w xY w)Nr  r   )r  c                  B    t        d      j                  d   } i | _        y Nr   __main__ry  r  _cloudpickle_registry)_mains    r    _create_registryzzCloudPickleTest.test_pickle_various_versions_of_the_same_function_with_different_pickling_method.<locals>._create_registryu
  s    u%--j9E*,E'r"   c                 R    t        d      j                  d   }| |j                  |<   y r  r  )vkr  s      r    _add_to_registryzzCloudPickleTest.test_pickle_various_versions_of_the_same_function_with_different_pickling_method.<locals>._add_to_registryz
  s'    u%--j9E-.E''*r"   c                 Z    t        d      j                  d   } |j                  |           S r  r  )r  r  s     r    _call_from_registryz}CloudPickleTest.test_pickle_various_versions_of_the_same_function_with_different_pickling_method.<locals>._call_from_registry~
  s-    u%--j9E15..q133r"   r+   f_by_refr  f_by_val)r   r  r  r  r  r   r,   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_methodz`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$   C9 A8C-C9 -C62C9 9!D)rh   r3  z2Determinism can only be guaranteed for Python 3.7+c                 :   t               }d }t        d      D ]4  }|j                  t        || j                  dt        |      i             6 t        |      dkD  r>|D ]  }t        j                  |        t        j                  dt        |      z         y y )Nc                      t         t        z   S r   )rJ  _TEST_GLOBAL_VARIABLE2r)   r"   r    func_with_globalszWCloudPickleTest.test_deterministic_pickle_bytes_for_function.<locals>.func_with_globals
  s    (+AAAr"   r   PYTHONHASHSEED)r,   add_envr   z1Expected a single deterministic payload, got %d/5)r  ry   rC  r   r,   r   r   pickletoolsdisr   fail)r   valsr  rV  vals        r    ,test_deterministic_pickle_bytes_for_functionz<CloudPickleTest.test_deterministic_pickle_bytes_for_function
  s     u	B q 	NAHH():26--2BCF1KMN	N
 t9q= %$%KKCc$iO	 r"   )r&   r'   r(   r.   DEFAULT_PROTOCOLr,   rb   rf   r   markskipifr  r  r   version_inforv   r~   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r7  r?  rF  rJ  rR  rY  rj  ro  rt  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  machiner  r  r  r  r'  r4  r@  rE  rU  r[  ra  re  rv  rx  r~  r  r  r  r  r   r  r  r   r#  r3  r<  r@  rE  rU  rX  rZ  r\  r^  r`  rd  rh  rq  ry  r~  r  r  r  unittestskipIfr  r  r  r  r  r  r  r  r  CodeTyper  r  r  r  r  r  r  r  r  r  r9  rE  rJ  rM  rR  rU  r_  rh  rn  r  r  r  r  r)   r"   r    r[   r[   y   s$   ++HG# [[*H**,	9 M*Ks/?/?)/KH  JI	JI$	00* [[9:% ;%
"	/
?A@+-,/
/
IL%"
"$
!(4C&,,\.
 [[6668FBC  EE$,,	/,$,*3/#)J)@,\E5N 082tL3*.4	G0*?. [[				y	(	LS-=-=bq-AW-L 	/-x--/69	/  !$/RC4D4D
4R	/ #w.   @$F@$FL<( [[&&&(F2A  CCCC0 [[4=  ?!?!, [[c..F1FF?  $	$40&D*D,$

6,;8
;4Y=vX=tA.2/h&<P [[67$ 8$&=
A+O\" [[6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 X__(:;;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"   r[   c                       e Zd ZdZy)Protocol2CloudPickleTestrj   N)r&   r'   r(   r,   r)   r"   r    r  r  
  s    Hr"   r  c                  d    t        j                  d      } t        | | j                        }|J y )Nr  r2  )r  r  r   r&   )r  module_and_names     r    /test_lookup_module_and_qualname_dynamic_typevarr  
  s,    sA1!!**EO"""r"   c                      t        j                  d       dd l} | j                  }t	        ||j
                        }|J |\  }}|| u sJ |dk(  sJ y )Nr  r   r  r  )r   r  r  r  r   r&   )r  r  r  r  r2  s        r    2test_lookup_module_and_qualname_importable_typevarr  
  s_    
./A1!!**EO&&&"LFD))))3;;r"   c                      t        t        j                  t        j                  j                        } | J | \  }}|t        u sJ |dk(  sJ y )Nr  r	  )r   r  r	  r&   )r  r  r2  s      r    .test_lookup_module_and_qualname_stdlib_typevarr  
  sQ    1&--7=}}7M7MOO&&&"LFDV8r"   c                  t   t        j                  d       dd l} dd lm} t               t               k(  sJ t        |        t               | j                  hk(  sJ t        |       t               | j                  |j                  hk(  sJ t        |       t               | j                  hk(  sJ d| j                   d}t        j                  t        |      5  t        | j                         d d d        t        |        t               t               k(  sJ |  d}t        j                  t        t        j                  |            5  t        |        d d d        d| j                   d}t        j                  t        |      5  t        | j                         d d d        t        j                  d      }| d}t        j                  t        t        j                  |            5  t        |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	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   r  r	   r&   r
   r   r9   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	- 1"3<<01 s#(*ce333E7
8C	z3	8 ("3'( 2#,,x
HC	z	- / ./ ""=1K- + 	,  
z3	8 . -. .'1 1( (/ /. .s0   H	HH"4H.	HH"H+.H7c                  ^   t        j                  d      }  G d dt         j                  |          }||t           | t         j                  t         j
                  t         j                  t         j                  t         j
                  t           t         j                  |    t         j                  t        gt         j                  f   t         j                  dt         j                  f   t         j                  g t         j                  f   t         j                  t        df   t         j                  t        |t           f   t         j                  t           t         j                  t        t        f   t         j                  t         j                  |t              t         j                  g}|S )Nr  c                       e Zd Zy)_all_types_to_test.<locals>.CNro   r)   r"   r    rT   r  
  s    r"   rT   .)r  r  r  rU   AnyOptionalr  CallableTupleListDictr   ClassVarNoReturn)r  rT   types_to_tests      r    rD  rD  
  s   sAFNN1  	
1S6	6::vqvzz)*VZZ(FJJ'S#XS!C&[!CCH#M" r"   c                  l    t        t        d      sJ t        j                  t        j                  u sJ y )NPickler)r  r.   r  r  r)   r"   r    test_module_level_picklerr    s.     ;	***+":"::::r"   r  )Lr   rq  r   rM  r:  rL  rl  rh  r  r]  operatorr   r   r  r  r,  r  rd   rP  r   r_   r  r  r  rr   r  r  r  r   r   r  rB  scipy.specialspecialrD  r  r_  r  r  r.   r  r   r	   r
   r   srsly.cloudpickle.cloudpickler   r   r   r   r   r   	testutilsr   r   r   r   rJ  r  r   r  r1   r6   r<   rY   TestCaser[   r  r  r  r  r  rD  r  r&   mainr)   r"   r    <module>r     sa    
    	     +    	   
      	     
 ( + 6 8 ; E D K E - / / ( ( (   #.">"> C/
64v(h'' v(rQ 
#%.P4; zHMMO mW 	\" 	B
C  Gs$   8
E	 E 	EEE$#E$