
    bMh                        d Z ddlZddlZddlmZ ddlZddlZddlZddlm	Z	 ddl
mZ ddlZddlmZmZmZmZmZmZ ddlmZ ddlmZ d Zd	 Zd
 Zd Zd Zd Zd Zd Z d Z!ej"        #                    dd d d gg          d             Z$d Z%d Z&ej"        #                    ddg ddi fddgdz  e'e(e(e(dfd d!gdz  e'e(e(e(dfdg dd"d#difddgdz  d"e(e(e(dfd d!gdz  d"d$d$d$dfg          d%             Z)ej"        #                    d&dd'd(gd)d*gd+d,ggddd-fdd.gd'z  gdz  d$fd d'gd'z  gdz  d$d$d-fg          d/             Z*d0 Z+d1 Z,d2 Z-d3 Z.d4 Z/d5 Z0d6 Z1d7 Z2d8 Z3d9 Z4d: Z5d; Z6ej"        #                    d<d= d> d? d@ dA dB g          dC             Z7ej"        #                    dDdEg edFgdEG          fdEdHg edFgd'ggdgdggdEdHgI          fg          ej"        #                    dJg dK          ej"        #                    dLg dK          ej"        #                    dMg dN          dO                                                 Z8ej"        #                    dDdEg edFgdEG          fdEdHg edFgd'ggdgdggdEdHgI          fg          ej"        #                    dPg dQ          ej"        #                    dRe9e'e(g          ej"        #                    dMg dN          dS                                                 Z:dT Z;dU Z<ej"        #                    dRej=        ej>        g          ej"        #                    dVg dW          dX                         Z?dY Z@ej"        #                    dZ ejA         eBd[                     ejC        dd           ejD        d\dd]^           ejE        g d_          g          d`             ZFda ZGdb ZH G dc dd          ZI G de df          ZJej"        #                    dgdhdiejK        fdjdFdgdkdlgdmdngfdido fdidp fdqejK        fdFdgdFdFgdmdngf ejL        didr           ejL        dqejK                   ejL        dids           dFdgdmdngdFdFgfg          dt             ZMdu ZNdv ZOej"        #                    dwdxdygig dygdzg          d{             ZPd| ZQd} ZRd~ ZSd ZTej"        #                    dd d d g          d             ZUd ZVej"        #                    dd eVg          d             ZWd ZXej"        Y                    d          d             ZZ G d d          Z[d Z\ej"        #                    ddydyddFdgdEdxgdfddyiddEdxgifddyiddFdgifg          d             Z]ej"        #                    ddydrgdydddgfdydydrgdddgfddydrgiddgfg          d             Z^d Z_d Z`d Zad Zbd Zcd Zdd Zeej"        #                    dg ddgfg ddgfg          d             Zfej"        #                    ddddgfdddgfg          d             Zgej"        #                    dg d          d             Zhej"        #                    ddygddrgdHdidddzg          d             Ziej"        #                    dd,dgd,dgd)dggd)d,gdddggdfd,dgd,dgddggd,dgddgdgdfdEdFgdEdFgdHd'gdHdggdEdHgdFd'dggdf ejj        dEdFgdEd'gdHdgdHdggdEdHgdFd'gdgdej"        jY                  g          d             Zkd Zld Zmd Znd Zod Zpd ZqdÄ ZrdS )zN
test .agg behavior / note that .apply is tested generally in test_groupby.py
    N)partial)SpecificationError)is_integer_dtype)	DataFrameIndex
