o
    hR                     @   sN  d dl Z d dlZd dlm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 ejjZzd dlmZ d dlZW n	 eyG   Y nw ejdddd	 Zd
d Zd-ddZd.ddZejjejdg ddd Zdd Zdd Zdd Zdd Zdd Z dd  Z!d!d" Z"ejj#d#d$ Z$d%d& Z%d'd( Z&d)d* Z'd+d, Z(dS )/    N)Path)fs)util)assert_frame_equalmodule)scopec                 C   s   | d S )Norc )base_datadirr	   r	   J/var/www/vscode/kcb/lib/python3.10/site-packages/pyarrow/tests/test_orc.pydatadir,   s   r   c                 C   s&  |D ]}|| }| | }|dkr4dd |D r4||   }t|D ]\}}dd |D ||< q!|||< q|d j}t|tjrEt|}nGt|tjrP|jj}n<|t	j
u rdgt| }	tt||D ]#\}\}
}t|s|
 j}d|  }t	
t|| ||	|< qct|	}|||< qdS )z_
    Fix type of expected values (as read from JSON) according to
    actual ORC datatype.
    mapc                 S   s&   g | ]}|D ]
}|  d dhkqqS keyvalue)keys).0mdr	   r	   r   
<listcomp>:   s   & z&fix_example_values.<locals>.<listcomp>c                 S   s   g | ]
}|d  |d fqS r   r	   )r   r   r	   r	   r   r   >   s    r   N
   )copy	enumerate	__class__
issubclassdatetimepdto_datetimedatedtdecimalDecimallenzipisnullas_tupleexponentroundscalebSeries)actual_colsexpected_colsnameexpectedactualcolir   typconverted_decimalsr   vexpfactorr	   r	   r   fix_example_values1   s8   







r6   c                 C   s6   |d us|d ur||| j dd}t| |dd d S )NT)dropF)check_dtype)reset_indexr   )orc_dfexpected_dfstartstopr	   r	   r   check_example_valuesW   s   r>   Fc           
      C   s   ddl m} || }| }t|tjsJ |  t	|
 }t|jt|jks.J |j|js<|j|jd}|rCt|| t|| d}t|jD ]}||}	tt	|	
 |||t|	 d |t|	7 }qO||jksuJ dS )zC
    Check a ORC file against the expected columns dictionary.
    r   r   columns)r<   r=   N)pyarrowr   ORCFileread
isinstancepaTablevalidater   	DataFrame	to_pydictsetrA   equalsreindexr6   r>   rangenstripesread_striper"   nrows)
orc_pathr;   need_fixr   orc_filetabler:   json_posr0   batchr	   r	   r   check_example_file]   s,   




