
    chl6                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKJr  SSKrSSKrSSKrS r\R*                  S 5       rS rS rS r  SS	 jrS
 rS r\R*                  S 5       r\R*                  S 5       r\R*                  S 5       rS r  " S S5      r! " S S\RD                  RF                  5      r$\R*                  SS.S j5       r%S r&S r'S r(S r)S r*S r+g)z
Utility functions for testing
    N)tagsc                  .    [         R                  " S5      $ )z<Randomly choose either 1 or -1.

Returns
-------
sign : int
)   randomchoice     eC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\pyarrow/tests/util.pyrandsignr   +   s     ==!!r   c              #      #    [         R                  " 5       n[         R                  " U 5         Sv   [         R                  " U5        g! [         R                  " U5        f = f7f)zSet the random seed inside of a context manager.

Parameters
----------
seed : int
    The seed to set

Notes
-----
This function is useful when you want to set a random seed but not affect
the random state of other functions using the random module.
N)r   getstateseedsetstate)r   original_states     r   random_seedr   5   s?      __&N
KK(''s   ,A%A
 A%
A""A%c                    SU s=::  a  S::  d   S5       e   S5       eUS:  a  [        S5      eSX-
  -  S-
  n[        R                  " U* U5      nU(       d  [        R                  " U5      $ SU-  S-
  n[        R                  " SU5      n[        R                  " U S[        U5      R                  US5       35      $ )	a  Generate a random decimal value with specified precision and scale.

Parameters
----------
precision : int
    The maximum number of digits to generate. Must be an integer between 1
    and 38 inclusive.
scale : int
    The maximum number of digits following the decimal point.  Must be an
    integer greater than or equal to 0.

Returns
-------
decimal_value : decimal.Decimal
    A random decimal.Decimal object with the specified precision and scale.
r   &   z,precision must be between 1 and 38 inclusiver   zHranddecimal does not yet support generating decimals with negative scale
   .0)
ValueErrorr   randintdecimalDecimalstrrjust)	precisionscalemax_whole_valuewholemax_fractional_value
fractionals         r   randdecimalr%   K   s    " 	RO!OOO!OOqy
 	
 Y./!3ONNO+_=Eu%%;?#78J??'3z?((456 r   c           	          [        [        U 5       Vs/ s H  n[        R                  " SS5      PM     sn5      $ s  snf )NA   z   )bytesranger   r   )lengthis     r   random_asciir-   p   s.    5=A=a&..S)=ABBAs   !;c                    ^ [        [        R                  [        R                  -   5      mSR	                  U4S j[        U 5       5       5      $ )z
Generate one random string.
 c              3   P   >#    U  H  n[         R                  " T5      v   M     g 7fNr   ).0r,   RANDS_CHARSs     r   	<genexpr>rands.<locals>.<genexpr>y   s     E}!6==--}s   #&)liststringascii_lettersdigitsjoinr*   )ncharsr3   s    @r   randsr<   t   s7     v++fmm;<K77EuV}EEEr   c                    ^^^^^	^
 SSK nUR                  5       m
UU
4S jmT" 5       mUUU	U4S jn[        U5       H  m	U " 5         T	U-  S:X  d  M  U" 5         M     g)a  
Execute the function and try to detect a clear memory leak either internal
to Arrow or caused by a reference counting problem in the Python binding
implementation. Raises exception if a leak detected

Parameters
----------
f : callable
    Function to invoke on each iteration
metric : {'rss', 'vms', 'shared'}, default 'rss'
    Attribute of psutil.Process.memory_info to use for determining current
    memory use
threshold : int, default 128K
    Threshold in number of bytes to consider a leak
iterations : int, default 10
    Total number of invocations of f
check_interval : int, default 1
    Number of invocations of f in between each memory use check
r   Nc                  b   > [         R                  " 5         [        TR                  5       T 5      $ r1   )gccollectgetattrmemory_info)metricprocs   r   _get_use#memory_leak_check.<locals>._get_use   s"    


t'')622r   c                  P   > T" 5       n U T-
  T:  a  [        SU T-
   ST S35      eg )Nz.Memory leak detected. Departure from baseline z after z iterations)	Exception)current_userE   baseline_user,   	thresholds    r   _leak_check&memory_leak_check.<locals>._leak_check   sE    j%	1@-.gaSE  2r   )psutilProcessr*   )frC   rK   
