
    g`t                        d dl Z 	 d dlZd dlZd dlmZ e j                  j                  Z
dddZ	 d dlm	Z dIdZ G d de      Z e j"                  d	      d
        Z e j"                  d	      d        Z e j"                  d	      dJd       Z e j"                  d	      dJd       Z e j"                  d	      d        Z e j"                  d	      d        Z e j"                  d	      d        Z e j"                  d	      d        Z e j"                  d	      d        Z e j"                  d	      d        Z e j"                  d	      d        Z e j"                  d	      d        Z e j"                  d	      d        Z e j"                  d	      d        Z e j"                  d	      d        Z ddddZ!d Z"d Z#d Z$d Z%d  Z&d! Z'd" Z(d# Z)d$ Z*d% Z+d& Z,d' Z-d( Z.d) Z/d* Z0d+ Z1d, Z2d- Z3d. Z4d/ Z5d0 Z6d1 Z7d2 Z8d3 Z9d4 Z:d5 Z;d6 Z<d7 Z=d8 Z>d9 Z?e j                  j                  d:        Z@e j                  j                  d;        ZAd< ZBd= ZCe j                  j                  d>        ZDe j                  j                  d?        ZEe j                  j                  d@        ZFe j                  j                  dA        ZGdB ZHdC ZIe j                  j                  dD        ZJe j                  j                  dE        ZKe j                  j                  dF        ZMe j                  j                  dG        ZNe j                  j                  dH        ZOy# e$ r dZY `w xY w# e$ r dZY Bw xY w)K    N)compute summarydescriptionc                 D    ddl m}  |t        j                         |       S )Nr   )_get_udf_context)pyarrow._computer	   padefault_memory_pool)batch_lengthr	   s     K/var/www/openai/venv/lib/python3.12/site-packages/pyarrow/tests/test_udf.pymock_udf_contextr   )   s    1B224lCC    c                       e Zd Zy)MyErrorN)__name__
__module____qualname__ r   r   r   r   .   s    r   r   session)scopec                      d } d}t         }t        j                  | ||dt        j                         it        j                                | |fS )z4
    Register a unary aggregate function (mean)
    c                 R    t        j                  t        j                  |            S N)r   scalarnpnansum)ctxxargss      r   funcz"sum_agg_func_fixture.<locals>.func7   s    yy1&&r   sum_udfr    )empty_udf_docpcregister_aggregate_functionr   float64r"   	func_namefunc_docs      r   sum_agg_func_fixturer+   2   sP    
' IH""4#,#+'*BJJL$% $&::<% ?r   c                      d } d}t         }t        j                  | ||dt        j                         it        j                                | |fS )Nc                     t        d      )NOops)RuntimeErrorr   r   lenr   r    s     r   r"   z(exception_agg_func_fixture.<locals>.funcJ   s    6""r   y=exception_len(x)r    r$   r%   r&   r   int64r(   s      r   exception_agg_func_fixturer5   H   sP    ! %IH""4#,#+'*BHHJ$% $&88:% ?r   c                     d }d}t         }t        j                  |||dt        j                         it        j                                ||fS )Nc                 d    t        j                  t        |      t        j                               S r   )r   r   r0   int32r1   s     r   r"   z1wrong_output_dtype_agg_func_fixture.<locals>.func^   s    yyQ,,r   y=wrong_output_dtype(x)r    r3   r   r"   r)   r*   s       r   #wrong_output_dtype_agg_func_fixturer;   \   sP    - *IH""4#,#+'*BHHJ$% $&88:% ?r   c                     d }d}t         }t        j                  |||dt        j                         it        j                                ||fS )Nc                     t        |      S r   )r0   r1   s     r   r"   z0wrong_output_type_agg_func_fixture.<locals>.funcq   s    1vr   y=wrong_output_type(x)r    r3   r:   s       r   "wrong_output_type_agg_func_fixturer?   o   sP     )IH""4#,#+'*BHHJ$% $&88:% ?r   c                      d } d}ddd}t        j                  | ||t        j                         t        j                         dt        j                                | |fS )z,
    Register a binary scalar function.
    c                 J    t        j                  d||g| j                        S )Nmultiplymemory_poolr%   call_functionrD   )r   mr    s      r   binary_functionz,binary_func_fixture.<locals>.binary_function   s$    
