
    z-Ph`t                     p   d dl Z 	 d dlZn# e$ r dZY nw xY wd dlZd dlmZ e j        j	        Z
dddZ	 d dlm	Z n# e$ r dZY nw xY wdJdZ G d de          Z e j        d	
          d             Z e j        d	
          d             Z e j        d	
          dKd            Z e j        d	
          dKd            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/ Z4d0 Z5d1 Z6d2 Z7d3 Z8d4 Z9d5 Z:d6 Z;d7 Z<d8 Z=d9 Z>d: Z?e j        j        d;             Z@e j        j        d<             ZAd= ZBd> ZCe j        j        d?             ZDe j        j        d@             ZEe j        j        dA             ZFe j        j        dB             ZGdC ZHdD ZIe j        j        dE             ZJe j        j        dF             ZKe j        jL        dG             ZMe j        jL        dH             ZNe j        jL        dI             ZOdS )L    N)compute summarydescription
   c                 H    ddl m}  |t          j                    |           S )Nr   )_get_udf_context)pyarrow._computer
   padefault_memory_pool)batch_lengthr
   s     V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyarrow/tests/test_udf.pymock_udf_contextr   )   s0    111111B244lCCC    c                       e Zd ZdS )MyErrorN)__name__
__module____qualname__ r   r   r   r   .   s        Dr   r   session)scopec                      d } d}t           }t          j        | ||dt          j                    it          j                               | |fS )z4
    Register a unary aggregate function (mean)
    c                 N    t          j        t          j        |                    S N)r   scalarnpnansum)ctxxargss      r   funcz"sum_agg_func_fixture.<locals>.func7   s    y1&&&r   sum_udfr!   )empty_udf_docpcregister_aggregate_functionr   float64r#   	func_namefunc_docs      r   sum_agg_func_fixturer,   2   sa    
' ' ' IH"4#,#+'*BJLL$% $&:<<% % % ?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_fixturer6   H   sa    ! ! ! %IH"4#,#+'*BHJJ$% $&8::% % % ?r   c                     d }d}t           }t          j        |||dt          j                    it          j                               ||fS )Nc                 h    t          j        t          |          t          j                              S r   )r   r   r1   int32r2   s     r   r#   z1wrong_output_dtype_agg_func_fixture.<locals>.func^   s     yQ,,,r   y=wrong_output_dtype(x)r!   r4   r   r#   r*   r+   s       r   #wrong_output_dtype_agg_func_fixturer<   \   sa    - - - *IH"4#,#+'*BHJJ$% $&8::% % % ?r   c                     d }d}t           }t          j        |||dt          j                    it          j                               ||fS )Nc                      t          |          S r   )r1   r2   s     r   r#   z0wrong_output_type_agg_func_fixture.<locals>.funcq   s    1vvr   y=wrong_output_type(x)r!   r4   r;   s       r   "wrong_output_type_agg_func_fixturer@   o   sa       )IH"4#,#+'*BHJJ$% $&8::% % % ?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                 >    t          j        d||g| j                  S )Nmultiplymemory_poolr&   call_functionrE   )r    mr!   s      r   binary_functionz,binary_func_fixture.<locals>.binary_function   s)    
QF,/O= = = 	=r   zy=mxzfind y from y = mxr   )rH   r!   r&   register_scalar_functionr   r5   )rI   r*   
binary_docs      r   binary_func_fixturerM      s{    
= = = I#!57 7J ) *&(hjj&(hjj!# !# !#

, , , 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                 z    t          j        d||g| j                  }t          j        d||g| j                  S )NrC   rD   addrF   )r    rH   r!   cmxs        r   ternary_functionz.ternary_func_fixture.<locals>.ternary_function   sM    j1a&*-/; ; ;Aw,/O= = = 	=r   zy=mx+czfind y from y = mx + cr   )array1array2array3rJ   )rS   ternary_docr*   s      r   ternary_func_fixturerX      s    
= = =
 '":< <KI 0 ) +.0hjj.0hjj.0hjj!" !"
 !#

, , , 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                 P    |}|D ] }t          j        d||g| j                  }!|S )NrP   rD   rF   )r    firstvaluesaccvals        r   varargs_functionz.varargs_func_fixture.<locals>.varargs_function   sF     	@ 	@C"53*/2@ @ @CC
r   z	z=ax+by+czfind z from z = ax + by + cr   )rT   rU   rJ   )r_   r*   varargs_docs      r   varargs_func_fixturera      s~    
   I)"? K  0 ) +.0hjj.0hjj!" !" !#

, , , Y&&r   c                  p    d } ddd}d}t          j        | ||i t          j                               | |fS )z-
    Register a nullary scalar function.
    c                 n    t          j        dg| j        z  t          j                    | j                  S N*   typerE   r   arrayr   r5   rE   contexts    r   nullary_funcz*nullary_func_fixture.<locals>.nullary_func   5    xw33"(**$+$79 9 9 	9r   random functiongenerates a random valuer   test_nullary_funcrJ   rl   r+   r*   s      r   nullary_func_fixturerr      sb    
9 9 9
 %1 H $I ) ( " "

	, , , ""r   c                  l    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                 n    t          j        dg| j        z  t          j                    | j                  S rd   rh   rj   s    r   rl   z4ephemeral_nullary_func_fixture.<locals>.nullary_func   rm   r   rn   ro   r   test_ephemeral_nullary_funcrJ   rq   s      r   ephemeral_nullary_func_fixturerv      s]    9 9 9
 %1 H .I ) ( " "

	, , , r   c                  x    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                     dS )Nre   r   r    s    r   wrong_output_typez9wrong_output_type_func_fixture.<locals>.wrong_output_type   s    rr   test_wrong_output_typezreturn wrong output typer   r   r   r5   r&   rK   )rz   r*   in_typesout_typedocs        r   wrong_output_type_func_fixturer      sh       )IHxzzH- C  19c ((4 4 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                 0    t          j        d|dg          S NrP      r&   rG   )r    ri   s     r   wrong_output_datatypezAwrong_output_datatype_func_fixture.<locals>.wrong_output_datatype  s    qz222r   test_wrong_output_datatyperi   zreturn wrong output datatyper   r   )r   r5   int16r&   rK   )r   r*   r}   r~   r   s        r   "wrong_output_datatype_func_fixturer     sq    3 3 3,I$HxzzH1 C  5y# ((4 4 4 )++r   c                  x    d } d}i }t          j                    }ddd}t          j        | ||||           | |fS )z>
    Register a scalar function with the wrong signature.
    c                  P    t          j        dt          j                              S )Nr   rg   )r   r   r5   r   r   r   wrong_signaturez5wrong_signature_func_fixture.<locals>.wrong_signature*  s    y,,,,r   test_wrong_signaturezUDF with wrong signaturer   r   r|   )r   r*   r}   r~   r   s        r   wrong_signature_func_fixturer   $  sg    - - - 'IHxzzH- C C ((4 4 4I%%r   c                  p    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   ry   s    r   raising_funcz*raising_func_fixture.<locals>.raising_func>  s    2333r   
test_raisezraising functionr   r   rJ   )r   r*   r   s      r   raising_func_fixturer   9  s[    
4 4 4I% C i "BHJJ0 0 0""r   c                      d } d}t           }t          j        | ||dt          j                    it          j                               | |fS )z$
    Register a vector function
    c                     t          j        |                                                                                    d                    S )NT)pct)r   ri   	to_pandascopyrankr2   s     r   pct_rankz+unary_vector_func_fixture.<locals>.pct_rankO  s7    x**,,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  sa    
= = =  I
C)S #RZ\\;346JLLB B B Yr   c                  \   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                            |||gg d                                          }|                    ddd                                          }t           j                            |                                          S )NkvrQ   namesrQ   r   r   )columnsr\   index)r   RecordBatchfrom_arraysr   pivotreset_indexfrom_pandasto_struct_array)r    r   r   rQ   dfdf_pivots         r   r   z)struct_vector_func_fixture.<locals>.pivot`  sw    ^''Aq	'IISSUU88C38??KKMM~))(33CCEEEr   
y=pivot(x)r   r   v1v2)r%   r&   r   r   r5   r(   utf8struct)r   r*   r   s      r   struct_vector_func_fixturer   [  s    
F F F
 I
Cy#hjjrz||"'))<<
	C$tRZ\\&:T2:<<<PQRR   )r   Trun_in_datasetr   c                   | \  }}|6d}|D ]-}t          |t          j                  rd}t          |          }.|rd}t	          j        |          }|j        |k    sJ t	          j        |||          }	 |t          |          g|R  }
