
    wi;                       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" n# e#e$f$ r dZdZ"Y nw xY w	 d dl%Z%n# e#$ r dZ%Y nw xY w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'j<        fdZ=d Z>d Z?d Z@ G d dejA                  ZB G d deB          ZCd ZDd ZEd ZFd  ZGd! ZHd" ZIeJd#k    r ejK                     dS dS )$    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dS )RaiserOnPicklec                     || _         d S Nexc)selfr   s     x/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/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	    hr"   N)__name__
__module____qualname__r!   r%    r"   r    r   r   B   s2              r"   r   c                 R    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AABBBr"   c                 .    |                      dd          S )N\z\\\\)replace)raw_filepaths    r    _escaper6   R   s    g...r"   c                 T    	 |                      |           n# t          $ r Y nw xY w| S r   )remove
ValueError)list_items     r    _maybe_remover<   W   sA    T   Ls    
%%c                  v    G d dt                     }  G d d          } G d d| |          }t          |          }t          |                                          g dk    sJ |d         d	k    sJ |d
         J  |d          |                       |                                            k    sJ d S )Nc                       e Zd ZdZd ZdS )"test_extract_class_dict.<locals>.AzA docstringc                     dS )Nar)   r$   s    r    methodz)test_extract_class_dict.<locals>.A.methodb       3r"   N)r&   r'   r(   __doc__rB   r)   r"   r    Ar?   `   s)        	 	 	 	 	r"   rE   c                       e Zd ZdZdZd ZdS )"test_extract_class_dict.<locals>.BzB docstring*   c                     dS )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dS )"test_extract_class_dict.<locals>.C+   c                     dS )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JJJ< B&&&&9%%%7:qqss##qqss||~~555555r"   c                      e Zd Zej        Zd Zd Zej	        
                     ej                    dk    pej        dk    o
ej        dk     d          d             Zd	 Zd
 Ze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	        
                     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	        
                     ej@                    d;k    rej        d<d=         d>k    pC ej                    d"k    p0ej        d<d=         d>k    o
ej        d?k    pej        d<d=         d@k    dA          dB             ZAdC ZBej	        
                     ej                    d"k    dD          dE             ZCej	        
                    eDd<u dF          dG             ZEej	        
                    dHej        cxk    odIk     nc dJ          dK             ZFdL ZGdM ZHdN ZIdO ZJdP ZKdQ ZLdR ZMdS ZNdT ZOdU ZPdV ZQdW ZRdX ZSdY ZTdZ ZUej	                            d[          d\             ZVd] ZWd^ ZXd_ ZYd` ZZej	        
                     ej                    d"k    da          db             Z[dc Z\dd Z]de Z^df Z_dg Z`dh Zaej	                            di          dj             Zbdk Zcdl Zdej	        
                    ej        dmk    dn          do             Zedp Zfdq Zgdr Zhds Zidt Zj ekjl         emendu           dv          dw             Zodx Zpdy Zqdz Zrd{ Zsd| Ztd} Zuej	        
                     emenjv        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	                            d          d             Zd Zd Zej	        
                    ej        dk     d          d             Zd<S )CloudPickleTestc                 :    t          j        d          | _        d S )Ntmp_cloudpickle_test_)prefix)tempfilemkdtemptmpdirr$   s    r    setUpzCloudPickleTest.setUp}   s    &.EFFFr"   c                 8    t          j        | j                   d S r   )shutilrmtreera   r$   s    r    tearDownzCloudPickleTest.tearDown   s    dk"""""r"   CPython)      r   )rh   ri      z3Underlying bug fixed upstream starting Python 3.8.2)reasonc                      G d d          } |            }t          j        |          }t          j        |           ~ |            
J d            d S )Nc                       e Zd ZdS )FCloudPickleTest.test_reducer_override_reference_cycle.<locals>.MyClassNr&   r'   r(   r)   r"   r    MyClassrn              Dr"   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   st    	 	 	 	 	 	 	 	 GII	[##)$$$rtt||H|||||r"   c                 Z   t          d          }t          d          }t          || j                  }|                      ||           ||                     t          dd          }t          || j                  }|                      ||           ||                     d S )N
   r   r+   r   rh   )ranger   r1   r,   assertEqual)r   dgettergetter2s       r    test_itemgetterzCloudPickleTest.test_itemgetter   s    "IIA!&4=AAAGGAJJ///Aq!!!&4=AAAGGAJJ/////r"   c                     G d d          } |            }t          d          }t          || j                  }|                      ||           ||                     t          dd          }t          || j                  }|                      ||           ||                      |            |_        t          d          }t          || j                  }|                      ||           ||                     t          dd          }t          || j                  }|                      ||           ||                     d S )Nc                       e Zd Zd ZdS )*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   sh   	 	 	 	 	 	 	 	 ACCC!&4=AAAGGAJJ///C%%!&4=AAAGGAJJ///accE""!&4=AAAGGAJJ///E5))!&4=AAAGGAJJ/////r"   zRequires pytest -s to passc                     t           j        }t          j        t	          j        || j                            }|                     ||           d S Nr+   )sysstderrr   r-   r.   r/   r,   rz   )r   out1out2s      r    test_pickling_file_handlesz*CloudPickleTest.test_pickling_file_handles   sF    z|K-dT]KKKLLt$$$$$r"   c                       G d d          } |            a                      t           fd           d }                     d|j        j        v            t          j        |           d S )Nc                       e Zd Zd ZdS )6CloudPickleTest.test_func_globals.<locals>.Unpicklablec                      t          d          )Nznot picklable	Exceptionr$   s    r    r%   zACloudPickleTest.test_func_globals.<locals>.Unpicklable.__reduce__   s    000r"   Nr&   r'   r(   r%   r)   r"   r    Unpicklabler      s#        1 1 1 1 1r"   r   c                  D    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           d S )Nr   )r   r   r)   r"   r    fooz.CloudPickleTest.test_func_globals.<locals>.foo   s    HQKKKKKr"   r   )r   assertRaisesr   
assertTrue__code__co_namesr.   r/   )r   r   r   s   `  r    test_func_globalsz!CloudPickleTest.test_func_globals   s    	1 	1 	1 	1 	1 	1 	1 	1
 {}}) &* &* &* &* 	+ 	+ 	+	 	 	 	#,"77888#r"   c                 N   	 t          d          }t          || j                  }|                     |t	          |                     t          ddd          }t          || j                  }|                     |t	          |                     d S # t
          $ r Y d S w xY w)NHellor+   rj   rh   )bufferr1   r,   rz   str	NameError)r   
buffer_objbuffer_clones      r    test_bufferzCloudPickleTest.test_buffer   s    	J*:NNNL\3z??;;;A..J*:NNNL\3z??;;;;; 	 	 	DD	s   BB 
B$#B$c                     t          d          }|                     t          || j                  |                                           d S )Ns   Hellor+   
memoryviewrz   r1   r,   tobytesr   r   s     r    test_memoryviewzCloudPickleTest.test_memoryview   sQ    ))
dmLLL#++--	/ 	/ 	/ 	/ 	/r"   c                     ddd                                 }t          |          }|                     ||           t          |t          j                  sJ d S Nr   rj   rA   rJ   )rW   r1   rz   
isinstance_collections_abc	dict_keysr   rW   resultss      r    test_dict_keyszCloudPickleTest.test_dict_keys   s^    Q$$&&!$''$''''#3#=>>>>>>>r"   c                     ddd                                 }t          |          }|                     t          |          t          |                     t	          |t
          j                  sJ d S r   )valuesr1   rz   rV   r   r   dict_valuesr   r   r   s      r    test_dict_valuesz CloudPickleTest.test_dict_values   sj    q!!((**!&))&..999'#3#?@@@@@@@r"   c                     ddd                                 }t          |          }|                     ||           t          |t          j                  sJ d S r   )itemsr1   rz   r   r   
dict_itemsr   r   r   s      r    test_dict_itemszCloudPickleTest.test_dict_items   s^    a  &&((!%((%((('#3#>???????r"   c                     t          j        ddg                                          }t          |          }|                     ||           t          |          t          |          k    sJ d S N)rA   r   )rJ   rj   )collectionsOrderedDictrW   r1   rz   typer   s      r    test_odict_keyszCloudPickleTest.test_odict_keys   si    &(';<<AACC!$''$'''DzzT']]******r"   c                    t          j        ddg                                          }t          |          }|                     t          |          t          |                     t          |          t          |          k    sJ d S r   )r   r   r   r1   rz   listr   r   s      r    test_odict_valuesz!CloudPickleTest.test_odict_values   su    ((H)=>>EEGG!&))gV555F||tG}},,,,,,r"   c                     t          j        ddg                                          }t          |          }|                     ||           t          |          t          |          k    sJ d S r   )r   r   r   r1   rz   r   r   s      r    test_odict_itemsz CloudPickleTest.test_odict_items   si    '8(<==CCEE!%((%(((E{{d7mm++++++r"   c                     t          d          ddd         }|                     t          || j                  |                                           d S )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
dmLLL#++--	/ 	/ 	/ 	/ 	/r"   c                     t          dt          d          z            }|                     t          || j                  |                                           d S )Ns   Hello!g    cAr+   )r   rU   rz   r1   r,   r   r   s     r    test_large_memoryviewz%CloudPickleTest.test_large_memoryview	  s\    	CHH 455
dmLLL#++--	/ 	/ 	/ 	/ 	/r"   c                 l    |                       t          d | j                              d           d S )Nc                      dS Nr   r)   r)   r"   r    r   z-CloudPickleTest.test_lambda.<locals>.<lambda>  s     r"   r+   r   rz   r1   r,   r$   s    r    test_lambdazCloudPickleTest.test_lambda  sG    B		DMBBBDDa	I 	I 	I 	I 	Ir"   c                     d\  fdfd}|                       t          || j                  d          d           d S )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    rr!uuz r"   r+   r   r   )r   f2rA   rJ   r   s     @@@r    test_nested_lambdasz#CloudPickleTest.test_nested_lambdas  s`    1___!!!!!DdmDDDQGGKKKKKr"   c                    d }d }t           |            | j                  }|                      |            |           t           |d          | j                  }|                      |d          d           d S )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                 6    | dk    rn|  | dz
            z  S r   r)   )nbaser   s    r    r   z=CloudPickleTest.test_recursive_closure.<locals>.f2.<locals>.g  s%     Avvtt1qqQxx<7r"   r)   )r   r   s   `@r    r   z2CloudPickleTest.test_recursive_closure.<locals>.f2  s'    8 8 8 8 8 8Hr"   r+   rj         r1   r,   rz   )r   r   r   g1g2s        r    test_recursive_closurez&CloudPickleTest.test_recursive_closure  s    	 	 	
	 	 	
 RRTTDM:::r"""RRUUT];;;A$$$$$r"   c                     d }|                      |j        d u d           t          || j                  }|                      |j        d u d           d S )Nc                      dS )z-a function with no closure cells
            Nr)   r)   r"   r    fz9CloudPickleTest.test_closure_none_is_preserved.<locals>.f*        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    	 	 	 	MT!/ 	 	
 	
 	

 A666MT!@ 	 	
 	
 	
 	
 	
