o
    䯪g@                     @   s  d dl Z d dlZd dlZzd dlZW n ey   dZY nw d dlZd dlZd dl	m
Z
 zd dlmZ d dl	mZmZ W n eyG   dZY nw zd dlZd dlmZ d dl	mZ W n eyg   d ZZY nw ejjZejjdd Zejjdd Zejjd	d
 Zejjdd Zejjdd Zejjejdg ddd Zejjejdddgdd Zejdg ddd Z dd Z!ejjdd Z"ejjdd  Z#ejjd!d" Z$d#d$ Z%dS )%    N)_check_roundtrip)_read_table_write_table)_roundtrip_pandas_dataframec                  C   s   t jtdddgdd} | jd} | | _t j| | jdd| d	}t	 }t
j|}t|| |d
 t|}| }t|| d S )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_read r(   _/var/www/html/chatdoc2/venv/lib/python3.10/site-packages/pyarrow/tests/parquet/test_datetime.pytest_pandas_parquet_datetime_tz4   s   



r*   c               	   C   s<   t j ddddddt jjd} td| gi}t|i d d S )Ni        -   )tzinfofoowrite_kwargs)r   timezoner   r   r   r   )valuer#   r(   r(   r)   test_datetime_timezone_tzinfoO   s
   r4   c                 C   s.  ddl m} | }tdttdg}tjg dddd d tjg dddg|d< t	|}t
|}| d	 }tjj||d
}t||ddd t|}| }	| }
t|
d D ]\}}t|tjrp|d|
j|df< q\t|
|	 tt t||ddd W d    d S 1 sw   Y  d S )Nr   )OrderedDict
datetime64ms)z2007-07-13T01:23:34.123456789N2010-08-13T05:46:57.437699912datetime64[ms]r	   )z2007-07-13T02Nr8   zpandas_roundtrip.parquetschema2.6usversioncoerce_timestampszM8[us]unknown)collectionsr5   r   fieldlist_	timestampnparrayr   r   r;   r   r   r   r   r   copy	enumerate
isinstancendarrayastypelocr    r!   pytestraises
ValueError)tempdirr5   arraysfieldsr#   r;   filenamer%   r&   r'   df_expectedixr(   r(   r)   test_coerce_timestampsX   s@   



"rX   c              	   C   s   t j dddddddd}t j ddddddd}tdtdg}d||gi}t|}t|}| d }tjj||d}t	||d	d
dd t
|}	|	 }
d||gi}tj|dd}t||
 dS )zc
    ARROW-2555: Test that we can truncate timestamps when coercing if
    explicitly allowed.
    r   r+   )yearmonthdayhourminutesecondmicrosecond)rY   rZ   r[   r\   r]   r^   r6   r=   zpandas_truncated.parquetr:   r<   r7   T)r?   r@   allow_truncated_timestampsr9   r	   N)r   r   rC   rE   r   r   r;   r   r   r   r   r   r    r!   )rQ   dt_usdt_ms	fields_us	arrays_usdf_us	schema_usrT   table_ustable_msdf_msarrays_expectedrU   r(   r(   r)    test_coerce_timestamps_truncated   s(   


rk   c           &   	   C   s  t  }tjg ddd}t j||d}t  }|dd }t j||d}t d}tdj	d	 }tj||d
 |d gdd}	t j|	|d}
t 
d}tjddd}t j||d}t d}t j|d|d}t 
d}t j||d}t 
d}t j|d	 |d}t d}tdj	}tj||d	 |d gdd}t j||d}t j|||
||||gg d}t j|||
||||gg d}t||dd t d}tjddd}t j||d}t d}tjddd}t j||d}t d}tjddd}t j||d}t j|||gg d}t j|||gg d}| d }t||dd t|j}tdD ]}||jdks>J q1t|}||sLJ t d} tj|d dd}!t j|!| d}"t d}#tj|d	 dd}$t j|$|#d}%t j|"|%|gg d}| d }t||ddd t|j}tdD ]}||jdksJ qt|}||sJ | d }t||dd d! t|j}tdD ]}||jdksJ qt|}||sJ d S )"N)ikC  ilC  imC  int32r	   typeint64i \&r=   z
2001-01-01  r+      r7      i4r"   ns  )date32date64ztimestamp[us]z	time32[s]z
time64[us]ztime32_from64[s]ztimestamp[ns]r<   expectedr?      )zts[ms]zts[us]zts[ns]zint64_timestamps.parquetr?   INT64i@B z!explicit_int96_timestamps.parquetTr?   use_deprecated_int96_timestampsINT96zspark_int96_timestamps.parquetspark)r?   flavor)r   rv   rF   rG   rw   rL   rE   r   	Timestampr3   time32arangetime64r   from_arraysr   r   r   ParquetFiler;   rangecolumnphysical_typer   equals)&rQ   t1data1a1t2data2a2t3startdata3a3t4data4a4t5a5t6a6ex_t6ex_a6t7data7a7tablery   t0data0a0rT   parquet_schemarV   
read_tablet0_nsdata0_nsa0_nst1_nsdata1_nsa1_nsr(   r(   r)   test_date_time_types   s   










r   unitr"   r7   r=   rt   c                 C   s  t djd }tj||d ddd}|d }|d }|d }tj|tdd	}tj|td
d	}tj|tdd	}tj|tdd	}	||||	d}
g d}tj	||||	g|}tj	|