|	|
k    sJ |rd |D             }t          j	        
                    ||          }t          j        |          }d |D             }|                    dt          j        d                              ||          i	          }|                    d
          j        d
         |
k    sJ d S d S )NTFr   lengthc                     g | ]
\  }}d | S )fieldr   ).0r   in_arrs      r   
<listcomp>z)check_scalar_function.<locals>.<listcomp>  s"    CCC=5&uCCCr   c                 6    g | ]}t          j        |          S r   )dsr   )r   
field_names     r   r   z)check_scalar_function.<locals>.<listcomp>  s"    HHHjRXj))HHHr   resultr   )r   r   )
isinstancer   Arrayr1   r&   get_functionnamerG   r   Tabler   r   datasetto_tabler   _callcolumnchunks)func_fixtureinputsr   r   functionr   
all_scalarargr#   r   expected_outputfield_namestabler   	func_argsresult_tables                   r   check_scalar_functionr   p  s    "NHd
 	( 	(C#rx(( ("
"3xx 	L?4  D9dF<@@@Fh/==GGGGO_$$$$  CCCFCCC$$V[99*U##HHKHHH	''rx||11$	BBC ( E E""1%%,Q/?BBBBC C CBr   c                 t    t          | t          j        ddgt          j                              g           d S )Nr      r   r   ri   r5   )unary_func_fixtures    r   test_udf_array_unaryr     s?    , hBx<<    r   c           	          t          | t          j        ddgt          j                              t          j        ddgt          j                              g           d S )Nr   r         r   )rM   s    r   test_udf_array_binaryr     sX    - hBx<< h1vrxzz::    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           d S )Nr   r   r   r      r   )rX   s    r   test_udf_array_ternaryr     sq    . hBx<< h1vrxzz:: h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           d S )Nr      r   r         r   r   )ra   s    r   test_udf_array_varargsr     s    . h1vrxzz:: hBx<< h1vrxzz:: hBx<< h2w

;;    r   c                     ddd} dt          j                    i}t          j                    }d }t          j        t                    5  t          j        |d | ||           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        d d| ||           d d d            n# 1 swxY w Y   d	}t          j        t          |          5  t          j        |d
| |d            d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        |d| d |           d d d            n# 1 swxY w Y   t          j        |d| i |           d}t          j        t          |          5  t          j        |d| i |           d d d            d S # 1 swxY w Y   d S )Nztest udf inputzparameters are validatedr   r   c                 ,    t          j        dg          S )Nr   )r   ri   rj   s    r   test_reg_functionz3test_registration_errors.<locals>.test_reg_function  s    x~~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   r5   pytestraises	TypeErrorr&   rK   KeyError)r   r}   r~   r   expected_exprs        r   test_registration_errorsr     sG    $1 C "(**%HxzzH   
y	!	! . .
#$5$(#x$,	. 	. 	.. . . . . . . . . . . . . . . 
y(A	B	B	B . .
#D*>X$,	. 	. 	.. . . . . . . . . . . . . . .
 @M	y	6	6	6 * *
#$5$:C$(	* 	* 	** * * * * * * * * * * * * * * @M	y	6	6	6 . .
#$5$93$,	. 	. 	.. . . . . . . . . . . . . . .  1 3S" (* * *M	x}	5	5	5 . .
#$5$7b$,	. 	. 	.. . . . . . . . . . . . . . . . . .sZ   
A//A36A3B::B>B>"DDD/EEEF::F>F>c                     | \  }}d}t          j        t          |          5  t          j        |dg           d d d            d S # 1 swxY w Y   d S )Nz9VarArgs function 'z=ax\+by\+c' needs at least 2 argumentsr   re   )r   r   
ValueErrorr&   rG   )ra   _r*   	error_msgs       r    test_varargs_function_validationr     s    'LAyLI	z	3	3	3 * *
RD)))* * * * * * * * * * * * * * * * * *s   AAAc                     dt          j                    i} t          j                    }ddi}d }t          j        t          d          5  t          j        |d|| |           d d d            n# 1 swxY w Y   dd	i}t          j        t          d
          5  t          j        |d|| |           d d d            d S # 1 swxY w Y   d S )Nr   r   descc                 0    t          j        d|dg          S r   r   )r    r   s     r   	add_constz/test_function_doc_validation.<locals>.add_const  s    {3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   r5   r   r   r   r&   rK   )r}   r~   r+   r  s       r   test_function_doc_validationr    s   "(**%HxzzH 	vH4 4 4 
