a
    é´«j¦  ã                   @   s
  d dl mZ d dlZd dl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ZmZmZmZmZmZmZ d dlmZ d dlmZ ej d¡Zejdd„ ƒZejjej d	g d
¢¡dd„ ƒƒZ e!e!e"dœdd„Z#ej dddg¡dd„ ƒZ$dd„ Z%e &d¡dd„ ƒZ'dS )é    )ÚBytesION)Úpa_version_under17p0)Ú	DataFrameÚIndexÚ
date_rangeÚread_csvÚ
read_excelÚ	read_jsonÚread_parquet)Ú_test_decoratorsz=ignore:Passing a BlockManager to DataFrame:DeprecationWarningc                     sN   t  d¡ t  d¡} tƒ ‰ dd„ ˆ _G ‡ fdd„d| jƒ}| jd|dd	� ˆ S )
z"Emulate GCS using a binary buffer.ÚgcsfsÚfsspecc                   S   s   dS )NT© r   r   r   úW/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/pandas/tests/io/test_gcs.pyÚ<lambda>$   ó    zgcs_buffer.<locals>.<lambda>c                       s$   e Zd Ze‡ fdd„ƒZdd„ ZdS )z%gcs_buffer.<locals>.MockGCSFileSystemc                     s   ˆ   d¡ ˆ S )Nr   )Úseek)ÚargsÚkwargs©Ú
gcs_bufferr   r   Úopen'   s    
z*gcs_buffer.<locals>.MockGCSFileSystem.openc                 [   s   |ddœgS )NÚfile)ÚnameÚtyper   )ÚselfÚpathr   r   r   r   Úls,   s    z(gcs_buffer.<locals>.MockGCSFileSystem.lsN)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r   r   r   r   r   ÚMockGCSFileSystem&   s   r"   ÚgsT)Úclobber)ÚpytestÚimportorskipr   ÚcloseÚAbstractFileSystemZregister_implementation)r   r"   r   r   r   r      s    


r   Úformat)ÚcsvÚjsonÚparquetÚexcelÚmarkdownc                    sŠ  t ddgdtjgddgtddd�d	œƒ}d
|› �}|dkr\|j|dd� t|dgdd�}�n|dkr„d}| |¡ t|dgdd�}nö|dkr¦| |¡ t	|dgd�}nÔ|dk�rXt
 d¡ t
 d¡‰ G ‡ fdd„dˆ jƒ}| t
jjt tdd�¡ | ¡ �0}	|	 ˆ d|¡ | |¡ t|ƒ}W d  ƒ n1 �s40    Y  | ¡ }
|
jdk�szJ ‚n"|dk�rzt
 d ¡ | |¡ |}t ||¡ dS )!zE
    Test that many to/read functions support GCS.

    GH 33987
    é   é   ç       @ÚtÚsú
2018-06-18é   ©Zperiods©ÚintÚfloatÚstrÚdtzgs://test/test.r*   T)Úindexr;   r   )Zparse_datesÚ	index_colr-   zgs://test/test.xlsxr+   )Zconvert_datesr,   Zpyarrowz
pyarrow.fsc                       s   e Zd Ze‡ fdd„ƒZdS )z(test_to_read_gcs.<locals>.MockFileSystemc                    s,   t dƒ t |  dd¡¡ ¡  ¡ }ˆ  |¡S )NzUsing pyarrow filesystemzgs://Ú )ÚprintÚpathlibÚPathÚreplaceÚabsoluteÚas_uriZLocalFileSystem)r   Zto_local©Zpa_fsr   r   Úfrom_uriZ   s    z1test_to_read_gcs.<locals>.MockFileSystem.from_uriN)r   r   r    r!   rF   r   rE   r   r   ÚMockFileSystemY   s   rG   z&pyarrow 17 broke the mocked filesystem)ZraisesÚreasonÚ
FileSystemNz2Using pyarrow filesystem
Using pyarrow filesystem
r.   Útabulate)r   ÚnpÚnanr   Úto_csvr   Zto_excelr   Úto_jsonr	   r%   r&   rI   ZapplymarkerÚmarkZxfailr   Ú	TypeErrorÚcontextÚsetattrÚ
to_parquetr
   Z
readouterrÚoutZto_markdownÚtmÚassert_frame_equal)r   r)   ÚmonkeypatchZcapsysÚrequestÚdf1r   Zdf2rG   ÚmZcapturedr   rE   r   Útest_to_read_gcs7   sP    	
üÿ	





ýÿ

