
    Owg"                       d dl m Z  d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZ ej(                  fdZi dej(                  dej(                  d	d d
ej(                  dej(                  dej(                  dej(                  dej(                  dej(                  dej(                  dej(                  dej(                  dej(                  dd dej(                  dej(                  dej(                  d ej(                  ej(                  d ej(                  dZd Zd Zd Zd Zej6                  j9                  dddg      d         Zd! Zd" Zd# Z d$ Z!ej6                  j9                  d%d&g d' eg d(d&)      fd&d*gg d+ eg d(d&)       e	g d,      gfd&d-gg d. eg d(d&)       eg d(d&)      gfg      ej6                  j9                  d/ddg      d0               Z"d1 Z#d2 Z$d3 Z%ej6                  j9                  dddg      ej6                  j9                  d4ddg      ej6                  j9                  d5ddg      d6                      Z&d7 Z'd8 Z(d9 Z)d: Z*d; Z+ej6                  j9                  d<d=g e e,d>            d d?gd@dAgdBf e e,d>            j[                  dC       dAgd d@gdBf e e,dD            d d?gd@dAgdBfg      dE        Z.dF Z/dG Z0dH Z1ej6                  j9                  dIddJdgfddKdLgfddKdgfddJdLgfg      dM        Z2dN Z3dO Z4dP Z5ej6                  j9                  dddg      dQ        Z6ej6                  j9                  dddg      dR        Z7dS Z8dT Z9dU Z:ej6                  j9                  dVd e e
jv                   eg dWdXY      g dZgd&d*g[      g d(d\]      fd e eg dWdXY      g dZg d(d^      fg      d_        Z<ej6                  j9                  d`dej(                  ejz                  g      da        Z>ej~                  db        Z@ej6                  j9                  dcdddeg      df        ZAej6                  j9                  dcdddeg      ej6                  j9                  d4ddg      dg               ZBej6                  j9                  dhd e
jv                   e	digd>z  djgd>z  z   dXdkl       e	g dmdXdnl       e	ddgd>z        g      g dofd e
j                   edidjgdp       eg dqdp       e	ddg      gg dr[      dAdAd>d>ej(                  ej(                  d@d@ej(                  ej(                  d?d?gfd e
j                   edidjgdp       eg dqdp       e	ddg      gg dr[      dAdAd>d>ej(                  ej(                  d@d@ej(                  ej(                  d?d?gfg      ds        ZDdt ZEej6                  j9                  dug dvg dwg      dx        ZFdy ZGdz ZHd{ ZId| ZJd} ZKej6                  j9                  d4ddg      d~        ZLd ZMej6                  j9                  dej                  g dWfej                  g dZfg      d        ZPd ZQej6                  j9                  dddg      d        ZRd ZSd ZTd ZUd ZVd ZWej6                  j9                  dddg      deXd4eYfd       ZZej6                  j9                  dddg      deXd4eYfd       Z[d Z\ej6                  j9                  dddg      d        Z]d Z^d Z_d Z`ej6                  j9                  dg d      ej6                  j9                  dddg      d               Zaej6                  j9                  dddg      ej6                  j9                  dddg      d               Zbej6                  j9                  dg d      ej6                  j9                  dddg      ej6                  j9                  dddg      d                      Zcej6                  j9                  dg d      ej6                  j9                  dg d      ej6                  j9                  dddg      d                      Zdej6                  j9                  dg d      d        Zeej6                  j9                  dd&d*d&d*gg      ej6                  j9                  dd&d*d&d*gg      d               Zfej6                  j9                  d/ddg      ej6                  j9                  ddgdd-gg      d               Zgy)    )datetimeN)CategoricalCategoricalIndex	DataFrameIndex
MultiIndexSeriesqcut)SeriesGroupBy)get_groupby_method_argsc                     d }t        j                  t        ||      |      }| j                  ||      j	                         S )zpReindex to a cartesian production for the groupers,
    preserving the nature (Categorical) of each grouper
    c                     t        | t        t        f      rJ| j                  }t        j                  t        j                  t        |            || j                        } | S )N
categoriesordered)	
isinstancer   r   r   
from_codesnparangelenr   )ar   s     \/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/groupby/test_categorical.pyfz)cartesian_product_for_groupers.<locals>.f   sJ    a*K89J&&		#j/*z199A     names
fill_value)r   from_productmapreindex
sort_index)resultargsr   r   r   indexs         r   cartesian_product_for_groupersr&      s=    
 ##C4L>E>>%J>7BBDDr   allanycountcorrwithfirstidxmaxidxminlastmaxmeanmedianminnthnuniqueprodquantilesem)sizeskewstdsumvarc                     t        | j                  d      }d }| j                  |d      j                  j	                  |      }|j
                  j                  d   dk(  sJ y )N   c                     | j                         | j                         | j                         | j                         dS )Nr2   r/   r)   r0   r@   )groups    r   	get_statsz2test_apply_use_categorical_name.<locals>.get_statsI   s0    99;99;[[]JJL	
 	
r   Fobservedr   C)r
   rE   groupbyDapplyr%   r   )dfcatsrB   r#   s       r   test_apply_use_categorical_namerK   F   sX    a=D
 ZZuZ-//55i@F<<a C'''r   c           	         t        g dg dd      }t        g d|d      }t        t        d      dd	      }t        d
dddt        j
                  gi|      }|j                  dd      j                         }t        j                  ||       t        g dg dd      }t        g dg dd      }t        ||g dd      }|j                  dd      }	t        g ddd	      }
t        dt        g d|
      i      }|	j                  d      }t        j                  ||       t        ddgddgddggddg      }t        |j                        |d<   |j                  dgd      }|j                  d        }t        j                  ||dg          |j                  d      }|j                  d!dg   }t        j                  ||       d" }d#}t        j                   t"        |$      5  |j%                  |      }d d d        |j                  d!dg   j'                         }t)        ddgd%      |_        | rd&nt,        }|d   j/                  |      |d<   t        j                  ||       t        d
g d'i      }t1        j2                  |j4                  g d()      }d*}t        j                   t6        |$      5  |j4                  j                  |d      j                  t              }d d d        t        j8                  ||d
          t        j8                  |j4                  j                  |d      j                  d+       |d
          d,}t        j                   t6        |$      5  |j                  |d      j                  t              }d d d        |d
g   }t        j                  ||       |j                  |d      }|j                  d-       }t        j                  ||d
g          |j                  d.       }d/}t        j                   t6        |$      5  |j                  t:              }d d d        |j                  t        j<                  j>                        }|j                  d0       }t        j                  ||d
g   d1       t        j                  |d
g   d1       t        j                  ||d
g          t        j                  ||d
g          t        j8                  |j4                  j                  |d      jA                  t        jB                        |d
          t        j                  |j                  |d      jA                  t        jB                        |       t        d
g d2i      }t1        j2                  |j4                  g d3)      }d*}t        j                   t6        |$      5  |j4                  j                  |d      j                  t              }d d d        t        j8                  ||d
          t        j8                  |j4                  j                  |d      j                  d4       |d
          d,}t        j                   t6        |$      5  |j                  |d      j                  t              }d d d        |d
g   }t        j                  ||       t        j                  |j                  |d      j                  d5       |d
g          t        d
g d6i      }t1        j2                  |j4                  g d7t        t        d            8      }|j                  |d      j%                  tD              }t        |jF                  jH                  |jF                  jJ                  9      }t        g d6|      }d
|j*                  _&        t        j8                  ||       g d:}t        jN                  jQ                  d      jS                  d!dd;<      }t        jT                  ||d9      }t        t        jN                  jQ                  d      jW                  d=            }|j                  |d      j                         }|j                  t	        jX                  |      d      j                         }t        ||jH                  d      }
|j[                  |
      }t        j                  ||       |j                  |d      }|j]                         }|j^                  ja                         }t	        jX                  |      jc                  |      }|jc                  |      }t        |dg d:>      }|j                  |dd?      j]                         }t        j                  ||       t        jT                  t	        jd                  d      jg                  d@      |d9      }t        |      }t        jh                  |jk                  dA      j*                  jm                  d!      |       t)        g dBdz        }t        jh                  |jk                  dA      j*                  jm                  d      |       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   qxY w# 1 sw Y   xY w# 1 sw Y   xY w)CN	r   r   r   brN   rN   crO   rO   r   rN   rO   dTr   	   rS   rS      rT   rT      r>      r   rN   abcdrN   namer   r   rS   rT   r>   r%   FrC   r   r   rN   rN   r   rN   zrO   rQ   rO   rQ   rO   rQ   yrS   rT   rU   r>   ABvaluesrd   rf   )rU      r   numeric_onlyzJohn P. Doez	Jane Dove	person_idperson_namecolumnsc                     | S N xs    r   <lambda>ztest_basic.<locals>.<lambda>u   s    1 r   r   c                 >    | j                  d      j                  d   S )Nrk   r   )drop_duplicatesilocrq   s    r   r   ztest_basic.<locals>.f|   s      /44Q77r   7DataFrameGroupBy.apply operated on the grouping columnsmatchrZ   zstring[pyarrow_numpy])rV         )r   
         (   )binsusing SeriesGroupBy.sumc                 ,    t        j                  |       S ro   r   r;   xss    r   rs   ztest_basic.<locals>.<lambda>       RVVBZ r   zusing DataFrameGroupBy.sumc                 0    t        j                  | d      S Nr   axisr   r/   r   s    r   rs   ztest_basic.<locals>.<lambda>   s    bffRa&8 r   c                 0    t        j                  | d      S r   r   r   s    r   rs   ztest_basic.<locals>.<lambda>   s    rvvbq'9 r   zusing DataFrameGroupBy.maxc                 @    t         j                  j                  |       S ro   )r   maximumreducer   s    r   rs   ztest_basic.<locals>.<lambda>   s    rzz'8'8'< r   )check_dtype)rV   r{   r|   )ir   r}   r~   r   r   c                 ,    t        j                  |       S ro   r   r   s    r   rs   ztest_basic.<locals>.<lambda>   r   r   c                 ,    t        j                  |       S ro   r   r   s    r   rs   ztest_basic.<locals>.<lambda>   s    266": r   )rS   r   r   r   r   rS   rT   rU   r>   )labelsr   foobarbazquxd   r8   r   r>   )r   r   sortrD      future_stackr)   r0   r:   r2   z25%z50%z75%r/   )7r   r   r   listr   nanrF   r0   tmassert_frame_equalr	   r;   rk   	transformru   rv   assert_produces_warningDeprecationWarningrH   copyr   r%   objectastypepdcutr   FutureWarningassert_series_equalr/   r   r   filterr'   r   rf   r   r   rZ   randomdefault_rngintegersr   standard_normalasarrayr!   describecodesargsorttaker   repeatassert_index_equalstackget_level_values) using_infer_stringrJ   data	exp_indexexpectedr#   cat1cat2rI   gbexp_idxrr   gr   msgdtyperO   gbcresult2result3result4result5levelsr   groupeddesc_resultidx