MultiIndexSeriesconcatto_datetime)Groupingc                      t          g dg dd          } |                     d          d         }d }|                    |           d S )Nabcr               )keyvaluer   r   c                 T    t          |           dk    sJ |                                 S Nr   )lensumxs    m/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/tests/groupby/aggregate/test_aggregate.py
dummy_funcz3test_groupby_agg_no_extra_calls.<locals>.dummy_func"   s"    1vv{{{{uuww    )r   groupbyagg)dfgbr    s      r   test_groupby_agg_no_extra_callsr&      sa    	///,,,GG	H	HB	E		7	#B   FF:r!   c                     |                      d d g          }|                    d          }|                                }t          j        ||           d S )Nc                     | j         S Nyearr   s    r   <lambda>z&test_agg_regression1.<locals>.<lambda>*   s     r!   c                     | j         S r)   monthr   s    r   r,   z&test_agg_regression1.<locals>.<lambda>*   s    17 r!   meanr"   r#   r0   tmassert_frame_equal)tsframegroupedresultexpecteds       r   test_agg_regression1r8   )   sW    oo//1B1BCDDG[[  F||~~H&(+++++r!   c                 f   |                      d          d         }d}t          j        t          |          5  |                    d            d d d            n# 1 swxY w Y   t          j        t          |          5  |                    d            d d d            d S # 1 swxY w Y   d S )NACzMust produce aggregated valuematchc                 *    |                                  S r)   )describer   s    r   r,   z#test_agg_must_agg.<locals>.<lambda>5   s    ajjll r!   c                      | j         d d         S Nr   indexr   s    r   r,   z#test_agg_must_agg.<locals>.<lambda>7   s    agbqbk r!   )r"   pytestraises	Exceptionr#   )r$   r5   msgs      r   test_agg_must_aggrH   0   s*   jjooc"G
)C	y	,	,	, , ,**+++, , , , , , , , , , , , , , ,	y	,	,	, + +))***+ + + + + + + + + + + + + + + + + +s#   AA #A B&&B*-B*c                    d }| j                             | j        | j        g                              |          }|                     ddg                                          d         }t          j        ||           d S )Nc                 *    |                                  S r)   r   r   s    r   r,   z(test_agg_ser_multi_key.<locals>.<lambda>;       !%%'' r!   r:   Br;   )r;   r"   r:   rM   	aggregater   r2   assert_series_equal)r$   fresultsr7   s       r   test_agg_ser_multi_keyrR   :   sr    AdllBD"$<((22155Gzz3*%%))++C0H7H-----r!   c                  J   t          dddt          j        ddddgdddt          j        ddd	d
gdt          j        g dddg                    } t          dddddddt          j        ddddgd
ddddddt          j        d	dddgddddt          j        dddddt          j        dgddddt          j        dddddt          j        t          j        gd          }|                    ddg          }|dd g                                         }t          j        ||            d S )!N      r   r   r   7   M   !   ,      )v1v2))r   _   )r   c   )r   r]   )r   r^   )bigdamp)bluedry)redrc   )rc   wetby1by2namesrB      	   X   r^   rc   ra   r   r_      rd   rb   r]   r`   )r[   r\   re   rf   r[   r\   )	r   npnanr   from_tuplesr"   r0   r2   r3   )r7   r$   gr6   s       r   $test_groupby_aggregation_mixed_dtyperq   A   sk   aBFAq!Q/r2rvr2r26	
 	
 $	 	 	 %.
 
 
  H( 
aAq!Q1a;r2r2r2rvr2r2F61a1eQPRS		
 	

 
B, 	

E5>""Ad|_!!##F&(+++++r!   c                     g dddt           j        dgddt           j        dgddt           j        dgg} t          | t          j        g d                    }d}t          j        t          |          5  |                    dd	          }d d d            n# 1 swxY w Y   |	                    d
          }t          g dg dd          }t          j
        ||           d S )N)TTTFTF))r:   r   )r:   r   )rM   r   )rM   r   datacolumns+DataFrame.groupby with axis=1 is deprecatedr<   r   levelaxis)numeric_only)       @TTT)r   r   r   r   r   r   )rm   rn   r   r   ro   r2   assert_produces_warningFutureWarningr"   r   r3   )lstr$   rG   r%   r6   r7   s         r   +test_groupby_aggregation_multi_level_columnr   r   s?    	"!!	ubfe$	tRVU#	tRVU#	C 
&'O'O'OPP
 
 
B
 8C		#M	=	=	= ) )ZZaaZ(() ) ) ) ) ) ) ) ) ) ) ) ) ) )VVV''F444FFGGH&(+++++s   5BB Bc           	      
   |                      | t          j        z  d          }| j        t          j        k    sJ t          g t          j        t          g t          j                            }t          j        |	                                |           t          j        |
                    d          |           t          j        |                    d          |d           |                     |d         t          j        z  d          }t          |j        t          t          g dt          j                  	          }t          j        |	                                |           t          j        |
                    d          |           d
}t          j        t"          |d          5  |                    t          j	                  }d d d            n# 1 swxY w Y   t          j        ||           d S )NF
group_keysdtyper   rC   r   )check_index_typer:   )namer   )ru   r   rC   z:The behavior of DataFrame.sum with axis=None is deprecated)r=   check_stacklevel)r"   rm   rn   r   float64r	   r   r2   rO   r   r#   applyr   ru   floatr3   r}   r~   )tsr4   r5   expexp_dfrG   ress          r   test_agg_apply_cornerr      s   jjbfj77G8rz!!!! 2:U2RZ-H-H-H
I
I
IC7;;==#...7;;u--s3337==//uMMMM oogclRV3oFFGBS
333  F
 '++--000'++e,,f555
FC		#Mu	U	U	U $ $mmBF##$ $ $ $ $ $ $ $ $ $ $ $ $ $ $#v&&&&&s   7 G##G'*G'c           	         t          t          j                            d                              d          t          t          d          t                    t          j	        ddd          	          }|
                    d
           }|j        j        d         j        }t          | j        t          |                    |j        j        d<   |                    d          }|                                }t%          j        ||           t          | j        t)          |                    |j        j        d<   |                    d          }|                                }t%          j        ||           d S )Nr   )   r   ABCDr   z
2000-01-01r   rM   periodsfreqru   rC   c                     | j         S r)   r*   r   s    r   r,   z1test_agg_grouping_is_list_tuple.<locals>.<lambda>   s    16 r!   r   r0   )r   rm   randomdefault_rngstandard_normalr   listobjectpd
date_ranger"   _grouper	groupingsgrouping_vectorr   rC   r#   r0   r2   r3   tuple)r   r$   r5   grouperr6   r7   s         r   test_agg_grouping_is_list_tupler      s7   	
	a  0099d6ll&111mL"3???
 
 
B jj))**G(+;G$,RXtG}}$E$EGq![[  F||~~H&(+++$,RXuW~~$F$FGq![[  F||~~H&(+++++r!   c                     |                      ddg          }|                    d          }|                                }t          j        ||           d S )Nr:   rM   r0   r1   ) multiindex_dataframe_random_datar5   r6   r7   s       r   test_agg_python_multiindexr      sP    .66SzBBG[[  F||~~H&(+++++r!   groupbyfuncc                 *    |                                  S r)   weekdayr   s    r   r,   r,      s    aiikk r!   c                     | j         S r)   r.   r   s    r   r,   r,      s    ag r!   c                 *    |                                  S r)   r   r   s    r   r,   r,      s     r!   c                    |                      |          }|d                             d          }|d                                         }t          j        ||           |                    d          }|                                }t          j        ||           |                    ddddd          }t          |d                                         |d                                         |d         	                                |d	         
                                d          }t          j        ||           d S )
Nr:   stdvarr0   sem)r:   rM   r;   DrM   r;   r   )r"   r#   r   r2   rO   rN   r   r3   r   r0   r   )r4   r   r5   r6   r7   s        r   test_aggregate_str_funcr      s*    ook**G S\e$$Fs|!!H68,,, u%%F{{}}H&(+++ [[u5vEJJKKF!!##!!##""$$!!##		
 	
 H &(+++++r!   c                 4   t          g dt          t          j        ddddddgd          d          }|                    d                                          }t          dd	d
git          ddgd          d          }t          j        ||           d S )N)r   r   r   r   r   r   r   r   r   Float64r   r   r   r   r   g(y?r   r   rC   r   )	r   r	   r   NAr"   r   r   r2   r3   )any_numeric_ea_dtyper$   r6   r7   s       r   test_std_masked_dtyper      s    	&&&1aAq1CCC	
 	

 
B ZZ__  ""F	wl5!Qc#:#:#:)  H &(+++++r!   c                 n   |                      d          }d| d}|dv rt          }d}t          }nt          }d| d}d }t	          j        ||	          5  t          j        ||	          5  |                    |d
           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   rx   zDataFrameGroupBy.z with axis=1 is deprecated)idxmaxidxminz;'[<>]' not supported between instances of 'float' and 'str'z
Operation z does not support axis=1r<   r   ry   )	r"   	TypeErrorr~   
ValueErrorrD   rE   r2   r}   r#   )r$   reduction_funcr%   warn_msgerrorrG   warns          r   %test_agg_str_with_kwarg_axis_1_raisesr      sV   	!		BM>MMMH---KC>CCC	uC	(	(	( + +'H=== 	+ 	+FF>F***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	++ + + + + + + + + + + + + + + + + +s6   B*.BB*B	B*B	B**B.1B.z(func, expected, dtype, result_dtype_dictr   )rT   rU   rj   int64r   glv @r   ijkr   g      @Int64r   r   c                    t          g dgdz  t          j        ddgg dg                                        ||d          }d}t	          j        t          |	          5  |                    d
d
          }d d d            n# 1 swxY w Y   |                    |           }t          |gdz  g d                              |          }t	          j	        ||           d S )N)r   r   r   r   rT      r   r   r   r   ru   ))r   r   )r   r   rv   r<   r   rw   )
r   r   from_productastyper2   r}   r~   r"   r#   r3   )funcr7   r   result_dtype_dictr$   rG   r%   r6   s           r   (test_multiindex_groupby_mixed_cols_axis1r      s>    
			q '#s___(EFF
 
 
 f%U3344 
 8C		#M	=	=	= ) )ZZaaZ(() ) ) ) ) ) ) ) ) ) ) ) ) ) )VVD\\F(aAAAHH H &(+++++s   #BBBz&func, expected_data, result_dtype_dictr   r   
   rl         )r   r   g;f?c                 `   t          t          j        d                              dd          t	          g dd          t	          g dd          d	
                              ddi          }d}t          j        t          |          5  |	                    dd          }d d d            n# 1 swxY w Y   |
                    |           }t          |t	          g dd          t	          ddgd                                        |          }t          j        ||           d S )Nrl   r   r   r   r   r   yr   )r   r   r   r   r   r   )rC   ru   r   r   r   rv   r<   r   r   r   )rt   rC   ru   )r   rm   arangereshaper   r   r2   r}   r~   r"   r#   r3   )r   expected_datar   r$   rG   r%   r6   r7   s           r   test_groupby_mixed_cols_axis1r     sz    

	"a##IIIC(((&&&S111	
 
 

 fb']  8C		#M	=	=	= % %ZZ!Z$$% % % % % % % % % % % % % % %VVD\\FIIIC(((r2hS)))   f	 
 &(+++++s   B22B69B6c                 @   |                      d          }d }|                    |          }| j        dk                                    }| j        dk                                    }t	          |j                  }t          t          j        |g|z            t          d          d          }t          j        |                    d          |           t          t          j        |g|z            t          d          d          }t          j        |                    d          |           d }t                                           | j                                      |          }t          |t                    sJ t	          |          dk    sJ d S )	Nr:   c                     | j         S r)   sizesers    r   r,   z-test_aggregate_item_by_item.<locals>.<lambda>;  s    38 r!   foobarBCDrC   r   c                     | j         S r)   r   r   s    r   aggfun_1z-test_aggregate_item_by_item.<locals>.aggfun_1H  s	    xr!   r   )r"   r#   r:   r   r   ru   r	   rm   arrayr   r2   rO   xsassert_almost_equalr   
isinstance)	r$   r5   aggfun_0r6   foosumbarsumKr   r   s	            r   test_aggregate_item_by_itemr   8  sf   jjooG##H[[""Fdem  ""Fdem  ""FFNA 6(Q,''tE{{
G
G
GC699U++S111
6(Q,''tE{{
G
G
GC699U++S111   [[  &&**844Ffi(((((v;;!r!   c                    |                      ddg          }d }t          j        t          d          5  |                    |           d d d            n# 1 swxY w Y   |g d                             |          }| j        d d g df         }|                     ddg                              |          }t          j        ||           d S )Nr:   rM   c                 h    | j         t          dfv rt          d          |                                 S )NstringTest error message)r   r   r   r   r   s    r   r   ztest_wrap_agg_out.<locals>.funcS  s1    9***0111wwyyr!   r   r<   )r   EF)r:   rM   r   r   r   )r"   rD   rE   r   rN   locr2   r3   )three_groupr5   r   r6   exp_groupedr7   s         r   test_wrap_agg_outr   P  s   !!3*--G  
 
y(<	=	=	=    $                             ___%//55F/!!!%>%>%>">?K""C:..88>>H&(+++++s   AAAc                 t   dt           j        fdt           j        fdt           j        fg}d}t	          j        t          |          5  |                     d          d                             |          }d d d            n# 1 swxY w Y   t          g d          }t	          j
        |j        |           d S )	Nr0   maxmin%is currently using SeriesGroupBy.meanr<   r:   r;   )r0   r  r  )rm   r0   r  r  r2   r}   r~   r"   r#   r   assert_index_equalru   )r$   funcsrG   r6   exp_colss        r   *test_agg_multiple_functions_maintain_orderr  `  s    bg%AE
1C		#M	=	=	= 1 1C%))%001 1 1 1 1 1 1 1 1 1 1 1 1 1 1+++,,H&.(33333s   /BB	Bc                     | j         d d dgf                             | d                   }|                    d           }|j        j        dk    sJ d S )Nr;   r:   c                 *    |                                  S r)   r0   r   s    r   r,   z(test_series_index_name.<locals>.<lambda>m  s    16688 r!   )r   r"   r#   rC   r   )r$   r5   r6   s      r   test_series_index_namer  k  s[    fQQQX&&r#w//G[[++,,F<######r!   c                  h   t          t          j                            d                              d          t          j        ddd          g d                              d	                              d
t          t          j
        d          t          t          j
        d          gi          } t          j        dd	d          }t          j        ddg          }t          j        fddD                       j        }t          |||          }t          j        | |           d S )Nr     r   1/1/2012sr  )r   r   r:   rM   r;   rC   ru   3minr:   H.?q镲q?r   )r:   quantilec                 v    g | ]5}                     d           j                            |          j        6S r  r  resampler:   r  values.0r  r$   s     r   
<listcomp>z9test_agg_multiple_functions_same_name.<locals>.<listcomp>~  <    NNNV				'	'!	'	,	,	3NNNr!   r  r  r   )r   rm   r   r   r   r   r   r  r#   r   r  r   ro   r   Tr2   r3   )r6   expected_indexexpected_columnsexpected_valuesr7   r$   s        @r   %test_agg_multiple_functions_same_namer(  q  s9   	
	a  00;;mJS$???
 
 
