
    .i                       d dl m Z  d dlZd dlZd dlmZ d dlZd dlmZm	Z	m
Z
mZmZmZmZ d dlmZ d dlmZ d dlmZ ej,                  fdZi dd	d
d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ddej,                  dej,                  d ej,                  ej,                  ej,                  d ej,                  dZd Zd Zd Zd  Zd! Zd" Zd# Zd$ Z d% Z!d& Z"ejF                  jI                  d'd	dg      d(        Z%d) Z&d* Z'd+ Z(d, Z)d- Z*d. Z+d/ Z,d0 Z-ejF                  jI                  d1d2g d3 e	g d4d25      fd2d6gg d7 e	g d4d25       eg d8      gfd2d9gg d: e	g d4d25       e	g d4d25      gfg      ejF                  jI                  d;d	dg      d<               Z.d= Z/d> Z0d? Z1ejF                  jI                  d'd	dg      d@        Z2dA Z3dB Z4dC Z5dD Z6dE Z7ejF                  jI                  dFdGg e e8dH            d dIgddJgdKf e e8dH            js                  dL       dJgd dgdKf e e8dM            d dIgddJgdKfg      dN        Z:dO Z;dP Z<dQ Z=ejF                  jI                  dRdSdTg      dU        Z>ejF                  jI                  dVddWdgfddXdYgfddXdgfddWdYgfg      dZ        Z?d[ Z@d\ ZAd] ZBd^ ZCejF                  jI                  d'd	dg      d_        ZDejF                  jI                  d'd	dg      d`        ZEda ZFdb ZGdc ZHejF                  jI                  ddd	 e ej                   eg dedfg      g dhgd2d6gi      g d4djk      fd e
 eg dedfg      g dhg d4dl      fg      dm        ZJejF                  jI                  dndej,                  ej                  g      do        ZLej                  dp        ZNejF                  jI                  dqdrdsg      dt        ZOejF                  jI                  dqdrdsg      ejF                  jI                  duddg      dv               ZPejF                  jI                  dwd	 ej                   edxgdHz  dygdHz  z   dfdz{       eg d|dfd}{       eddgdHz        g      g d~fd ej                   e	dxdygd       e	g dd       eddg      gg di      dJdJdHdHej,                  ej,                  ddej,                  ej,                  dIdIgfd ej                   e	dxdygd       e	g dd       eddg      gg di      dJdJdHdHej,                  ej,                  ddej,                  ej,                  dIdIgfg      d        ZRd ZSd ZTd ZUd ZVd ZWd ZXejF                  jI                  duddg      d        ZYd ZZejF                  jI                  dej                  g defej                  g dhfg      d        Z]d Z^ejF                  jI                  dddg      d        Z_d Z`d Zad Zbd Zcd ZdejF                  jI                  dddg      deedueffd       ZgejF                  jI                  dddg      deedueffd       Zhd ZiejF                  jI                  dddg      d        Zjd Zkd Zld ZmejF                  jI                  dg d      ejF                  jI                  d'd	dg      d               ZnejF                  jI                  dddg      ejF                  jI                  d'd	dg      d               ZoejF                  jI                  dg d      ejF                  jI                  dddg      ejF                  jI                  d'd	dg      d                      ZpejF                  jI                  dg d      ejF                  jI                  dg d      ejF                  jI                  d'd	dg      d                      ZqejF                  jI                  dg d      d        ZrejF                  jI                  d;d	dg      ejF                  jI                  ddgdd9gg      d               Zsd Zty)    )datetimeN)Pandas4Warning)CategoricalCategoricalIndex	DataFrameIndex
MultiIndexSeriesqcut)SeriesGroupBy)get_groupby_method_argsc                 @   d }t        j                  t        ||      |      }t        |t              rJi }| j
                  D ]  }| |   j                  |||         ||<     t        ||      j                         S | 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     c/var/www/app/trading-bot/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index)	r	   from_productmapr   dictcolumnsreindexr   
sort_index)resultargsr   r   r   r!   rescols           r   cartesian_product_for_groupersr,      s    
 ##C4L>E*d# >> 	NCc{**5Z_*MCH	NE*5577>>%J>7BBDDr   allTanyFcountcorrwithfirstidxmaxidxminlastmaxmeanmedianminnthnuniqueprod   quantilesem)sizeskewkurt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r8   r5   r/   r6   rH   )groups    r   	get_statsz2test_apply_use_categorical_name.<locals>.get_statsT   s0    99;99;[[]JJL	
 	
r   Fobservedr   C)r   rM   groupbyDapplyr!   r   )dfcatsrJ   r(   s       r   test_apply_use_categorical_namerS   Q   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                  ||       y )N	r   r   r   brV   rV   crW   rW   r   rV   rW   dTr   	r<   r<   r<      r[   r[      rF      r   rV   abcdrV   namer   r   r<   r[   rF   r    FrK   )
r   r   r   listr   nanrN   r6   tmassert_frame_equal)rR   data	exp_indexexpectedr(   s        r   
test_basicri   `   s    5'D
 6TBCD fCFI#1a01CH\\#\.335F&(+r   c                  8   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                  ||       y )Nr   r   rV   rV   r   rV   zTr   rW   rY   rW   rY   rW   rY   yr<   r[   r\   rF   ABvaluesrs   FrK   r`   ru   )r\      r   r    numeric_only)r   r   rN   r   r
   rC   rd   re   )cat1cat2rQ   gbexp_idxrh   r(   s          r   test_basic_single_grouperr}   n   s    +QUVD+QUVD	DLA	BB	C%	(BS$GG(F9G$DEFHVVV&F&(+r   c                 <   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 }|j                  |      }|dg   j                  ddg   }t        ddgd      |_        | rdnt        }|d   j                  |      |d<   t        j                  ||       y )Nr<   zJohn P. Doer[   z	Jane Dove	person_idperson_namer%   FrK   c                     | S N xs    r   <lambda>z#test_basic_string.<locals>.<lambda>   s    1 r   r   c                 >    | j                  d      j                  d   S )Nr   r   )drop_duplicatesilocr   s    r   r   ztest_basic_string.<locals>.f   s      /44Q77r   ra   str)r   r   r   rN   	transformrd   re   r   r   rP   r   r!   objectastype)using_infer_stringr   gr(   rh   r   dtypes          r   test_basic_stringr   z   s    
]	a-=/ABm,	A #1==1Am			;-%	0A[[%F&!]O"45}-Fvvq!f~H&(+8 WWQZF-!&&1v.HAq64HN'EVE&}5<<UCH]&(+r   c                  J   t        dg di      } t        j                  | j                  g d      }| j                  j	                  |d      j                  t              }t        j                  || d          t        j                  | j                  j	                  |d      j                  d       | d          | j	                  |d      j                  t              }| dg   }t        j                  ||       | j	                  |d      }|j                  d       }t        j                  || dg          |j                  d	       }|j                  t              }|j                  t        j                  j                        }|j                  d
       }t        j                  || dg   d       t        j                  || dg   d       t        j                  || dg          t        j                  || dg          t        j                  | j                  j	                  |d      j                  t        j                        | d          t        j                  | j	                  |d      j                  t        j                        |        y )Nr   )r]         )r   
         (   binsFrK   c                 ,    t        j                  |       S r   r   rC   xss    r   r   z&test_basic_monotonic.<locals>.<lambda>       RVVBZ r   c                 0    t        j                  | d      S Nr   axisr   r5   r   s    r   r   z&test_basic_monotonic.<locals>.<lambda>   s    bffRa&8 r   c                 0    t        j                  | d      S r   r   r   s    r   r   z&test_basic_monotonic.<locals>.<lambda>   s    rvvbq'9 r   c                 @    t         j                  j                  |       S r   )r   maximumreducer   s    r   r   z&test_basic_monotonic.<locals>.<lambda>   s    rzz'8'8'< r   )check_dtype)r   pdcutr   rN   r   rC   rd   assert_series_equalre   r5   r   r   r   filterr-   )	rQ   rW   r(   rh   gbcresult2result3result4result5s	            r   test_basic_monotonicr      s   	C%	&B
rtt-.ATT\\!e\,66s;F62c7+
Q'112GH"S' ZZEZ*44S9F3%yH&(+
**Q*
'C]]89F&"cU),mm9:GmmC GmmBJJ--.Gmm<=G'2se9%@'2se9%@'2se9-'2se9- 244<<E<:AA"&&I2c7S"**Q*7>>rvvFKr   c                  |   t        dg di      } t        j                  | j                  g d      }| j                  j	                  |d      j                  t              }t        j                  || d          t        j                  | j                  j	                  |d      j                  d       | d          | j	                  |d      j                  t              }| dg   }t        j                  ||       t        j                  | j	                  |d      j                  d       | dg          y )	Nr   )r]   r   r   )ir   r   r   r   r   r   FrK   c                 ,    t        j                  |       S r   r   r   s    r   r   z*test_basic_non_monotonic.<locals>.<lambda>   r   r   c                 ,    t        j                  |       S r   r   r   s    r   r   z*test_basic_non_monotonic.<locals>.<lambda>   s    266": r   )
r   r   r   r   rN   r   rC   rd   r   re   )rQ   rW   r(   rh   s       r   test_basic_non_monotonicr      s    	C)	*B
rtt23ATT\\!e\,66s;F62c7+
Q'112GH"S' ZZEZ*44S9F3%yH&(+


1u
%//0EFC5	r   c            	         t        dg di      } t        j                  | j                  g dt	        t        d                  }| j                  |d      j                  t              }t        |j                  j                  |j                  j                        }t        g d|	      }d|j                  _        t!        j"                  ||       y )
Nr   )r<   r   r   r   r   r<   r[   r\   rF   r_   )labelsFrK   r   r    )r   r   r   r   r   rb   rN   rP   r   r   ru   r   r   r
   r!   ra   rd   r   )rQ   rW   r(   rg   rh   s        r   test_basic_cut_groupingr      s    	C&	'B
rtt_[f-FGAZZEZ*005F !4!4ahh>N>NOIl)4HHNN68,r   c                  F   g 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                         }t        | |j                  d      }|j                  |      }t        j                  ||       |j                  |d
      }|j!                         }|j"                  j%                         }	t        j                  |      j'                  |	      }