ord_labelsord_dataexp_catsexpcexps                                    r   
test_basicr   U   s   5'D
 6TBCD fCFI#1a01CH\\#\.335F&(++QUVD+QUVD	DLA	BB 
C%	(BS$GG(F9G$DEFHVVV&F&(+ 	
]	a-=/ABm,	A #1==1Am			;-%	0A[[%F&!]O"45}-Fvvq!f~H&(+8 DC		#	#$6c	B vvq!f~""$HAq64HN'9#vE&}5<<UCH]&(+ 
C%	&B
rtt-.A
#C		#	#M	= @a%0::3?@ 62c7+
Q'112GH"S' 'C		#	#M	= >A.88=> 3%yH&(+
**Q*
'C]]89F&"cU),mm9:G
&C		#	#M	= %--$% mmBJJ--.Gmm<=G'2se9%@'2se9%@'2se9-'2se9- 244<<E<:AA"&&I2c7S"**Q*7>>rvvFK 
C)	*B
rtt23A
#C		#	#M	= @a%0::3?@ 62c7+
Q'112GH"S' 'C		#	#M	= >A.88=> 3%yH&(+


1u
%//0EFC5	
 
C&	'B
rtt_[f-FGAZZEZ*005F !4!4ahh>N>NOIl)4HHNN68, *FII!!!$--a-=E!!%>DRYY**1-==hGHD\\$\/446F||BJJt,u|=BBDHv$//4PG(H&(+ll4%l0G""$K
**


CD!&&s+Jyy~HD-IH uuENNPH+x0 !!"))A,"5"5a"8&$OD
4
 C					-	3	3	D	DQ	G# KaO
PC					-	3	3	D	DQ	G#o @ @> >% %&@ @> >sH   4j1j:'j+3j81k'kjj(+j58kkkc           
      @   t        t        j                  ddd      t        t	        ddg      t        d      gdgdz  dgdz  z   t        d      gd	d
g            }|j                  d	g|       }t        t        j                  ddd      t        t	        ddg      t        d      gdgdz  t        d      gd	d
g            }d}t        j                  t        |      5  |j                  d      }d d d        t        j                  |       y # 1 sw Y    xY w)NrT      r   rN   r}   r   rV   rS   Index1Index2)r   r   r   r   r%   levelrD      z&you will need to pass a length-1 tuplerx   )r   r   r   r   r   rangerF   r   r   r   	get_groupr   )rD   rI   r   r   r   r#   s         r   test_level_get_groupr      s   	YYq"a $c3Z0%)<37aS1W$eBi0X&

B 	

(h
7A YYq"a $c3Z0%(;37E!H%X&
H 3C		#	#M	= "S!" &(+	" "s   #DDc                     t        dgdz  dgdz  z   g ddz  t        j                  d      d      } t        | j                  g dd	
      | _        | j                  d      d   j                         }|j                  dd	      }g d}t        |g dd	
      }g dt        |      g}t        j                  |ddg      }t        dgdz  |d      }t        j                  ||       y )Nrd      re   )highmedlowr>   g      (@)rA   doseoutcomes)r   r   r   Tr   rA   r   r   )r   sort_remaining)r   r   r   r   r   r   )rd   rd   rd   re   re   re   r   rT   r)   r%   rZ   )r   r   r   r   r   rF   value_countsr"   r   r   from_arraysr	   r   r   rI   r#   r%   r   s       r   (test_sorting_with_different_categoricalsr     s    	UQY#**Q.		$	

B "''.DdSBGZZ (557FQt<F8E*@$OE+-=e-DEE""5&0ABEqcAgU9H68,r   r   TFc                    t        t        d      |       }t        t        d      ddg|       }t        j                  t	        |            }t        |||d      }|j                  dd	gd
      }t        j                  ||gdd	g      }t        g d|dg      }|j                  d       }t        j                  ||       |j                         }t        j                  ||       d}	t        j                  t        |	      5  |j                  t        j                        }d d d        t        j                  ||       t        j                  ||gdd	g      }t!        d|      }d}	t        j                  t"        |	      5  |j                  d       }d d d        t        j$                  ||       y # 1 sw Y   xY w# 1 sw Y   ,xY w)Nabcr   aaar   rN   r   )missingdenserf   r   r   TrC   r   )r   rS          @rf   )r%   rm   c                 0    t        j                  | d      S r   )r   r0   rq   s    r   rs   ztest_apply.<locals>.<lambda>@  s    RWWQQ%7 r   zusing DataFrameGroupBy.meanrx   rS   r[   rw   c                      yNrS   rp   rq   s    r   rs   ztest_apply.<locals>.<lambda>Q  s    r   )r   r   r   r   r   r   rF   r   r   rH   r   r   r0   r   r   aggr	   r   r   )
r   r   r   rf   rI   r   r   r   r#   r   s
             r   
test_applyr   0  s    UW5E $u+3*gNGYYs5z"F	w&I	JBjj)W-j=G 
 
 '5!1)W9M
NCC(DH]]78F&(+\\^F&(+
'C		#	#M	= &RWW%& &(+ 
 
 '5!1)W9M
NCas#H
CC		#	#$6c	B ,{+,68,& &, ,s   	 F>G
>G
Gc                    t        g dg dd      }t        g dg dd      }t        ||g dd      }d	d
gdz  |d<   |j                  g d|       }t        j                  ||d	d
gdz  gg d      }t        dt        g d|      i      j                         }|j                         }| st        |||d	d
ggt        d      d      }t        j                  ||       |j                  ddg|       }t        j                  ||gddg      }t        g dg dd|      }|j                         }| st        |||gt        d      d      }t        j                  ||       t        g dg dd      g dg dd}t        |      }|j                  d|       }	|	j                         }t        t        d       dt        d!      d"      }t        d#d#gd$d%gd&|      }| s2t        t        d!      dt        d!      d"      }
|j                  |
      }t        j                  ||       |j                  dd'g|       }|j                  d(      }t        g d)t        g dg dd      g d*d+      j!                  dd'g      }| s't        ||j"                  j$                  d,dggdd'g      }t        j                  ||       d-D ]P  }|\  }}|j'                  |      }||j"                  |k(  |j(                  |k(  z     }t        j                  ||       R g d.g d/g d0d1}t        |      }t+        j,                  |d	   t/        j0                  dd2d3            }||d4<   |j                  d4d5gd6| 7      }|j                  d(      }|j                  d4d5gd| 7      }|j                  d(      j3                         }t        j                  ||       y )8Nr\   r]   Tr   r_   r`   rb   rc   r   r   rT   rE   )rd   re   rE   rC   r   rf   r[   ABCr   r   rd   re   )r   r   r   r   )rf   rE   AB)r   rN   r   rN   r   rN   rO   rS   rS   rT   rT   r}   r~   r   r   )catintsvalr  abr   )rZ   r   r   g      ?      4@r   )r  r  r  r0   )      $@g      >@r	  g      D@rS   rT   rS   rT   )r  r  r  rS   ))r   rS   )rN   rT   )rN   rS   )r   rT   )r}   r   r>   r   r>   rS   rS   r}   r~   r   r   2   <   F   )rQ   rO   er   r   rQ   rO   r   r   r   r}   rU   r   r   Fas_indexrD   )r   r   rF   r   r   r	   r"   r;   r&   r   r   r   r0   r   r!   r   	set_indexr  rf   r   r  r   r   r   linspacereset_index)rD   r   r   rI   r   r   r   r#   rQ   groups_single_keyr%   groups_double_keykeyrO   ir  groupsgroups2s                     r   test_observedr  U  s    +QUVD+QUVD	DLA	BBenq BsG 
