
    Oh#                    R   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ej.                  j1                  d      d        Zd Zd Zd Zej.                  j;                  ddd g      d!        Zej.                  j1                  d      d"        Zd# Z d$ Z!d% Z"ej.                  j;                  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j.                  j;                  d0dd g      d1               Z#d2 Z$d3 Z%d4 Z&ej.                  j;                  ddd g      ej.                  j;                  d5dd g      ej.                  j;                  d6dd g      d7                      Z'd8 Z(d9 Z)d: Z*d; Z+d< Z,ej.                  j;                  d=d>g e e-d?            d d@gdAdBgdCf e e-d?            j]                  dD       dBgd dAgdCf e e-dE            d d@gdAdBgdCfg      dF        Z/dG Z0dH Z1dI Z2ej.                  j;                  dJddKdgfddLdMgfddLdgfddKdMgfg      dN        Z3dO Z4dP Z5dQ Z6ej.                  j;                  ddd g      dR        Z7ej.                  j;                  ddd g      dS        Z8dT Z9dU Z:dV Z;ej.                  j;                  dWd e e
jx                   eg dXdYZ      g d[gd'd+g\      g d)d]^      fd  e eg dXdYZ      g d[g d)d_      fg      d`        Z=ej.                  j;                  dadej(                  ej|                  g      db        Z?ej                  dc        ZAej.                  j;                  dddedfg      dg        ZBej.                  j;                  dddedfg      ej.                  j;                  d5d dg      dh               ZCej.                  j;                  did e
jx                   e	djgd?z  dkgd?z  z   dYdlm       e	g dndYdom       e	ddgd?z        g      g dpfd  e
j                   edjdkgd q       eg drd q       e	ddg      gg ds\      dBdBd?d?ej(                  ej(                  dAdAej(                  ej(                  d@d@gfd e
j                   edjdkgd q       eg drd q       e	ddg      gg ds\      dBdBd?d?ej(                  ej(                  dAdAej(                  ej(                  d@d@gfg      dt        ZEdu ZFej.                  j;                  dvg dwg dxg      dy        ZGdz ZHd{ ZId| ZJd} ZKd~ ZLej.                  j;                  d5d dg      d        ZMej.                  j1                  d      d        ZNej.                  j;                  dej                  g dXfej                  g d[fg      d        ZQd ZRej.                  j;                  dddg      d        ZSd ZTd ZUd ZVd ZWd ZXej.                  j;                  dddg      deYd5eZfd       Z[ej.                  j;                  dddg      deYd5eZfd       Z\d Z]ej.                  j;                  dddg      d        Z^d Z_d Z`d Zaej.                  j;                  dg d      ej.                  j;                  ddd g      d               Zbej.                  j;                  dddg      ej.                  j;                  ddd g      d               Zcej.                  j;                  dg d      ej.                  j;                  dddg      ej.                  j;                  ddd g      d                      Zdej.                  j;                  dg d      ej.                  j;                  dg d      ej.                  j;                  ddd g      d                      Zeej.                  j;                  dg d      d        Zfej.                  j;                  dd'd+d'd+gg      ej.                  j;                  dd'd+d'd+gg      d               Zgej.                  j;                  d0dd g      ej.                  j;                  ddgdd.gg      d               Zhy)    )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     m/var/www/html/diagnosisapp-backend/venv/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varz7ignore:invalid value encountered in cast:RuntimeWarningc                     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_statsJ   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                   t"        |$      5  |j4                  j                  |d      j                  t              }d d d        t        j6                  ||d
          t        j6                  |j4                  j                  |d      j                  d+       |d
          d,}t        j                   t"        |$      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                   t"        |$      5  |j                  t8              }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        j6                  |j4                  j                  |d      j?                  t        j@                        |d
          t        j                  |j                  |d      j?                  t        j@                        |       t        d
g d2i      }t1        j2                  |j4                  g d3)      }d*}t        j                   t"        |$      5  |j4                  j                  |d      j                  t              }d d d        t        j6                  ||d
          t        j6                  |j4                  j                  |d      j                  d4       |d
          d,}t        j                   t"        |$      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%                  tB              }t        |jD                  jF                  |jD                  jH                  9      }t        g d6|      }d
|j*                  _%        t        j6                  ||       g d:}t        jL                  jO                  d      jQ                  d!dd;<      }t        jR                  ||d9      }t        t        jL                  jO                  d      jU                  d=            }|j                  |d      j                         }|j                  t	        jV                  |      d      j                         }t        ||jF                  d      }
|jY                  |
      }t        j                  ||       |j                  |d      }|j[                         }|j\                  j_                         }t	        jV                  |      ja                  |      }|ja                  |      }t        |dg d:>      }|j                  |dd?      j[                         }t        j                  ||       t        jR                  t	        jb                  d      je                  d@      |d9      }t        |      }t        jf                  |ji                  dA      j*                  jk                  d!      |       t)        g dBdz        }t        jf                  |ji                  dA      j*                  jk                  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>v   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   str)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/   )6r   r   r   listr   nanrF   r0   tmassert_frame_equalr	   r;   rk   	transformru   rv   assert_produces_warningFutureWarningrH   copyr   r%   objectastypepdcutr   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   V   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		#	#M	= vvq!f~""$HAq64HN'EVE&}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>A  s    RWWQQ%7 r   zusing DataFrameGroupBy.meanrx   rS   r[   rw   c                      yNrS   rp   rq   s    r   rs   ztest_apply.<locals>.<lambda>R  s    r   )r   r   r   r   r   r   rF   r   r   rH   r   r   r0   r   r   aggr	   r   )
r   r   r   rf   rI   r   r   r   r#   r   s
             r   
test_applyr   1  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		#	#M	= ,{+,68,& &, ,s   	 F>G
>G
Gc                    |r1|s/| j                  t        j                  j                  d             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(  |j0                  |k(  z     }t        j                  |	|       R g d0g d1g d2d3}
t        |
      }t3        j4                  |d   t7        j8                  dd4d5            }||d6<   |j                  d6d7gd8|9      }|j'                  d*      }	|j                  d6d7gd|9      }|j'                  d*      j;                         }t        j                  |	|       y ):NzTODO(infer_string)reasonr\   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   )applymarkerpytestmarkxfailr   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)requestr   rD   r   r   rI   r   r   r   r#   rQ   groups_single_keyr%   groups_double_keykeyrO   ir  groupsgroups2s                       r   test_observedr$  V  s    (FKK--5I-JK+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  r0  r1  TrC   rS   )r   r   r   r   r   r  r   r{   rF   r)   r%   r   r4   r0  r1  )rI   r   r#   s      r   test_observed_perfr3    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_groupsr<    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   r6  rz   rN   )	rg   r   r   r   r   r=  r   r   r   r>   rV   r   a2)	r|   r   r   r   r=  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   r6  r5  r>  )rg   r   r=  )r   r?  rN   rO   r   r?  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_indexrJ    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   r5  r6  r7  r  rC   r   rT   r9  r:  )	r   r   r   r   rF   r"  r   r   r;  )rD   rI   r   r#   r   s        r   test_observed_groups_with_nanrL  =  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  r5  r6  )r  serr  FrC   rN  r   )
r   r   r   r	   r   rF   r3   rv   r   r   )r  rN  rI   r#   r   s        r   test_observed_nthrO  R  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  r5  rb   )s1s2rQ  rC   rT   )
r   r   r   r	   r   rF   r+   r  r   r   )rD   rQ  rR  rI   r#   r   s         r   #test_dataframe_categorical_with_nanrS  ]  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	  rU  )rD   r   r	  r+   r   r:  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   rU  r	  rI   r#   aggrr   s	            r   0test_dataframe_categorical_ordered_observed_sortrZ  q  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_datetimer^    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_indexrd    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_columnsrg    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artistrj  r2  rk  FrC   r   r   rZ   r   r>   XYrz   r[   )r   r   r   r   rF   r)   unstackr   r   r   r   rm   rf  rf   r	   r   r   )rI   gcatr#   exp_columnsr   s        r   test_unstack_categoricalrr    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   r  raises
ValueErrorrF   r0   )seriesr   s     r   test_bins_unequal_lenrx    s    RVVRVVQ1aAq!<=F66&--/((!,D 
z)O	P $t!!#$ $ $s   ; B$$B-rw  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ABBAr2  r:  FrC   r[   )rF   r	   r   rV  r   rG  r   r   )rw  r   rF   r#   r   s        r   test_categorical_seriesr}    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   r6  )r~      r  )e   f   g   )r  rd   re   r  rd   FTr  rS   rT   r5  r~   r  r     rl   c                 &    j                   | df   S )Nrd   )loc)rrI   s    r   rs   ztest_as_index.<locals>.<lambda>0  s    "&&C. r   z*A grouping .* was excluded from the resultrx   r   )r   rN   rN   rz   )Nrm  re   r   )r   r   rF   r;   r  r   r   r   r   r   r	   r   r   r%   )r#   r   r   r   rc  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   rl  bacFr   )	r   r   r   r   r   r   rF   r+   r%   )r   rI   r"   nosort_indexs       r   test_preserve_categoriesr  W  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  u  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   )r`  r`  r  )payloadr  r  r  r`  r:  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   r=  rC  rD  Tr   FrC   r   )	r   r   r   rS   rS   rS   rU   rU   rU   ra  rM   rP   rR   rW   rN   r   rS   r>   )r	   r   r   r   r   rW  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  testry  rd   re   r  r  r5  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  r5  rS   rT   rS   ry  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  Q  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  r5  r  ry  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  m  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   )freqr\  r=  )key1key2rf   r  r  FrC   r  r   rf   r   r>   r   rV   r   rT   r[   )r   r   r   r   r]  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, expectedrB  r2  r:  r  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 )NrB  r2  r:  r  r6  r  r   rN   Tr  rr   )r   r	   rF   r;   r   rF  )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   rF  )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   r2  re   rb   rE   rG   rS   r   )r   r   r	   rE  )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>B  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  G  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   )r`  r  )rV   r   rg   r   r  r   r5  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  N  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  ^  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 )Nr`  r<   vaur  )r   rv   )rowss    r   rs   z/test_get_nonexistent_category.<locals>.<lambda>t  s3    2u-.		"e8L7MN r   )r   r   r  ru  KeyErrorrF   rH   rI   s    r   test_get_nonexistent_categoryr  o  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ABCDr5  r  rT   皙?r>   cat_1cat_2r  r  r  r  rC   r  r*   r-   r,   (empty group due to unobserved categoriesrx   )r  skipr   r   r   r   rF   hasattrr  ru  rv  r   )reduction_funcrD   rI   r$   expected_lengthseries_groupbyr   r#   s           r   0test_series_groupby_on_2_categoricals_unobservedr  z  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 32293r   r  r  r5  r  rT   r  r>   r  ACBCCACBCCr  r  FrC   r  r  r  rx   r   r;   )r  r  r  r  r  r   r   r   tupler   rF   r  ru  rv  -_results_for_groupbys_with_missing_categoriesr  r   rX  r   
issubdtyper   integer)r  r  r  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  r5  111112r  r  r  r  r  )rd   2)re   r1  )rE   1)rE   r1  r  r  TrC   )	r  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_truer5    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  r5  r-  r.  r/  r  r0  r  r  rC   r  r  rx   )r  r  r   r   r   rF   r   ru  rv  r  r%  r   r   r  isnullr'   )r  rD   rI   r3  r4  r$   r  r   s           r   ?test_dataframe_groupby_on_2_categoricals_when_observed_is_falser8    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  rD  rz   r[   )r   r   r  rF   r   r   r   r   )r  rH  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  r5  rT   rS   r[   r  )
r   r   r   rW  rF   r   r	   r4   r   r   rI   r   r#   s      r   test_groupby_agg_non_numericrA  ;  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   r2  r:  ry  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_dataframerF  F  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  r5  rW   r   r   g      @rN   rz   r   r   )r   rW  flags	writeabler   r   r   r   rF   r0   r   r   )rJ   rI   r   r#   s       r   test_read_only_category_no_sortrJ  U  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largerM  rM  rj  rM  rM  rj  )rE   rd   rd   rE   rd   rE   rd   rE   )r   r   r   r2  )tinyrL  rj  rM  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   ro  r   r   r@  s      r   #test_sorted_missing_category_valuesrQ  a  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   r2  col_catr6  rz   rC  r+   )r   r   rF   rU  r+   r	   r   r   r   r   r   to_framer   r  s      r   1test_agg_cython_category_not_implemented_fallbackrW    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\  r2  rd   re   c                 >    | j                         j                         S ro   )rX  r;   r  s    r   rs   z7test_aggregate_categorical_with_isnan.<locals>.<lambda>  s    2779==? r   rS   rT   ry  r   r   )rZ  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	Deliveredr`  ra  r`  )
package_idstatus)r`  ra  rb  Tr   rd  zusing SeriesGroupBy.maxrx   rc  last_status)rb  rb  rb  ra  ra  r`  )rc  rd  re  )r   r   CategoricalDtyper   r   r   r   rF   r   r/   r   r   )rI   delivery_status_typer   r#   r   s        r   test_categorical_transformrh    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   rt  r   r9  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_categoricalsrm    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 rj  )r   r   r   r   r	   r   r   rV  rt  r   r9  rF   r  r   r   )r  rD   r  r	  rI   r   r   rk  r   r4  r#   s              r   Btest_df_groupby_first_on_categorical_col_grouped_on_2_categoricalsro    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  r5  rU   )r   r  r   Fr   r   rS   intpr:  rT   )rN   r   rO   )
r   r   r   rF   indicesr   rW  rG  r   r  )rI   r   r#   r   r   s        r   2test_groupby_categorical_indices_unused_categoriesrs  )  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   r6  r2  rN   rz   )rZ   r%   )	r   r   r  rF   r	   r   r   r   r   )r  rI   r#   r   s       r   1test_groupby_last_first_preserve_categoricaldtyperu  =  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  r2  rW   r:  r   rN   TrC   rO   rz   r   )
r   r   rF   r4   r	   r   r   r   r   r   r  s      r   )test_groupby_categorical_observed_nuniquerw  I  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 )NrL  bigTr   rS   rT   grpdescriptionrl   rz   rC  )
r   rf  r   r   rF   r/   r	   r   r   r   )r   rI   r#   r   s       r   ,test_groupby_categorical_aggregate_functionsr|  X  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   r6  r5  rU   r>   )rr   ra   rr   )rD   rt  ra   r[   )rU   r>   r   )	r   r   rF   r;   r   r%   rZ   r   r   )rD   rt  r  rI   r   r#   r   r%   s           r   test_groupby_categorical_dropnar~  j  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  r?  r:  r  r  rx   )r  r  r  r  r  r   r   r   r  r   rF   ru  rv  r  r%   r   r   r  r   r   r   )r  r  r   rD   r  r  r   r   rI   rG  r$   r   	op_resultr#   r   s                  r   test_category_order_reducerr  {  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  r?  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   rG  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  r?  r:  )r   r   r   r  rF   r  r  r   r%   r   r   r   r   )r  r   rD   r  r  r   rI   rG  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  r?  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   )r  r  r   r   r   r  rF   r   r   r   r  r  r   r%   r   r   r   )r  r   rD   r  r  r   rI   rG  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"g-*2G=TD
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'  r`  r  r   r>   rW   r   r  r  r?  Tr:  )rU   rT   rS   )rT   rS   rU   )r   r   rZ   rN   )r   r?  )r   r?  rN   )r  r  r   r   r   r   r   r  rF   r;   r   r   r   
from_framer%   r	   r   r   )r  r   r  r   r   grouperrI   rG  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_columnsrG  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)NrT  )r>   rV   r   rg   rW   r2  z+The default of observed=False is deprecatedrx   )r   r   setr   r   r   rF   )r  rG  rI   r   klasss        r   test_groupby_default_deprr  D  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   r>  )r  r?  rN   r2  )r  r?  r?  rl   r  rN   r  r  r  rx   r8   r`   )r  r   r  r  r  r  r  r   r   r   rE  rF   r   ru  rv  r   r  rV  r   from_tuplesrm   r   rF  )r  r  rD   r  r@  rG  r   rI   r   r$   r#   r   inds                r   test_agg_listr  P  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)ir   numpyr   r  pandasr   r   r   r   r   r   r	   r
   pandas._testing_testingr   pandas.api.typingr   pandas.tests.groupbyr   r   r&   r%  r  filterwarningsrK   r   r   r   parametrizer   r$  r,  r3  r<  rJ  rL  rO  rS  rZ  r^  rd  rg  rr  rx  r   renamer}  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*  r5  r8  r;  r4   r)   r>  rA  rF  rJ  rQ  rW  r^  rh  r{   boolrm  ro  rs  ru  rw  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 -@ UV( W(dN,<-, T5M2!- 3!-H UVo, Wo,d,(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 UV	- W	- 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   