o
    iV                     @   s  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mZ ddlm  mZ ddlZddlmZ ddlm  mZ G dd dZeeegZzdd	l m!Z" e#e" W n	 e$yt   Y nw e
j%&e
j%'e(Z)ej*+d
G dd dZ,ej-dd Z.G dd dZ/dd Z0ej*1dddgej*1dddgdd Z2dd Z3ej*1deddfedd fgd!d" Z4ej*1d#g d$ej*1dddgd%d& Z5d'd( Z6d)d* Z7d+d, Z8d-d. Z9dS )/z0
Tests for the pandas.io.common functionalities
    N)partial)BytesIOStringIOUnsupportedOperation)Path)is_platform_windowsc                   @   s"   e Zd ZdZdddZdd ZdS )	CustomFSPathz%For testing fspath on unknown objectsreturnNc                 C   s
   || _ d S Npath)selfr    r   V/var/www/edux/Edux_v2/venv/lib/python3.10/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__)r	   N)__name__
__module____qualname____doc__r   r   r   r   r   r   r      s    
r   )localz*ignore:can't resolve package:ImportWarningc                   @   sV  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ejddd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d0fej&j,d ed(fej&j-d ed*fej&j.d ed+fgd1d2 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
d3d4 Z1ejd5ejd d6fej0d 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ej#d d=fej$d d>fg
ej2d?ej2d@dAdB Z3ej2dCejdDdEi d fdFdGdHidHfdIi dfdJi d fdKi d fdLi d fdMi d fdNdOe4dPid fgdQdR Z5ej2d@dSdT Z6dUS )V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   filenameexpanded_namer   r   r   test_expand_user?   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_pathG   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_pathredundant_pathr   r   r   test_stringify_path_pathlibN   s   z4TestCommonIOCapabilities.test_stringify_path_pathlibzpy.pathc                 C   s8   t jdd}t j|}t|}t||ksJ d S )Nr$   r%   )r   r   r'   abspath	LocalPathr   r&   )r   r   abs_pathlpathr   r   r   test_stringify_path_localpathT   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 4}|jd| dd}|t|ksJ W d    n1 s(w   Y  W d    d S W d    d S 1 s@w   Y  d S )Nfsspeczfile://wbmode)pytestimportorskiptmensure_cleanopenr   r&   )r   r4   r   
fsspec_objr   r   r   !test_stringify_file_and_path_like`   s   

"z:TestCommonIOCapabilities.test_stringify_file_and_path_like	path_typec                 C   s2   |\}}|d| }t j|dd}||ksJ d S )Nr0   infer)compression)r   infer_compression)r   compression_formatr?   	extensionexpectedr   rA   r   r   r    test_infer_compression_from_pathg   s   z9TestCommonIOCapabilities.test_infer_compression_from_pathc              	   C   s   t jt dH}|dt|j d }t|d}t|jj s%J t	j
||jjks1J W d    n1 s;w   Y  W d    d S W d    d S 1 sSw   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_pathn   s   "z2TestCommonIOCapabilities.test_get_handle_with_pathc                 C   sV   t  }t|d}|j|ksJ W d    n1 sw   Y  |jr%J |  d S )Nr)r   r   rM   rN   closedclose)r   input_bufferrQ   r   r   r   test_get_handle_with_bufferw   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 r6t|j dks1J ||7 }n||7 }q||d	ksDJ W d    d S 1 sOw   Y  d S )
N&   a,b,c
1,2,3
©,®,®
Look,a snake,🐍rbFis_text       Tr   utf-8)r   rM   r   rN   readlenencode)r   datarQ   r2   	chunksizechunkr   r   r   )test_bytesiowrapper_returns_correct_bytes   s   "zBTestCommonIOCapabilities.test_bytesiowrapper_returns_correct_bytespyarrowz0.15.0)min_versionc                 C   s   ddl m} d}tg dg dg dd}t|}tj|dd	d
}||j	 }t
|| |jr7J W d    d S 1 sBw   Y  d S )Nr   )csvrX   )1   ©Look)2   ®za snake)3rm   u   🐍abcrY   FrZ   )rf   rh   pd	DataFramer   r   rM   read_csvrN   	to_pandasr:   assert_frame_equalrT   )r   rh   rb   rE   srQ   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 sw   Y  t t| j}t|| t jt| jdd%}t|}t||jdg  tt ||jdd   W d    d S 1 saw   Y  d S )N   )rc   T)ignore_indexr   )	rs   ru   r   data1concatr:   rw   nextiloc)r   readerr2   rE   itfirstr   r   r   test_iterator   s   "z&TestCommonIOCapabilities.test_iteratorz#reader, module, error_class, fn_extr   rh   txtxlrdxlsxfeathertablesh5dta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    d S 1 siw   Y  d S )Nrb   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)r8   r9   r   r   r'   HEREraises)r   r   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htmlparquetc                 C   s|   t | tg dg dg dd}tjtddd| }t j|dd	 ||| W d    d S 1 s7w   Y  d S )
N)r{         )r   r      )r   r   r]   ro   rb   missing_folderr   z@Cannot save file into a non-existent directory: .*missing_folderr   )	r8   r9   rs   rt   r   r   r'   r   r   )r   methodr   r   r   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    d S 1 sqw   Y  d S )N~r   r   c                 S   s   t jd| S )Nr$   )r   r   r'   )xr   r   r   <lambda>
  s    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   )r8   r9   r   r   r'   setattrr   r   )r   r   r   r   r   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)iorb   rh   ziris.csv)r   rb   fixed_widthzfixed_width_format.txt)r   rb   excelz
test1.xlsx)r   rb   r   zfeather-0_3_1.feather)r   rb   
legacy_hdfzdatetimetz_object.h5)r   rb   statazstata10_115.dta)r   sasrb   ztest1.sas7bdat)r   r   rb   ztsframe_v012.json)r   rb   r   zcategorical.0.25.0.picklez8ignore:CategoricalBlock is deprecated:DeprecationWarningz;ignore:`np.object` is a deprecated alias:DeprecationWarningc                 C   sT   t | || }t|}||}||}|dr"t|| d S t|| d S )Nz.pickle)r8   r9   r   endswithr:   assert_categorical_equalrw   )r   r   r   r   datapathmypathr2   rE   r   r   r   test_read_fspath_all   s   
&
z-TestCommonIOCapabilities.test_read_fspath_allz.ignore:In future versions `DataFrame.to_latex`z"writer_name, writer_kwargs, moduleto_csvto_excelenginexlwt
to_featherto_htmlto_jsonto_latex	to_pickleto_stata
time_stampz2019-01-01 00:00c              
   C   s0  t d}t d}tdddgi}|y}|^}t| t|}	t||}
|
|fi | t|d}|	 }W d    n1 sCw   Y  |
|	fi | t|d}|	 }W d    n1 sdw   Y  ||ksoJ W d    n1 syw   Y  W d    d S W d    d S 1 sw   Y  d S )NstringfspathAr{   r   rY   )
r:   r;   rs   rt   r8   r9   r   getattrr<   r_   )r   writer_namewriter_kwargsr   p1p2ry   r   r   r   writerfrE   r2   r   r   r   test_write_fspath_allS  s"   





Pz.TestCommonIOCapabilities.test_write_fspath_allc           	   	   C   s   t d tdddgi}td}td}|:}|(}t|}|j|dd |j|dd tj|dd}tj|dd}W d    n1 sHw   Y  W d    n1 sWw   Y  t	|| d S )	Nr   r   r{   r   r   r   r%   )key)
r8   r9   rs   rt   r:   r;   r   to_hdfread_hdfrw   )	r   ry   r   r   r   r   r   r2   rE   r   r   r   test_write_fspath_hdf5u  s   


 z/TestCommonIOCapabilities.test_write_fspath_hdf5N)7r   r   r   r}   r!   r"   r*   td
skip_if_nor/   r3   r>   r8   markparametrize
path_typesrF   strr   r   rR   rW   re   rz   r   rs   ru   FileNotFoundErrorread_fwf
read_excelread_featherOSErrorr   
read_stataread_sas	read_jsonread_pickler   rt   r   r   r   r   
to_parquetr   r   r   r   
read_tabler   filterwarningsr   to_datetimer   r   r   r   r   r   r   4   s    	













r   c                 C   s   | ddddS )Nr   rb   rh   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.w   Y  t
|}W d    n1 sBw   Y  d}tjt|d t	|d W d    d S 1 sbw   Y  d S )	NzI am not a filec                   S   s   dS )Nr   r   r   r   r   r     s    z;TestMMapWrapper.test_constructor_bad_file.<locals>.<lambda>zThe parameter is incorrectz
[Errno 22]r   TzI/O operation on closed file)r   filenor   r   mmaperrorr8   r   r   _maybe_memory_mapr<   
ValueError)r   r   non_filemsgerrtargetr   r   r   test_constructor_bad_file  s"   

"z)TestMMapWrapper.test_constructor_bad_filec              
   C   s   t |i}| }tj|ddddC}|j}t|jjtjs J |D ]}t|}|	 |	 ks2J q"t
jtdd t| W d    n1 sIw   Y  W d    n1 sXw   Y  W d    d S W d    d S 1 spw   Y  d S )NrS   T)r[   
memory_mapz^$r   )r<   	readlinesr   rM   rN   
isinstancebufferr   r   stripr8   r   StopIteration)r   r   r   lineswrapperswrapperline	next_liner   r   r   	test_next  s&   

"zTestMMapWrapper.test_nextc              	   C   s   t  8}t  }|| tjtdd tj|dd W d    n1 s'w   Y  W d    d S W d    d S 1 s?w   Y  d S )NzUnknown enginer   pyt)r   )	r:   r;   makeDataFramer   r8   r   r   rs   ru   r   r   ry   r   r   r   test_unknown_engine  s   

"z#TestMMapWrapper.test_unknown_enginec                 C   sZ   t  }t  }|j|dd t |tj|dd W d   dS 1 s&w   Y  dS )z\
        'encoding' shouldn't be passed to 'open' in binary mode.

        GH 35058
        zw+br6   r   	index_colN)r:   r;   r  r   rw   rs   ru   r  r   r   r   test_binary_mode  s
   
"z TestMMapWrapper.test_binary_modeencodingzutf-16zutf-32compression_bz2xzc              	   C   s   t  }t  O}t t |j|||d W d   n1 s!w   Y  d}tjt|d t	j
|||d W d   n1 sBw   Y  W d   dS W d   dS 1 sZw   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
        )rA   r  Nz&UTF-\d+ stream does not start with BOMr   )r:   r  r;   assert_produces_warningUnicodeWarningr   r8   r   UnicodeErrorrs   ru   )r   r  r  ry   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  r8   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rJ t dr#J t dr*J t dr1J t dr8J 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   is_fsspec_urlr   r   r   r   test_is_fsspec_url  s   r  r  r^   formatrh   r   c              	   C   s   t  }t  S}tj|d| d}t|d| | W d    n1 s&w   Y  tj|d| d}|dkr@tj|dd}nt|}W d    n1 sOw   Y  W d    n1 s^w   Y  t 	|| d S )NrH   )r7   r  to_rS   rh   r   r  )
r:   r  r;   codecsr<   r   rs   ru   r   rw   )r  r  rE   r   rN   ry   r   r   r   test_codecs_encoding  s   

r!  c               
   C   s  t  } t  l}t|d$}td|}| | W d    n1 s&w   Y  W d    n1 s5w   Y  t|d&}td|}tj	|dd}W d    n1 sYw   Y  W d    n1 shw   Y  W d    n1 sww   Y  t 
| | d S )Nr5   r^   rY   r   r  )r:   r  r;   r<   r   	getwriterr   	getreaderrs   ru   rw   )rE   r   rN   encodedry   r   r   r   test_codecs_get_writer_reader   s"   
r%  zio_class,mode,msgtz*a bytes-like object is required, not 'str'rq   z%string argument expected, got 'bytes'c              	   C   s   t  }|  2}tjt|d |j|d| d W d    n1 s$w   Y  W d    d S W d    d S 1 s<w   Y  d S )Nr   rH   r6   )r:   r  r8   r   	TypeErrorr   )io_classr7   r   rE   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retj	t
|d ||| d W d    n1 s_w   Y  n'||| d}|j| d}	tj|	|	gi|	d gd}
t||
 W d    d S W d    d S 1 sw   Y  d S )Nz'utf-8' codec can't decode byte   rh      ,   
r   r   r  s   {"s   ": {"s   ":"s   "}}index)orientr,  r   )r*  errors)r0  )r   rs   ru   r   r:   r;   r   write_bytesr8   r   UnicodeDecodeErrordecodert   rw   )r*  r  r   bad_encodingcontentr   r   filery   decodedrE   r   r   r   test_encoding_errors  sF   	

" r;  c               	   C   s|   t  0} tjtdd tj| ddd W d    n1 sw   Y  W d    d S W d    d S 1 s7w   Y  d S )Nzunknown error handler namer   rH   badr2  )r:   r;   r8   r   LookupErrorr   rM   r   r   r   r   test_bad_encdoing_errorsA  s   
"r>  c                  C   sN   t jtdd} td | jtjksJ W d    d S 1 s w   Y  d S )Nz\[Errno 2\]r   doesnt_exist)r8   r   r   rs   ru   errnoENOENT)r   r   r   r   test_errno_attributeH  s   
"rB  c               	   C   sz   t jtdd, t } tj| ddd W d    n1 sw   Y  W d    d S W d    d S 1 s6w   Y  d S )Nr   r   rY   T)r  )r8   r   r   r   r   rM   )r  r   r   r   test_fail_mmapO  s   "rC  c               
   C   s   G dd d} t jtddA t %}t|d}|j|   W d    n1 s+w   Y  W d    n1 s:w   Y  W d    d S W d    d S 1 sRw   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)Ntest)r   r   r   r   r   rU   X  s   z,test_close_on_error.<locals>.TestError.closeN)r   r   r   rU   r   r   r   r   	TestErrorW  s    rE  rD  r   rY   )r8   r   r   r   r   rM   created_handlesappend)rE  r  rQ   r   r   r   test_close_on_errorU  s   "rH  ):r   r   r@  	functoolsr   r   r   r   r   r   r   pathlibr   rI   r8   pandas.compatr   pandas.util._test_decoratorsutil_test_decoratorsr   pandasrs   pandas._testing_testingr:   pandas.io.commoncommonr   r   r   r   py.pathr   r,   rG  ImportErrorr   r+   dirname__file__r   r   r   r   fixturer   r   r  r   r!  r%  r)  r;  r>  rB  rC  rH  r   r   r   r   <module>   sd    

  Z
O

!