o
    �¨ÊhzV  ã                   @   s¼  d Z ddlmZ ddlZddlZddlmZ ddlm	Z	m
Z
mZ ddlmZ ej d¡Zej d¡Zej d¡Zd	d
„ Zdd„ Zej dddgddgddgdgdgdgdgg¡ej dddg¡dd„ ƒƒZdd„ Zej dddgg¡dd„ ƒZdd„ Zdd„ Zej d dge	ejgd!gd"gd#œe
dgd$d%�d&�fdd'ge	ejgd"gd(œejd)gd$d*gd+�d&�fd$d*ge	ejgd"gd(œejd)gd$d*gd+�d&�fg¡d,d-„ ƒZej d.i e	d$d/ejd0d1ejd2gg d3¢d4d5d6ejd7ejd8gd9œƒfg g d:œd;d<œe	g d=¢g d3¢g d>¢d9œƒfd$gd;d<œe	ejd/d?d0d1d@d2gg d3¢g d>¢d9œƒfdg g d:œie	d$d/ejd0d1ejd2gg d3¢d4d5d6ejd7ejd8gd9œƒfg¡dAdB„ ƒZ dCdD„ Z!dEdF„ Z"dGdH„ Z#ej dIdJdKg¡dLdM„ ƒZ$eej dNdOd!dPgejejgdQdRggfd;dSdPgd@dTgdUdRggfg¡dVdW„ ƒƒZ%edXdY„ ƒZ&ej dZd!ejd[gd[ejggfd'd!d\œd]d[gejejggfg¡d^d_„ ƒZ'd`da„ Z(dbdc„ Z)ej dde*deƒdf e*dgƒ ddegie	e*deƒe*dgƒgƒfe*deƒdh di i e	e*deƒd!gd?d'ggƒfe*deƒdj ddegie	ejd!gƒfg¡dkdl„ ƒZ+dmdn„ Z,ej dod;d?dpgfdOejdqgfg¡drds„ ƒZ-dtdu„ Z.eej dvdOd;g¡dwdx„ ƒƒZ/eej dydzd{d|d}d~dgfd~d$difg¡d€d�„ ƒƒZ0ed‚dƒ„ ƒZ1d„d…„ Z2ed†d‡„ ƒZ3dˆd‰„ Z4dŠd‹„ Z5dS )Œzg
Tests that NA values are properly handled during
parsing for all of the parsers defined in parsers.py
é    )ÚStringION)ÚSTR_NA_VALUES)Ú	DataFrameÚIndexÚ
MultiIndexz=ignore:Passing a BlockManager to DataFrame:DeprecationWarningÚpyarrow_xfailÚpyarrow_skipc                 C   sn   | }d}|  t|ƒ¡}tg d¢dtjdgtjddggg d¢d�}|jd	kr/d |jd
< d |jd< t ||¡ d S )NzA,B,C
a,b,c
d,,f
,g,h
©ÚaÚbÚcÚdÚfÚgÚh©ÚAÚBÚC©ÚcolumnsÚpyarrow)é   r   )é   r   )	Úread_csvr   r   ÚnpÚnanÚengineÚlocÚtmÚassert_frame_equal©Úall_parsersÚparserÚdataÚresultÚexpected© r'   úW/var/www/html/env/lib/python3.10/site-packages/pandas/tests/io/parser/test_na_values.pyÚtest_string_nas   s   þ


r)   c                 C   st   | }d}t ddgtjdgtjtjggddgd�}|jdkr+d |jd	d
gdf< d |jd< | t|ƒ¡}t ||¡ d S )NzA,B
foo,bar
NA,baz
NaN,nan
ÚfooÚbarÚbazr   r   r   r   r   r   ©r   r   )	r   r   r   r   r   r   r   r   r    )r"   r#   r$   r&   r%   r'   r'   r(   Útest_detect_string_na-   s    ÿ

