
    Mh                     N   S r SSKJr  SSKJr  SSKJr  SSKrSSK	r	SSK
rSSK
Jr  SSKJr  SSKJr  \	R$                  R'                  S5      r\	R$                  R*                  \	R$                  R,                  /r\	R$                  R1                  S	5      S
 5       rS r\S 5       rg)zd
Tests multithreading behaviour for reading and
parsing files for each parser defined in parsers.py
    )	ExitStack)BytesIO)
ThreadPoolN)	DataFrame)Versionpyarrow_xfailz0ignore:Passing a BlockManager:DeprecationWarningc           	      |  ^ U nUR                   S:X  ad  [        R                  " S5      n[        UR                  5      [        S5      :  a,  UR                  [        R                  R                  SS95        SmSnU4S j[        U5       5       n[        5        nU Vs/ s H  ovR                  [        U5      5      PM     nnUR                  [        S5      5      n	U	R                  UR                  U5      n
U
S	   nU
 H  n[        R                   " X5        M     S S S 5        g s  snf ! , (       d  f       g = f)
Npyarrowz16.0z+# ValueError: Found non-unique column index)reasond   
   c              3      >#    U  HH  nS R                  [        T5       Vs/ s H  o"S SUS SUS 3PM     sn5      R                  5       v   MJ     gs  snf 7f)
d,N)joinrangeencode).0_imax_row_ranges      Z/var/www/html/env/lib/python3.13/site-packages/pandas/tests/io/parser/test_multi_thread.py	<genexpr>7test_multi_thread_string_io_read_csv.<locals>.<genexpr>(   s^      !A 			}1EF1EAU!Aa5!A'1EFGNNPP! Gs   AA
!A   r   )enginepytestimportorskipr   __version__applymarkermarkxfailr   r   enter_contextr   r   mapread_csvtmassert_frame_equal)all_parsersrequestparserpa	num_filesbytes_to_dfstackbfilespoolresultsfirst_resultresultr   s                @r   $test_multi_thread_string_io_read_csvr6      s    F}}	!  +2>>"WV_4!!)V!W MIy!K 
:EF+Q$$WQZ0+F"":a=1((6??E2qzF!!,7  
F 
s   D- #D(AD-(D--
D;c                 @  ^ ^ U U4S jn[        U5       Vs/ s H  oRU-  U-  X#-  4PM     nn[        US9 nUR                  XF5      nSSS5        WS   R                  n	USS  H	  n
Xl        M     [        R
                  " U5      nU$ s  snf ! , (       d  f       NL= f)a^  
Generate a DataFrame via multi-thread.

Parameters
----------
parser : BaseParser
    The parser object to use for reading the data.
path : str
    The location of the CSV file to read.
num_rows : int
    The number of rows to read per task.
num_tasks : int
    The number of tasks to use for reading this DataFrame.

Returns
-------
df : DataFrame
c           	         > U u  pU(       d  TR                  TSSUS/S9$ TR                  TSS[        U5      S-   US/S9$ )a  
Create a reader for part of the CSV.

Parameters
----------
arg : tuple
    A tuple of the following:

    * start : int
        The starting row to start for parsing CSV
    * nrows : int
        The number of rows to read.

Returns
-------
df : DataFrame
r   date)	index_colheadernrowsparse_datesN   	   )r:   r;   skiprowsr<   r=   )r&   int)argstartr<   r+   paths      r   reader0_generate_multi_thread_dataframe.<locals>.readerN   sf    $ ??!5vh #   Z!^  
 	
    )	processesNr   r>   )r   r   r%   columnspdconcat)r+   rD   num_rows	num_tasksrE   r   tasksr2   r3   r;   rfinal_dataframes   ``          r    _generate_multi_thread_dataframerQ   :   s    ( 
F EJ)DTDTqA	"H$9:DT 
  
i	(D((6) 
) QZFQR[	  ii(O 
)	(s   B
B
Bc                 $   SnSnU nSn[        [        R                  R                  S5      R                  U5      [        R                  R                  S5      R                  U5      [        R                  R                  S5      R                  U5      [        R                  R                  S5      R                  U5      [        R                  R                  S5      R                  U5      S/U-  S/U-  S/U-  [        R
                  " SUS	S
9[        R                  " USS9S.
5      n[        R                  " U5       nUR                  U5        [        X6X!5      n[        R                  " XW5        S S S 5        g ! , (       d  f       g = f)N   0   z__thread_pool_reader__.csv   foobarbazz20000101 09:00:00s)periodsfreqint64)dtype)
ar0   cr   erV   rW   rX   r9   rA   )r   nprandomdefault_rngrJ   
date_rangearanger'   ensure_cleanto_csvrQ   r(   )r)   rM   rL   r+   	file_namedfrD   rP   s           r   )test_multi_thread_path_multipart_read_csvrj      s;    IHF,I	&&q)00:&&q)00:&&q)00:&&q)00:&&q)00:7X%7X%7X%MM"5xcR99XW5	

B 
	#t
		$:(
 	b2 
$	#	#s   4F
F)__doc__
contextlibr   ior   multiprocessing.poolr   numpyra   r   pandasrJ   r   pandas._testing_testingr'   pandas.util.versionr   r"   usefixturesxfail_pyarrow
single_cpuslow
pytestmarkfilterwarningsr6   rQ   rj    rG   r   <module>r{      s    !  +      '''8
 KK
KK
 NO8 P8<CL 3 3rG   