o
    Zh5                     @   s  d dl Z d dlZd dlmZ d dlmZ zd dlmZm	Z	m
Z
mZmZmZmZ W n	 ey1   Y nw zd dlmZ d dlmZ W n eyK   dZY nw e jjZe jdd Zdd Zd	d
 Z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S )    N)field)DeclarationTableSourceNodeOptionsFilterNodeOptionsProjectNodeOptionsAggregateNodeOptionsOrderByNodeOptionsHashJoinNodeOptions)ScanNodeOptionsc                  C   s0   t g dg dd} t| }td|d}|S )N                  abtable_sourceoptions)patabler   r   )r   
table_optsr    r   O/var/www/html/lang_env/lib/python3.10/site-packages/pyarrow/tests/test_acero.pyr   .   s   r   c                  C   s   t g dg dd} t| }ttddk}ttd|dtd|dg}| }|| 	dd	s6J td|d}td||gd
}| }|| 	dd	sSJ d S )Nr   r   r   r   r   r   r   filterr   r   Zinputs)
r   r   r   r   r   r   from_sequenceto_tableequalsslice)r   r   Zfilter_optsdeclresultr   filteredr   r   r   test_declaration6   s   

r'   c                 C   s$   dt | v sJ dt| v sJ d S )NZTableSourceNode)strrepr)r   r   r   r   test_declaration_reprK   s   r*   c                 C   s   |    }|jtdt fdt fgksJ | }W d    n1 s'w   Y  tg dg dd}||s?J d S )Nr   r   r   r   r   )Z	to_readerschemar   Zint64Zread_allr   r"   )r   readerr%   expectedr   r   r   test_declaration_to_readerQ   s   
(
r.   c                  C   s   t t tttg dgdg W d    n1 sw   Y  td } td| }t jtdd |	 }W d    d S 1 sDw   Y  d S )Nr   r   r   z0TableSourceNode requires table which is not nullmatch)
pytestraises	TypeErrorr   r   Zrecord_batcharrayr   
ValueErrorr!   r   r$   _r   r   r   test_table_sourceY   s    

"r8   c                 C   s   t | t dttddkdg}tjtdd | }W d    n1 s'w   Y  tt tt	
g d W d    n1 sEw   Y  tt td  W d    d S 1 s_w   Y  d S )Nr   cr   r   zNo match for FieldRef.Name\(c\)r/   )TFT)r   r    r   r   r1   r2   r5   r!   r3   r   r4   r6   r   r   r   test_filtere   s   

"r:   c              
   C   sZ  t | t dtttddgg}| }|jjdgks J |d 	 g dks,J t | t dtttddgdgg}| }|jjdgksNJ |d 	 g dksZJ t
t tttddgddg W d    n1 sxw   Y  t | t dtttdgg}t
jtd	d
 | }W d    d S 1 sw   Y  d S )Nprojectr   r   zmultiply(a, 2)r   )r   r   r   a2b2z$cannot Execute non-scalar expressionr/   )r   r    r   pcmultiplyr   r!   r+   names	to_pylistr1   r2   r5   sum)r   r$   r%   r7   r   r   r   test_projectu   s0   
"rC   c                 C   s  t | t dtdgg}| }|jjdgksJ |d  dgks%J tdg di}tddt	j
dd	dfg}t t d
t|t d|g}| }|jjdgksWJ |d  d gksbJ dtddtddgtdgdgfD ]-}t|dd dfg}t | t d|g}| }|jjdgksJ |d  dgksJ qttddgdd dfg}t | t d|g}tjtdd | }W d    n1 sw   Y  tdg}t | t d|g}tjtdd | }W d    d S 1 sw   Y  d S )N	aggregater   rB   Na_sumrF   r   r   r   r   NrB   F)Z
skip_nullsr   r   r   z/Function 'sum' accepts 1 arguments but 2 passedr/   )r   Zhash_sumNrF   zis a hash aggregate function)r   r    r   r!   r+   r@   rA   r   r   r>   ZScalarAggregateOptionsr   r   r1   r2   r5   )r   r$   r%   r   	aggr_optstargetr7   r   r   r   test_aggregate_scalar   sT   (


"rJ   c            	      C   sx  t g dg dd} t| }td|d}tdgdgd}t|td	|g}| }t d
dgddgd}||s?J tddt	ddfgdgd}t|td	|g}| }t d
dgddgd}||soJ tdgt
dgd}t|td	|g}| }||sJ tdgdgd}t|td	|g}tt | }W d    d S 1 sw   Y  d S )NrG   )foobarrK   r   r   r   )r   
hash_countNcount(a)r   )keysrD   rK   rL   r   )r   rN   r   rM   allrN   r   rE   )r   r   r   r   r   r    r!   r"   r>   ZCountOptionsr   r1   r2   r5   )	r   r   r   rH   r$   r%   r-   Zexpected_allr7   r   r   r   test_aggregate_hash   sH   