iterationscheck_intervalrN   rL   rE   rJ   r,   rD   s    ``    @@@@r   memory_leak_checkrS   |   sT    * >>D3 :L  :	~"M r   c                     [         R                  R                  5       n U R                  SS5      n[         R                  R                  [         R                  R                  [         R                  R                  [        R                  5      5      5      nU(       a!  [         R                  R                  X!45      nOUnX0S'   U $ )N
PYTHONPATHr/   )osenvironcopygetpathabspathdirnamepa__file__pathsepr:   )envexisting_pythonpathmodule_pathnew_pythonpaths       r    get_modified_env_with_pythonpathrd      s    
**//
C'',3''//
457K +)KL$&Jr   c                 D   [        5       n[        R                  R                  [        R                  R	                  [
        5      5      n[        R                  R                  X05      n[        R                  U/nUR                  U5        [        R                  " XRS9  g )N)r`   )rd   rV   rZ   r\   realpathr^   r:   sys
executableextend
subprocess
check_call)script_nameargssubprocess_envdir_pathpython_filecmds         r   invoke_scriptrr      se    57Nwwrww//9:H'',,x5K>>;
'CJJt#2r   c              #   $  #    [         R                  R                  U 5      nU[         R                  U '    Sv   Uc  [         R                  U 	 gU[         R                  U '   g! Uc  [         R                  U 	 f U[         R                  U '   f = f7f)z9
Temporarily set environment variable *name* to *value*.
N)rV   rW   rY   )namevalue
orig_values      r   changed_environrw      sr     
 %JBJJt*

4 )BJJt 

4 )BJJts   3BA# )B#*BBc              #      #    [         R                  " 5       n[         R                  " [        U 5      5         S v   [         R                  " U5        g ! [         R                  " U5        f = f7fr1   )rV   getcwdchdirr   )rZ   curdirs     r   
change_cwdr|      s@     YY[FHHSY
s   5A.A A.A++A.c               #      #    [         R                  " 5          S v   [         R                  " 5         g ! [         R                  " 5         f = f7fr1   )r?   disableenabler
   r   r   disabled_gcr      s(     JJL
				s   A3 AA

Ac                 F    [         R                  S:X  a  SU  3nU$ SU  3nU$ )Nntzfile:///zfile://)rV   rt   )rZ   uris     r   _filesystem_urir      s3    	ww$ J vJr   c                        \ rS rSrS rS rSrg)FSProtocolClass   c                     Xl         g r1   _pathselfrZ   s     r   __init__FSProtocolClass.__init__   s    
r   c                 ,    [        U R                  5      $ r1   )r   r   r   s    r   
__fspath__FSProtocolClass.__fspath__   s    4::r   r   N)__name__
__module____qualname____firstlineno__r   r   __static_attributes__r
   r   r   r   r      s    r   r   c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rSrg)ProxyHandler   z
A dataset handler that proxies to an underlying filesystem.  Useful
to partially wrap an existing filesystem with partial changes.
c                     Xl         g r1   _fs)r   fss     r   r   ProxyHandler.__init__   s    r   c                 j    [        U[        5      (       a  U R                  UR                  :H  $ [        $ r1   
isinstancer   r   NotImplementedr   others     r   __eq__ProxyHandler.__eq__  (    e\**88uyy((r   c                 j    [        U[        5      (       a  U R                  UR                  :g  $ [        $ r1   r   r   s     r   __ne__ProxyHandler.__ne__  r   r   c                 4    SU R                   R                  -   $ )Nzproxy::)r   	type_namer   s    r   get_type_nameProxyHandler.get_type_name  s    488----r   c                 8    U R                   R                  U5      $ r1   )r   normalize_pathr   s     r   r   ProxyHandler.normalize_path  s    xx&&t,,r   c                 8    U R                   R                  U5      $ r1   r   get_file_info)r   pathss     r   r   ProxyHandler.get_file_info  s    xx%%e,,r   c                 8    U R                   R                  U5      $ r1   r   )r   selectors     r   get_file_info_selector#ProxyHandler.get_file_info_selector  s    xx%%h//r   c                 4    U R                   R                  XS9$ )N)	recursive)r   
create_dir)r   rZ   r   s      r   r   ProxyHandler.create_dir  s    xx""4"==r   c                 8    U R                   R                  U5      $ r1   )r   
delete_dirr   s     r   r   ProxyHandler.delete_dir  s    xx""4((r   c                 6    U R                   R                  UUS9$ )N)missing_dir_okr   delete_dir_contents)r   rZ   r   s      r   r    ProxyHandler.delete_dir_contents  s%    xx++D;I , K 	Kr   c                 6    U R                   R                  SSS9$ )Nr/   T)accept_root_dirr   r   s    r   delete_root_dir_contents%ProxyHandler.delete_root_dir_contents!  s    xx++B+EEr   c                 8    U R                   R                  U5      $ r1   )r   delete_filer   s     r   r   ProxyHandler.delete_file$  s    xx##D))r   c                 8    U R                   R                  X5      $ r1   )r   mover   srcdests      r   r   ProxyHandler.move'  s    xx}}S''r   c                 8    U R                   R                  X5      $ r1   )r   	copy_filer   s      r   r   ProxyHandler.copy_file*  s    xx!!#,,r   c                 8    U R                   R                  U5      $ r1   )r   open_input_streamr   s     r   r   ProxyHandler.open_input_stream-  s    xx))$//r   c                 8    U R                   R                  U5      $ r1   )r   open_input_filer   s     r   r   ProxyHandler.open_input_file0  s    xx''--r   c                 4    U R                   R                  XS9$ N)metadata)r   open_output_streamr   rZ   r   s      r   r   ProxyHandler.open_output_stream3      xx**4*CCr   c                 4    U R                   R                  XS9$ r   )r   open_append_streamr   s      r   r   ProxyHandler.open_append_stream6  r   r   r   N)r   r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   r      se    


.--0>)KF*(-0.DDr   r   Fwarn_on_full_bufferc              #     #    [         R                  " 5       u  pS n UR                  S5        UR                  S5        [        R                  " UR                  5       U S9nUv   Ub  [        R                  " U5        UR                  5         UR                  5         g ! Ub  [        R                  " U5        UR                  5         UR                  5         f = f7f)NFr   )socket
socketpairsetblockingsignalset_wakeup_fdfilenoclose)r   rwold_fds       r   signal_wakeup_fdr   :  s      DAF
	e	e%%HHJ,?A  (				   (				s   CA	B  &:C ;CCc                    U S/n[         R                  " U[         R                  [         R                  SS9 nUR                  S5      S:w  a
   S S S 5        gUR                  R                  5       nU S-   n[        R                  " XT5      nU(       a(  UR                  S5      n[        U5      U:  sS S S 5        $ [        S	5      e! , (       d  f       g = f)
Nz	--versionutf-8stdoutstderrencodingr   r   Fz version RELEASE\.(\d+)-.*r   z+minio component older than the minimum year)rj   PopenPIPEwaitr   readresearchgroupintFileNotFoundError)	componentminimum_year	full_argsrD   r   patternversion_matchversion_years           r   _ensure_minio_component_versionr  M  s    K(I			)JOO!+7
DGK99R=A
D 
D !!#;;		'2(..q1L|$4
D 
D $=? ?
D 
Ds   CAC<C
Cc           	      .   [         R                   " 5       n[         R                   " 5       U-
  S:  a   [        U SSSSU 3X#5        g [	        S5      e! [         a    [         R                  " S5         Of = f[         R                   " 5       U-
  S:  a  Md  NP)Nr   aliassetmyminiozhttp://r   z+mc command could not connect to local minio)time_run_mc_commandChildProcessErrorsleeprH   )mcdiraddress
access_key
secret_keystarts        r   _wait_for_minio_startupr  ^  s    IIKE
))+

"	E7E9%gY/I A
BB ! 	JJqM	 ))+

"s   A  A54A5c                    SSU /[        U5      -   n[        R                  " U[        R                  [        R                  SS9 nUR	                  S5      nSR                  U5      n[        SU 35        [        SU 35        [        S	UR                  R                  5        35        [        S
UR                  R                  5        35        US:w  a  [        S5      e S S S 5        g ! , (       d  f       g = f)Nmcz-Cr   r   r    zCmd: z
  Return: z
  Stdout: z
  Stderr: r   zCould not run mc)r6   rj   r   r   r   r:   printr   r   r   r  )r  rm   r  rD   retvalcmd_strs         r   r  r  j  s    tU#d4j0I			)JOO!+7
DGK2((9%gY 
6(#$
4;;++-./0
4;;++-./0Q;#$677 
D 
D 
Ds   BC++
C9c           
      "   [         R                  S:X  a  [        R                  " S5         [	        SS5        [	        SS5        U S   nU S   u  pVpxU SU 3n	[
        R                  R                  US5      n
[
        R                  R                  U
5      (       a  [        R                  " U
5        [
        R                  " U
5        [
        R                  R                  US	5      n[        US
S9 nUR                  U5        SSS5        [        XXx5        [        U
SSSSX#5        [        U
SSSSSU5        [        U
SSSSSSU5        [        U
SSS5        g! , (       d  f       N\= f! [          a    [        R                  " S5         gf = f)aF  
Attempts to use the mc command to configure the minio server
with a special user limited:limited123 which does not have
permission to create buckets.  This mirrors some real life S3
configurations where users are given strict permissions.

Arrow S3 operations should still work in such a configuration
(e.g. see ARROW-13685)
win32z*The mc command is not installed on Windowsr  i  miniotempdir
connection:zlimited-buckets-policy.jsonr   )modeNadminuseraddzmyminio/policycreatezno-create-bucketsattachz--usermbzmyminio/existing-bucketz--ignore-existingz"Configuring limited s3 user failed)rg   platformpytestskipr  rV   rZ   r:   existsshutilrmtreemkdiropenwriter  r  r  )	s3_serverr+  usernamepasswordr$  hostportr  r  r  r  policy_pathpolicy_files                r   _configure_s3_limited_userr?  x  sb    ||w 	@A:'d3'6I&-6|-D*JF!D6"Wd+77>>%  MM% 
ggll7,IJ+C(Kf% ) 	 
Gw"H	8w("$7	Fw("$78	M 	t%>+	- )(   :89:s+   CE+ 2EAE+ 
E($E+ + FFc                     Sn S[         R                  ;   a0  [         R                  R                  [         R                  S   5      n U (       d>  [         R                  R	                  S5      n[         R                  R                  U5      n U $ )zg
This is the default location where tz.cpp will look for (until we make
this configurable at run-time)
FPYARROW_TZDATA_PATHz%USERPROFILE%\Downloads\tzdata)rV   rW   rZ   r2  
expandvars)tzdata_booltzdata_paths     r   windows_has_tzdatarE    sa    
 K

*ggnnRZZ0E%FGgg(()JKggnn[1r   c                  l    [         R                  " 5        H  n U R                  S5      (       d  M    g   g)z5
Checks whether it's running on musl systems or not.
	musllinuxTF)r   platform_tags
startswith)platform_tags    r   running_on_musllinuxrK    s0     **,"";// - r   )rssi   r   r   ),r   
contextlibr   r?   rV   r   r  r3  r   r   r7   rj   rg   r  	packagingr   r0  pyarrowr]   
pyarrow.fsr   contextmanagerr   r%   r-   r<   rS   rd   rr   rw   r|   r   r   r   r   FileSystemHandlerr   r   r  r  r  r?  rE  rK  r
   r   r   <module>rS     s=  $   	 	  	      
     " ( (*"JCF FH%&)X 	3 * *     ?D7::// ?DD ,1  $?"	C80:fr   