B
 [[  $$	wr{f---wr{f/M/M/MNO F ]:FAFFFN!-/@BS.TUUhNNNN=MNNN   !1  H &(+++++r!   c            	         t          t          j                            d                              d          t          j        dddd          t          g dd	
                                        d          	                    ddt          t          j        d          t          t          j        d          gi          } t          j        dddd          }t          j        g dg d          }t          j        fddD                       j        }t          j                            d          j                                        |g          }t          |||          }t'          j        | |           d S )Nr   r  r  r  r  dti)r   r   r   r  alphar   r  r  r:   ohlcr  r  r  r   ))r:   r,  open)r:   r,  high)r:   r,  low)r:   r,  closer:   r  r:   r1  )r+  NNrg   c                 v    g | ]5}                     d           j                            |          j        6S r  r  r  s     r   r!  zKtest_agg_multiple_functions_same_name_with_ohlc_present.<locals>.<listcomp>  r"  r!   r#  r   )r   rm   r   r   r   r   r   r   r  r#   r   r  r   ro   r   r$  hstackr:   r,  r2   r3   )r6   r%  r&  non_ohlc_expected_valuesr'  r7   r$   s         @r   7test_agg_multiple_functions_same_name_with_ohlc_presentr5    s    

	a  00;;mJS$UKKKoooG444
 
 
B
 [[  $$	vwr{f555wr{f7U7U7UVW F ]:FAERRRN!-	
 	
 	
 $##
 
 
  "xNNNN=MNNN     i	V				#	#	%	%'?@ O !1  H &(+++++r!   c                    |                      ddg          } ddg}ddg}|                     d          d                             |          }|                     d          d                             |          }t          j        ||           |                     d                              |          }|                     d                              |          }t          j        ||           d S )	NrM   r;   r   )r   r0   r   )r   r   r:   r   )dropr"   r#   r2   r3   )r$   r  ex_funcsr6   r7   s        r   -test_multiple_functions_tuples_and_non_tuplesr9    s     
#s	$	$Be$E0HZZ__S!%%e,,Fzz#s#''11H&(+++ZZ__  ''Fzz#""8,,H&(+++++r!   c                    |                      d          }|                    ddd          }|                    ddd          }t          ||gddgd          }|                    ddd                              dd	          }ddgddgd}|                    |          }t          j        ||           |                    dddgd          }|                    dddgd          }t          j        ||           d
 }d }d}	t          j	        t          |	          5  ddddd}|                    |           d d d            n# 1 swxY w Y   dg||gd}|                    |           d S )Nr:   r0   r;   r   r   r   )keysry   r   r   rw   c                 *    t          j        |           S r)   rm   r0   r   s    r   	numpymeanz:test_more_flexible_frame_multi_function.<locals>.numpymean  s    wqzzr!   c                 .    t          j        | d          S )Nr   )ddof)rm   r   r   s    r   numpystdz9test_more_flexible_frame_multi_function.<locals>.numpystd  s    vaa    r!   nested renamer is not supportedr<   r   r   )r"   r#   r
   	swaplevel
sort_indexrN   r2   r3   rD   rE   r   )
r$   r5   exmeanexstdr7   dr6   r?  rB  rG   s
             r   'test_more_flexible_frame_multi_functionrJ    s   jjooG[[vF3344FKKe%0011EvuoVUO!DDDH!!!QQ!//:::KKHuoVUO44Aq!!F&(+++ V65/BBCCF  vVUO!D!DEEH&(+++  ! ! ! -C	)	5	5	5  ve<<==!              
 hi233Aas   (EEEc                    |                      d          }dddddid}d}t          j        t          |          5  |                    |           d d d            n# 1 swxY w Y   ddddd}t          j        t          |          5  |                    |           d d d            n# 1 swxY w Y   ddddd}t          j        t          |          5  |                    |           d d d            d S # 1 swxY w Y   d S )	Nr:   r0   r   rD  r   r;  rC  r<   )r"   rD   rE   r   rN   )r$   r5   rI  rG   s       r    test_multi_function_flexible_mixrL    s   jjooG U++5%.AAA
,C	)	5	5	5  !               U++%88A	)	5	5	5  !               U++%88A	)	5	5	5  !                 s5   AA#&A#B//B36B3D  DDc                     t          g dg dg dd          } |                     d          }t          ddgd          }|d	                             d
           }t	          ddg|d	          }t          j        ||           |d                             d           }t	          ddg|d          }t          j        ||           d S )Nr   r   r   r   r   r   r   r   )NNr   r   r   r   r   r   r   r   r   r   c                 2    | dk                                     S r   allr   s    r   r,   z1test_groupby_agg_coercing_bools.<locals>.<lambda>  s    !q& r!   FTr   r   c                 N    |                                                                  S r)   )isnullrS  r   s    r   r,   z1test_groupby_agg_coercing_bools.<locals>.<lambda>  s    )9)9 r!   )r   r"   r   rN   r	   r2   rO   )datgprC   r6   r7   s        r   test_groupby_agg_coercing_boolsrX    s    
,,,\\\@R@R@RSS
T
TC	S		B1a&s###EW7788Fudm5s;;;H68,,,W99::FtUm5s;;;H68,,,,,r!   c                     t          g dg dd          } |                     d          dg                             ddi          }t          dddgiddg	                              dd
          }t	          j        ||           d S )N)r:   r:   rM   rM   rM   )r   r   r   r   r   r:   rM   r:   rM   r   r   r   rB   r   r   )r   r"   r#   rename_axisr2   r3   )rV  r6   r7   s      r   "test_groupby_agg_dict_with_getitemr\    s    
333///JJ
K
KC[[se$((#u66F#1vsCj999EEcPQERRH&(+++++r!   c                     t          g dg dg dgg d          } |                     d          }|                    ddi          }t          dd	d
git          ddgd                    }t	          j        ||           d S )Nr   )r   r   r   rT   )r   r   rT   r   r   r   r   r   r   rT   r   r   r   r   rB   r   r"   r#   r   r2   r3   r$   r%   r6   r7   s       r   !test_groupby_agg_dict_dup_columnsr`    s    		|||\\\2$$$
 
 
B 
CBVVS%L!!F#1veQF.E.E.EFFFH&(+++++r!   opc                 *    |                                  S r)   rK   r   s    r   r,   r,     rL   r!   c                 *    |                                  S r)   )cumsumr   s    r   r,   r,      s    !((** r!   c                 ,    |                      d          S Nr   	transformr   s    r   r,   r,   !  s    !++e$$ r!   c                 ,    |                      d          S Nrd  rg  r   s    r   r,   r,   "  s    !++h'' r!   c                 ,    |                      d          S rf  r#   r   s    r   r,   r,   #  s    !%%,, r!   c                 ,    |                      d          S rj  rl  r   s    r   r,   r,   $  s    !%%// r!   c                 D   t          ddgddgd          }|                    d          d         } | |                    d                    d         j        }t	          |          sJ  | |                    d                    j        }t	          |          sJ d S )Nr   FTr   r   r   )r   	set_indexr"   r   r   )ra  r$   r  r6   s       r   test_bool_agg_dtyperp    s     
!Qudm44	5	5B
S#AR

3  %+FF#####R		#%FF#######r!   zkeys, agg_indexr   r   r   r   rg   input_dtype)boolint32r   float32r   result_dtypemethod)r   rN   rh  c                    t          dgdgdgd          }|d                             |          |d<   t          |                    |           dg         |          } |fd          }|dk    rt	          j        dd          n|}t          d|d         j        d         gi|	                                        }	|d
k    rdg|	j        _        t          j
        ||	           d S )Nr   r   TrP  r   c                 D    |                                j        d         S r   r   iloc)r   ru  s    r   r,   z2test_callable_result_dtype_frame.<locals>.<lambda>I  s    !((<005a8 r!   rh  r   rB   r   )r   r   getattrr"   r   
RangeIndexrz  ru   rh   r2   r3   )
r<  	agg_indexrq  ru  rv  r$   ra  r6   r%  r7   s
      `      r    test_callable_result_dtype_framer~  4  s    $ 
!A3dV44	5	5Bgnn[))BsG	D!!3%(&	1	1BR888899F,2k,A,AR]1a(((yN#3Q01HHHOO H "#&(+++++r!   input)Tr         ?r   c                 t   t          dgdg|gd          }t          |                    |           d         |          } |fd          }|dk    rt          j        dd          n|}t          |d         j        d         g|d                                        }	t          j	        ||	           d S )	Nr   r   rP  r   c                 D    |                                j        d         S r   ry  )r   r   s    r   r,   z3test_callable_result_dtype_series.<locals>.<lambda>a  s    !((5//.q1 r!   rh  r   r   )
r   r{  r"   r   r|  r	   rz  r   r2   rO   )
r<  r}  r  r   rv  r$   ra  r6   r%  r7   s
      `      r   !test_callable_result_dtype_seriesr  S  s     
!A3eW55	6	6B	D!!#&	/	/BR111122F,2k,A,AR]1a(((yNr#w|A'~CHHHOOPUVVH68,,,,,r!   c                      t          g dg dd          } |                     d                              g d          }|j        j        d         }t          g d          }t          j        ||           d S )NrN  r   rZ  r:   )r   r  r0   r,  r  r   )r   r"   r#   ru   levelsr   r2   r  )r$   r   r6   r7   s       r   #test_order_aggregate_multiple_funcsr  g  s    	LLL99	:	:B
**S//