r"   c                 :   d } |            }t          j        t                    5   |             d d d            n# 1 swxY w Y   t          || j                  }t          j        t                    5   |             d d d            d S # 1 swxY w Y   d S )Nc                      	 fd} | S )NFc                        d S 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:  s#   	 	 	 QSS]9%% 	 	BDDD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 R$-888]9%% 	 	BDDD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s!   >AA8BBBc                     d }t           |            | j                  }|                      |            d           d S )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    1vv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  sO    	 	 	 AACC$-888a     r"   c                     G d d          } G d d|          }|                       |                                            d           t          || j                  }|                       |                                            d           |                      |j        d            |            }t          || j                  }|                      |                                d           d S )Nc                       e Zd Zd ZdS )NCloudPickleTest.test_dynamically_generated_class_that_uses_super.<locals>.Basec                     dS r   r)   r$   s    r    rB   zUCloudPickleTest.test_dynamically_generated_class_that_uses_super.<locals>.Base.method[  s    qr"   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                 J    t                                                      dz   S r   )superrB   )r   	__class__s    r    rB   zXCloudPickleTest.test_dynamically_generated_class_that_uses_super.<locals>.Derived.method`  s    ww~~''!++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KK))++2244a888 	)13FGGG FT];;;Q'''''r"   c                 $    G d d          }||_          |            |_        t          || j                  }t           |                      }|                      |                                            d           |                     |                                                                 d           |                     |j                                        d           |                     |                                d           d S )Nc                       e Zd Zd ZdS ):CloudPickleTest.test_cycle_in_classdict_globals.<locals>.Cc                     dS )Nwoohoo!r)   r$   s    r    it_workszCCloudPickleTest.test_cycle_in_classdict_globals.<locals>.C.it_worksv  s     yr"   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$-@@@,QQSS11 	//119===,,..77999EEE2;;==yIII+4466	BBBBBr"   c                    dfd|                       t          | j                  dd          d           |                       t          | j                  dd          d           fd	 G fd
d          }t          || j                  }|                       |d                                          d           |                       |d                              d          d           t          || j                  }|                       |d                              d          d           |                      t           |d                                                    d           |                      t           |d                                        d          d           t           |d          | j                  }|                      |                    d          d           |                       t           |d          j                              d           |                       t           |d          j                  d          d           t           |d          j        | j                  }|                       |d          d           d S )NrH   c                 L    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		NNN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                   0    e Zd ZdZd Z fdZfdZdS )JCloudPickleTest.test_locally_defined_function_and_class.<locals>.SomeClassz:Overly complicated class with nested references to symbolsc                     || _         d S 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99r"   c                 V    |                                   |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)    xxzzMM!Q$7$77$*DDr"   N)r&   r'   r(   rD   r!   r/  r1  )r"  r.  r#  s   r    	SomeClassr)    sh        LL# # #: : : : : :E E E E E E 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OOOPRTUVVXYZZZOOOOPRTUVVXYZZZ0000		E 		E 		E 		E 		E 		E 		E 		E 		E 		E 		E 		E &i$-HHHQ++--q111Q33B77;;;,YOOOQ33B77;;; 	166::<<a@@@166BB2FFJJJ-iill7;}F F F11"55q999 	:1)9::<<a@@@B1)ABB2FFJJJ+IIaLL,D59]D D D
B+++++r"   c                     t          j        t          d          }t          || j                  }|                      |d          d           d S )Nr   r+      )	functoolspartialminr1   r,   rz   )r   partial_objpartial_clones      r    test_partialzCloudPickleTest.test_partial  sN    'Q//'dmLLLq))1-----r"   PyPyz"Skip numpy and scipy tests on PyPyc                 "   t           r?|                     t          t           j        | j                  t           j                   n	 t
          r@|                     t          t
          j        | j                  t
          j                   d S d S r   )nprz   r1   addr,   sppivr$   s    r    