(


r[   )ÚresultÚexpectedÚcompressionc              	   C   s~  |dkr’t  t| ƒ¡�j}t  t|ƒ¡�<}t| ¡ | ¡ ƒD ]\}}|j|jks:J ‚q:W d  ƒ n1 sh0    Y  W d  ƒ n1 s†0    Y  nè|dk�rltjt| ƒd��¬}tjt|ƒd��z}t| ¡ | ¡ ƒD ]V\}	}
| 	|	¡}| 	|
¡}|du |du k�sJ ‚|durÒ|durÒ| 
¡ | 
¡ ksÒJ ‚qÒW d  ƒ n1 �s@0    Y  W d  ƒ n1 �s`0    Y  n| |k�szJ ‚dS )a  
    For zip compression, only compare the CRC-32 checksum of the file contents
    to avoid checking the time-dependent last-modified timestamp which
    in some CI builds is off-by-one

    See https://en.wikipedia.org/wiki/ZIP_(file_format)#File_headers
    ÚzipNÚtar)Úfileobj)ÚzipfileÚZipFiler   r_   ÚinfolistÚCRCÚtarfiler   Ú
getmembersÚextractfileÚread)r\   r]   r^   ÚexpÚresZres_infoZexp_infoZtar_expZtar_resZtar_res_infoZtar_exp_infoZactual_fileZexpected_filer   r   r   Úassert_equal_zip_safeu   s*    ÿP
ÿÿ

Xrl   Úencodingúutf-8Úcp1251c                 C   s  t dt d¡ d¡ ttdƒƒtdd„ tdƒD ƒƒd�}d	|i}|d
krPd|d< tƒ }|j|||dd� d}|j|||d� |  	¡ }| 	¡ }	t
||	|ƒ t|d||d�}
t ||
¡ || }d|d	< |d|› �7 }|j|||d� |  	¡ }| 	¡ }	t
||	|ƒ t|dd|d�}
t ||
¡ dS )z›
    Compression and encoding should with GCS.

    GH 35677 (to_csv, compression), GH 26124 (to_csv, encoding), and
    GH 32392 (read_csv, encoding)
    gš™™™™™ñ?éx   )é   é   ÚABCDc                 S   s   g | ]}d |› �‘qS )zi-r   )Ú.0Úir   r   r   Ú
<listcomp>¡   r   z8test_to_csv_compression_encoding_gcs.<locals>.<listcomp>rq   )Úcolumnsr<   ÚmethodÚgzipr/   ÚmtimeÚwb)r^   rm   Úmodeúgs://test/test.csv)r^   rm   r   )r=   r^   rm   ZinferÚ.N)r   rK   ZarangeZreshaper   ÚlistÚranger   rM   Úgetvaluerl   r   rU   rV   )r   Zcompression_onlyrm   Zcompression_to_extensionZdfr^   ÚbufferZpath_gcsrk   r]   Zread_dfZfile_extr   r   r   Ú$test_to_csv_compression_encoding_gcs”   s8    

ýÿrƒ   c                    s~   t  d¡ t  d¡ ddlm} tddgdtjgdd	gtd
dd�dœƒ}G ‡ fdd„d|ƒ}|  d|¡ |j	ddddd� dS )zCRegression test for writing to a not-yet-existent GCS Parquet file.Zfastparquetr   r   )r(   r/   r0   r1   r2   r3   r4   r5   r6   r7   c                       s   e Zd Zd‡ fdd„	ZdS )z7test_to_parquet_gcs_new_file.<locals>.MockGCSFileSystemÚrc                    s$   d|vrt ‚ttj ˆ d¡|dd�S )NÚwztest.parquetrn   )rm   )ÚFileNotFoundErrorr   Úosr   Újoin)r   r   r|   r   ©Útmpdirr   r   r   Ö   s    z<test_to_parquet_gcs_new_file.<locals>.MockGCSFileSystem.openN)r„   )r   r   r    r   r   r‰   r   r   r"   Õ   s   r"   zgcsfs.GCSFileSystemr}   TN)r<   Zenginer^   )
r%   r&   r   r(   r   rK   rL   r   rR   rS   )rW   rŠ   r(   rY   r"   r   r‰   r   Útest_to_parquet_gcs_new_fileÅ   s    


üÿ	ÿr‹   r   c                   C   s6   t  t¡� tdƒ W d   ƒ n1 s(0    Y  d S )Nr}   )rU   Zexternal_error_raisedÚImportErrorr   r   r   r   r   Útest_gcs_not_present_exceptioná   s    r�   )(Úior   r‡   r@   rf   rb   ÚnumpyrK   r%   Zpandas.compat.pyarrowr   Zpandasr   r   r   r   r   r	   r
   Zpandas._testingZ_testingrU   Zpandas.utilr   ÚtdrO   ÚfilterwarningsZ
pytestmarkZfixturer   Z
single_cpuZparametrizer[   Úbytesr:   rl   rƒ   r‹   Zskip_if_installedr�   r   r   r   r   Ú<module>   s0   $	ÿ
<
0