CCC
D
DC["F:::;;H&(+++++r!   c           	      :   t          g dddt          j        ddt          j        gd|           }|                    d          }|                                }t          g d	t          j        gd
z  dgd
z  dgd
z  gt          j        dgg dg          t          g d| d          |           }t          j	        ||           |                    dd          }|                                }|
                                }t          j	        ||           d S )N)r   r   r   r   r   r      rZ   r   r   r   r   r   )r  r  rZ   rZ   r   r   )r-  r.  r/  r0  r   r   r   )ru   rC   r   Fas_index)r   r   r   r"   r,  r   r   r   r2   r3   reset_index)r   r$   r%   r6   r7   gb2result2	expected2s           r   test_ohlc_ea_dtypesr  s  s*   	   Br2ru'EFF"
 
 
B 
CBWWYYF			BE7Q;q2$(;'#0P0P0P(QRRLLL(<3GGG"	  H &(+++
**S5*
)
)ChhjjG$$&&I'9-----r!   how)firstlastr  r  r0   medianc                    t          dddgd          }|                    d                              d|i          }|j                            |           |_        |                    d                              d|i          }|dvr)|j                            t
          j                  |_        t          j        ||d	           d S )
Nl   &tLWHd~ r   r   r   r   r   r   )r0   r  T)check_exact)	r   r"   r#   r   r   rm   r   r2   r3   )r   r  r$   r7   r6   s        r   test_uint64_type_handlingr    s     
,Aq6::	;	;Bzz#""C:..H4;;uBDZZ__  #s,,F
$$$8??28,,&(======r!   c                      d} t          g dg dd          }t          j        t          |           5  |                    d                              ddg           d d d            d S # 1 swxY w Y   d S )NzFunction namesr   r   r   r   r   rZ  r<   r:   r  )r   rD   rE   r   r"   r#   )rG   r$   s     r   test_func_duplicates_raisesr    s    
C	LLL99	:	:B	)	5	5	5 , ,


3UEN+++, , , , , , , , , , , , , , , , , ,s   +A,,A03A0rC   abc2020r   r   ))r   r   )r   r   )r   r   c                    t          g dg dd|           }|                    d                              dt          j        i          }t          ddgddgd                              d          }t          j        ||           d S )	Nr   r   r   r   )groupr   rB   r  r   r   r   )r   r"   r#   r	   nuniquero  r2   r3   )rC   r$   r6   r7   s       r   $test_agg_index_has_complex_internalsr    s     
YYY;;5	I	I	IBZZ  $$gv~%>??FAq6QF;;<<FFwOOH&(+++++r!   c                     t          g dg dg dd          } |                     d                                          }t          ddgddgdt          d	d
gd                    }t	          j        ||           d S )N)r   r   r   r   r   )onetwor  r  r  )threer  r  sixr  key1key2key3r  r  r  )r  r  r   r   r   rB   )r   r"   r  r   r2   r3   r$   r6   r7   s      r   test_agg_split_blockr    s    	---777===	
 	

 
B ZZ##%%F%88S#JV,,,  H &(+++++r!   c            
         t          t          j        dd          g dg dg dt          j        dd          g dd                              t                    } |                     g d                                          }t          t          j        d          gd	gd
gdgt          j        d          gd
gdt          j	        dg          t                    }t          j        ||           d S )N2000r   )r   )r   r   r   rI  r   )r   r   rI  e)r:   rM   r;   r   r   r   )r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r"   r  	Timestamprm   r   r2   r3   r  s      r   #test_agg_split_object_part_datetimer    s   	vq111%%%%%%vq111	
 	
	
 	
 fVnn  ZZ%%))++F,v&&',v&&'	
 	
 hsmm  H &(+++++r!   c                       e Zd Zd Zd Zd Zd Zej        	                    d e
j        dd          d	ddgg          d
             ZdS )TestNamedAggregationSeriesc                 x   t          g d          }|                    g d          }|                    dd          }t          ddgddgdd	d
gt	          j        ddg                    }t          j        ||           |                    dd          }|d
d	g         }t          j        ||           d S )Nr   r  r   r  r   r   rU   r   r   r   r   r   )r   r   r	   r"   r#   r   rm   r   r2   r3   )selfr$   grr6   r7   s        r   test_series_named_aggz0TestNamedAggregationSeries.test_series_named_agg  s    LLL!!ZZ%%%5))a&1v&&c
"(Aq6BRBR
 
 
 	fh///%5))S#J'
fh/////r!   c                 T   t          ddg                              ddg          }t          j        t          d          5  |                                 d d d            n# 1 swxY w Y   |                    g           }t          g           }t          j        ||           d S )Nr   r   r   Must provider<   r   )	r	   r"   rD   rE   r   r#   r   r2   r3   r  r  r6   r7   s       r   test_no_args_raisesz.TestNamedAggregationSeries.test_no_args_raises  s    QF^^##QF++]9N;;; 	 	FFHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 R(((
fh/////s   A##A'*A'c                    t          g d                              g d          }|                    dd          }t          ddgddgdt	          j        ddg                    }t          j        ||           d S )	Nr   r   r   r   r   r   r   r   r   r   r   rB   r  )r  r  r5   r7   s       r   *test_series_named_agg_duplicates_no_raiseszETestNamedAggregationSeries.test_series_named_agg_duplicates_no_raises  s    III&&yyy11&&5E&**Aq6A77rxA?O?OPPP
h00000r!   c                    t          g d                              g d          }|                    d d           }t          ddgddgdt	          j        ddg                    }t          j        ||           d S )	Nr  r  c                     dS r    r   s    r   r,   z9TestNamedAggregationSeries.test_mangled.<locals>.<lambda>  s    A r!   c                     dS Nr   r  r   s    r   r,   z9TestNamedAggregationSeries.test_mangled.<locals>.<lambda>  s    1 r!   r   r   r   rB   r  r  s       r   test_mangledz'TestNamedAggregationSeries.test_mangled  s    III&&yyy11++55Aq6A77rxA?O?OPPP
fh/////r!   inpanythingr  columnaggfunc)r  r  c                    t          g d          }dt          |          j         }t          j        t
          |          5  |                    |j                                      |           d d d            d S # 1 swxY w Y   d S )N)r   r   r   r   r   r   r   rT   zfunc is expected but received r<   r   )	r	   type__name__rD   rE   r   r"   r  r#   )r  r  r  rG   s       r   test_named_agg_nametuplez3TestNamedAggregationSeries.test_named_agg_nametuple  s     +++,,CtCyy/ACC]9C000 	+ 	+IIah##c#***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   /B  BBN)r  
__module____qualname__r  r  r  r  rD   markparametrizer   NamedAggr  r  r!   r   r  r    s        0 0 00 0 01 1 10 0 0 [BKz5999	
 + + + + +r!   r  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestNamedAggregationDataFramec           	      H   t          g dg dg dd          }|                    d                              dd          }t          d	d
gddgdt          ddgd          ddg          }t	          j        ||           t          j        t          j	        d          }|                    d                              dddddd|f          }t          ddgddgddgd	d
gddgd d!gdt          ddgd          g d          }t	          j        ||           d S )"Nr   r   r   r   rO  rT   r   rU   ri   r  r:   rM   r  r:   r  rM   r  )a_maxb_maxr   r   r   ri   r   r   r   r  r  r  b   r  rM   r  r:   r  )r:   r0   r:   )b_mina_mina_meanr  r  a_98rT   rU   r   r         ?      @g\(\?gףp=
@)
r   r"   r#   r   r2   r3   	functoolsr   rm   
percentile)r  r$   r6   r7   p98s        r   test_agg_relabelz.TestNamedAggregationDataFrame.test_agg_relabel  s   ***LLLQQ
 
 G$$((|<(PP!f1v..c
111g&
 
 

 	fh/// 444G$$(( s ) 
 
 QQ*QQt  c
111JJJ
 
 
 	fh/////r!   c                     t          g dg dg dd          } |                    d          j        di ddi}t          ddd	git          d
dgd                    }t	          j        ||           d S )Nr  rO  r  r  r  zmy colr  r   r   r   r   r   rB   r  r^  r  r$   r6   r7   s       r   test_agg_relabel_non_identifierz=TestNamedAggregationDataFrame.test_agg_relabel_non_identifier7  s    ***LLLQQ
 
 )G$$(DDHl+CDDhA/uc3Zg7V7V7VWWW
fh/////r!   c                    t          g dg dd          }|                    d                              dd          }t          ddgddgdt          d	dgd
                    }t	          j        ||           t          j        t          j	        d          }t          j        t          j	        d          }d|_
        d|_
        t          g dg dd          }|                    d                              d|fd|f          }t          ddgddgdt          ddgd
                    }t	          j        ||           d S )Nr  r   rZ  r:   r  r   r   r   r   r   rB   2   r  F   quant50quant70)r   r   r   r   r   )r   r   r   r   rT   )col1col2r  r  )quantile_50quantile_70      ?      @g333333?g@r   r   )r   r"   r#   r   r2   r3   r  r   rm   r  r  )r  r$   r5   r7   r  r  tests          r   test_duplicate_no_raisesz6TestNamedAggregationDataFrame.test_duplicate_no_raises@  su    \\\==>>**S//%%%EEAq6A77uaVRU?V?V?VWWW