zB
D 
D 
D . .
#I/@$,h$,	. 	. 	.. . . . . . . . . . . . . . . 	>H 
zF
H 
H 
H . .
#I~$,h$,	. 	. 	.. . . . . . . . . . . . . . . . . .s$   A00A47A4C  CCc                 ,    t          | g dd           d S )NFr   r   )r   )rr   s    r   test_nullary_functionr    s/     .5'(* * * * * *r   c                 n    | }t          j        |g d          }|                                dgk    sJ d S )Nr   r   re   )r&   rG   	to_pylist)rv   r   r   s      r   test_ephemeral_functionr
    sC    )DdBq111F"%%%%%%r   c                     | \  }}t          j        t          d          5  t          j        |g d           d d d            d S # 1 swxY w Y   d S )NzUnexpected output type: intr   r   r   r   r   r   r&   rG   )r   r   r*   s      r   r{   r{     s    1LAy	y:
< 
< 
< 2 2
Bq11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2   AA
A
c                     | \  }}d}t          j        t          |          5  t          j        |t          j        ddg          g           d d d            d S # 1 swxY w Y   d S )NzDExpected output datatype int16, but function returned datatype int64r   r   r   )r   r   r   r&   rG   r   ri   )r   r   r*   r   s       r   r   r   &  s    5LAy<M 
y	6	6	6 : :
RXr2h%7%7$8999: : : : : : : : : : : : : : : : : :s   +AA"Ac                     | \  }}d}t          j        t          |          5  t          j        |g d           d d d            d S # 1 swxY w Y   d S )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	6	6 2 2
Bq11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   AAAc                      d } d}dt          j                    i}i }ddd}t          j        t          d          5  t          j        | ||||           d d d            d S # 1 swxY w Y   d S )	Nc                     |S r   r   r    r^   s     r   identityz1test_wrong_datatype_declaration.<locals>.identity;      
r   test_wrong_datatype_declarationri   ztest output valueztest outputr   z%DataType expected, got <class 'dict'>r   r   r5   r   r   r   r&   rK   r  r*   r}   r~   r   s        r   r  r  :  s       2I$HH&$ C 
yD
F 
F 
F = =
#Hi$'8	= 	= 	== = = = = = = = = = = = = = = = = =   A##A'*A'c                      d } d}dd i}t          j                    }ddd}t          j        t          d          5  t          j        | ||||           d d d            d S # 1 swxY w Y   d S )	Nc                     |S r   r   r  s     r   r  z3test_wrong_input_type_declaration.<locals>.identityL  r  r   !test_wrong_input_type_declarationri   ztest invalid input typezinvalid input functionr   r   r   r  r  s        r   r  r  K  s       4IHxzzH,/ C 
yH
J 
J 
J 8 8
#Hi$,h	8 	8 	88 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8r  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 |                                dk    sJ d }|                                dk    sJ d S )Nr     r   rD   r   @  r   )r   proxy_memory_poolr   r&   rG   ri   r5   bytes_allocated)r   
proxy_poolr   r*   ress        r   test_scalar_udf_contextr#  \  s    %b&<&>&>??J%LAy