|j'                  |	      }t	        |
dg d      }|j                  |d
d
      j!                         }t        j                  ||       t	        j
                  t        j(                  d      j+                  d      | d      }t        |      }t        j,                  |j/                         j0                  j3                  d      |       t5        g ddz        }t        j,                  |j/                         j0                  j3                  d      |       y )Nfoobarbazquxr[   r   rF   r   r?   Tr   r   rF   FrK   r   )r   r   sortrL      r/   r6   rB   r8   z25%z50%z75%r5   r<   )r   randomdefault_rngintegersr   r   r   standard_normalrN   r6   asarrayr   r   r&   rd   re   describecodesargsorttaker   repeatassert_index_equalstackr!   get_level_valuesr   )levelsr   rR   rf   r(   rh   r|   groupeddesc_resultidx
ord_labelsord_dataexp_catsexpcexps                  r   test_more_basicr      s	   )FII!!!$--a-<E!!%>DRYY**1-==gFGD\\$\/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M
KaO
PC+++-33DDQGMr   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            }|j                  d      }t        j                  ||       y )Nr[      r   rV   r   r   r]   r<   Index1Index2)r   r   r   rf   r!   levelrL      )r   )
r   r   r   r	   r   rangerN   	get_grouprd   re   )rL   rQ   r   rh   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 [[ F&(+r   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 )Nrs      rt   )highmedlowrF   g      (@)rI   doseoutcomes)r   r   r   Tr   rI   r   r   )r   sort_remaining)r   r   r   r   r   r   )rs   rs   rs   rt   rt   rt   r   r[   r/   r!   ra   )r   r   r   r   r   rN   value_countsr'   r   r	   from_arraysr
   rd   r   rQ   r(   r!   rh   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   c                    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                  ||       |j                  t        j                        }t        j                  ||       t        j                  ||gdd	g      }t        d|      }|j                  d       }t        j                  ||       y )Nabcr   aaar   rV   r   )missingdenseru   r   r   TrK   r   )r   r<          @ru   )r!   r%   c                 0    t        j                  | d      S r   )r   r6   r   s    r   r   ztest_apply.<locals>.<lambda>:  s    RWWQQ%7 r   r<   r    c                      yNr<   r   r   s    r   r   ztest_apply.<locals>.<lambda>F  s    r   )r   rb   r   r   r   r   rN   r	   r   rP   rd   re   r6   aggr
   r   )	r   r   r   ru   rQ   r   r   rh   r(   s	            r   
test_applyr  *  s8    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&(+[[!F&(+ 
 
 '5!1)W9M
NCas#H]];'F68,r   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      |rdddnd      }t        j                  ||       y )Nrk   rl   Tr   rn   ro   rq   rr   r   r   r[   rM   )rs   rt   rM   rK   r   ru   r    ABCr   r   rs   rt   )r   r   r   r   )ru   rM   AB )r   r   rN   r	   r   r
   r'   rC   r,   rb   rd   re   )	rL   r   ry   rz   rQ   r{   rg   rh   r(   s	            r   test_observedr
  J  sq    +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4LJ1C!"-	
 &(+r   c                    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                  ||       y )Nr   rV   r   rV   r   rV   rW   Tr   r<   r<   r[   r[   r   r   r   r   catintsvalr  rK   abr   )ra   r   r   g      ?      4@r   )r  r  r    )	r   r   rN   r6   r   rb   r&   rd   re   )rL   rY   rQ   groups_single_keyr(   rg   rh   r!   s           r   test_observed_single_columnr  v  s      _d
 	A 
1B

58
<##%F T
4;I 3*dBZ@	RH KeUT
 ##E*&(+r   c                 *   t        g dg dd      g dg dd}t        |      }|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 y )Nr  r  Tr   r  r  r  r  r  rK   r6   )      $@g      >@r  g      D@rk   r<   r[   r<   r[   )r  r  r  r<   r[   ))r   r<   )rV   r[   )rV   r<   )r   r[   )r   r   rN   r  	set_indexr,   r  ru   rd   re   r   r  )	rL   rY   rQ   groups_double_keyr(   rh   keyrW   is	            r   test_observed_two_columnsr    s#     _d
 	A 
1B

E6?X
F""6*F+$$ !	
 i   1rvv}}q!f-v
 &(+ 8 01",,S1rvv{rww!|45
fh/	0r   c                 |   g dg dg dd}t        |      }t        j                  |d   t        j                  ddd            }||d	<   |j                  d	d
gd|       }|j                  d      }|j                  d	d
gd|       }|j                  d      j                         }t        j                  ||       y )N)r   r   rF   r   rF   r<   r<   r   r   r   r   2   <   F   )rY   rW   er   r   rY   rW   r   r   r   r   r   r   r\   r   r   Fas_indexrL   r6   T)
r   r   r   r   linspacerN   r  reset_indexrd   re   )rL   rY   rQ   r  groupsr(   groups2rh   s           r   test_observed_with_as_indexr-    s     &+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)r\   r\   rF   r]   rq   )r   d      "   )C1C2C3r2  )r<   r[   r\   r   r  r3  rK   r   )      @r5  g      @g      @)r  g      Y@g      i@g      A@)r2  r4  r    r6   )r   r   r   ra   rN   r	   r   r,   ru   r  rd   re   )rL   rY   rQ   ru   r  r   rh   r(   s           r   test_observed_codes_remapr6    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 )Nr[   r      i0u  r   '  )r  int_idother_idr   categoryr  )r  r:  r;  TrK   r<   )r   r   r   r   r   r  r   r   rN   r/   r!   r   r:   r:  r;  )rQ   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   rW   r   r  r   r<   r[   r\   r  valsr  rK   r   r[   int64r   r<   )r   rW   )r   r   rN   r+  r   rd   assert_dict_equal)rL   r  rQ   r   r(   rh   s         r   test_observed_groupsrF    s     o/
BC	3	2	3B