rX   filename)zTestOrcFile.test1.orcTestOrcFile.testDate1900.orczdecimal.orcc                 C   s2   ||  }t jt|ddd}t||dd dS )z
    Check a ORC file example against the equivalent JSON file, as given
    in the Apache ORC repository (the JSON file has one JSON object per
    line, corresponding to one row in the ORC file).
    z.jsn.gzT)lines)rS   N)r   	read_jsonstrwith_suffixrX   )rY   r   pathrU   r	   r	   r   test_example_using_json   s   r`   c                 C   s2   | d }dt |d}tjtjd|gdd d S )NrZ   zif 1:
        import os
        os.environ['TZDIR'] = '/tmp/non_existent'

        from pyarrow import orc
        try:
            orc_file = orc.ORCFile(z)
            orc_file.read()
        except Exception as e:
            assert "time zone database" in str(e).lower(), e
        else:
            assert False, "Should have raised exception"
    -cTcheck)r]   
subprocessrunsys
executable)r   r_   coder	   r	   r   test_timezone_database_absent   s
   ri   c              
   C   s   t d}| std|  t |d }z
tj||dd W n ty: } ztd|  W Y d }~nd }~ww |d d jdd	 | d
 }dt|dt|d}t	j
tjd|gdd d S )Nz/usr/share/zoneinfoz Test needs timezone database in zoneinfoT)symlinksz"Failed to copy timezone database: USPacific)
missing_okrZ   z6if 1:
        import os
        os.environ['TZDIR'] = zA

        from pyarrow import orc
        orc_file = orc.ORCFile(z)
        try:
            orc_file.read()
        except Exception as e:
            assert "zoneinfo/US/Pacific" in str(e), e
        else:
            assert False, "Should have raised exception"
    ra   rb   )r   existspytestskipshutilcopytreeOSErrorunlinkr]   rd   re   rf   rg   )r   tmpdirsource_tzdirtzdirer_   rh   r	   r	   r   test_timezone_absent   s$   rz   c                 C   s&  ddl m} || d  }|jdksJ tdt fdt fdt	 fdt
 fdt fd	t fd
t fdt fdt fdtdttdt
 fdt fgfgfdttdt
 fdt fgfdtt tdt
 fdt fgfg}|j|ksJ d S )Nr   r?   zTestOrcFile.emptyFile.orcboolean1byte1short1int1long1float1double1bytes1string1middlelistr   )rB   r   rC   rD   num_rowsrF   schemabool_int8int16int32int64float32float64binarystringstructlist_map_)r   r   rU   expected_schemar	   r	   r   test_orcfile_empty   s@   











r   c                 C   s   ddl m} tdg di}| d }|  |d }||t| |j|t	 d}|
|s3J |jdt| d}|
|sDJ |t|}|
|sSJ d S )	Nr   r?   a         data_dirzdata.orc)
filesystemzdata_dir/data.orc)rB   r   rF   rU   mkdirwrite_tabler]   
read_tabler   LocalFileSystemrL   r   _filesystem_uri)rv   r   rU   	directoryr_   resultr	   r	   r   test_filesystem_uri   s    
r   c                 C   s   ddl m} tg d}tg d}t||d}| d}||| ||}||s3J ||g }d|j	ks@J d|j
ksGJ |j|dgd	}d|j	ksVJ d
|j
ks]J d S )Nr   r?   r   Nr   NNArrowNORCr   utf8test.orc   r   r@   r   )rB   r   rF   arrayrU   joinr   r   rL   r   num_columns)rv   r   r   brU   fileoutput_tabler	   r	   r   test_orcfile_readwrite   s   

r   c                  C   s   ddl m}  ddlm} | }tg d}tg d}t||d}| || |d | 	|}|
 }||s@J d S )Nr   r?   )BytesIOr   r   r   )rB   r   ior   rF   r   rU   r   seekrC   rD   rL   )r   r   bufr   r   rU   rT   r   r	   r	   r   test_bytesio_readwrite  s   

r   c                  C   sZ  ddl m}  t }tg d}tg d}t||d}| || t| }| 	|}|
 }||s=J |jdksDJ |jdksKJ |jdksRJ |jd	ksYJ t }tt | || W d    n1 ssw   Y  t| }| 	|}|
 }||sJ |jdksJ |jdksJ |jdksJ |jd	ksJ d S )
Nr   r?   r   r   r   UNCOMPRESSEDz0.12i'  i   rB   r   rF   BufferOutputStreamr   rU   r   BufferReadergetvaluerC   rD   rL   compressionfile_versionrow_index_stridecompression_sizerp   warnsFutureWarningr   buffer_output_streamr   r   rU   buffer_readerrT   r   r	   r	   r   test_buffer_readwrite"  s4   

r   c               	   C   sn  ddl m}  t }tg d}tg d}t||d}| j||dddd	d
 t| }| 	|}|
 }||sBJ |jdksIJ |jdksPJ |jdksWJ |jd	ks^J t }tt | j||ddddd
 W d    n1 s}w   Y  t| }| 	|}|
 }||sJ |jdksJ |jdksJ |jdksJ |jdksJ d S )Nr   r?   r   r   r   snappyz0.11i  i   )r   r   r   compression_block_sizeSNAPPYuncompressedi N  i @  r   r   r   r	   r	   r   'test_buffer_readwrite_with_writeoptionsC  sP   
	
r   c                  C   s6  ddl m}  t }tg d}td|i}tt | j	||dd W d    n1 s0w   Y  tt | j	||dd W d    n1 sMw   Y  tt | j	||dd W d    n1 sjw   Y  tt | j	||dd	 W d    n1 sw   Y  tt | j	||d
d	 W d    n1 sw   Y  tt | j	||dd W d    n1 sw   Y  tt | j	||dd W d    n1 sw   Y  tt | j	||dd W d    n1 sw   Y  tt
 | j	||dd W d    n	1 sw   Y  tt | j	||dd W d    n	1 s7w   Y  tt | j	||dd W d    n	1 sUw   Y  tt | j	||dd W d    n	1 ssw   Y  tt | j	||dd W d    n	1 sw   Y  tt | j	||dd W d    n	1 sw   Y  tt
 | j	||dd W d    n	1 sw   Y  tt | j	||dd W d    n	1 sw   Y  tt | j	||dd W d    n	1 s	w   Y  tt | j	||dd W d    n	1 s'w   Y  tt | j	||dd W d    n	1 sEw   Y  tt | j	||dd W d    n	1 scw   Y  tt | j	||dd W d    n	1 sw   Y  tt | j	||dd W d    n	1 sw   Y  tt | j	||dd W d    n	1 sw   Y  tt | j	||dd W d    n	1 sw   Y  tt | j	||d d! W d    n	1 sw   Y  tt | j	||dd"gd! W d    n	1 sw   Y  tt | j	||h d#d! W d    n	1 s9w   Y  tt | j	||dd$ W d    n	1 sWw   Y  tt | j	||d%d$ W d    n	1 suw   Y  tt | j	||d&d$ W d    d S 1 sw   Y  d S )'Nr   r?   r   r   )
batch_sizeigR @gp=
ף?)r   z1.1)stripe_sizeipgG @)r   nonezlid)r   i8gR"@)compression_strategynolarge)r   igGz0@cat)padding_tolerancearrow)dictionary_key_size_thresholdg333333?g	r   )bloom_filter_columnsgffffff?>   r   r   )bloom_filter_fppg?g)rB   r   rF   r   r   rU   rp   raises
ValueErrorr   	TypeError)r   r   r   rU   r	   r	   r   +test_buffer_readwrite_with_bad_writeoptionss  s  		$r   c                 C   s.  ddl m} tdt }tdt|g}tdt tdttdt tdt|td	t gtd
ttdttdt td	t gtdt g}dgddggddiddgddddddggdgg}tj|t	|d}t
| d }||| ||}| }	|	|sJ |jddgd}
|
|ddgsJ |jg dd}||g dsJ |jdgd}tddddiigi}||sJ |jdgd}tdd	digi}||sJ |jg dd}||ddgsJ |jdgd}td
ddiddiggi}||s0J |jddgd}
|
|ddgsEJ |jg d d}||g d!sZJ tt |jd"gd W d    n	1 srw   Y  tt |jdgd W d    d S 1 sw   Y  d S )#Nr   r?   innerr   basicr   itemr   inner2list-structinner1basic2r   r   r   r   )r   r         )r   r         	   )r   r   r@   )r   r   r   struct.middle.innerstruct.inner2)r   r   r   zlist-struct.inner1r   )r   r   r   wrong)rB   r   rF   fieldr   r   r   r   rU   r   r]   r   rC   rD   rL   selectrp   r   IOErrorr   )tempdirr   r   r   fieldsarrsrU   r_   rT   result1result2result3result4	expected4result5	expected5result6result7	expected7r	   r	   r   test_column_selectionU  sp   

$r   c              	   C   s   ddl m} t| d }||*}tt |  W d    n1 s&w   Y  W d    d S W d    d S 1 s>w   Y  d S )Nr   r?   r   )rB   r   r]   	ORCWriterrp   r   AttributeErrortest)r   r   r_   writerr	   r	   r   test_wrong_usage_orc_writer  s   
"r  c                 C   s   ddl m} t| d }tg d}tg d}t||d}ttj |	|| W d    d S 1 s:w   Y  d S )Nr   r?   r   r   )NNNNr   )
rB   r   r]   rF   r   rU   rp   r   ArrowNotImplementedErrorr   )r   r   r_   r   r   rU   r	   r	   r    test_orc_writer_with_null_arrays  s   "r  )NN)F))r    r   pathlibr   rr   rd   rf   rp   rB   rF   r   pyarrow.testsr   markr   
pytestmarkpandas.testingr   pandasr   ImportErrorfixturer   r6   r>   rX   parametrizer`   ri   rz   r   r   r   r   r   r   r   r   r   r  r  r	   r	   r	   r   <module>   sN   


&
%!!
/ cO	