QF,/OO= 	=r   zy=mxzfind y from y = mxr   )rG   r    r%   register_scalar_functionr   r4   )rH   r)   
binary_docs      r   binary_func_fixturerL      s`    
= I#!57J ) *&(hhj&(hhj!# !#
, I%%r   c            	          d } ddd}d}t        j                  | ||t        j                         t        j                         t        j                         dt        j                                | |fS )z-
    Register a ternary scalar function.
    c                     t        j                  d||g| j                        }t        j                  d||g| j                        S )NrB   rC   addrE   )r   rG   r    cmxs        r   ternary_functionz.ternary_func_fixture.<locals>.ternary_function   sC    j1a&*-//;Aw,/OO= 	=r   zy=mx+czfind y from y = mx + cr   )array1array2array3rI   )rR   ternary_docr)   s      r   ternary_func_fixturerW      sj    
=
 '":<KI 0 ) +.0hhj.0hhj.0hhj!"
 !#
, Y&&r   c                      d } d}ddd}t        j                  | ||t        j                         t        j                         dt        j                                | |fS )zI
    Register a varargs scalar function with at least two arguments.
    c                 `    |}|D ]&  }t        j                  d||g| j                        }( |S )NrO   rC   rE   )r   firstvaluesaccvals        r   varargs_functionz.varargs_func_fixture.<locals>.varargs_function   s8    C""53*/2@C  
r   z	z=ax+by+czfind z from z = ax + by + cr   )rS   rT   rI   )r^   r)   varargs_docs      r   varargs_func_fixturer`      sc    
 I)"?K  0 ) +.0hhj.0hhj!" !#
, Y&&r   c                  t    d } ddd}d}t        j                  | ||i t        j                                | |fS )z-
    Register a nullary scalar function.
    c                     t        j                  dg| j                  z  t        j                         | j                        S N*   typerD   r   arrayr   r4   rD   contexts    r   nullary_funcz*nullary_func_fixture.<locals>.nullary_func   3    xxw333"((*$+$7$79 	9r   random functiongenerates a random valuer   test_nullary_funcrI   rk   r*   r)   s      r   nullary_func_fixturerq      sL    
9
 %1H $I ) ( " "
	, ""r   c                  p    d } ddd}d}t        j                  | ||i t        j                                |S )z
    Register a nullary scalar function with an ephemeral Python function.
    This stresses that the Python function object is properly kept alive by the
    registered function.
    c                     t        j                  dg| j                  z  t        j                         | j                        S rc   rg   ri   s    r   rk   z4ephemeral_nullary_func_fixture.<locals>.nullary_func   rl   r   rm   rn   r   test_ephemeral_nullary_funcrI   rp   s      r   ephemeral_nullary_func_fixtureru      sG    9
 %1H .I ) ( " "
	, r   c                  |    d } d}i }t        j                         }ddd}t        j                  | ||||       | |fS )zi
    Register a scalar function which returns something that is neither
    a Arrow scalar or array.
    c                      y)Nrd   r   r   s    r   wrong_output_typez9wrong_output_type_func_fixture.<locals>.wrong_output_type   s    r   test_wrong_output_typezreturn wrong output typer   r   r   r4   r%   rJ   )ry   r)   in_typesout_typedocs        r   wrong_output_type_func_fixturer      sR     )IHxxzH-C  19c ((4i''r   c                      d } d}dt        j                         i}t        j                         }ddd}t        j                  | ||||       | |fS )zq
    Register a scalar function whose actual output DataType doesn't
    match the declared output DataType.
    c                 2    t        j                  d|dg      S NrO      r%   rF   )r   rh   s     r   wrong_output_datatypezAwrong_output_datatype_func_fixture.<locals>.wrong_output_datatype  s    qz22r   test_wrong_output_datatyperh   zreturn wrong output datatyper   r   )r   r4   int16r%   rJ   )r   r)   r|   r}   r~   s        r   "wrong_output_datatype_func_fixturer     s[    3,I$HxxzH1C  5y# ((4 )++r   c                  |    d } d}i }t        j                         }ddd}t        j                  | ||||       | |fS )z>
    Register a scalar function with the wrong signature.
    c                  T    t        j                  dt        j                               S )Nr   rf   )r   r   r4   r   r   r   wrong_signaturez5wrong_signature_func_fixture.<locals>.wrong_signature*  s    yy,,r   test_wrong_signaturezUDF with wrong signaturer   r   r{   )r   r)   r|   r}   r~   s        r   wrong_signature_func_fixturer   $  sQ    - 'IHxxzH-C C ((4I%%r   c                  t    d } d}ddd}t        j                  | ||i t        j                                | |fS )zE
    Register a scalar function which raises a custom exception.
    c                     t        d      )Nerror raised by scalar UDF)r   rx   s    r   raising_funcz*raising_func_fixture.<locals>.raising_func>  s    233r   
test_raisezraising functionr   r   rI   )r   r)   r~   s      r   raising_func_fixturer   9  sE    
4I%C i "BHHJ0""r   c                      d } d}t         }t        j                  | ||dt        j                         it        j                                | |fS )z$
    Register a vector function
    c                     t        j                  |j                         j                         j	                  d            S )NT)pct)r   rh   	to_pandascopyrankr1   s     r   pct_rankz+unary_vector_func_fixture.<locals>.pct_rankO  s.    xx**,11d1;<<r   y=pct_rank(x)r    )r$   r%   register_vector_functionr   r'   )r   r)   r~   s      r   unary_vector_func_fixturer   J  sN    
=  I
C)S #RZZ\;346JJLB Yr   c                  j   d } d}t         }t        j                  | ||t        j                         t        j
                         t        j                         dt        j                  dt        j                         fdt        j
                         fdt        j
                         fg             | |fS )z@
    Register a vector function that returns a struct array
    c                    t         j                  j                  |||gg d      j                         }|j	                  ddd      j                         }t         j                  j                  |      j                         S )NkvrP   namesrP   r   r   )columnsr[   index)r   RecordBatchfrom_arraysr   pivotreset_indexfrom_pandasto_struct_array)r   r   r   rP   dfdf_pivots         r   r   z)struct_vector_func_fixture.<locals>.pivot`  se    ^^''Aq	'ISSU88C38?KKM~~))(3CCEEr   