58
,AXXF1vW5E1#W<UV 1vW-r)s'*
 *r   c           	         t        dt        dt        j                  dgt	        d            it	        d            }|j                  d||       }|j                  }dt        dd	g      i}| s|t        j                  t        d
g      iz  }|s|t        g       t        g       dz  }t        j                  ||       y )Nr  r   adbr?  xyzr    rL   dropnar   rm   rp   )rV   rY   )
r   r   r   rc   rb   rN   r+  r   rd   rE  )rK  rL   rQ   r   r(   rh   s         r   test_groups_na_categoryrL    s    		S"&&#.4;GH5k
B 	

58F
;AXXFUC:&'HRVVUC5\**%)%)44*r   z,keys, expected_values, expected_index_levelsr   )r   	   r   r@  r   rV   )	rv   r   r   r   r   rM  r   r   r   rF   r]   r   a2)	r   r   r   r   rM  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r<   r<   r[   r@  r?  rN  )rv   r   rM  )r   rO  rV   rW   r   rO  rV   r   FrK   rW   r<   	r   r   r   r<   r<   r<   r[   r[   r[   r\   r   r<   r[   )r   r   r    )
r   r   r  droprN   rC   r   r	   rd   assert_equal)
keysexpected_valuesexpected_index_levelsrP  rQ   r{   r(   r!   r   rh   s
             r   test_unobserved_in_indexrZ    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   rV   rY   r?  r@  rA  r  rK   r   r[   rC  rD  )	r   r   r   rc   rN   r+  r   rd   rE  )rL   rQ   r   r(   rh   s        r   test_observed_groups_with_nanr\  M  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?  r@  )r  serr  FrK   r^  r   )