9HaS4ZbhjjAAAB'13 3 3C "(A3:BHJJ7777777%%''83333
C%%''1,,,,,,r   c                     | \  }}t          j        t          d          5  t          j        |g d           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   )r   r   r   r&   rG   )r   r   r*   s      r   test_raising_funcr%  k  s    'LAy	w&B	C	C	C 2 2
Bq11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2r  c                     | \  }}t          j        |t          j        d          g          }|t          j        d          k    sJ d S )Nr      )r&   rG   r   r   )r   r   r*   r"  s       r   test_scalar_inputr(  q  sG    ,Hi

9ry}}o
6
6C")B--r   c                    | \  }}t          j        t          j                              }|                                dk    sJ t          j        dgdz  t          j                    |          }|                                dk    sJ t          j        ||g           |                                dk    sJ d }|                                dk    sJ d S )Nr   r   r  rf   r  )r   r  r   r   ri   r5   r&   rG   )r   r   r*   r!  r   s        r   test_input_lifetimer*  w  s    ,Hi%b&<&>&>??J%%''1,,,,
!t"(***EEEA%%''83333Y$$$%%''83333A%%''1,,,,,,r   c                 |      fdt          |          D             }t          j                            |           S )Nc                 r    g | ]3\  }}t          j        t          |          |         j                   4S r   )r   ri   listrg   )r   ir   schemas      r   r   z,_record_batch_from_iters.<locals>.<listcomp>  sH     , , ,!Q htAwwVAY^444 , , ,r   arraysr0  )	enumerater   r   r   )r0  itersr2  s   `  r   _record_batch_from_itersr5    sN    , , , ,#E**, , ,F>%%VF%CCCr   c           	      n    t          | t          ||dz             t          |dz   |dz                       S )Nr   r   r'  )r5  range)r0  ns     r   _record_batch_for_ranger9    s<    #F$)!QV$4$4$)!a%R$8$8: : :r   c                       fd}|S )Nc                 8     G fdd          } |            S )Nc                   "    e Zd Zd Z fdZdS ),make_udt_func.<locals>.udf_func.<locals>.UDTc                     d | _         d S r   )callerselfs    r   __init__z5make_udt_func.<locals>.udf_func.<locals>.UDT.__init__  s    "r   c                    	 | j          |          j        d c| _         }|                      |          }n=# t          $ r0 d D             }t          j                            |          }Y nw xY w|                                S )Nc                 D    g | ]}t          j        g |j                   S r-  )r   ri   rg   )r   r   s     r   r   zImake_udt_func.<locals>.udf_func.<locals>.UDT.__call__.<locals>.<listcomp>  s9     3 3 3"' !hr
;;; 3 3 3r   r1  )r?  sendStopIterationr   r   r   r   )rA  r    batchr2  	batch_genr0  s       r   __call__z5make_udt_func.<locals>.udf_func.<locals>.UDT.__call__  s    6{*+49S>>+>(S KK,,EE$ 6 6 63 3+13 3 3FN66%f 7 6 6EEE6
 ,,...s   48 7A21A2Nr   r   r   rB  rI  rH  r0  s   r   UDTr=    sB        # # #
/ 
/ 
/ 
/ 
/ 
/ 
/ 
/r   rL  r   )r    rL  rH  r0  s     r   udf_funczmake_udt_func.<locals>.udf_func  sG    	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ suur   r   )r0  rH  rM  s   `` r   make_udt_funcrN    s)         " Or   c                  J     t                       G fdd            fdS )zA short datasetc                        e Zd Zd Z fdZdS )%datasource1_direct.<locals>.Generatorc                     d| _         d S )Nr   )r8  r@  s    r   rB  z.datasource1_direct.<locals>.Generator.__init__  s    DFFFr   c                     | j         dk    rt          g g           }n%| xj         dz  c_         t          | j                   }|                                S )Nr   r   )r8  r5  r9  r   )rA  r    rG  r0  s      r   rI  z.datasource1_direct.<locals>.Generator.__call__  sS    v{{0R@@!/??((***r   NrJ  )r0  s   r   	GeneratorrQ    s=        	 	 		+ 	+ 	+ 	+ 	+ 	+ 	+r   rT  c                                  S r   r   )r    rT  s    r   <lambda>z$datasource1_direct.<locals>.<lambda>  s    yy{{ r   )datasource1_schema)rT  r0  s   @@r   datasource1_directrX    sR    !!F
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ #""""r   c                  J    t                      fd} t          |           S )Nc              3   ^   K   t          ddd          D ]}t          |dz
            V  d S )Nr   r   r   )r7  r9  r    r8  r0  s     r   rH  z(datasource1_generator.<locals>.batch_gen  sG      q!R 	9 	9A)&!a%888888	9 	9r   rW  rN  rK  s    @r   datasource1_generatorr^    s9    !!F9 9 9 9 9 +++r   c                  J    t                      fd} t          |           S )Nc              3   x   K   t          ddd          D ]}t          |dz
            V  t          d          )Nr   r   r[  r   datasource1_exception)r7  r9  r0   r\  s     r   rH  z(datasource1_exception.<locals>.batch_gen  sL      q!R 	9 	9A)&!a%8888882333r   r]  rK  s    @r   ra  ra    s9    !!F4 4 4 4 4
 +++r   c                  z    t          j        dt          j                    fdt          j                    fg          S )Nr   )r   r0  r9   r   r   r   rW  rW    s-    9r28::&RXZZ(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   r9   )r#   r*   r+   r}   r~   s        r   datasource1_argsrd    s]    '---57 7HHy2rxzz*R,<=>>HHh88r   c                     t                      } |             }| j        }t          ||          }t          j        |  d}t          j        |          D ]}|dz  }|t          ||          k    sJ d S )Nr   r   )rW  r   rd  r&   register_tabular_functioncall_tabular_functionr9  )
