
    <>i`t                        S SK r  S SKrS SKrS SKJr  \ R                  R                  r
SSS.r S SKJ	r  SIS jr " S S\5      r\ R"                  " SS	9S
 5       r\ R"                  " SS	9S 5       r\ R"                  " SS	9SJS j5       r\ R"                  " SS	9SJS j5       r\ R"                  " SS	9S 5       r\ R"                  " SS	9S 5       r\ R"                  " SS	9S 5       r\ R"                  " SS	9S 5       r\ R"                  " SS	9S 5       r\ R"                  " SS	9S 5       r\ R"                  " SS	9S 5       r\ R"                  " SS	9S 5       r\ R"                  " SS	9S 5       r\ R"                  " SS	9S 5       r\ R"                  " SS	9S 5       r SSS.S jr!S r"S r#S r$S r%S  r&S! r'S" r(S# r)S$ r*S% r+S& r,S' r-S( r.S) r/S* r0S+ r1S, r2S- r3S. r4S/ r5S0 r6S1 r7S2 r8S3 r9S4 r:S5 r;S6 r<S7 r=S8 r>S9 r?\ R                  R                  S: 5       r@\ R                  R                  S; 5       rAS< rBS= rC\ R                  R                  S> 5       rD\ R                  R                  S? 5       rE\ R                  R                  S@ 5       rF\ R                  R                  SA 5       rGSB rHSC rI\ R                  R                  SD 5       rJ\ R                  R                  SE 5       rK\ R                  R                  SF 5       rM\ R                  R                  SG 5       rN\ R                  R                  SH 5       rOg! \ a    Sr GN8f = f! \ a    Sr GNf = f)K    N)compute summarydescriptionc                 F    SSK Jn  U" [        R                  " 5       U 5      $ )Nr   )_get_udf_context)pyarrow._computer	   padefault_memory_pool)batch_lengthr	   s     U/var/www/html/land-tabula/venv/lib/python3.13/site-packages/pyarrow/tests/test_udf.pymock_udf_contextr   )   s    1B224lCC    c                       \ rS rSrSrg)MyError.    N)__name__
__module____qualname____firstlineno____static_attributes__r   r   r   r   r   .   s    r   r   session)scopec                      S n Sn[         n[        R                  " U UUS[        R                  " 5       0[        R                  " 5       5        X4$ )z,
Register a unary aggregate function (mean)
c                 V    [         R                  " [        R                  " U5      5      $ N)r   scalarnpnansum)ctxxargss      r   func"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   sN    
' IH""4#,#+'*BJJL$% $&::<% ?r   c                      S n Sn[         n[        R                  " U UUS[        R                  " 5       0[        R                  " 5       5        X4$ )Nc                     [        S5      e)NOops)RuntimeErrorr   r   lenr"   r#   s     r   r%   (exception_agg_func_fixture.<locals>.funcJ   s    6""r   y=exception_len(x)r#   r(   r)   r*   r   int64r,   s      r   exception_agg_func_fixturer:   H   sN    ! %IH""4#,#+'*BHHJ$% $&88:% ?r   c                     S nSn[         n[        R                  " UUUS[        R                  " 5       0[        R                  " 5       5        X4$ )Nc                 h    [         R                  " [        U5      [         R                  " 5       5      $ r   )r   r   r4   int32r5   s     r   r%   1wrong_output_dtype_agg_func_fixture.<locals>.func^   s    yyQ,,r   y=wrong_output_dtype(x)r#   r8   r   r%   r-   r.   s       r   #wrong_output_dtype_agg_func_fixturerA   \   sN    - *IH""4#,#+'*BHHJ$% $&88:% ?r   c                     S nSn[         n[        R                  " UUUS[        R                  " 5       0[        R                  " 5       5        X4$ )Nc                     [        U5      $ r   )r4   r5   s     r   r%   0wrong_output_type_agg_func_fixture.<locals>.funcq   s    1vr   y=wrong_output_type(x)r#   r8   r@   s       r   "wrong_output_type_agg_func_fixturerF   o   sN     )IH""4#,#+'*BHHJ$% $&88:% ?r   c                      S n SnSSS.n[         R                  " U UU[        R                  " 5       [        R                  " 5       S.[        R                  " 5       5        X4$ )z$
Register a binary scalar function.
c                 D    [         R                  " SX/U R                  S9$ )Nmultiplymemory_poolr)   call_functionrK   )r"   mr#   s      r   binary_function,binary_func_fixture.<locals>.binary_function   s"    
QF,/OO= 	=r   zy=mxzfind y from y = mxr   )rN   r#   r)   register_scalar_functionr   r9   )rO   r-   
binary_docs      r   binary_func_fixturerT      s^    
= I#!57J ) *&(hhj&(hhj!# !#
, %%r   c            	          S n SSS.nSn[         R                  " U UU[        R                  " 5       [        R                  " 5       [        R                  " 5       S.[        R                  " 5       5        X4$ )z%
Register a ternary scalar function.
c                     [         R                  " SX/U R                  S9n[         R                  " SXC/U R                  S9$ )NrI   rJ   addrL   )r"   rN   r#   cmxs        r   ternary_function.ternary_func_fixture.<locals>.ternary_function   s?    j1&*-//;w,/OO= 	=r   zy=mx+czfind y from y = mx + cr   )array1array2array3rQ   )rZ   ternary_docr-   s      r   ternary_func_fixturer`      sh    
=
 '":<KI 0 ) +.0hhj.0hhj.0hhj!"
 !#