r   r   rc   r
   r   rN   r9   r   rd   r   )r  r^  rQ   r(   rh   s        r   test_observed_nthr_  b  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?  rq   )s1s2ra  rK   r[   )
r   r   rc   r
   r   rN   r1   r*  rd   re   )rL   ra  rb  rQ   r(   rh   s         r   #test_dataframe_categorical_with_nanrc  m  s    	bffc2663/O	LB		B	"B'	(BZZxZ0668DDFFuA!M
 !/oN"&&"&&)
 &(+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| }t        j                  |       y y )N)rY   r   rV   r   rY   rV   )r   rV   r   rY   r   )labelr  re  rL   r   r  r1   r   rD  r   zDLabels and aggregation results not consistently sorted
for (ordered=z, observed=z, sort=z
)
Result:
)r   r
   r   rN   	aggregater!   arrayisnar-   pytestfail)	r   rL   r   re  r  rQ   r(   aggrmsgs	            r   0test_dataframe_categorical_ordered_observed_sortrn    s     &-E
 /
0C	U3/	0B ZZ(Z>uEOOPWXF 6<<%%X6E&,,D%TYY[u}#9Kz Gx! 	
 	C 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                         j                  j/                  d      |       t7        g ddz        }t!        j,                  |j5                         j                  j/                  d      |       y )Nz
2014-01-01rF   )periodsr[   r   r   r   Tr   r   FrK   r   r   r   r<   )r   
date_ranger   r   r   r   r   r   r   r   rN   r6   r   r&   r   r!   rd   re   r   r   r   r   r   r   r   r   r   r   )r   r   rR   rf   r(   rh   r   r   r   r   r   r   r   s                r   test_datetimerr    sJ   ]]<3FII!!!$--a-<E!!%>DRYY**1-==gFGD\\$\/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;,,.44EEaH3O
KaO
PC;,,.44EEaH3Or   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 )Nr[   r   r   rF   r   r   Tr   r_   r   rR   Fr   rK   r   r<   r[   r\   r   )r   r   r   r   r   r   r   r   r   reshaperb   r  rN   rC   r   r   r!   rd   re   )sr   r   rR   rQ   r(   rh   s          r   test_categorical_indexrx    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                         j                  |        t        j                  |j                         j                  j                  | j                         y )
N)r   r   r   r   r   Tr   r[   )r   rF   r   rq   r]   )r   r   r   r   r   r   rN   r   rd   r   r   r%   assert_categorical_equalru   )rR   rQ   r(   s      r   !test_describe_categorical_columnsr{    s    $/D
 
299((+;;GDd	SBZZq()224F&,,.00$7 6 6 = =t{{Kr   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   rs   rt   r]   XYXXYr[   )r   mediumartistr~  r<  r  FrK   r   r   ra   r   rF   XYr   r    )r   r   rb   r   rN   r/   unstackr   r   rd   r   r%   rz  ru   r
   r   r   )rQ   gcatr(   exp_columnsrh   s        r   test_unstack_categoricalr    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)Nr<   r[   r\   rF   z$Grouper and axis must be same lengthmatch)r
   r   rc   r   r   rK  ru   rj  raises
ValueErrorrN   r6   )seriesr   s     r   test_bins_unequal_lenr    s    RVVRVVQ1aAq!<=F66&--/((!,D 
z)O	P $t!!#$ $ $s   ; B$$B-r  rf   rF   r\   r[   rs   rt   c                     | dz   S r  r   )r   s    r   r   r     s
    S1W r   rv   c                     | j                  t        t        d      d      d      }|j                  t              }t        |t	        |j                                     }t        j                  ||       y )NABBAr<  rD  FrK   r    )rN   r
   rb   rg  r   rW  rd   r   )r  rf   rN   r(   rh   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}j                  d|gdd	
      j                         } t        t        ddgj                  j                  j
                        ddgddgddgd      }t        j                  | |       t        g dd      }j                  d|gdd	
      j                         } t        ddgddgddg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 )Nr<   r[   r[   r@  )r      r  )e   f   g   )r  rs   rt   r  rs   FTr'  r<   r[   r?  r   r  r     r   c                 &    j                   | df   S )Nrs   )loc)rrQ   s    r   r   ztest_as_index.<locals>.<lambda>8  s    "&&C. r   r   )r  level_1rs   rt   )r   rV   rV   r   r   rV   )Nr  rt   r   )r   r   rN   rC   r  r   rd   re   r
   r   rb   r!   )r(   rh   r   rw  group_columnsra   rQ   s         @r   test_as_indexr  #  s   	y)4 	

B ZZutZDHHJF1v"&&**2G2GHbs	

 "H &(+ 	!AZZ
UTZBFFHF1v"&&**2G2GHBxbs		
H &(+ 	U+AZZ
UTZBFFHF:bs	
H &(+ CLM1v"&&**2G2GHbs	

 "H ! 0e40MEDIMMO
fh/	0r   c                     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                  |       y )
Nr   rs   baTr   r  bacFr   	rb   r   r   r   rd   r   rN   r1   r!   r   rQ   r'   nosort_indexs       r   test_preserve_categoriesr  b  s    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<r   c                     t        d      } 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   rs   r  Fr   r  r  Tr   r  r  s       r   &test_preserve_categories_ordered_falser  s  s    eJ	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   r+   r2  r3  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      }|j                  | dd      j                  d      }|j                  | dd      j                  d      j                         }|j                  |j                        }t        j                  ||       t        j                  ||       y )N)r<   r[   r<   r<   r[   )r      r      r1  abaabr  Fr   T)rs   rt   r2  r3  r   g      ?g      9@r  byr(  rL   rw   r   )r   r   rb   r   rc   rN   r6   r*  r&   r%   rd   re   )r+   rQ   exp_fullresult1r   rh   s         r   test_preserve_categorical_dtyper    s    
 %d7mUUSd7mUTR		

B sBFF#bff%d5kd5k5Qd5kd5k4P		
H jjC%%j@EESWEXG


cD5
9	4	 	 
 8H'8,'8,r   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)r1   r  r  r  Tr   )rt  rt  r  )payloadr+   r  r  rt  rD  r+   )