Oh	7B&&	teU^a'(I (F<y$IJKVVXHVVXF1tTE5>2DKA
 &(+	S#J	2B&&d|C:FI&BC9H VVXF1tTlDJ1
 &(+  _d
 	A 
1B 

58
<##%F T
4;I 3*dBZ@	RH KeUT
 ##E*&(+ 

E6?X
F""6*F+$$ !	
 i   1rvv}}q!f-v
 &(+ 8 01",,S1rvv{rww!|45
fh/	0 &+2	A
 
1B
&&EBKK2q1
2CBwKZZ%(58ZLFZZFjj'5)D8jLG{{6"..0H&(+r   c                    g dg dg dd}t        |      }t        j                  |d   g d      }d|_        |j	                  |dg| 	      }t        j                  |g dgddg
      }t        g dg dd|      }| st        ||j                  g dgddg      }|j                  d      }t        j                  ||       y )N)rU   rU   r>   rV   rb   )r}   r      "   )C1C2C3r!  )rS   rT   rU   r   r  r"  rC   r   )      @r$  g      @g      @)r
  g      Y@g      i@g      A@)r!  r#  r[   r0   )r   r   r   rZ   rF   r   r   r&   rf   r   r   r   )rD   rQ   rI   rf   r  r   r   r#   s           r   test_observed_codes_remapr%    s    <7IJA	1BVVBtHl+FFK

FD>H
E

 
 &,!7t}
MC#+EFcH 1v}}l3eT]
 ""6*F&(+r   c            	         t        t        j                  j                  d      j	                  ddd      t        j                  j                  d      j	                  ddd      t        j                  j                  d      j	                  ddd      dd      } | j
                  j                  t              j                  d      | d	<   | j                  g d
d      }|j                         }|j                  j                  d   j                         | j
                  j                         k(  sJ |j                  j                  d   j                         | j                  j                         k(  sJ |j                  j                  d   j                         | j                  j                         k(  sJ y )NrT   r      i0u  r   '  )r  int_idother_idr   categoryr  )r  r)  r*  TrC   rS   )r   r   r   r   r   r  r   strrF   r)   r%   r   r4   r)  r*  )rI   r   r#   s      r   test_observed_perfr-    sZ    
99((+44Q%4Hii++A.773U7K		--a099!U9O		

B c"))*5BuIjj6jFG]]_F<<q!))+rvv~~/????<<q!))+ryy/@/@/BBBB<<q!))+r{{/B/B/DDDDr   c                 F   t        g dg d      }t        |g dd      }|j                  d|       }|j                  }| rt	        dd	gd
      t	        dgd
      d}n*t	        dd	gd
      t	        g d
      t	        dgd
      d}t        j                  ||       y )N)r   rO   r   r  r   rS   rT   rU   r  valsr  rC   r   rT   int64r   rS   )r   rO   )r   r   rF   r  r   r   assert_dict_equal)rD   r  rI   r   r#   r   s         r   test_observed_groupsr6    s     o/
BC	3	2	3B


58
,AXXF1vW5E1#W<UV 1vW-r)s'*
 *r   z,keys, expected_values, expected_index_levelsr   )r{   	   r   r0  rz   rN   )	rg   r   r   r   r   r7  r   r   r   r>   rV   r   a2)	r{   r   r   r   r7  r   r   r   r   test_seriesc                    t        t        g dg d      t        g dg d      g dg dd      j                  ddg      }d	| vr|j                  d	
      }|j	                  | d      }|r|d   }|j                         }t        |       dk(  r|}ng ddg dz  g}t        |||       }t        d|i|      }	|r|	d   }	t        j                  ||	       y )NrS   rS   rT   r0  r/  r8  )rg   r   r7  )r   r9  rN   rO   r   r9  rN   rl   FrC   rO   rS   	r   r   r   rS   rS   rS   rT   rT   rT   rU   r   rS   rT   )r   r   r[   )
r   r   r  droprF   r;   r   r   r   assert_equal)
keysexpected_valuesexpected_index_levelsr:  rI   r   r#   r%   r   r   s
             r   test_unobserved_in_indexrD    s    , 
Y9=iI>		

 id  $WWSW!	D5	)BWVVXF
4yA~%,a)m<!

 #/u=HC=OOFH%r   c                 D   t        t        dt        j                  dgg d      g dd      }|j	                  d|       }|j
                  }| rdt        dd	gd
      i}n)t        dd	gd
      t        g d
      t        g d
      d}t        j                  ||       y )Nr   )r   rN   rQ   r/  r0  r1  r  rC   r   rT   r3  r4  )	r   r   r   r   rF   r  r   r   r5  )rD   rI   r   r#   r   s        r   test_observed_groups_with_nanrF  7  s    	RVVS1oN	

B 	

58
,AXXF1vW56 1vW-r)r)

 *r   c                  2   t        dt        j                  t        j                  gg d      } t        g d      }t	        | |d      }|j                  dd      d	   j                  d
      }|d	   j                  d
g   }t        j                  ||       y )Nr   r  r/  r0  )r  serr  FrC   rH  r   )
r   r   r   r	   r   rF   r3   rv   r   r   )r  rH  rI   r#   r   s        r   test_observed_nthrI  L  s|    
sBFFBFF+
HC

C	3s+	,BZZZ.u599!<F%y~~qc"H68,r   c                    t        t        j                  dt        j                  dgg d      }t        g d      }t	        ||d      }|j                  d|       j                         j                         }| rt	        t        dgg d      dgd      }n<t	        t        g dg d      dt        j                  t        j                  gd      }t        j                  ||       y )	Nr   r  r/  rb   )s1s2rK  rC   rT   )
r   r   r   r	   r   rF   r+   r  r   r   )rD   rK  rL  rI   r#   r   s         r   #test_dataframe_categorical_with_nanrM  W  s    	bffc2663/O	LB		B	"B'	(BZZxZ0668DDFFuA!M
 !/oN"&&"&&)
 &(+r   rD   r   c                    t        g dg d|       }t        g d      }t        ||d      }|j                  d||      d   j	                  d      }t        |j
                  j                  d	
      }t        |j                        }|sd||j                         <   t        ||k(        sd|  d| d| d| }J |       y )N)rQ   r   rN   r   rQ   rN   )r   rN   r   rQ   r   )labelr  rO  )rD   r   r  r+   r   r4  r   zDLabels and aggregation results not consistently sorted
for (ordered=z, observed=z, sort=z
)
Result:
)	r   r	   r   rF   	aggregater%   arrayisnar'   )	r   rD   r   rO  r  rI   r#   aggrr   s	            r   0test_dataframe_categorical_ordered_observed_sortrT  k  s     &-E
 /
0C	U3/	0B ZZ(Z>uEOOPWXF 6<<%%X6E&,,D%TYY[u}#9Kz Gx! 	
 	cu r   c                  .   t        j                  dd      } t        j                  j	                  d      j                  ddd      }t        j                  || d	      }t        t        j                  j	                  d      j                  d
            }|j                  |d      j                         }|j                  t        j                  |      d      j                         }|j                  |       }t        |j                  |j                  d      |_        t!        j"                  ||       |j                  |d      }|j%                         }|j&                  j)                         }|j+                  |      }	|j+                  |      }
|
j                  |	d      j%                         }t!        j"                  ||       t!        j,                  |j                  |j                         t!        j,                  |j                  j/                  d      |j                  j/                  d             t        j                  t        j0                  d      j3                  d      | d	      }t        |      }t!        j,                  |j5                  d      j                  j/                  d      |       t7        g ddz        }t!        j,                  |j5                  d      j                  j/                  d      |       y )Nz
2014-01-01r>   )periodsrT   r   r   r   Tr   r   FrC   r   r   r   r   rS   )r   
date_ranger   r   r   r   r   r   r   r   rF   r0   r   r!   r   r%   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   rJ   r   r#   r   r   r   r   r   r   r   r   s                r   test_datetimerX    s\   ]]<3FII!!!$--a-=E!!%>DRYY**1-==hGHD\\$\/446F||BJJt,u|=BBDH'H%8>>4HN &(+ll4%l0G""$K
**


C3Jyy~H
U;DDFH+x0+++X^^<**1-x~~/N/Nq/Q
 !!"))A,"5"5a"8&$OD
4
 C					-	3	3	D	DQ	G# KaO
PC					-	3	3	D	DQ	G#r   c                     t         j                  j                  d      } g d}| j                  ddd      }t	        j
                  ||d      }t        t        j                  t        j                  d      d      j                  d	d      t        d
            }||d<   |j                  d      j                  dd      j                         }|t        d
         j                  |j                  d      j                         }t        t	        j
                  g d|d      d      |_        t#        j$                  ||       |j                  dd      j                         }|t        d
         j                  |j                  d      j                         }t        t	        j
                  g d|d      d      |_        t#        j$                  ||       y )NrT   r   r   r>   r~   r   Tr   rX   rl   rJ   Fr   rC   r   rS   rT   rU   rz   )r   r   r   r   r   r   r   r   r   reshaper   r  rF   r;   r   r   r%   r   r   )sr   r   rJ   rI   r#   r   s          r   test_categorical_indexr^    s|   
		a A)FJJq!"J%E!!%>D	299RYYr]A.66r1=tF|	TBBvJ \\&!))E)BFFHF$v,''

U'CGGIH%|VTBHN &(+ ZZZ/335F$v,''

U'CGGIH%|VTBHN &(+r   c                     t        g dg dd      } t        t        j                  j	                  d      j                  d      |       }|j                  g dd	z        j                         }t        j                  |j                  d
      j                  |        t        j                  |j                  d
      j                  j                  | j                         y )N)r   r   r   r   r   Tr   rT   )r~   r>   rl   rb   rV   r   )r   r   r   r   r   r   rF   r   r   r   r   rm   assert_categorical_equalrf   )rJ   rI   r#   s      r   !test_describe_categorical_columnsra    s    $/D
 
