
    i*                        d dl Z d dlZd dlmZ d dlZd dlmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlZd dlmZ d dlmZ ej,                  ZdZd	Zd
 Zd ZdedfdZdedfdZddZddZd Z G d d      Z edd       Z!efdZ"e#dk(  r; e$e jJ                  e jJ                  jM                  d      dz            Z' ee'       yy)    N)Popencheck_outputPIPESTDOUTCalledProcessError)pickle)contextmanager)ProcessPoolExecutor)dumps)TimeoutExpired<   a test valuec                      d } | S )Nc                 @    t         dk(  sJ t        t        d            S )Nr   
   )TEST_GLOBALSsumrange)xs    r/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/srsly/tests/cloudpickle/testutils.pygzmake_local_function.<locals>.g   s      ~---59~     )r   s    r   make_local_functionr      s     Hr   c                  0   t        j                  t        j                  t        j                  t              d            } t
        j                  j                         }dj                  | t
        j                  t
        j                        }||d<   | |fS )z5Helper to prepare environment for the child processesz..z{src}{sep}tests{pathsep}{src})srcseppathsep
PYTHONPATH)opnormpathjoindirname__file__osenvironcopyformatr   r   )cloudpickle_repo_folderenv
pythonpaths      r   _make_cwd_envr,      sr     kk


8$d+-
**//
C077# 8 EJ"C"C''r   c           	         t         j                  dt        dt        |      g}t	               \  }}|r|j                  |       t        |t        t        t        ||d      }t        | |      }	 i }	||	d<    |j                  |fi |	\  }
}|j                  dk7  st        |      r.d|j                  z  }||j                  d	      z  }t        |      |
S # t        $ re}|j                          |j                         \  }
}d
j!                  |
j                  d	      |j                  d	      g      }t        |      |d}~ww xY w)u  Retrieve pickle string of an object generated by a child Python process

    Pickle the input data into a buffer, send it to a subprocess via
    stdin, expect the subprocess to unpickle, re-pickle that data back
    and send it back to the parent process via stdout for final unpickling.

    >>> testutils.subprocess_pickle_string([1, 'a', None], protocol=2)
    b']q (KX   aqNe.'

    	-W ignore
--protocol   )stdinstdoutstderrcwdr*   bufsizeprotocoltimeoutr   zSubprocess returned %d: utf-8
N)sys
executabler$   strr,   updater   r   r   communicate
returncodelendecodeRuntimeErrorr   killr"   )
input_datar7   r8   add_envcmdr4   r*   procpickle_stringcomm_kwargsouterrmessagees                 r   subprocess_pickle_stringrO   (   s*   " >>;,H
NCHC

7DdD*x8M+!(I#4##MA[AS??a3s804??BGszz'**Gw''
 +		##%S))SZZ0#**W2EFG7#*	+s   /A&C 	EA D??Ec                 6    t        | |||      }t        |      S )aH  Echo function with a child Python process
    Pickle the input data into a buffer, send it to a subprocess via
    stdin, expect the subprocess to unpickle, re-pickle that data back
    and send it back to the parent process via stdout for final unpickling.
    >>> subprocess_pickle_echo([1, 'a', None])
    [1, 'a', None]
    )r7   r8   rF   )rO   loads)rE   r7   r8   rF   rK   s        r   subprocess_pickle_echorR   P   s%     #:,4+2+24C :r   c                 X    d}	 | j                  |      }||z  }t        |      |k  r	 |S ()Nr   )readrA   )	stream_in