gx000#BMR888#BMR888$$";";";___UUVV,,v&&**)7H + 
 
  #JSzBBc
000
 
 
 	gx00000r!   c                 "   t          g dg ddt          j        ddgddgg                    }|                    d	
                              ddd          }t          d	dgd	dgddgdddg          }t          j        ||           d S )Nr  r   rZ  r:   rM   r   r   rB   r   r   r  r  )rM   r0   )aabbccr   r        @)r   r   r   r"   r#   r2   r3   r  s       r   test_agg_relabel_with_levelz9TestNamedAggregationDataFrame.test_agg_relabel_with_levelY  s    ,,\\\22)C:Sz*BCC
 
 
 !$$(( ) 
 
 q6!QSz::3*
 
 
 	fh/////r!   c                    t          g dg dd          }|                    d          }d}t          j        t          |          5  |                    d           d d d            n# 1 swxY w Y   t          j        t          |          5  |                                 d d d            n# 1 swxY w Y   t          j        t          |          5  |                    d	d
           d d d            d S # 1 swxY w Y   d S )Nr  r  rZ  r:   r  r<   r   )r   r  r   )r   r"   rD   rE   r   r#   )r  r$   r5   r=   s       r   test_agg_relabel_other_raisesz;TestNamedAggregationDataFrame.test_agg_relabel_other_raisesf  s   YYYYYY7788**S//]9E222 	 	KKAK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]9E222 	 	KKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]9E222 	5 	5KK,)K444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s6   	A,,A03A0B33B7:B7C>>DDc                    t          ddgddgd          }t          j        d          }t          j        t
          |          5  |                    d                              d	           d d d            d S # 1 swxY w Y   d S )
Nr   r   r   rZ  zColumn(s) ['C'] do not existr<   r:   )r;   r   r   )r   reescaperD   rE   KeyErrorr"   r#   )r  r$   r=   s      r   test_missing_raisesz1TestNamedAggregationDataFrame.test_missing_raisess  s    aV1a&1122	899]85111 	0 	0JJsOO,///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   *A==BBc                 R   t          ddgddgd          }|                    d                              t          j        dd          t          j        dd	          
          }|                    d                              dd
          }t          j        ||           d S )Nr   r   r   rZ  r:   rM   r   countr  r   r   )rM   r   )rM   r  r   r"   r#   r   r  r2   r3   r  s       r   test_agg_namedtuplez1TestNamedAggregationDataFrame.test_agg_namedtupley  s    aV1a&1122C$$k#u%%C)Q)Q)Q % 
 
 ::c??&&&HH
fh/////r!   c                    t          ddgddgddgd          }|                    d                              dd	 fd
d f          }t          ddgddgdt          ddgd                    }t	          j        ||           d S )Nr   r   r   r   r   r  r:   rM   c                     dS r   r  r   s    r   r,   z<TestNamedAggregationDataFrame.test_mangled.<locals>.<lambda>  s    q r!   r;   c                     dS r  r  r   s    r   r,   z<TestNamedAggregationDataFrame.test_mangled.<locals>.<lambda>  s    Q r!   r  r   rB   r^  r  s       r   r  z*TestNamedAggregationDataFrame.test_mangled  s    aV1a&1v>>??C$$[['9c;;=O$PPAq6A77uaVRU?V?V?VWWW
fh/////r!   N)r  r  r  r  r  r  r  r  r  r  r  r  r!   r   r  r    s        "0 "0 "0H0 0 01 1 120 0 05 5 50 0 00 0 00 0 0 0 0r!   r  zCagg_col1, agg_col2, agg_col3, agg_result1, agg_result2, agg_result3r   r:   r  r  )r   rM   r0   r  r  g      @      @c                      t          |           S r)   )r  r   s    r   r,   r,     s    3q66 r!   c                     dS r  r  r   s    r   r,   r,         1 r!   r  r  c                     dS r  r  r   s    r   r,   r,     s    a r!   c                 N   t          g dg dg dd          }t          j        g d          |_        t	          ddgd	          }|                    d                              d
          }t          dddgi|          }	t          j        ||	           d}
t          j	        t          |
          5  |                    d                              | ||          }d d d            n# 1 swxY w Y   t          |||d|          }	t          j        ||	           d S )Nr  rO  r  r  r   r  r  r  r   r   r  r   r  )r  r  r   r   rB   r  r<   )col_1col_2col_3)r   r   ro   ru   r   r"   r#   r2   r3   r}   r~   )agg_col1agg_col2agg_col3agg_result1agg_result2agg_result3r$   idxr6   r7   rG   s              r   "test_agg_relabel_multiindex_columnr)    s   B 
&&&\\\MM
 
B '(P(P(PQQBJ
c

0
0
0CZZ''++2E+FFF'Aq6*#666H&(+++
1C		#M	=	=	= 
 
N++//(( 0 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 kJJRU  H &(+++++s   8,C00C47C4c                  (   t          g dg dg dd          } t          j        g d          | _        t	          j        t          d          5  |                     d                              d	
           d d d            d S # 1 swxY w Y   d S )Nr  rO  r  r  r  zdo not existr<   r  ))Yr   r  r  )	r   r   ro   ru   rD   rE   r
  r"   r#   )r$   s    r   ,test_agg_relabel_multiindex_raises_not_existr,    s    	&&&\\\MM
 
B '(P(P(PQQBJ	x~	6	6	6 > >


>""&&)<&===> > > > > > > > > > > > > > > > > >s   *BBBc                  B   t          g dg dg dd          } t          j        g d          | _        |                     d                              dd          }t          d	d
gd          }t          ddgddgd|          }t          j        ||           d S )Nr  rO  r  r  r  r  )r  r  r   r   r   r   r   r   rB   )	r   r   ro   ru   r"   r#   r   r2   r3   )r$   r6   r(  r7   s       r   &test_agg_relabel_multiindex_duplicatesr.    s     
&&&\\\MM
 
B '(P(P(PQQBJZZ''++
!4 ,  F c

0
0
0C1vQF333???H&(+++++r!   kwargsr   r  r  c                 (   t          g dg dg dd          }|                    d                              |           }t          ddgt          ddgd	d
          t	          j        ddgg                    }t          j        ||           d S )Nr  r  r   r   r   rP  r   r   r   r   r   r  r   r  r  )r   r"   r#   r   r   ro   r2   r3   )r/  r$   r6   r7   s       r    test_groupby_aggregate_empty_keyr2    s     
CC	D	DBZZ__  ((F	
AQF'444&e~66  H
 &(+++++r!   c                      t          g dg dg dd          } |                     d                              dg i          }t          t          dgg gg g g                    }t	          j        ||           d S )	Nr  r  r1  rP  r   r   )r  codesr   r   r"   r#   r   r2   r3   r  s      r   -test_groupby_aggregate_empty_key_empty_returnr6    s    	CC	D	DBZZ__  #r++FSE2;r2h!O!O!OPPPH&(+++++r!   c            	         t          g d          } |                     ddgd                              dt          f          }t          d	gt	          g g gg g gddg
                    }t          j        ||           d S )NrP  r   r   r   Fr   r   )rI  rI  rg   r   )r   r"   r#   r   r   r2   r3   r  s      r   2test_groupby_aggregate_empty_with_multiindex_framer8    s    	???	+	+	+BZZc
uZ5599S$K9HHFZR2r(3*MMM  H &(+++++r!   c                  
   t          g dg dd          } |                     dd          }|                    t          j        dd	          
          }t          g dg dd          }t          j        ||           d S )N)r   r   zr   r   r:  r  皙?r{   g      @g@      ?)r   valr   Fr  r>  r  r  min_val)r   r   r:  )r  r<  r=  )r   r@  r  r$   r5   r6   r7   s       r   9test_grouby_agg_loses_results_with_as_index_false_relabelrB    s     
...7V7V7VWW
 
B jjj//G[[E5!I!I!I[JJF=M=M=MNNOOH&(+++++r!   c                     t          g dg dg dd          } |                     ddgd          }|                    t          j        d	d
                    }t          g dg dg dd          }t          j        ||           d S )N)r   r   r   r   r   r   )r   r   r   r   r   r   r;  )r   r  r>  r   r  Fr  r>  r  r  r?  r   r   r   )r   r   r   )r  r=  r<  )r   r  r@  r  rA  s       r   Dtest_grouby_agg_loses_results_with_as_index_false_relabel_multiindexrE    s    
 
111222222	
 	

 
B jj%5j99G[[E5!I!I!I[JJFEUEUEUVV H &(+++++r!   r   c                 *    |                                  S r)   r  r  s    r   r,   r,     s    qvvxx r!   c                 *    t          j        |           S r)   r>  rG  s    r   r,   r,     s    271:: r!   c                 *    t          j        |           S r)   )rm   nanmeanrG  s    r   r,   r,     s    A r!   c                    g dg dg}t          |t          j        g dg dgddg                    }|                    t	          j        d	d
g                                        |           }dddddddddd}t          |t	          j        d	d
g          |j                  }t          j	        ||           d S )N)r   r   r   )rT   rU   r   r  )r   r   r   SiskoJanewayrg   r   r   r   r        @r|   r  g      @r{   ))r   r   )r   r   )r   r   r  )
r   r   from_arraysr"   rm   r   r#   ru   r2   r3   )r   rt   r$   r6   expected_dictr7   s         r   test_multiindex_custom_funcrQ    s    
 IIyyy!D	&YY			"7I*>
 
 

 
 
