Ë
    KU h   ã                   óâ  — 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
mZmZmZmZmZmZ d dlmZ d dlmZ ej.                  j1                  d«      Zej4                  d„ «       Zej.                  j8                  ej.                  j;                  dg d¢«      d	„ «       «       Zd
edede fd„Z!ej.                  j;                  dddg«      d„ «       Z"d„ Z# ejH                  d«      d„ «       Z%y)é    )ÚBytesION)Ú	DataFrameÚIndexÚ
date_rangeÚread_csvÚ
read_excelÚ	read_jsonÚread_parquet)Ú_test_decoratorsz=ignore:Passing a BlockManager to DataFrame:DeprecationWarningc                  óÖ   ‡— t        j                  d«       t        j                  d«      } t        «       Šd„ ‰_         G ˆfd„d| j                  «      }| j                  d|d¬«       ‰S )	z"Emulate GCS using a binary buffer.ÚgcsfsÚfsspecc                   ó   — y)NT© r   ó    úP/var/www/timesheet/venv/lib/python3.12/site-packages/pandas/tests/io/test_gcs.pyú<lambda>zgcs_buffer.<locals>.<lambda>"   s   � r   c                   ó(   •— e Zd Zeˆ fd„«       Zd„ Zy)ú%gcs_buffer.<locals>.MockGCSFileSystemc                  ó*   •— ‰j                  d«       ‰S )Nr   )Úseek)ÚargsÚkwargsÚ
gcs_buffers     €r   Úopenz*gcs_buffer.<locals>.MockGCSFileSystem.open%   s   ø€ à�O‰O˜AÔØÐr   c                 ó   — |ddœgS )NÚfile)ÚnameÚtyper   )ÚselfÚpathr   s      r   Úlsz(gcs_buffer.<locals>.MockGCSFileSystem.ls*   s   € à!¨6Ñ2Ð3Ð3r   N)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r"   )r   s   €r   ÚMockGCSFileSystemr   $   s   ø„ Ø	ó	ó 
ð	ó	4r   r'   ÚgsT)Úclobber)ÚpytestÚimportorskipr   ÚcloseÚAbstractFileSystemÚregister_implementation)r   r'   r   s     @r   r   r      sb   ø€ ô ×Ñ˜Ô Ü× Ñ  Ó*€Fä“€JÙ#€JÔö4˜F×5Ñ5ô 4ð ×"Ñ" 4Ð):ÀDÐ"ÔIàÐr   Úformat)ÚcsvÚjsonÚparquetÚexcelÚmarkdownc           	      óX  ‡
— t        ddgdt        j                  gddgt        dd¬«      d	œ«      }d
|› �}|dk(  r$|j	                  |d¬«       t        |dgd¬«      }�n*|dk(  r$d}|j                  |«       t        |dgd¬«      }�n|dk(  r |j                  |«       t        |dg¬«      }nÜ|dk(  rªt        j                  d«       t        j                  d«      Š
 G ˆ
fd„d‰
j                  «      }|j                  «       5 }|j                  ‰
d|«       |j                  |«       t!        |«      }ddd«       |j#                  «       }	|	j$                  dk(  s/J ‚|dk(  r(t        j                  d«       |j'                  |«       |}t)        j*                  |«       y# 1 sw Y   ŒnxY w)zE
    Test that many to/read functions support GCS.

    GH 33987
    é   é   ç       @ÚtÚsú
2018-06-18é   ©Úperiods©ÚintÚfloatÚstrÚdtzgs://test/test.r0   T)ÚindexrC   r   )Úparse_datesÚ	index_colr3   zgs://test/test.xlsxr1   )Úconvert_datesr2   Úpyarrowz
pyarrow.fsc                   ó"   •— e Zd Zeˆ fd„«       Zy)ú(test_to_read_gcs.<locals>.MockFileSystemc                 ó¾   •— t        d«       t        j                  | j                  dd«      «      j	                  «       j                  «       }‰j                  |«      S )NzUsing pyarrow filesystemzgs://Ú )ÚprintÚpathlibÚPathÚreplaceÚabsoluteÚas_uriÚLocalFileSystem)r!   Úto_localÚpa_fss     €r   Úfrom_uriz1test_to_read_gcs.<locals>.MockFileSystem.from_uriX   sH   ø€ äÐ0Ô1Ü"Ÿ<™<¨¯©°W¸bÓ(AÓB×KÑKÓM×TÑTÓV�Ø×,Ñ,¨XÓ6Ð6r   N)r#   r$   r%   r&   rV   )rU   s   €r   ÚMockFileSystemrJ   W   s   ø„ Øó7ó ñ7r   rW   Ú
FileSystemNz2Using pyarrow filesystem
Using pyarrow filesystem
r4   Útabulate)r   ÚnpÚnanr   Úto_csvr   Úto_excelr   Úto_jsonr	   r*   r+   rX   ÚcontextÚsetattrÚ
to_parquetr
   Ú
