a
    Pf\                     @   s2  d 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	Z	ddl
Z
ddlmZ ddlZddlZddlZddlZddlmZ ddlm  mZ ddlZddlmZ ddlm  mZ ej !dZ"G dd	 d	Z#e$e#egZ%zdd
l&m'Z( e%)e( W n e*y   Y n0 e
j+,e
j+-e.Z/G dd dZ0ej1dd Z2G dd dZ3dd Z4ej 5dddgej 5dddgdd Z6dd Z7ej 5deddfedd fgd!d" Z8ej 5d#g d$ej 5dddgd%d& Z9d'd( Z:d)d* Z;d+d, Z<d-d. Z=ej 5d/ej>ej?ej@ejAejBejCejDejEejFg	d0d1 ZGdS )2z0
Tests for the pandas.io.common functionalities
    N)partial)BytesIOStringIOUnsupportedOperation)Path)is_platform_windowsz=ignore:Passing a BlockManager to DataFrame:DeprecationWarningc                   @   s&   e Zd ZdZddddZdd ZdS )CustomFSPathz%For testing fspath on unknown objectsN)returnc                 C   s
   || _ d S Npath)selfr    r   T/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/io/test_common.py__init__%   s    zCustomFSPath.__init__c                 C   s   | j S r
   r   r   r   r   r   
__fspath__(   s    zCustomFSPath.__fspath__)__name__
__module____qualname____doc__r   r   r   r   r   r   r   "   s   r   )localc                   @   s  e Zd ZdZdd Zdd Zdd Zedd	d
 Z	dd Z
dd Zejdedd Zejdeeegdd Zdd Zdd Zdd Zdd Zejdejdedfejdedfejd ed!fejd"ed#fej d$ed%fej!ded&fej"ded'fej#ded(fej$ded)fg	d*d+ Z%ejd,ej&j'dedfej&j(ded-fej&j)d ed!fej&j*d"ed#fej&j+d"ed.fej&j,ded&fej&j-ded(fej&j.ded)fgd/d0 Z/ejdejdedfej0dedfejdedfejd ed!fejd"ed#fej d$ed%fej!ded&fej"ded'fej#ded(fej$ded)fg
d1d2 Z1ejd3ejdd4fej0dd4fejdd5fejd d6fejd"d7fej d$d8fej!dd9fej"dd:fej#dd;fej$dd<fg
d=d> Z2ejd?d@i dfdAdBdCidCfdDi d"fdEi dfdFi dfdGi dfdHi dfdIdJe3dKidfgdLdM Z4dNdO Z5dPS )QTestCommonIOCapabilitiesziindex,A,B,C,D
foo,2,3,4,5
bar,7,8,9,10
baz,12,13,14,15
qux,12,13,14,15
foo2,12,13,14,15
bar2,12,13,14,15
c                 C   sB   d}t |}||ksJ tj|s*J tj||ks>J d S )Nz
~/sometest)icom_expand_userosr   isabs
expanduserr   filenameZexpanded_namer   r   r   test_expand_userD   s
    
z)TestCommonIOCapabilities.test_expand_userc                 C   s2   d}t |}||ksJ tj||ks.J d S )Nz/somefolder/sometest)r   r   r   r   r   r   r   r   r   test_expand_user_normal_pathL   s    
z5TestCommonIOCapabilities.test_expand_user_normal_pathc                 C   sB   t td}|dksJ t td}|tjddks>J d S )N.zfoo//barfoobar)r   stringify_pathr   r   r   join)r   rel_pathZredundant_pathr   r   r   test_stringify_path_pathlibS   s    z4TestCommonIOCapabilities.test_stringify_path_pathlibzpy.pathc                 C   s8   t jdd}t j|}t|}t||ks4J d S )Nr#   r$   )r   r   r&   abspath	LocalPathr   r%   )r   r   abs_pathZlpathr   r   r   test_stringify_path_localpathY   s    z6TestCommonIOCapabilities.test_stringify_path_localpathc                 C   s"   t d}t|}|dksJ d S )Nfoo/bar.csv)r   r   r%   )r   presultr   r   r   test_stringify_path_fspath`   s    
z3TestCommonIOCapabilities.test_stringify_path_fspathc              	   C   s|   t d}t V}|jd| dd"}|t|ks<J W d    n1 sP0    Y  W d    n1 sn0    Y  d S )Nfsspeczfile://wbmode)pytestimportorskiptmensure_cleanopenr   r%   )r   r1   r   Z
fsspec_objr   r   r   !test_stringify_file_and_path_likee   s    

