Ë
    ¤e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
 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   ó    úV/var/www/skyplay_api_hub/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k(  r$|j	                  |d¬«       t        |dgd¬«      }�ne|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                  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                  |«       |}t3        j4                  |«       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.r1   T)ÚindexrD   r   )Úparse_datesÚ	index_colr4   zgs://test/test.xlsxr2   )Ú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'   rW   )rV   s   €r   ÚMockFileSystemrK   Y   s   ø„ Øó7ó ñ7r   rX   z&pyarrow 17 broke the mocked filesystem)ÚraisesÚreasonÚ
FileSystemNz2Using pyarrow filesystem
Using pyarrow filesystem
r5   Útabulate)r   ÚnpÚnanr   Úto_csvr   Úto_excelr	   Úto_jsonr
   r+   r,   r[   ÚapplymarkerÚmarkÚxfailr   Ú	TypeErrorÚcontextÚsetattrÚ
to_parquetr   Ú
readouterrÚoutÚto_markdownÚtmÚassert_frame_equal)r   r0   ÚmonkeypatchÚcapsysÚrequestÚdf1r"   Údf2rX   ÚmÚcapturedrV   s              @r   Útest_to_read_gcsru   7   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ð 	×ÑÜ�K‰K×ÑÜ(Ð(Ü Ø?ð ó ô	
ð × Ñ Ó"ð 	% aØ�I‰I�e˜\¨>Ô:Ø�N‰N˜4Ô Ü˜tÓ$ˆC÷	%ð ×$Ñ$Ó&ˆØ�|‰|ÐUÒUÐUÐUØ	�:Ò	Ü×Ñ˜JÔ'Ø�‰˜ÔØˆä×Ñ˜#˜sÕ#÷	%ð 	%ús   Ä>0GÇG$Ú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   rz   ÚinfolistÚCRCÚtarfiler   Ú
getmembersÚextractfileÚread)rv   rw   rx   Ú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�   u   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-)ÚcolumnsrE   ÚmethodÚgzipr7   ÚmtimeÚwb)rx   r�   Úmodeúgs://test/test.csv)rx   r�   r   )rG   rx   r�   Úinferú.N)r   r]   ÚarangeÚreshaper   ÚlistÚobjectÚranger   r_   Úgetvaluer�   r   rl   rm   )r   Úcompression_onlyr�   Úcompression_to_extensionÚiÚdfrx   ÚbufferÚpath_gcsr†   rw   Ú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.   r7   r8   r9   r:   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)rE   Úenginerx   )
r+   r,   r   r.   r   r]   r^   r   rg   rh   )rn   rº   r.   rq   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Ÿ   )rl   Úexternal_error_raisedÚImportErrorr   r   r   r   Útest_gcs_not_present_exceptionrÁ   á   s.   € ä	×	!Ñ	!¤+Ó	.ñ 'ÜÐ%Ô&÷'÷ 'ñ 'ús   š/¯8)(Úior   r¸   rO   r�   r}   Únumpyr]   r+   Úpandas.compat.pyarrowr   Úpandasr   r   r   r   r	   r
   r   Úpandas._testingÚ_testingrl   Úpandas.utilr   Útdrc   ÚfilterwarningsÚ
pytestmarkÚfixturer   Ú
single_cpuÚparametrizeru   ÚbytesrC   r�   r°   r½   Úskip_if_installedrÁ   r   r   r   ú<module>rÑ      s  ðÝ Û 	Û Û Û ã Û å 6÷÷ ñ õ Ý .à�[‰[×'Ñ'ØCó€
ð
 ‡�ñó ðð2 ‡�×ÑØ‡�×Ñ˜Ò#RÓSñ9$ó Tó ð9$ðx" %ð "°5ð "Àsó "ð> ‡�×Ñ˜ g¨xÐ%8Ó9ñ-'ó :ð-'ò`ð8 €×Ñ�gÓñ'ó ñ'r   