y=pivot(x)r   r   v1v2)r$   r%   r   r   r4   r'   utf8struct)r   r)   r~   s      r   struct_vector_func_fixturer   [  s    
F
 I
Cy#hhjrzz|"'')<
		C$tRZZ\&:T2::<<PQR )r   Trun_in_datasetr   c                   | \  }}|5d}|D ]*  }t        |t        j                        sd}t        |      }, |rd}t	        j
                  |      }|j                  |k(  sJ t	        j                  |||      }	 |t        |      g| }
|	|
k(  sJ |r|D cg c]
  \  }}d|  }}}t        j                  j                  ||      }t        j                  |      }|D cg c]  }t        j                  |       }}|j                  dt        j                  d      j                  ||      i      }|j!                  d	      j"                  d	   |
k(  sJ y y c c}}w c c}w )
NTFr   lengthfieldresultr   )r   r   )
isinstancer   Arrayr0   r%   get_functionnamerF   r   Tabler   dsdatasetr   to_table_callcolumnchunks)func_fixtureinputsr   r   functionr   
all_scalarargr"   r   expected_outputr   in_arrfield_namestabler   
field_name	func_argsresult_tables                      r   check_scalar_functionr   p  sh    "NHd
C#rxx("
"3x  L??4 D99dF<@F/=GGO_$$$ <BCF=5&ugFC$$V[9**U#<GHKjRXXj)K	H''rxx|11$	BC ( E""1%,,Q/?BBB C Is   E &E&c                 n    t        | t        j                  ddgt        j                               g       y )N
      r   r   rh   r4   )unary_func_fixtures    r   test_udf_array_unaryr     s*    , hhBx<r   c           	          t        | t        j                  ddgt        j                               t        j                  ddgt        j                               g       y )Nr   r         r   )rL   s    r   test_udf_array_binaryr     sB    - hhBx< hh1vrxxz:r   c           
         t        | t        j                  ddgt        j                               t        j                  ddgt        j                               t        j                  ddgt        j                               g       y )Nr   r   r   r      r   )rW   s    r   test_udf_array_ternaryr     sZ    . hhBx< hh1vrxxz: hh2w