z:TestCommonIOCapabilities.test_stringify_file_and_path_like	path_typec                 C   s2   |\}}|d| }t j|dd}||ks.J d S )Nr-   Zinfer)compression)r   Zinfer_compression)r   Zcompression_formatr;   	extensionexpectedr   r<   r   r   r    test_infer_compression_from_pathl   s    z9TestCommonIOCapabilities.test_infer_compression_from_pathc              	   C   s   t jt d~}|dt|j d }t|d<}t|jj sJJ t	j
||jjksbJ W d    n1 sv0    Y  W d    n1 s0    Y  d S )N)dirz~/z	/sometestw)tempfileTemporaryDirectoryr   homenamer   
get_handlehandleis_absoluter   r   r   )r   r;   tmpr   handlesr   r   r   test_get_handle_with_paths   s
    z2TestCommonIOCapabilities.test_get_handle_with_pathc              	   C   sx   t  T}t|d}|j|ks$J W d    n1 s80    Y  |jrLJ W d    n1 s`0    Y  |jstJ d S )Nr)r   r   rF   rG   closed)r   Zinput_bufferrJ   r   r   r   test_get_handle_with_buffer|   s
    ,(z4TestCommonIOCapabilities.test_get_handle_with_bufferc                 C   s   d}t jt|ddd|}d}d}|j|}t||ks>J t||k rjt|j dks`J ||7 }qt||7 }q"||dksJ W d    n1 s0    Y  d S )	N&   a,b,c