B ZZ!Q(())--d33FC  C  C   M
 bh1v.>.>
SSSH&(+++++r!   c                 .    t          j        | d          S Ng?r  rm   r  rG  s    r   myfuncrU  2  s    =d####r!   c                 .    t          j        | d          S rS  rT  rG  s    r   r,   r,   6  s    BM!t,D,D,D r!   c                    t          g dg dg dd          }|                    d                              dd| f          }t          d	d
gddggddgt          ddgd                    }t	          j        ||           d S )NcatdogrY  rZ  g333333"@g      @      #@      A@皙@r  #@     h@kindheightweightrc  )rd  r0   rd  )mean_heightperc90g"@g0'5"@g      4@g5^I@rf  rg  rY  rZ  r   r   r^  )r   animalsr6   r7   s       r   test_lambda_named_aggri  6  s     000+++,,,	
 	
 G __V$$((&$/? )  F 
vu&)UEN000  H &(+++++r!   c                     t          t          j        dgdz                                dd          t	          d          t	          d                    } g d| d<   |                     d                              d	           }dgdgdggddgddgddggg}t          |t          d
dgdd          t          g d                    }t          j	        ||           d S )Nr   rj   r   XYZr  rt   ru   rC   )group 1rm  r   groupingc                 *    |                                  S r)   )tolistr   s    r   r,   z,test_aggregate_mixed_types.<locals>.<lambda>S  s    

 r!   r   rm  r   r  )Xr+  Zr  )
r   rm   r   r   r   r"   rN   r   r2   r3   )r$   r6   r   r7   s       r   test_aggregate_mixed_typesrs  M  s    	XqcAg&&q!,,d5kke
 
 
B /..BzNZZ
##--.B.BCCFcA3_1v1v1v&>?MQ	N(DDDooo&&  H
 &(+++++r!   zNot implemented;see GH 31256reasonc                  >   d } t          dt          j        g d          i          }|                    g d                              |           }t          dt          j        dt          j        gd          iddg	          }t          j        ||           d S )
Nc                 D    t          | dk              rdS t          j        S )Nr   r   )rS  r   r   r   s    r   r  z5test_aggregate_udf_na_extension_type.<locals>.aggfuncf  s     q1u:: 	15Lr!   r:   r  r  r   r   r   r   rB   )r   r   r   r"   r#   r   r2   r3   )r  r$   r6   r7   s       r   $test_aggregate_udf_na_extension_typerx  ]  s       
C))),,-	.	.BZZ			""&&w//F#rxBE
'BBBCAq6RRRH&(+++++r!   c                   n    e Zd Zd Zd Zej                            d          d             Zd Z	d Z
dS )	TestLambdaManglingc                 
   t          g dg dd          }|                    d                              dd d gi          }t          ddgd	d	gd
t          dd	gd                    }t	          j        ||           d S )Nr  r   rZ  r:   rM   c                     dS r   r  r   s    r   r,   z/TestLambdaMangling.test_basic.<locals>.<lambda>u  s    a r!   c                     dS r  r  r   s    r   r,   z/TestLambdaMangling.test_basic.<locals>.<lambda>u  s    1 r!   r   r   ))rM   
<lambda_0>)rM   
<lambda_1>r   rB   r^  r  s       r   
test_basiczTestLambdaMangling.test_basics  s    \\\==>>C$$cKK+E%FGG#$a&1vFFAS)))
 
 
 	fh/////r!   c                 
   t          g d                              g d          }|                    d d g          }ddgddgd}t          |t	          j        ddg                    }t          j        ||           d S )	Nr   r  c                     dS r   r  r   s    r   r,   z?TestLambdaMangling.test_mangle_series_groupby.<locals>.<lambda>  r  r!   c                     dS r  r  r   s    r   r,   z?TestLambdaMangling.test_mangle_series_groupby.<locals>.<lambda>  s     r!   r   r   r~  r  rB   r  )r  r  r6   exp_datar7   s        r   test_mangle_series_groupbyz-TestLambdaMangling.test_mangle_series_groupby}  s    LLL!!)),,,77kk233#$a&A??XRXq!f-=-=>>>
fh/////r!   zGH-26611. kwargs for multi-agg.rt  c                    dd}dd}t          ddg                              ddg                              ||gd          }t          dgdgd          }t	          j        ||           t          ddg                              ddg                              ||gdd	
          }t          dgdgd          }t	          j        ||           d S )Nr   c                 6    |                                  |z   |z   S r)   rK   r   r   r   s      r   r,   z5TestLambdaMangling.test_with_kwargs.<locals>.<lambda>  s    quuww{Q r!   r   c                 6    |                                  ||z  z   S r)   rK   r  s      r   r,   z5TestLambdaMangling.test_with_kwargs.<locals>.<lambda>  s    quuwwQ r!   r   r   r   r  r   )r      r   )r   )r   )r	   r"   r#   r   r2   r3   )r  f1f2r6   r7   s        r   test_with_kwargsz#TestLambdaMangling.test_with_kwargs  s    ......A''A//33RHa@@QCsCCDD
fh///A''A//33RHa23FFRDEEFF
fh/////r!   c                    t          g dg dg dd          }g d}t          ddgdd	gd
dgdt          ddgd          |          }|                    d                              t	          j        dd           t	          j        dd          t	          j        dd                    }t          j        ||           |                    d                              dd fdd          }t          j        ||           d S )NrX  r[  r^  rb  )height_sqr_min
height_max
weight_maxp=
׳T@      B@r\  r]  r`  ra  rY  rZ  rc  r   r  byrd  c                 0    t          j        | dz            S rA   rm   r  r   s    r   r,   z=TestLambdaMangling.test_agg_with_one_lambda.<locals>.<lambda>      26!Q$<< r!   r  r  re  c                 0    t          j        | dz            S rA   r  r   s    r   r,   z=TestLambdaMangling.test_agg_with_one_lambda.<locals>.<lambda>      q!t r!   rd  r  re  r  )r   r   r"   r#   r   r  r2   r3   r  r$   ru   r7   result1r  s         r   test_agg_with_one_lambdaz+TestLambdaMangling.test_agg_with_one_lambda  si   444///000 
 
 A@@#(%."Dk"El 
 V444
 
 
 ***''++;)?)?   {(EBBB{(EBBB , 
 
 	gx000 ***''++$&<&<=(( , 
 

 	gx00000r!   c           
         t          g dg dg dd          }g d}t          ddgdd	gd
dgdd	gddgdt          ddgd          |          }|                    d                              dd fdddd fdd f          }t	          j        ||           |                    d                              t          j        dd           t          j        dd          t          j        dd          t          j        dd           t          j        dd                     }t	          j        ||           d S ) NrX  r[  r^  rb  )r  r  r  height_max_2
weight_minr  r  r\  r]  r`  ra  r_  r  rY  rZ  rc  r   r  r  rd  c                 0    t          j        | dz            S rA   r  r   s    r   r,   z=TestLambdaMangling.test_agg_multiple_lambda.<locals>.<lambda>  r  r!   r  r  c                 *    t          j        |           S r)   rm   r  r   s    r   r,   z=TestLambdaMangling.test_agg_multiple_lambda.<locals>.<lambda>  s    bfQii r!   re  c                 *    t          j        |           S r)   r  r   s    r   r,   z=TestLambdaMangling.test_agg_multiple_lambda.<locals>.<lambda>  s    BF1II r!   c                 0    t          j        | dz            S rA   r  r   s    r   r,   z=TestLambdaMangling.test_agg_multiple_lambda.<locals>.<lambda>  r  r!   r  r  c                 *    t          j        |           S r)   r  r   s    r   r,   z=TestLambdaMangling.test_agg_multiple_lambda.<locals>.<lambda>  s    q		 r!   c                 *    t          j        |           S r)   r  r   s    r   r,   z=TestLambdaMangling.test_agg_multiple_lambda.<locals>.<lambda>  s    bfQii r!   )r   r   r"   r#   r2   r3   r   r  r  s         r   test_agg_multiple_lambdaz+TestLambdaMangling.test_agg_multiple_lambda  s    444///000 
 

 
 
 #(%."Dk"El!$d"Cj  V444

 

 

 ***''++$&<&<=(("$7$78 "5"56 , 
 
 	gx000 ***''++;)?)?   {(EBBB{(EBBBH>Q>QRRR{(<O<OPPP , 
 
 	gx00000r!   N)r  r  r  r  r  rD   r  xfailr  r  r  r  r!   r   rz  rz  r  s        0 0 00 0 0 [?@@	0 	0 A@	0%1 %1 %1N11 11 11 11 11r!   rz  c                     t          g dg dd          } |                     d                              dd i          }t          ddgd	d
gd                              d          }t	          j        ||           d S )N)SWr  )r  r  r{   rZ  r:   rM   c                 B    |                      | j        d                   S )N)getrC   r   s    r   r,   z+test_groupby_get_by_index.<locals>.<lambda>  s    aeeAGBK.@.@ r!   r  r  r  r{   )r   r"   r#   ro  r2   r3   )r$   r   r7   s      r   test_groupby_get_by_indexr    s    	??	@	@B
**S//