readouterrÚoutÚto_markdownÚtmÚassert_frame_equal)r   r/   ÚmonkeypatchÚcapsysÚdf1r!   Údf2rW   ÚmÚcapturedrU   s             @r   Útest_to_read_gcsrm   5   s”  ø€ ô à�q�6Øœ2Ÿ6™6�]Ø˜�:Ü˜\°1Ô5ñ		
ó€Cð ˜V˜HÐ%€Dà�‚Ø�
‰
�4˜tˆ
Ô$Ü�t¨$¨¸1Ô=ŠØ	�7Ò	Ø$ˆØ�‰�TÔÜ˜¨D¨6¸QÔ?ŠØ	�6Ò	Ø�‰�DÔÜ˜¨T¨FÔ3‰Ø	�9Ò	Ü×Ñ˜IÔ&Ü×#Ñ# LÓ1ˆö	7˜U×-Ñ-ô 	7ð × Ñ Ó"ð 	% aØ�I‰I�e˜\¨>Ô:Ø�N‰N˜4Ô Ü˜tÓ$ˆC÷	%ð ×$Ñ$Ó&ˆØ�|‰|ÐUÒUÐUÐUØ	�:Ò	Ü×Ñ˜JÔ'Ø�‰˜ÔØˆä×Ñ˜#˜sÕ#÷	%ð 	%ús   Ä0F Æ F)ÚresultÚexpectedÚcompressionc                 ól  — |dk(  r›t        j                  t        | «      «      5 }t        j                  t        |«      «      5 }t        |j	                  «       |j	                  «       «      D ]   \  }}|j
                  |j
                  k(  rŒ J ‚ 	 ddd«       ddd«       y|dk(  rØt        j                  t        | «      ¬«      5 }t        j                  t        |«      ¬«      5 }t        |j                  «       |j                  «       «      D ][  \  }	}