r.   Ú	na_valuesz-999.0z-999iüÿÿg     8�Àr$   zA,B
-999,1.2
2,-999
3,4.5
z"A,B
-999,1.200
2,-999.000
3,4.500
c           	      C   sÜ   | }t tjdgdtjgddggddgd�}|jdkrHtd	d
„ |D ƒƒsHd}tjt|d�� |jt	|ƒ|d� W d   ƒ d S 1 sAw   Y  d S |jdkr]d|v r]tj
jdd�}| |¡ |jt	|ƒ|d�}t ||¡ d S )Ng333333ó?ç       @g      @g      @r   r   r   r   c                 s   s   � | ]}t |tƒV  qd S )N)Ú
isinstanceÚstr)Ú.0Úxr'   r'   r(   Ú	<genexpr>_   s   € z,test_non_string_na_values.<locals>.<genexpr>ú9The 'pyarrow' engine requires all na_values to be strings©Úmatch©r/   z-999.000z4pyarrow engined does not recognize equivalent floats©Úreason)r   r   r   r   ÚallÚpytestÚraisesÚ	TypeErrorr   r   ÚmarkÚxfailÚapplymarkerr   r    )	r"   r$   r/   Úrequestr#   r&   Úmsgr@   r%   r'   r'   r(   Útest_non_string_na_values>   s"   &
ÿþÿ
rE   c                    s‚   h d£}|t ks
J ‚| }t|ƒ‰‡fdd„‰ td ‡ fdd„t|ƒD ƒ¡ƒ}ttjtˆƒtˆƒd�}|j	|d d�}t
 ||¡ d S )	N>   ú#NAúN/Aún/aú#N/Aú-NaNú-nanú<NA>ú1.#INDú-1.#INDú1.#QNANú#N/A N/Aú-1.#QNANÚ ÚNAÚNaNr   ÚNULLÚNoneÚnullc                    sf   | dkrd}n| dkrd  dg|  ¡}|› |› �}| ˆ d k r1d  dgˆ |  d  ¡}|› |› �}|S )Nr   rR   ú,r   )Újoin)ÚiÚvÚbufÚjoined)Únvr'   r(   r   Œ   s   z!test_default_na_values.<locals>.fÚ
c                    s   g | ]	\}}ˆ ||ƒ‘qS r'   r'   )r3   rZ   r[   )r   r'   r(   Ú
<listcomp>š   s    z*test_default_na_values.<locals>.<listcomp>)r   Úindex)Úheader)r   Úlenr   rY   Ú	enumerater   r   r   Úranger   r   r    )r"   Ú
_NA_VALUESr#   r$   r&   r%   r'   )r   r^   r(   Útest_default_na_valuesq   s    rg   r,   c                 C   s¶   | }d}t dtjdgtjdtjgddtjggg d¢d�}|jd	krHd
}tjt|d�� |jt|ƒ|dgd� W d   ƒ d S 1 sAw   Y  d S |jt|ƒ|dgd�}t	 
||¡ d S )Nz3A,B,C
ignore,this,row
1,NA,3
-1.#IND,5,baz
7,8,NaN
ç      ð?é   é   é   é   r   r   r   z@skiprows argument must be an integer when using engine='pyarrow'r7   r   )r/   Úskiprows©r   r   r   r   r=   r>   Ú
ValueErrorr   r   r   r    )r"   r/   r#   r$   r&   rD   r%   r'   r'   r(   Útest_custom_na_values¡   s   (ÿ

ÿþrp   c                 C   s|   d}| }|  t|ƒ¡}ttjdtjdgtd�tjddtjgtd�g d¢dœƒ}|jdkr6d |jd< d |jd	< t	 
||¡ d S )
Nz1A,B,C
True,False,True
NA,True,False
False,NA,TrueTF©Údtype)TFTr   r   )r   r   r-   )r   r   r   r   Úarrayr   Úobjectr   r   r   r    ©r"   r$   r#   r%   r&   r'   r'   r(   Útest_bool_na_values·   s   ýÿ


rv   c                 C   sÆ   d}| }|j dkr3d}tjt|d�� |jt|ƒdgdgdœd� W d   ƒ d S 1 s,w   Y  d S |jt|ƒdgdgdœd�}ttjdtjdgtjdtjdgtjdtjdgd	œƒ}t	 
||¡ d S )
Nz3A,B,C
foo,bar,NA
bar,foo,foo
foo,bar,NA
bar,foo,foor   z;pyarrow engine doesn't support passing a dict for na_valuesr7   r*   r+   )r   r   r9   r   ©r   r=   r>   ro   r   r   r   r   r   r   r    ©r"   r$   r#   rD   Údfr&   r'   r'   r(   Útest_na_value_dictË   s$   

ÿþýÿrz   zindex_col,expectedr   rj   )r   r   r   r
   ©Úname©ra   r   )r   r   )r   r   r   )Únamesc                 C   s.   d}| }|j t|ƒtƒ |d�}t ||¡ d S )Nza,b,c,d