r   r   rN   getattrr
   r   r  rd   re   r   )funcru   rW   rQ   r   r(   rh   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                  ||       y )Nr[   rM  rS  rT  Tr   FrK   r   )	r   r   r   r<   r<   r<   r\   r\   r\   ru  )r
   r   r   r   r   rh  r   r   rN   r6   r   r!   r   r   rd   r   r&   )rf   r   rR   r(   r   s        r   test_categorical_no_compressr    sI   "))''*::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'r   c                  "   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 )NrU   rX   Tr   rZ   r^   rV   FrK   r   r<   r[   rF   )
r   r   rN   r6   ru   r   rh  rc   rd   assert_numpy_array_equal)rR   rf   r(   r   s       r   #test_categorical_no_compress_stringr    s|    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 )Nr\   )trainr  testr  rs   rt   r  r  r?  r   r   ra   r   )r   r   rN   r1   r
   rd   r   rQ   r(   rh   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valuer[   r   r9  r   i  z - i  T)r  	ascendingi)  F)rightr   value_grouprK   c                 :    t        | j                         d         S )Nr   )floatsplitr   s    r   r   ztest_sort.<locals>.<lambda>  s    eAGGIaL.A r   )r  r   )r   r   r   r   r   r   r   sort_valuesr   r   r  rN   r/   sortedr!   r   ra   rd   r   )rQ   r  r   
cat_labelsr*   r   s         r   	test_sortr    s    
GRYY2215>>q%LM	NB*/5#*>?Q3q3wi ?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]r]   r   )(5, 7.5]r   r   )r  rF   r"  )(0, 2.5]r<   r#  )r  rv   r$  )r   r   r   r   r   r   Fr   r<   r#  r]   r   r   r   r   )r  r  r  r  )r  r  r  r  r   r   r`   r%   r!   )r   r   rN   r1   r   rd   re   )r   r   rQ   r(   data_valuesindex_valuesrh   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  rv   r<   r[   r]   )r   r   r]   r   rF   r<   rv   r!  )dtr   r   r   r  r   r#  r   r   r   r   r   r   r`   r  Fr   )r   r   r   r   rN   r1   rd   re   )r   r   rQ   r  r  rh   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   rV   r  r?  r<   r[   r<   r  rs   r   FrK   )r\   r<   r   rt   r   	min_countr<   r\   r[   )r   r   r   rN   rt   rC   r
   rd   r   r   rc   rQ   expected_idxr(   rh   s       r   test_empty_sumr  _  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  r  rs   r   FrK   )r[   r<   r<   rt   r   r  r<   r[   )r   r   r   rN   rt   r;   r
   rd   r   r   rc   r  s       r   test_empty_prodr  {  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1minr\   )freqrp  rM  )key1key2ru   r  r  FrK   r  r   ru   r   rF   r   r]   r   r[   r    )r   r   rb   r   rq  r   r   rN   r6   r	   r"   rc   rd   re   )rQ   r(   r   rh   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, expectedrR  r<  rD  r  r   r   )r!   rf   ra   r   rV   r   c                     t        t        g dd      g dg dd      }|j                  ddg| d	
      d   j                         }t	        j
                  ||       y )NrR  r<  rD  r  r@  r  r   rV   Tr'  r   )r   r
   rN   rC   rd   rV  )r(  rh   rQ   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 )NrX   Fr   )Nr   rV   rW   r<   r   )r   shiftrd   rV  )r   ctrh   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
    NrF   rs   r<  rt   rq   rM   rO   r<   r   )copyr   r
   rU  )rQ   df_cats     r   r  r    sl    " WWYr]F+$$Z0F3K+$$Z0F3K&F3K[[#Q['FMr   	operationr  rP   c                 j   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   } t        ||      t              }t        j                  ||       y )N)r   r   r   r   rs   r  )onethreer  twort   )r[   rF   r<   r\   rM   rf   r!   ra   TrK   )r   r   r	   r   r
   r'   rN   r  rC   rd   r   )r  r  lev_alev_br!   rh   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(WWi(-F68,r   rL   c                 8   t        j                  t        ddgd      t        g dd      gddg      j                         \  }}t	        g d	|d
      }| j                  ddg|      d
   } t        ||      t              }t        j                  ||       y )Nr   r   Fr   r  r  r  rs   rt   r   )r[   rF   r   r<   r   r\   rM   r  rK   )