test_ufunczCloudPickleTest.test_ufunc  s      	_RVdmLLLV% % % %  	_SVdmLLL V% % % % % Dr"   c                     d}t          j        t          j        || j                            }|                     ||           d S )Nr   rj   rh   r9  r+   )r.   r-   r/   r,   rz   )r   r0   returned_objs      r    test_loads_namespacez$CloudPickleTest.test_loads_namespace  sP    "():$-*) *) *) * *l+++++r"   c                     d}t          j                    }t          j        ||           |                    d           t          j        |          }|                     ||           d S )NrH  r   )ioBytesIOr.   dumpseekloadrz   )r   r0   biorI  s       r    test_load_namespacez#CloudPickleTest.test_load_namespace  s`    jllc""""',,l+++++r"   c                    d }t          || j                  }t           |d                    t           |d                    k    sJ t           |d                    t          t	          d                    k    sJ d S )Nc              3   6   K   t          |           D ]}|V  d S r   )ry   )cntis     r    some_generatorz6CloudPickleTest.test_generator.<locals>.some_generator  s0      3ZZ   r"   r+   rh   )r1   r,   r   r   ry   )r   rW  gen2s      r    test_generatorzCloudPickleTest.test_generator  s    	 	 	 ~FFFDDGG}}^^A%6%6 7 77777DDGG}}U1XX......r"   c                 `    G d d          }|j         d         }|j         d         }t          || j                  |_        t          || j                  |_        |                     |                                d           |                     |                                d           d S )Nc                   :    e Zd Zed             Zed             ZdS )+CloudPickleTest.test_classmethod.<locals>.Ac                      dS )Nsmr)   r)   r"   r    test_smz3CloudPickleTest.test_classmethod.<locals>.A.test_sm      tr"   c                     dS 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\    sF          \  [  r"   rE   r_  rf  r+   r^  rc  )__dict__r1   r,   r_  rf  rz   )r   rE   r^  rc  s       r    test_classmethodz CloudPickleTest.test_classmethod  s    	 	 	 	 	 	 	 	 Z	"Z	"#B???	#B???	d+++d+++++r"   c                      G d d          }t          |j        | j                  |_        |                     |                                d           d S )Nc                   $    e Zd Zed             ZdS )1CloudPickleTest.test_bound_classmethod.<locals>.Ac                     dS 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  sh    	 	 	 	 	 	 	 	
 $AIFFF	d+++++r"   c                 v    t          t          j                  }|                      |d          d           d S )NabcABC)r1   r   upperrz   )r   r   s     r    test_method_descriptorsz'CloudPickleTest.test_method_descriptors   s5    CI&&55)))))r"   c                      G d d          }t          |j        | j                  }|                     |j        |j        j                   d S )Nc                       e Zd Zd ZdS )<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  sd    	 	 	 	 	 	 	 	 AC$-888QS\22222r"   c                 r    t          t          | j                  }|                     t          |           d S r   )r1   r   r,   rz   )r   pickle_clones     r    test_modulezCloudPickleTest.test_module  s2    &vFFF.....r"   c                    t          j        d          }d}t          t          j        |          |j                   t          || j                  }|                     |j	        |j	                   |                     |
                    d          |
                    d                     |                     |                                                    d          |                                                    d                     t          j                    dk    rt          || j                  }|                     |j	        |j	                   |                     |
                    d          |
                    d                     |                     |                                                    d          |                                                    d                     t          ||g          \  }}|                     t!          |          t!          |                     	 |t"          j        d<   t          |j
        | j                  }|                     |
                    d           |d                     t"          j                            dd            d S # t"          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""CL111sT];;;'''q466!99---))!,,dhhjj.?.?.B.BCCC)++v55)#FFFDSUDF+++SUU1XXtvvayy111SWWYY--a00$((**2C2CA2F2FGGG %c3Z00
dD2d88,,,	)!$CK)#%$-HHHKSUU1XX{{1~~666KOOE4(((((CKOOE4((((s   >AJ< <"Kc                    t           j                            | j        d          }d}|                    t          |                    }	 ddlm}  |            }t          |d          5 }t          j
        ||| j                   d d d            n# 1 swxY w Y   t          t          j        |                     t          j        |           d S # 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;   
 GLL6HII   4::")*;"<"<  ;  >  >	)MMMMMM##%%A'.. ?! A>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %X_5I%J%JKKK I'(((((BI'((((s0    C ,B	C BC B$C C-c                     G d d          }t          j        d          }t          d|j                   |                    d          dk    sJ d|j        v sJ  |            }t          j        t                    5  t          j	        |           d d d            n# 1 swxY w Y   t          |j        d         t                    r||j        d         d<   n7t          |j        d         t           j                  r||j        d         _        t          || j        	          }d|j        v sJ t          |j        d         t                    rd
|j        v sJ n<t          |j        d         t           j                  rt!          |j        d
          sJ |                    d          dk    sJ |                    d          dk    sJ d S )Nc                       e Zd Zd ZdS )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66r"   Nr   r)   r"   r    UnpickleableObjectr  \  s#        7 7 7 7 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 	7 	7 	7 	7 	7 	7 u%%#S\222uuRyyA~~~~----,,..]:&& 	/ 	/o...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ cl>2D99 	L?NCL();<<^4e6FGG 	L<KCL(9'dmDDD!77777m,^<dCC 	>M666666&~68HJ J 	>=5u=====r""a'''' uuRyyA~~~~~~s    B!!B%(B%c                 F   t          j        d          }d}t          t          j        |          |j                   t          j                            | j	        d          }t          j                            | j	        d          }d}d}|
                    |          }|
                    t          |          t          |          t          |          | j                  }	 t          |d	          5 }t          j        ||| j        
           d d d            n# 1 swxY w Y   t!          t          j        |                     t          j                            |          rt          j        |           t          j                            |          rt          j        |           d S d S # t          j                            |          rt          j        |           t          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  sb    u%% 	X_T""CL111 &(W\\KA&C &C"$&GLLK@%B %B! ()% )F(L(L*C )M )E )E%  4::'./I'J'J&-.G&H&H*12O*P*P]	  ;  $  $	50$77 C3 cDMBBBBC C C C C C C C C C C C C C C %X_5I%J%JKKK w~~899 6	4555w~~788 5	3444445 5 w~~899 6	4555w~~788 5	344445s1   (F7 8D!F7 !D%%F7 (D%)$F7 7A)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 d S )	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    8A;;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  s    	 	 		 	 		* 	* 	* 	* 	* /$-HHH $q((((!Q&&&&#1,,,,ar"   c                    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            n# 1 swxY w Y   ddlm}	 t          |	          rJ t5          |	d	          rJ t%          |	| j                  }
|
|	usJ |	                    d
          |
                    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            d S # 1 swxY w Y   d S )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  su   2333333333*622222*2733333*;77777*;?;;;;;)*:;;.~>>>>>)++v55NNN.w77777 	?>>>>>>>>*1-----q4=999Q>>>> 	IHHHHH +2.....rDM:::b@@@@ ];'' 	< 	<;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<BBBBBB.r22222 2|,,,,,&rDMBBB2%%%%ttAww,..++++++ 	UTTTTTTTTTTT*2.....rDM:::b@@@@C]9H555 	2 	2'111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s$   EEE'IIIc                 n    |                      t          t          t          | j                             d S r   )rz   Ellipsisr1   r,   r$   s    r    test_EllipsiszCloudPickleTest.test_Ellipsis  s=    (DMJJJ	L 	L 	L 	L 	Lr"   c                 r    t          t          | j                  }|                     t          |           d S r   )r1   NotImplementedr,   rz   )r   ExcClones     r    test_NotImplementedz#CloudPickleTest.test_NotImplemented!  s2    ">DMJJJ22222r"   c                     t          t          d           | j                  }|                     t          d           |           d S r   )r1   r   r,   rz   r   ress     r    test_NoneTypezCloudPickleTest.test_NoneType%  s>    d4jj4=AAAdS)))))r"   c                     t          t          t                    | j                  }|                     t          t                    |           d S r   )r1   r   r  r,   rz   r  s     r    test_EllipsisTypez!CloudPickleTest.test_EllipsisType)  s>    d8nnt}EEEh-----r"   c                     t          t          t                    | j                  }|                     t          t                    |           d S r   )r1   r   r  r,   rz   r  s     r    test_NotImplementedTypez'CloudPickleTest.test_NotImplementedType-  sB    d>22T]KKKn--s33333r"   c                     t          t          | j                  t          u sJ ddlm} t          || j                  |u sJ d S )Nr+   r   )mkdir)r1   zipr,   r  r  )r   r  s     r    test_builtin_functionz%CloudPickleTest.test_builtin_function1  s\    
 sT];;;sBBBBut}===FFFFFFr"   c                     t           t          t          t          t          t
          fD ]8}t          |j        | j                  }t           ||          |          sJ 9d S r   )
r   tupleset	frozensetr  r  r1   __new__r,   r   )r   t
cloned_news      r    test_builtin_type_constructorz-CloudPickleTest.test_builtin_type_constructor<  sa    
 uc9dF: 	0 	0A(T]KKKJjjmmQ//////	0 	0r"   c                 L   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 d S )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    !g $S		 $S		 25 9$(=====.$- 9  9  9!0!DM"; "; ";!0!DM"; "; ";
 $#%%)<)<)>)>>>>>%)>>>>>%)>>>>>>>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                    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    r\t          |          t          |          k    sJ |                    t          |          |                    t          |          k    sJ d S d S )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  s    + II-  )%  /dm 5  5  5!0"7 "7 "7!0"7 "7 "7 
 $#C((OOC,@,@@@@@%%c**.?.?.D.DDDDD)++y88 *)#..2C2CE32O2OOOOO)++v55 .//48I3J3JJJJJ)22s 099%EEF F F F 65F Fr"   c                 @   d}|j         }t          |          j         }t          |          j        d         }t          || j                  }t          || j                  }t          || j                  } |             |            k    sJ ||u sJ ||u sJ d S )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    <!#YY/!#YY/
;.t} 6  6  6!0"8 "8 "8!0"8 "8 "8
 $#%%)9)9););;;;;%);;;;;%);;;;;;;r"   z0No known staticmethod example in the pypy stdlibc                 x   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  d S )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      ]#Cyy2#Cyy1+>!%99999. 8  8  8!0 4=": ": ":!0 4=": ": ": $'99999%)===== &.2F2OOOOO#$$-A(B(BBB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        |          \  }}| 	                    ||u            |j
                                        }|                    t          j        |d                    }|                     |d           d S )Nr   )genioloopc              3   f   K                        |           V                      |dz             r   )sleepReturn)r   r!  r  s     r    r   z1CloudPickleTest.test_tornado_coroutine.<locals>.f  s3      ))A,,**QU###r"   c              3   T   K    d|           V }                     |dz             )Ng{Gz?r   )r  )r!  r  r   r  s     r    r   z1CloudPickleTest.test_tornado_coroutine.<locals>.g  s2      $

""C**S1W%%%r"   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455a     r"   )rh   r  r   beta)rh   r  r   r(  r9  z.https://github.com/python/cpython/issues/92932c                   
 d}d t          d|          D             }t          j        d          

fd|D             }d                    d                    |                    }t          t          j        |          ||           |d	         } |            }t          j	        ||g| j
        
          }d x}}t          j        |          \  }}	|                     ||	u            |                      |            |           d S )Ni c                     g | ]}d |z  S )zg%dr)   ).0rV  s     r    
<listcomp>z5CloudPickleTest.test_extended_arg.<locals>.<listcomp>  s    444q444r"   r   rH   c                 <    i | ]}|                     d           S )d   )	randrange)r+  namers     r    
<dictcomp>z5CloudPickleTest.test_extended_arg.<locals>.<dictcomp>  s'    666T1;;s##666r"   zx
        import zlib

        def f():
            x = {tup}
            return zlib.crc32(bytes(bytearray(x)))
        z, )tupr   r+   )ry   randomRandomr  r  r  r  r  r.   r/   r,   r   r-   r   rz   )r   nvarsnamesr{   r  r   r  r$  r   f3r1  s             @r    test_extended_argz!CloudPickleTest.test_extended_arg  s    44E!UOO444M"6666666 Ftyy''F(( 	 	X_T""Aq)))cFacc !Q$-@@@Ad##Bb!!!s#####r"   c                    dd l ad }t          j        || j                  }bt          t          j                  D ].}|                    d          d         dk    rt          j        |= /t          j
        |          } |             d S )Nr   c                  2    t           j        j        j        } d S r   xmletreeElementTreeCommentr  s    r    examplez/CloudPickleTest.test_submodule.<locals>.example  s    	%-AAAr"   r+   .r=  )xml.etree.ElementTreer=  r.   r/   r,   r   r   r  splitr   r-   )r   rA  r   r;   r   s        r    test_submodulezCloudPickleTest.test_submodule  s     	%$$$	. 	. 	. g>>> %% 	& 	&Dzz#q!U**K% LOO	r"   c                 "   d } |            }t          j        || j                  }t          t          j                  D ].}|                    d          d         dk    rt          j        |= /t          j        |          } |             d S )Nc                      dd l fd} | S )Nr   c                  *    j         j        j        } d S r   )r>  r?  r@  )r   r=  s    r    rA  zFCloudPickleTest.test_submodule_closure.<locals>.scope.<locals>.example  s    I)1r"   )rC  )rA  r=  s    @r    scopez5CloudPickleTest.test_submodule_closure.<locals>.scope  s-    ((((2 2 2 2 2Nr"   r+   rB  r   r=  )r.   r/   r,   r   r   r  rD  r-   )r   rI  rA  r   r;   r   s         r    test_submodule_closurez&CloudPickleTest.test_submodule_closure  s    	 	 	
 %''g>>> %% 	& 	&Dzz#q!U**K%a  	r"   c                     d }dd l a |            }t          j        || j                  }dt          j        |                              d          z   dz   }t          j	        t          j        d|g          rJ d S )Nc                      d } | S )Nc                  2    t           j        j        j        } d S r   r<  r  s    r    rA  zACloudPickleTest.test_multiprocess.<locals>.scope.<locals>.example(  s    I)1r"   r)   )rA  s    r    rI  z0CloudPickleTest.test_multiprocess.<locals>.scope'  s    2 2 2Nr"   r   r+   [import base64; from srsly.cloudpickle.compat import pickle; pickle.loads(base64.b32decode('ascii'))()-c)rC  r=  r.   r/   r,   base64	b32encodedecode
subprocesscallr   
executabler   rI  rA  r   commands        r    test_multiprocessz!CloudPickleTest.test_multiprocess%  s    	 	 	
 	%$$$%''g>>>5 #A&&--g667 	
 ?CND'#BCCCCCCCr"   c                    d } |            }dd l mc ma t          j        || j                  }dt          j        |                              d          z   dz   }t          j
        t          j        d|g          rJ d S )Nc                      dd l m fd} | S )Nr   c                  .    t           j        } j        } d S r   )r>  r@  r?  )r   foobars    r    rA  z;CloudPickleTest.test_import.<locals>.scope.<locals>.example@  s    M&r"   )	xml.etreer>  )rA  r^  s    @r    rI  z*CloudPickleTest.test_import.<locals>.scope>  s5    &&&&&&' ' ' ' ' Nr"   r   r+   rN  rO  rP  rQ  )rC  r>  r?  r.   r/   r,   rR  rS  rT  rU  rV  r   rW  rX  s        r    test_importzCloudPickleTest.test_import:  s    	 	 	 %''---------g>>>5 #A&&--g667 	
 ?CND'#BCCCCCCCr"   c                     t          j                    }t          j        t          d          5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nz4only be shared between processes through inheritancer  )multiprocessingLockr   r   RuntimeErrorr.   r/   )r   locks     r     test_multiprocessing_lock_raisesz0CloudPickleTest.test_multiprocessing_lock_raisesP  s    #%%]</efff 	$ 	$d###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   AAAc                 
   t                      }t          j        t                    5  |j         d d d            n# 1 swxY w Y   t                      }t          ||           |                     |j        |u d           d S )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  s    !!]:&& 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 XXr"$1 	 	
 	
 	
 	
 	
s   <A A c                    t          j        |          }t          || j                  }|                     ||u ||f           t          j        |          }d                    t          j	        |          
                    d                    }t          j        t          j        dd|gt          j        t          j                  }|                                \  }}|                     |                                d           |                     |                                
                                d|j         d	           d S )
Nr+   zif 1:
            import base64, srsly.cloudpickle as cloudpickle, logging

            logging.basicConfig(level=logging.INFO)
            logger = cloudpickle.loads(base64.b32decode(b'{}'))
            logger.info('hello')
            rO  z	-W ignorerQ  )stdoutr   r   zINFO:z:hello)logging	getLoggerr1   r,   r   r.   r/   r  rR  rS  rT  rU  Popenr   rW  PIPESTDOUTcommunicaterz   waitstripr0  )	r   r0  loggerpickleddumpedr  procout_s	            r    check_loggerzCloudPickleTest.check_loggerb  s4   "4((!&4=AAA6)GV+<==="6** v'//66w??@@ 	 dD I'1'1'8: : : !!##Qa(((++--4444	6 	6 	6 	6 	6r"   c                 Z    |                      d            |                      d           d S )Nzcloudpickle.dummy_test_logger)r{  r$   s    r    test_loggerzCloudPickleTest.test_loggerx  s1    $9:::::r"   c                     t          t          j        t          j                  sJ t          t          j                  }|                     |t          j                   d S r   )r   r  realr  GetSetDescriptorTyper1   assertIs)r   depickled_descriptors     r    test_getset_descriptorz&CloudPickleTest.test_getset_descriptor~  sJ    %*e&@AAAAA.uz::*EJ77777r"   c                    t          j        ddi           } G d d          } G d d          }|                    |           t          ||          rJ t          ||          sJ t	          j        |          }d|vsJ d|v sJ t	          j        |          }t          ||          rJ t          ||          sJ d S )	Nrp   r)   c                       e Zd ZdS )DCloudPickleTest.test_abc_cache_not_pickled.<locals>.MyUnrelatedClassNro   r)   r"   r    MyUnrelatedClassr    rq   r"   r  c                       e Zd ZdS )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0	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	(((.88888.'22222g&&"!++++ A%%%%%+A...@@@@@./:::::::r"   c                     G d dt           j                  } G fdd|          |                    t                                  }t	          || j                  }t	          | j                  }t	          |          }t          t          |          sJ t          t          |          sJ |                      |                                            d           |                     |                                d           |                     |	                                d           |                     |	                                d           |                      |            
                                d           |                     |
                                d           |                      |            j        d           |                     |j        d           |                     t          |            G fdd|          |                                                                  d	            G d
 d|          }|                     t          |           d S )Nc                       e Zd Zej        d             Zeej        d                         Zeej        d                         Z	e
ej        d                         ZdS )/CloudPickleTest.test_abc.<locals>.AbstractClassc                     dS zA methodNr)   r$   s    r    r1  z;CloudPickleTest.test_abc.<locals>.AbstractClass.some_method  r   r"   c                     dS zA classmethodNr)   rd  s    r    some_classmethodz@CloudPickleTest.test_abc.<locals>.AbstractClass.some_classmethod  r   r"   c                      dS zA staticmethodNr)   r)   r"   r    some_staticmethodzACloudPickleTest.test_abc.<locals>.AbstractClass.some_staticmethod  r   r"   c                      dS 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            $ $   [$ % %   \% ! !   X! ! !r"   r  c                   \    e Zd Zd Ze fd            Zed             Zed             Z	dS )/CloudPickleTest.test_abc.<locals>.ConcreteClassc                     dS N	it works!r)   r$   s    r    r1  z;CloudPickleTest.test_abc.<locals>.ConcreteClass.some_method      "{r"   c                     | k    sJ dS r  r)   re  ConcreteClasss    r    r  z@CloudPickleTest.test_abc.<locals>.ConcreteClass.some_classmethod      m++++"{r"   c                      dS r  r)   r)   r"   r    r  zACloudPickleTest.test_abc.<locals>.ConcreteClass.some_staticmethod      "{r"   c                     dS 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            # # # # # # # [# # # \# # # X# # #r"   r  r+   r  c                   \    e Zd Zd Ze fd            Zed             Zed             Z	dS )7CloudPickleTest.test_abc.<locals>.DepickledBaseSubclassc                     dS Nit works for realz!r)   r$   s    r    r1  zCCloudPickleTest.test_abc.<locals>.DepickledBaseSubclass.some_method      ,,r"   c                     | k    sJ dS r  r)   re  DepickledBaseSubclasss    r    r  zHCloudPickleTest.test_abc.<locals>.DepickledBaseSubclass.some_classmethod      33333,,r"   c                      dS r  r)   r)   r"   r    r  zICloudPickleTest.test_abc.<locals>.DepickledBaseSubclass.some_staticmethod      ,,r"   c                      dS r  r)   r)   r"   r    r  zECloudPickleTest.test_abc.<locals>.DepickledBaseSubclass.some_property  r  r"   Nr  r  s   r    r  r            - - - - - - - [- - - \- - - X- - -r"   r  r  c                       e Zd Zd ZdS )8CloudPickleTest.test_abc.<locals>.IncompleteBaseSubclassc                     dS 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   	! 	! 	! 	! 	!CG 	! 	! 	!(	# 	# 	# 	# 	# 	# 	#M 	# 	# 	#& 	u%%%)MOO(OOO)-37=B B B,->??%/////%00000**6688+FFF+7799;GGG99;;[III+<<>>LLL**<<>>LLL+==??MMM**8+FFF+9;GGG)^444	- 	- 	- 	- 	- 	- 	-N 	- 	- 	-" 	..00<<>>.	0 	0 	0	@ 	@ 	@ 	@ 	@^ 	@ 	@ 	@ 	)%;<<<<<r"   c                     G d dt           j                  } G fdd|          |                    t                                  }t	          || j                  }t	          | j                  }t	          |          }t          t          |          sJ t          t          |          sJ |                      |                                            d           |                     |                                d           |                     |	                                d           |                     |	                                d           |                      |            
                                d           |                     |
                                d           |                      |            j        d           |                     |j        d           |                     t          |            G fdd|          |                                                                  d	            G d
 d|          }|                     t          |           d S )Nc                       e Zd Zej        d             Zej        d             Zej        d             Z	ej
        d             ZdS )5CloudPickleTest.test_abstracts.<locals>.AbstractClassc                     dS r  r)   r$   s    r    r1  zACloudPickleTest.test_abstracts.<locals>.AbstractClass.some_method  r   r"   c                     dS r  r)   rd  s    r    r  zFCloudPickleTest.test_abstracts.<locals>.AbstractClass.some_classmethod  r   r"   c                      dS r  r)   r)   r"   r    r  zGCloudPickleTest.test_abstracts.<locals>.AbstractClass.some_staticmethod  r   r"   c                     dS 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    s            $$ $ %$$ %% % &%% !! ! "!! ! !r"   r  c                   \    e Zd Zd Ze fd            Zed             Zed             Z	dS )5CloudPickleTest.test_abstracts.<locals>.ConcreteClassc                     dS r  r)   r$   s    r    r1  zACloudPickleTest.test_abstracts.<locals>.ConcreteClass.some_method  r  r"   c                     | k    sJ dS r  r)   r  s    r    r  zFCloudPickleTest.test_abstracts.<locals>.ConcreteClass.some_classmethod  r  r"   c                      dS r  r)   r)   r"   r    r  zGCloudPickleTest.test_abstracts.<locals>.ConcreteClass.some_staticmethod  r  r"   c                     dS 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                   \    e Zd Zd Ze fd            Zed             Zed             Z	dS )=CloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclassc                     dS r  r)   r$   s    r    r1  zICloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclass.some_method9  r  r"   c                     | k    sJ dS r  r)   r  s    r    r  zNCloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclass.some_classmethod<  r  r"   c                      dS r  r)   r)   r"   r    r  zOCloudPickleTest.test_abstracts.<locals>.DepickledBaseSubclass.some_staticmethodA  r  r"   c                     dS 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dS )>CloudPickleTest.test_abstracts.<locals>.IncompleteBaseSubclassc                     dS 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   	! 	! 	! 	! 	!CG 	! 	! 	!"	# 	# 	# 	# 	# 	# 	#M 	# 	# 	#& 	u%%%)MOO(OOO)-37=B B B,->??%/////%00000**6688+FFF+7799;GGG99;;[III+<<>>LLL**<<>>LLL+==??MMM**8+FFF+9;GGG)^444	- 	- 	- 	- 	- 	- 	-N 	- 	- 	-" 	..00<<>>.	0 	0 	0	@ 	@ 	@ 	@ 	@^ 	@ 	@ 	@ 	)%;<<<<<r"   c                     G d d          } |d           |d           |d          }}}t          j        ||g          |||g}t          || j                  }|\  }}}	}
|                     |j        d           |                     |	j        d           |                     |
j        d           |                     t          |          d           |                     t          |          ||	h           d S )Nc                       e Zd Zd ZdS )ECloudPickleTest.test_weakset_identity_preservation.<locals>.SomeClassc                     || _         d S 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   
	 	 	 	 	 	 	 	 %9Q<<1yy||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            n# 1 swxY w Y   	 |t          j        d<   t          d           }|dk    sJ |J t          | j
                  } |d          dk    sJ 	 t          j                            d           d S # t          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dS )XCloudPickleTest.test_non_module_object_passing_whichmodule_test.<locals>.NonModuleObjectc                     d | _         d S 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   r0  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_objectrz  func_module_namedepickled_funcr  s         @r    /test_non_module_object_passing_whichmodule_testz?CloudPickleTest.test_non_module_object_passing_whichmodule_testi  s   	 	 	
 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) ,O--tAww!||||(----- ]>** 	, 	,!+A	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,	/->CK)*+D$77#'88888#+++,TDMJJJN!>!$$))))) KOO-.....CKOO-....s   A..A25A2:AC. .!Dc                 f   t           t          j        fD ]}dD ] G d d|          } G fdd          }d }|_        |t          j        u r |d          }n
 |            }|t          j        d<   	 |                     t           |                                                      d           t          || j	        	          }|                      |            d           t          j        
                    dd            # t          j        
                    dd            w xY wd S )
N)_missing_moduleNc                       e Zd Zd ZdS )BCloudPickleTest.test_unrelated_faulty_module.<locals>.FaultyModulec                     t                      r   r   r   r0  s     r    r   zNCloudPickleTest.test_unrelated_faulty_module.<locals>.FaultyModule.__getattr__  s     (kk)r"   Nr   r)   r"   r    FaultyModuler	    s#        * * * * *r"   r  c                       e Zd Z Zd ZdS )9CloudPickleTest.test_unrelated_faulty_module.<locals>.Fooc                     dS 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                      dS 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4 !	< !	<J8  <  <* * * * *: * * *+ + + + + + + + + +' ' ' "-!111$0L1A$B$BMM$0LNNM0=,-<$$_SSUU%;%;%?%?%A%A;OOO -S4=IIIF$$VVXX{;;;KOO$4d;;;;CKOO$4d;;;;A <!	< !	<s   8A1D

"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                            } |            }|                     d|           d S )Nr   c                  b    j                             dg          } |                                 S r   )builtinr  r  )r   pys    r    r   z5CloudPickleTest.test_dynamic_pytest_module.<locals>.f  s%    
s##A5577Nr"   )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  s     					 	 	 	 	 	322222AAAAAA8?8N#D$4$45k/DMJJJKKF#####r"   c                 x    d }t          || j                  }|                     |j        |j                   d S )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  s>    { >>>*DO<<<<<r"   c                    d }t          |d          r6t          || j                  }|                     |j        |j                   d|_        t          || j                  }|                     |j        |j                   d S )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  s    	 	 	 4(( 	E$TDMBBBFV0$2CDD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            n# 1 swxY w Y   d|_        t          |          }|j         dk    sJ |j        dk    sJ t          j        t                    5  d|_         d d d            n# 1 swxY w Y   d|_        |j        dk    sJ t          |          j         j        dk     d S )Nc                   b    e Zd ZdZdZed             Zed             Zej        d             ZdS )/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                     || _         d S r   r1  r,  s     r    r3  z@CloudPickleTest.test_property.<locals>.MyObject.read_write_value  s    ).&&&r"   N)	r&   r'   r(   r.  r2  r  r/  r3  setterr)   r"   r    MyObjectr+    ss          !- - X- . . X. $/ / %$/ / /r"   r6  r   r-  rj   rh   )r/  rD   r   r   r   r3  r1   r   )r   r6  rt   depickled_objs       r    test_propertyzCloudPickleTest.test_property  s   	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/& HJJ	(A----'/3JJJJJ]>** 	* 	*()I%	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*%&	"'	22,1111-2222 ]>** 	* 	*()I%	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* *+&-2222]+37NNNNNs$   A$$A(+A(8CCC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 d S )NMyTuple)rA   rJ   rQ   r   rj   rh   r+   )r   
namedtupler1   r,   r   )r   r:  t1t2depickled_t1depickled_MyTupledepickled_t2s          r    test_namedtuplezCloudPickleTest.test_namedtuple  s    (OOODDWQ1WQ18G"97 97 975' ,00000r!!!! G++++,00000r!!!!!!r"   z'fails sometimes for pypy on conda-forgec                 ~    d                     | j                  }t          t          j        |                     d S )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'  sB    
;v FDMF**w 	x 	!!6!677777r"   c                     d}dD ]?}|                     | j        |          }t          t          j        |                     @d S )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_funcrC  )r   code_templaterH  r  s       r    *test_interactively_defined_global_variablez:CloudPickleTest.test_interactively_defined_global_variablej  sb    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 d S # |a w xY w)Nr   c                  
    da d S )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   rN  r)   r"   r    r   zKCloudPickleTest.test_closure_interacting_with_a_global_variable.<locals>.f1  s    ,,r"   r+   rM  )rO  r1   r,   __globals__r.   r/   r   r-   )
r   
orig_valuerP  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  sy   $7777*
,	/8 8 8- - - $3B8<@M$K $K $K Iy
 (I,AAAAA(>>>> %*2FFFJ IKKK )O;;;;
 !*	$7779J777
 #L44M ,I4IIIII ,BNBBBB +]__N!_444n4444$.!!!J!....s   CC6 6C:c                 Z    d                     | j                  }t          |           d S )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   rD  s     r    &test_interactive_remote_function_callsz6CloudPickleTest.test_interactive_remote_function_calls  s5    2 FDMF**3 	4 	!&&&&&r"   c                 Z    d                     | j                  }t          |           d S )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+   r\  rD  s     r    5test_interactive_remote_function_calls_no_side_effectzECloudPickleTest.test_interactive_remote_function_calls_no_side_effect  s8    (P FDMF**Q 	R 	!&&&&&r"   c                 Z    d                     | j                  }t          |           d S )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+   r\  rD  s     r    2test_interactive_dynamic_type_and_remote_instanceszBCloudPickleTest.test_interactive_dynamic_type_and_remote_instances"  s8    #F FDMF**G 	H 	!&&&&&r"   c                 Z    d                     | j                  }t          |           dS )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+   Nr\  rD  s     r    9test_interactive_dynamic_type_and_stored_remote_instanceszICloudPickleTest.test_interactive_dynamic_type_and_stored_remote_instancesI  s9    EJ FDMF**K 	L 	!&&&&&r"   z1Seems to have issues outside of linux and CPythonc                 Z    d                     | j                  }t          |           d S )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+   r\  rD  s     r    5test_interactive_remote_function_calls_no_memory_leakzECloudPickleTest.test_interactive_remote_function_calls_no_memory_leak  s8    *T FDMF**U 	V 	!&&&&&r"   c                    t           t          t          t          fD ]m}t	           |d                    }t          j        |t          j        f          5  t          j
        || j                   d d d            n# 1 swxY w Y   nd S )Nr   r+   )r   r9   r  rd  r   r   r   r   PicklingErrorr.   r/   r,   )r   exc_typer0   s      r    test_pickle_reraisez#CloudPickleTest.test_pickle_reraise  s    "J	<H 	? 	?H %11C&*>?@@ ? ?!#>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?	? 	?s   A==B	B	c                     ddi}t          |j        | j                  }|                      |d          d           |                      |d          d            d S )NrA   r   r+   rJ   )r1   getr,   rz   )r   r{   depickled_methods      r    test_unhashable_functionz(CloudPickleTest.test_unhashable_function  sl    !H*154=III))#..222))#..55555r"   )rh      zJDeprecation warning in python 3.12 about future deprecation in python 3.14c                 L   t          j        dd          }t          |           t          |           t          || j                  }|                     ||u           t          d          D ]2}|                     t          |          t          |                     3d S )Nr   rj   )stepr+   rx   )	itertoolscountnextr1   r,   r   ry   rz   )r   counternew_counterrz  s       r    test_itertools_countz$CloudPickleTest.test_itertools_count  s    /!!,,, 	WW%gFFF{2333r 	? 	?AT']]D,=,=>>>>	? 	?r"   c                     ddl m} d  |          fd            }t          || j                  }|                     |j        j                   d S )Nr   r   c                      d S r   r)   r)   r"   r    r   z=CloudPickleTest.test_wraps_preserves_function_name.<locals>.f      Dr"   c                                     d S r   r)   r   s   r    r   z=CloudPickleTest.test_wraps_preserves_function_name.<locals>.g      ACCCCCr"   r+   )r:  r   r1   r,   rz   r&   r   r   r   r   r   s       @r    "test_wraps_preserves_function_namez2CloudPickleTest.test_wraps_preserves_function_name  s    ######	 	 	 
q	 	 	 	 
	 Q777aj11111r"   c                     ddl m} d  |          fd            }t          || j                  }|                     |j        j                   d S )Nr   r   c                      dS )42Nr)   r)   r"   r    r   z<CloudPickleTest.test_wraps_preserves_function_doc.<locals>.f  s    Dr"   c                                     d S r   r)   r{  s   r    r   z<CloudPickleTest.test_wraps_preserves_function_doc.<locals>.g  r|  r"   r+   )r:  r   r1   r,   rz   rD   r}  s       @r    !test_wraps_preserves_function_docz1CloudPickleTest.test_wraps_preserves_function_doc  s    ######	 	 	 
q	 	 	 	 
	 Q777QY/////r"   c                     d dt           d_        t                    fd            }t          || j                  }|                     |j        j                   d S )Nc                     d S r   r)   r  s    r    r   zDCloudPickleTest.test_wraps_preserves_function_annotations.<locals>.f  ry  r"   r   )r   returnc                      |            d S r   r)   )r   r   s    r    r   zDCloudPickleTest.test_wraps_preserves_function_annotations.<locals>.g  s    AaDDDDDr"   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5	q	 	 	 	 
	 Q777+Q->?????r"   c                 l    t           j        t          t          f         }t	          |          |k    sJ d S r   )typingUnionr   rU   r1   )r   r  s     r    test_type_hintzCloudPickleTest.test_type_hint  s1    Ls#q!!Q&&&&&&r"   c                    dgdfD ] G fdd          } |            }t          || j                  }||fD ]U}|                     |j        d           t	          j        t                    5  d|_        d d d            n# 1 swxY w Y   V G d d|          } |            }t          j	        || j                  }~t          j
        |          }|j        dk    sJ d S )	Nregistered_attributec                       e Zd Z Zd ZdS )@CloudPickleTest.test_instance_with_slots.<locals>.ClassWithSlotsc                     d| _         d S )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)        !	3 3 3 3 3r"   r  r+   rH   r   c                       e Zd Zd ZdS )CCloudPickleTest.test_instance_with_slots.<locals>.SubclassWithSlotsc                     d| _         d S r   )unregistered_attributer$   s    r    r!   zLCloudPickleTest.test_instance_with_slots.<locals>.SubclassWithSlots.__init__"  s    23D///r"   Nr  r)   r"   r    SubclassWithSlotsr  !  s#        4 4 4 4 4r"   r  )r1   r,   rz   r  r   r   r   non_registered_attributer.   r/   r-   r  )r   r  initial_objr7  r0   r  r   r  s          @r    test_instance_with_slotsz(CloudPickleTest.test_instance_with_slots  s   -.0FG 	= 	=E3 3 3 3 3 3 3 3 3 3 ).**K+dm5 5 5M $]3 5 5  !92>>>]>22 5 534C05 5 5 5 5 5 5 5 5 5 5 5 5 5 54 4 4 4 4N 4 4 4 $#%%C!#>>>A!'-a00M 71<<<<<1	= 	=s   2BB
B
MappingProxyTypez-Old versions of Python do not have this type.c                 j    t          j        ddi          }|t          || j                  k    sJ d S )Nsome_keyz
some valuer+   )r  r  r1   r,   )r   mps     r    test_mappingproxyz!CloudPickleTest.test_mappingproxy,  s?     #Z$>??_R$-@@@@@@@@@r"   c                    t          j        d          }|                    ddt          fg          } |d          }t	          || j                   |j        t	          || j                  j        cxk    rdk    sn J d S )Ndataclasses	DataClassr   rH   r  r+   )r   r  make_dataclassrU   r1   r,   r   )r   r  r  r$  s       r    test_dataclasszCloudPickleTest.test_dataclass2  s    )-88..{c3ZLII	y2	DM::::vFFFHNNNNBNNN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 |                                sJ |j        u sJ |u sJ t          j        | j                  }|j        u sJ d S )Nc                       e Zd ZdZdS )=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        FFFFr"   r  c                   *    e Zd ZdZdZdZdZ fdZdS )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  ?  sC        ''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;  sY   	G 	G 	G 	G 	Gdi 	G 	G 	G	+ 	+ 	+ 	+ 	+ 	+ 	+J 	+ 	+ 	+ '6[%+u-'G 'G 'G#*****[-----&#&&&&&      $$$$e#### t}EE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 d S )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-NOO-<!3\B].$ .$ .$** +11111/44444!\111111r"   c                 Z    d                     | j                  }t          |           d S )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+   r\  rD  s     r    test_interactively_defined_enumz/CloudPickleTest.test_interactively_defined_enume  s8     @ FDMF**A 	B 	!&&&&&r"   c                    t          j        d           ddlm}  |            \  }}t	          ||gddg          D ]C\  }} |            d| dk    sJ t          || j                  } |            d| dk    sJ Dd S )	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33 	BAAAAA''))1A9(=>> 	> 	>LD&4666V6666666 *$GGGK;==$=F$=$=$======	> 	>r"   c                     ddd}t          || j                  }||fD ]"} |d          dk    sJ |j        ddik    sJ #d S )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  s     	 	 	 	 	 &a$-@@@$ 	3 	3D477a<<<<&3(22222	3 	3r"   co_posonlyargcountz(Requires positional-only argument syntaxc                 ~    d                     | j                  }t          t          j        |                     d S )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+   rC  rD  s     r    =test_interactively_defined_func_with_positional_only_argumentzMCloudPickleTest.test_interactively_defined_func_with_positional_only_argument  s?     FDMF** 	  	!!6!677777r"   c                     t          j        d           ddlm} |                                dk    sJ t          || j                  }||u sJ d S )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  sy     	2333777777((**.>>>>>-T]4 4 4"n444444r"   c                    d }t          t          j                            |j                                                            }|dhk    sJ t          || j                  } |            } |            t          k    sJ d S )Nc                      d } | S )Nc                      t           S r   rN  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"   rO  r+   )r  r.   _extract_code_globalsr   rW   r1   r,   rO  )r   r  globals_depickled_factory
inner_funcs        r    'test_cloudpickle_extract_nested_globalsz7CloudPickleTest.test_cloudpickle_extract_nested_globals  s    	" 	" 	" {.DD%' ''+tvv/ /344444+,<59]D D D&&((
z||4444444r"   c                      G d d          } |            }t          j        t          j        d          5  t	          j        |           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )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   rg  r.   r/   )r   rE   rA   s      r    test_recursion_during_picklingz.CloudPickleTest.test_recursion_during_pickling  s    	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ ACC]6/{CCC 	! 	!a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   A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                   d S )	Nr   zNeed Pickle Protocol 5 or laternumpyc                   0    e Zd Z  j        d          ZdS )ECloudPickleTest.test_out_of_band_buffers.<locals>.LocallyDefinedClassrx   N)r&   r'   r(   zerosr$  )rB  s   r    LocallyDefinedClassr    s        28B<<DDDr"   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K9::: ))	  	  	  	  	  	  	  	  	  	  ,+--"(9@I I I7||q    \7CCC

""=#5}7IJJJJJr"   c                     t          j        d          }t          || j                  }g d}|D ]&}t	          ||          t	          ||          k    sJ 'd S )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  s}    N3%a$-@@@
 
 
	  	B 	BD1d##w{D'A'AAAAAA	B 	Br"   c                 f    t          j        d          }t          || j                  }||u sJ d S Nr  r+   )r  r   r   r,   )r   r  T2s      r    $test_pickle_dynamic_typevar_trackingz4CloudPickleTest.test_pickle_dynamic_typevar_tracking  s6    N3#A>>>Bwwwwwwr"   c                 p    t          j        d          }t          ||f| j                  \  }}||u sJ d S r  )r  r   r1   r,   )r   r  depickled_T1depickled_T2s       r    'test_pickle_dynamic_typevar_memoizationz7CloudPickleTest.test_pickle_dynamic_typevar_memoization  sO    N3%4aV>Bm&M &M &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 d S )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	  s    2333******Q777Qwwww 	"!!!!!$-HHHHHHHHHr"   c                 L   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k    } ||t
                   |t
          |          dk    sJ |                    ||t
                   |t
          |          dk    sJ 	 d d d            d S # 1 swxY w Y   d S )	Nr  c                       e Zd ZdS ),CloudPickleTest.test_generic_type.<locals>.CNro   r)   r"   r    rT   r  	  rq   r"   rT   r+   c                 z   | 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 n+t          | j                  dk    sJ | j        d         |u sJ t          |j                  dk    sJ dS )Nr   r   ok)
__origin__r   __orig_bases__r  Generic__args____parameters__)genericorigin
type_valueuse_argsri  s        r    check_genericz8CloudPickleTest.test_generic_type.<locals>.check_generic	  s    )V33336011Q6666*1-}6666 Cw/00A5555"+A.*<<<<<w566!;;;;"1!4
BBBB2,--2222tr"   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   N3	 	 	 	 	q! 	 	 	 q4=999Q>>>> qv>>>!C&HHHH666 	O&  & qvz266"<H =3C::dBBBB::mQsVQXFF$NNNNN/	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	Os   A7DD D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 sJ t          | j                  5 }d }|	D ]A}
|
                                } ||
|          sJ |                    ||
|          dk    sJ B	 d d d            d S # 1 swxY w Y   d S )Nr  c                       e Zd ZdS )3CloudPickleTest.test_generic_subclass.<locals>.BaseNro   r)   r"   r    r  r%  7	  rq   r"   r  c                       e Zd ZdS )9CloudPickleTest.test_generic_subclass.<locals>.DerivedAnyNro   r)   r"   r    
DerivedAnyr'  :	  rq   r"   r(  c                       e Zd ZdS )6CloudPickleTest.test_generic_subclass.<locals>.LeafAnyNro   r)   r"   r    LeafAnyr*  =	  rq   r"   r+  c                       e Zd ZdS )9CloudPickleTest.test_generic_subclass.<locals>.DerivedIntNro   r)   r"   r    
DerivedIntr-  @	  rq   r"   r.  c                       e Zd ZdS )6CloudPickleTest.test_generic_subclass.<locals>.LeafIntNro   r)   r"   r    LeafIntr0  C	  rq   r"   r1  c                       e Zd ZdS )7CloudPickleTest.test_generic_subclass.<locals>.DerivedTNro   r)   r"   r    DerivedTr3  F	  rq   r"   r4  c                       e Zd ZdS )4CloudPickleTest.test_generic_subclass.<locals>.LeafTNro   r)   r"   r    LeafTr6  I	  rq   r"   r7  r+   c                 :    |                                  |k    sJ dS )Nr  )mro)klassexpected_mros     r    	check_mroz8CloudPickleTest.test_generic_subclass.<locals>.check_mroT	  s     yy{{l2222tr"   r  )	r  r   r  rU   r1   r,   r   r9  r   )r   r  r  r(  r+  r.  r1  r4  r7  klassesr:  r!  r<  r9  s                 r    test_generic_subclassz%CloudPickleTest.test_generic_subclass4	  s   N3	 	 	 	 	6>!$ 	 	 		 	 	 	 	 	 	 		 	 	 	 	j 	 	 		 	 	 	 	c 	 	 		 	 	 	 	j 	 	 		 	 	 	 	tAw 	 	 		 	 	 	 	HQK 	 	 	 *gz7He
  	K 	KE"54=AAAUJJJJJ666 		A&   ! A Aiikk y,,,,,zz)UC88D@@@@@A		A 		A 		A 		A 		A 		A 		A 		A 		A 		A 		A 		A 		A 		A 		A 		A 		A 		As   AD11D58D5c                 4   t          | j                  5 }t                      D ]X G fdd          }di|_        d } |            } ||d          dk    sJ |                    ||d          dk    sJ Y	 d d d            d S # 1 swxY w Y   d S )Nr+   c                        e Zd Zd d fdZdS )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   rA  `	  s7        #% #E # # # # # #r"   rp   	attributec                     | j         d         |k    sJ | j        j         d         |k    sJ | j        j         d         |k    sJ dS )NrD  r
  r  r  )r  rB   )r0   expected_typeexpected_type_strs      r    check_annotationszUCloudPickleTest.test_locally_defined_class_with_type_hints.<locals>.check_annotationse	  sc    .{;}LLLL
259]JJJJ 
28<() ) ) )  4r"   rC  r  )r   r,   _all_types_to_testr  r   )r   r!  rp   rH  r0   rC  s        @r    *test_locally_defined_class_with_type_hintsz:CloudPickleTest.test_locally_defined_class_with_type_hints]	  s5   666 	&+--  # # # # # # # # # # ,7*>'	  	  	  gii((eW==EEEEJJ0#ugFF$NNNNN)	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A(BBBc                     t          j        d          }|j        |j        d         fD ] }t          || j                  }||k    sJ !d S )Ntyping_extensionsrA   r+   )r   r  Literalr1   r,   r   rL  r0   r7  s       r    test_generic_extensions_literalz/CloudPickleTest.test_generic_extensions_literalv	  sf    "/0CDD%-/@/H/MN 	( 	(C+C$-HHHM C'''''	( 	(r"   c                     t          j        d          }|j        |j        t                   fD ] }t	          || j                  }||k    sJ !d S )NrL  r+   )r   r  FinalrU   r1   r,   rN  s       r    test_generic_extensions_finalz-CloudPickleTest.test_generic_extensions_final|	  sf    "/0CDD%+->-DS-IJ 	( 	(C+C$-HHHM C'''''	( 	(r"   c                      G d d          }dt           i|_        t          || j                  }|j        |j        k    sJ d S )Nc                       e Zd ZdS )1CloudPickleTest.test_class_annotations.<locals>.CNro   r)   r"   r    rT   rU  	  rq   r"   rT   rA   r+   )rU   r  r1   r,   )r   rT   C1s      r    test_class_annotationsz&CloudPickleTest.test_class_annotations	  sg    	 	 	 	 	 	 	 	 #JQ777!Q%6666666r"   c                 z    dt           dt          fd}t          || j                  }|j        |j        k    sJ d S )NrA   r  c                     d S r   r)   )rA   s    r    r   z4CloudPickleTest.test_function_annotations.<locals>.f	  ry  r"   r+   )rU   r   r1   r,   r  )r   r   r   s      r    test_function_annotationsz)CloudPickleTest.test_function_annotations	  sW    	 	 	 	 	 	 Q777!Q%6666666r"   c                 "   dd l }	  G d d          fd}||j        <                }t          || j                  }t	          |d          sJ 	 |j                                       d S # |j                                       w xY w)Nr   c                       e Zd ZdS )CCloudPickleTest.test_always_use_up_to_date_copyreg.<locals>.MyClassNro   r)   r"   r    rp   r]  	  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+   r_  )copyregr  r1   r,   r  r  )r   ra  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+WYYF-ft}MMMO?O<<<<<<"&&w/////G"&&w////s   AA2 2Bc                 `     G d d          } |            }t          || j                   d S )Nc                   $    e Zd Zed             ZdS ):CloudPickleTest.test_literal_misdetection.<locals>.MyClassc                     dS )Nr)   r)   r$   s    r    
__values__zECloudPickleTest.test_literal_misdetection.<locals>.MyClass.__values__	  s    rr"   N)r&   r'   r(   r  ri  r)   r"   r    rp   rg  	  s-          X  r"   rp   r+   r1   r,   r   rp   os      r    test_literal_misdetectionz)CloudPickleTest.test_literal_misdetection	  sR    	 	 	 	 	 	 	 	
 GIIDM222222r"   c                 `     G d d          } |            }t          || j                   d S )Nc                   $    e Zd Zed             ZdS )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  rr  r)   r"   r    rp   rp  	  s-          X  r"   rp   r+   rj  rk  s      r    #test_final_or_classvar_misdetectionz3CloudPickleTest.test_final_or_classvar_misdetection	  sR    	 	 	 	 	 	 	 	
 GIIDM222222r"   c                   	
 t           j                                        }	 t          j                            t
                    }t          t           j        d           t          t           j        |           t           j                            d|           t          | j	                  5 }|
                    d |           dd lm ddlmm
m	 t!          j        t$                    5  |
                    d            d d d            n# 1 swxY w Y   t!          j        t$                    5  |
                    d            d d d            n# 1 swxY w Y   
	fD ]Kt!          j        t$                    5  |
                    fd           d d d            n# 1 swxY w Y   Lt'                     |
                    fd	                       k    sJ |
                    
fd
          
j        k    sJ |
                    	fd           	                                            k    sJ |
                    fd                       k    sJ ddlm}m}m ||ct!          j        t$                    5  |
                    d            d d d            n# 1 swxY w Y   t!          j        t$                    5  |
                    fd           d d d            n# 1 swxY w Y   t5                     t!          j        t$                    5  |
                    fd           d d d            n# 1 swxY w Y   t!          j        t$                    5  |
                    d            d d d            n# 1 swxY w Y   dd l}t'          |           |
                    fd                       k    sJ |
                    fd                       k    sJ t5          |           t!          j        t$                    5  |
                    fd           d d d            n# 1 swxY w Y   t!          j        t$                    5  |
                    fd           d d d            n# 1 swxY w Y   dd l}t'          |j        j                   |
                    fd                       k    sJ |
                    fd          j        k    sJ |
                    fd                                                       k    sJ t!          j        t$                    5  |
                    fd           d d d            n# 1 swxY w Y   t!          j        t$                    5  |
                    d            d d d            n# 1 swxY w Y   t5          |j        j                   t!          j        t$                    5  |
                    fd           d d d            n# 1 swxY w Y   dd l}t'          |j                   |
                    fd                       k    sJ |
                    fd          j        k    sJ |
                    fd                                                       k    sJ t5          |j                   d d d            n# 1 swxY w Y   d}|t           _        || d | d!| d"fD ]H}t           j                             |d           r$j        tC                      v rt5                     Id S # d}|t           _        || d | d!| d"fD ]H}t           j                             |d           r$j        tC                      v rt5                     Iw xY w)#N r   r+   c                 @    t           j                            |           S r   )r   r  r8   )ps    r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	  s    chooa0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"E r"   c                       t          d          S Nzmock_local_folder.subfolder.modr}  r)   r"   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	      
+L M M r"   c                       S r   r)   )rl  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	  s    a r"   c                                    S r   r)   rx  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	      ^^%5%5 r"   c                       j         S r   r&   )ry  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	  s	    V_ r"   c                  <                                                   S r   rB   )rz  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	  s    **,,"5"5"7"7 r"   c                  ,                                      S r   r  )r  s   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>	  s    #"4"4"6"6 r"   )LocalSubmodClassLocalSubmodTlocal_submod_functionc                       t          d          S r  r}  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 r|  r}  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>
  r  r"   c                                    S r   r)   _funcs   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>
      UUWW 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                  <                                                   S r   r  _classs   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>)
      VVXX__%6%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 r|  r}  r)   r"   r    r   zeCloudPickleTest.test_pickle_constructs_from_module_registered_for_pickling_by_value.<locals>.<lambda>1
  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  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                  <                                                   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  rx  ry  rz  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  rz  ry  r  r  r  rx  r  r  rl  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 -/GOOH,E,E) #(B'''#($ABBB HOOA<==="DM::: sHa002O   433333          ];// G GEEEEFFFG G G G G G G G G G G G G G G];//  EEMM                
 ~vzB ) )A{33 ) )iiii((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) )---uu555566..:J:JJJJJuu444455HHHH EE777788!z||**,,- - - -
 EE666677>>;K;KKKKK         
 !"79I "E6 ];//  EEMM                 ];// 9 9EE77778889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 +3///];// 2 2EE00001112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ];// G GEEEEFFFG G G G G G G G G G G G G G G )(((():;;;uu555566..:J:JJJJJuu____--8888*+<===];// 2 2EE00001112 2 2 2 2 2 2 2 2 2 2 2 2 2 2];// 9 9EE77778889 9 9 9 9 9 9 9 9 9 9 9 9 9 9
 :999():)D)KLLLuu____--8888uu000011R[@@@@uu6666776688??;L;LLLLL
 ];// 2 2EE00001112 2 2 2 2 2 2 2 2 2 2 2 2 2 2];// G GEEEEFFFG G G G G G G G G G G G G G G +%/6   ];// 9 9EE77778889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 3222():)DEEEuu____--8888uu000011R[@@@@uu6666776688??;L;LLLLL*+<+FGGGgsH sH sH sH sH sH sH sH sH sH sH sH sH sH sHj )F%CHooo&/D/D/D2224 4 4kooa.. 43<+H+J+JJJ.s333	4 4 )F%CHooo&/D/D/D2224 4 4kooa.. 43<+H+J+JJJ.s333	4s  B]0 6A[=7D[=D	[=!D	"[=>E![=!E%	%[=(E%	)$[=F2&[=2F66[=9F6:C$[=K5[=K	[=K		[=%L
>[=
L	[=L	+[==M"[="M&	&[=)M&	*[=N)[=)N-	-[=0N-	1B
[=;Q [= Q$	$[='Q$	([=R)[=)R-	-[=0R-	1B:[=+V[=V	[=V	[=4W[=W	[=W	5[=X9-[=9X=	=[= X=	B0[=1]0 =\]0 \]0 0A(_c                    t          j        d           dD ]L}|dk    rdd l}|j        |j        }n|dk    rdd lm} |j        |j        }	 t          | j	                  5 }|
                    fd          |k    sJ t          |           |
                    fd          |k    sJ d	|_        |j        |k    sJ |
                    fd
          d	k    sJ t          |           d d d            n# 1 swxY w Y   ||_        |j        t                      v rt          |           # ||_        |j        t                      v rt          |           w w xY wd S )Nr  )r  r  r  r   r  r+   c                                    S r   r)   r{  s   r    r   zqCloudPickleTest.test_pickle_constructs_from_installed_packages_registered_for_pickling_by_value.<locals>.<lambda>Y
       r"   c                                    S r   r)   r{  s   r    r   zqCloudPickleTest.test_pickle_constructs_from_installed_packages_registered_for_pickling_by_value.<locals>.<lambda>_
  r  r"   modified globalc                                    S r   r)   r{  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
  s    	2333!6 	2 	2 I--00002#$#4  "h..4444441#$#4 2&>>> 2!55--1AAAAA
 -Q///55--1AAAAA(9A%,0@@@@@55--1BBBBB.q1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 %5!:!>!@!@@@.q111 %5!:!>!@!@@@.q1111 A1	2 	2s1   D5$BC=1D5=D	D5D	D55.E#c                    t          j        d           dd l}ddlm} |j        }d }d }d }	 t          | j                  5 }|                    |           |                    ||d           t          |           d	|_        |                    ||d
           |                    |d          |k    sJ |                    |d
          d	k    sJ 	 d d d            n# 1 swxY w Y   ||_        dt                      v rt          |           d S d S # ||_        dt                      v rt          |           w w xY w)Nr  r   )r  c                  H    t          d          j        d         } i | _        d S Nr   __main__r~  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                 N    t          d          j        d         }| |j        |<   d S 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                 `    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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33
 	$###JJJJJJ/?	- 	- 	-
	/ 	/ 	/	4 	4 	4	A"DM::: a&'''&:666()=>>>7H$4&:666EE-z::>NNNNN EE-z::>OOOOOO               4D 0%)F)H)HHH*+?@@@@@ IH 4D 0%)F)H)HHH*+?@@@@ Is0   D BC$D $C((D +C(,D )E)rh   r3  z2Determinism can only be guaranteed for Python 3.7+c                 b   t                      }d }t          d          D ];}|                    t          || j        dt          |          i                     <t          |          dk    r?|D ]}t          j        |           t          j
        dt          |          z             d S d S )Nc                       t           t          z   S r   )rO  _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     uu	B 	B 	B q 	N 	NAHH():26-2BCFF1KM M MN N N N t99q== % %$$$$KCc$ii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'  r9  rE  rJ  rZ  r`  rf  rj  r{  r}  r  r  r  r  r  r  r  r!  r%  r(  r8  rA  rE  rJ  rZ  r]  r_  ra  rc  re  ri  rm  rv  r~  r  r  r  r  unittestskipIfr  r  r  r  r  r  r  r  r  CodeTyper  r  r  r  r  r  r  r  r  r"  r>  rJ  rO  rR  rW  rZ  rd  rm  rs  r  r  r  r  r)   r"   r    r[   r[   y   sT       +HG G G# # # [*H*,,	9 M*Ks/?)/KH  J JI I	J JI$	0 	0 	00 0 0* [9::% % ;:%
  "	 	 	/ / /
? ? ?A A A@ @ @+ + +- - -, , ,/ / /
/ / /
I I IL L L% % %"
 
 
"  $
! 
! 
!( ( (4C C C&,, ,, ,,\. . .
 [6688FBC  E E E E$, , ,, , ,	/ 	/ 	/, , ,$, , ,* * *3 3 3/ / /#) #) #)J) ) )@, , ,\E5 E5 E5N     082 82 82tL L L3 3 3* * *. . .4 4 4	G 	G 	G0 0 0*? ? ?. [				y	(	LS-=bqb-AW-L 	/-x-//69	/ !$/RC4D
4R	/ #w.   @ @$F $F@ @$FL< < <( [&&((F2A  C CC CC CC0 [4=  ? ?! !? ?!, [c.FFFF1FFFFF?   $ $	 $4  0  &D D D*D D D,$ $ $

 
 
6 6 6,; ; ;8 8 8
; ; ;4Y= Y= Y=vX= X= X=tA A A.2/ 2/ 2/h&< &< &<P [677$ $ 87$&= = =
A A A+O +O +O\" " " [6688FB8  : :?8 ?8: :?8B;< ;< ;<z0/ 0/ 0/d' ' ':*' *' *'X%' %' %'NL' L' L'\ [PQQ,' ,' RQ,'\? ? ?6 6 6 [(G3  =I  J  J? ? J  J?2 2 20 0 0@ @ @' ' '= = =8 X_(:;;;DF FA AF FAO O O% % %:2 2 2"' "' "'H> > >	3 	3 	3 [GGEN4HIIII  K K8 8K K805 5 55 5 5 ! ! !K K K B B B  
, , ,I I I#O #O #OJ'A 'A 'AR  2( ( (( ( (7 7 77 7 70 0 0$3 3 33 3 3 [9::P4 P4 ;:P4d2 2 2>,A ,A ,A\ [6!C    	   r"   r[   c                       e Zd ZdZdS )Protocol2CloudPickleTestrj   N)r&   r'   r(   r,   r)   r"   r    r  r  
  s        HHHr"   r  c                  b    t          j        d          } t          | | j                  }|J d S )Nr  r0  )r  r   r   r&   )r  module_and_names     r    /test_lookup_module_and_qualname_dynamic_typevarr  
  s7    sA1!!*EEEO"""""r"   c                      t          j        d           dd l} | j        }t	          ||j                  }|J |\  }}|| u sJ |dk    sJ d S )Nr  r   r  r  )r   r  r  r  r   r&   )r  r  r  r  r0  s        r    2test_lookup_module_and_qualname_importable_typevarr  
  st    