1,2,3
©,®,®
Look,a snake,🐍rbFis_text       r   utf-8)r   rF   r   rG   readlenencode)r   datarJ   r/   	chunksizechunkr   r   r   )test_bytesiowrapper_returns_correct_bytes   s    
zBTestCommonIOCapabilities.test_bytesiowrapper_returns_correct_bytesc                 C   s   t d}d}tg dg dg dd}t|}tj|ddd	6}||j	 }t
|| |jrlJ W d    n1 s0    Y  d S )
Nzpyarrow.csvrO   )1   ©ZLook)2   ®za snake)3r`   u   🐍abcrP   FrQ   )r5   r6   pd	DataFramer   r   rF   read_csvrG   Z	to_pandasr7   assert_frame_equalrM   )r   Zpa_csvrY   r>   srJ   dfr   r   r   test_get_handle_pyarrow_compat   s    
z7TestCommonIOCapabilities.test_get_handle_pyarrow_compatc                 C   s   t jt| jdd}t j|dd}W d    n1 s80    Y  t t| j}t|| t jt| jddH}t|}t||jdg  tt ||jdd   W d    n1 s0    Y  d S )N   )rZ   T)Zignore_indexr   )	rf   rh   r   data1concatr7   ri   nextZiloc)r   readerr/   r>   itfirstr   r   r   test_iterator   s    ,z&TestCommonIOCapabilities.test_iteratorz#reader, module, error_class, fn_extr   csvtxtZxlrdZxlsxZpyarrowfeathertablesZh5ZdtaZsas7bdatjsonpicklec                 C   s   t | tjtdd| }d| d}d| d}d}d}	d	| d
| d}
d| d}d| d}d| }t j|d| d| d| d|	 d|
 d| d| d| dd || W d    n1 s0    Y  d S )NrY   does_not_exist.File (b')?.+does_not_exist\.'? does not exist:\[Errno 2\] No such file or directory: '.+does_not_exist\.'zExpected object or value7path_or_buf needs to be a string file path or file-like#\[Errno 2\] File .+does_not_exist\.$ does not exist: '.+does_not_exist\.<   \[Errno 2\] 没有那个文件或目录: '.+does_not_exist\.?\[Errno 2\] File o directory non esistente: '.+does_not_exist\.+Failed to open local file.+does_not_exist\.(|)match)r5   r6   r   r   r&   HEREraises)r   rq   moduleerror_classfn_extr   msg1msg2msg3msg4msg5msg6msg7msg8r   r   r   test_read_non_existent   s&    


4z/TestCommonIOCapabilities.test_read_non_existentz#method, module, error_class, fn_exthtmlZparquetc                 C   sz   t | tg dg dg dd}tjtddd| }t j|dd	 ||| W d    n1 sl0    Y  d S )
N)rm         )r   r      )r   r   rT   rb   rY   Zmissing_folderr{   z@Cannot save file into a non-existent directory: .*missing_folderr   )	r5   r6   rf   rg   r   r   r&   r   r   )r   methodr   r   r   Zdummy_framer   r   r   r   #test_write_missing_parent_directory   s    
z<TestCommonIOCapabilities.test_write_missing_parent_directoryc                 C   s   t | tjdd| }|tddd  d| d}d| d	}d
}	d}
d| d| d	}d| d	}d| d	}d| }t j|d| d| d|	 d|
 d| d| d| d| dd || W d    n1 s0    Y  d S )N~r{   r   c                 S   s   t jd| S )Nr#   )r   r   r&   )xr   r   r   <lambda>  rS   zJTestCommonIOCapabilities.test_read_expands_user_home_dir.<locals>.<lambda>r|   r}   r~   r   z0Unexpected character found when decoding 'false'r   r   r   r   r   r   r   r   r   r   )r5   r6   r   r   r&   setattrr   r   )r   rq   r   r   r   Zmonkeypatchr   r   r   r   r   r   r   r   r   r   r   r   test_read_expands_user_home_dir   s(    


4z8TestCommonIOCapabilities.test_read_expands_user_home_dirzreader, module, path)iorY   ru   ziris.csv)r   rY   Zfixed_widthzfixed_width_format.txt)r   rY   excelz
test1.xlsx)r   rY   rw   zfeather-0_3_1.feather)r   rY   Z
legacy_hdfzdatetimetz_object.h5)r   rY   statazstata10_115.dta)r   sasrY   ztest1.sas7bdat)r   ry   rY   ztsframe_v012.json)r   rY   rz   zcategorical.0.25.0.picklec                 C   sR   t | || }t|}||}||}|drBt|| nt|| d S )Nz.pickle)r5   r6   r   endswithr7   Zassert_categorical_equalri   )r   rq   r   r   datapathmypathr/   r>   r   r   r   test_read_fspath_all$  s     

z-TestCommonIOCapabilities.test_read_fspath_allz"writer_name, writer_kwargs, moduleto_csvto_excelengineZopenpyxl
to_featherto_htmlto_jsonto_latex	to_pickleto_stataZ
time_stampz2019-01-01 00:00c                 C   st  |dv rt d td}td}tdddgi}| }|}t | t|}	t||}
|
|fi | |
|	fi | t|d}t|df}|d	krtj	|fi |}tj	|fi |}t
|| n| }| }||ksJ W d    n1 s0    Y  W d    n1 s&0    Y  W d    n1 sF0    Y  W d    n1 sf0    Y  d S )
N)r   Zjinja2stringfspathArm   r   rP   r   )r5   r6   r7   r8   rf   rg   r   getattrr9   
read_excelri   rV   )r   Zwriter_nameZwriter_kwargsr   p1p2rk   r   r   r   writerZf_strZf_pathr/   r>   r   r   r   test_write_fspath_allQ  s&    




z.TestCommonIOCapabilities.test_write_fspath_allc           	   	   C   s   t d tdddgi}td}td}|t}|P}t|}|j|dd |j|dd tj|dd}tj|dd}W d    n1 s0    Y  W d    n1 s0    Y  t	|| d S )	Nrx   r   rm   r   r   r   r$   )key)
r5   r6   rf   rg   r7   r8   r   Zto_hdfread_hdfri   )	r   rk   r   r   r   r   r   r/   r>   r   r   r   test_write_fspath_hdf5x  s    


Jz/TestCommonIOCapabilities.test_write_fspath_hdf5N)6r   r   r   rn   r    r!   r(   tdZ
skip_if_nor,   r0   r:   r5   markparametrize
path_typesr?   strr   r   rK   rN   r\   rl   rt   rf   rh   FileNotFoundErrorread_fwfr   read_featherOSErrorr   
read_stataread_sas	read_jsonread_pickler   rg   r   r   r   r   Z
to_parquetr   r   r   r   Z
read_tabler   r   to_datetimer   r   r   r   r   r   r   :   s   	













r   c                 C   s   | ddddS )Nr   rY   ru   ztest_mmap.csvr   )r   r   r   r   	mmap_file  s    r   c                   @   sX   e Zd Zdd Zdd Zdd Zdd Zej	d	d
dgej	dddgdd Z
dS )TestMMapWrapperc                 C   s   t d}dd |_t r"d}t}n
d}tj}tj||d t	|d W d    n1 s\0    Y  t
|dd	}W d    n1 s0    Y  d
}tjt|d t	|d W d    n1 s0    Y  d S )NzI am not a filec                   S   s   dS )Nr   r   r   r   r   r     rS   z;TestMMapWrapper.test_constructor_bad_file.<locals>.<lambda>zThe parameter is incorrectz
[Errno 22]r   TrU   encodingzI/O operation on closed file)r   filenor   r   mmaperrorr5   r   r   Z_maybe_memory_mapr9   
ValueError)r   r   Znon_filemsgerrtargetr   r   r   test_constructor_bad_file  s    
*z)TestMMapWrapper.test_constructor_bad_filec              
   C   s   t |dd}| }tj|dddd}|j}t|jjtjsDJ |D ] }t|}|	 |	 ksHJ qHt
jtdd t| W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )NrU   r   rL   T)rR   
memory_mapz^$r   )r9   	readlinesr   rF   rG   
isinstancebufferr   rp   stripr5   r   StopIteration)r   r   r   linesZwrapperswrapperline	next_liner   r   r   	test_next  s    zTestMMapWrapper.test_nextc              	   C   s   t  }tjdtdd tjtdt	dtjdd t
dD t	dd	}|| tjtd
d tj|dd W d    n1 s0    Y  W d    n1 s0    Y  d S )N皙?x      r   ABCDZdtypec                 S   s   g | ]}d | qS zi-r   .0ir   r   r   
<listcomp>  rS   z7TestMMapWrapper.test_unknown_engine.<locals>.<listcomp>r   columnsindexzUnknown enginer   Zpyt)r   )r7   r8   rf   rg   nparangereshapeIndexlistobjectranger   r5   r   r   rh   r   r   rk   r   r   r   test_unknown_engine  s    

z#TestMMapWrapper.test_unknown_enginec                 C   s   t  z}tjdtdd tjtdt	dtjdd t
dD t	dd	}|j|d
d t |tj|dd W d   n1 s0    Y  dS )z\
        'encoding' shouldn't be passed to 'open' in binary mode.

        GH 35058
        r   r   r   r   r   c                 S   s   g | ]}d | qS r   r   r   r   r   r   r     rS   z4TestMMapWrapper.test_binary_mode.<locals>.<listcomp>r   r   zw+br3   r   Z	index_colN)r7   r8   rf   rg   r   r   r   r   r   r   r   r   ri   rh   r   r   r   r   test_binary_mode  s    
z TestMMapWrapper.test_binary_moder   zutf-16zutf-32compression_bz2xzc              	   C   s   t jdtdd t jtdtdt jdd tdD tdd	}t	
 }t	t  |j|||d
 W d   n1 s0    Y  d}tjt|d  t j|||d
 W d   n1 s0    Y  W d   n1 s0    Y  dS )z
        bz2 and xz do not write the byte order mark (BOM) for utf-16/32.

        https://stackoverflow.com/questions/55171439

        GH 35681
        r   r   r   r   r   c                 S   s   g | ]}d | qS r   r   r   r   r   r   r     rS   z@TestMMapWrapper.test_warning_missing_utf_bom.<locals>.<listcomp>r   r   )r<   r   Nz&UTF-\d+ stream does not start with BOMr   )rf   rg   r   r   r   r   r   r   r   r7   r8   Zassert_produces_warningUnicodeWarningr   r5   r   UnicodeErrorrh   )r   r   r   rk   r   r   r   r   r   test_warning_missing_utf_bom  s    

.z,TestMMapWrapper.test_warning_missing_utf_bomN)r   r   r   r   r   r   r   r5   r   r   r  r   r   r   r   r     s   r   c                   C   s   t dsJ t dsJ t dr*J t dr8J t drFJ t drTJ t drbJ t drpJ t d	s~J d S )
Nzgcs://pandas/somethingelse.comzgs://pandas/somethingelse.comzhttp://pandas/somethingelse.comzrandom:pandas/somethingelse.comz/local/pathzrelative/local/pathzthis is not fsspec://urlz({'url': 'gs://pandas/somethingelse.com'}z#RFC-3986+compliant.spec://something)r   Zis_fsspec_urlr   r   r   r   test_is_fsspec_url  s    r  r   rU   formatru   ry   c              	   C   s  t jdtdd t jtdtdt jdd tdD tdd	}t	
 }tj|d
| d$}t|d| | W d    n1 s0    Y  tj|d| d2}|dkrt j|dd}n
t |}W d    n1 s0    Y  W d    n1 s0    Y  t	|| d S )Nr   r   r   r   r   c                 S   s   g | ]}d | qS r   r   r   r   r   r   r     rS   z(test_codecs_encoding.<locals>.<listcomp>r   r   rA   )r4   r   Zto_rL   ru   r   r   )rf   rg   r   r   r   r   r   r   r   r7   r8   codecsr9   r   rh   r   ri   )r   r  r>   r   rG   rk   r   r   r   test_codecs_encoding  s    
2Fr	  c               
   C   sJ  t jdtdd t jtdtdt jdd tdD tdd	} t	
 }t|d
H}td|}| | W d    n1 s0    Y  W d    n1 s0    Y  t|dL}td|}t j|dd}W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s00    Y  t	| | d S )Nr   r   r   r   r   c                 S   s   g | ]}d | qS r   r   r   r   r   r   r     rS   z1test_codecs_get_writer_reader.<locals>.<listcomp>r   r   r2   rU   rP   r   r   )rf   rg   r   r   r   r   r   r   r   r7   r8   r9   r  	getwriterr   	getreaderrh   ri   )r>   r   rG   encodedrk   r   r   r   test_codecs_get_writer_reader  s    
Flr  zio_class,mode,msgtz*a bytes-like object is required, not 'str'rd   z%string argument expected, got 'bytes'c              	   C   s   t jdtdd t jtdtdt jdd tdD tdd	}|  R}t	j
t|d
$ |j|d| d W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   r   r   r   r   c                 S   s   g | ]}d | qS r   r   r   r   r   r   r   /  rS   z*test_explicit_encoding.<locals>.<listcomp>r   r   r   rA   r3   )rf   rg   r   r   r   r   r   r   r   r5   r   	TypeErrorr   )Zio_classr4   r   r>   r   r   r   r   test_explicit_encoding!  s    r  encoding_errors)Nstrictreplacec              	   C   s,  d}d}|dkr<d| d |d  d | }t tjdd}n.d	|d  d
 | d | d }t tjdd}t }t|}|| | dkrtj	t
|d ||| d W d    n1 s0    Y  n>||| d}|j| d}	tj|	|	gi|	d gd}
t||
 W d    n1 s0    Y  d S )Nz'utf-8' codec can't decode byte   ru      ,   
r   r   r   s   {"s   ": {"s   ":"s   "}}r   )Zorientr  r   )r  errors)r   )r   rf   rh   r   r7   r8   r   write_bytesr5   r   UnicodeDecodeErrordecoderg   ri   )r  r  r   Zbad_encodingcontentrq   r   filerk   decodedr>   r   r   r   test_encoding_errors6  s<    	

,r  c               	   C   sj   t  N} tjtdd  tj| ddd W d    n1 s>0    Y  W d    n1 s\0    Y  d S )Nzunknown error handler namer   rA   badr  )r7   r8   r5   r   LookupErrorr   rF   r   r   r   r   test_bad_encdoing_errorsY  s    
r"  c                  C   sL   t jtdd*} td | jtjks*J W d    n1 s>0    Y  d S )Nz\[Errno 2\]r   Zdoesnt_exist)r5   r   r   rf   rh   errnoENOENT)r   r   r   r   test_errno_attribute`  s    
r%  c               	   C   sh   t jtddF t  } tj| ddd W d    n1 s<0    Y  W d    n1 sZ0    Y  d S )Nr   r   rP   T)r   )r5   r   r   r   r   rF   )r   r   r   r   test_fail_mmapg  s    r&  c               
   C   s   G dd d} t jtddp t J}t|d}|j|   W d    n1 sV0    Y  W d    n1 st0    Y  W d    n1 s0    Y  d S )Nc                   @   s   e Zd Zdd ZdS )z&test_close_on_error.<locals>.TestErrorc                 S   s   t dd S )Ntest)r   r   r   r   r   closep  s    z,test_close_on_error.<locals>.TestError.closeN)r   r   r   r(  r   r   r   r   	TestErroro  s   r)  r'  r   rP   )r5   r   r   r   r   rF   Zcreated_handlesappend)r)  r   rJ   r   r   r   test_close_on_errorm  s
    r+  rq   c                 C   s6   t  }t| | W d    n1 s(0    Y  d S r
   )r   rz   dump)rq   r   r   r   r   test_pickle_readery  s    r-  )Hr   r  r#  	functoolsr   r   r   r   r   r   r   pathlibr   rz   rB   numpyr   r5   Zpandas.compatr   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasrf   Zpandas._testingZ_testingr7   Zpandas.io.commoncommonr   r   filterwarningsZ
pytestmarkr   r   r   Zpy.pathr   r*   r*  ImportErrorr   r)   dirname__file__r   r   Zfixturer   r   r  r   r	  r  r  r  r"  r%  r&  r+  rh   r   r   r   r   r   r   r   r   r-  r   r   r   r   <module>   s   
  U
[
!