;r   c                    t        | t        j                  ddgt        j                               t        j                  ddgt        j                               t        j                  ddgt        j                               t        j                  ddgt        j                               t        j                  ddgt        j                               g       y )Nr      r   r         r   r   )r`   s    r   test_udf_array_varargsr     s    . hh1vrxxz: hhBx< hh1vrxxz: hhBx< hh2w
;r   c                  ~   ddd} dt        j                         i}t        j                         }d }t        j                  t              5  t        j                  |d | ||       d d d        t        j                  t        d      5  t        j                  d d| ||       d d d        d	}t        j                  t        |      5  t        j                  |d
| |d        d d d        d}t        j                  t        |      5  t        j                  |d| d |       d d d        t        j                  |d| i |       d}t        j                  t        |      5  t        j                  |d| i |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nztest udf inputzparameters are validatedr   r   c                 .    t        j                  dg      S )Nr   )r   rh   ri   s    r   test_reg_functionz3test_registration_errors.<locals>.test_reg_function  s    xx~r   zfunc must be a callablematchtest_none_function)DataType expected, got <class 'NoneType'>test_output_functionz)in_types must be a dictionary of DataTypetest_input_functionr   z?Already have a function registered with name: test_reg_function)r   r4   pytestraises	TypeErrorr%   rJ   KeyError)r~   r|   r}   r   expected_exprs        r   test_registration_errorsr     s    $1C "((*%HxxzH 
y	!
##$5$(#x$,	. 
" 
y(A	B
##D*>X$,	. 
C
 @M	y	6
##$5$:C$(	* 
7 @M	y	6
##$5$93$,	. 
7  1 3S" (*M	x}	5
##$5$7b$,	. 
6	5A 
"	! 
C	B 
7	6 
7	6 
6	5s<   F	FFF'F3FFF$'F03F<c                     | \  }}d}t        j                  t        |      5  t        j                  |dg       d d d        y # 1 sw Y   y xY w)Nz9VarArgs function 'z=ax\+by\+c' needs at least 2 argumentsr   rd   )r   r   
ValueErrorr%   rF   )r`   _r)   	error_msgs       r    test_varargs_function_validationr     s<    'LAyLI	z	3
RD) 
4	3	3s   AAc                     dt        j                         i} t        j                         }ddi}d }t        j                  t        d      5  t        j                  |d|| |       d d d        dd	i}t        j                  t        d
      5  t        j                  |d|| |       d d d        y # 1 sw Y   KxY w# 1 sw Y   y xY w)Nr   r   descc                 2    t        j                  d|dg      S r   r   )r   r   s     r   	add_constz/test_function_doc_validation.<locals>.add_const  s    {33r   z#Function doc must contain a summaryr   test_no_summaryr   ztest summaryz'Function doc must contain a descriptiontest_no_desc)r   r4   r   r   r   r%   rJ   )r|   r}   r*   r   s       r   test_function_doc_validationr    s    "((*%HxxzH 	vH4 
