
    g@                        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 d dl	mZmZ 	 d dlZd dlmZ d dl	mZ ej,                  j                  Zej,                  j                   d        Zej,                  j                   d        Zej,                  j                   d        Zej,                  j                   d        Zej,                  j                   d	        Zej,                  j                   ej,                  j;                  d
g d      d               Zej,                  j                   ej,                  j;                  dddg      d               Zej,                  j;                  d
g d      d        Z d Z!ej,                  j                   d        Z"ej,                  j                   d        Z#ej,                  j                   d        Z$d Z%y# e$ r dZY w xY w# e$ r dZY w xY w# e$ r dxZZY w xY w)    N)_check_roundtrip)_read_table_write_table)_roundtrip_pandas_dataframec                     t        j                  t        j                  ddd      gd      } | j                  j	                  d      } | | _        t        j                  | | j                  j                  d      d| 	      }t        j                         }t        j                  j                  |      }t        ||       |j                  d
       t        j                   |      }|j#                         }t%        j&                  ||       y )N  	      zdatetime64[us]dtypeutcz
US/Eastern)tz_aware
tz_easternindexr   )pdSeriesdatetimedttz_localizer   	DataFrame
tz_convertioBytesIOpaTablefrom_pandasr   seekpqread_pandas	to_pandastmassert_frame_equal)sdffarrow_table
table_readdf_reads         X/var/www/openai/venv/lib/python3.12/site-packages/pyarrow/tests/parquet/test_datetime.pytest_pandas_parquet_datetime_tzr+   4   s    
 			8$$T1a019IJA	AAG 
1%&TT__\%BD
B 	

A((&&r*Ka FF1I"J""$G"g&    c            	          t        j                   ddddddt         j                  j                        } t        j                  d| gi      }t        |i        y )Ni        -   )tzinfofoowrite_kwargs)r   timezoner   r   r   r   )valuer%   s     r*   test_datetime_timezone_tzinfor7   O   sL    dAq!R%-%6%6%:%:<E	uug&	'B4r,   c                 b   ddl m}  |       }t        j                  dt        j                  t        j
                  d                  g}t        j                  g dd      d d t        j                  g dd      g|d<   t        j                  |      }t        j                  |      }| d	z  }t        j                  j                  ||
      }t        ||dd       t        |      }|j                         }	|j!                         }
t#        |
d         D ]@  \  }}t%        |t        j&                        s!|j)                  d      |
j*                  |df<   B t-        j.                  |
|	       t1        j2                  t4              5  t        ||dd       d d d        y # 1 sw Y   y xY w)Nr   )OrderedDict
datetime64ms)z2007-07-13T01:23:34.123456789N2010-08-13T05:46:57.437699912datetime64[ms]r   )z2007-07-13T02Nr<   zpandas_roundtrip.parquetschema2.6usversioncoerce_timestampszM8[us]unknown)collectionsr9   r   fieldlist_	timestampnparrayr   r   r?   r   r   r   r   r!   copy	enumerate
isinstancendarrayastypelocr"   r#   pytestraises
ValueError)tempdirr9   arraysfieldsr%   r?   filenamer'   r(   r)   df_expectedixs                r*   test_coerce_timestampsr\   X   si   ' ]Fhh|xxT 235 6F 	 3 (	) 	
 3 (	)F< 
f	BYYvF33H((&&r&&9KhNX&J""$G'')K+l341a$/0xx/AKOOA|O, 5 +w/	z	"[(E'0	2 
#	"	"s   F%%F.c           	      .   t        j                   ddddddd      }t        j                   dddddd      }t        j                  dt        j                  d            g}d||gi}t	        j
                  |      }t        j                  |      }| dz  }t        j                  j                  ||      }t        ||d	d