func_makerr0  r#   r*   r   r8  items          r   _test_datasource1_udtrj    s    !!F:<<D#I y11I ),,	A(33 : :	Q.vq9999999: :r   c                  .    t          t                     d S r   )rj  rX  r   r   r   test_udt_datasource1_directrl    s    ,-----r   c                  .    t          t                     d S r   )rj  r^  r   r   r   test_udt_datasource1_generatorrn    s    /00000r   c                      t          j        t          d          5  t          t                     d d d            d S # 1 swxY w Y   d S )Nra  r   )r   r   r0   rj  ra  r   r   r   test_udt_datasource1_exceptionrp    s    	|+B	C	C	C 5 534445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   >AAc                     t          j        g dt          j                              }t          j        d|g          }t          j        d          }||k    sJ d S )Ng      $@g      4@      >@g      D@g      I@mean_udfrs  )r   ri   r(   r&   rG   r   )unary_agg_func_fixturearrr   expecteds       r   test_scalar_agg_basicrx    sX    
(1112:<<
@
@Cj3%00FyHXr   c                     t          j        g t          j                              }t          j        t           j        d          5  t          j        d|g           d d d            d S # 1 swxY w Y   d S )Nzempty inputsr   rt  )r   ri   r(   r   r   ArrowInvalidr&   rG   )ru  emptys     r   test_scalar_agg_emptyr|    s    HR&&E	rn	=	=	= . .
eW---. . . . . . . . . . . . . . . . . .s   A++A/2A/c                     t          j        g dt          j                              }t          j        t           j        d          5  t          j        d|g           d d d            d S # 1 swxY w Y   d S )Nr   r   r   (   2   output datatyper   r:   r   ri   r5   r   r   ArrowTypeErrorr&   rG   )r<   rv  s     r   "test_scalar_agg_wrong_output_dtyper    s    
('''
4
4C	r(0A	B	B	B ; ;
2SE:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;   	A--A14A1c                     t          j        g dt          j                              }t          j        t           j        d          5  t          j        d|g           d d d            d S # 1 swxY w Y   d S )Nr~  output typer   r?   r  )r@   rv  s     r   !test_scalar_agg_wrong_output_typer  	  s    
('''
4
4C	r(	>	>	> : :
1C599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 d S )Nr~  )      ?       @      @      @g      @sum_meang     @@)r   ri   r5   r(   r&   rG   r   )varargs_agg_func_fixturearr1arr2r   rw  s        r   test_scalar_agg_varargsr    s    8((("(**55D8---rz||<<DT4L F yHXr   c                     t          j        g dt          j                              }t          j        t
          d          5  t          j        d|g           d d d            d S # 1 swxY w Y   d S )N)r   r   r   r  r  <   r/   r   r3   )r   ri   r5   r   r   r0   r&   rG   )r6   rv  s     r   test_scalar_agg_exceptionr    s    
(+++RXZZ
8
8C	|6	2	2	2 6 6
-u5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   A((A,/A,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          }|                    d                              dg          }|                    d                              d	g                              dd
g          }	|	                    d          |		                    d          k    sJ d S )Nrr  r   r   r   r   r   )g      N@g     Q@g      T@g     V@g      Y@)r   r   r   r   r   idvaluer   r  rt  )r  meanvalue_mean_udf)
r   ri   r(   r9   r   concat_tablesgroup_by	aggregaterename_columnssort_by)
ru  r  r  arr3arr4table1table2r   r   rw  s
             r   test_hash_agg_basicr  #  sT   8222BJLLAAD8OOORXZZ00D8333RZ\\BBD8OOORXZZ00DXtTl4/:::FXtTl4/:::Fff-..E^^D!!++-B,CDDF~~d##--	 +^T3C,DEE  >>$8#3#3D#9#9999999r   c                    t          j        g t          j                              }t          j        g t          j                              }t          j        ||gddg          }|                    d                              dg          }t          j        t          j        g t          j                              t          j        g t          j                              gddg          }||k    sJ d S )Nr  r  r   r  r  )r   ri   r(   r9   r   r  r  )ru  r  r  r   r   rw  s         r   test_hash_agg_emptyr  6  s    8B
