Ë
    ž…jC  ã                   óî  — 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j2                  j5                  d«      Zej8                  d„ «       Zej2                  j<                  ej2                  j?                  dg d	¢«      d
„ «       «       Z de!de!de"fd„Z#ej2                  j?                  dddg«      d„ «       Z$d„ Z% ejL                  d«      d„ «       Z'y)é    )Ú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                  óÖ   ‡— 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   ó    úY/root/aria/tools/markitdown-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           
      ó(  ‡— t        ddgdt        j                  gddgt        ddd¬	«      d
œ«      }d|› �}|dk(  r$|j	                  |d¬«       t        |dgd¬«      }�ng|dk(  r$d}|j                  |«       t        |dgd¬«      }�n>|dk(  r#|j                  |d¬«       t        |dg¬«      }�n|dk(  rät        j                  d«       t        j                  d«      Š G ˆfd„d‰j                  «      }|j                  t        j                  j                  t          t"        d¬«      «       |j%                  «       5 }	|	j'                  ‰d|«       |j)                  |«       t+        |«      }d d d «       |j-                  «       }
|
j.                  d!k(  s/J ‚|d"k(  r(t        j                  d#«       |j1                  |«       |}|d d  }|d$v r!|d   j2                  j5                  d%«      |d<   t7        j8                  |«       y # 1 sw Y   Œ˜xY w)&zE
    Test that many to/read functions support GCS.

    GH 33987
    é   é   ç       @ÚtÚsú
2018-06-18é   Úns)ÚperiodsÚunit)ÚintÚfloatÚstrÚdtzgs://test/test.r1   T)ÚindexrD   r   )Úparse_datesÚ	index_colr4   zgs://test/test.xlsxr2   Úiso)Údate_format)Úconvert_datesr3   Ú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_uriZ   sH   ø€ äÐ0Ô1Ü"Ÿ<™<¨¯©°W¸bÓ(AÓB×KÑKÓM×TÑTÓV�Ø×,Ñ,¨XÓ6Ð6r   N)r$   r%   r&   r'   rY   )rX   s   €r   ÚMockFileSystemrM   Y   s   ø„ Øó7ó ñ7r   rZ   z&pyarrow 17 broke the mocked filesystem)ÚraisesÚreasonÚ
FileSystemNz2Using pyarrow filesystem
Using pyarrow filesystem
r5   Útabulate)r1   r4   r2   Úus)r   ÚnpÚnanr   Úto_csvr   Úto_excelr	   Úto_jsonr
   r+   r,   r]   ÚapplymarkerÚmarkÚxfailr   Ú	TypeErrorÚcontextÚsetattrÚ
to_parquetr   Ú
readouterrÚoutÚto_markdownrD   Úas_unitÚtmÚassert_frame_equal)r   r0   ÚmonkeypatchÚcapsysÚrequestÚdf1r"   Údf2rZ   ÚmÚcapturedÚexpectedrX   s               @r   Útest_to_read_gcsrz   7   sý  ø€ ô à�q�6Øœ2Ÿ6™6�]Ø˜�:Ü˜\°1¸4Ô@ñ		
ó€Cð ˜V˜HÐ%€Dà�‚Ø�
‰
�4˜tˆ
Ô$Ü�t¨$¨¸1Ô=ŠØ	�7Ò	Ø$ˆØ�‰�TÔÜ˜¨D¨6¸QÔ?ŠØ	�6Ò	Ø�‰�D eˆÔ,Ü˜¨T¨FÔ3ŠØ	�9Ò	Ü×Ñ˜IÔ&Ü×#Ñ# LÓ1ˆö	7˜U×-Ñ-ô 	7ð 	×ÑÜ�K‰K×ÑÜ(Ð(Ü Ø?ð ó ô	
ð × Ñ Ó"ð 	% aØ�I‰I�e˜\¨>Ô:Ø�N‰N˜4Ô Ü˜tÓ$ˆC÷	%ð ×$Ñ$Ó&ˆØ�|‰|ÐUÒUÐUÐUØ	�:Ò	Ü×Ñ˜JÔ'Ø�‰˜ÔØˆà‘1ˆv€HØÐ)Ñ)Ø! $™×*Ñ*×2Ñ2°4Ó8ˆ�‰ä×Ñ˜#˜xÕ(÷	%ð 	%ús   Å0HÈHÚresultry   Ú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   r~   ÚinfolistÚCRCÚtarfiler   Ú
getmembersÚextractfileÚread)r{   ry   r|   Ú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“   y   s±  € ð �eÒô �O‰OœG F›OÓ,ð	4Ø03Ü�O‰OœG HÓ-Ó.ð	4à25ä&)¨#¯,©,«.¸#¿,¹,».Ó&Iò 4Ñ"�˜(Ø—|‘| x§|¡|Ó3Ð3Ð3ñ4÷		4÷ 	4ð 	4ð 
˜Ò	ä�L‰L¤¨£Ô1ð	FØ5<Ü�L‰L¤¨Ó!2Ô3ð	Fà7>ä.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        d«      D �cg c]  }d|› �‘Œ	 c}«      ¬«      }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   )é   é   ÚABCDr™   zi-)ÚcolumnsrE   ÚmethodÚgzipr7   ÚmtimeÚwb)r|   r”   Úmodeúgs://test/test.csv)r|   r”   r   )rG   r|   r”   Úinferú.N)r   r`   ÚarangeÚreshaper   ÚlistÚranger   rb   Úgetvaluer“   r   rp   rq   )r   Úcompression_onlyr”   Úcompression_to_extensionÚiÚdfr|   ÚbufferÚpath_gcsrŠ   ry   Úread_dfÚfile_exts                r   Ú$test_to_csv_compression_encoding_gcsr²   š   sx  € ô 
ØŒb�i‰i˜‹n×$Ñ$ WÓ-Ñ-Ü”d˜6“lÓ#Ü¤u¨R£yÖ1 !�r˜!˜’XÒ1Ó2ô
€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   ÁE7c                 ó&  ‡— t        j                  d«       t        j                  d«       ddlm} t	        ddgdt
        j                  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.   r7   r8   r9   r<   r=   )r?   )rA   rB   rD   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)rE   Úenginer|   )
r+   r,   r   r.   r   r`   ra   r   rj   rk   )rr   r¼   r.   ru   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¢   )rp   Úexternal_error_raisedÚImportErrorr   r   r   r   Útest_gcs_not_present_exceptionrÃ   æ   s.   € ä	×	!Ñ	!¤+Ó	.ñ 'ÜÐ%Ô&÷'÷ 'ñ 'ús   š/¯8)(Úior   rº   rQ   r…   r�   Únumpyr`   r+   Úpandas.compat.pyarrowr   Úpandasr   r   r   r   r	   r
   r   Úpandas._testingÚ_testingrp   Úpandas.utilr   Útdrf   ÚfilterwarningsÚ
pytestmarkÚfixturer   Ú
single_cpuÚparametrizerz   ÚbytesrC   r“   r²   r¿   Úskip_if_installedrÃ   r   r   r   ú<module>rÓ      s	  ðÝ Û 	Û Û Û ã Û å 6÷÷ ñ õ Ý .à�[‰[×'Ñ'ØCó€
ð
 ‡�ñó ðð2 ‡�×ÑØ‡�×Ñ˜Ò#RÓSñ=)ó Tó ð=)ð@" %ð "°5ð "Àsó "ðB ‡�×Ñ˜ g¨xÐ%8Ó9ñ-'ó :ð-'ò`ð6 €×Ñ�gÓñ'ó ñ'r   