299((+;;GDd	SBZZq()224F&,,D,9AA4H$'//66r   c                  N   t        t        d      ddgdz  t        d      dz  d      } | d   j                  d	      | d<   | j	                  d
dgd      d   j                         j                         }|j                         }t        ddgdd      }t        j                  |j                  |       t        j                  |j                  j                  |j                         |d   |d   z   }t        ddgt        ddgd
            }t        j                   ||       y )Nr}   rd   re   rV   XYXXYrT   )r   mediumartistrd  r+  re  FrC   r   r   rZ   r   r>   XYrz   r[   )r   r   r   r   rF   r)   unstackr   r   r   r   rm   r`  rf   r	   r   r   )rI   gcatr#   exp_columnsr   s        r   test_unstack_categoricalrl    s   	BiC:>T']Q=NO
B h<&&z2BxL::x*U:;C@FFHPPRD]]_F"C:u8LK&..+6 5 5{7I7IJ#Yc"Fq!fE3*8$DEH68,r   c                  `   t        t        j                  t        j                  ddddddddg
      } t        j                  | j                         j                  d      }t        j                  t        d      5  | j                  |      j                          d d d        y # 1 sw Y   y xY w)NrS   rT   rU   r>   z$Grouper and axis must be same lengthrx   )r	   r   r   r   r   dropnarf   pytestraises
ValueErrorrF   r0   )seriesr   s     r   test_bins_unequal_lenrs    s    RVVRVVQ1aAq!<=F66&--/((!,D 
z)O	P $t!!#$ $ $s   ; B$$B-rr  r   r>   rU   rS   rT   rd   re   c                     | dz   S r   rp   )r   s    r   rs   rs     s
    S1W r   rg   c                     | j                  t        t        d      d      d      }|j                  t              }t        |t	        |j                                     }t        j                  ||       y )NABBAr+  r4  FrC   r[   )rF   r	   r   rP  r   rA  r   r   )rr  r   rF   r#   r   s        r   test_categorical_seriesrx    sY      nnVDL
CenTGt$Fd"2499;"?@H68,r   c                     t        t        g dg d      g dg dd      j                  ddgdd	
      j                         } t        t        ddgj                  j                  j
                        ddgddgdg d      }t        j                  | |       fd}d}t        j                  t        |      5  j                  d|gdd	
      j                         } d d d        t        t        ddgj                  j                  j
                        ddgddgdg d      }t        j                  | |       t        g dd      }d}t        j                  t        |      5  j                  d|gdd	
      j                         } d d d        t        j                  | |       ddg}t        t        ddgj                  j                  j
                        ddgddgdg d      }dD ]U  }t        t        d      |      _        j                  |dd	
      j                         } t        j                  | |       W y # 1 sw Y   rxY w# 1 sw Y   xY w)NrS   rT   rT   r0  )r}      r{  )e   f   g   )r  rd   re   r  rd   FTr  rS   rT   r/  r}   r{  r|     rl   c                 &    j                   | df   S )Nrd   )loc)rrI   s    r   rs   ztest_as_index.<locals>.<lambda>*  s    "&&C. r   z*A grouping .* was excluded from the resultrx   r   )r   rN   rN   rz   )Nrg  re   r   )r   r   rF   r;   r  r   r   r   r   r   r	   r   r   r%   )r#   r   r   r   r]  group_columnsrZ   rI   s          @r   test_as_indexr    sA   	y)4 	

B ZZutZDHHJF1v"&&**2G2GHbs	

 "H &(+ 	!A
6C		#	#M	= MUAJFJJLM1v"&&**2G2GHbs	

 "H &(+ 	U+A
6C		#	#M	= MUAJFJJLM&(+ CLM1v"&&**2G2GHbs	

 "H ! 0e40MEDIMMO
fh/	0=M MM Ms   %I2%I#I #I,c                  P   t        d      } t        dt        t        d      | d      i      }t        | | dd      }t        t        d      | dd      }t	        j
                  |j                  ddd	      j                         j                  |       t	        j
                  |j                  ddd	      j                         j                  |       t        dt        t        d      | d      i      }t        | | dd      }t        t        d      t        d      dd      }t	        j
                  |j                  ddd	      j                         j                  |       t	        j
                  |j                  ddd	      j                         j                  |       y )
Nr   rd   baTr   rf  bacFr   )	r   r   r   r   r   r   rF   r+   r%   )r   rI   r"   nosort_indexs       r   test_preserve_categoriesr  Q  sa   eJ 
CT$ZJPTUV	WB!*j$SQJ#DKTPSTL


3TE
288:@@* 


3UU
399;AA<
 
CT$ZJPUVW	XB!*j%cRJ $DKeeRUVL


3TE
288:@@* 


3UU
399;AA<r   c                     t        g dg dt        t        d      t        d      d      t        t        d      t        d      d      d      } t        d	d
t        j                  gddt        j                  gt        t        d      t        d      d      t        t        d      t        d      d      d      }dD ]  }| j                  |dd      j                  d      }| j                  |dd      j                  d      j                         }|j                  |j                        }t        j                  ||       t        j                  ||        y )N)rS   rT   rS   rS   rT   )r}      r      r   abaabr  Fr   T)rd   re   r!  r"  r   g      ?g      9@r	  )r!  r"  byr  rD   rh   rl   )r   r   r   r   r   rF   r0   r  r!   rm   r   r   )rI   exp_fullcolresult1r   r   s         r   test_preserve_categorical_dtyper  o  s2   	 %d7mUUSd7mUTR		

B sBFF#bff%d5kd5k5Qd5kd5k4P		
H  1**ee*DII J 
 JJ#uJ=TtT$[] 	
 ##GOO#<
gx0
gx01r   zfunc, valuessecondfourththirdc                    t        g dd      }t        g d|d      }|j                  d      } t        ||              }t        ddgt	        ||j
                  	      d      j                  d      }t        j                  ||       |j                  d      d
   } t        ||              }|d
   }t        j                  ||       y )N)r+   r  r  r  Tr   )rZ  rZ  r  )payloadr  r  r  rZ  r4  r  )
r   r   rF   getattrr	   r   r  r   r   r   )funcrf   rO   rI   r   r#   r   sgbs           r   test_preserve_on_ordered_opsr    s     	:DIA	/:	;B


9AWQFHVF!''%BCi	  &(+ **Y

&CWS$!FH68,r   c                     t        t        j                  j                  d      j	                  d            } t        j
                  g d      }t        j                  |g dd      }| j                  |d      j                         }| j                  |d      j                         }t        |j                  |j                  |j                  	      |_        t        j                  ||       t        j
                  g d
      }t        j                  |g dd      }| j                  |d      j                         }| j                  |d      j                         j!                  |j                        }t        |j                  |j                  |j                  	      |_        t        j                  ||       t        g dg dd	      }t#        g d|d      } | j                  dd      j                         }|d   j$                  }t        j
                  dddt        j&                  g      }t        j(                  ||       y )NrT   r7  r=  r>  Tr   FrC   r   )	r   r   r   rS   rS   rS   rU   rU   rU   r[  rM   rP   rR   rW   rN   r   rS   r>   )r	   r   r   r   r   rQ  r   r   rF   r0   r   r%   r   r   r   r   r!   r   rf   r   assert_numpy_array_equal)r   r   rJ   r#   r   s        r   test_categorical_no_compressr    s   "))''*::1=>DHH01E!!%DAD\\$\/446F
,,uu,
-
2
2
4C 		doot||CI 63'HH01E!!%tDD\\$\/446F
,,uu,
-
2
2
4
<
<T__
MC 		doot||CI 63'5'D
 6TBCD\\#\.335FC[F
((Aq!RVV$
%C,r   c                      t        d gdz  t        g d      d      } | j                  d      j                         d   }t	        t        g ddg      t	        g d	d
      d      }t        j                  ||       y )NrU   )trainr  testrt  rd   re   r  r  r/  r   r   rZ   r   )r   r   rF   r+   r	   r   r   rI   r#   r   s      r    test_groupby_empty_with_categoryr    st     
$!+6P*QR	SBZZ_""$S)FBFG#45Rxc2H
 68,r   c                  v   t        dt        j                  j                  d      j	                  ddd      i      } t        ddd      D cg c]  }| d|dz     }}t        ||      }| j                  dgd	
      } t        j                  | j                  t        ddd      d|      | d<   | j                  dgd      d   j                         }|t        |j                  d          }t        |j                  |j                  j                         |_        t#        j$                  ||       y c c}w )NvaluerT   r   r(  r   i  z - i  T)r  	ascendingi)  F)rightr   value_grouprC   c                 :    t        | j                         d         S )Nr   )floatsplitrq   s    r   rs   ztest_sort.<locals>.<lambda>  s    eAGGIaL.A r   )r  rz   )r   r   r   r   r   r   r   sort_valuesr   r   r  rF   r)   sortedr%   r   rZ   r   r   )rI   r  r   
