§
    á! hŠ  ã                   óô   — 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 ddlmZ e	j                             d¦  «        Ze	j        j        e	j        j        gZed„ ¦   «         Zd	„ Zed
„ ¦   «         ZdS )zd
Tests multithreading behaviour for reading and
parsing files for each parser defined in parsers.py
é    )Ú	ExitStack)ÚBytesIO)Ú
ThreadPoolN)Ú	DataFrameÚpyarrow_xfailc                 óv  ‡	‡
— | }dŠ	d}ˆ	fd„t          |¦  «        D ¦   «         }t          ¦   «         5 Š
ˆ
fd„|D ¦   «         }‰
                     t          d¦  «        ¦  «        }|                     |j        |¦  «        }|d         }|D ]}t          j        ||¦  «         Œ	 d d d ¦  «         d S # 1 swxY w Y   d S )Néd   é
   c              3   ó”   •K  — | ]B}d                       d„ t          ‰¦  «        D ¦   «         ¦  «                             ¦   «         V — ŒCdS )ú
c                 ó(   — g | ]}|d ›d|d ›d|d ›�‘ŒS )Údú,© )Ú.0Úis     úbc:\xampp_lite_8_4\www\timesheet\venv\Lib\site-packages\pandas/tests/io/parser/test_multi_thread.pyú
<listcomp>zBtest_multi_thread_string_io_read_csv.<locals>.<genexpr>.<listcomp>"   s7   € ÐFÐFÐF¨A�aÐ'Ð'Ð'˜AÐ'Ð'Ð' !Ð'Ð'Ð'ÐFÐFÐFó    N)ÚjoinÚrangeÚencode)r   Ú_Úmax_row_ranges     €r   ú	<genexpr>z7test_multi_thread_string_io_read_csv.<locals>.<genexpr>!   sf   øè è € ð ð àð 	�	Š	ÐFÐFµ°}Ñ1EÔ1EÐFÑFÔFÑGÔG×NÒNÑPÔPðð ð ð ð ð r   c                 óT   •— g | ]$}‰                      t          |¦  «        ¦  «        ‘Œ%S r   )Úenter_contextr   )r   ÚbÚstacks     €r   r   z8test_multi_thread_string_io_read_csv.<locals>.<listcomp>(   s-   ø€ ÐFÐFÐF°Q�×$Ò$¥W¨Q¡Z¤ZÑ0Ô0ÐFÐFÐFr   é   r   )r   r   r   r   ÚmapÚread_csvÚtmÚassert_frame_equal)Úall_parsersÚparserÚ	num_filesÚbytes_to_dfÚfilesÚpoolÚresultsÚfirst_resultÚresultr   r   s            @@r   Ú$test_multi_thread_string_io_read_csvr.      s,  øø€ ð €FØ€MØ€Iðð ð ð å�yÑ!Ô!ðñ ô €Kõ 
‰Œð 	8˜ØFÐFÐFÐF¸+ÐFÑFÔFˆà×"Ò"¥:¨a¡=¤=Ñ1Ô1ˆà—(’(˜6œ?¨EÑ2Ô2ˆØ˜q”zˆàð 	8ð 	8ˆFÝÔ! ,°Ñ7Ô7Ð7Ð7ð	8ð	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8ð 	8ð 	8s   ²A.B.Â.B2Â5B2c                 ó8  ‡ ‡‡‡— ˆ ˆfd„}ˆˆfd„t          ‰¦  «        D ¦   «         }t          ‰¬¦  «        5 }|                     ||¦  «        }ddd¦  «         n# 1 swxY w Y   |d         j        }|dd…         D ]	}	||	_        Œ
t	          j        |¦  «        }
|
S )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‰                      ‰dd|dg¬¦  «        S ‰                      ‰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é   é	   )r2   r3   Úskiprowsr4   r5   )r"   Úint)ÚargÚstartr4   r&   Úpaths      €€r   Úreaderz0_generate_multi_thread_dataframe.<locals>.readerG   sy   ø€ ð$ ‰ˆˆuàð 	Ø—?’?Ø ¨!°5ÀvÀhð #ñ ô ð ð �ŠØØØÝ˜‘Z”Z !‘^ØØ˜ð ñ 
ô 
ð 	
r   c                 ó*   •— g | ]}‰|z  ‰z  ‰‰z  f‘ŒS r   r   )r   r   Únum_rowsÚ	num_taskss     €€r   r   z4_generate_multi_thread_dataframe.<locals>.<listcomp>i   s9   ø€ ð ð ð Ø?@ˆ�A‰˜Ñ	" H°	Ñ$9Ð:ðð ð r   )Ú	processesNr   r6   )r   r   r!   ÚcolumnsÚpdÚconcat)r&   r<   r?   r@   r=   Útasksr*   r+   r3   ÚrÚfinal_dataframes   ````       r   Ú _generate_multi_thread_dataframerH   3   s  øøøø€ ð( 
ð  
ð  
ð  
ð  
ð  
ðDð ð ð ð ÝDIÈ)ÑDTÔDTðñ ô €Eõ 
˜iÐ	(Ñ	(Ô	(ð *¨DØ—(’(˜6 5Ñ)Ô)ˆð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð �QŒZÔ€Fà�Q�R�RŒ[ð ð ˆØˆŒ	ˆ	å”i Ñ(Ô(€OØÐs   ·AÁAÁ!Ac                 óf  — d}d}| }d}t          t          j                             d¦  «                             |¦  «        t          j                             d¦  «                             |¦  «        t          j                             d¦  «                             |¦  «        t          j                             d¦  «                             |¦  «        t          j                             d¦  «                             |¦  «        dg|z  dg|z  dg|z  t	          j        d|d	¬
¦  «        t          j        |d¬¦  «        dœ
¦  «        }t          j        |¦  «        5 }| 	                    |¦  «         t          ||||¦  «        }t          j        ||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Né   é0   z__thread_pool_reader__.csvé   ÚfooÚbarÚbazz20000101 09:00:00Ús)ÚperiodsÚfreqÚint64)Údtype)
Úar   Úcr   ÚerM   rN   rO   r1   r9   )r   ÚnpÚrandomÚdefault_rngrC   Ú
date_rangeÚaranger#   Úensure_cleanÚto_csvrH   r$   )r%   r@   r?   r&   Ú	file_nameÚdfr<   rG   s           r   Ú)test_multi_thread_path_multipart_read_csvra   y   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Ð"5¸xÈcÐRÑRÔRÝ”9˜X¨WÐ5Ñ5Ô5ð	
ð 	
ñ
ô 
€Bõ 
Œ˜Ñ	#Ô	#ð 3 tØ
�	Š	�$‰Œˆå:Ø�D˜( Iñ
ô 
ˆõ 	Ô˜b /Ñ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð 3ð 3s   Å=F&Æ&F*Æ-F*)Ú__doc__Ú
contextlibr   Úior   Úmultiprocessing.poolr   ÚnumpyrX   ÚpytestÚpandasrC   r   Úpandas._testingÚ_testingr#   ÚmarkÚusefixturesÚxfail_pyarrowÚ
single_cpuÚslowÚ
pytestmarkr.   rH   ra   r   r   r   ú<module>rq      s  ððð ð !Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +à Ð Ð Ð Ø €€€à Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à”×'Ò'¨Ñ8Ô8€ð
 „KÔØ
„KÔð€
ð ð8ð 8ñ „ð8ð0Cð Cð CðL ð3ð 3ñ „ð3ð 3ð 3r   