r	   r"   r   	sortlevelr
   rN   r  rC   rd   r   )r  rL   r  r!   _rh   r   r(   s           r   )test_seriesgroupby_observed_false_or_noner    s    
 &&eU^U;4eD	
 Cj ik E1 -UEHnnc3Z(n;C@G(WWi(-F68,r   zobserved, index, datar   r   rs   r  )r  r  r  r  r  r  r  r  rt   )r[   r[   rF   rF   r<   r<   r\   r\   r   r  )rs   rt   Nc                     t        ||d      }| j                  ddg|      d   j                  d       }t        j                  ||       y )NrM   r  rs   rt   rK   c                 D    | j                         | j                         dS )Nr8   r5   r
  r   s    r   r   z8test_seriesgroupby_observed_apply_dict.<locals>.<lambda>F  s    !%%'!%%'2 r   )r
   rN   rP   rd   r   )r  rL   r!   rf   rh   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 )Nrs   rt   FrK   rM   )rN   r6   rd   r   )r  rh   r(   s      r   4test_groupby_categorical_series_dataframe_consistentr  K  sZ    ~~sCj5~9#>CCEH^^S#J^7<<>sCF68,r   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   r<   r[   )NameItemr  r  r   rK   T)skipna)	r   r   r  rN   r  rC   r*  rd   re   )rL   r   rQ   rh   r(   s        r   $test_groupby_cat_preserves_structurer  R  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)Nrk   rF   )rD   r  z'vau'r  rD   c                 >    t        d| j                  d   d   gi      S )Nr  rt  vau)r   r   )rowss    r   r   z/test_get_nonexistent_category.<locals>.<lambda>g  s     Y		"e@T?U7V-W r   )r   r   rj  r  KeyErrorrN   rP   rQ   s    r   test_get_nonexistent_categoryr  c  sU    	/aA	BB	xw	/ Y


5 WXY Y Y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  r[   皙?rF   cat_1cat_2r  r  r#  r$  rK   r  r0   r3   r2   (empty group due to unobserved categoriesr  )rj  skipr   r   rb   r   rN   hasattrr  r  r  r   )reduction_funcrL   rQ   r)   expected_lengthseries_groupbyr  r(   s           r   0test_series_groupby_on_2_categoricals_unobservedr,  j  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(  r<| dv r1t%        j&                  |j(                  t$        j*                        sJ y | dv sJ y y # 1 sw Y   y xY w)Nr  r  r0   z6TODO: implemented SeriesGroupBy.corrwith. See GH 32293reasonr  r  r?  r  r[   r!  rF   r"  ACBCCACBCCr#  r$  FrK   r  r%  r&  r  r   )r/   r:   r?   )rC   r.   )rj  r'  markxfailapplymarkerr   r   rb   tupler   rN   r  r  r  -_results_for_groupbys_with_missing_categoriesr  r   ri  r   
issubdtyper   integer)r)  requestr5  rQ   
unobservedr)   r+  r  r(   missing_fillinr   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B>RN Ujjo'BGGCLc^>STTU 99==rzz:::!^333	 %	 	s   $GG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d      }t        | |      }| dk(  r	t        }d}nd }d}t        j                  ||      5   t        ||       | }d d d        |D ]  }|j                  vrJ  y # 1 sw Y   !xY w)Nr  2ngroup does not return the Categories on the indexr  r  r?  111112r!  r!  r!  r!  r"  )rs   2)rt   rF  )rM   1)rM   rF  r#  r$  TrK   r0   'DataFrameGroupBy.corrwith is deprecatedr	  r  )rj  r'  r   r   rb   rN   r   r   rd   assert_produces_warningr  r!   )	r)  rQ   unobserved_catsdf_grpr)   warnwarn_msgr*   r  s	            r   >test_dataframe_groupby_on_2_categoricals_when_observed_is_truerN    s    
 !HI	 f$u+F f$t*E)	