cat_labelsresr   s         r   	test_sortr    s    
GRYY2215>>q%MN	OB(-a(<=13qug=F=VV,J	G9	5B
%5#&eJB} **m_u*
5m
D
J
J
LC
fSYY$AB
CC @CI3$ >s   D6c           
      h   t        g dg dg dg dg dg dg dgg d	      }t        |d
   |      |d
<   |j                  d
| d      j                         }| rddgddgddgddgg}g d}nddgddgddgddgg}g d}t        |ddgt	        |d
|            }t        j                  ||       y )N)	(7.5, 10]r}   r}   )r  r   r~   )(2.5, 5]rV   r   )(5, 7.5]r   r   )r  r>   r  )(0, 2.5]rS   r  )r  rg   r  )r   r   r   rl   r   r   Fr   rS   r  rV   r   r   r   r}   )r  r  r  r  )r  r  r  r  r   r   rY   rm   r%   )r   r   rF   r+   r   r   r   )r   r   rI   r#   data_valuesindex_valuesr   s          r   
test_sort2r    s    
 
! 	
 (
B bk7;BwKZZdUZ;AACF2wB!R2r(;HBx!R1b'Ar7;H|'7KH &(+r   c                    t        t        ddd      t        ddd      t        ddd      t        ddd      t        ddd      t        ddd      t        ddd      gg dg ddg d	      }t        |d
   |      |d
<   | rAddgddgddgddgg}t        ddd      t        ddd      t        ddd      t        ddd      g}n@ddgddgddgddgg}t        ddd      t        ddd      t        ddd      t        ddd      g}t        |ddgt        |d
|            }|j	                  d
| d      j                         }t        j                  ||       y )Ni  rg   rS   rT   rV   )r}   r   rV   r   r>   rS   rg   r  )dtr   r   rl   r  r   r  r   r   r   r}   r   r   rY   r  Fr   )r   r   r   r   rF   r+   r   r   )r   r   rI   r  r  r   r#   s          r   test_sort_datetimeliker    s    
 q!$q!$q!$q!$q!$q!$q!$ */	
 %
B$ 2d8W5BtH2wB!R2r(;T1a T1a T1a T1a 	
 Bx!R1b'Ar7;T1a T1a T1a T1a 	
 |$HH
 ZZ4%Z8>>@F&(+r   c                  L   t        t        g dg d      g dd      } t        g dd      }| j                  dd	      j                  j                         }t        g d
|d      }t        j                  ||       | j                  dd	      j                  j                  d      }t        g d
|d      }t        j                  ||       | j                  dd	      j                  j                  d      }t        ddt        j                  g|d      }t        j                  ||       | j                  dd	      j                  j                  d      }t        dt        j                  t        j                  g|d      }t        j                  ||       y )Nr   r   rN   r  r/  rS   rT   rS   rt  rd   rz   FrC   )rU   rS   r   re   r   	min_countrS   rU   rT   )r   r   r   rF   re   r;   r	   r   r   r   r   rI   expected_idxr#   r   s       r   test_empty_sumr  K  sU   	/oFYW
B $O#>L ZZeZ,..224FiC8H68, ZZeZ,..22Q2?FiC8H68, ZZeZ,..22Q2?Fq!RVVnl=H68, ZZeZ,..22Q2?Fq"&&"&&)<cBH68,r   c                  l   t        t        g dg d      g dd      } t        g dd      }| j                  dd	      j                  j                         }t        g d
|d      }t        j                  ||       | j                  dd	      j                  j                  d      }t        g d
|d      }t        j                  ||       | j                  dd	      j                  j                  d      }t        ddt        j                  g|d      }t        j                  ||       y )Nr  r  r/  r  rt  rd   rz   FrC   )rT   rS   rS   re   r   r  rS   rT   )r   r   r   rF   re   r5   r	   r   r   r   r   r  s       r   test_empty_prodr  g  s    	/oFYW
B $O#>L ZZeZ,..335FiC8H68, ZZeZ,..33a3@FiC8H68, ZZeZ,..33a3@Fq!RVVnl=H68,r   c                  
   t        t        t        d            t        t        t        j                  ddd            dz        t        j                  d      d      } | j                  dd	gd
      j                         }t        j                  t        g d      t        t        j                  ddd            gdd	g      }t        ddddddddt
        j                  dg	i|      }t        j                  ||       y )N	abcbabcbaz2018-06-01 001minrU   )freqrV  r7  )key1key2rf   r  r  FrC   r  r   rf   r   r>   r   rV   r   rT   r[   )r   r   r   r   rW  r   r   rF   r0   r   r   r   r   r   )rI   r#   r   r   s       r   ,test_groupby_multiindex_categorical_datetimer    s     
[ 12R]]?KLqP iil	

B ZZ(5Z9>>@F

!
!(oFANO	
 vC (Q1aAq"&&!$DESQH&(+r   zas_index, expectedr<  r+  r4  rz  r   rr   )r%   r   rZ   r   rN   rr   c                     t        t        g dd      g dg dd      }|j                  ddg| d	
      d   j                         }t	        j
                  ||       y )Nr<  r+  r4  rz  r0  r  r   rN   Tr  rr   )r   r	   rF   r;   r   r@  )r  r   rI   r#   s       r   ,test_groupby_agg_observed_true_single_columnr    sU    6 
Yj1		R
B ZZc
XZEcJNNPFOOFH%r   r   c                     t        g dg dd      }t        g dg dd      }|j                  d|       }t        j                  ||       y )NrP   Fr   )Nr   rN   rO   rS   r   )r   shiftr   r@  )r   ctr   r  s       r   
test_shiftr    sJ    	)=u
B *>H ((1(
,COOC"r   c                     | j                         dd }|d   j                  d      |d<   |d   j                  d      |d<   t        g d      |d<   |j                  dgd	
      }|S )a  
    DataFrame with multiple categorical columns and a column of integers.
    Shortened so as not to contain all possible combinations of categories.
    Useful for testing `observed` kwarg functionality on GroupBy objects.

    Parameters
    ----------
    df: DataFrame
        Non-categorical, longer DataFrame from another fixture, used to derive
        this one

    Returns
    -------
    df_cat: DataFrame
    Nr>   rd   r+  re   rb   rE   rG   rS   r   )r   r   r	   r?  )rI   df_cats     r   r  r    sl    " WWYr]F+$$Z0F3K+$$Z0F3K&F3K[[#Q['FMr   	operationr   rH   c                    t        g d| d   j                  d      }t        g d| d   j                  d      }t        j                  ||g      }t	        g d|d      j                         }| j                  ddgd	
      d   }|dk(  rdnd}t        j                  t        |      5   t        ||      t              }d d d        t        j                  |       y # 1 sw Y    xY w)N)r   r   r   r   rd   r  )onethreer  twore   )rT   r>   rS   rU   rE   r   r%   rZ   TrC   rH   using np.sumr   rx   )r   r   r   r   r	   r"   rF   r   r   r   r  r;   r   )	r  r  lev_alev_br%   r   r   r   r#   s	            r    test_seriesgroupby_observed_truer    s     .fSk6G6GcRE0s8I8IPSTE""E5>2E<u3?JJLHnnc3Z$n7<G%0.6OC		#	#M	= 2,),S12 68,2 2s   ,C""C+c                 ~   t        j                  t        ddgd      t        g dd      gddg      j                         \  }}t	        d	d
t
        j                  dt
        j                  dg|d      }|dk(  r9d}t        j                  t        |      5  |j                  dd      }d d d        | j                  ddg|      d   }|dk(  rdnd}t        j                  t        |      5   t        ||      t              }d d d        t        j                  |       y # 1 sw Y   {xY w# 1 sw Y   ,xY w)Nr   r   Fr   r  r  r  rd   re   r   rT   r>   rS   rU   rE   r  r   z.The 'downcast' keyword in fillna is deprecatedrx   r   infer)downcastrC   r   r  )r   r   r   	sortlevelr	   r   r   r   r   r   fillnarF   r  r;   r   )	r  rD   r  r%   _r   r   r   r#   s	            r   )test_seriesgroupby_observed_false_or_noner    s(   
 &&eU^U;4eD	
 Cj ik E1 Aq"&&!RVVQ7u3OHE>''SA 	<q7;H	<nnc3Z(n;C@G'0E'9
#~C		#	#M	= 2,),S12 68,	< 	<2 2s   D'1D3'D03D<zobserved, index, datar   r   rd   r  )r  r  r  r  r  r  r  r  re   )rT   rT   r>   r>   rS   rS   rU   rU   r   r  )rd   re   Nc                     t        ||d      }| j                  ddg|      d   j                  d       }t        j                  ||       y )NrE   r  rd   re   rC   c                 D    | j                         | j                         dS )Nr2   r/   r  rq   s    r   rs   z8test_seriesgroupby_observed_apply_dict.<locals>.<lambda><  s    !%%'!%%'2 r   )r	   rF   rH   r   r   )r  rD   r%   r   r   r#   s         r   &test_seriesgroupby_observed_apply_dictr    sN    \ 4u37H^^S#J^:3?EE2F 68,r   c                     | j                  ddgd      d   j                         }| j                  ddgd      j                         d   }t        j                  ||       y )Nrd   re   FrC   rE   )rF   r0   r   r   )r  r   r#   s      r   4test_groupby_categorical_series_dataframe_consistentr  A  sZ    ~~sCj5~9#>CCEH^^S#J^7<<>sCF68,r   code)rS   r   r   )r   r   r   c                    t        g dg dg dd      }t        j                  | t        d            }d}t	        j
                  t        |      5  |j                  |d	d
      }d d d        j                         }d}t	        j
                  t        |      5  |j                  j                  |dd
      }d d d        j                         j                  }t	        j                  ||       y # 1 sw Y   xY w# 1 sw Y   FxY w)Nrb   )rZ  r  )rV   r   rg   r   r  r   r/  z+DataFrame.groupby with axis=1 is deprecatedrx   rS   F)r   rD   z5The 'axis' keyword in DataFrame.groupby is deprecatedr   )r   r   r   r   r   r   r   rF   r0   Tr   )r  rI   r  r   r   r#   gb2r   s           r   test_groupby_categorical_axis_1r  H  s     