|j                  |	«      }|j                  |
«      }|du |du k(  sJ ‚|€Œ6|€Œ9|j                  «       |j                  «       k(  rŒ[J ‚ 	 ddd«       ddd«       y| |k(  sJ ‚y# 1 sw Y   Œ÷xY w# 1 sw Y   yxY w# 1 sw Y   Œ2xY w# 1 sw Y   yxY w)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   rr   ÚinfolistÚCRCÚtarfiler   Ú
getmembersÚextractfileÚread)rn   ro   rp   ÚexpÚresÚres_infoÚexp_infoÚtar_expÚtar_resÚtar_res_infoÚtar_exp_infoÚactual_fileÚexpected_files                r   Úassert_equal_zip_safer‡   l   s²  € ð �eÒä�_‰_œW V›_Ó-ð 	4°´g·o±oÜ�HÓó7
ð 	4àÜ&)¨#¯,©,«.¸#¿,¹,».Ó&Iò 4Ñ"�˜(Ø—|‘| x§|¡|Ó3Ð3Ð3ñ4÷	4÷ 	4ð 	4ð
 
˜Ò	Ü�\‰\¤'¨&£/Ô2ð 
	F°g¼w¿|¹|Ü˜HÓ%ô@
ð 
	FàÜ.1Ø×"Ñ"Ó$ g×&8Ñ&8Ó&:ó/ò FÑ*�˜lð &×1Ñ1°,Ó?�Ø '× 3Ñ 3°LÓ A�Ø# tÐ+°À$Ð1FÒGÐGÐGØÑ*¨}Ñ/HØ&×+Ñ+Ó-°×1CÑ1CÓ1EÓEÐEÐEñF÷
	F÷ 
	Fð 
	Fð ˜Ò!Ð!Ñ!÷%	4ð 	4ú÷ 	4ð 	4ú÷
	Fð 
	Fú÷ 
	Fð 
	Fúsa   ¤FÁAFÂFÂFÃ F*Ã%AFÅFÅ!FÅ)FÅ-F*ÆF	ÆFÆFÆF'	Æ#F*Æ*F3Úencodingúutf-8Úcp1251c                 ó  — t        dt        j                  d«      j                  d«      z  t	        t        d«      t        ¬«      t	        t        d«      D �cg c]  }d|› �‘Œ	 c}t        ¬«      ¬«      }d	|i}|d
k(  rd|d<   t        «       }|j                  |||d¬«       d}|j                  |||¬«       | j                  «       }	|j                  «       }
t        |	|
|«       t        |d||¬«      }t        j                  ||«       ||   }d|d	<   |d|› �z  }|j                  |||¬«       | j                  «       }	|j                  «       }
t        |	|
|«       t        |dd|¬«      }t        j                  ||«       yc c}w )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   )é   é   ÚABCD)Údtyper�   zi-)ÚcolumnsrD   ÚmethodÚgzipr6   ÚmtimeÚwb)rp   rˆ   Úmodeúgs://test/test.csv)rp   rˆ   r   )rF   rp   rˆ   Úinferú.N)r   rZ   ÚarangeÚreshaper   ÚlistÚobjectÚranger   r\   Úgetvaluer‡   r   re   rf   )r   Úcompression_onlyrˆ   Úcompression_to_extensionÚiÚdfrp   ÚbufferÚpath_gcsr~   ro   Úread_dfÚfile_exts                r   Ú$test_to_csv_compression_encoding_gcsr¨   ‹   s|  € ô 
ØŒb�i‰i˜‹n×$Ñ$ WÓ-Ñ-Ü”d˜6“l¬&Ô1Ü¤u¨R£yÖ1 !�r˜!˜’XÒ1¼Ô@ô
€Bð Ð-Ð.€KØ˜6Ò!Ø ˆ�GÑÜ‹Y€FØ‡I�Iˆf +¸Àt€IÔLð $€HØ‡I�Iˆh K¸(€IÔCØ
×
Ñ
Ó
€CØ�‰Ó €HÜ˜#˜xÐ)9Ô:äØ˜AÐ+;Àhô€Gô ×Ñ˜"˜gÔ&ð (Ð(8Ñ9€HØ#€K�ÑØ�!�H�:�Ñ€HØ‡I�Iˆh K¸(€IÔCà
×
Ñ
Ó
€CØ�‰Ó €HÜ˜#˜xÐ)9Ô:ä�x¨1¸'ÈHÔU€GÜ×Ñ˜"˜gÕ&ùòC 2s   ÁFc           	      ó,  ‡— t        j                  d«       t        j                  d«       ddlm} t	        ddgdt
        j                  gdd	gt        d
d¬«      dœ«      } G ˆfd„d|«      }| j                  d|«       |j                  dddd¬«       y)zCRegression test for writing to a not-yet-existent GCS Parquet file.Úfastparquetr   r   )r-   r6   r7   r8   r9   r:   r;   r<   r=   r?   c                   ó   •— e Zd Zdˆ fd„	Zy)ú7test_to_parquet_gcs_new_file.<locals>.MockGCSFileSystemc                 óp   •— d|vrt         ‚t        t        j                  j	                  ‰d«      |d¬«      S )NÚwztest.parquetr‰   )rˆ   )ÚFileNotFoundErrorr   Úosr!   Újoin)r    r!   r–   r   Útmpdirs       €r   r   z<test_to_parquet_gcs_new_file.<locals>.MockGCSFileSystem.openÍ   s.   ø€ Ø˜$‰Ü'Ð'ÜœŸ™Ÿ™ V¨^Ó<¸dÈWÔUÐUr   N)Úr)r#   r$   r%   r   )r²   s   €r   r'   r¬   Ì   s	   ø„ ö	Vr   r'   zgcsfs.GCSFileSystemr—   TN)rD   Úenginerp   )
r*   r+   r   r-   r   rZ   r[   r   r`   ra   )rg   r²   r-   ri   r'   s    `   r   Útest_to_parquet_gcs_new_filerµ   ¼   s‘   ø€ ä
×Ñ˜Ô&Ü
×Ñ˜Ô å)ä
à�q�6Øœ2Ÿ6™6�]Ø˜�:Ü˜\°1Ô5ñ		
ó€CöVÐ.ô Vð ×ÑÐ-Ð/@ÔAØ‡N�NØ D°ÈDð õ r   r   c                  óv   — t        j                  t        «      5  t        d«       d d d «       y # 1 sw Y   y xY w)Nr—   )re   Úexternal_error_raisedÚImportErrorr   r   r   r   Útest_gcs_not_present_exceptionr¹   Ø   s.   € ä	×	!Ñ	!¤+Ó	.ñ 'ÜÐ%Ô&÷'÷ 'ñ 'ús   š/¯8)&Úior   r°   rN   ry   ru   ÚnumpyrZ   r*   Úpandasr   r   r   r   r   r	   r
   Úpandas._testingÚ_testingre   Úpandas.utilr   ÚtdÚmarkÚfilterwarningsÚ
pytestmarkÚfixturer   Ú
single_cpuÚparametrizerm   ÚbytesrB   r‡   r¨   rµ   Úskip_if_installedr¹   r   r   r   ú<module>rÉ      s  ðÝ Û 	Û Û Û ã Û ÷÷ ñ õ Ý .à�[‰[×'Ñ'ØCó€
ð
 ‡�ñó ðð2 ‡�×ÑØ‡�×Ñ˜Ò#RÓSñ2$ó Tó ð2$ðj" %ð "°5ð "Àsó "ð> ‡�×Ñ˜ g¨xÐ%8Ó9ñ-'ó :ð-'ò`ð8 €×Ñ�gÓñ'ó ñ'r   