"rQ   c                  C   s  t g dg dd} tdt| }tdg}t|td|g}| }t g dg dd}||s9J ttd	d
fg}t|td|g}| }t g dg dd}||scJ tdgdd}t|td|g}| }t g dg dd}||sJ tg }t|td|g}t	j
tdd | }W d    n1 sw   Y  t	j
tdd tdg}W d    n1 sw   Y  t	j
tdd tdgdd}W d    d S 1 sw   Y  d S )N)r   r   r   r   )r   r   Nr   r   r   )r   Z	ascendingZorder_by)r   r   r   r   )r   r   r   Nr   
descending)r   r   r   r   )r   r   r   N)r   rR   Zat_start)Znull_placement)r   r   r   r   )Nr   r   r   z1`ordering` must be an explicit non-empty orderingr/   z&"decreasing" is not a valid sort order)r   Z
decreasingz%"start" is not a valid null placementstart)r   r   r   r   r   r    r!   r"   r   r1   r2   r5   )r   r   Zord_optsr$   r%   r-   r7   r   r   r   test_order_by   s<   

"rT   c            	      C   sF  t g dg dd} tdt| d}t g dg dd}tdt|d}tdd	d	d
}td|||gd}| }t jddgddgddgddggg dd}||sXJ td	d	gtd	gfD ]}td||d
}td|||gd}| }||sJ qctdd	d	d
}td|||gd}| }t jg dg dg dg dgg dd}|d|sJ tdd	d	ddd}td|||gd}| }t jg dg dg dg dgg dd}|d|sJ tdd	d	d	dgtdgd}td|||gd}| }t jg dg dg dgg dd}|d|s!J d S )Nr   r   )keyr   r   r   )r   r   r   )rU   r   innerrU   )	left_keys
right_keysZhashjoinr   r   r   r   r   r   )rU   r   rU   r   )r@   z
left outer)Nr   r   )Nr   r   r   _left_right)rW   rX   Zoutput_suffix_for_leftZoutput_suffix_for_right)Zkey_leftr   Z	key_rightr   r   )rW   rX   Zleft_outputZright_output)rU   r   r   )	r   r   r   r   r	   r!   r"   r   Zsort_by)	leftZleft_sourcerightZright_sourceZ	join_optsZjoinedr%   r-   rO   r   r   r   test_hash_join  sv   




r]   c                 C   sD  t g dg dd}tj|| d dd tj| d dd}tdt|}| }|jj	g dks4J |
d	d
g|s@J t|td	dkd}td|}| jdksXJ t|td	dkd}td|}| jdkspJ t|dttd	did}td|}| }|d	  g dksJ t|d
   sJ d S )Nr   r   r   datasetZparquet)formatscan)r   r   Z__fragment_indexZ__batch_indexZ__last_in_fragmentZ
__filenamer   r   r   )r   r   r   r   r<   r   )columns)r   r   dsZwrite_datasetr^   r   r
   r!   r+   r@   selectr"   r   Znum_rowsr>   r?   rA   rP   Zis_nullZas_py)tempdirr   r^   r$   r%   Z	scan_optsr   r   r   	test_scanY  s$   


re   )$r1   Zpyarrowr   Zpyarrow.computeZcomputer>   r   Zpyarrow.aceror   r   r   r   r   r   r	   ImportErrorZpyarrow.datasetr^   rb   r
   markZaceroZ
pytestmarkZfixturer   r'   r*   r.   r8   r:   rC   rJ   rQ   rT   r]   re   r   r   r   r   <module>   s<   (	
 3.%>