B GOZZ'*TZ:F">26D#<		#	#D	9 5-gfn-t45  $#))###$5 5s   4C$$C-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 | dk(  r	t        }d}nd }d}t        j                  ||      5   t        ||       | }	d d d        t        |    }
|r*| dk(  r%	j                  |   |
k(  j                         du sJ y |
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# 1 sw Y   xY w)Nr  rA  r  r  r?  rB  rC  rD  r"  rE  r#  r$  rK   r%  r&  r  r0   rH  r	  r?   T)rj  r'  r   r   rb   rN   r   r  r  r  r   rd   rI  r9  r  r-   r   rc   isnull)r)  rL   using_python_scalarsrQ   rJ  rK  r)   rL  rM  r*   rh   s              r   ?test_dataframe_groupby_on_2_categoricals_when_observed_is_falserR    s    !HI	 f$u+F f$t*E)	

B GOZZ'*XZ>F">26D*>>]]H
 	3 ,GFN+T2	3 	#<		#	#D	9 5-gfn-t45 =^LH& 8(H499;tCCC	RVV	ww'..0446::<<<(H499;??AAA-	3 	5 5s   ,F:.G:GG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   rF   r<   r  )rY   rW   rY   rW   r&  r   r   r   r]   r   r   TFr(  r   rL   r6   )	r   r   r   r   r)  rN   r  rd   r   )rY   rQ   r  r+  r(   rh   s         r   3test_series_groupby_categorical_aggregation_getitemrU    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   r<   r<   r[   r[   )r   r   r   r   r<   )idr+  r  rW  r+  r  rT  r   r    )r   r   r  rN   r  r   rd   re   )r  rX  rQ   r(   rh   s        r   $test_groupby_agg_categorical_columnsrX  (  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 )	Nrs   r  r  r?  r[   r<   r    r  )
r   r   r   rh  rN   r  r
   r:   rd   re   rQ   rh   r(   s      r   test_groupby_agg_non_numericr[  =  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  rV   r<  rD  r  rs   rt   r   r!   ra   r   )
r   r
   r  
as_orderedrN   r  r   r   rd   r   )r  rQ   
df_groupedr(   rh   s        r   <test_groupby_first_returned_categorical_instead_of_dataframer`  H  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 )Nr<   r[   F)r<   r\   r]   rv   r  r?  r^   r   r   g      @rV   r   r   r   )r   rh  flags	writeabler   r   r   r   rN   r6   rd   re   )rR   rQ   rh   r(   s       r   test_read_only_category_no_sortrd  W  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largerg  rg  r~  rg  rg  r~  )rM   rs   rs   rM   rs   rM   rs   rM   )r   r   r   r<  )tinyrf  r~  rg  Tr   r   )rs   rM   r<   r\   r[   r   r!   r   )r   r   ra   r   FrK   )r   r   r  set_categoriesrename_axisr   r%   rN   r?   r  rd   re   rZ  s      r   #test_sorted_missing_category_valuesrk  c  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)r<   r<   r[   r\   r<  col_catr@  r   r]  r1   )r   r   rN   rn  r1   r
   r   r   rd   r   r  to_framere   r  s      r   1test_agg_cython_category_not_implemented_fallbackrp    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)r<   r<   r<   r<   r  r!  g?g333333?)r   r   r   fee)rs   rt   numerical_col
object_colcategorical_colru  r<  rs   rt   c                 >    | j                         j                         S r   )ri  rC   r  s    r   r   z7test_aggregate_categorical_with_isnan.<locals>.<lambda>  s    2779==? r   r<   r[   r  r   r   )rs  rt  ru  r   )
r   r   rc   r   rN   r  r	   r   rd   re   r   s       r   %test_aggregate_categorical_with_isnanrw    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<   | j	                  d      d   j                  t              | d	<   | j                         }t        g dg dg d
d      }|d   j                  |      |d<   t        j                  ||       y )N)r<   r<   r<   r[   r[   r\   )WaitingOnTheWay	Deliveredry  rz  ry  )
package_idstatus)ry  rz  r{  Tr   r}  r|  last_status)ry  ry  ry  ry  ry  ry  )r|  r}  r~  )
r   r   CategoricalDtyper   rN   r   r5   r  rd   re   )rQ   delivery_status_typer(   rh   s       r   test_categorical_transformr    s    	,
	

B ..7 h<&&';<BxL

<0:DDSIB}WWYF,	
H, "(+223GHHX&(+r   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   r<   r<   )r   r<   r<   r   r  r   r<   r   rV   r   rW   r   )r1   r4   rK   )r   r   r	   r"   r
   r   rc   rK  r   rC  rN   r  rd   r   )r  rL   r  r  rQ   rz   r   expected_dictrh   srs_grpr(   s              r   Ftest_series_groupby_first_on_categorical_col_grouped_on_2_categoricalsr    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 r  )r   r   r	   r"   r
   r   rc   ro  rK  r   rC  rN   r  rd   re   )r  rL   r  r  rQ   rz   r   r  rh   rK  r(   s              r   Btest_df_groupby_first_on_categorical_col_grouped_on_2_categoricalsr    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)rV   rV   r   r  r?  r\   )r  r+   r  Fr   r   r<   intprD  r[   )rV   r   rW   )
r   r   r   rN   indicesr   rh  rW  rd   r  )rQ   r   r(   rh   r  s        r   2test_groupby_categorical_indices_unused_categoriesr  $  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   r@  r<  rV   r   )ra   r!   )	r   r   r  rN   r
   r   r   rd   r   )r  rQ   r(   rh   s       r   1test_groupby_last_first_preserve_categoricaldtyper  8  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 )Nr<   r[   r   r  r  r<  r^   rD  r   rV   TrK   rW   r   r   )
r   r   rN   r:   r
   r	   r   r   rd   r   r  s      r   )test_groupby_categorical_observed_nuniquer  D  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 )Nrf  bigTr   r<   r[   grpdescriptionr   r   r]  )
r   r  r   r   rN   r5   r
   r   rd   r   )r   rQ   r(   rh   s       r   ,test_groupby_categorical_aggregate_functionsr  S  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 )Nr<   r[   r@  r?  r\   rF   )r   rp   r   rJ  rp   r    )r\   rF   r   )	r   r   rN   rC   r   r!   ra   rd   re   )rL   rK  r  rQ   r{   r(   rh   r!   s           r   test_groupby_categorical_dropnar  e  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   |dk(  r9|s7|dk7  r2d}| 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 |dk(  r	t        }d}nd }d}t        j                   ||      5   t        ||      |
 }d d d        |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# 1 sw Y   xY w)Nr0   r  zDGH#49950 - corrwith with as_index=False may not have grouping columnr.  r   /Result doesn't have categories, nothing to testr[   r<   r[   r\   r<   rF   r\   r[   r   rF   r^   r   r  rO  rT  r%  r&  r  rH  r	  )r7  rj  r5  r6  r'  r   r   r   r  r   rN   r  r  r  r   rd   rI  r!   r   r   r  r   r   )r<  r(  r   rL   r)  r  r   rm  rQ   rW  r)   r{   rL  rM  	op_resultr(   rh   s                    r   test_category_order_reducerr  v  s    #Hx9O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'.	/ 	#<		#	#D	9 7/GB/6	711#6AA3##..\"H&(+W11$7BB
fh/ )	/ 	7 7s   
H
H
HH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                  | ||
      }	 t        |	|      | }
|
j                  j                  d      j                  }t        g d      }t        j                  ||       |dk(  r<|
j                  j                  d	      j                  }t        j                  ||       y y )Nr  r  r   rF   r^   r  r   r  rO  rT  )r   r   r   r  r   rN   r  r!   r   r   r   rd   r   )r(  r   rL   transformation_funcr  r   rQ   rW  r)   r{   r  r(   rh   s                r   test_category_order_transformerr    s    
\lGTq	

B Xu\\$	w	T{c74\\$"#6;D	D8$	JB0/0$7I__--c2==F\"H&(+W11$7BB
fh/ r   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   rF   r^   r   r   r  r  rO  rT  )r   r   r   r  rN   r  r  r   r!   r   r   rd   r   r(  r   rL   r  r  r   rQ   rW  r{   r  r(   rh   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   )rP   r  r   c                    |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                  | ||      } t        ||      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 )Nr   r   z(No categories in result, nothing to testr  r  r   rF   r^   r   r  r  rO  rT  c                 &    | j                  d      S )NTrw   )rC   r   s    r   r   z+test_category_order_apply.<locals>.<lambda>
  s    aeee.F r   )rj  r'  r   r   r   r  rN   r  r  r   r!   r   r   rd   r   r  s               r   test_category_order_applyr    sa   
 	+*"7w.>?	\lGTq	

B Wu	x	u\\$	w	T{c74\\$	D8$	JB#F#$FGI+X:3H3##..11#6AA\"H&(+W11$7BB
fh/ r   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'  rt  r  r   rF   r^   r   r  r  rO  TrT  )r\   r[   r<   )r[   r<   r\   )r   r   ra   rV   )r   rO  )r   rO  rV   )rj  r'  r   r   r   r   r   r  rN   rC   r   r   r	   
from_framer!   r
   rd   re   )r(  r   r  r   r   grouperrQ   rW  r{   r(   rf   r!   rh   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   rW  a1c                    |r-|dk(  r(t        t        d      rJ t        j                  d       n6|dk(  r1d}| 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 |||_        t)        j*                  |
|       y # 1 sw Y   y xY wc c}w )Nr0   z*corrwith not implemented for SeriesGroupByz1GH#32293: attempts to call SeriesGroupBy.corrwithr.  )r   r   r<   )r[   r\   r\   rN  )r  rO  rV   r<  )r  rO  rO  r   r  rV   r%  r  r&  r  r?   rt  r	  )r(  r   rj  r'  r7  r5  r6  r   r   rU  rN   r   r  r  r  r  ro  r	   from_tuplesr%   rd   rV  )r<  r(  rL   r)  rP  rW  rm  rQ   r{   r)   r(   rh   inds                r   test_agg_listr  ?  s    ~3=*555@A	:	%A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
 2T2>2OOFH%%	, 	 9s   4F31F?3F<c           
         t        t        d      t        ddddt        j                  gg dd      g dd      }|j                  d	d
g| |      }|j                         }|r| rg d}n|s| rg d}n|r| sg d}n|s| sg d}t        t        d      t        g dg dd      g dd      j                  d	d
g      j                        }t        j                  ||       y )NYXXYYr[   r<   r@  Tr   )r<   r[   r\   rF   r]   )datessectormetricr  r  rf  ru  )r\   r   r<   r[   )r   r<   rF   r[   r\   r]   )r\   r   r<   r[   r]   rF   XXYYXY)r<   r[   r<   r[   r\   r\   )r[   r\   rF   r<   r   r   )r   rb   r   r   rc   rN   rC   r  r   rd   re   )rL   r   rQ   r{   r(   takerrh   s          r   'test_categorical_with_noncategorical_nar  i  s    	']!Aq!RVV$D &	

B 
Wh'(	FBVVXFh	h"("h%&9d -	
 
GX&	'	e  &(+r   )ur   numpyr   rj  pandas.errorsr   pandasr   r   r   r   r   r	   r
   r   pandas._testing_testingrd   pandas.api.typingr   pandas.tests.groupbyr   rc   r,   r9  rS   ri   r}   r   r   r   r   r   r   r   r5  parametrizer  r
  r  r  r-  r6  r=  rF  rL  rZ  r\  r_  rc  rn  rr  rx  r{  r  r  r   renamer  r  r  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?  rN  rR  rU  r:   r/   rX  r[  r`  rd  rk  rp  rw  r  r   boolr  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   <module>r     s
      (     + 8 DF66 E21 
41 
51 Q1 1 RVV1 bff1 bff1 BFF1 
2661  BFF!1" bff#1$ 
266%1& 
266'1( q)1* A+1, -1. 
266/10 FFFF6666;1 -B(,	,,6LB&	-"NJ,4-, T5M2- 3->),X,6!0H,&,(E*+*+" 2	j*93?@#J'ic2E)4DE	
 $K( 5 5	
& u6& 7'(&D+*-,( T5M2 3@$PN,2L-&$ v 
a	!Qq!f56 
a		 	 !4	5aS1v7NO	a	!Qq!f56--<0~"  t-- .-< 	8W%&	(G$%	7#$	7#$	--&(2--%, 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-"  "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--,"Y#*L44n$B eT]30B 40Bf	- nni 6<<";<,	,", '6!23- 4-	,*,Z,,,6.,b '6!23-
-- 4-0 '6!23,
,, 4,0@( '6!23- 4---$," 'CDT5M230 3 E30l '':;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 0F 'CD$, E$,N u64&4,!78%& 9 7%&P$,r   