, &&r   c                      S n SnSSS.n[         R                  " U UU[        R                  " 5       [        R                  " 5       S.[        R                  " 5       5        X4$ )zA
Register a varargs scalar function with at least two arguments.
c                 ^    UnU H$  n[         R                  " SX4/U R                  S9nM&     U$ )NrW   rJ   rL   )r"   firstvaluesaccvals        r   varargs_function.varargs_func_fixture.<locals>.varargs_function   s6    C""53*/2@C  
r   z	z=ax+by+czfind z from z = ax + by + cr   )r\   r]   rQ   )rg   r-   varargs_docs      r   varargs_func_fixturerj      sa    
 I)"?K  0 ) +.0hhj.0hhj!" !#
, &&r   c                  v    S n SSS.nSn[         R                  " U UU0 [        R                  " 5       5        X4$ )z%
Register a nullary scalar function.
c                     [         R                  " S/U R                  -  [         R                  " 5       U R                  S9$ N*   typerK   r   arrayr   r9   rK   contexts    r   nullary_func*nullary_func_fixture.<locals>.nullary_func   3    xxw333"((*$+$7$79 	9r   random functiongenerates a random valuer   test_nullary_funcrQ   ru   r.   r-   s      r   nullary_func_fixturer|      sJ    
9
 %1H $I ) ( " "
	, ""r   c                  t    S n SSS.nSn[         R                  " U UU0 [        R                  " 5       5        U$ )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                     [         R                  " S/U R                  -  [         R                  " 5       U R                  S9$ rm   rq   rs   s    r   ru   4ephemeral_nullary_func_fixture.<locals>.nullary_func   rw   r   rx   ry   r   test_ephemeral_nullary_funcrQ   r{   s      r   ephemeral_nullary_func_fixturer      sG    9
 %1H .I ) ( " "
	, r   c                  z    S n Sn0 n[         R                  " 5       nSSS.n[        R                  " XUX#5        X4$ )z]
Register a scalar function which returns something that is neither
a Arrow scalar or array.
c                     g)Nrn   r   r"   s    r   wrong_output_type9wrong_output_type_func_fixture.<locals>.wrong_output_type   s    r   test_wrong_output_typezreturn wrong output typer   r   r   r9   r)   rR   )r   r-   in_typesout_typedocs        r   wrong_output_type_func_fixturer      sL     )IHxxzH-C  1c (4''r   c                      S n SnS[         R                  " 5       0n[         R                  " 5       nSSS.n[        R                  " XUX#5        X4$ )ze
Register a scalar function whose actual output DataType doesn't
match the declared output DataType.
c                 4    [         R                  " SUS/5      $ NrW      r)   rM   )r"   rr   s     r   wrong_output_datatypeAwrong_output_datatype_func_fixture.<locals>.wrong_output_datatype  s    qz22r   test_wrong_output_datatyperr   zreturn wrong output datatyper   r   )r   r9   int16r)   rR   )r   r-   r   r   r   s        r   "wrong_output_datatype_func_fixturer     sU    3,I$HxxzH1C  5# (4 ++r   c                  z    S n Sn0 n[         R                  " 5       nSSS.n[        R                  " XUX#5        X4$ )z6
Register a scalar function with the wrong signature.
c                  R    [         R                  " S[         R                  " 5       S9$ )Nr   rp   )r   r   r9   r   r   r   wrong_signature5wrong_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   $  sK    - 'IHxxzH-C C (4%%r   c                  t    S n SnSSS.n[         R                  " XU0 [        R                  " 5       5        X4$ )z=
Register a scalar function which raises a custom exception.
c                     [        S5      e)Nerror raised by scalar UDF)r   r   s    r   raising_func*raising_func_fixture.<locals>.raising_func>  s    233r   
test_raisezraising functionr   r   rQ   )r   r-   r   s      r   raising_func_fixturer   9  sA    
4I%C  "BHHJ0""r   c                      S n Sn[         n[        R                  " XUS[        R                  " 5       0[        R                  " 5       5        X4$ )z
Register a vector function
c                     [         R                  " UR                  5       R                  5       R	                  SS95      $ )NT)pct)r   rr   	to_pandascopyrankr5   s     r   pct_rank+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  sJ    
=  I
CS #RZZ\;346JJLB r   c                  v   S n Sn[         n[        R                  " XU[        R                  " 5       [        R
                  " 5       [        R                  " 5       S.[        R                  " S[        R                  " 5       4S[        R
                  " 5       4S[        R
                  " 5       4/5      5        X4$ )z8
Register a vector function that returns a struct array
c                     [         R                  R                  XU// SQS9R                  5       nUR	                  SSSS9R                  5       n[         R                  R                  U5      R                  5       $ )NkvrX   namesrX   r   r   )columnsrd   index)r   RecordBatchfrom_arraysr   pivotreset_indexfrom_pandasto_struct_array)r"   r   r   rX   dfdf_pivots         r   r   )struct_vector_func_fixture.<locals>.pivot`  sc    ^^''q	'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   r9   r+   utf8struct)r   r-   r   s      r   struct_vector_func_fixturer   [  s    
F
 I
C#hhjrzz|"'')<
		C$tRZZ\&:T2::<<PQR r   Trun_in_datasetr   c                   U u  pEUcB  SnU H1  n[        U[        R                  5      (       d  M$  Sn[        U5      nM3     U(       a  Sn[        R
                  " U5      nUR                  U:X  d   e[        R                  " XQUS9n	U" [        U5      /UQ76 n
X:X  d   eU(       a  U VVs/ s H
  u  pSU 3PM     nnn[        R                  R                  X5      n[        R                  " U5      nU Vs/ s H  n[        R                  " U5      PM     nnUR                  S[        R                  " S5      R                  UU5      0S9nUR!                  S	5      R"                  S	   U
:X  d   eg g s  snnf s  snf )
NTFr   lengthfieldresultr   )r   r   )
isinstancer   Arrayr4   r)   get_functionnamerM   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  sa    "NH
C#rxx(("
"3x  L??4 D99d<@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   ,E69 E<c                 r    [        U [        R                  " SS/[        R                  " 5       5      /5        g )N
      r   r   rr   r9   )unary_func_fixtures    r   test_udf_array_unaryr     s*    , hhBx<r   c           	          [        U [        R                  " SS/[        R                  " 5       5      [        R                  " SS/[        R                  " 5       5      /5        g )Nr   r         r   )rT   s    r   test_udf_array_binaryr     sB    - hhBx< hh1vrxxz:r   c           
         [        U [        R                  " SS/[        R                  " 5       5      [        R                  " SS/[        R                  " 5       5      [        R                  " SS/[        R                  " 5       5      /5        g )Nr   r   r   r      r   )r`   s    r   test_udf_array_ternaryr     sZ    . hhBx< hh1vrxxz: hh2w
;r   c                    [        U [        R                  " SS/[        R                  " 5       5      [        R                  " SS/[        R                  " 5       5      [        R                  " SS/[        R                  " 5       5      [        R                  " SS/[        R                  " 5       5      [        R                  " SS/[        R                  " 5       5      /5        g )Nr      r   r         r   r   )rj   s    r   test_udf_array_varargsr     s    . hh1vrxxz: hhBx< hh1vrxxz: hhBx< hh2w
;r   c                     SSS.n S[         R                  " 5       0n[         R                  " 5       nS n[        R                  " [        5         [
        R                  " US XU5        S S S 5        [        R                  " [        SS9   [
        R                  " S SXU5        S S S 5        S	n[        R                  " [        US9   [
        R                  " US
XS 5        S S S 5        Sn[        R                  " [        US9   [
        R                  " USU S U5        S S S 5        [
        R                  " USU 0 U5        Sn[        R                  " [        US9   [
        R                  " USU 0 U5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nztest udf inputzparameters are validatedr   r   c                 0    [         R                  " S/5      $ )Nr   )r   rr   rs   s    r   test_reg_function3test_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   r9   pytestraises	TypeErrorr)   rR   KeyError)r   r   r   r   expected_exprs        r   test_registration_errorsr    s|    $1C "((*%HxxzH 
y	!
##$5$(#$,	. 
" 
y(A	B
##D*>$,	. 
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#F4G 
F
F #
F14
G
Gc                     U u  pSn[         R                  " [        US9   [        R                  " US/5        S S S 5        g ! , (       d  f       g = f)Nz9VarArgs function 'z=ax\+by\+c' needs at least 2 argumentsr   rn   )r  r  
ValueErrorr)   rM   )rj   _r-   	error_msgs       r    test_varargs_function_validationr    s:    'LALI	z	3
RD) 
4	3	3s   A
Ac                     S[         R                  " 5       0n [         R                  " 5       nSS0nS n[        R                  " [        SS9   [
        R                  " USX U5        S S S 5        SS	0n[        R                  " [        S
S9   [
        R                  " USX U5        S S S 5        g ! , (       d  f       NN= f! , (       d  f       g = f)Nr   r   descc                 4    [         R                  " SUS/5      $ r   r   )r"   r   s     r   	add_const/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   r9   r  r  r
  r)   rR   )r   r   r.   r  s       r   test_function_doc_validationr    s    "((*%HxxzH 	vH4 
zB
D
##I/@$,$,	.
D 	>H 
zF
H
##I~$,$,	.
H 
H
D 
D
H 
Hs   B/C /
B= 
Cc                     [        U / SSS9  g )NFr   r   )r   )r|   s    r   test_nullary_functionr    s     .5'(*r   c                 b    U n[         R                  " U/ SS9nUR                  5       S/:X  d   eg )Nr   r   rn   )r)   rM   	to_pylist)r   r   r   s      r   test_ephemeral_functionr    s4    )DdBq1F"%%%r   c                     U u  p[         R                  " [        SS9   [        R                  " U/ SS9  S S S 5        g ! , (       d  f       g = f)NzUnexpected output type: intr   r   r   r  r  r  r)   rM   )r   r  r-   s      r   r   r     s<    1LA	y:
<
Bq1
< 
< 
<	   >
Ac                     U u  pSn[         R                  " [        US9   [        R                  " U[
        R                  " SS/5      /5        S S S 5        g ! , (       d  f       g = f)NzDExpected output datatype int16, but function returned datatype int64r   r   r   )r  r  r  r)   rM   r   rr   )r   r  r-   r  s       r   r   r   &  sL    5LA<M 
y	6
RXXr2h%7$89 
7	6	6s   /A
A&c                     U u  pSn[         R                  " [        US9   [        R                  " U/ SS9  S S S 5        g ! , (       d  f       g = f)Nz@wrong_signature\(\) takes 0 positional arguments but 1 was givenr   r   r   r  )r   r  r-   r  s       r   r   r   0  s>    /LA'M 
y	6
Bq1 
7	6	6s   A  
Ac                      S n SnS[         R                  " 5       0n0 nSSS.n[        R                  " [        SS9   [
        R                  " XXBU5        S S S 5        g ! , (       d  f       g = f)	Nc                     U$ r   r   r"   rf   s     r   identity1test_wrong_datatype_declaration.<locals>.identity;      
r   test_wrong_datatype_declarationrr   ztest output valueztest outputr   z%DataType expected, got <class 'dict'>r   r   r9   r  r  r  r)   rR   r#  r-   r   r   r   s        r   r&  r&  :  sl     2I$HH&$C 
yD
F
##H$'8	=
F 
F 
F   A
A-c                      S n SnSS 0n[         R                  " 5       nSSS.n[        R                  " [        SS9   [
        R                  " XUX#5        S S S 5        g ! , (       d  f       g = f)	Nc                     U$ r   r   r"  s     r   r#  3test_wrong_input_type_declaration.<locals>.identityL  r%  r   !test_wrong_input_type_declarationrr   ztest invalid input typezinvalid input functionr   r   r   r'  r(  s        r   r-  r-  K  sk     4IHxxzH,/C 
yH
J
##H$,	8
J 
J 
Jr)  c                    [         R                  " [         R                  " 5       5      nU u  p#[        R                  " U[         R
                  " S/S-  [         R                  " 5       S9/US9nU[         R
                  " S/S-  [         R                  " 5       S9:X  d   eUR                  5       S:X  d   eS nUR                  5       S:X  d   eg )Nr     r   rJ   r   @  r   )r   proxy_memory_poolr   r)   rM   rr   r9   bytes_allocated)r   
proxy_poolr  r-   ress        r   test_scalar_udf_contextr5  \  s    %%b&<&<&>?J%LA


9HHaS4ZbhhjAB'13C "((A3:BHHJ7777%%'8333
C%%'1,,,r   c                     U u  p[         R                  " [        SS9   [        R                  " U/ SS9  S S S 5        g ! , (       d  f       g = f)Nr   r   r   r   )r  r  r   r)   rM   )r   r  r-   s      r   test_raising_funcr7  k  s7    'LA	w&B	C
Bq1 
D	C	Cr  c                     U u  p[         R                  " U[        R                  " S5      /5      nU[        R                  " S5      :X  d   eg )Nr      )r)   rM   r   r   )r   r   r-   r4  s       r   test_scalar_inputr:  q  s<    ,H


9ryy}o
6C"))B-r   c                    U u  p[         R                  " [         R                  " 5       5      nUR                  5       S:X  d   e[         R                  " S/S-  [         R
                  " 5       US9nUR                  5       S:X  d   e[        R                  " X$/5        UR                  5       S:X  d   eS nUR                  5       S:X  d   eg )Nr   r   r/  ro   r0  )r   r1  r   r2  rr   r9   r)   rM   )r   r   r-   r3  r   s        r   test_input_lifetimer<  w  s    ,H%%b&<&<&>?J%%'1,,,
!t"((**EA%%'8333Y$%%'8333A%%'1,,,r   c           	          [        U5       VVs/ s H/  u  p#[        R                  " [        U5      X   R                  S9PM1     nnn[        R
                  R                  X@S9$ s  snnf Nr   )arraysschema)	enumerater   rr   listrp   r   r   )r@  itersir   r?  s        r   _record_batch_from_itersrE    s[    #E*,*$! hhtAwVY^^4*  ,>>%%V%CC,s   6A%c           	      T    [        U [        XS-   5      [        US-   US-   5      5      $ )Nr   r   r9  )rE  range)r@  ns     r   _record_batch_for_rangerI    s/    #F$)!V$4$)!a%R$8: :r   c                    ^ ^ UU 4S jnU$ )Nc                 .   >  " UU4S jS5      nU" 5       $ )Nc                   *   > \ rS rSrS rU U4S jrSrg),make_udt_func.<locals>.udf_func.<locals>.UDTi  c                     S U l         g r   callerselfs    r   __init__5make_udt_func.<locals>.udf_func.<locals>.UDT.__init__  s	    "r   c           	      z  >  U R                   c  T" U5      R                  S sU l         nU R                  U5      nUR                  5       $ ! [         ae    T Vs/ s H"  n[        R                  " / UR
                  S9PM$     Os  snf nn[        R                  R                  UTS9n UR                  5       $ f = fr>  )	rP  sendStopIterationr   rr   rp   r   r   r   )rR  r"   batchr   r?  	batch_genr@  s        r   __call__5make_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   8A B:)B&B:9B:rO  Nr   r   r   r   rS  rZ  r   rY  r@  s   r   UDTrM    s    #
/ 
/r   r^  r   )r"   r^  rY  r@  s     r   udf_funcmake_udt_func.<locals>.udf_func  s    	/ 	/ ur   r   )r@  rY  r_  s   `` r   make_udt_funcra    s    " Or   c                  @   ^ ^ [        5       m " U4S jS5      m U 4S j$ )zA short datasetc                   (   > \ rS rSrS rU 4S jrSrg)%datasource1_direct.<locals>.Generatori  c                     SU l         g )Nr   rH  rQ  s    r   rS  .datasource1_direct.<locals>.Generator.__init__  s	    DFr   c                    > U R                   S:X  a  [        T/ / 5      nUR                  5       $ U =R                   S-  sl         [        TU R                   5      nUR                  5       $ )Nr   r   )rH  rE  rI  r   )rR  r"   rX  r@  s      r   rZ  .datasource1_direct.<locals>.Generator.__call__  s[    vv{0R@ ((** !/?((**r   rf  Nr\  )r@  s   r   	Generatorrd    s    		+ 	+r   rj  c                    > T" 5       $ r   r   )r"   rj  s    r   <lambda>$datasource1_direct.<locals>.<lambda>  s    y{r   )datasource1_schema)rj  r@  s   @@r   datasource1_directro    s    !F
+ 
+ #"r   c                  <   ^ [        5       mU4S jn [        TU 5      $ )Nc              3   X   >#    [        SSS5       H  n[        TUS-
  5      v   M     g 7f)Nr   r   r   )rG  rI  r"   rH  r@  s     r   rY  (datasource1_generator.<locals>.batch_gen  s)     q!RA)&!a%88 !s   '*rn  ra  r]  s    @r   datasource1_generatorrv    s    !F9 ++r   c                  <   ^ [        5       mU4S jn [        TU 5      $ )Nc              3   l   >#    [        SSS5       H  n[        TUS-
  5      v   M     [        S5      e7f)Nr   r   rr  r   datasource1_exception)rG  rI  r3   rs  s     r   rY  (datasource1_exception.<locals>.batch_gen  s7     q!RA)&!a%88 ! 233s   14ru  r]  s    @r   ry  ry    s    !F4
 ++r   c                      [         R                  " S[         R                  " 5       4S[         R                  " 5       4/5      $ )Nr   )r   r@  r=   r   r   r   rn  rn    s,    99r288:&RXXZ(89::r   c                     U S3SS.n0 n[         R                  " S[         R                  " 5       4S[         R                  " 5       4/5      nXX#U4$ )Nz UDTztest {func_name} UDTr   r   )r   r   r=   )r%   r-   r.   r   r   s        r   datasource1_argsr}    sQ    '[-57HHyy2rxxz*R,<=>HH88r   c                     [        5       nU " 5       nU R                  n[        X#5      n[        R                  " U6   Sn[        R
                  " U5       H  nUS-  nU[        X5      :X  a  M   e   g )Nr   r   )rn  r   r}  r)   register_tabular_functioncall_tabular_functionrI  )
func_makerr@  r%   r-   r   rH  items          r   _test_datasource1_udtr    sk    !F<D##I 1I  ),	A((3	Q.v9999 4r   c                  "    [        [        5        g r   )r  ro  r   r   r   test_udt_datasource1_directr    s    ,-r   c                  "    [        [        5        g r   )r  rv  r   r   r   test_udt_datasource1_generatorr    s    /0r   c                      [         R                  " [        SS9   [        [        5        S S S 5        g ! , (       d  f       g = f)Nry  r   )r  r  r3   r  ry  r   r   r   test_udt_datasource1_exceptionr    s'    	|+B	C34 
D	C	Cs	   3
Ac                     [         R                  " / SQ[         R                  " 5       5      n[        R                  " SU/5      n[         R
                  " S5      nX#:X  d   eg )Ng      $@g      4@      >@g      D@g      I@mean_udfr  )r   rr   r+   r)   rM   r   )unary_agg_func_fixturearrr   expecteds       r   test_scalar_agg_basicr    sF    
((12::<
@Cj3%0FyyHr   c                    [         R                  " / [         R                  " 5       5      n[        R                  " [         R
                  SS9   [        R                  " SU/5        S S S 5        g ! , (       d  f       g = f)Nzempty inputsr   r  )r   rr   r+   r  r  ArrowInvalidr)   rM   )r  emptys     r   test_scalar_agg_emptyr    sH    HHR&E	rn	=
eW- 
>	=	=s   A00
A>c                    [         R                  " / SQ[         R                  " 5       5      n[        R                  " [         R
                  SS9   [        R                  " SU/5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   (   2   output datatyper   r?   r   rr   r9   r  r  ArrowTypeErrorr)   rM   )rA   r  s     r   "test_scalar_agg_wrong_output_dtyper    sN    
(('
4C	r((0A	B
2SE: 
C	B	B   A22
B c                    [         R                  " / SQ[         R                  " 5       5      n[        R                  " [         R
                  SS9   [        R                  " SU/5        S S S 5        g ! , (       d  f       g = f)Nr  output typer   rE   r  )rF   r  s     r   !test_scalar_agg_wrong_output_typer  	  sL    
(('
4C	r((	>
1C59 
?	>	>r  c                    [         R                  " / SQ[         R                  " 5       5      n[         R                  " / SQ[         R                  " 5       5      n[        R
                  " SX/5      n[         R                  " S5      nX4:X  d   eg )Nr  )      ?       @      @      @g      @sum_meang     @@)r   rr   r9   r+   r)   rM   r   )varargs_agg_func_fixturearr1arr2r   r  s        r   test_scalar_agg_varargsr    sb    88("((*5D88-rzz|<DTLF yyHr   c                     [         R                  " / SQ[         R                  " 5       5      n[        R                  " [
        SS9   [        R                  " SU/5        S S S 5        g ! , (       d  f       g = f)N)r   r   r   r  r  <   r2   r   r7   )r   rr   r9   r  r  r3   r)   rM   )r:   r  s     r   test_scalar_agg_exceptionr    sF    
((+RXXZ
8C	|6	2
-u5 
3	2	2s   A((
A6c                    [         R                  " / SQ[         R                  " 5       5      n[         R                  " / SQ[         R                  " 5       5      n[         R                  " / SQ[         R                  " 5       5      n[         R                  " / SQ[         R                  " 5       5      n[         R                  " X!/SS/S9n[         R                  " XC/SS/S9n[         R
                  " XV/5      nUR                  S5      R                  S/5      nUR                  S5      R                  S	/5      R                  SS
/5      n	UR                  S5      U	R                  S5      :X  d   eg )Nr  r   r   r   r   r   )g      N@g     Q@g      T@g     V@g      Y@)r   r   r   r   r   idvaluer   r  r  )r  meanvalue_mean_udf)
r   rr   r+   r=   r   concat_tablesgroup_by	aggregaterename_columnssort_by)
r  r  r  arr3arr4table1table2r   r   r  s
             r   test_hash_agg_basicr  #  s   882BJJLAD88ORXXZ0D883RZZ\BD88ORXXZ0DXXtl4/:FXXtl4/:Ff-.E^^D!++-B,CDF~~d#--	+^T3C,DE  >>$8#3#3D#9999r   c                    [         R                  " / [         R                  " 5       5      n[         R                  " / [         R                  " 5       5      n[         R                  " X!/SS/S9nUR                  S5      R                  S/5      n[         R                  " [         R                  " / [         R                  " 5       5      [         R                  " / [         R                  " 5       5      /SS/S9nXE:X  d   eg )Nr  r  r   r  r  )r   rr   r+   r=   r   r  r  )r  r  r  r   r   r  s         r   test_hash_agg_emptyr  6  s    88B

%D88B
#DHHd\$9E^^D!++-B,CDFxx"bhhj1288
BJJL4 #')9":<H r   c                    [         R                  " / SQ[         R                  " 5       5      n[         R                  " / SQ[         R                  " 5       5      n[         R                  " X!/SS/S9n[
        R                  " [         R                  SS9   UR                  S5      R                  S/5        S S S 5        g ! , (       d  f       g = f)	Nr  r  r  r  r   r  r   )r  r?   
r   rr   r9   r=   r   r  r  r  r  r  )rA   r  r  r   s       r    test_hash_agg_wrong_output_dtyper  C  s    88("((*5D88ORXXZ0DHHd\$9E	r((0A	Bt&&(L'MN 
C	B	B   "B??
Cc                    [         R                  " / SQ[         R                  " 5       5      n[         R                  " / SQ[         R                  " 5       5      n[         R                  " X!/SS/S9n[
        R                  " [         R                  SS9   UR                  S5      R                  S/5        S S S 5        g ! , (       d  f       g = f)	Nr  r  r  r  r   r  r   )r  rE   r  )rF   r  r  r   s       r   test_hash_agg_wrong_output_typer  L  s    88("((*5D88ORXXZ0DHHd\$9E	r((	>t&&(K'LM 
?	>	>r  c                    [         R                  " / SQ[         R                  " 5       5      n[         R                  " / SQ[         R                  " 5       5      n[         R                  " X!/SS/S9n[
        R                  " [        SS9   UR                  S5      R                  S/5        S S S 5        g ! , (       d  f       g = f)	Nr  r  r  r  r   r2   r   )r  r7   )
r   rr   r9   r=   r   r  r  r3   r  r  )r:   r  r  r   s       r   test_hash_agg_exceptionr  U  sz    88("((*5D88ORXXZ0DHHd\$9E	|6	2t&&(G'HI 
3	2	2s   
"B55
Cc                 :   SnSn[         R                  " [        R                  " SU5      [         R                  " 5       5      n[         R                  " [        R
                  R                  X!5      [         R                  " 5       5      n[         R                  " XC/SS/S9nUR                  S5      R                  S/5      nUR                  S5      R                  S/5      R                  SS	/5      nUR                  S5      UR                  S5      :X  d   eg
)z2Test hash aggregate udf with randomly sampled datai@B r/  r   r  r  r   )r  r'   )r  sumvalue_sum_udfN)r   rr   r    repeatr+   randomchoicer=   r   r  r  r  r  )r/   	value_num	group_numr  r  r   r   r  s           r   test_hash_agg_randomr  _  s     II88BIIa+RZZ\:D88BII$$Y:BHHJGDHHd\$9E^^D!++-A,BCF~~d#--	*ND/+BC  >>$8#3#3D#9999r   c                     [         R                  " / SQ[         R                  " 5       5      n[        R                  " SU/5      nU S   " S U5      nX#:X  d   eg )Nr  r   r   r   rr   r+   r)   rM   r   r  r   r  s       r   test_vector_basicr  r  sJ    
((12::<
@Cou5F(+D#6Hr   c                     [         R                  " S/[         R                  " 5       5      n[        R                  " SU/5      nU S   " S U5      nX#:X  d   eg )Nr   r   r   r  r  s       r   test_vector_emptyr  z  sK    
((A3


%Cou5F(+D#6Hr   c                 >   [         R                  " / SQ[         R                  " 5       5      n[         R                  " / SQ[         R                  " 5       5      n[         R                  " / SQ5      n[        R
                  " SXU/5      nU S   " S XU5      nXE:X  d   eg )N)r   r   r   r   )r  r  r  r  )r   r   r   r   r   r   )r   rr   r9   r+   r)   rM   )r   r   r   rX   r   r  s         r   test_vector_structr    s    
bhhj	A 	bjjl	A 	 	A lQ1I6F)!,T1;Hr   )r   )r   )Pr  numpyr    ImportErrorpyarrowr   r   r)   markr   
pytestmarkr(   pyarrow.datasetr   r   r3   r   fixturer/   r:   rA   rF   rT   r`   rj   r|   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r   r   r&  r-  r5  r7  r:  r<  rE  rI  ra  ro  rv  ry  rn  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  pandasr  r  r  r   r   r   <module>r     s9  &   ! [[  
 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"   L7 M 7MMMM