zB
D
##I/@$,h$,	.
D 	>H 
zF
H
##I~$,h$,	.
H 
H
D 
D
H 
Hs   B1B=1B:=Cc                 "    t        | g dd       y )NFr   r   )r   )rq   s    r   test_nullary_functionr    s     .5'(*r   c                 d    | }t        j                  |g d      }|j                         dgk(  sJ y )Nr   r   rd   )r%   rF   	to_pylist)ru   r   r   s      r   test_ephemeral_functionr    s4    )DdBq1F"%%%r   c                     | \  }}t        j                  t        d      5  t        j                  |g d       d d d        y # 1 sw Y   y xY w)NzUnexpected output type: intr   r   r   r   r   r   r%   rF   )r   r   r)   s      r   rz   rz     s>    1LAy	y:
<
Bq1
< 
< 
<   AAc                     | \  }}d}t        j                  t        |      5  t        j                  |t        j                  ddg      g       d d d        y # 1 sw Y   y xY w)NzDExpected output datatype int16, but function returned datatype int64r   r   r   )r   r   r   r%   rF   r   rh   )r   r   r)   r   s       r   r   r   &  sN    5LAy<M 
y	6
RXXr2h%7$89 
7	6	6s   -AA"c                     | \  }}d}t        j                  t        |      5  t        j                  |g d       d d d        y # 1 sw Y   y xY w)Nz@wrong_signature\(\) takes 0 positional arguments but 1 was givenr   r   r   r  )r   r   r)   r   s       r   r   r   0  s@    /LAy'M 
y	6
Bq1 
7	6	6s   AAc                      d } d}dt        j                         i}i }ddd}t        j                  t        d      5  t        j                  | ||||       d d d        y # 1 sw Y   y xY w)	Nc                     |S r   r   r   r]   s     r   identityz1test_wrong_datatype_declaration.<locals>.identity;      
r   test_wrong_datatype_declarationrh   ztest output valueztest outputr   z%DataType expected, got <class 'dict'>r   r   r4   r   r   r   r%   rJ   r  r)   r|   r}   r~   s        r   r  r  :  sp     2I$HH&$C 
yD
F
##Hi$'8	=
F 
F 
F   A!!A*c                      d } d}dd i}t        j                         }ddd}t        j                  t        d      5  t        j                  | ||||       d d d        y # 1 sw Y   y xY w)	Nc                     |S r   r   r  s     r   r  z3test_wrong_input_type_declaration.<locals>.identityL  r  r   !test_wrong_input_type_declarationrh   ztest invalid input typezinvalid input functionr   r   r   r  r  s        r   r  r  K  so     4IHxxzH,/C 
yH
J
##Hi$,h	8
J 
J 
Jr  c                    t        j                  t        j                               }| \  }}t        j                  |t        j
                  dgdz  t        j                               g|      }|t        j
                  dgdz  t        j                               k(  sJ |j                         dk(  sJ d }|j                         dk(  sJ y )Nr     r   rC   r   @  r   )r   proxy_memory_poolr   r%   rF   rh   r4   bytes_allocated)r   
proxy_poolr   r)   ress        r   test_scalar_udf_contextr  \  s    %%b&<&<&>?J%LAy


9HHaS4ZbhhjAB'13C "((A3:BHHJ7777%%'8333
C%%'1,,,r   c                     | \  }}t        j                  t        d      5  t        j                  |g d       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   )r   r   r   r%   rF   )r   r   r)   s      r   test_raising_funcr!  k  s9    'LAy	w&B	C
Bq1 
D	C	Cr	  c                     | \  }}t        j                  |t        j                  d      g      }|t        j                  d      k(  sJ y )Nr      )r%   rF   r   r   )r   r   r)   r  s       r   test_scalar_inputr$  q  s>    ,Hi


9ryy}o
6C"))B-r   c                    | \  }}t        j                  t        j                               }|j                         dk(  sJ t        j                  dgdz  t        j
                         |      }|j                         dk(  sJ t        j                  ||g       |j                         dk(  sJ d }|j                         dk(  sJ y )Nr   r   r  re   r  )r   r  r   r  rh   r4   r%   rF   )r   r   r)   r  r   s        r   test_input_lifetimer&  w  s    ,Hi%%b&<&<&>?J%%'1,,,
