U
    >vf=1                     @   s  d Z ddlZddlmZ ddlmZ ddlZddlZddl	Z	ddl
m  mZ ddlZddlmZ ddlmZ ddlmZ e	d ddlZe	jdd	 Zed
ejddgddied
ejdddgddied
ejdddejdddgied
ejdddejdddgied
ej gd i!e"dej gZ#dd Z$dd Z%dd  Z&d!d" Z'd#d$ Z(d%d& Z)ej*d'd(d)d*d+ Z+ej*d'd(d)d,d- Z,ej*d'd(d)e	j-.d.e#d/d0 Z/ej*d'd(d)d1d2 Z0ej*d'd(d)d3d4 Z1d5d6 Z2dS )7z test orc compat     N)Decimal)BytesIO)read_orc)StringArrayzpyarrow.orcc                 C   s   | dddS )NiodataZorc )datapathr   r   </tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/io/test_orc.pydirpath   s    r   Zunimpl      Zuint64dtypeabcategory   )leftright   z
2022-01-03D)freqz
2022-01-042   floatc              	   C   s   ddddddddd	g	}d
ddddddddg	}t jt dd}t||D ]\}}t j|d||< qHtj| d}t||d}t	
|| d S )Nboolean1byte1short1int1long1float1double1bytes1string1boolint8int16int32int64float32float64objectr   )indexr   zTestOrcFile.emptyFile.orccolumns)pd	DataFrameZ
RangeIndexzipSeriesospathjoinr   tmassert_equal)r   r.   ZdtypesexpectedZcolnamer   	inputfilegotr   r   r
   test_orc_reader_empty0   s4    r;   c                 C   s   t jddgddt jddgddt jdd	gd
dt jddgddt jddgddt jddgddt jddgddt jddgddt jddgddd	}tj|}tj| d}t||	 d}t
|| d S )NFTr$   r   r   d   r%         r&      r'       r(         ?       @r)         .      r*           r+   hibye	r   r   r   r   r   r    r!   r"   r#   zTestOrcFile.test1.orcr-   )nparrayr/   r0   	from_dictr3   r4   r5   r   keysr6   r7   r   r   r8   r9   r:   r   r   r
   test_orc_reader_basicQ   s    rO   c                 C   s   dt jtdtdtdtdtdtdtdtd	td
tdg
ddi}tj|}tj| d}t	|j
d d }t|| d S )NZ_col0z-1000.50000z
-999.60000z
-998.70000z
-997.80000z
-996.90000z
-995.10000z
-994.11000z
-993.12000z
-992.13000z
-991.14000r+   r   zTestOrcFile.decimal.orc
   )rJ   rK   r   r/   r0   rL   r3   r4   r5   r   ilocr6   r7   rN   r   r   r
   test_orc_reader_decimale   s(     rR   c                 C   s   t jddddddddd	d
g
ddt jtdddtdddtdddtdddtdddtdddtdddtdddtdddtdddg
ddd}tj|}tj	| d}t
|jd d }t|| d S )Nz1900-05-05 12:34:56.100000z1900-05-05 12:34:56.100100z1900-05-05 12:34:56.100200z1900-05-05 12:34:56.100300z1900-05-05 12:34:56.100400z1900-05-05 12:34:56.100500z1900-05-05 12:34:56.100600z1900-05-05 12:34:56.100700z1900-05-05 12:34:56.100800z1900-05-05 12:34:56.100900datetime64[ns]r   il        r+   timedatezTestOrcFile.testDate1900.orcrP   rJ   rK   datetimerX   r/   r0   rL   r3   r4   r5   r   rQ   r6   r7   rN   r   r   r
   test_orc_reader_date_low   sB     r[   c                 C   s   t jddddddddd	d
g
ddt jtdddtdddtdddtdddtdddtdddtdddtdddtdddtdddg
ddd}tj|}tj	| d}t
|jd d }t|| d S )Nz2038-05-05 12:34:56.100000z2038-05-05 12:34:56.100100z2038-05-05 12:34:56.100200z2038-05-05 12:34:56.100300z2038-05-05 12:34:56.100400z2038-05-05 12:34:56.100500z2038-05-05 12:34:56.100600z2038-05-05 12:34:56.100700z2038-05-05 12:34:56.100800z2038-05-05 12:34:56.100900rS   r   i  rT   rU   r+   rV   zTestOrcFile.testDate2038.orcrP   rY   rN   r   r   r
   test_orc_reader_date_high   sB     r\   c                 C   s   t jddddddddd	d
