o
    Û­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 de!de!de"f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   úU/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pandas/tests/io/test_gcs.pyÚ<lambda>$   s    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ÚAbstractFileSystemÚ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rAd}| |¡ t|dgdd�}nw|dkrR| |¡ t	|dgd�}nf|dkr¨t
 d¡ t
 d¡‰ G ‡ fdd„dˆ jƒ}| t
jjt tdd�¡ | ¡ �}	|	 ˆ d|¡ | |¡ t|ƒ}W d  ƒ n1 s—w   Y  | ¡ }
|
jdks§J ‚n|dkr¸t
 d ¡ | |¡ |}t ||¡ dS )!zE
    Test that many to/read functions support GCS.

    GH 33987
    é   é   ç       @ÚtÚsú
2018-06-18é   ©Úperiods©ÚintÚfloatÚstrÚdtzgs://test/test.r*   T)Úindexr<   r   )Úparse_datesÚ	index_colr-   zgs://test/test.xlsxr+   )Úconvert_datesr,   Ú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_uriÚLocalFileSystem)r   Úto_local©Úpa_fsr   r   Úfrom_uriZ   s   
z1test_to_read_gcs.<locals>.MockFileSystem.from_uriN)r   r   r   r    rM   r   rK   r   r   ÚMockFileSystemY   s    rN   z&pyarrow 17 broke the mocked filesystem)ÚraisesÚreasonÚ
FileSystemNz2Using pyarrow filesystem
Using pyarrow filesystem
r.   Útabulate)r   ÚnpÚnanr   Úto_csvr   Úto_excelr   Úto_jsonr	   r$   r%   rQ   ÚapplymarkerÚmarkÚxfailr   Ú	TypeErrorÚcontextÚsetattrÚ
to_parquetr
   Ú
readouterrÚoutÚto_markdownÚtmÚassert_frame_equal)r   r)   ÚmonkeypatchÚcapsysÚrequestÚdf1r   Údf2rN   ÚmÚcapturedr   rK   r   Útest_to_read_gcs7   sR   	
üÿ
	



ýÿ


ý

rk   ÚresultÚexpectedÚcompressionc              	   C   sœ  |dkrSt  t| ƒ¡�>}t  t|ƒ¡�}t| ¡ | ¡ ƒD ]\}}|j|jks)J ‚qW d  ƒ n1 s4w   Y  W d  ƒ dS W d  ƒ dS 1 sLw   Y  dS |dkrÆtjt| ƒd��]}tjt|ƒd��<}t| ¡ | ¡ ƒD ]*\}	}
| 	|	¡}| 	|
¡}|du |du ksŠJ ‚|durœ|durœ| 
¡ | 
¡ ksœJ ‚qrW d  ƒ n1 s§w   Y  W d  ƒ dS W d  ƒ dS 1 s¿w   Y  dS | |ksÌJ ‚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   ro   ÚinfolistÚCRCÚtarfiler   Ú
getmembersÚextractfileÚread)rl   rm   rn   ÚexpÚresÚres_infoÚexp_infoÚtar_expÚtar_resÚtar_res_infoÚtar_exp_infoÚactual_fileÚexpected_filer   r   r   Úassert_equal_zip_safeu   s4   ÿÿPýÿÿ

€ùPýr„   Ú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r(d|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>¡   s    z8test_to_csv_compression_encoding_gcs.<locals>.<listcomp>r‰   )Úcolumnsr=   ÚmethodÚgzipr/   ÚmtimeÚwb)rn   r…   Úmodeúgs://test/test.csv)rn   r…   r   )r?   rn   r…   ÚinferÚ.N)r   rS   ÚarangeÚreshaper   ÚlistÚranger   rU   Úgetvaluer„   r   rb   rc   )r   Úcompression_onlyr…   Úcompression_to_extensionÚdfrn   ÚbufferÚpath_gcsr{   rm   Úread_dfÚ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.Úfastparquetr   r   )r'   r/   r0   r1   r2   r3   r4   r5   r6   r8   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.parquetr†   )r…   )Ú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=   Úenginern   )
r$   r%   r   r'   r   rS   rT   r   r]   r^   )rd   r¬   r'   rg   r!   r   r«   r   Útest_to_parquet_gcs_new_fileÅ   s   


üÿ	
ÿr®   r   c                   C   s8   t  t¡� tdƒ W d   ƒ d S 1 sw   Y  d S )Nr•   )rb   Úexternal_error_raisedÚImportErrorr   r   r   r   r   Útest_gcs_not_present_exceptioná   s   
"ÿr±   )(Úior   r©   rD   rv   rr   ÚnumpyrS   r$   Úpandas.compat.pyarrowr   Úpandasr   r   r   r   r   r	   r
   Úpandas._testingÚ_testingrb   Úpandas.utilr   ÚtdrY   ÚfilterwarningsÚ
pytestmarkÚfixturer   Ú
single_cpuÚparametrizerk   Úbytesr;   r„   r¤   r®   Úskip_if_installedr±   r   r   r   r   Ú<module>   s2    $	ÿ
<
0