
    <>i@                        S SK r S SKrS SKr S SKrS SKrS SKrS SK	J
r
   S SKJr  S SK	JrJr   S SKrS SKJr  S SK	Jr  \R,                  R                  r\R,                  R                   S 5       r\R,                  R                   S 5       r\R,                  R                   S 5       r\R,                  R                   S 5       r\R,                  R                   S	 5       r\R,                  R                   \R,                  R;                  S
/ SQ5      S 5       5       r\R,                  R                   \R,                  R;                  SSS/5      S 5       5       r\R,                  R;                  S
/ SQ5      S 5       r S r!\R,                  R                   S 5       r"\R,                  R                   S 5       r#\R,                  R                   S 5       r$S r%g! \ a    Sr GNf = f! \ a    Sr GNf = f! \ a    S=rr GNf = f)    N)_check_roundtrip)_read_table_write_table)_roundtrip_pandas_dataframec                     [         R                  " [        R                  " SSS5      /SS9n U R                  R	                  S5      n X l        [         R                  " U U R                  R                  S5      S.U S	9n[        R                  " 5       n[        R                  R                  U5      n[        X25        UR                  S
5        [        R                   " U5      nUR#                  5       n[$        R&                  " X5        g )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         b/var/www/html/land-tabula/venv/lib/python3.13/site-packages/pyarrow/tests/parquet/test_datetime.pytest_pandas_parquet_datetime_tzr+   4   s    
 			8$$T1a019IJA	AG 
1%&TT__\%BD
B 	

A((&&r*K FF1I"J""$G"&    c            
          [         R                   " SSSSSS[         R                  R                  S9n [        R                  " SU /05      n[        U0 S9  g )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                 f   SSK Jn  U" 5       n[        R                  " S[        R                  " [        R
                  " S5      5      5      /n[        R                  " / SQSS9S S [        R                  " / SQSS9/US'   [        R                  " U5      n[        R                  " U5      nU S	-  n[        R                  R                  XES
9n[        XvSSS9  [        U5      nUR                  5       n	UR!                  5       n
[#        U
S   5       HF  u  p[%        U[        R&                  5      (       d  M&  UR)                  S5      U
R*                  US4'   MH     [,        R.                  " X5        [0        R2                  " [4        5         [        XvSSS9  S S S 5        g ! , (       d  f       g = f)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   sb   ' ]Fhh|xxT 235 6F 	 3 (	) 	
 3 (	)F< 
f	BYYvF33H((&&r&9KNX&J""$G'')K+l34a$$/0xx/AKOOA|O, 5 +/	z	"[E'0	2 
#	"	"s   F""
F0c           
         [         R                   " SSSSSSSS9n[         R                   " SSSSSSS9n[        R                  " S[        R                  " S5      5      /nSX/0n[        R
                  " U5      n[        R                  " U5      nU S-  n[        R                  R                  XVS9n[        XS	S
SS9  [        U5      n	U	R                  5       n
SX"/0n[        R
                  " USS9n[        R                  " X5        g)zW
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~.ILL#E		)$I33Hxx##E#<HUd,028$H E#e^4O,,6FGK+-r,   c           	         [         R                  " 5       n[        R                  " / SQSS9n[         R                  " X!S9n[         R                  " 5       nUR                  S5      S-  n[         R                  " XTS9n[         R                  " S5      n[        R                  " S5      R                  S	-  n[        R                  " XS
-   US-   /SS9n	[         R                  " XS9n
[         R                  " S5      n[        R                  " SSS9n[         R                  " XS9n[         R                  " S5      n[         R                  " UR                  S5      US9n[         R                  " S5      n[         R                  " UUS9n[         R                  " S5      n[         R                  " US	-  US9n[         R                  " S5      n[        R                  " S5      R                  n[        R                  " XS	-   US-   /SS9n[         R                  " UUS9n[         R                  R                  X6XUUU// SQ5      n[         R                  R                  X3XUUU// SQ5      n[        UUSS9  [         R                  " S5      n[        R                  " SSS9n[         R                  " UUS9n[         R                  " S5      n[        R                  " SSS9n[         R                  " X!S9n[         R                  " S5      n[        R                  " SSS9n[         R                  " XTS9n[         R                  R                  UX6// SQ5      n[         R                  R                  UX6// SQ5      nU S-  n[!        UUSS9  ["        R$                  " U5      R&                  n[)        S5       H$  nUR+                  U5      R,                  S:X  a  M$   e   [/        U5      nUR1                  U5      (       d   e[         R                  " S5      n [        R                  " US-  SS9n![         R                  " U!U S9n"[         R                  " S5      n#[        R                  " US	-  SS9n$[         R                  " U$U#S9n%[         R                  R                  U"U%U// SQ5      nU S-  n[!        UUSSS9  ["        R$                  " U5      R&                  n[)        S5       H$  nUR+                  U5      R,                  S:X  a  M$   e   [/        U5      nUR1                  U5      (       d   eU S-  n[!        UUSS S!9  ["        R$                  " U5      R&                  n[)        S5       H$  nUR+                  U5      R,                  S:X  a  M$   e   [/        U5      nUR1                  U5      (       d   eg )"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LL!H,E	%	!B	d	BLL&,,t3EHHeQY	2'BE	%	!B	4BIIat$E	%	!B	4B	%,,w'b	1B	3B	%b	!BIIdOEHHUT\.E	d	BLL&,,EHHeT\54<8"$E	%b	!BHH  """b"!="34E xx##RRR$C%67H UXu=	d	BIIaw'E	%b	!B	d	BIIaw'E	%	!B	d	BIIaw'E	%	!BHH  "b!?AExx##RL$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                    [         R                  " S5      R                  S-  n[        R                  " XS-   SSS9nUS-  nUS-  nUS-  n[
        R                  " U[
        R                  " S5      S	9n[
        R                  " U[
        R                  " S
5      S	9n[
        R                  " U[
        R                  " S5      S	9n[
        R                  " U[
        R                  " S5      S	9n	XgXS.n
/ SQn[
        R                  R                  XgX/U5      n[
        R                  R                  U
R                  U 5      /S-  U5      nSU 0n[        XUSS9  [        XSUSS9  g )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     s4    ,,|
$
*
*Z
7C
))Cr1G
4C:D$;D$;D
((3R\\#.
/C88Dr||D12D88Dr||D12D88Dr||D12D$;F/EHH  #T!8%@E xx##VZZ%5$6q$8%@H6=U'859; Ue'859;r,   pq_reader_methodr   r   c                    S n[         R                   " SSS5      [         R                   " SSS5      [         R                   " SSS5      /n[        R                  " SU05      n[        R                  " U5      nUS-  n[
        R                  " XVSS	S
9  U" X5      n[        R                  " 5          [        R                  " SS[        5        US   R                  5       U:w  d   e S S S 5        U" XSS9nUR                  SS9n	US   R                  [        5      US'   [        R                   " XI5        g ! , (       d  f       NV= f)Nc                     U S:X  a%  [         R                  " U40 UD6R                  5       $ U S:X  a  [         R                  " U40 UD6$ g )Nr   r   )r   r   readr   )r   rX   kwargss      r*   	get_table7test_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   ,  s)   5 	$1%$1%$1%G
 
sGn	%BHHRLE;;HNN5D "
 *5I		 	 	" N +	- ~'')W444	 
# K &&4&@JgnnV$BsG") 
#	"s   16D88
E)r;   rA   rz   c                     [         R                  " U SS9n[         R                  " / SQUS9n[         R                  " U/S/S9n[	        U5        g )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                     [         R                  " SSS9n [         R                  " / SQU S9n[         R                  " U/S/S9n[         R                  " SSS9n[         R                  " UR	                  U5      /S/S9n[        X$S	S
9  g )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   ^  sr     
d1	2B
((%B
/CHHcU4&)ELL"45Exx%)$8HUu=r,   c                      [         R                  " / SQSS9n [         R                  " SU R                  /05      n[	        U0 S9  g )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                  >   [         R                  " S5      R                  S-  n [        R                  " X S-   SSS9nUS-  nUS-  nUS-  n[
        R                  " U[
        R                  " S5      S	9n[
        R                  " U[
        R                  " S
5      S	9n[
        R                  " U[
        R                  " S5      S	9n[
        R                  " U[
        R                  " S5      S	9n/ SQn	/ SQn
[
        R                  R                  XVXx/U
5      n[
        R                  R                  XfXw/U
5      n[        XSS9  [        XSS9  [
        R                  R                  XfXx/U
5      n[        XSS9  [
        R                  R                  XfXf/U
5      nU	 H  n[        XS
US9  M     [
        R                  R                  XwXw/U
5      nU	 H  n[        XUSS9  M     [
        R                  R                  XX/U
5      nU	 H  n[        XUSS9  M     g )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
))Cr1G
4C:D$;D$;D
((3R\\#.
/C88Dr||D12D88Dr||D12D88Dr||D12D(L/EHH  #T!8%@E xx##T$<eDHUe4Ue4 xx##T$<eDHUe4 xx##T$<eDHD#N  xx##T$<eDH#N " xx##T$<eDH#9=	? r,   c           	      ,   Sn[         R                  " S[        U5      0[         R                  " SSUS9S9n[        R
                  R                  U5      nU S-  n [        R                  " X4SS	9  UR                  5       (       d   e[        R                  " U5      nUR                  U5      (       d   eU S
-  n[        R                  " [        5         [        R                  " X4SSS9  S S S 5        g ! [         a     Nf = f! , (       d  f       g = f)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
rU3 ??mmH-O99_%%%% ..H	z	"
rtUK 
#	"   
#	"s   C5 D5
DD
Dc            	          S V s/ s H.  n [         R                  " / SQ[         R                  " U 5      S9PM0     nn [         R                  R	                  U/ SQ5      n[        U5        g s  sn f )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   5A*)&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* G9 G'&G'*G65G69
HH