o
    GhYF                  	   @   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e jde dg die!dg dig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   Y/var/www/html/Persson_Maskin/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   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   sourcenumberr   c                 C   s   |  tddk }|jdksJ t|t| u sJ |j| js$J |  tg d}|jdks5J t|t| u s?J |j| jsHJ d S )NrD   r   )FFF)	r   pcr   num_rowstyper0   r$   r   r<   )rC   result_exprresult_maskr   r   r   test_filter_all_rowsv   s   rJ   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   rE   multiplyr   r#   r0   names	to_pylistr8   r9   r=   sum)r   r'   r(   r?   r   r   r   test_project   s0   
"rR   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   rQ   Na_sumrU   r   r   r   r   NrQ   F)
skip_nullsr   r   r   z/Function 'sum' accepts 1 arguments but 2 passedr6   )r   hash_sumNrU   zis a hash aggregate function)r   r"   r   r#   r0   rO   rP   r   r   rE   ScalarAggregateOptionsr   r   r8   r9   r=   )r   r'   r(   r   	aggr_optstargetr?   r   r   r   test_aggregate_scalar   sT   (


"r\   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 )NrV   )foobarr]   r   r   r   )r   
hash_countNcount(a)r   )keysrS   r]   r^   r   )r   r`   r   r_   allr`   r   rT   )r   r   r   r   r   r"   r#   r$   rE   CountOptionsr   r8   r9   r=   )	r   r   r   rZ   r'   r(   r4   expected_allr?   r   r   r   test_aggregate_hash   sH   




"re   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   rh   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<   

"rn   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   rp   r   innerrp   )	left_keys
right_keyshashjoinr    r   r   r   r   r   rp   r   rp   r   rO   
left outer)Nr   r   )Nr   r   r   _left_right)rt   ru   output_suffix_for_leftoutput_suffix_for_right)key_leftr   	key_rightr   r   )rt   ru   left_outputright_output)rp   r   r   )	r   r   r   r   r	   r#   r$   r   sort_by)	leftleft_sourcerightright_source	join_optsjoinedr(   r4   ra   r   r   r   test_hash_join/  sv   




r   c            
   
   C   s@  t g dg dd} tdt| d}t g dg dd}tdt|d}tdd	d	ttd
dd}td|||gd}| }t jdgdgdgdggg dd}|	|s\J tdd	d	ttd
dttddB d}td|||gd}| }t jg dg dg dg dgg dd}|	|sJ 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}|	|sJ t
d}	tdd	d	|	d}td|||gd}| }t jt jg t  dt jg t  dt jg t  dt jg t  dgg dd}|	|sJ d S )Nr   r   ro   r   r   rq   rr   rs   rp   r   r   )rt   ru   filter_expressionrv   r    r   r   rw   rx   ry   r   
   )r   r   r   )r   r   r   )r   NN)r   NNTr   r   F)rG   )r   r   r   r   r	   rE   equalr   r#   r$   scalarr<   r1   )
r   r   r   r   r   r   r(   r4   always_truealways_falser   r   r   #test_hash_join_with_residual_filterm  s|   
"




	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   )rp   tsr   r   r   rq   )r   r   r   )rp   r   r   r   rp   r   )left_onleft_byright_onright_by	toleranceasofjoinr    )Nr   N)rp   r   r   r   rx   )r   r   r   r   r
   r#   r   )
r   r   r   r   r   r   r(   r4   byonr   r   r   test_asof_join  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   rL   r   )columns)r   r   dswrite_datasetr   r   r   r#   r0   rO   selectr$   r   rF   rE   rN   rP   rb   is_nullas_py)tempdirr   r   r'   r(   	scan_optsr   r   r   	test_scan  s$   


r   )+r8   pyarrowr   pyarrow.computecomputerE   r   pyarrow.aceror   r   r   r   r   r   r	   r
   ImportErrorpyarrow.datasetr   r   r   markacero
pytestmarkfixturer   r*   r.   r5   r@   rB   parametrizer;   r   rJ   rR   r\   re   rn   r   r   r   r   r   r   r   r   <module>   sJ   ,


 3.%>@"