s$@$@A
B
BCSzc
;;<<FFsKKH#x(((((r!   zgrp_col_dict, exp_data)nrcat_ordrT   r  r  c                    t          g dt          d          t          d          d          }|                    ddd          }|d         j                                        |d<   |                    dd	
                              |           }t          j        ddgddgd	dd          }t          ||          }d|v r+|d         j	        }|d                             |          |d<   t          j        ||           d S )Nr   r   r   r   rT   r   rU   ri   aabbccddaaaabbbbr  r  rY  categoryrY  r  r  rY  Fobservedr   r   
categoriesorderedr   r   )rt   rC   )r   r   r   rY  
as_orderedr"   r#   r   CategoricalIndexr   r2   r3   )grp_col_dictr  input_df	result_df	cat_indexexpected_dfr   s          r    test_groupby_single_agg_cat_colsr    s)    ***J''
##	
 	
 H zjIIJJH"9-1<<>>HY   77;;LIII #	c
Sz5uJ  I ;;;KK#)!,Y!7!>!>u!E!EI)[11111r!   )r   r   r   )rT   ri   r   )r   r   r   )rT   r   rI  r   )r   rI  c                 d  
 t          g dt          d          t          d          d          }|                    ddd          }|d         j                                        |d<   |                    dd	
                              |           }t          j        ddgddgd	dd          }g }| 	                                D ]S\  
}t          |t                    r"|                    
fd|D                        <|                    
|g           Tt          j        t          |                    }t          |||          }|j        D ]D}	t          |	t                    r-d|	v r)||	                             |d         j                  ||	<   Et%          j        ||           d S )Nr  r  r  r  r  r  r  rY  Fr  r   r   r  c              3       K   | ]}|gV  	d S r)   r  )r   r   r   s     r   	<genexpr>z6test_groupby_combined_aggs_cat_cols.<locals>.<genexpr><  s'      #>#>5QJ#>#>#>#>#>#>r!   rl  )r   r   r   rY  r  r"   r#   r   r  itemsr   extendappendr   ro   r   ru   r   r2   r3   )r  r  r  r  r  multi_index_listvmulti_indexr  colr   s             @r   #test_groupby_combined_aggs_cat_colsr    s    ***J''
##	
 	
 H zjIIJJH"9-1<<>>HY   77;;LIII #	c
Sz5uJ  I ""$$ , ,1a 	,###>#>#>#>A#>#>#>>>>>##QF++++(/?)@)@AAK;iPPPK" R Rc5!! 	Ri3&6&6*3/66x	7J7PQQK)[11111r!   c                     t          g dg dd          } |                     d          }|                    dg          }|j                            d          |_        |                    d          }t          j        ||           d S )NrN  )r   r   r   r   r   r   rd  r  )r   r"   r#   ru   	droplevelr2   r3   )r$   rp   r6   r7   s       r   test_nonagg_aggr  J  s     
LLL99	:	:B


