K i4dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlmZddlZddlZddlZdZej*dZdZdZdZ dd Zd Zd Zej*d Zej*d Zej*dZdZ GddZ!GddejDjFZ$ej*dddZ%dZ&dZ'dZ(dZ)dZ*dZ+y)z Utility functions for testing N)tagsc,tjdS)zLRandomly choose either 1 or -1. Returns ------- sign : int )randomchoiceX/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pyarrow/tests/util.pyrandsignr +s == !!r c#Ktj}tj| dtj|y#tj|wxYww)aSet 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)rgetstateseedsetstate)roriginal_states r random_seedr5s@__&N KK( ''s*A!AA!AA!cjd|cxkr dksJdJd|dkr tdd||z zdz }tj| |}|stj|Sd|zdz }tjd|}tj|dt |j |dS) aGenerate 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 inclusiverzHranddecimal does not yet support generating decimals with negative scale .0) ValueErrorrrandintdecimalDecimalstrrjust) precisionscalemax_whole_valuewholemax_fractional_value fractionals r randdecimalr%Ks" R O!OO O!OO  qy   Y./!3O NNO+_ =E u%%;?#78J ?? '3z?((456 r c xtt|Dcgc]}tjddc}Scc}w)NAz)bytesrangerr)lengthis r random_asciir-ps* 5=Aa&..S)A BBAs7cttjtjzdj fdt |DS)z% Generate one random string. c3HK|]}tjywNr).0r, RANDS_CHARSs r zrands..ysE!6==-Es")liststring ascii_lettersdigitsjoinr*)ncharsr3s @r randsr;ts7v++fmm;._get_uses" t'')622r cN}|z kDrtd|z ddy)Nz.Memory leak detected. Departure from baseline z after z iterations) Exception) current_userD baseline_user, thresholds r _leak_checkz&memory_leak_check.._leak_checksEj  % 1@-.gaS E  2r )psutilProcessr*) frBrI iterationscheck_intervalrKrJrDrHr,rCs `` @@@@r memory_leak_checkrP|sT* >> D3:L:   ~  " Mr ctjj}|jdd}tjj tjj tjj tj}|r"tjj||f}n|}||d<|S)N PYTHONPATHr/) osenvironcopygetpathabspathdirnamepa__file__pathsepr9)envexisting_pythonpath module_pathnew_pythonpaths r get_modified_env_with_pythonpathras **// C'',3''//  457K+7J)KL$&C  Jr cLt}tjjtjj t }tjj ||}tj|g}|j|tj||y)N)r]) rarSrWrYrealpathr[r9sys executableextend subprocess check_call) script_nameargssubprocess_envdir_path python_filecmds r invoke_scriptrosi57Nwwrww//9:H'',,x5K >>; 'CJJt#>2r c# Ktjj|}|tj|< d|tj|=y|tj|<y#|tj|=w|tj|<wxYww)zA Temporarily set environment variable *name* to *value*. N)rSrTrV)namevalue orig_values r changed_environrtss %JBJJt*   4 )BJJt    4 )BJJt s3BA"(B")B  Bc#Ktj}tjt| dtj|y#tj|wxYwwr1)rSgetcwdchdirr)rWcurdirs r change_cwdrysA YY[FHHSY  s3A*AA*A''A*c#Ktj dtjy#tjwxYwwr1)r>disableenabler r r disabled_gcr}s)JJL   sA 1A AA cDtjdk(rd|}|Sd|}|S)Nntzfile:///zfile://)rSrq)rWuris r _filesystem_urirs3 ww$ Jv Jr ceZdZdZdZy)FSProtocolClassc||_yr1)_pathselfrWs r __init__zFSProtocolClass.__init__s  r c,t|jSr1)rrrs r __fspath__zFSProtocolClass.__fspath__s4::r N)__name__ __module__ __qualname__rrr r r rrs r rc|eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZy) ProxyHandlerz A dataset handler that proxies to an underlying filesystem. Useful to partially wrap an existing filesystem with partial changes. c||_yr1)_fs)rfss r rzProxyHandler.__init__s r c`t|tr|j|jk(StSr1 isinstancerrNotImplementedrothers r __eq__zProxyHandler.__eq__% e\ *88uyy( (r c`t|tr|j|jk7StSr1rrs r __ne__zProxyHandler.__ne__rr c4d|jjzS)Nzproxy::)r type_namers r get_type_namezProxyHandler.get_type_name s488----r c8|jj|Sr1)rnormalize_pathrs r rzProxyHandler.normalize_pathsxx&&t,,r c8|jj|Sr1r get_file_info)rpathss r rzProxyHandler.get_file_infosxx%%e,,r c8|jj|Sr1r)rselectors r get_file_info_selectorz#ProxyHandler.get_file_info_selectorsxx%%h//r c<|jj||S)N) recursive)r create_dir)rrWrs r rzProxyHandler.create_dirsxx""49"==r c8|jj|Sr1)r delete_dirrs r rzProxyHandler.delete_dirsxx""4((r c<|jj||S)N)missing_dir_okrdelete_dir_contents)rrWrs r rz ProxyHandler.delete_dir_contentss%xx++D;I,K Kr c<|jjddS)Nr/T)accept_root_dirrrs r delete_root_dir_contentsz%ProxyHandler.delete_root_dir_contents!sxx++B+EEr c8|jj|Sr1)r delete_filers r rzProxyHandler.delete_file$sxx##D))r c:|jj||Sr1)rmoversrcdests r rzProxyHandler.move'sxx}}S$''r c:|jj||Sr1)r copy_filers r rzProxyHandler.copy_file*sxx!!#t,,r c8|jj|Sr1)ropen_input_streamrs r rzProxyHandler.open_input_stream-sxx))$//r c8|jj|Sr1)ropen_input_filers r rzProxyHandler.open_input_file0sxx''--r c<|jj||SN)metadata)ropen_output_streamrrWrs r rzProxyHandler.open_output_stream3xx**4(*CCr c<|jj||Sr)ropen_append_streamrs r rzProxyHandler.open_append_stream6rr N)rrr__doc__rrrrrrrrrrrrrrrrrrr r r rrse   .--0>)KF*(-0.DDr rFwarn_on_full_bufferc#Ktj\}}d} |jd|jdtj|j |}||tj||j |j y#|tj||j |j wxYww)NFr)socket socketpair setblockingsignal set_wakeup_fdfilenoclose)rrwold_fds r signal_wakeup_fdr:s    DAq F  e e%% HHJ,?A     (         (    sCA B (8C 9CCc|dg}tj|tjtjd5}|jddk7r dddy|jj }|dz}t j||}|r(|jd}t||k\cdddStd #1swYyxYw) Nz --versionutf-8stdoutstderrencodingrrFz version RELEASE\.(\d+)-.*rz+minio component older than the minimum year) rgPopenPIPEwaitrreadresearchgroupintFileNotFoundError) component minimum_year full_argsrCrpattern version_match version_years r _ensure_minio_component_versionrMsK(I   )JOO!+7 D ?GK 99R=A  ? ?!!#;; '62 (..q1L|$ 4 ? ?$=? ? ? ?sCAC8 CC c  tj}tj|z dkr t|dddd|||yt d#t$rtjdYnwxYwtj|z dkr`K)Nraliassetmyminiozhttp://rz+mc command could not connect to local minio)time_run_mc_commandChildProcessErrorsleeprF)mcdiraddress access_key secret_keystarts r _wait_for_minio_startupr^s IIKE ))+  "  E7E9%gY/Z I  A BB!  JJqM  ))+  "sAA10A1cdd|gt|z}tj|tjtjd5}|j d}dj |}t d|t d|t d |jjt d |jj|d k7r td  dddy#1swYyxYw) Nmcz-Crrr zCmd: z Return: z Stdout: z Stderr: rzCould not run mc) r5rgrrrr9printrrrr)rrjrrCretvalcmd_strs r rrjstU#d4j0I   )JOO!+7 D 8GK2((9% gY  6(#$ 4;;++-./0 4;;++-./0 Q;#$67 7  8 8 8s BC,,C5c tjdk(rtjd t ddt dd|d}|d\}}}}|d|} t j j|d} t j j| rtj| t j| t j j|d } t| d 5} | j|d d d t| | ||t| d ddd||t| d dddd| t| d ddddd|t| dddy #1swYZxYw#t $rtjdYy wxYw)ab 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 Windowsriminiotempdir connection:zlimited-buckets-policy.jsonr)modeNadminuseraddzmyminio/policycreatezno-create-bucketsattachz--usermbzmyminio/existing-bucketz--ignore-existingz"Configuring limited s3 user failed)rdplatformpytestskiprrSrWr9existsshutilrmtreemkdiropenwriterrr) s3_serverrusernamepasswordrhostportrrrr policy_path policy_files r _configure_s3_limited_userr"xsp ||w  @A:'d3'6I&-6|-D*dJ F!D6" Wd+ 77>>% MM%  ggll7,IJ +C ( &K   f % & w JGw"Hh 8w("$7 Fw("$78 M t%>+ - & & : 89:s+CE%.EAE%E"E%%FFcd}dtjvr0tjjtjd}|s>tjj d}tjj|}|S)zs This is the default location where tz.cpp will look for (until we make this configurable at run-time) FPYARROW_TZDATA_PATHz%USERPROFILE%\Downloads\tzdata)rSrTrWr expandvars) tzdata_bool tzdata_paths r windows_has_tzdatar(sa K *ggnnRZZ0E%FG gg(()JK ggnn[1 r c\tjD]}|jdsyy)z= Checks whether it's running on musl systems or not. musllinuxTF)r platform_tags startswith) platform_tags r running_on_musllinuxr.s2**,  " "; / r )rssirr),r contextlibrr>rSrrrrrr6rgrdr packagingrrpyarrowrZ pyarrow.fsr contextmanagerrr%r-r;rPrarortryr}rrrFileSystemHandlerrrrrrr"r(r.r r r r6s=$   " ((*"JCFFH%&)X  3  * *  ?D7:://?DD ,1$?" C 80:f r