!t"((**EA%%'8333Y$%%'8333A%%'1,,,r   c           	          t        |      D cg c]2  \  }}t        j                  t        |      | |   j                        4 }}}t        j
                  j                  ||       S c c}}w Nr   )arraysschema)	enumerater   rh   listrf   r   r   )r*  itersir   r)  s        r   _record_batch_from_itersr/    sa    #E*,*$!Q hhtAwVAY^^4*  ,>>%%VF%CC,s   7A*c           	      V    t        | t        ||dz         t        |dz   |dz               S )Nr   r   r#  )r/  range)r*  ns     r   _record_batch_for_ranger3    s1    #F$)!QV$4$)!a%R$8: :r   c                       fd}|S )Nc                 ,     G fdd      } |       S )Nc                        e Zd Zd Z fdZy),make_udt_func.<locals>.udf_func.<locals>.UDTc                     d | _         y r   )callerselfs    r   __init__z5make_udt_func.<locals>.udf_func.<locals>.UDT.__init__  s	    "r   c                 z   	 | j                    |      j                  d c| _         }| j                  |      }|j                         S # t        $ rg D cg c]#  }t        j                  g |j
                        % nc c}w }}t        j                  j                  |      }Y |j                         S w xY wr(  )	r9  sendStopIterationr   rh   rf   r   r   r   )r;  r   batchr   r)  	batch_genr*  s        r   __call__z5make_udt_func.<locals>.udf_func.<locals>.UDT.__call__  s    6{{*+4S>+>+>(S KK,E ,,.. % 6+13+1% !hhr

;+13F 3NN66%f 7 6E,,..6s   7A
 
B:(B ?)B:9B:Nr   r   r   r<  rB  rA  r*  s   r   UDTr7    s    #
/r   rE  r   )r   rE  rA  r*  s     r   udf_funczmake_udt_func.<locals>.udf_func  s    	/ 	/ ur   r   )r*  rA  rF  s   `` r   make_udt_funcrG    s    " Or   c                  <     t                G fdd        fdS )zA short datasetc                       e Zd Zd Z fdZy)%datasource1_direct.<locals>.Generatorc                     d| _         y )Nr   )r2  r:  s    r   r<  z.datasource1_direct.<locals>.Generator.__init__  s	    DFr   c                     | j                   dk(  rt        g g       }|j                         S | xj                   dz  c_         t        | j                         }|j                         S )Nr   r   )r2  r/  r3  r   )r;  r   r@  r*  s      r   rB  z.datasource1_direct.<locals>.Generator.__call__  s[    vv{0R@ ((** !/?((**r   NrC  )r*  s   r   	GeneratorrJ    s    		+r   rM  c                             S r   r   )r   rM  s    r   <lambda>z$datasource1_direct.<locals>.<lambda>  s    y{r   )datasource1_schema)rM  r*  s   @@r   datasource1_directrQ    s    !F
+ 
+ #"r   c                  :    t               fd} t        |       S )Nc              3   T   K   t        ddd      D ]  }t        |dz
          y w)Nr   r   r   )r1  r3  r   r2  r*  s     r   rA  z(datasource1_generator.<locals>.batch_gen  s*     q!RA)&!a%88 !s   %(rP  rG  rD  s    @r   datasource1_generatorrW    s    !F9 ++r   c                  :    t               fd} t        |       S )Nc              3   h   K   t        ddd      D ]  }t        |dz
          t        d      w)Nr   r   rT  r   datasource1_exception)r1  r3  r/   rU  s     r   rA  z(datasource1_exception.<locals>.batch_gen  s8     q!RA)&!a%88 ! 233s   /2rV  rD  s    @r   rZ  rZ    s    !F4
 ++r   c                      t        j                  dt        j                         fdt        j                         fg      S )Nr   )r   r*  r8   r   r   r   rP  rP    s,    99r288:&RXXZ(89::r   c                     | ddd}i }t        j                  dt        j                         fdt        j                         fg      }| ||||fS )Nz UDTztest {func_name} UDTr   r   )r   r   r8   )r"   r)   r*   r|   r}   s        r   datasource1_argsr]    sU    '[-57HHyy2rxxz*R,<=>HHh88r   c                     t               } |        }| j                  }t        ||      }t        j                  |  d}t        j
                  |      D ]  }|dz  }|t        ||      k(  rJ  y )Nr   r   )rP  r   r]  r%   register_tabular_functioncall_tabular_functionr3  )
func_makerr*  r"   r)   r   r2  items          r   _test_datasource1_udtrc    so    !F<D##I y1I  ),	A((3	Q.vq9999 4r   c                  "    t        t               y r   )rc  rQ  r   r   r   test_udt_datasource1_directre    s    ,-r   c                  "    t        t               y r   )rc  rW  r   r   r   test_udt_datasource1_generatorrg    s    /0r   c                      t        j                  t        d      5  t        t               d d d        y # 1 sw Y   y xY w)NrZ  r   )r   r   r/   rc  rZ  r   r   r   test_udt_datasource1_exceptionri    s'    	|+B	C34 
D	C	Cs   5>c                     t        j                  g dt        j                               }t        j                  d|g      }t        j
                  d      }||k(  sJ y )Ng      $@g      4@      >@g      D@g      I@mean_udfrl  )r   rh   r'   r%   rF   r   )unary_agg_func_fixturearrr   expecteds       r   test_scalar_agg_basicrq    sH    