3AUUH:F^--b11FNuuXH&(+++++r!   c                  J   t          ddgt          j        ddddddd          t          j        d	dddddd          gd
          } |                     d          j                                        }|                     d          d         }t          j        ||           d S )Nrq  r+  i  r   r   r      i`= i  rZ  r:   rM   )r   datetimer"   rM   r  ro  r2   rO   r  s      r   test_aggregate_datetime_objectsr  W  s     
s!$1b"b&AA!$1b"b&AA	
 	

 
B ZZ__""$$F||C  %H68,,,,,r!   c                  \   t          g dg dg dd          } | j                            d          | _        |                     ddg          }|j                            d           }t          j        d	d
gd          }t          ddg|d          }t          j
        ||           d S )N)r   r   r   rD  r   r   r   )c0c1pOr  r  c                 (    t          | dk              S r   rR  r   s    r   r,   z1test_groupby_index_object_dtype.<locals>.<lambda>n  s    #a!e** r!   )r   r   r  )r  r  rg   FTr  r   )r   rC   r   r"   r  r#   r   ro   r	   r2   rO   )r$   r5   r   r%  r7   s        r   test_groupby_index_object_dtyper  i  s    	///yyyQQ	R	RBxs##BHjj$&&G
)--,,
-
-C  +	Z   N udm>DDDH3)))))r!   c                      d } t          dgt          j        d          g          }|                    d                               |           }t          dggdg          }t          j        ||           d S )Nc                 z    |                                                                  rd S t          j        |           S r)   )isnarS  rm   r   r   s    r   r   z)test_timeseries_groupby_agg.<locals>.func{  s/    88::>> 	4vc{{r!   r  z2018-01-16 00:00:00+00:00rB   c                     dS r  r  r   s    r   r,   z-test_timeseries_groupby_agg.<locals>.<lambda>  s    q r!   r   )r   r   r  r"   r#   r2   r3   )r   r$   r   r7   s       r   test_timeseries_groupby_aggr  x  s      
 
C5.I!J!J K	L	L	LB
**[[
!
!
%
%d
+
+C3%,,,H#x(((((r!   c                    | t           j        v rt          j        |           j        }| t           j        v rt          j        |           j        }| t           j        v r+t          j        |                                           j        }| t           j	        v r+t          j        |                                           j        }t          dgdgt          j        |g|           d          }dgdgg}t          j        |d          }t          dt          j        |g|           i|          }|                    d	d
g                              d           }t          j        ||           d S )Nr   r   r   r  )r  r  rg   r  rB   r  r  c                     | S r)   r  r   s    r   r,   z,test_groupby_agg_precision.<locals>.<lambda>  s     r!   )r2   ALL_INT_NUMPY_DTYPESrm   iinfor  FLOAT_NUMPY_DTYPESfinfoFLOAT_EA_DTYPESlowerALL_INT_EA_DTYPESr   r   r   r   rO  r"   r#   r3   )any_real_numeric_dtype	max_valuer$   arraysrC   r7   r6   s          r   test_groupby_agg_precisionr    sl   !888H3448	!666H3448	!333H399;;<<@	!555H399;;<<@		EEHi[0FGGG	
 	

 
B ecU^F"61ABBBE	9+-CDDDEU  H ZZ())--kk::F&(+++++r!   c                    | dv rd S t          ddgdt          j        gg          }|                    d                              |           }|                    d                              d| i          }| dv rt          j        ||d         d           d S t          j        ||           t          j        |j        |j                   d S )N)corrwithnthr   r   )r   ngroupF)check_names)	r   rm   rn   r"   r#   r2   rO   r3   dtypes)r   objresult_reduced_seriesresult_reduced_frames       r    test_groupby_aggregate_directoryr    s    ,,,t
aVa[)
*
*CKKNN..~>>;;q>>--q..ABB+++
!#7#:	
 	
 	
 	
 	
 	
 	35IJJJ
!(*>*E	
 	
 	
 	
 	
r!   c                      t          g dd          } t          dgdt          j        dg                    }|                     g d                                          }t          j        ||           d S )N)z1 dayz3 daysNaTtimedelta64[ns]r   z2 daysr   r   r   r   r   )r	   rm   r   r"   r0   r2   rO   )rt   r7   r6   s      r   test_group_mean_timedelta_natr    sw    ,,,4EFFFDxj(91#OOOH\\)))$$))++F68,,,,,r!   zinput_data, expected_output)z2021-01-01T00:00r  z2021-01-01T02:00z2021-01-01T01:00)z2021-01-01T00:00-0100r  z2021-01-01T02:00-0100z2021-01-01T01:00-0100c                    t          t          |                     }t          t          |t          j        dg                              }|                    g d                                          }t          j        ||           d S )Nr   rB   r  )r   r	   rm   r   r"   r0   r2   rO   )
input_dataexpected_outputrt   r7   r6   s        r   test_group_mean_datetime64_natr    sw     vj))**D6/1#GGGHHH\\)))$$))++F68,,,,,r!   zfunc, outputr0   y       @      2@y      $@      6@y      D@     V@y      I@     [@c                 B   t          t          j        d                              dd                              ddg                    }|                    |j        dz                                |           }t          |          }t          j	        ||           d S )Nr   r   r   r                  @)
r	   rm   r   r   dotr"   rC   r#   r2   rO   )r   outputrt   r6   r7   s        r   test_groupby_complexr    s    
 ")B--''A..22Ar7;;<<D\\$*q.))--d33Ff~~H68,,,,,r!   )r  r  r   c                 f   t          t          j        d                              dd                              ddg                    }d}t          j        t          |          5  |                    |j	        dz            
                    |            d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r
  zNo matching signature foundr<   )r	   rm   r   r   r  rD   rE   r   r"   rC   r#   )r   rt   rG   s      r   test_groupby_complex_raisesr    s     ")B--''A..22Ar7;;<<D
'C	y	,	,	, / /TZ!^$$((.../ / / / / / / / / / / / / / / / / /s   (1B&&B*-B*prodr  c                 b   t          g dg dg dd          }d}t          j        t          |          5  |                    dd	          }d d d            n# 1 swxY w Y   t          j        t          d
          5  |                    |            d d d            d S # 1 swxY w Y   d S )Nr  r   r   rT   )r   rU   ri   rP  rv   r<   r   r   r   z"axis other than 0 is not supported)	r   r2   r}   r~   r"   rD   rE   NotImplementedErrorr#   )r   r$   rG   r%   s       r   test_multi_axis_1_raisesr    s6   
 
CC	D	DB
7C		#M	=	=	= % %ZZ!Z$$% % % % % % % % % % % % % % %	*2V	W	W	W  
t                 s#   AA"AB$$B(+B(ztest, constantr:   rM   r;   r|   r   )marksc                     t          |           }|                    d                              t          j                  }t          |          }|                    d          }t          j        ||           d S r   )r   r"   r#   r	   modero  r2   r3   )r  constantdf1r6   r7   s        r   test_agg_of_mode_listr    si     D//C[[^^,,F ""H!!!$$H&(+++++r!   c                     t          g dg dd          } |                     d          }dd}dd	}d
}t          j        t          |          5  |                    ||gddd           d d d            n# 1 swxY w Y   |                    ||gdd          }t          ddgddgddggt          g dd          t          j        ddg                    }t          j
        ||           d S )Nr  rP  r  r   r   r   c                 6    |                                  |z   |z   S r)   rK   r   r   r   s      r   foo1z@test_dataframe_groupy_agg_list_like_func_with_args.<locals>.foo1      uuww{Qr!   r   c                 6    |                                  |z   |z   S r)   rK   r   r   r   s      r   foo2z@test_dataframe_groupy_agg_list_like_func_with_args.<locals>.foo2  r  r!   /foo1\(\) got an unexpected keyword argument 'b'r<   r   r   r  r  ri   rj   r   r   )r   r  )r   r"  r  r   r   r   r   )r   r"   rD   rE   r   r#   r   r   ro   r2   r3   )r$   r%   r  r"  rG   r6   r7   s          r   2test_dataframe_groupy_agg_list_like_func_with_argsr&    sn   	99	:	:B	CB       =C	y	,	,	, * *
d|Q!q)))* * * * * * * * * * * * * * * VVT4L!qV))F
Q!Q"b"OOO#...&}'EFF  H
 &(+++++s   A99A= A=c                     t          g d          } |                     |           }dd}dd}d}t          j        t          |          5  |                    ||gd	d	d
           d d d            n# 1 swxY w Y   |                    ||gd	d
          }t          ddgddgddggt          g d          ddg          }t          j	        ||           d S )Nr  r   r   c                 6    |                                  |z   |z   S r)   rK   r  s      r   r  z=test_series_groupy_agg_list_like_func_with_args.<locals>.foo1/  r  r!   r   c                 6    |                                  |z   |z   S r)   rK   r!  s      r   r"  z=test_series_groupy_agg_list_like_func_with_args.<locals>.foo22  r  r!   r#  r<   r   r   r  r  ri   rj   r   r  r"  r  r$  r%  )
r	   r"   rD   rE   r   r#   r   r   r2   r3   )r  sgbr  r"  rG   r6   r7   s          r   /test_series_groupy_agg_list_like_func_with_argsr+  *  sP   yyyA
))A,,C       =C	y	,	,	, + +ta1***+ + + + + + + + + + + + + + + WWdD\1W**F
Q!Q"b"%			*:*:VVDT  H &(+++++s   A44A8;A8c                  @   t          g dg dg dd          } |                     ddg          }|ddg         }|                    d           }t          d	d
gddggdd	gdd	ggddg          }t          ddgddgd|          }t	          j        ||           d S )Nr  )r   r   r   )rT   r   rU   rP  r   r   r   c                 *    |                                  S r)   rK   r   s    r   r,   z.test_agg_groupings_selection.<locals>.<lambda>E  s    quuww r!   r   r   r   r   r   )r  r4  rh   r   rZ   rU   r  rB   r5  )r$   r%   selected_gbr6   rC   r7   s         r   test_agg_groupings_selectionr/  @  s    	CC	D	DB	S#J		Bc3Z.K__..//FAAAA'7Sz  E 1vRG44EBBBH&(+++++r!   c                      t          g dg dd          } |                     dd          d         }|                    dd	g          }t          d
dgddgddgd          }t          j        ||           d S )Nr  r  r   r   Fr  r   r   r0   r   r   rU   rT   r  rN  )r   r   r0   )r   r"   r#   r2   r3   r_  s       r   ?test_agg_multiple_with_as_index_false_subset_to_a_single_columnr1  M  s    	33	4	4B	C%	(	(	-BVVUFO$$F1vq!fsCjIIJJH&(+++++r!   c                     t          g dg dg dd          } |                     ddgd          }|                    d	g          }t          g d
g dg dgt          j        g d                    }t          j        ||           d S )Nr  )r   r   r   )r   rT   r   )a1a2r   r3  r4  F)r  r  r   )r   r   r   )r   r   rT   )r   r   r   ))r3   )r4  r5  )r   r   rs   )r   r"   r#   r   ro   r2   r3   r_  s       r   &test_agg_with_as_index_false_with_listr6  V  s    	)))999999EE	F	FB	d|e	4	4BVVUG__FiiIII.&'M'M'MNN  H &(+++++r!   c                  f   t          dt          j        d          t          j        d          t          j        d          di          } t          t          g dd          g dd	          }|                    d
          }|                    d          }t          j        ||            d S )Ntd0 days 01:00:000 days 01:15:00r  )r9  z0 days 00:15:00r:  r  r   )r   r   r   )r8  grpsr;  )r8  rd  )r8  )r   r   	Timedeltar	   r"   r#   r2   r3   )r7   r$   r%   r6   s       r   Btest_groupby_agg_extension_timedelta_cumsum_with_named_aggregationr=  c  s    < 122< 122< 122 	
 H 
III'   $OO	
 	

 
B 
F		BVV'V((F&(+++++r!   c                  $   d } t          t          j        ddgg d          ddgd          }d}t          j        t
          |          5  |                    d	d
                              |            d d d            d S # 1 swxY w Y   d S )Nc                 d    t          |           dk    rt          d          t          |           S )Nr   length must not be 0)r   r   r   s    r   r   z2test_groupby_aggregation_empty_group.<locals>.func~  s+    q66Q;;34441vvr!   r   rP  )r  r   rZ  r@  r<   r:   Fr  )r   r   CategoricalrD   rE   r   r"   r#   )r   r$   rG   s      r   $test_groupby_aggregation_empty_grouprB  |  s      
 
nc3ZOOODDDAq6RR
 
B !C	z	-	-	- 2 2


3
''++D1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   +BB	B	)s__doc__r  r  r   r  numpyrm   rD   pandas.errorsr   pandas.core.dtypes.commonr   pandasr   r   r   r   r	   r
   r   pandas._testing_testingr2   pandas.core.groupby.grouperr   r&   r8   rH   rR   rq   r   r   r   r   r  r  r   r   r   intr   r   r   r   r   r  r  r(  r5  r9  rJ  rL  rX  r\  r`  rp  r~  rr  r  r  r  r   uint64r  r  r  r   interval_rangeperiod_rangero   r  r  r  r  r  r0   r  r)  r,  r.  r2  r6  r8  rB  rE  rQ  rU  ri  rs  r  rx  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  paramr  r&  r+  r/  r1  r6  r=  rB  r  r!   r   <module>rP     s               				      , , , , , , 6 6 6 6 6 6                          0 0 0 0 0 0	 	 	, , ,+ + +. . .., ., .,b, , ,,' ' '6, , ,,, , , )),=,=?T?T+UV , , ,4, , ,+ + +  .				7B'	
Q5u5%I%IJ		3e%e D DE				7S'N3	
Qu5u)M)MN		7)))$T$TU
 
, ,
 
,$ ,	!Q"bB8,7.H.HI	&A"I.	!q	AI9==>	 , , ,*  0, , , 4 4 4$ $ $, , ,* ,  ,  ,F, , ,"! ! !H  0- - - , , ,	, 	, 	, $$''!!
 

$ 
$
 

$ 
qc$$$%
sZZ!qc
aS1#JsCjIIIJ  CCC  DDD  #F#F#FGG, , HG   ," 
qc$$$%
sZZ!qc
aS1#JsCjIIIJ  ...114e"455#F#F#FGG- - HG 65 21 -	, 	, 	,. . ., 28RY"788 Q Q QRR	> 	> SR 98	>, , , DDKK((!Q444
===>>	 , , ,, , ,", , ,82+ 2+ 2+ 2+ 2+ 2+ 2+ 2+js0 s0 s0 s0 s0 s0 s0 s0l I  ! F#J#J	
 ))*%!FF#J	
 BK
E**BK
BG,,BK
KK00F#JF	
# :, ,; :,2> > >, , ," S5'N"E74K4K#LMM	, 	, NM	,, , ,, , ,, , ,, , ,* 
!5!57N7NO , , ,&$ $ $ "D"Df!MNN, , ON,,, , ,  899, , :9,(v1 v1 v1 v1 v1 v1 v1 v1r) ) ) %	(	(!QS#J*O*OP
U	i#s45
1v' 2 2 2> 5	1	1K3MN5%.	1	1M=3QR
eU^	$z:&>? %2 %2 %2P
, 
, 
,- - -$* * *) ) ), , ,6
 
 
,- - - ! <;; 	

 FEE$%	
	 - - - fw12UXy<Q4RS - - - !6!6!677/ / 87/ 
eWvuoU|65Q5QR    s)b#YS		*RcC:=N,O,OPs)b#YS		*RsCj#=N,O,OP(S!HsAha	1Szq1a&k3R3RS1XQx#qC84c
A{+++#	
 	
 	
		 	, 	, 	,, , ,0, , ,,
, 
, 
,, , ,
, 
, 
,, , ,22 2 2 2 2r!   