0,NA,1,5
)r/   Ú	index_col)r   r   Úsetr   r    )r"   r   r&   r$   r#   r%   r'   r'   r(   Útest_na_value_dict_multi_indexä   s   r�   zkwargs,expectedr   r   Úer   ©r   r   ri   é   rj   é   rk   ÚoneÚtwoÚthreeÚfiveÚsevenr   )r   r   F©r/   Úkeep_default_na©r
   r   rR   r   r‚   r   r   )r†   r‡   rˆ   r   r‰   rR   rŠ   rR   r   c           	      C   s°   d}| }|j dkrEd|v r;t|d tƒr;d}tjt|d�� |jt|ƒfi |¤Ž W d   ƒ d S 1 s4w   Y  d S tj 	¡ }| 
|¡ |jt|ƒfi |¤Ž}t ||¡ d S )NzAA,B,C
a,1,one
b,2,two
,3,three
d,4,nan
e,5,five
nan,6,
g,7,seven
r   r/   ú?The pyarrow engine doesn't support passing a dict for na_valuesr7   )r   r1   Údictr=   r>   ro   r   r   r@   rA   rB   r   r    )	r"   Úkwargsr&   rC   r$   r#   rD   r@   r%   r'   r'   r(   Útest_na_values_keep_default  s   .


ÿþ

r‘   c                 C   sF   d}| }|j t|ƒdd�}tg d¢g d¢g d¢dœƒ}t ||¡ d S )NzAA,B,C
a,1,None
b,2,two
,3,None
d,4,nan
e,5,five
nan,6,
g,7,seven
F)rŒ   r�   rƒ   )rV   r‡   rV   r   r‰   rR   rŠ   r   ©r   r   r   r   r    ru   r'   r'   r(   Ú!test_no_na_values_no_keep_defaultK  s   
ýÿr“   c                 C   s¢   d}| }|j dkr2d}tjt|d�� |jt|ƒddgidd� W d   ƒ d S 1 s+w   Y  d S |jt|ƒddgidd�}td	gtjgd
œƒ}t	 
||¡ d S )Nza,b
,2r   rŽ   r7   r   Ú2Fr‹   rR   ©r
   r   rw   )r"   r$   r#   rD   r%   r&   r'   r'   r(   Ú&test_no_keep_default_na_dict_na_valuese  s"   
ÿ
ÿüÿr–   c                 C   sž   d}| }|j dkr1d}tjt|d�� |jt|ƒddidd� W d   ƒ d S 1 s*w   Y  d S |jt|ƒddidd�}td	gtjgd
œƒ}t	 
||¡ d S )Nza,b
1,2r   rŽ   r7   r   r   Fr‹   r   r•   rw   rx   r'   r'   r(   Ú-test_no_keep_default_na_dict_na_scalar_valuesy  s   

ÿþr—   Úcol_zero_na_valuesiå¹ Ú113125c              
   C   sÖ   d}| }t tjdgtjdgdtjgddgddgd	d