%%D8B

##DHdD\$999E^^D!!++-B,CDDFx"bhjj1128
BJLL4 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  |                    d          	                    dg           d d d            d S # 1 swxY w Y   d S )	Nr~  r  r  r  r   r  r   )r  r:   
r   ri   r5   r9   r   r   r   r  r  r  )r<   r  r  r   s       r    test_hash_agg_wrong_output_dtyper  C  s   8((("(**55D8OOORXZZ00DHdD\$999E	r(0A	B	B	B O Ot&&(L'MNNNO O O O O O O O O O O O O O O O O O   *C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  |                    d          	                    dg           d d d            d S # 1 swxY w Y   d S )	Nr~  r  r  r  r   r  r   )r  r?   r  )r@   r  r  r   s       r   test_hash_agg_wrong_output_typer  L  s   8((("(**55D8OOORXZZ00DHdD\$999E	r(	>	>	> N Nt&&(K'LMMMN N N N N N N N N N N N N N N N N N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  |                    d          	                    dg           d d d            d S # 1 swxY w Y   d S )	Nr~  r  r  r  r   r/   r   )r  r3   )
r   ri   r5   r9   r   r   r   r0   r  r  )r6   r  r  r   s       r   test_hash_agg_exceptionr  U  s   8((("(**55D8OOORXZZ00DHdD\$999E	|6	2	2	2 J Jt&&(G'HIIIJ J J J J J J J J J J J J J J J J Js   *B==CCc                 f   d}d}t          j        t          j        d|          t          j                              }t          j        t          j                            ||          t          j                              }t          j        ||gddg          }|	                    d          
                    dg          }|	                    d          
                    dg                              dd	g          }|                    d          |                    d          k    sJ d
S )z2Test hash aggregate udf with randomly sampled datai@B r  r   r  r  r   )r  r$   )r  sumvalue_sum_udfN)r   ri   r   repeatr(   randomchoicer9   r   r  r  r  r  )r,   	value_num	group_numr  r  r   r   rw  s           r   test_hash_agg_randomr  _  s    II8BIa++RZ\\::D8BI$$Y	::BHJJGGDHdD\$999E^^D!!++-A,BCCF~~d##--	 *ND/+BCC  >>$8#3#3D#9#9999999r   c                     t          j        g dt          j                              }t          j        d|g          } | d         d |          }||k    sJ d S )Nrr  r   r   r   ri   r(   r&   rG   r   rv  r   rw  s       r   test_vector_basicr  r  sb    
(1112:<<
@
@Cou55F+(+D#66HXr   c                     t          j        dgt          j                              }t          j        d|g          } | d         d |          }||k    sJ d S )Nr   r   r   r  r  s       r   test_vector_emptyr  z  s]    
(A3

%
%Cou55F+(+D#66HXr   c                 :   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 d S )N)r   r   r   r   )r  r  r  r  )r   r   r   r   r   r   )r   ri   r5   r(   r&   rG   )r   r   r   rQ   r   rw  s         r   test_vector_structr    s    
bhjj	 	A 	bjll	 	A 	   	 	A lQ1I66F,)!,T1a;;HXr   )r   )r   )Pr   numpyr   ImportErrorpyarrowr   r   r&   markr   
pytestmarkr%   pyarrow.datasetr   r   r0   r   fixturer,   r6   r<   r@   rM   rX   ra   rr   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r{   r   r   r  r  r#  r%  r(  r*  r5  r9  rN  rX  r^  ra  rW  rd  rj  rl  rn  rp  rx  r|  r  r  r  r  r  r  r  r  r  r  pandasr  r  r  r   r   r   <module>r     s9  &    	BBB     ! ! ! ! ! ! [ 
 r22          	BBBD D D D
	 	 	 	 	l 	 	 	 i     ! * i     ! & i      ! $ i      ! $ i   & & ! &( i   ' ' ! '0 i   ' ' ! '2 i   # # ! #, i     ! 0 i   ( ( ! (( i   , , ! ,( i   & & ! &( i   # # ! #  i     !   i     ! , *.'+C C C C C@      	 	 	/. /. /.d* * *. . .>* * *& & &2 2 2: : :2 2 2= = ="8 8 8"- - -2 2 2     - - -D D D: : :  *# # #$, , ,, , ,; ; ;9 9 9	: 	: 	:. . .1 1 15 5 5
    . . .; ; ;: : :    6 6 6 : : :$ 	 	 	O O ON N N J J J : : :$           s    ; AA