d       t        |      }	|	j                         }
d||gi}t	        j
                  |d      }t        j                  ||
       y)zc
    ARROW-2555: Test that we can truncate timestamps when coercing if
    explicitly allowed.
    r   r.   )yearmonthdayhourminutesecondmicrosecond)r^   r_   r`   ra   rb   rc   r:   rA   zpandas_truncated.parquetr>   r@   r;   T)rC   rD   allow_truncated_timestampsr=   r   N)r   r   rG   rI   r   r   r?   r   r   r   r   r!   r"   r#   )rU   dt_usdt_ms	fields_us	arrays_usdf_us	schema_usrX   table_ustable_msdf_msarrays_expectedrY   s                r*    test_coerce_timestamps_truncatedrp      s    4qaa%&A7E4qaa%&(E ,T(:;<Iu~.ILL#E		)$I33Hxx##E)#<H8Ud,028$H E#eU^4O,,6FGK+u-r,   c           	         t        j                         }t        j                  g dd      }t        j                  ||      }t        j                         }|j                  d      dz  }t        j                  ||      }t        j                  d      }t        j                  d      j                  d	z  }t        j                  ||d
z   |dz   gd      }	t        j                  |	|      }
t        j                  d      }t        j                  dd      }t        j                  ||      }t        j                  d      }t        j                  |j                  d      |      }t        j                  d      }t        j                  ||      }t        j                  d      }t        j                  |d	z  |      }t        j                  d      }t        j                  d      j                  }t        j                  ||d	z   |dz   gd      }t        j                  ||      }t         j                  j                  |||
||||gg d      }t         j                  j                  |||
||||gg d      }t        ||d       t        j                  d      }t        j                  dd      }t        j                  ||      }t        j                  d      }t        j                  dd      }t        j                  ||      }t        j                  d      }t        j                  dd      }t        j                  ||      }t         j                  j                  |||gg d      }t         j                  j                  |||gg d      }| dz  }t!        ||d       t#        j$                  |      j&                  }t)        d      D ]"  }|j+                  |      j,                  dk(  r"J  t/        |      }|j1                  |      sJ t        j                  d      } t        j                  |dz  d      }!t        j                  |!|       }"t        j                  d      }#t        j                  |d	z  d      }$t        j                  |$|#      }%t         j                  j                  |"|%|gg d      }| dz  }t!        ||dd       t#        j$                  |      j&                  }t)        d      D ]"  }|j+                  |      j,                  dk(  r"J  t/        |      }|j1                  |      sJ | dz  }t!        ||dd !       t#        j$                  |      j&                  }t)        d      D ]"  }|j+                  |      j,                  dk(  r"J  t/        |      }|j1                  |      sJ y )"N)ikC  ilC  imC  int32r   typeint64i \&rA   z
2001-01-01  r.      r;      i4r$   ns  )date32date64ztimestamp[us]z	time32[s]z
time64[us]ztime32_from64[s]ztimestamp[ns]r@   expectedrC      )zts[ms]zts[us]zts[ns]zint64_timestamps.parquetrC   INT64i@B z!explicit_int96_timestamps.parquetTrC   use_deprecated_int96_timestampsINT96zspark_int96_timestamps.parquetspark)rC   flavor)r   r|   rJ   rK   r}   rP   rI   r   	Timestampr6   time32arangetime64r   from_arraysr   r   r   ParquetFiler?   rangecolumnphysical_typer   equals)&rU   t1data1a1t2data2a2t3startdata3a3t4data4a4t5a5t6a6ex_t6ex_a6t7data7a7tabler   t0data0a0rX   parquet_schemarZ   
read_tablet0_nsdata0_nsa0_nst1_nsdata1_nsa1_nss&                                         r*   test_date_time_typesr      s   	BHH*':E	%b	!B	BLL!H,E	%b	!B	d	BLL&,,t3EHHeUQY	2'BE	%b	!B	4BIIat$E	%b	!B	4B	%,,w'b	1B	3B	%b	!BIIdOEHHUT\.E	d	BLL&,,EHHeUT\54<8"$E	%b	!BHH  "b"b"b"!="34E xx##RRR$C%67H UXu=	d	BIIaw'E	%b	!B	d	BIIaw'E	%b	!B	d	BIIaw'E	%b	!BHH  "b"!?AExx##RRL$BDH 33H%0^^H-44N1X$$Q'55@@@ X&JX&&&LLExxw7HHHXE*ELLExxG4HHHXE*Exx##UE2$6$BDH <<H%157^^H-44N1X$$Q'55@@@ X&JX&&& 99H%!^^H-44N1X$$Q'55@@@ X&JX&&&r,   unitr$   r;   rA   rz   c                    t        j                  d      j                  dz  }t        j                  ||dz   dd      }|dz  }|dz  }|dz  }t        j                  |t        j                  d      	      }t        j                  |t        j                  d
      	      }t        j                  |t        j                  d      	      }t        j                  |t        j                  d      	      }	||||	d}
g d}t
        j                  j                  ||||	g|      }t
        j                  j                  |
j                  |       gdz  |      }d| i}t        |||d       t        ||d|d       y )N
2010-01-01 ʚ;
   r.   ru   r   rv   r$   rs   r;   rA   rz   r   )ts_sts_msts_usts_nsr   coerce_int96_timestamp_unitT)read_table_kwargsr   r@   )rC   r   r   )r   r   r6   rJ   r   r   rK   rI   r   r   getr   )r   i_sd_sd_msd_usd_nsa_sa_msa_usa_nsrV   namesr   r   r   s                  r*    test_coerce_int96_timestamp_unitr     sB    ,,|
$
*
*Z
7C
))Cr1G
4C:D$;D$;D
((3R\\#.
/C88Dr||D12D88Dr||D12D88Dr||D12Dd$d;F/EHH  #tT4!8%@E xx##VZZ%5$6q$8%@H6=UH'859; UHe'859;r,   pq_reader_methodr   r   c                    d }t        j                   ddd      t        j                   ddd      t        j                   ddd      g}t        j                  d|i      }t        j                  |      }|dz  }t        j                  ||dd	
        || |      }t        j                         5  t        j                  ddt               |d   j                         |k7  sJ 	 d d d         || |d      }|j                  d      }	|d   j                  t              |d<   t        j                   ||	       y # 1 sw Y   XxY w)Nc                     | dk(  r$t        j                  |fi |j                         S | dk(  rt        j                  |fi |S y )Nr   r   )r   r   readr   )r   rX   kwargss      r*   	get_tablez7test_coerce_int96_timestamp_overflow.<locals>.get_table0  sH    },>>(5f5::<<-==4V44 .r,   rv   r.   r{     az test_round_trip_overflow.parquetT1.0)r   rC   ignorez,Discarding nonzero nanoseconds in conversionr$   )r   )timestamp_as_object)r   r   r   r   r   r   write_tablewarningscatch_warningsfilterwarningsUserWarning	to_pylistr!   rP   objectr"   r#   )
r   rU   r   oob_dtsr%   r   rX   	tab_errortab_correct
df_corrects
             r*   $test_coerce_int96_timestamp_overflowr   ,  s1   5 	$1%$1%$1%G
 
sGn	%BHHRLE;;HNN5(D "
 *H5I		 	 	" N +	- ~'')W444	 
# (K &&4&@JgnnV$BsG"j) 
#	"s   /4D;;E)r;   rA   rz   c                     t        j                  | d      }t        j                  g d|      }t        j                  |gdg      }t	        |       y )NAmerica/New_Yorktz)r.   rw   rx   rs   f0r   )r   rI   rK   r   r   )r   tyarrts       r*   test_timestamp_restore_timezoner   U  sA     
d1	2B
((92
&C
#tf%AQr,   c                  0   t        j                  dd      } t        j                  g d|       }t        j                  |gdg      }t        j                  dd      }t        j                  |j	                  |      gdg      }t        ||d	
       y )Nrz   r   r   )rv   r{   r   rs   r   r   rA   2.4r~   )r   rI   rK   r   castr   )r   r   r   ty_usr   s        r*   *test_timestamp_restore_timezone_nanosecondr   ^  st     
d1	2B
((%B
/CHHcU4&)ELL"45Exx%)$8HUXu=r,   c                      t        j                  g dd      } t        j                  d| j                  gi      }t	        |i        y )N)z09:00z09:30z10:00z10:30z11:00z11:30z12:00z%H:%M)formattimer3   )r   to_datetimer   r   r   )timesr%   s     r*   $test_list_of_datetime_time_roundtripr   i  s=     NN .6=?E	v

|,	-B4r,   c                     t        j                  d      j                  dz  } t        j                  | | dz   dd      }|dz  }|dz  }|dz  }t        j                  |t        j                  d      	      }t        j                  |t        j                  d
      	      }t        j                  |t        j                  d      	      }t        j                  |t        j                  d      	      }g d}	g d}
t
        j                  j                  ||||g|
      }t
        j                  j                  ||||g|
      }t        ||d       t        ||d       t
        j                  j                  ||||g|
      }t        ||d       t
        j                  j                  ||||g|
      }|	D ]  }t        ||d
|        t
        j                  j                  ||||g|
      }|	D ]  }t        |||d        t
        j                  j                  ||||g|
      }|	D ]  }t        |||d        y )Nr   r   r   r.   ru   r   rv   r$   rs   r;   rA   rz   )r   r   r@   )zts:szts:mszts:uszts:nsr   r   r   r@   rD   rC   rB   Tr   )r   r   r6   rJ   r   r   rK   rI   r   r   r   )r   r   r   r   r   r   r   r   r   all_versionsr   r   r   vers                 r*   *test_parquet_version_timestamp_differencesr   r  s   
,,|
$
*
*Z
7C
))Cr1G
4C:D$;D$;D
((3R\\#.
/C88Dr||D12D88Dr||D12D88Dr||D12D(L/EHH  #tT4!8%@E xx##T4t$<eDHUHe4UHe4 xx##T4t$<eDHUHe4 xx##T4t$<eDHD#N  xx##T4t$<eDH#N " xx##T4t$<eDH#9=	? r,   c                    d}t        j                  dt        |      it        j                  dd|            }t        j
                  j                  |      }| dz  }	 t        j                  ||d	       |j                         sJ t        j                  |      }|j                  |      sJ | d
z  }t        j                  t              5  t        j                  ||dd       d d d        y # t        $ r Y w xY w# 1 sw Y   y xY w)Nr	   r[   z
2017-01-01rz   )freqperiodsr   zwritten.parquetr@   r   znot_written.parquetr;   r   )r   r   r   
date_ranger   r   r   r   r   	Exceptionexistsr   r   rR   rS   rT   )rU   nr%   tbrX   recovered_tables         r*   5test_noncoerced_nanoseconds_written_without_exceptionr    s     	
A	sE!HoMM,T1M
OB			b	!B**H
r8U3 ??mmH-O99_%%% ..H	z	"
r8tUK 
#	"   
#	"s    C3 D3	C?>C?Dc            	          dD  cg c].  } t        j                  g dt        j                  |             0 }} t         j                  j	                  |g d      }t        |       y c c} w )Nr   )r   r.   rw   rx   rs   )zd[s]zd[ms]zd[us]zd[ns])r   rK   durationr   r   r   )r   rV   r   s      r*   test_duration_typer
    s\     231$ hh|"++d*;<1  3HH  )LMEU	3s   3A()&r   r   r   numpyrJ   ImportErrorrR   pyarrowr   pyarrow.tests.parquet.commonr   pyarrow.parquetparquetr   r   r   pandasr   pandas.testingtestingr"   r   mark
pytestmarkr+   r7   r\   rp   r   parametrizer   r   r   r   r   r   r  r
   r,   r*   <module>r     s0  $  	    9 F
H [[  
 ' '4 5 5 '2 '2T . .: h' h'V !89; : ;: +m\-JK$* L $*N !34 5> 5 5 8? 8?v L L0_  	B  	B  NBs3   G G) G7 G&%G&)G43G47	HH