Ë
    u™ãjÛ  ã                   óº   — d Z ddlmZ ddlmZ ddlmZ ddlZddl	Z	ddl
ZddlmZ e	j                  j                   e	j                  j"                  gZd„ Zd„ Zd„ Zy)	zd
Tests multithreading behaviour for reading and
parsing files for each parser defined in parsers.py
é    )Ú	ExitStack)ÚBytesIO)Ú
ThreadPoolNc           	      ó‚  ‡— | }dŠd}ˆfd„t        |«      D «       }t        «       5 }|D �cg c]  }|j                  t        |«      «      ‘Œ }}|j                  t	        d«      «      }|j                  |j                  |«      }|d   }	|D ]  }
t        j                  |	|
«       Œ 	 d d d «       y c c}w # 1 sw Y   y xY w)Néd   é
   c              3   óª   •K  — | ]E  }d j                  t        ‰«      D �cg c]  }|d›d|d›d|d›�‘Œ c}«      j                  «       –— ŒG yc c}w ­w)ú
Údú,N)ÚjoinÚrangeÚencode)Ú.0Ú_ÚiÚmax_row_ranges      €ús/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/pandas/tests/io/parser/test_multi_thread.pyú	<genexpr>z7test_multi_thread_string_io_read_csv.<locals>.<genexpr>   sU   øè ø€ ò àð 	�	‰	´°}Ó1EÖF¨A�a˜�U˜!˜A˜a˜5  ! A Ò'ÒFÓG×NÑN×PñùÚFùs   ƒA A
´Aé   r   )	r   r   Úenter_contextr   r   ÚmapÚread_csvÚtmÚassert_frame_equal)Úall_parsersÚparserÚ	num_filesÚbytes_to_dfÚstackÚbÚfilesÚpoolÚresultsÚfirst_resultÚresultr   s              @r   Ú$test_multi_thread_string_io_read_csvr'      s¾   ø€ à€FØ€MØ€Ióä�yÓ!ô€Kô 
‹ð 	8˜Ø:EÖF°Q�×$Ñ$¤W¨Q£ZÕ0ÐFˆÐFà×"Ñ"¤:¨a£=Ó1ˆà—(‘(˜6Ÿ?™?¨EÓ2ˆØ˜q‘zˆàò 	8ˆFÜ×!Ñ! ,°Õ7ñ	8÷	8ð 	8ùÚF÷	8ð 	8ús   ¦B5«!B0ÁAB5Â0B5Â5B>c                 ó6  ‡ ‡— ˆ ˆfd„}t        |«      D �cg c]  }||z  |z  ||z  f‘Œ }}t        |¬«      5 }|j                  ||«      }ddd«       d   j                  }	|dd D ]	  }
|	|
_        Œ t	        j
                  |«      }|S c c}w # 1 sw Y   ŒExY w)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                 óˆ   •— | \  }}|s‰j                  ‰dd|dg¬«      S ‰j                  ‰ddt        |«      dz   |dg¬«      S )aj  
        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   Úreaderz0_generate_multi_thread_dataframe.<locals>.readerD   sh   ø€ ð$ ‰ˆˆuáØ—?‘?Ø ¨!°5ÀvÀhð #ó ð ð �‰ØØØÜ˜“Z !‘^ØØ˜ð ó 
ð 	
ó    )Ú	processesNr   r/   )r   r   r   ÚcolumnsÚpdÚconcat)r   r5   Únum_rowsÚ	num_tasksr6   r   Útasksr#   r$   r,   ÚrÚfinal_dataframes   ``          r   Ú _generate_multi_thread_dataframerA   0   s¸   ù€ õ( 
ôF EJÈ)ÓDTöØ?@ˆ�A‰˜Ñ	" H°	Ñ$9Ò:ð€Eð ô 
˜iÔ	(ð *¨DØ—(‘(˜6 5Ó)ˆ÷*ð �Q‰Z×Ñ€Fà�Q�Rˆ[ò ˆØˆ�	ðô —i‘i Ó(€OØÐùò÷*ð *ús   –B
¸BÂBc                 óÆ  — d}d}|}d}t        j                  t        j                  j	                  d«      j                  |«      t        j                  j	                  d«      j                  |«      t        j                  j	                  d«      j                  |«      t        j                  j	                  d«      j                  |«      t        j                  j	                  d«      j                  |«      dg|z  dg|z  dg|z  t        j
                  d|d	¬
«      t        j                  |d¬«      dœ
«      }| |z  }|j                  |«       |j                  dk(  r5d}t        j                  t        |¬«      5  t        ||||«       d d d «       y t        ||||«      }	|d d  }
|
d   j                  d«      |
d<   t        j                  |	|
«       y # 1 sw Y   y xY w)Né   é0   z__thread_pool_reader__.csvé   ÚfooÚbarÚbazz20000101 09:00:00Ús)ÚperiodsÚfreqÚint64)Údtype)
Úar!   Úcr   ÚerF   rG   rH   r*   r2   Úpyarrowz=The 'nrows' option is not supported with the 'pyarrow' engine)Úmatchr*   zM8[us])r:   Ú	DataFrameÚnpÚrandomÚdefault_rngÚ
date_rangeÚarangeÚto_csvÚengineÚpytestÚraisesÚ
ValueErrorrA   Úastyper   r   )Útmp_pathr   r=   r<   r   Ú	file_nameÚdfr5   Úmsgr&   Úexpecteds              r   Ú)test_multi_thread_path_multipart_read_csvrd   v   s—  € à€IØ€Hà€FØ,€IÜ	�‰ä—‘×&Ñ& qÓ)×0Ñ0°Ó:Ü—‘×&Ñ& qÓ)×0Ñ0°Ó:Ü—‘×&Ñ& qÓ)×0Ñ0°Ó:Ü—‘×&Ñ& qÓ)×0Ñ0°Ó:Ü—‘×&Ñ& qÓ)×0Ñ0°Ó:Ø�7˜XÑ%Ø�7˜XÑ%Ø�7˜XÑ%Ü—M‘MÐ"5¸xÈcÔRÜ—9‘9˜X¨WÔ5ñ	
ó
€Bð �iÑ€DØ‡I�Iˆd„Oà‡}�}˜	Ò!ØMˆÜ�]‰]œ:¨SÔ1ñ 	PÜ,¨V°T¸8ÀYÔO÷	Pàä-¨f°d¸HÀiÓP€Fà‘!ˆu€HØ Ñ'×.Ñ.¨xÓ8€HˆVÑÜ×Ñ˜& (Õ+÷	Pàús   Å>GÇG )Ú__doc__Ú
contextlibr   Úior   Úmultiprocessing.poolr   ÚnumpyrT   r[   Úpandasr:   Úpandas._testingÚ_testingr   ÚmarkÚ
single_cpuÚslowÚ
pytestmarkr'   rA   rd   © r7   r   ú<module>rr      sU   ðñõ
 !Ý Ý +ã Û ã Ý ð
 ‡K�K×ÑØ
‡K�K×Ñð€
ò8ò0CóL#,r7   