.///A1!!*EEEO&&&"LFD)))))3;;;;;;r"   c                      t          t          j        t          j        j                  } | J | \  }}|t          u sJ |dk    sJ d S )Nr  r  )r   r  r  r&   )r  r  r0  s      r    .test_lookup_module_and_qualname_stdlib_typevarr  
  sb    1&-7=}7MO O OO&&&"LFDV8r"   c                     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            n# 1 swxY w Y   t          |            t                      t                      k    sJ |  d}t          j
        t          t          j        |                    5  t          |            d d d            n# 1 swxY w Y   d| j         d}t          j
        t          |          5  t          | j                   d d d            n# 1 swxY w Y   t          j        d          }| d}t          j
        t          t          j        |                    5  t          |           d d d            d S # 1 swxY w Y   d S )	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[   
.///&&&&******(**cee3333S!!!(**s|n<<<<S!!!(**s|S\.JJJJJs###(**s|n<<<<
H#,
H
H
HC	z	-	-	- 1 1"3<0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 s###(**cee3333
8
8
8C	z3	8	8	8 ( ("3'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( I#,
H
H
HC	z	-	-	- / / .../ / / / / / / / / / / / / / / "=11K 	, 	, 	,  
z3	8	8	8 . . ---. . . . . . . . . . . . . . . . . .sH   &DDD3FFF G!!G%(G%2III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dS )_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    rI  rI  
  s   sA    FN1    	
1S6	6:vqvz)*VZ(FJ'S#XS!C&[!CCH#M" r"   c                  h    t          t          d          sJ t          j        t          j        u sJ d S )NPickler)r  r.   r  r  r)   r"   r    test_module_level_picklerr	    s7     ;	*****+":::::::r"   r  )Lr   rq  r   rR  r:  rL  rq  rm  r  rb  operatorr   r   r  r  r4  r  rd   rU  r   r_   r  r  r  rr   r  r  r  r   r   r  rB  scipy.specialspecialrD  r  rd  r  r  r.   r  r   r	   r
   r   srsly.cloudpickle.cloudpickler   r   r   r   r   r   	testutilsr   r   r   r   rO  r  r   r  r1   r6   r<   rY   TestCaser[   r  r  r  r  r  rI  r	  r&   mainr)   r"   r    <module>r     s       



          				           + + + + + + + +       				      



      				          \"   	B
CCCNNNN   GGG ( ' ' ' ' ' + + + + + + 6 6 6 6 6 6 8 8 8 8 8 8 ; ; ; ; ; ; E E E E E E D D D D D D D D K K K K K K K K E E E E E E - - - - - - / / / / / / / / / / / / ( ( ( ( ( ( ( (         #."> C C C C/ / /
  6 6 64v( v( v( v( v(h' v( v( v(rQ       
# # #    %. %. %.P  4; ; ; zHMOOOOO s$   8
B BBB B$#B$