o
    h:                     @   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mZ W n	 ey3   Y nw zd dlmZ d dlmZ W n eyM   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#dd Z$e jjdd Z%dS )    N)field)DeclarationTableSourceNodeOptionsFilterNodeOptionsProjectNodeOptionsAggregateNodeOptionsOrderByNodeOptionsHashJoinNodeOptionsAsofJoinNodeOptions)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   L/var/www/vscode/kcb/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   inputs)
r   r   r   r   r   r   from_sequenceto_tableequalsslice)r   r   filter_optsdeclresultr   filteredr   r   r   test_declaration7   s   

r*   c                 C   s$   dt | v sJ dt| v sJ d S )NTableSourceNode)strrepr)r   r   r   r   test_declaration_reprL   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   )	to_readerschemar   int64read_allr   r$   )r   readerr(   expectedr   r   r   test_declaration_to_readerR   s   
(
r5   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   record_batcharrayr   
ValueErrorr#   r   r'   _r   r   r   test_table_sourceZ   s    

"r@   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\)r6   )TFT)r   r"   r   r   r8   r9   r=   r#   r:   r   r<   r>   r   r   r   test_filterf   s   

"rB   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 expressionr6   )r   r"   r   pcmultiplyr   r#   r0   names	to_pylistr8   r9   r=   sum)r   r'   r(   r?   r   r   r   test_projectv   s0   
"rK   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   rJ   Na_sumrN   r   r   r   r   NrJ   F)
skip_nullsr   r   r   z/Function 'sum' accepts 1 arguments but 2 passedr6   )r   hash_sumNrN   zis a hash aggregate function)r   r"   r   r#   r0   rH   rI   r   r   rF   ScalarAggregateOptionsr   r   r8   r9   r=   )r   r'   r(   r   	aggr_optstargetr?   r   r   r   test_aggregate_scalar   sT   (


"rU   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 )NrO   )foobarrV   r   r   r   )r   
hash_countNcount(a)r   )keysrL   rV   rW   r   )r   rY   r   rX   allrY   r   rM   )r   r   r   r   r   r"   r#   r$   rF   CountOptionsr   r8   r9   r=   )	r   r   r   rS   r'   r(   r4   expected_allr?   r   r   r   test_aggregate_hash   sH   




"r^   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   	ascendingorder_by)r   r   r   r   )r   r   r   Nr   
descending)r   r   r   r   )r   r   r   N)r   ra   at_start)null_placement)r   r   r   r   )Nr   r   r   z1`ordering` must be an explicit non-empty orderingr6   z&"decreasing" is not a valid sort order)r   
decreasingz%"start" is not a valid null placementstart)r   r   r   r   r   r"   r#   r$   r   r8   r9   r=   )r   r   ord_optsr'   r(   r4   r?   r   r   r   test_order_by   s<   

"rg   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   )rh   r   innerrh   )	left_keys
right_keyshashjoinr    r   r   r   r   r   )rh   r   rh   r   rH   z
left outer)Nr   r   )Nr   r   r   _left_right)rk   rl   output_suffix_for_leftoutput_suffix_for_right)key_leftr   	key_rightr   r   )rk   rl   left_outputright_output)rh   r   r   )	r   r   r   r   r	   r#   r$   r   sort_by)	leftleft_sourcerightright_source	join_optsjoinedr(   r4   rZ   r   r   r   test_hash_join  sv   




r~   c            
   	   C   s,  t g dg dg dd} tdt| d}t g dg dg dd	}tdt|d}td
dgd
dgdd}td|||gd}| }t jg dg dg dg dgg dd}||ksaJ tddgtdgfD ]'}td
d
fD ]}	t|	||	|dd}td|||gd}| }||ksJ qtqld S )Nr   )r   r   r   r   )rh   tsr   r   r   ri   )r   r   r   )rh   r   r   r   rh   r   )left_onleft_byright_onright_by	toleranceasofjoinr    )Nr   N)rh   r   r   r   rn   )r   r   r   r   r
   r#   r   )
rx   ry   rz   r{   r|   r}   r(   r4   byonr   r   r   test_asof_joinZ  s@   

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   datasetparquet)formatscan)r   r   __fragment_index__batch_index__last_in_fragment
__filenamer   r   r   )r   r   r   r   rD   r   )columns)r   r   dswrite_datasetr   r   r   r#   r0   rH   selectr$   r   num_rowsrF   rG   rI   r[   is_nullas_py)tempdirr   r   r'   r(   	scan_optsr   r   r   	test_scan|  s$   


r   )&r8   pyarrowr   pyarrow.computecomputerF   r   pyarrow.aceror   r   r   r   r   r   r	   r
   ImportErrorpyarrow.datasetr   r   r   markacero
pytestmarkfixturer   r*   r.   r5   r@   rB   rK   rU   r^   rg   r~   r   r   r   r   r   r   <module>   s>   ,

 3.%>"