,<<P	QB

 
 $u+
>C
7C		#	#M	= 5ZZ!eZ45WWYF
AC		#	#M	= 8ddll3Ql78xxz||H&(+5 58 8s   C5D5C>D
c                    t        t        ddg|      ddgdddg	      }|j                         }|j                  d| 
      j	                  t         j
                  d      j                         }t        j                  ||       y )NBobGregr   rS   rT   )NameItemr  r  rl   rC   T)skipna)	r   r   r   rF   r   r;   r  r   r   )rD   r   rI   r   r#   s        r   $test_groupby_cat_preserves_structurer  X  sz    	eV_g>AO 
B wwyH 	

6H
-	Y]]4	(	  &(+r   c                      t        g dt        d      d      } t        j                  t        d      5  | j                  d      j                  d        d d d        y # 1 sw Y   y xY w)Nr\   r>   r<   r  z'vau'rx   r<   c                 b    t        | j                  d   d   g| j                  d   d   gd      S )NrZ  r<   vaur  )r   rv   )rowss    r   rs   z/test_get_nonexistent_category.<locals>.<lambda>n  s3    2u-.		"e8L7MN r   )r   r   ro  rp  KeyErrorrF   rH   rI   s    r   test_get_nonexistent_categoryr  i  sU    	/aA	BB	xw	/ 



5	

 
 
s   "A  A)c           	         | dk(  rt        j                  d       t        t        t	        d      t	        d            t        t	        d      dz  t	        d            dgd	z  d
      }t        | |      }|rd	nd}|j                  ddg|      d   }| dk(  rt        ||       rJ y t        ||       }|s.| dv r*t        j                  t        d      5   ||  d d d        y  || }t        |      |k(  sJ y # 1 sw Y   y xY w)Nngroupngroup is not truly a reductionAABBABCDr/  r  rT   皙?r>   cat_1cat_2r  r  r  r  rC   r  r*   r-   r,   (empty group due to unobserved categoriesrx   )ro  skipr   r   r   r   rF   hasattrr  rp  rq  r   )reduction_funcrD   rI   r$   expected_lengthseries_groupbyr   r#   s           r   0test_series_groupby_on_2_categoricals_unobservedr  t  s   !56	 f$v,G daDLIUQY	

B #>26D#aOZZ' 2XZFwON#>>:::
..
1C*>>]]H
 	 J	 	$ZFv;/)))	 	s   C;;Dc           	         | dk(  rt        j                  d       | dk(  r1t         j                  j                  d      }|j	                  |       t        t        t        d      t        d            t        t        d	      d
z  t        d            dgdz  d      }t        d      t        d      t        d      t        d      t        d      g}t        | |      }|j                  ddgd      d   }t        ||       }| dv r*t        j                  t        d      5   ||  d d d        y  || }t        |    }	|D ]C  }
|j                  |
   }t!        j"                  |	      rt!        j"                  |      r=||	k(  rCJ  |	dk(  r7| dk7  r1t%        j&                  |j(                  t$        j*                        sJ y y y # 1 sw Y   y xY w)Nr	  r
  r*   z6TODO: implemented SeriesGroupBy.corrwith. See GH 32293reasonr  r   r/  r  rT   r  r>   r  ACBCCACBCCr  r  FrC   r  r  r  rx   r   r;   )ro  r  markxfailapplymarkerr   r   r   tupler   rF   r  rp  rq  -_results_for_groupbys_with_missing_categoriesr  r   rR  r   
issubdtyper   integer)r  requestr!  rI   
unobservedr$   r  r   r#   zero_or_nanr   r  s               r   ?test_series_groupby_on_2_categoricals_unobserved_zeroes_or_nansr+    s    !56#{{  K ! 
 	D!	 f$u+F daDKHUQY	

B +uT{E$KteDkRJ">26DZZ' 2UZCGLN
..
1C--]]H
 	 J	 	$ZF?OK Ojjo$3+;MNNO aNe3}}V\\2::666 4%	 	s   $GGc           	      d   | dk(  rt        j                  d       t        t        t	        d      t	        d            t        t	        d      t	        d            g dd	      }g d
}|j                  ddgd      }t        | |      } t        ||       | }|D ]  }||j                  vrJ  y )Nr	  2ngroup does not return the Categories on the indexr  r   r/  111112r  r  r  r  r  )rd   2)re   r2  )rE   1)rE   r2  r  r  TrC   )	ro  r  r   r   r   rF   r   r  r%   )r  rI   unobserved_catsdf_grpr$   r  r  s          r   >test_dataframe_groupby_on_2_categoricals_when_observed_is_truer6    s    
 !HI	 f$u+F f$t*E)	

B GOZZ'*TZ:F">26D
)'&.
)4
0C $#))###$r   c           	         | dk(  rt        j                  d       t        t        t	        d      t	        d            t        t	        d      t	        d            g dd	      }g d
}|j                  ddg|      }t        | |      }|s8| dv r4t        j                  t        d      5   t        ||       |  d d d        y  t        ||       | }t        |    }|t        j                  u r<|j                  |   j                         j                         j                         sJ y |j                  |   |k(  j                         j                         sJ y # 1 sw Y   y xY w)Nr	  r-  r  r   r/  r.  r/  r0  r  r1  r  r  rC   r  r  rx   )ro  r  r   r   r   rF   r   rp  rq  r  r%  r   r   r  isnullr'   )r  rD   rI   r4  r5  r$   r  r   s           r   ?test_dataframe_groupby_on_2_categoricals_when_observed_is_falser9    sC    !HI	 f$u+F f$t*E)	

B GOZZ'*XZ>F">26D*>>]]H
 	3 ,GFN+T2	3 	
)'&.
)4
0C<^LH266ww'..0446::<<<(H499;??AAA	3 	s   ,EE%c                  B   g dg dg dd} t        |       }t        j                  |d   t        j                  ddd            }||d	<   |j                  d	d
gddd      }|d   j                  d      }|j                  d      d   }t        j                  ||       y )N)r}   r   r>   rS   r  )rQ   rO   rQ   rO   r  r   r   r~   rV   r   r   TFr  r   rD   r0   )	r   r   r   r   r  rF   r   r   r   )rQ   rI   r  r  r#   r   s         r   3test_series_groupby_categorical_aggregation_getitemr<    s    &6?STA	1B
&&EBKK2q1
2CBwKZZ%(4dUZSFE]v&Fzz&!%(H68,r   zfunc, expected_valuesc                    t        g dg dt        g d      d      j                  d      }|j                  d      j	                  |       }t        d|it        g dd	      
      }t        j                  ||       y )Nr   )r   rS   rS   rT   rT   )r   r   r   r   rS   )idr  r  r>  r  r  r>  rz   r[   )r   r   r  rF   r   r   r   r   )r  rB  rI   r#   r   s        r   $test_groupby_agg_categorical_columnsr?    sw     
!% 1	

 io  ZZ!%%d+F	/"%	*IH &(+r   c                     t        dt        g dg d      i      } t        dddgit        j                  ddg            }| j	                  g d      j                  t        j                        }t        j                  ||       | j	                  g d      j                         }t        j                  ||       y )	Nrd   r  r  r/  rT   rS   r[   r  )
r   r   r   rQ  rF   r   r	   r4   r   r   rI   r   r#   s      r   test_groupby_agg_non_numericrB  4  s    	C_QR	SB#1vbhh1v.>?HZZ	"&&v~~6F&(+ZZ	"**,F&(+r   r  c                 2   t        dgt        dgd      j                  j                         d      }|j	                  d      d   } t        ||              }t        dgt        dgd      d|d   j                  	      }t        j                  ||       y )
Ni  rN   r+  r4  rt  rd   re   rz   r%   rZ   r   )
r   r	   r  
as_orderedrF   r  r   r   r   r   )r  rI   
df_groupedr#   r   s        r   <test_groupby_first_returned_categorical_instead_of_dataframerG  ?  s     
$fcU*&E&I&I&T&T&VW	XBC%J&WZ&(F 	UD6,3bgmmH 68,r   c            	      H   t        j                  ddg      } d| j                  _        t	        g dt        g dt        |             d      }t	        dd	d
git        | d            }|j                  ddd      j                         }t        j                  ||       y )NrS   rT   F)rS   rU   rV   rg   r  r/  rW   r   r   g      @rN   rz   r   r   )r   rQ  flags	writeabler   r   r   r   rF   r0   r   r   )rJ   rI   r   r#   s       r   test_read_only_category_no_sortrK  N  s    88QFD DJJ	\eDk!RS
B sS#J/7GSV7WXHZZ%%Z8==?F&(+r   c                     t        g dg dd      } | d   j                  d      j                  j                  g dd      | d<   t        d	d	d
d	dd
ddd
ddd
d      }|j	                  dd      }t        g dg dddd      |_        | j                  ddgd      j                         j                         }t        j                  ||       y )N)smalllargerN  rN  rd  rN  rN  rd  )rE   rd   rd   rE   rd   rE   rd   rE   )r   r   r   r+  )tinyrM  rd  rN  Tr   r   )rd   rE   rS   rU   rT   r   r%   r   )r   r   rZ   r   FrC   )r   r   r  set_categoriesrename_axisr   rm   rF   r8   ri  r   r   rA  s      r   #test_sorted_missing_category_valuesrR  Z  s    		 <	