gtjdgdœƒ}|jdkrSd}tjt|d�� |jt|ƒd dd
dd|dœd� W d   ƒ d S 1 sLw   Y  d S |jt|ƒd dd
dd|dœd�}t	 
||¡ d S )Nz_113125,"blah","/blaha",kjsdkj,412.166,225.874,214.008
729639,"qwer","",asdfkj,466.681,,252.373
g    ND&AÚqwerz/blahaÚkjsdkjÚasdfkjg-²�ï§Ây@g7‰A`å*}@z225.874rR   g-²�ï‹o@)r   r   r   ri   r„   rj   r…   r   rŽ   r7   Fz214.008Úblah)r   r…   r   r   )rb   rŒ   r/   rn   )r"   r˜   r$   r#   r&   rD   r%   r'   r'   r(   Ú1test_no_keep_default_na_dict_na_values_diff_reprs‹  s@   ùÿ
ü
ÿùürž   zna_filter,row_dataTr   ri   r   Ú1r   Ú3c                 C   s>   d}| }|j t|ƒdg|d�}t|ddgd�}t ||¡ d S )NzA,B
1,A
nan,B
3,C
r   )r/   Ú	na_filterr   r   r’   )r"   r¡   Úrow_datar$   r#   r%   r&   r'   r'   r(   Ú!test_na_values_na_filter_override³  s
   	r£   c              
   C   sf   | }d}|  t|ƒ¡}tdddddtjtjtjgdddd	d
tjtjtjggg d¢d�}t ||¡ d S )NzlDate,Currency,Symbol,Type,Units,UnitPrice,Cost,Tax
2012-03-14,USD,AAPL,BUY,1000
2012-05-12,USD,SBUX,SELL,500z
2012-03-14ÚUSDÚAAPLÚBUYiè  z
2012-05-12ÚSBUXÚSELLiô  )ÚDateÚCurrencyÚSymbolÚTypeÚUnitsÚ	UnitPriceÚCostÚTaxr   )r   r   r   r   r   r   r    r!   r'   r'   r(   Útest_na_trailing_columnsÉ  s   þûr±   zna_values,row_datar0   r•   rh   c           
      C   s  | }ddg}d}|j dkrDt|tƒrDt|tƒrt}d}nt}d}tj||d�� |jt|ƒ||d� W d   ƒ d S 1 s=w   Y  d S |j dkrod}tjt|d�� |jt|ƒ||d� W d   ƒ d S 1 shw   Y  d S |jt|ƒ||d�}t	||d	�}	t
 ||	¡ d S )
Nr
   r   ú1,2
2,1r   rŽ   r6   r7   ©r~   r/   r   )r   r1   r�   ro   r?   r=   r>   r   r   r   r   r    )
r"   r/   r¢   r#   r~   r$   ÚerrrD   r%   r&   r'   r'   r(   Útest_na_values_scalarå  s4   	

ÿþ

ÿþrµ   c           	      C   sÄ   | }dddœ}|  ¡ }ddg}d}tddgtjtjgg|d	�}|jd
krJd}tjt|d�� |jt	|ƒ||d� W d   ƒ d S 1 sCw   Y  d S |jt	|ƒ||d�}t
 ||¡ t
 ||¡ d S )Nr   r   r•   r
   r   r²   rh   r0   r   r   rŽ   r7   r³   )Úcopyr   r   r   r   r=   r>   ro   r   r   r   r    Úassert_dict_equal)	r"   r#   r/   Úna_values_copyr~   r$   r&   rD   r%   r'   r'   r(   Útest_na_values_dict_aliasing  s"   


ÿþr¹   c                 C   s˜   d}| }ddi}|j dkr2d}tjt|d�� |jt|ƒ|d� W d   ƒ d S 1 s+w   Y  d S |jt|ƒ|d�}tdtjd	giƒ}t	 
||¡ d S )
Nza
foo
1r   r*   r   rŽ   r7   r9   r
   r   rw   )r"   r$   r#   r/   rD   r%   r&   r'   r'   r(   Útest_na_values_dict_col_index  s   

ÿþrº   zdata,kwargs,expectedl            r_   l           z,1z
,2z
1c           	      C   s´   | }|j dkr4d|v r4d}tjt|d�� |jt|ƒfdd i|¤Ž W d   ƒ d S 1 s-w   Y  d S |j dkrEtjjdd�}| |¡ |jt|ƒfdd i|¤Ž}t	 
||¡ d S )Nr   r/   r6   r7   rb   z!Returns float64 instead of objectr:   )r   r=   r>   r?   r   r   r@   rA   rB   r   r    )	r"   r$   r�   r&   rC   r#   rD   r@   r%   r'   r'   r(   Útest_na_values_uint64.  s   
ÿþ

r»   c                 C   sH   d}| }t ddgitdgdd�d�}|jt|ƒdd	d
�}t ||¡ d S )Nza,1
b,2rŸ   r   r   r
   r{   r}   r   F)r   rŒ   )r   r   r   r   r   r    )r"   r$   r#   r&   r%   r'   r'   r(   Ú*test_empty_na_values_no_default_with_indexK  s
   r¼   zna_filter,index_dataÚ5g      @c           	      C   sz   | }d}|j dkr|du rtjjdd�}| |¡ tddgdd	gd
œt|dd�d�}|jt|ƒdg|d�}t	 
||¡ d S )Núa,b,c
1,,3
4,5,6r   Fzmismatched index resultr:   r   r„   ri   r…   )r
   r   r   r{   r}   )r   r¡   )r   r=   r@   rA   rB   r   r   r   r   r   r    )	r"   r¡   Ú
index_datarC   r#   r$   r@   r&   r%   r'   r'   r(   Útest_no_na_filter_on_indexU  s   
"rÀ   c                 C   s\   | }d}|j t|ƒdgddgd�}tdtjgdtjgdœtd	d
gdd�d�}t ||¡ d S )Nzidx,col1,col2
1,3,4
2,inf,-infr   Úinfz-inf)r   r/   ri   r„   )Úcol1Úcol2r   r   Úidxr{   r}   )r   r   r   r   r   r   r   r    )r"   r#   r$   Úoutr&   r'   r'   r(   Ú!test_inf_na_values_with_int_indexh  s   "ÿrÆ   r¡   c                 C   sV   | }d}|r	t jnd}tddg|dgddgdœƒ}|jt|ƒ|td	�}t ||¡ d S )
Nr¾   rR   rŸ   Ú4r½   r    Ú6r	   )r¡   rr   )r   r   r   r   r   r2   r   r    )r"   r¡   r#   r$   Úemptyr&   r%   r'   r'   r(   Ú+test_na_values_with_dtype_str_and_na_filteru  s   rÊ   zdata, na_values)zfalse,1
,1
trueN)zfalse,1
null,1
trueN)zfalse,1
nan,1
trueN)úfalse,1
foo,1
truer*   rË   r*   c                 C   sf   | }d  ddg¡}tjt|d�� |jt|ƒd ddgddi|d� W d   ƒ d S 1 s,w   Y  d S )	Nú|z(Bool column has NA values in column [0a]zRcannot safely convert passed user dtype of bool for object dtyped data in column 0r7   r
   r   Úbool)rb   r~   rr   r/   )rY   r=   r>   ro   r   r   )r"   r$   r/   r#   rD   r'   r'   r(   Ú!test_cast_NA_to_bool_raises_error…  s   þÿû"ÿrÎ   c                 C   sb   | }d}|j t|ƒd g d¢tttdœd� ¡ }tddgddgdd	gdœd
dgd�}t ||¡ d S )NzDFile: small.csv,,
10010010233,0123,654
foo,,bar
01001000155,4530,898)rÂ   rÃ   Úcol3)rb   r~   rr   Ú10010010233Ú01001000155Ú0123Ú4530Ú654Ú898r   ri   r}   )r   r   r2   Údropnar   r   r    r!   r'   r'   r(   Útest_str_nan_dropped§  s$   
üûýú	r×   c                 C   s²   | }d}|j dkr5d}tjt|d�� |jt|ƒttdƒƒddid� W d   ƒ d S 1 s.w   Y  d S |jt|ƒttdƒƒddid�}td	gdgt	j
gd
œƒ}t ||¡ d S )NzA,B,B
X,Y,Z
1,2,infr   rŽ   r7   r   ©r   ÚZrÁ   )rb   r/   r   ))r   ÚX)r   ÚYrØ   )r   r=   r>   ro   r   r   Úlistre   r   r   r   r   r    )r"   r#   r$   rD   r%   r&   r'   r'   r(   Útest_nan_multi_indexÄ  s,   
ÿ
ÿüÿýÿrÝ   c                 C   óN   | }d}t jtdd�� |jt|ƒdd� W d   ƒ d S 1 s w   Y  d S )Nú0
NaN
True
False
z	NA valuesr7   rÍ   rq   ©r=   r>   ro   r   r   ©r"   r#   r$   r'   r'   r(   Útest_bool_and_nan_to_boolà  s
   "ÿrâ   c                 C   rÞ   )Nrß   zconvert|NoneTyper7   Úintrq   rà   rá   r'   r'   r(   Útest_bool_and_nan_to_intí  s
   "ÿrä   c                 C   s@   | }d}|j t|ƒdd�}t dtjddgi¡}t ||¡ d S )Nrß   Úfloatrq   Ú0rh   g        )r   r   r   Ú	from_dictr   r   r   r    r!   r'   r'   r(   Útest_bool_and_nan_to_floatù  s
   rè   )6Ú__doc__Úior   Únumpyr   r=   Úpandas._libs.parsersr   Úpandasr   r   r   Úpandas._testingÚ_testingr   r@   ÚfilterwarningsÚ
pytestmarkÚusefixturesÚxfail_pyarrowÚskip_pyarrowr)   r.   ÚparametrizerE   rg   rp   rv   rz   r   Úfrom_tuplesr�   r‘   r“   r–   r—   rž   r£   r±   rµ   r¹   rº   r2   r»   r¼   rÀ   rÆ   rÊ   rÎ   r×   rÝ   râ   rä   rè   r'   r'   r'   r(   Ú<module>   s:   ÿùþúþ0
$þþþþþôþ

ýÿþýÿþ
ýÿþýÿþáþ
-
'þþ
þþ
ý( ùþ

ÿ

úþ