((12::<
@Cj3%0FyyHXr   c                     t        j                  g t        j                               }t        j                  t         j
                  d      5  t        j                  d|g       d d d        y # 1 sw Y   y xY w)Nzempty inputsr   rm  )r   rh   r'   r   r   ArrowInvalidr%   rF   )rn  emptys     r   test_scalar_agg_emptyru    sH    HHR&E	rn	=
eW- 
>	=	=s   A//A8c                     t        j                  g dt        j                               }t        j                  t         j
                  d      5  t        j                  d|g       d d d        y # 1 sw Y   y xY w)Nr   r   r   (   2   output datatyper   r9   r   rh   r4   r   r   ArrowTypeErrorr%   rF   )r;   ro  s     r   "test_scalar_agg_wrong_output_dtyper}    sN    
(('
4C	r((0A	B
2SE: 
C	B	B   A11A:c                     t        j                  g dt        j                               }t        j                  t         j
                  d      5  t        j                  d|g       d d d        y # 1 sw Y   y xY w)Nrw  output typer   r>   r{  )r?   ro  s     r   !test_scalar_agg_wrong_output_typer  	  sL    
(('
4C	r((	>
1C59 
?	>	>r~  c                    t        j                  g dt        j                               }t        j                  g dt        j                               }t	        j
                  d||g      }t        j                  d      }||k(  sJ y )Nrw  )      ?       @      @      @g      @sum_meang     @@)r   rh   r4   r'   r%   rF   r   )varargs_agg_func_fixturearr1arr2r   rp  s        r   test_scalar_agg_varargsr    sf    88("((*5D88-rzz|<DT4LF yyHXr   c                     t        j                  g dt        j                               }t        j                  t
        d      5  t        j                  d|g       d d d        y # 1 sw Y   y xY w)N)r   r   r   rx  ry  <   r.   r   r2   )r   rh   r4   r   r   r/   r%   rF   )r5   ro  s     r   test_scalar_agg_exceptionr    sF    
((+RXXZ
8C	|6	2
-u5 
3	2	2s   A''A0c                    t        j                  g dt        j                               }t        j                  g dt        j                               }t        j                  g dt        j                               }t        j                  g dt        j                               }t        j                  ||gddg      }t        j                  ||gddg      }t        j
                  ||g      }|j                  d      j                  dg      }|j                  d      j                  d	g      j                  dd
g      }	|j                  d      |	j                  d      k(  sJ y )Nrk  r   r   r   r   r   )g      N@g     Q@g      T@g     V@g      Y@)r   r   r   r   r   idvaluer   r  rm  )r  meanvalue_mean_udf)
r   rh   r'   r8   r   concat_tablesgroup_by	aggregaterename_columnssort_by)
rn  r  r  arr3arr4table1table2r   r   rp  s
             r   test_hash_agg_basicr  #  s   882BJJLAD88ORXXZ0D883RZZ\BD88ORXXZ0DXXtTl4/:FXXtTl4/:Fff-.E^^D!++-B,CDF~~d#--	+^T3C,DE  >>$8#3#3D#9999r   c                    t        j                  g t        j                               }t        j                  g t        j                               }t        j                  ||gddg      }|j                  d      j                  dg      }t        j                  t        j                  g t        j                               t        j                  g t        j                               gddg      }||k(  sJ y )Nr  r  r   r  r  )r   rh   r'   r8   r   r  r  )rn  r  r  r   r   rp  s         r   test_hash_agg_emptyr  6  s    88B