g
ddt jddddddddddg
ddd}tj|}tj| d}t|j	d d }t
|| d S )NiEAںijFiA!{i~iY5B
irhi;Sinqi:i(r'   r   Zf50dcb8Z382fdaaaZ90758c6Z9e8caf3fZee97332bZd634da1Z2bea4396Zd67d89e8Zad71007eZe8c82066r+   )r   r#   zTestOrcFile.testSnappy.orcrP   )rJ   rK   r/   r0   rL   r3   r4   r5   r   rQ   r6   r7   rN   r   r   r
   !test_orc_reader_snappy_compressed   sB     r]   pyarrowz7.0.0)min_versionc                 C   s   t jddgddt jddgddt jdd	gd
dt jddgddt jddgddt jddgddt jddgddt jddgddt jddgddd	}tj|}t $}|| t|}t	|| W 5 Q R X d S NFTr$   r   r   r<   r%   r=   r>   r&   r?   r'   r@   r(   rA   rB   r)   rC   rD   r*   rE   rF   r+   rG   rH   rI   )
rJ   rK   r/   r0   rL   r6   ensure_cleanto_orcr   r7   )r   r   r8   r4   r:   r   r   r
   test_orc_roundtrip_file   s    

rc   c                  C   s   t jddgddt jddgddt jdd	gd
dt jddgddt jddgddt jddgddt jddgddt jddgddt jddgddd	} tj| }| }tt|}t	|| d S r`   )
rJ   rK   r/   r0   rL   rb   r   r   r6   r7   )r   r8   bytesr:   r   r   r
   test_orc_roundtrip_bytesio  s    re   df_not_supportedc              	   C   s*   d}t jt|d |   W 5 Q R X d S )Nz6The dtype of one or more columns is not supported yet.match)pytestraisesNotImplementedErrorrb   )rf   msgr   r   r
   $test_orc_writer_dtypes_not_supported*  s    rm   c                     s   t tddtjdgdd dgddd gttddtjdd	d
ddtjdgdddgddd gt jdddt dt j	t dgd  
  } tt| dd}t  fdd jD }t|| d S )Nabcr   cs   foos   barr            @      @r*   r   rB         @TFZ20130101   )ZperiodsZ20130103)stringstring_with_nanstring_with_nonerd   intr   float_with_nanr$   bool_with_narZ   Zdatetime_with_natr^   Zdtype_backendc              	      s(   i | ] }|t jtj | d dqS )T)Zfrom_pandas)r/   ZarraysZArrowExtensionArrayparK   ).0coldfr   r
   
<dictcomp>N  s    z2test_orc_dtype_backend_pyarrow.<locals>.<dictcomp>)r/   r0   listrJ   nanrangearangeZ
date_rangeZ	TimestampZNaTcopyrb   r   r   r.   r6   assert_frame_equal)
bytes_dataresultr8   r   r   r
   test_orc_dtype_backend_pyarrow4  s2    


r   c                  C   s  t tddtjdgdd dgttddt jdt jdgddt jt jt jt jgddtjd	d
dddtjdgdddgddd gd
} | 	 
 }tt|dd}t ttjdddgtjdttjdt jdgtjdttjdt jdgtjdt jdddgddt jdt jdgddt jt jt jt jgddt jd	ddgddt jdt jdgddt jdddgddt jddt jgddd
}t|| d S )Nrn   r   ro   r   rp   rt   ZInt64r   rq   rr   r*   rB   rs   TF)
ru   rv   rw   rx   Zint_with_nanZna_onlyr   ry   r$   rz   Znumpy_nullabler{   r   r   g      @g      @ZFloat64boolean)r/   r0   r   rJ   r   r   r2   ZNAr   r   rb   r   r   r   rK   Zobject_r6   r   )r   r   r   r8   r   r   r
   %test_orc_dtype_backend_numpy_nullableW  sB    

r   c               
   C   sf   d} t dttddi}td6}|| tjt	| d t
|dd W 5 Q R X W 5 Q R X d S )	NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.rx   r   rp   ztmp.orcrg   numpyr{   )r/   r0   r   r   r6   ra   rb   ri   rj   
ValueErrorr   )rl   r   r4   r   r   r
   test_invalid_dtype_backend  s    
r   )3__doc__rZ   decimalr   r   r   r3   r   rJ   ri   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr/   r   Zpandas._testingZ_testingr6   Zpandas.core.arraysr   Zimportorskipr^   r|   Zfixturer   r0   rK   r2   ZIntervalZPeriodr   ZastypeZSparseDtypeZorc_writer_dtypes_not_supportedr;   rO   rR   r[   r\   r]   Z
skip_if_norc   re   markZparametrizerm   r   r   r   r   r   r   r
   <module>   s^   

$!)))


"
*