B  	5		
		^^@$^O uI !$1%A&1%		
H ##E#8H',7H ZZZ7<<>FFHF&(+r   c                     t        dg di      } | d   j                  d      | d<   | j                  d      j                  j	                         }t        g dt        g dd      d| d   j                        }t        j                  ||       | j                  d      j                  ddi      }|j                         }t        j                  ||       y )	Ncol_numrS   rS   rT   rU   r+  col_catr0  rz   rD  r+   )r   r   rF   rV  r+   r	   r   r   r   r   r   to_framer   r  s      r   1test_agg_cython_category_not_implemented_fallbackrX    s    	I|,	-ByM((4ByMZZ	"**002F II.m!!	H 68,ZZ	"&&	7';<F  "H&(+r   c                  Z   t        g dg dddt        j                  dgg dg dd      } | j                  dd	i      } | j	                  d
dg      j                  d       }t        j                  ddgddggd      }t        ddgddgddgd|      }t        j                  ||       y )N)rS   rS   rS   rS   r  r  g?g333333?)r   r   r   fee)rd   re   numerical_col
object_colcategorical_colr]  r+  rd   re   c                 >    | j                         j                         S ro   )rR  r;   r  s    r   rs   z7test_aggregate_categorical_with_isnan.<locals>.<lambda>  s    2779==? r   rS   rT   rt  r   r   )r[  r\  r]  r   )
r   r   r   r   rF   r   r   r   r   r   r   s       r   %test_aggregate_categorical_with_isnanr_    s    	!346;	

B 
%z2	3BZZc
#''(BCF""QFQF#3:FEVa& !1v

 H &(+r   c                     t        g dg dd      } t        j                  g dd      }| d   j                  |      | d<   d}t	        j
                  t        |	      5  | j                  d
      d   j                  t              | d<   d d d        | j                         }t        g dg dg dd      }|d   j                  |      |d<   |d   j                  |      |d<   t	        j                  ||       y # 1 sw Y   sxY w)N)rS   rS   rS   rT   rT   rU   )WaitingOnTheWay	Deliveredra  rb  ra  )
package_idstatus)ra  rb  rc  Tr   re  zusing SeriesGroupBy.maxrx   rd  last_status)rc  rc  rc  rb  rb  ra  )rd  re  rf  )r   r   CategoricalDtyper   r   r   r   rF   r   r/   r   r   )rI   delivery_status_typer   r#   r   s        r   test_categorical_transformri    s   	,
	

B ..7 h<&&';<BxL
#C		#	#M	= NJJ|4X>HHM=N WWYF,	
H, "(+223GHHX '}5<<=QRH]&(+AN Ns    +C==Dc                 4   t        g d      }g d}t        |||d      }t        ddg      }t        j                  ||gddg      }t	        dt
        j                  t
        j                  dg|d	
      t	        dt
        j                  t
        j                  dg|d	
      d}||    }|r-|j                         j                  t
        j                        }|j                  ddg|      d	   }	 t        |	|              }
t        j                  |
|       y N)r   r   rS   rS   )r   rS   rS   r   r  r   rS   r   rN   r   rO   rz   )r+   r.   rC   )r   r   r   r   r	   r   r   rn  r   r3  rF   r  r   r   )r  rD   r  r  rI   r   r   expected_dictr   srs_grpr#   s              r   Ftest_series_groupby_first_on_categorical_col_grouped_on_2_categoricalsrn    s    
 l
#C
C	3S1	2B1vD

!
!4,sCj
ACBFFBFFA.#>2662661-s=M
 T"H??$++BHH5jj#shj7<G#WWd#%F68,r   c                 J   t        g d      }g d}t        |||d      }t        ddg      }t        j                  ||gddg      }t	        dt
        j                  t
        j                  dg|d	
      t	        dt
        j                  t
        j                  dg|d	
      d}||    j                         }|r-|j                         j                  t
        j                        }|j                  ddg|      }	 t        |	|              }
t        j                  |
|       y rk  )r   r   r   r   r	   r   r   rW  rn  r   r3  rF   r  r   r   )r  rD   r  r  rI   r   r   rl  r   r5  r#   s              r   Btest_df_groupby_first_on_categorical_col_grouped_on_2_categoricalsrp  	  s    
 l
#C
C	3S1	2B1vD

!
!4,sCj
ACBFFBFFA.#>2662661-s=M
 T"++-H??$++BHH5ZZc
XZ6F"WVT"$F&(+r   c                     t        t        g dg d      t        d      d      } | j                  ddd      }|j                  }t        j                  d	d
gd      t        j                  dgd      t        j                  g d      d}|j                         |j                         k(  sJ |j                         D ]  }t        j                  ||   ||            y )N)rN   rN   r   r  r/  rU   )r  r  r  Fr   r   rS   intpr4  rT   )rN   r   rO   )
r   r   r   rF   indicesr   rQ  rA  r   r  )rI   r   r#   r   r  s        r   2test_groupby_categorical_indices_unused_categoriesrt  "  s    	?K8	

B jjUUj;G__FXXq!fF+XXqc(XXb'H
 ;;=HMMO+++{{} @
##F3K#?@r   c                    t        dg di      }|d   j                  d      |d<    t        |j                  d      d   |              }t	        t        g d      dt        g dd            }t        j                  ||       y )Nr   r0  r+  rN   rz   )rZ   r%   )	r   r   r  rF   r	   r   r   r   r   )r  rI   r#   r   s       r   1test_groupby_last_first_preserve_categoricaldtyperv  6  sv     
C#	$BgnnZ(BsG0WRZZ_S)402FISic0JH 8V,r   c            
      N   t        ddgddgddgd      } | j                  ddd      } | j                  d	d
gd      j                         d   }t	        ddgt        j                  t        ddgd	      t        ddgd
      g      d      }t        j                  ||       y )NrS   rT   r}   r{  r  r+  rW   r4  r   rN   TrC   rO   rz   r   )
r   r   rF   r4   r	   r   r   r   r   r   r  s      r   )test_groupby_categorical_observed_nuniquerx  B  s    	!Qq!fB8<	=B	z
;	<BZZc
TZ2::<SAF	
A$$q!f3/1A1a&s1ST
 H 68,r   c            	      b   t        j                  ddgd      } t        ddgddgddggddg	      j                  d| i      }|j	                  d      d   j                         }t        ddgt        ddgd
      dt        j                  ddgd            }t        j                  ||       y )NrM  bigTr   rS   rT   grpdescriptionrl   rz   rD  )
r   rg  r   r   rF   r/   r	   r   r   r   )r   rI   r#   r   s       r   ,test_groupby_categorical_aggregate_functionsr}  Q  s    GU+;TJE	
W5zAw<05-:P
fmU#$  ZZ}-113F	QF'!!gu-=tL	H 68,r   c                 d   t        ddgg d      }t        t        ddgg d      ddgd      }|j                  d| |	      }|j                         }| rt        d
ddgi|      }n!t	        g dg d      }t        d
g di|      }d|j
                  _        t        j                  ||       y )NrS   rT   r0  r/  rU   r>   )rr   ra   rr   )rD   rn  ra   r[   )rU   r>   r   )	r   r   rF   r;   r   r%   rZ   r   r   )rD   rn  r  rI   r   r#   r   r%   s           r   test_groupby_categorical_dropnar  c  s    
q!f
3C	aV	B!QP	QB	C(6	:BVVXFcAq6]#6 I6c9-U;HNN&(+r   
index_kind)r   singlemultic                    |dk(  r4|s2d}| j                  t        j                  j                  |             n|dk7  r|st        j                  d       t        t        g dg d|      t        d	      d
      }|dk(  rdg}	n<|dk(  rdg}	|j                  |	      }n"|dk(  rddg}	|d   |d<   |j                  |	      }t        ||      }
|j                  	|||      }|s8|dv r4t        j                  t        d      5   t        ||      |
  d d d        y  t        ||      |
 }|r&|j                  j                  d      j                   }n|d   j"                  j                   }t%        g d      }t'        j(                  ||       |dk(  r<|j                  j                  d      j                   }t'        j(                  ||       y y # 1 sw Y   y xY w)Nr*   zDGH#49950 - corrwith with as_index=False may not have grouping columnr  r   /Result doesn't have categories, nothing to testrT   rS   rT   rU   rS   r>   rU   rT   r   r>   rW   r   r  r  r9  r;  r  r  rx   )r#  ro  r!  r"  r  r   r   r   r  r   rF   rp  rq  r  r%   r   r   r  r   r   r   )r(  r  r   rD   r  r  r   r   rI   rA  r$   r   	op_resultr#   r   s                  r   test_category_order_reducerr  t  s    #HTFKK--S-9:	w	xLM	\lGTq	

B Wu	x	u\\$	w	T{c74\\$">26D	D8$	JB*>>]]H
 	/ (GB'.	/ 	+N+T2I11#6AA3##..\"H&(+W11$7BB
fh/ 	/ 	s   GGr  r  c                    t        t        g dg d|      t        d      d      }|dk(  rdg}|j                  |      }n"|dk(  rdd	g}|d   |d	<   |j                  |      }t	        ||      }|j                  | ||
      }	|dk(  rt        nd }