chunk_sizeall_datadatas       r   _read_all_bytesrY   `   s;    H
~~j)Dt9z!O r   c                 T   | t         j                  } |t         j                  }t        | d      r| j                  } t        |d      r|j                  }t        |       }| j                          t        |      }t        ||      }|j                  |       |j                          y)z5Read a pickle from stdin and pickle it back to stdoutNbufferr6   )
r;   r1   r2   hasattrr[   rY   closerQ   r   write)rU   
stream_outr7   input_bytesobjrepickled_bytess         r   pickle_echorc   j   s    II	ZZ
 y(#$$	z8$&&
!),KOO

CC(3O_%r   c                 |    t        |       \  }}}	  ||i |}t        ||      S # t        $ r}|}Y d}~d}~ww xY w)zARemote function call that uses cloudpickle to transport everthingNr6   )rQ   BaseExceptionr   )payloadr7   funcargskwargsresultrN   s          r   	call_funcrk      sL    wD$t&v& (++  s   & 	;6;c                   &    e Zd ZddZd Zd Zd Zy)_WorkerNc                     || _         t        d      | _        | j                  j                  t        d      j                          y )N   )max_workers*   )r7   r
   poolsubmitidrj   )selfr7   s     r   __init__z_Worker.__init__   s2     'A6			R '')r   c                     t        |||f| j                        }| j                  j                  t        || j                        j                         }t        |      }t        |t              r||S )z Synchronous remote function callr6   )	r   r7   rr   rs   rk   rj   rQ   
isinstancere   )ru   rg   rh   ri   input_payloadresult_payloadrj   s          r   runz_Worker.run   sb     tT62T]]K))}dmm55;VX 	~&fm,Lr   c                 <   t        | j                  j                        D cg c]  }t        |d      r|j                  n| }}t        |      }|dk(  ry|dkD  rt        d|z        t        j                  |d         j                         j                  S c c}w )Npidr   ro   z Unexpected number of workers: %d)listrr   
_processesr\   r}   rA   rC   psutilProcessmemory_inforss)ru   pworkers_pidsnum_workerss       r   memsizez_Worker.memsize   s    !%dii&:&:!;= ")E!29 = =,'!1_A!, - . .~~l1o.::<@@@=s   !Bc                 <    | j                   j                  d       y )NT)wait)rr   shutdown)ru   s    r   r]   z_Worker.close   s    		%r   N)__name__
__module____qualname__rv   r{   r   r]   r   r   r   rm   rm      s    *

	A&r   rm   c              #   L   K   t        |       }| |j                          y w)Nr6   )rm   r]   )r7   workers     r   subprocess_workerr      s     h'F
L
LLNs   "$c                 2   t        j                  d      \  }}t        j                  |       	 t	        |d      5 }|j                  | j                  d             ddd       t        j                  d|g}t               \  }}|t        |d}t        j                  j                  d      }	|	r|	|d	   d<   ||d
<   	 	 t        |fi |}
|
dk7  rt%        |
j#                  d            	 t        j(                  |       y# 1 sw Y   xY w# t        $ r-}t        d|j                   j#                  d      z        |d}~ww xY w# t&        $ r-}t        d|j                   j#                  d      z        |d}~ww xY w# t        j(                  |       w xY w)zUtility to help check pickleability of objects defined in __main__

    The script provided in the source code should return 0 and not print
    anything on stderr or stdout.
    z_src_test_cloudpickle.py)suffixwbr9   Nr.   )r4   r3   r*   COVERAGE_PROCESS_STARTr*   r8   zscript errored with output:
%sr   z!script timeout, output so far:
%s)tempfilemkstempr%   r]   openr^   encoder;   r<   r,   r   r&   getr   r   rC   outputrB   AssertionErrorr   unlink)source_coder8   fdsource_filefrG   r4   r*   ri   coverage_rcrK   rN   s               r   assert_run_python_scriptr      s    &&.HIOBHHRL+t$ 	1GGK&&w/0	1~~{K8 ?S
 jjnn%=>6AF5M23#y
	BF"31&1 cz$SZZ%899  			+5	1 	1" & F"#D%&XX__W%=$> ?DEFF
  	BC!"!9 : ;@AB	B 			+s_   E? !DA E? ?D E D
E? 	E(D>>EE 	E<(E77E<<E? ?F__main__r/   ro   r6   )r0   )NNNr   )(r;   r%   os.pathpathr    r   
subprocessr   r   r   r   r   srsly.cloudpickle.compatr   
contextlibr	   concurrent.futuresr
   r   srsly.cloudpickler   r   rQ   TIMEOUTr   r   r,   rO   rR   rY   rc   rk   rm   r   r   r   intargvindexr7   r   r   r   <module>r      s    
 	   L L + % 2  # %
( 37%)%+P 15g#' *,& &B   3: #L z388CHHNN<81<=>H" r   