%D88B
#DHHdD\$9E^^D!++-B,CDFxx"bhhj1288
BJJL4 #')9":<H Xr   c                    t        j                  g dt        j                               }t        j                  g dt        j                               }t        j                  ||gddg      }t        j                  t         j                  d      5  |j                  d      j                  dg       d d d        y # 1 sw Y   y xY w)	Nrw  r  r  r  r   rz  r   )r  r9   
r   rh   r4   r8   r   r   r   r|  r  r  )r;   r  r  r   s       r    test_hash_agg_wrong_output_dtyper  C  s    88("((*5D88ORXXZ0DHHdD\$9E	r((0A	Bt&&(L'MN 
C	B	B   "C  C	c                    t        j                  g dt        j                               }t        j                  g dt        j                               }t        j                  ||gddg      }t        j                  t         j                  d      5  |j                  d      j                  dg       d d d        y # 1 sw Y   y xY w)	Nrw  r  r  r  r   r  r   )r  r>   r  )r?   r  r  r   s       r   test_hash_agg_wrong_output_typer  L  s    88("((*5D88ORXXZ0DHHdD\$9E	r((	>t&&(K'LM 
?	>	>r  c                    t        j                  g dt        j                               }t        j                  g dt        j                               }t        j                  ||gddg      }t        j                  t        d      5  |j                  d      j                  dg       d d d        y # 1 sw Y   y xY w)	Nrw  r  r  r  r   r.   r   )r  r2   )
r   rh   r4   r8   r   r   r   r/   r  r  )r5   r  r  r   s       r   test_hash_agg_exceptionr  U  s|    88("((*5D88ORXXZ0DHHdD\$9E	|6	2t&&(G'HI 
3	2	2s   "B66B?c                 6   d}d}t        j                  t        j                  d|      t        j                               }t        j                  t        j
                  j                  ||      t        j                               }t        j                  ||gddg      }|j                  d      j                  dg      }|j                  d      j                  dg      j                  dd	g      }|j                  d      |j                  d      k(  sJ y
)z2Test hash aggregate udf with randomly sampled datai@B r  r   r  r  r   )r  r#   )r  sumvalue_sum_udfN)r   rh   r   repeatr'   randomchoicer8   r   r  r  r  r  )r+   	value_num	group_numr  r  r   r   rp  s           r   test_hash_agg_randomr  _  s     II88BIIa+RZZ\:D88BII$$Y	:BHHJGDHHdD\$9E^^D!++-A,BCF~~d#--	*ND/+BC  >>$8#3#3D#9999r   c                     t        j                  g dt        j                               }t        j                  d|g      } | d   d |      }||k(  sJ y )Nrk  r   r   r   rh   r'   r%   rF   r   ro  r   rp  s       r   test_vector_basicr  r  sO    
((12::<
@Cou5F+(+D#6HXr   c                     t        j                  dgt        j                               }t        j                  d|g      } | d   d |      }||k(  sJ y )Nr   r   r   r  r  s       r   test_vector_emptyr  z  sP    
((A3


%Cou5F+(+D#6HXr   c                 6   t        j                  g dt        j                               }t        j                  g dt        j                               }t        j                  g d      }t	        j
                  d|||g      } | d   d |||      }||k(  sJ y )N)r   r   r   r   )r  r  r  r  )r   r   r   r   r   r   )r   rh   r4   r'   r%   rF   )r   r   r   rP   r   rp  s         r   test_vector_structr    s    
bhhj	A 	bjjl	A 	 	A lQ1I6F,)!,T1a;HXr   )r   )r   )Pr   numpyr   ImportErrorpyarrowr   r   r%   markr   
pytestmarkr$   pyarrow.datasetr   r   r/   r   fixturer+   r5   r;   r?   rL   rW   r`   rq   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  rz   r   r   r  r  r  r!  r$  r&  r/  r3  rG  rQ  rW  rZ  rP  r]  rc  re  rg  ri  rq  ru  r}  r  r  r  r  r  r  r  r  r  pandasr  r  r  r   r   r   <module>r     sW  &   ! [[  
 r2 
D
	l 	 i  !* i  !& i  !$ i  !$ i & !&( i ' !'0 i ' !'2 i # !#, i  !0 i ( !(( i , !,( i & !&( i # !#  i  !  i  !, *.'+C@	/.d*.>*&2:2="8"-2 -D:*#$,,;9	:.15
   . .;:   6 6 : :$ 	 	ON J J : :$      Y  	B  	Bs"   M  M.  M+*M+.M98M9