| gd |}d| i}t|||dd t||d|dd d S )N
2010-01-01 ʚ;
   r+   ro   r	   rp   r"   rm   r7   r=   rt   r   )ts_sts_msts_usts_nsrz   coerce_int96_timestamp_unitT)read_table_kwargsr~   r<   )r?   r   r~   )r   r   r3   rF   r   r   rG   rE   r   r   getr   )r   i_sd_sd_msd_usd_nsa_sa_msa_usa_nsrR   namesr   ry   r   r(   r(   r)    test_coerce_int96_timestamp_unit  s,   
r   pq_reader_methodr   r   c           
      C   s   dd }t  dddt  dddt  dddg}td|i}t|}|d }tj||d	d
d || |}t  t	ddt
 |d  |ksLJ W d    n1 sVw   Y  || |dd}|jd	d}	|d t|d< t||	 d S )Nc                 [   s<   | dkrt j|fi | S | dkrt j|fi |S d S )Nr   r   )r   r   readr   )r   rT   kwargsr(   r(   r)   	get_table0  s
   z7test_coerce_int96_timestamp_overflow.<locals>.get_tablerp   r+   ru     az test_round_trip_overflow.parquetT1.0)r~   r?   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   rL   objectr    r!   )
r   rQ   r   oob_dtsr#   r   rT   	tab_errortab_correct
df_correctr(   r(   r)   $test_coerce_int96_timestamp_overflow,  s2   



r   )r7   r=   rt   c                 C   s>   t j| dd}t jg d|d}t j|gdgd}t| d S )NAmerica/New_Yorktz)r+   rq   rr   rm   f0r   )r   rE   rG   r   r   )r   tyarrtr(   r(   r)   test_timestamp_restore_timezoneU  s   r   c                  C   sj   t jddd} t jg d| d}t j|gdgd}t jddd}t j||gdgd}t||d	d
 d S )Nrt   r   r   )rp   ru   r   rm   r   r   r=   2.4rx   )r   rE   rG   r   castr   )r   r   r   ty_usry   r(   r(   r)   *test_timestamp_restore_timezone_nanosecond^  s   r   c                  C   s4   t jg ddd} t d| jgi}t|i d d S )N)z09:00z09:30z10:00z10:30z11:00z11:30z12:00z%H:%M)formattimer0   )r   to_datetimer   r   r   )timesr#   r(   r(   r)   $test_list_of_datetime_time_roundtripi  s
   
r   c                  C   s  t djd } tj| | d ddd}|d }|d }|d }tj|tdd	}tj|td
d	}tj|tdd	}tj|tdd	}g d}	g d}
tj	||||g|
}tj	||||g|
}t
||dd t
||dd tj	||||g|
}t
||dd tj	||||g|
}|	D ]
}t
||d
|d qtj	||||g|
}|	D ]
}t
|||dd qtj	||||g|
}|	D ]
}t
|||dd qd S )Nr   r   r   r+   ro   r	   rp   r"   rm   r7   r=   rt   )r   r   r<   )zts:szts:mszts:uszts:nsr   r{   r   r<   r@   r?   r>   Tr}   )r   r   r3   rF   r   r   rG   rE   r   r   r   )r   r   r   r   r   r   r   r   r   all_versionsr   r   ry   verr(   r(   r)   *test_parquet_version_timestamp_differencesr  s:   r   c                 C   s   d}t jdt|it jdd|dd}tj|}| d }z
tj||dd	 W n	 t	y0   Y nw |
 s7J t|}||sCJ | d
 }tt tj||ddd W d    d S 1 saw   Y  d S )Nr   rW   z
2017-01-01rt   )freqperiodsr   zwritten.parquetr<   r{   znot_written.parquetr7   r   )r   r   r   
date_ranger   r   r   r   r   	Exceptionexistsr   r   rN   rO   rP   )rQ   nr#   tbrT   recovered_tabler(   r(   r)   5test_noncoerced_nanoseconds_written_without_exception  s$   
"r   c                  C   s,   dd dD } t j| g d}t| d S )Nc                 S   s$   g | ]}t jg d t |dqS ))r   r+   rq   rr   rm   )r   rG   duration).0r   r(   r(   r)   
<listcomp>  s    z&test_duration_type.<locals>.<listcomp>r   )zd[s]zd[ms]zd[us]zd[ns])r   r   r   r   )rR   r   r(   r(   r)   test_duration_type  s
   r   )&r   r   r   numpyrF   ImportErrorrN   pyarrowr   pyarrow.tests.parquet.commonr   pyarrow.parquetparquetr   r   r   pandasr   pandas.testingtestingr    r   mark
pytestmarkr*   r4   rX   rk   r   parametrizer   r   r   r   r   r   r   r   r(   r(   r(   r)   <module>   sf   


*

k'


;
