
    .iC                        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/app/trading-bot/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    OOA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4F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(  rt        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"<<Wb(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    q6266]:\14@		
C VH%D

4t
$t$1=	7	$TD6Q?	6	De,TF3	9	I&##L1	7U-- 	7 	KK(( ?  	
   " 	%aIIe\>:NN4 t$C	% $$&||UUUU	:	J'1vH))!$**2248#x(	% 	%s   0HHresultry   compressionc                 l   |dk(  rt        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(  rt        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 OOGFO,	403OOGH-.	425&)#,,.#,,.&I 4"(||x||3334		4 	4 	4 
	LL1	F5<LL!23	F7>.1""$g&8&8&:/ F*l &11,? ' 3 3L A#t+$1FGGG*}/H&++-1C1C1E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    
biin$$W--d6l#uRy1!r!X12
B -.K6! GYFIIf+tIL $HIIhK(IC



C H#x)9:A+;hG "g& ((89H#K!H:HIIhK(IC



C H#x)9:x1'HUG"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^<dW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    
&
 )
q6266]\15	
CV. V -/@ANN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 gx%89-' :-'`6 g' 'r   