o
    Zh?                     @   s  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	 zd dl
mZ d dlmZmZ W n ey9   dZY nw zd dlZd dlmZ d dlmZ W n eyY   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]Zdtypeutcz
US/Eastern)Ztz_awareZ
tz_easternindexr   )pdZSeriesdatetimedtZtz_localizer   	DataFrameZ
tz_convertioBytesIOpaTablefrom_pandasr   seekpqZread_pandas	to_pandastmassert_frame_equal)sdffarrow_table
table_readdf_read r!   Z/var/www/html/lang_env/lib/python3.10/site-packages/pyarrow/tests/parquet/test_datetime.pytest_pandas_parquet_datetime_tz1   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        -   )tzinfoZfooZwrite_kwargs)r   timezoner
   r   r   r   )valuer   r!   r!   r"   test_datetime_timezone_tzinfoL   s
   r+   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ro|d|
d |< 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-13T02Nr/   zpandas_roundtrip.parquetschema2.6usversioncoerce_timestampszM8[us]unknown)collectionsr,   r   fieldlist_	timestampnparrayr   r   r2   r   r   r   r   r   copy	enumerate
isinstanceZndarrayastyper   r   pytestraises
ValueError)tempdirr,   arraysfieldsr   r2   filenamer   r   r    df_expectedixr!   r!   r"   test_coerce_timestampsU   s@   



"rM   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)rN   rO   rP   rQ   rR   rS   r-   r4   zpandas_truncated.parquetr1   r3   r.   T)r6   r7   Zallow_truncated_timestampsr0   r	   N)r   r   r:   r<   r   r   r2   r   r   r   r   r   r   r   )rF   Zdt_usZdt_msZ	fields_usZ	arrays_usZdf_usZ	schema_usrI   Ztable_usZtable_msZdf_msZarrays_expectedrJ   r!   r!   r"    test_coerce_timestamps_truncated   s(   


rU   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  Zint32r	   typeint64i \&r4   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]r3   expectedr6      )zts[ms]zts[us]zts[ns]zint64_timestamps.parquetr6   ZINT64i@B z!explicit_int96_timestamps.parquetTr6   use_deprecated_int96_timestampsZINT96zspark_int96_timestamps.parquetZspark)r6   Zflavor)r   r_   r=   r>   r`   rB   r<   r   	Timestampr*   Ztime32arangeZtime64r   from_arraysr   r   r   ParquetFiler2   rangecolumnZphysical_typer   equals)&rF   t1Zdata1Za1t2Zdata2Za2Zt3startZdata3a3Zt4Zdata4Za4Zt5Za5Zt6Za6Zex_t6Zex_a6Zt7Zdata7Za7tablerb   t0Zdata0Za0rI   Zparquet_schemarK   
read_tableZt0_nsZdata0_nsZa0_nsZt1_nsZdata1_nsZa1_nsr!   r!   r"   test_date_time_types   s   










ru   unitr   r.   r4   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	}	||||	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$   rX   r	   rY   r   rV   r.   r4   r]   rw   )Zts_sZts_msZts_usZts_nsrc   coerce_int96_timestamp_unitT)read_table_kwargsrf   r3   )r6   r|   rf   )r   rg   r*   r=   rh   r   r>   r<   r   ri   getr   )rv   i_sd_sd_msd_usd_nsa_sa_msa_usa_nsrG   namesrr   rb   r|   r!   r!   r"    test_coerce_int96_timestamp_unit
  s,   
r   pq_reader_methodrj   rt   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}	t||	 d S )Nc                 [   s<   | dkrt j|fi | S | dkrt j|fi |S d S )Nrj   rt   )r   rj   readrt   )r   rI   kwargsr!   r!   r"   	get_table-  s
   z7test_coerce_int96_timestamp_overflow.<locals>.get_tablerY   r$   r^     az test_round_trip_overflow.parquetT1.0)rf   r6   ignorez,Discarding nonzero nanoseconds in conversionr   )r{   )Ztimestamp_as_object)r   r   r   r   rr   r   write_tablewarningscatch_warningsfilterwarningsUserWarningZ	to_pylistr   r   r   )
r   rF   r   Zoob_dtsr   rr   rI   Z	tab_errorZtab_correctZ
df_correctr!   r!   r"   $test_coerce_int96_timestamp_overflow)  s0   



r   )r.   r4   r]   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$   rZ   r[   rV   f0r   )r   r<   r>   rr   r   )rv   tyarrtr!   r!   r"   test_timestamp_restore_timezoneQ  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 )Nr]   r   r   )rY   r^   r   rV   r   r   r4   2.4ra   )r   r<   r>   rr   castr   )r   r   rr   Zty_usrb   r!   r!   r"   *test_timestamp_restore_timezone_nanosecondZ  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timer(   )r   to_datetimer   r   r   )timesr   r!   r!   r"   $test_list_of_datetime_time_roundtripe  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 )Nrx   ry   rz   r$   rX   r	   rY   r   rV   r.   r4   r]   )r   r   r3   )zts:szts:mszts:uszts:nsr   rd   r   r3   r7   r6   r5   Tre   )r   rg   r*   r=   rh   r   r>   r<   r   ri   r   )r~   r   r   r   r   r   r   r   r   Zall_versionsr   rr   rb   verr!   r!   r"   *test_parquet_version_timestamp_differencesn  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   rL   z
2017-01-01Z1n)freqZperiodsr   zwritten.parquetr3   rd   znot_written.parquetr.   r   )r   r   rk   Z
date_ranger   r   r   r   r   	Exceptionexistsrt   rm   rC   rD   rE   )rF   nr   tbrI   Z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$   rZ   r[   rV   )r   r>   duration).0rv   r!   r!   r"   
<listcomp>  s    z&test_duration_type.<locals>.<listcomp>rw   )zd[s]zd[ms]zd[us]zd[ns])r   r   ri   r   )rG   rr   r!   r!   r"   test_duration_type  s
   r   )&r   r   r   numpyr=   rC   Zpyarrowr   Zpyarrow.tests.parquet.commonr   Zpyarrow.parquetZparquetr   r   r   ImportErrorZpandasr   Zpandas.testingZtestingr   r   markZ
pytestmarkr#   r+   rM   rU   ru   Zparametrizer   r   r   r   r   r   r   r   r!   r!   r!   r"   <module>   s^   


*

k&


;