d}t        j                  |
|      5   t        |	|      | }d d d        j                  j                  d      j                  }t        g d      }t        j                  ||       |dk(  r<|j                  j                  d	      j                  }t        j                  ||       y y # 1 sw Y   xY w)Nr  r  r   r>   rW   r  r   r  r9  r;  r  z%DataFrameGroupBy.fillna is deprecatedrx   )r   r   r   r  r   rF   r   r   r   r  r%   r   r   r   r   )r  r   rD   transformation_funcr  r   rI   rA  r$   r   warnr   r  r#   r   s                  r   test_category_order_transformerr    sK    
\lGTq	

B Xu\\$	w	T{c74\\$"#6;D	D8$	JB/8;=D
1C		#	#D	4 <4GB 34d;	<__--c2==F\"H&(+W11$7BB
fh/ < <s   +EEmethodheadtailc                 x   t        t        g dg d|      t        d      d      }|dk(  rdg}n<|dk(  rdg}|j                  |      }n"|d	k(  rdd
g}|d   |d
<   |j                  |      }|j	                  | ||      } t        ||             }	|dk(  r|	d   j                  j                  }
n%|	j                  j                  d      j                  }
t        g d      }t        j                  |
|       |d	k(  r<|	j                  j                  d
      j                  }
t        j                  |
|       y y )Nr  r  r   r>   rW   r   r   r  r  r9  r;  )r   r   r   r  rF   r  r  r   r%   r   r   r   r   )r  r   rD   r  r  r   rI   rA  r   r  r#   r   s               r   test_category_order_head_tailr    s/    
\lGTq	

B Wu	x	u\\$	w	T{c74\\$	D8$	JB#F#%IW3##..11#6AA\"H&(+W11$7BB
fh/ r   )rH   r   r   c                 V   |dk(  r|dk(  s| s|dk7  rt        j                  d       t        t        g dg d|      t	        d      d      }|dk(  rd	g}n<|d
k(  rd	g}|j                  |      }n"|dk(  rd	dg}|d	   |d<   |j                  |      }|j                  | ||      }|dk(  r|dk(  rt        nd }	d}
t        j                  |	|
      5   t        ||      d       }d d d        |dk(  s| s|dk(  rd	   j                  j                  }n%j                  j                  d	      j                  }t        g d      }t        j                   ||       |dk(  r<|j                  j                  d      j                  }t        j                   ||       y y # 1 sw Y   xY w)Nr   r   z(No categories in result, nothing to testr  r  r   r>   rW   r   r  r  r9  r;  rH   rw   rx   c                 &    | j                  d      S )NTrh   )r;   rq   s    r   rs   z+test_category_order_apply.<locals>.<lambda>  s    !%%T%2J r   )ro  r  r   r   r   r  rF   r   r   r   r  r  r   r%   r   r   r   )r  r   rD   r  r  r   rI   rA  r   r  r   r  r#   r   s                 r   test_category_order_applyr    s   
 	+*"7w.>?	\lGTq	

B Wu	x	u\\$	w	T{c74\\$	D8$	JB!'7!2zW7LRVD
CC		#	#D	4 L'GB'(JK	L+X:3H3##..11#6AA\"H&(+W11$7BB
fh/ L Ls   FF(c                    |dk7  r| st        j                  d       t        j                  ddd      }t	        g d||      }t        |t        d      d	      }|dk(  rd
g}n<|dk(  rd
g}|j                  |      }n"|dk(  rd
dg}|d
   |d<   |j                  |      }|j                  | |d      }|j                         }	|rg dng d}
t        |
|j                  |d
      }| rAt        d|
i      }|dk(  r't        j                  t        ||d            |_        nF||_        n>|dk(  r"t        t        |      t        |      |
d      }nt        t        |      |
d	      }t!        j"                  |	|       y )Nr   r  r  i'  rZ  r  r   r>   rW   r   r  r  r9  Tr;  )rU   rT   rS   )rT   rS   rU   )r   r   rZ   rN   )r   r9  )r   r9  rN   )ro  r  r   r   r   r   r   r  rF   r;   r   r   r   
from_framer%   r	   r   r   )r  r   r  r   r   grouperrI   rA  r   r#   r   r%   r   s                r   test_many_categoriesr    sn    WXLM4R(J,:wOG	uQx0	1BWu	x	u\\$	w	T{c74\\$	D8$	FBVVXF 9)D++W3E c4[) '2295PU=V3WXHN"HN	w	6%=uDQR6%=t<=&(+r   cat_columnsrA  c                    t        g dg dd      }||    j                  d      || <   d}t        |       t        |      z  rt        nd }t	        j
                  ||      5  |j                  |       d d d        y # 1 sw Y   y xY w)NrU  )r>   rV   r   rg   rW   r+  z+The default of observed=False is deprecatedrx   )r   r   setr   r   r   rF   )r  rA  rI   r   klasss        r   test_groupby_default_deprr  =  sx     
L9	:Bo,,Z8B{O
7C -D	9MtE		#	#E	5 


4  s   "A==Ba1c                    |r-|dk(  r(t        t        d      rJ t        j                  d       n|dk(  r2d}| j	                  t        j
                  j                  |             nJ|dk(  rE|sCt        |      dk7  r5|s3|s1d}| j	                  t        j
                  j                  |             t        g dg d	g d
d      }|j                  ddd      }d|vr|j                  d      }|j                  |||      }|r|d   }t        ||      }	|sD|dv r@|ddgk(  r9t        j                  t        d      5   |j                  |gg|	  d d d        y  |j                  |gg|	 }
 t!        ||      |	 }|r|s|dk(  r|j#                  |      }|s>t%        j&                  |j(                  d d D cg c]  }|df c}d|fgz         |_        n|s||gz   |_        t+        j,                  |
|       y # 1 sw Y   y xY wc c}w )Nr*   z*corrwith not implemented for SeriesGroupByz1GH#32293: attempts to call SeriesGroupBy.corrwithr  r4   rS   zGH#52848 - raises a ValueError)r   r   rS   )rT   rU   rU   r8  )r  r9  rN   r+  )r  r9  r9  rl   r  rN   r  r  r  rx   r8   rZ   )r  r   ro  r  r#  r!  r"  r   r   r   r?  rF   r   rp  rq  r   r  rW  r   from_tuplesrm   r   r@  )r(  r  rD   r  r:  rA  r   rI   r   r$   r#   r   inds                r   test_agg_listr  I  s    ~3=*555@A	:	%AFKK--S-9:)#IN.FKK--S-9:	)99E	FB	*J7	8B4WWTW"	th	BBW">26D*>>4DRV<CW]]H
 	, BFFN#+d+	, 	RVV^$,t,F*wr>*D1H[Nf$<$$^4%11"*"2"23B"783c2Y8S.<Q;RR
 >"22OOFH%%	, 	 9s   ?G><H
>H)hr   numpyr   ro  pandasr   r   r   r   r   r   r	   r
   pandas._testing_testingr   pandas.api.typingr   pandas.tests.groupbyr   r   r&   r%  rK   r   r   r   r!  parametrizer   r  r%  r-  r6  rD  rF  rI  rM  rT  rX  r^  ra  rl  rs  r   renamerx  r  r  r  r  r  r  r  r  r  r  r  r  r   r  NaTr  fixturer  r  r  r   r  r  r  r  r  r  r+  r6  r9  r<  r4   r)   r?  rB  rG  rK  rR  rX  r_  ri  r,  boolrn  rp  rt  rv  rx  r}  r  r  r  r  r  r  r  r  rp   r   r   <module>r     s          + 8 DF66 E"1 
2661 
2661 Q1 1 RVV1 bff1 bff1 BFF1 
2661  BFF!1" bff#1$ 
266%1& 
266'1( q)1* BFF+1, -1. 
266/10 FF666691 -@(dN,<-, T5M2!- 3!-Hk,\,(E*+* 2	j*93?@#J'ic2E)4DE	
 $K( 5 5	
& u6& 7'(&D+*-,( T5M2dE]3$/ 0 4 3@(V,2 -&$ v 
a	!Qq!f56 
a		 	 !4	5aS1v7NO	a	!Qq!f56--90x<1B 	8W%&	(G$%	7#$	7#$	--&"-J-%, T5M2, 3,D T5M2/, 3/,d-8-0,2  ,j,,IZ8)DSRUJ 		
 	<""		
2&32& bffbff'=># ?#  0 ug&67- 8-  ug&67eT]3- 4 8-0  "J""5'A+!3:CPT( 
 5%.1,-
 %	
  #J##$eU^UC$%<eL5%.)
 ' 1aArvvrvvq!D	
 #J##$eU^UC$%<eL5%.)
 ' 1aArvvrvvq!D	
9(+X-Y+X-- 9	!;<, =,,"
#*L17h$4 eT]3'B 4'BT	- nni 6<<";<,	,", '6!23- 4-	,*,Z,,,65,p '6!23-
-- 4-0 '6!23,
,, 4,0@( '6!23- 4---$," 'CDT5M2-0 3 E-0` '':;T5M20 3 <0@ 'CDFF#34T5M20 3 5 E0B 'CD#@AT5M2#0 3 B E#0L 'CD$, E$,N cC:(>?#sS#J!78 9 @ u64&4,!78.& 9 7.&r   