Ë
    *�£j ¤  ã                  óú  — d Z ddlmZ ddlZddlZddlmZmZmZm	Z	 ddl
ZddlmZmZ ddlmc mZ ddl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 dd
lm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z: erddl;m<Z<m=Z=m>Z>m?Z? ddl@mAZA d#d„ZBd„ ZC G d„ d«      ZD G d„ d«      ZE G d„ deE«      ZFd$d„ZG G d„ dee   «      ZH G d„ d eH«      ZI G d!„ d"eH«      ZJy)%a  
Provide classes to perform the groupby aggregate operations.

These are not exposed to the user and provide implementations of the grouping
operations, primarily in cython. These classes (BaseGrouper and BinGrouper)
are contained *in* the SeriesGroupBy and DataFrameGroupBy objects.
é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚGenericÚfinal)ÚNaTÚlib)Ú	ArrayLikeÚAxisIntÚNDFrameTÚShapeÚnpt©ÚAbstractMethodError)Úcache_readonly)Úmaybe_downcast_to_dtype)Úensure_float64Úensure_int64Úensure_platform_intÚensure_uint64Úis_1d_only_ea_dtype)ÚisnaÚ
maybe_fill)ÚCategorical)Ú	DataFrame)Úgrouper)ÚCategoricalIndexÚIndexÚ
MultiIndexÚensure_index)ÚSeries)Úcompress_group_indexÚdecons_obs_group_idsÚget_group_indexÚget_group_index_sorterÚget_indexer_dict)ÚCallableÚ	GeneratorÚHashableÚIterator)ÚNDFramec                ób   — t        | t        j                  «      r|t        k7  rt	        d«      ‚y y )NzMust produce aggregated value)Ú
isinstanceÚnpÚndarrayÚobjectÚ
ValueError)ÚobjÚdtypes     ú9C:\FundamentalWorkbench\vendor\pandas\core\groupby\ops.pyÚcheck_result_arrayr5   Q   s1   € ô �#”r—z‘zÔ"Ø”FŠ?ô Ð<Ó=Ð=ð ð #ó    c                óz   — t        | d«      r.| j                  } | j                  dk(  rt        | «      dk(  r| d   } | S )zb
    Extract the result object, it might be a 0-dim ndarray
    or a len-1 0-dim, or a scalar
    Ú_valuesé   r   )Úhasattrr8   ÚndimÚlen)Úress    r4   Úextract_resultr>   \   s:   € ô
 ˆs�IÔà�k‰kˆØ�8‰8�qŠ=œS ›X¨š]à�a‘&ˆCØ€Jr6   c                  ó6  — e Zd ZU dZ eg d¢«      Zd>d„Zi d ej                  e	j                  d¬«      “d ej                  e	j                  d¬«      “dd“d	d
“d ej                  e	j                  d¬«      “d ej                  e	j                  d¬«      “dd“dd“dd“dd“dd“d ej                  e	j                  d¬«      “d ej                  e	j                  d¬«      “dd“dd“dd“d d!“d"d#i¥d$d%d&d'd(d)œd*œZd+ed,<   d"d-iZed?d.„«       Zeej$                  	 	 	 	 	 	 	 	 d@d/„«       «       ZdAd0„ZdBd1„ZdCd2„ZdCd3„Zed4d4d5d6œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dDd7„«       Zed5d8œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dDd9„«       ZedEd:„«       Zed;d<œ	 	 	 	 	 	 	 	 	 	 	 dFd=„«       Zy4)GÚWrappedCythonOpaB  
    Dispatch logic for functions defined in _libs.groupby

    Parameters
    ----------
    kind: str
        Whether the operation is an aggregate or transform.
    how: str
        Operation name, e.g. "mean".
    has_dropped_na: bool
        True precisely when dropna=True and the grouper contains a null value.
    )ÚanyÚallÚrankÚcountÚsizeÚidxminÚidxmaxc                ó.   — || _         || _        || _        y ©N©ÚkindÚhowÚhas_dropped_na)ÚselfrK   rL   rM   s       r4   Ú__init__zWrappedCythonOp.__init__~   s   € ØˆŒ	ØˆŒØ,ˆÕr6   rA   )Úval_testrB   ÚsumÚ	group_sumÚprodÚ
group_prodrF   )ÚnamerG   ÚminÚ	group_minÚmaxÚ	group_maxÚmeanÚ
group_meanÚmedianÚgroup_median_float64ÚvarÚ	group_varÚstdÚsemÚskewÚ
group_skewÚkurtÚ
group_kurtÚfirstÚ	group_nthÚlastÚ
group_lastÚohlcÚ
group_ohlcÚgroup_cumprodÚgroup_cumsumÚgroup_cumminÚgroup_cummaxÚ
group_rank)ÚcumprodÚcumsumÚcumminÚcummaxrC   )Ú	aggregateÚ	transformzdict[str, dict]Ú_CYTHON_FUNCTIONSé   c                ó(   — || j                   d   v ryy)Nru   rv   )rw   )ÚclsrL   s     r4   Úget_kind_from_howz!WrappedCythonOp.get_kind_from_how£   s   € à�#×'Ñ'¨Ñ4Ñ4ØØr6   c                ó\  — |j                   }| j                  |   |   }t        |«      r|}nt        t        |«      }|r|S |t        j                  t        «      k(  rE|dv rt        d|› d|› d�«      ‚|dv r|S |dv r	 |S d|j                  vrt        d|› d|› d�«      ‚|S t        d|«      ‚)	N)r\   rq   z2function is not implemented for this dtype: [how->z,dtype->Ú])r`   ra   rF   rG   ©rb   rd   r0   zPThis should not be reached. Please report a bug at github.com/pandas-dev/pandas/)
rU   rw   ÚcallableÚgetattrÚ
libgroupbyr.   r3   r0   ÚNotImplementedErrorÚ__signatures__)rz   rK   rL   r3   Ú
is_numericÚ	dtype_strÚftypeÚfs           r4   Ú_get_cython_functionz$WrappedCythonOp._get_cython_function«   sõ   € ð
 —J‘Jˆ	Ø×%Ñ% dÑ+¨CÑ0ˆô �EŒ?Ø‰Aäœ
 EÓ*ˆAÙØˆHØ”b—h‘hœvÓ&Ò&ØÐ+Ñ+ä)ðØ ˜E ¨)¨°Að7óð ð Ð:Ñ:à�ØÐ(Ñ(àð ˆHð  ×!1Ñ!1Ñ1ä)ðØ ˜E ¨)¨°Að7óð ð ˆHä%ð0àóð r6   c                ó2  — | j                   }|dv rt        |«      }|S |j                  j                  dv ra|dv s| j                  dk(  r| j                  rt        |«      }|S |dv r1|j                  j                  dk(  rt        |«      }|S t        |«      }|S )zÖ
        Cast numeric dtypes to float64 for functions that only support that.

        Parameters
        ----------
        values : np.ndarray

        Returns
        -------
        values : np.ndarray
        )r\   r`   ra   rb   rd   Úiu)r^   rZ   rv   )rQ   rj   rS   rr   rq   Úi)rL   r   r3   rK   rM   r   r   )rN   ÚvaluesrL   s      r4   Ú_get_cython_valsz WrappedCythonOp._get_cython_valsÖ   s«   € ð �h‰hˆàÐ:Ñ:ô $ FÓ+ˆFð" ˆð �\‰\×Ñ $Ñ&Ø�oÑ%Ø—	‘	˜[Ò(¨T×-@Ò-@ô (¨Ó/�ð ˆð ÐDÑDà—<‘<×$Ñ$¨Ò+Ü)¨&Ó1�Fð ˆô +¨6Ó2�Fàˆr6   c                óð   — | j                   }| j                  }| j                  j                  |d«      }|dk(  r||f}|S |dkD  rt	        d«      ‚|dk(  r|j
                  }|S |g|j
                  dd  ¢­}|S )Nr9   rj   z<arity of more than 1 is not supported for the 'how' argumentrv   )rL   rK   Ú_cython_arityÚgetr‚   Úshape)rN   ÚngroupsrŒ   rL   rK   ÚarityÚ	out_shapes          r4   Ú_get_output_shapez!WrappedCythonOp._get_output_shapeû   s›   € Ø�h‰hˆØ�y‰yˆà×"Ñ"×&Ñ& s¨AÓ.ˆð �&Š=Ø  %Ð(ˆIð Ðð �QŠYÜ%ØNóð ð �[Ò ØŸ™ˆIð Ðð !Ð4 6§<¡<°°Ð#3Ñ4ˆIØÐr6   c                ó¸   — | j                   }|dk(  rd}n2|dv rd}n+|j                  dv r|j                  › |j                  › �}nd}t        j                  |«      S )NrC   Úfloat64©rF   rG   ÚintpÚiufcbr0   )rL   rK   Úitemsizer.   r3   )rN   r3   rL   Ú	out_dtypes       r4   Ú_get_out_dtypezWrappedCythonOp._get_out_dtype  s^   € Ø�h‰hˆà�&Š=Ø!‰IØÐ(Ñ(ð ‰IØ�Z‰Z˜7Ñ"Ø Ÿ:™:˜, u§~¡~Ð&6Ð7‰Ià ˆIÜ�x‰x˜	Ó"Ð"r6   c                ó2  — | j                   }|dv rA|t        j                  t        «      k(  r#t        j                  t        j                  «      S |S |dv rA|j
                  dv r|S |j
                  dv r#t        j                  t        j                  «      S |S )a  
        Get the desired dtype of a result based on the
        input dtype and how it was computed.

        Parameters
        ----------
        dtype : np.dtype

        Returns
        -------
        np.dtype
            The desired dtype of the result.
        )rQ   rr   rQ   rS   rq   )rZ   r\   r^   r`   ra   ÚfcÚiub)rL   r.   r3   ÚboolÚint64rK   r—   )rN   r3   rL   s      r4   Ú_get_result_dtypez!WrappedCythonOp._get_result_dtype  s€   € ð �h‰hˆàÐ=Ñ=ØœŸ™¤›Ò&Ü—x‘x¤§¡Ó)Ð)ð ˆð Ð;Ñ;Ø�z‰z˜TÑ!Ø�Ø—‘˜uÑ$Ü—x‘x¤§
¡
Ó+Ð+Øˆr6   Nr   )ÚmaskÚresult_maskÚinitialc          
     ó  — |j                   dk(  r\|d d d …f   }	|�	|d d d …f   }|�	|d d d …f   } | j                  |	f||||||dœ|¤Ž}
|
j                  d   dk(  r|
d   S |
j                  S  | j                  |f||||||dœ|¤ŽS )Nr9   )Ú	min_countr’   Úcomp_idsr¤   r¥   r¦   r   )r;   Ú_call_cython_opr‘   ÚT)rN   rŒ   r¨   r’   r©   r¤   r¥   r¦   ÚkwargsÚvalues2dr=   s              r4   Ú_cython_op_ndim_compatz&WrappedCythonOp._cython_op_ndim_compat7  sÙ   € ð �;‰;˜!Òà˜d¢A˜g‘ˆHØÐØ˜D¢!˜G‘}�ØÐ&Ø)¨$²¨'Ñ2�Ø&�$×&Ñ&Øð	à#ØØ!ØØ'Øñ	ð ñ	ˆCð �y‰y˜‰|˜qÒ Ø˜1‘v�ð —5‘5ˆLà#ˆt×#Ñ#Øð	
àØØØØ#Øñ	
ð ñ	
ð 		
r6   )r¦   c               ó*  — |}	|j                   }
|
j                  dv }|
j                  dv }| j                  dv r|€t        |«      }|r|j	                  d«      }d}n |
j                  dk(  r|j	                  d«      }|j                   dk(  r|j                  t        j                  «      }| j                  dv rk|
t        k(  r,|d	   r'|�%|j                  «       r|j                  «       }d||<   |j                  t        d
¬«      j	                  t        j                  «      }d}|j                  }|�|j                  }|�|j                  }| j                  ||«      }| j                  | j                  | j                  |j                   |«      }| j!                  |«      }| j#                  |j                   «      }t%        t        j&                  ||¬«      «      }| j                  dk(  �rt        j(                  |t        j*                  ¬«      }| j                  dv r&| j                  dk(  r||d<    |d#||||||||dœ|¤Ž nÝ| j                  dv r$| j                  dv r||d<    |||||f|||dœ|¤Ž n«| j                  dv r& |d#|||||dœ|¤Ž |j                  t        d
¬«      }nw| j                  dv r. |d#||||||dœ|¤Ž |
t        k(  rQ|j                  t        «      }n;t-        | j                  › d�«      ‚| j                  dk7  r||d<    |d#||||||dœ|¤Ž | j                  dk(  r”| j                  dvr†|j                   j                  dv rn|slt/        | j                  dv rd nd!|«      }|k  }|j                  «       r;|�||   j1                  «       s&J ‚|j                  d"«      }t        j2                  ||<   |j                  }| j                  | j4                  vr)| j7                  |	j                   «      }t9        ||«      }|S |}|S )$Nrš   ÚmM)rA   rB   r¢   TÚbÚuint8Úfloat16ÚskipnaF©Úcopy©r3   ru   )	rF   rG   rV   rX   rZ   rh   rf   rQ   r\   rQ   r¦   )ÚoutÚcountsrŒ   Úlabelsr¨   r¤   r¥   Úis_datetimelike)ra   r`   r^   rj   rS   )r`   ra   r»   )r¨   r¤   r¥   )r¸   rŒ   rº   r¤   r¥   r~   )r¸   r¹   rŒ   rº   r¤   r¥   z is not implementedrC   r¥   )r¸   rŒ   rº   r’   r»   r¤   r˜   rŠ   )rQ   rS   r   r9   r—   © )r3   rK   rL   r   ÚviewÚastyper.   Úfloat32r0   rA   r¶   r¡   Úint8r«   r•   rˆ   r�   r�   r   ÚemptyÚzerosr¢   r‚   rX   rB   ÚnanÚcast_blocklistr£   r   )rN   rŒ   r¨   r’   r©   r¤   r¥   r¦   r¬   Úorig_valuesr3   r„   r»   r”   Úfuncrœ   Úresultr¹   ÚcutoffÚempty_groupsÚ	res_dtypeÚ	op_results                         r4   rª   zWrappedCythonOp._call_cython_opf  s7  € ð ˆà—‘ˆØ—Z‘Z 7Ð*ˆ
àŸ*™*¨Ð,ˆà�8‰8�~Ñ%Øˆ|Ü˜F“|�áØ—[‘[ Ó)ˆFØ‰JØ�Z‰Z˜3ÒØ—[‘[ Ó)ˆFØ�<‰<˜9Ò$Ø—]‘]¤2§:¡:Ó.ˆFà�8‰8�~Ñ%ØœŠØ˜(Ò#àÐ'¨D¯H©H¬Jà!'§¡£˜Ø'+˜˜t™Ø—]‘]¤4¨e�]Ó4×9Ñ9¼"¿'¹'ÓBˆFØˆJà—‘ˆØÐØ—6‘6ˆDØÐ&Ø)Ÿm™m�à×*Ñ*¨7°FÓ;ˆ	Ø×(Ñ(¨¯©°D·H±H¸f¿l¹lÈJÓWˆØ×&Ñ& vÓ.ˆØ×'Ñ'¨¯©Ó5ˆ	äœBŸH™H Y°iÔ@ÓAˆØ�9‰9˜Ó#Ü—X‘X˜g¬R¯X©XÔ6ˆFØ�x‰xð 
ñ 
ð —8‘8˜uÒ$ð )0�F˜9Ñ%Ùð 
ØØ!Ø!Ø#Ø'ØØ +Ø$3ñ
ð ó
ð —‘ÐBÑBØ—8‘8˜~Ñ-Ø0?�FÐ,Ñ-ÙØØØØð		ð
 (ØØ +ñ	ð ó	ð —‘˜^Ñ+Ùð ØØ!Ø#ØØ +ñð òð  Ÿ™¤t°%˜Ó8‘Ø—‘Ð-Ñ-Ùð ØØ!Ø!Ø#ØØ +ñð òð œF’?Ø#Ÿ]™]¬6Ó2‘Fô *¨T¯X©X¨JÐ6IÐ*JÓKÐKð �x‰x˜6Ò!à(3��}Ñ%Ùð ØØØØØ /Øñð òð �9‰9˜Ò#¨¯©Ð8LÑ(Lð �|‰|× Ñ  DÑ(±ä $§(¡(¨oÑ"=™QÀ1ÀiÓP�Ø%¨™�Ø×#Ñ#Ô%Ø"Ð.Ø*¨<Ñ8×<Ñ<Ô>Ð>Ð>ð "(§¡¨yÓ!9˜Ü/1¯v©v˜˜|Ñ,à—‘ˆà�8‰8˜4×.Ñ.Ñ.ð
 ×.Ñ.¨{×/@Ñ/@ÓAˆIÜ/°¸	ÓBˆIð Ðð ˆIàÐr6   c                óª   — |j                   dkD  rt        d«      ‚|j                   dk(  r|dk(  sJ |«       ‚y t        |j                  «      s|dk(  sJ ‚y y )Né   z.number of dimensions is currently limited to 2r9   r   )r;   r‚   r   r3   )rN   ÚaxisrŒ   s      r4   Ú_validate_axiszWrappedCythonOp._validate_axis  sU   € à�;‰;˜Š?Ü%Ð&VÓWÐWØ�;‰;˜!ÒØ˜1’9Ð"˜dÓ"‘9Ü$ V§\¡\Ô2ð ˜1’9Ð‘9ð 3r6   éÿÿÿÿ)r¨   c          	     óâ   — | j                  ||«       t        |t        j                  «      s, |j                  d| j
                  | j                  |||dœ|¤ŽS  | j                  |f|||ddœ|¤ŽS )zW
        Call our cython function, with appropriate pre- and post- processing.
        )rL   rM   r¨   r’   ÚidsN)r¨   r’   r©   r¤   r¼   )rÏ   r-   r.   r/   Ú_groupby_oprL   rM   r®   )rN   rŒ   rÎ   r¨   r©   r’   r¬   s          r4   Úcython_operationz WrappedCythonOp.cython_operation  s”   € ð 	×Ñ˜D &Ô)ä˜&¤"§*¡*Ô-à%�6×%Ñ%ð Ø—H‘HØ#×2Ñ2Ø#ØØñð ñð ð +ˆt×*Ñ*Øð
àØØØñ
ð ñ
ð 	
r6   )rK   ÚstrrL   rÕ   rM   r¡   ÚreturnÚNone)rL   rÕ   rÖ   rÕ   )rK   rÕ   rL   rÕ   r3   únp.dtyper„   r¡   )rŒ   ú
np.ndarrayrÖ   rÙ   )r’   ÚintrŒ   rÙ   rÖ   r   )r3   rØ   rÖ   rØ   )rŒ   rÙ   r¨   rÚ   r’   rÚ   r©   rÙ   r¤   únpt.NDArray[np.bool_] | Noner¥   rÛ   r¦   r   rÖ   rÙ   )rÎ   r   rŒ   r
   rÖ   r×   )rŒ   r
   rÎ   r   r¨   rÚ   r©   rÙ   r’   rÚ   rÖ   r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	frozensetrÄ   rO   Ú	functoolsÚpartialr�   Úgroup_any_allÚgroup_idxmin_idxmaxr_   rw   Ú__annotations__r�   Úclassmethodr{   Úcacherˆ   r�   r•   r�   r£   r   r®   rª   rÏ   rÔ   r¼   r6   r4   r@   r@   j   sZ  … ññ ÚCó€Nó-ð
ØÐ$�9×$Ñ$ Z×%=Ñ%=ÈÔNð
àÐ$�9×$Ñ$ Z×%=Ñ%=ÈÔNð
ð �;ð
ð �Lð	
ð
 Ð'�i×'Ñ'¨
×(FÑ(FÈXÔVð
ð Ð'�i×'Ñ'¨
×(FÑ(FÈXÔVð
ð �;ð
ð �;ð
ð �Lð
ð Ð,ð
ð �;ð
ð Ð$�9×$Ñ$ Z×%9Ñ%9ÀÔFð
ð Ð$�9×$Ñ$ Z×%9Ñ%9ÀÔFð
ð �Lð
ð �Lð
ð  �[ð!
ð" �Lð#
ð$ �Lñ%
ð* 'Ø$Ø$Ø$Ø ñ
ñ+*Ð�ó ð< ˜Q�K€Màòó ðð Ø‡_�_ð'Øð'Ø ð'Ø)1ð'Ø?Cò'ó ó ð'óR#óJó&#óð4 ð .2Ø48Øñ,
àð,
ð ð	,
ð
 ð,
ð ð,
ð +ð,
ð 2ð,
ð ð,
ð 
ò,
ó ð,
ð\ ð ñcàðcð ð	cð
 ðcð ðcð +ðcð 2ðcð ðcð 
òcó ðcðJ òó ðð ð ñ!
ð ð!
ð ð	!
ð
 ð!
ð ð!
ð ð!
ð 
ò!
ó ñ!
r6   r@   c                  ó´  — e Zd ZU dZded<   	 	 d#	 	 	 	 	 	 	 	 	 d$d„Zed%d„«       Zd&d„Zed'd„«       Z	d(d„Z
ed)d	„«       Zed*d
„«       Zeed+d„«       «       Zed,d„«       Zed-d„«       Zed.d„«       Zed/d„«       Zed0d„«       Zeed1d„«       «       Zeed1d„«       «       Zed+d„«       Zeed'd„«       «       Zed2d„«       Zed+d„«       Zed3d„«       Zed4d„«       Zed4d„«       Z	 	 	 	 	 	 	 	 	 	 d5d„Z	 	 	 	 	 	 	 	 d6d„Zed7d„«       Z e	 d8	 	 	 	 	 	 	 	 	 d9d„«       Z!e	 d:	 	 	 	 	 	 	 d;d„«       Z"e	 	 	 	 	 	 d<d„«       Z#e	 	 	 	 	 	 d=d „«       Z$eed+d!„«       «       Z%y")>ÚBaseGrouperaŒ  
    This is an internal Grouper class, which actually holds
    the generated groups

    Parameters
    ----------
    axis : Index
    groupings : Sequence[Grouping]
        all the grouping instances to handle in this grouper
        for example for grouper list to groupby, need to pass the list
    sort : bool, default True
        whether this grouper will give sorted result or not

    r   rÎ   c                ój   — t        |t        «      sJ |«       ‚|| _        || _        || _        || _        y rI   )r-   r   rÎ   Ú
_groupingsÚ_sortÚdropna)rN   rÎ   Ú	groupingsÚsortrí   s        r4   rO   zBaseGrouper.__init__N  s5   € ô ˜$¤Ô&Ð,¨Ó,Ð&àˆŒ	Ø#ˆŒØˆŒ
Øˆ�r6   c                ó   — | j                   S rI   )rë   ©rN   s    r4   rî   zBaseGrouper.groupings\  s   € à�‰Ðr6   c                ó,   — t        | j                  «      S rI   )ÚiterÚindicesrñ   s    r4   Ú__iter__zBaseGrouper.__iter__`  s   € Ü�D—L‘LÓ!Ð!r6   c                ó,   — t        | j                  «      S rI   )r<   rî   rñ   s    r4   ÚnkeyszBaseGrouper.nkeysc  s   € ä�4—>‘>Ó"Ð"r6   c              #  óv   K  — | j                  |«      }| j                  }t        ||d¬«      E d{  –—†  y7 Œ­w)úš
        Groupby iterator

        Returns
        -------
        Generator yielding sequence of (name, subsetted object)
        for each group
        T©ÚstrictN)Ú_get_splitterÚresult_indexÚzip)rN   ÚdataÚsplitterÚkeyss       r4   Úget_iteratorzBaseGrouper.get_iteratorg  s5   è ø€ ð ×%Ñ% dÓ+ˆà× Ñ ˆÜ�t˜X¨dÔ3×3Ò3ús   ‚/9±7²9c                ó�   — t        |t        «      rt        }nt        } ||| j                  | j
                  | j                  ¬«      S )zV
        Returns
        -------
        Generator yielding subsetted objects
        )Ú
sorted_idsÚsort_idx)r-   r!   ÚSeriesSplitterÚFrameSplitterr’   Ú_sorted_idsÚresult_ilocs)rN   rÿ   Úklasss      r4   rü   zBaseGrouper._get_splitteru  sC   € ô �dœFÔ#Ü(6‰Eô "ˆEáØØ�L‰LØ×'Ñ'Ø×&Ñ&ô	
ð 	
r6   c                ó˜  — t        | j                  «      dk(  r4t        | j                  t        «      r| j                  d   j
                  }n9| j                  D �cg c]  }|j                  ‘Œ }}t        || j                  «      }| j                  s§t        | j                  t        «      }|sV| j                  j                  r@|j                  «       D ��ci c]#  \  }}t        |«      rt        j                  n||“Œ% }}}|S |r3|j                  «       D ��ci c]  \  }}t!        d„ |D «       «      |“Œ }}}|S c c}w c c}}w c c}}w )z"dict {group name -> group indices}r9   r   c              3  óV   K  — | ]!  }t        |«      rt        j                  n|–— Œ# y ­wrI   )r   r.   rÃ   )Ú.0Úcomps     r4   Ú	<genexpr>z&BaseGrouper.indices.<locals>.<genexpr>œ  s    è ø€ ÐIÁS¸T¤D¨¤Jœ"Ÿ&š&°DÓ8ÁSùs   ‚'))r<   rî   r-   rý   r   rô   Úcodesr&   Úlevelsrí   r   ÚhasnansÚitemsr   r.   rÃ   Útuple)rN   rÇ   ÚpingÚ
codes_listÚhas_miÚkeyÚvalues          r4   rô   zBaseGrouper.indices‰  s'  € ô ˆt�~‰~Ó !Ò#¬
°4×3DÑ3DÔFVÔ(Wà—^‘^ AÑ&×.Ñ.‰Fà15·²Ó@±¨˜$Ÿ*›*°ˆJÐ@Ü% j°$·+±+Ó>ˆFØ�{Š{Ü × 1Ñ 1´:Ó>ˆFÙ˜d×/Ñ/×7Ò7àJPÏ,É,Ì.ôÙJX¹J¸CÀœd 3œi”B—F’F¨S°%Ñ7È.ð ñ ð ˆñ ð
 '-§l¡l¤nôñ '5™
˜˜Uô ÑIÁSÓIÓIÈ5ÑPØ&4ð ñ ð ˆùò! Aùó
ùó
s   ÁD;Ã(E ÄEc                ó  — | j                   }| j                  r8t        j                  |dk\  «      }t        j                  |dk(  «      |   }||   }t        || j                  «      }| j                  r|t        j                  |«      z  }|S )zR
        Get the original integer locations of result_index in the input.
        r   rÐ   )rÒ   rM   r.   Úwhererr   r%   r’   Útake)rN   rÒ   r¤   Ú	null_gapsrÇ   s        r4   r	  zBaseGrouper.result_ilocs¢  s{   € ð �h‰hˆà×ÒÜ—8‘8˜C 1™HÓ%ˆDäŸ	™	 #¨¡)Ó,¨TÑ2ˆIØ�d‘)ˆCä'¨¨T¯\©\Ó:ˆà×Òà”b—g‘g˜i¨Ó0Ñ0ˆFàˆr6   c                óT   — | j                   D �cg c]  }|j                  ‘Œ c}S c c}w rI   )rî   r  ©rN   r  s     r4   r  zBaseGrouper.codes»  s"   € à'+§~¢~Ó6¡~˜t�—
“
 ~Ñ6Ð6ùÒ6ó   �%c                óŠ   — t        | j                  «      dkD  rt        | j                  j                  «      S | j                  gS ©Nr9   )r<   rî   Úlistrý   r  rñ   s    r4   r  zBaseGrouper.levels¿  s9   € äˆt�~‰~Ó Ò"ä˜×)Ñ)×0Ñ0Ó1Ð1à×%Ñ%Ð&Ð&r6   c                óT   — | j                   D �cg c]  }|j                  ‘Œ c}S c c}w rI   )rî   rU   r  s     r4   ÚnameszBaseGrouper.namesÇ  s"   € à&*§n¢nÓ5¡n˜d�—	“	 nÑ5Ð5ùÒ5r   c                ó¨   — | j                   }| j                  }|rt        j                  ||dk7     |¬«      }ng }t	        || j
                  dd¬«      S )z&
        Compute group sizes.
        rÐ   )Ú	minlengthr¢   F)Úindexr3   r¶   )rÒ   r’   r.   Úbincountr!   rý   )rN   rÒ   r’   r¸   s       r4   rE   zBaseGrouper.sizeË  sM   € ð
 �h‰hˆØ—,‘,ˆáÜ—+‘+˜c #¨¡)™n¸Ô@‰CàˆCÜ�c ×!2Ñ!2¸'ÈÔNÐNr6   c                ó–  — t        | j                  «      dk(  r| j                  d   j                  S | j                  \  }}|j                  }t        j                  |t        t        |«      «      ¬«      }|j                  «       j                  «       D ��ci c]$  \  }}||   | j                  j                  |«      “Œ& }}}|S c c}}w )ú!dict {group name -> group labels}r9   r   )Ú
categories)r<   rî   ÚgroupsÚresult_index_and_idsr8   r   Ú
from_codesÚrangeÚ_reverse_indexerr  rÎ   r  )rN   rý   rÒ   rŒ   r,  ÚgroupÚ
axis_ilocsrÇ   s           r4   r-  zBaseGrouper.groupsÙ  s¿   € ô ˆt�~‰~Ó !Ò#Ø—>‘> !Ñ$×+Ñ+Ð+Ø ×5Ñ5Ñˆ�cØ×%Ñ%ˆÜ ×+Ñ+¨C¼EÄ#ÀlÓBSÓ<TÔUˆ
ð &0×%@Ñ%@Ó%B×%HÑ%HÔ%Jô
ñ &KÑ!��zð �5‰M˜4Ÿ9™9Ÿ>™>¨*Ó5Ñ5Ø%Jð 	ñ 
ð
 ˆùó
s   Â)Cc                óD   — t        | j                  d¬«      j                  S )NFrµ   )r   rÒ   Úis_monotonic_increasingrñ   s    r4   Úis_monotoniczBaseGrouper.is_monotonicè  s   € ô �T—X‘X EÔ*×BÑBÐBr6   c                óN   — t        | j                  dk  j                  «       «      S )zE
        Whether grouper has null value(s) that are dropped.
        r   )r¡   rÒ   rA   rñ   s    r4   rM   zBaseGrouper.has_dropped_naî  s    € ô �T—X‘X ‘\×&Ñ&Ó(Ó)Ð)r6   c                ó   — | j                   S rI   ©rÒ   rñ   s    r4   Ú
codes_infozBaseGrouper.codes_infoö  s   € ð �x‰xˆr6   c                ó,   — t        | j                  «      S rI   )r<   rý   rñ   s    r4   r’   zBaseGrouper.ngroupsû  s   € ô �4×$Ñ$Ó%Ð%r6   c                ó    — | j                   d   S )Nr   ©r.  rñ   s    r4   rý   zBaseGrouper.result_index   ó   € à×(Ñ(¨Ñ+Ð+r6   c                ó    — | j                   d   S r"  r=  rñ   s    r4   rÒ   zBaseGrouper.ids  r>  r6   c           
     óè
  — | j                   D �cg c]#  }t        j                  |j                  d¬«      ‘Œ% }}| j                   D �cg c]  }|j                  xs |j
                   ‘Œ }}| j                   D �cg c]  }|j                  ‘Œ }}t        t        | j                   |d¬«      «      D ]3  \  }\  }}|j
                  sŒ|j                  |j                  «      ||<   Œ5 t        | j                   «      dk(  r5|d   }| j                  d   |_        t        | j                  d   «      }||fS t!        |«      r/| j#                  || j                  | j                  |«      \  }}||fS t%        |«      s.| j'                  || j                  | j                  «      \  }}||fS | j                  }	| j                   D �cg c]  }|j                  ‘Œ }
}t        |«      D ��cg c]
  \  }}|sŒ	|‘Œ }}}t        |«      D ��cg c]
  \  }}|rŒ	|‘Œ }}}| j#                  |D �cg c]  }||   ‘Œ	 c}|D �cg c]  }|
|   ‘Œ	 c}|D �cg c]  }|	|   ‘Œ	 c}|D �cg c]  }||   ‘Œ	 c}¬«      \  }}| j'                  |D �cg c]  }||   ‘Œ	 c}|D �cg c]  }|
|   ‘Œ	 c}|D �cg c]  }|	|   ‘Œ	 c}¬«      \  }}t)        j*                  t)        j,                  |j                  t        |«      «      t)        j.                  |j                  t        |«      d¬	«      gd¬	«      }t)        j0                  ||z   d¬
«      \  }}t3        t5        |j6                  «      t5        |j6                  «      z   |t5        |j                  «      t5        |j                  «      z   ¬«      j9                  |«      }t        |«      |z  |z   }t%        |«      r½t        |«      }t        t;        |«      d«      D ��cg c]  \  }}|s||z
  ‘Œ }}}t        |«      dkD  r |j=                  |«      j?                  «       }n|j?                  «       }|jA                  |«      }t)        j0                  |d¬
«      \  }}t        |«      }|jA                  |«      }nstC        |d¬«      \  }}t        |«      }t)        j*                  |t)        jD                  t)        jF                  t        |«      «      |«      g«      }|jA                  |«      }| jH                  r t)        jJ                  |dk  |dk  z  d|«      }||fS c c}w c c}w c c}w c c}w c c}}w c c}}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}}w )NFrµ   Trú   r9   r   )r  r  r%  Úsorts)r  r  r%  ©rÎ   ©Úreturn_index©rï   rÐ   )&rî   r   Ú_with_inferÚuniquesÚ	_observedÚ_passed_categoricalrì   Ú	enumeraterþ   Úset_categoriesÚ
_orig_catsr<   r%  rU   r   r  rB   Ú_ob_index_and_idsrA   Ú_unob_index_and_idsr.   ÚconcatenateÚtileÚrepeatÚuniquer   r#  r  Úreorder_levelsÚreversedÚ_drop_level_numbersÚargsortr  r"   ÚdeleteÚarangerí   r  )rN   r  r  ÚobsrA  ÚkÚlevelrý   rÒ   r%  r  ÚidxÚobÚ
ob_indicesÚunob_indicesÚob_indexÚob_idsÚ
unob_indexÚunob_idsÚresult_index_codesÚ_r(  Ún_levelsrï   Údrop_levelsÚsorterrG  Útakers                               r4   r.  z BaseGrouper.result_index_and_ids  s  € ð EIÇNÂNó
ÙDR¸DŒE×Ñ˜dŸl™l°Ö7ÀNð 	ð 
ð HLÇ~Â~ó
ÙGU¸tˆD�N‰NÒ: $×":Ñ":Ð:Ñ:À~ð 	ð 
ð )-¯ªÓ7© �—“¨ˆÐ7ä )¬#¨d¯n©n¸fÈTÔ*RÖ SÑˆA‰}��eØ×'Ó'Ø!×0Ñ0°·±ÓA��q’	ð !Tô ˆt�~‰~Ó !Ò#Ø! !™9ˆLØ $§
¡
¨1¡ˆLÔÜ% d§j¡j°¡mÓ4ˆCðP ˜SÐ Ð ôO �ŒXØ $× 6Ñ 6Ø˜Ÿ
™
 D§J¡J°ó!ÑˆL˜#ðL ˜SÐ Ð ôG �S”Ø $× 8Ñ 8¸ÀÇÁÈTÏZÉZÓ XÑˆL˜#ðD ˜SÐ Ð ð —J‘JˆEØ,0¯NªNÓ;©N D�T—Z“Z¨NˆEÐ;Ü-6°s¬^ÔB©^¡' # rºrš#¨^ˆJÑBÜ/8¸¬~ÔH©~¡G C¨ÂRšC¨~ˆLÑHØ#×5Ñ5Ù/9Ó:©z¨˜˜s›¨zÑ:Ù-7Ó8©Z c�u˜S“z¨ZÑ8Ù-7Ó8©Z c�u˜S“z¨ZÑ8Ù-7Ó8©Z c�u˜S“z¨ZÑ8ð	  6ó  ÑˆH�fð $(×#;Ñ#;Ù/;Ó<©|¨˜˜s›¨|Ñ<Ù-9Ó:©\ c�u˜S“z¨\Ñ:Ù-9Ó:©\ c�u˜S“z¨\Ñ:ð $<ó $Ñ ˆJ˜ô "$§¡ä—G‘G˜J×,Ñ,¬c°(«mÓ<Ü—I‘I˜hŸn™n¬c°*«oÀAÔFðð ô"Ðô —y‘y °
Ñ!:ÈÔN‰HˆAˆuÜ%Ü˜J×-Ñ-Ó.´°h·o±oÓ1FÑFØ(Ü˜:×+Ñ+Ó,¬t°H·N±NÓ/CÑCô÷ ‰n˜UÓ#ð	 ô �j“/ FÑ*¨XÑ5ˆCä�5Œzä˜u›:�ô &/¬x¸«ÀÔ%Bôá%B™	˜˜TÙð ˜s“NØ%Bð ñ ô
 �{Ó# aÒ'Ø)×=Ñ=¸kÓJ×RÑRÓT‘Fà)×1Ñ1Ó3�FØ+×0Ñ0°Ó8�ÜŸ9™9 V¸$Ô?‘��5Ü)¨#Ó.�Ø—j‘j “o‘ô  4°C¸eÔD‘��WÜ)¨#Ó.�ÜŸ™ØœbŸi™i¬¯	©	´#°lÓ2CÓ(DÀgÓNÐOó�ð  ,×0Ñ0°Ó7�à�{Š{Ü—h‘h ¨¡
¨x¸!©|Ñ<¸bÀ#ÓF�à˜SÐ Ð ùòo
ùò
ùò 8ùò& <ùÛBùÛHùâ:ùÚ8ùÚ8ùÚ8ùò =ùÚ:ùÚ:ùó0s_   �(T+Á"T0Á9T5Æ?T:Ç"
T?Ç-T?È
UÈUÈ#UÈ5U
ÉUÉUÉ?UÊU$
Ê#U)Ï.U.c                óV   — t        d„ | j                  D «       «      r| S | j                  S )Nc              3  ó4   K  — | ]  }|j                   –— Œ y ­wrI   )rH  )r  r  s     r4   r  z/BaseGrouper.observed_grouper.<locals>.<genexpr>e  s   è ø€ Ð9©. $ˆt�~�~©.ùs   ‚)rB   rî   Ú_observed_grouperrñ   s    r4   Úobserved_grouperzBaseGrouper.observed_grouperc  s%   € äÑ9¨$¯.ª.Ó9Ô9ØˆKà×%Ñ%Ð%r6   c                ó°   — | j                   D �cg c]  }|j                  ‘Œ }}t        | j                  || j                  | j
                  ¬«      }|S c c}w )N)rï   rí   )rî   Úobserved_groupingré   rÎ   rì   rí   )rN   r  rî   r   s       r4   rl  zBaseGrouper._observed_grouperj  sG   € à8<¿ºÓG¹°�T×+Ó+¸ˆ	ÐGÜ˜dŸi™i¨¸¿¹ÈDÏKÉKÔXˆØˆùò Hs   �Ac                óÖ  ‡— t        ˆfd„‰dd  D «       «      }|r‰d   nd}t        d„ |D «       «      }t        ||dd¬«      }t        ||¬«      \  }	}
t	        |	«      }	t        |	|
||d¬	«      }t        |||d¬
«      }|s×t        |«      dkD  rÉt        ‰«      }t        t        ‰«      d«      D ��cg c]  \  }}|s||z
  ‘Œ }}}t        |«      dkD  r |j                  |«      j                  «       }n|j                  «       }|j                  |«      }t        j                  |d¬«      \  }}t        j                  |	dk(  d|j                  |	«      «      }	t	        |	«      }	||	fS c c}}w )Nc              3  ó.   •K  — | ]  }‰d    |k(  –— Œ y­w)r   Nr¼   )r  rï   rA  s     €r4   r  z0BaseGrouper._ob_index_and_ids.<locals>.<genexpr>w  s   øè ø€ Ð H¹i°d  q¡¨TÕ!1¹iùs   ƒr9   r   Fc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrI   ©r<   ©r  r[  s     r4   r  z0BaseGrouper._ob_index_and_ids.<locals>.<genexpr>y  ó   è ø€ Ð5©f U”c˜%—j©fùó   ‚T©rï   ÚxnullrE  )rx  )r  r  r%  Úverify_integrityrC  rÐ   )rB   r  r$   r"   r   r#   r   r<   rJ  rT  rU  rV  r  r.   rR  r  )rN   r  r  r%  rA  Úconsistent_sortingÚsort_in_compressr‘   Úgroup_indexra  Úobs_group_idsÚob_index_codesr`  rf  r\  rï   rg  rh  re  r(  s       `               r4   rM  zBaseGrouper._ob_index_and_idsp  su  ø€ ô !Ó H¸eÀAÀB¹iÓ HÓHÐÙ'9˜5 š8¸uÐÜÑ5©fÓ5Ó5ˆÜ% e¨U¸ÀTÔJˆÜ 4°[ÐGWÔ XÑˆ�Ü$ VÓ,ˆÜ-Ø�M 5¨%°tô
ˆô ØØ ØØ"ô	
ˆñ "¤c¨(£m°aÒ&7ä˜5“zˆHô "+¬8°E«?¸AÔ!>ôá!>‘I�C˜Ùð ˜3“Ø!>ð ñ ô
 �;Ó !Ò#Ø!×5Ñ5°kÓB×JÑJÓL‘à!×)Ñ)Ó+�Ø—}‘} VÓ,ˆHÜ—y‘y °dÔ;‰HˆAˆuÜ—X‘X˜f¨™l¨B°·
±
¸6Ó0BÓCˆFÜ$ VÓ,ˆØ˜ÐÐùós   Â0E%c                ó�   — t        d„ |D «       «      }t        ||dd¬«      }t        j                  ||¬«      }t	        |«      }||fS )Nc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrI   rs  rt  s     r4   r  z2BaseGrouper._unob_index_and_ids.<locals>.<genexpr>ž  ru  rv  Trw  )r%  )r  r$   r   Úfrom_productr   )rN   r  r  r%  r‘   rc  rb  s          r4   rN  zBaseGrouper._unob_index_and_ids˜  sK   € ô Ñ5©fÓ5Ó5ˆÜ" 5¨%°dÀ$ÔGˆÜ×,Ñ,¨V¸5ÔAˆ
Ü& xÓ0ˆØ˜8Ð#Ð#r6   c              #  óÂ   K  — | j                   }t        | j                  «      dk(  r|–— y t        |j                  dz
  dd«      D ]  }|j                  |«      –— Œ y ­w)Nr9   rÐ   )rý   r<   rî   r0  ÚnlevelsÚget_level_values)rN   rý   r[  s      r4   Úget_group_levelszBaseGrouper.get_group_levels¤  sZ   è ø€ ð ×(Ñ(ˆÜˆt�~‰~Ó !Ò#ØÓä˜|×3Ñ3°aÑ7¸¸RÖ@�Ø"×3Ñ3°EÓ:Ó:ñ Aùs   ‚AAc           	     ó–   — |dv sJ ‚t        ||| j                  ¬«      } |j                  d|||| j                  | j                  dœ|¤ŽS )z;
        Returns the values of a cython operation.
        )rv   ru   rJ   )rŒ   rÎ   r¨   r©   r’   r¼   )r@   rM   rÔ   rÒ   r’   )rN   rK   rŒ   rL   rÎ   r¨   r¬   Úcy_ops           r4   Ú_cython_operationzBaseGrouper._cython_operation²  sb   € ð Ð1Ñ1Ð1Ð1ä T¨sÀ4×CVÑCVÔWˆà%ˆu×%Ñ%ð 
ØØØØ—X‘XØ—L‘Lñ
ð ñ
ð 	
r6   c                ó\   — | j                  ||«      }|j                  j                  |«      S )a1  
        Parameters
        ----------
        obj : Series
        func : function taking a Series and returning a scalar-like
        preserve_dtype : bool
            Whether the aggregation is known to be dtype-preserving.

        Returns
        -------
        np.ndarray or ExtensionArray
        )Ú_aggregate_series_pure_pythonÚarrayÚ_cast_pointwise_result)rN   r2   rÆ   Úpreserve_dtyperÇ   s        r4   Ú
agg_serieszBaseGrouper.agg_seriesÌ  s+   € ð  ×3Ñ3°C¸Ó>ˆØ�y‰y×/Ñ/°Ó7Ð7r6   c                óø   — t        j                  | j                  d¬«      }d}| j                  |«      }t	        |«      D ]7  \  }} ||«      }t        |«      }|st        ||j                  «       d}|||<   Œ9 |S )NÚOr·   FT)r.   rÁ   r’   rü   rJ  r>   r5   r3   )	rN   r2   rÆ   rÇ   Úinitializedr   r‹   r2  r=   s	            r4   rŠ  z)BaseGrouper._aggregate_series_pure_pythonß  sy   € ô —‘˜$Ÿ,™,¨cÔ2ˆØˆà×%Ñ% cÓ*ˆä! (Ö+‰HˆAˆuÙ�u“+ˆCÜ  Ó%ˆCáä" 3¨¯©Ô4Ø"�àˆF�1ŠIð ,ð ˆr6   c                óx  — d}| j                  |«      }| j                  }g }t        ||d¬«      }|D ]Q  \  }}	t        j	                  |	d|«       |	j
                  }
 ||	«      }|st        ||
«      sd}|j                  |«       ŒS t        |«      dk(  r$t        |dd «      dv r ||j                  d d «       ||fS )NFTrú   rU   r   rÜ   )rb   rd   rQ   rS   )rü   rý   rþ   r0   Ú__setattr__ÚaxesÚ_is_indexed_likeÚappendr<   r€   Úiloc)rN   r‡   rÿ   Úmutatedr   Ú
group_keysÚresult_valuesÚzippedr  r2  Ú
group_axesr=   s               r4   Úapply_groupwisezBaseGrouper.apply_groupwiseõ  sÒ   € ð ˆØ×%Ñ% dÓ+ˆØ×&Ñ&ˆ
Øˆô �Z °$Ô7ˆã ‰JˆC�ô ×Ñ˜u f¨cÔ2ð Ÿ™ˆJÙ�E“(ˆCÙÔ#3°C¸Ô#DØ�Ø× Ñ  Õ%ð !ô ˆz‹?˜aÒ¤G¨A¨z¸4Ó$@ð E
ñ %
ñ ˆd�i‰i˜˜ˆmÔà˜gÐ%Ð%r6   c                óz   — | j                   j                  | j                  «      }t        | dd«      r||dk\     }|S )Nrí   Tr   )rÒ   r  r	  r€   )rN   rÇ   s     r4   r  zBaseGrouper._sorted_ids   s;   € ð —‘—‘˜t×0Ñ0Ó1ˆÜ�4˜ 4Ô(à˜F a™KÑ(ˆFØˆr6   N)TT)
rÎ   r   rî   úlist[grouper.Grouping]rï   r¡   rí   r¡   rÖ   r×   ©rÖ   rŸ  )rÖ   zIterator[Hashable]©rÖ   rÚ   )rÿ   r   rÖ   z#Iterator[tuple[Hashable, NDFrameT]])rÿ   r+   rÖ   ÚDataSplitter)rÖ   z$dict[Hashable, npt.NDArray[np.intp]]©rÖ   únpt.NDArray[np.intp])rÖ   z#list[npt.NDArray[np.signedinteger]]©rÖ   úlist[Index]©rÖ   úlist[Hashable])rÖ   r!   )rÖ   zdict[Hashable, Index]©rÖ   r¡   )rÖ   r   )rÖ   z"tuple[Index, npt.NDArray[np.intp]])rÖ   ré   )
r  r¦  r  úlist[npt.NDArray[np.intp]]r%  r¨  rA  z
list[bool]rÖ   ú'tuple[MultiIndex, npt.NDArray[np.intp]])r  r¦  r  rª  r%  r¨  rÖ   r«  )rÖ   zGenerator[Index])rÐ   )
rK   rÕ   rL   rÕ   rÎ   r   r¨   rÚ   rÖ   r
   )F)r2   r!   rÆ   r'   r�  r¡   rÖ   r
   )r2   r!   rÆ   r'   rÖ   znpt.NDArray[np.object_])r‡   r'   rÿ   zDataFrame | SeriesrÖ   ztuple[list, bool])&rÜ   rÝ   rÞ   rß   rå   rO   Úpropertyrî   rõ   r÷   r  r   rü   r   rô   r	  r  r  r%  rE   r-  r6  rM   r:  r’   rý   rÒ   r.  rm  rl  rM  rN  r…  rˆ  rŽ  rŠ  r�  r  r¼   r6   r4   ré   ré   <  sb  … ñð ƒKð Øðàðð *ðð ð	ð
 ðð 
óð òó ðó"ð ò#ó ð#ó4ð ò
ó ð
ð& òó ðð0 Øòó ó ðð. ò7ó ð7ð ò'ó ð'ð ò6ó ð6ð òOó ðOð òó ðð ØòCó ó ðCð Øò*ó ó ð*ð òó ðð Øò&ó ó ð&ð ò,ó ð,ð ò,ó ð,ð òX!ó ðX!ðt ò&ó ð&ð òó ðð
& àð& ð *ð& ð ð	& ð
 ð& ð 
1ó& ðP
$àð
$ð *ð
$ð ð	
$ð
 
1ó
$ð ò;ó ð;ð ð ð
àð
ð ð	
ð
 ð
ð ð
ð 
ò
ó ð
ð2 àBGð8Øð8Ø!)ð8Ø;?ð8à	ò8ó ð8ð$ ðØðØ!)ðà	 òó ðð* ð%&Øð%&Ø!3ð%&à	ò%&ó ð%&ðT Øòó ó ñr6   ré   c                  óê   — e Zd ZU dZded<   ded<   	 d	 dd„Zed„ «       Zedd	„«       Z	edd
„«       Z
dd„Zed„ «       Zedd„«       Zed„ «       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zy)Ú
BinGrouperaå  
    This is an internal Grouper class

    Parameters
    ----------
    bins : the split index of binlabels to group the item of axis
    binlabels : the label list
    indexer : np.ndarray[np.intp], optional
        the indexer created by Grouper
        some groupers (TimeGrouper) will sort its axis and its
        group_info is also sorted, so need the indexer to reorder

    Examples
    --------
    bins: [2, 4, 6, 8, 10]
    binlabels: DatetimeIndex(['2005-01-01', '2005-01-03',
        '2005-01-05', '2005-01-07', '2005-01-09'],
        dtype='datetime64[ns]', freq='2D')

    the group_info, which contains the label of each item in grouped
    axis, the index of label in label list, group number, is

    (array([0, 0, 1, 1, 2, 2, 3, 3, 4, 4]), array([0, 1, 2, 3, 4]), 5)

    means that, the grouped axis has 10 items, can be grouped into 5
    labels, the first and second items belong to the first label, the
    third and forth items belong to the second label, and so on

    znpt.NDArray[np.int64]Úbinsr   Ú	binlabelsNc                ó¬   — t        |«      | _        t        |«      | _        || _        t        | j                  «      t        | j                  «      k(  sJ ‚y rI   )r   r¯  r    r°  Úindexerr<   )rN   r¯  r°  r²  s       r4   rO   zBinGrouper.__init__L  sD   € ô ! Ó&ˆŒ	Ü% iÓ0ˆŒØˆŒô �4—>‘>Ó"¤c¨$¯)©)£nÒ4Ð4Ñ4r6   c                óŒ   — t        | j                  | j                  d¬«      D ��ci c]  \  }}|t        ur||“Œ }}}|S c c}}w )r+  Trú   )rþ   r°  r¯  r   )rN   r  r  rÇ   s       r4   r-  zBinGrouper.groupsZ  sP   € ô " $§.¡.°$·)±)ÀDÕIô
áI‘
��UØœ#‰~ð �‰JØIð 	ñ 
ð
 ˆùó
s   ¦A c                 ó   — yr"  r¼   rñ   s    r4   r÷   zBinGrouper.nkeysf  s   € ð r6   c                ó‚   — | j                   }| j                  �&t        j                  || j                  f«      }||   }|S rI   )rÒ   r²  r.   Úlexsort)rN   rÒ   rh  s      r4   r:  zBinGrouper.codes_infok  s<   € ð �h‰hˆØ�<‰<Ð#Ü—Z‘Z  d§l¡lÐ 3Ó4ˆFØ�f‘+ˆCØˆ
r6   c              #  óð   ‡K  — ˆfd„}d}t        | j                  | j                  d¬«      D ]  \  }}|t        ur| |||«      f–— |}Œ |t	        ‰«      k  r| j                  d    ||d«      f–— yy­w)rù   c                ó"   •— ‰j                   | | S rI   )r—  )ÚstartÚedgerÿ   s     €r4   Ú<lambda>z)BinGrouper.get_iterator.<locals>.<lambda>}  s   ø€  T§Y¡Y¨u°TÑ%:r6   r   Trú   rÐ   N)rþ   r¯  r°  r   r<   )rN   rÿ   Úslicerr¹  rº  Úlabels    `    r4   r  zBinGrouper.get_iteratort  s€   øè ø€ ó ;ˆà !ˆÜ˜tŸy™y¨$¯.©.À×F‰KˆD�%ØœCÑØ™V E¨4Ó0Ð0Ò0Ø‰Eð Gð
 ”3�t“9ÒØ—.‘. Ñ$¡f¨U°DÓ&9Ð9Ó9ð ùs   ƒA3A6c                óà   — t        j                  t        «      }d}t        | j                  | j
                  d¬«      D ]-  \  }}||k  sŒ|t        urt        t        ||«      «      ||<   |}Œ/ |S ©Nr   Trú   )ÚcollectionsÚdefaultdictr#  rþ   r°  r¯  r   r0  )rN   rô   r‹   r½  Úbins        r4   rô   zBinGrouper.indicesˆ  sf   € ä×)Ñ)¬$Ó/ˆàˆÜ˜dŸn™n¨d¯i©iÀ×E‰JˆE�3Ø�3‹wØ¤Ñ#Ü%)¬%°°3«-Ó%8�G˜E‘NØ‘ð	 Fð
 ˆr6   c                ó   — | j                   gS rI   r9  rñ   s    r4   r  zBinGrouper.codes”  s   € à—‘ˆzÐr6   c                ó.  — | j                   }t        | j                   «      dk7  rt        | j                   d   «      r|dd  }t        |«      }t        j                  t        j
                  d| j                  f   «      }t        |«      }|t        | j                  «      k(  r*t        j                  t        j                  |«      |«      }n<t        j                  t        j
                  dt        j                  |«      f   |«      }t        |«      }||fS )Nr   r9   rÐ   )
r°  r<   r   r.   ÚdiffÚr_r¯  r   rQ  rX  )rN   rý   r’   ÚreprÒ   s        r4   r.  zBinGrouper.result_index_and_ids˜  sÐ   € à—~‘~ˆÜˆt�~‰~Ó !Ò#¬¨T¯^©^¸AÑ->Ô(?Ø'¨¨Ð+ˆLä�lÓ#ˆÜ�g‰g”b—e‘e˜A˜tŸy™y˜LÑ)Ó*ˆä! #Ó&ˆØ”c˜$Ÿ)™)“nÒ$Ü—)‘)œBŸI™I gÓ.°Ó4‰Cä—)‘)œBŸE™E "¤b§i¡i°Ó&8Ð"8Ñ9¸3Ó?ˆCÜ! #Ó&ˆà˜SÐ Ð r6   c                ó   — | j                   gS rI   )r°  rñ   s    r4   r  zBinGrouper.levelsª  s   € à—‘ÐÐr6   c                ó0   — | j                   j                  gS rI   )r°  rU   rñ   s    r4   r%  zBinGrouper.names®  s   € à—‘×#Ñ#Ð$Ð$r6   c                ó¢   — | j                   }| j                  }|j                  |«      }t        j                  ||dd |j
                  ¬«      }|gS )NF)Úin_axisr[  rG  )r°  rÒ   r  r   ÚGroupingr8   )rN   Úlevr  rº   r  s        r4   rî   zBinGrouper.groupings²  sI   € à�n‰nˆØ—‘ˆØ—‘˜%“ˆÜ×ÑØ�F E°¸s¿{¹{ô
ˆð ˆvˆr6   c                ó   — | S rI   r¼   rñ   s    r4   rm  zBinGrouper.observed_grouper¼  s   € àˆr6   rI   ©rÖ   r×   r¡  r£  )rÿ   r+   )rÖ   rª  r¥  r§  r   )rÖ   r®  )rÜ   rÝ   rÞ   rß   rå   rO   r   r-  r¬  r÷   r:  r  rô   r  r.  r  r%  rî   rm  r¼   r6   r4   r®  r®  *  sö   … ñð<  ÓØÓð ð	5ð
 
ó5ð ñ	ó ð	ð òó ðð òó ðó:ð( ñ	ó ð	ð òó ðð ñ!ó ð!ð" ò ó ð ð ò%ó ð%ð òó ðð òó ñr6   r®  c                óÚ   — t        | t        «      r-t        |«      dkD  ry| j                  j	                  |d   «      S t        | t
        «      r| j                  j	                  |d   «      S y)Nr9   Fr   )r-   r!   r<   r(  Úequalsr   )r2   r”  s     r4   r•  r•  Á  sY   € Ü�#”vÔÜˆt‹9�qŠ=ØØ�y‰y×Ñ  Q¡Ó(Ð(Ü	�CœÔ	#Ø�y‰y×Ñ  Q¡Ó(Ð(àr6   c                  óJ   — e Zd Z	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zedd„«       Zd	d„Zy)
r¢  c               ó<   — || _         || _        || _        || _        y rI   )rÿ   r’   Ú_slabelsÚ	_sort_idx)rN   rÿ   r’   r  r  s        r4   rO   zDataSplitter.__init__Ñ  s    € ð ˆŒ	ØˆŒà"ˆŒØ!ˆ�r6   c              #  ó  K  — | j                   dk(  ry t        j                  | j                  | j                   «      \  }}| j                  }t        ||d¬«      D ]#  \  }}| j                  |t        ||«      «      –— Œ% y ­wr¿  )r’   r	   Úgenerate_slicesrÔ  Ú_sorted_datarþ   Ú_chopÚslice)rN   ÚstartsÚendsÚsdatar¹  Úends         r4   rõ   zDataSplitter.__iter__ß  so   è ø€ Ø�<‰<˜1Òð ä×*Ñ*¨4¯=©=¸$¿,¹,ÓG‰ˆ�Ø×!Ñ!ˆÜ˜f d°4×8‰JˆE�3Ø—*‘*˜U¤E¨%°Ó$5Ó6Ó6ñ 9ùs   ‚A?Bc                óP   — | j                   j                  | j                  d¬«      S )Nr   rB  )rÿ   r  rÕ  rñ   s    r4   rØ  zDataSplitter._sorted_dataê  s   € à�y‰y�~‰~˜dŸn™n°1ˆ~Ó5Ð5r6   c                ó   — t        | «      ‚rI   r   )rN   rÝ  Ú	slice_objs      r4   rÙ  zDataSplitter._chopî  s   € Ü! $Ó'Ð'r6   N)
rÿ   r   r’   rÚ   r  r¤  r  r¤  rÖ   r×   )rÖ   r*   )rÖ   r   )rá  rÚ  rÖ   r+   )rÜ   rÝ   rÞ   rO   rõ   r   rØ  rÙ  r¼   r6   r4   r¢  r¢  Ð  sU   „ ð"àð"ð ð"ð
 'ð"ð )ð"ð 
ó"ó	7ð ò6ó ð6ô(r6   r¢  c                  ó   — e Zd Zdd„Zy)r  c                óº   — |j                   j                  |«      }|j                  ||j                  ¬«      }|j                  |_        |j                  |d¬«      S )N©r”  Úgroupby©Úmethod)Ú_mgrÚ	get_sliceÚ_constructor_from_mgrr”  rU   Ú_nameÚ__finalize__)rN   rÝ  rá  ÚmgrÚsers        r4   rÙ  zSeriesSplitter._chopó  sP   € à�j‰j×"Ñ" 9Ó-ˆØ×)Ñ)¨#°C·H±HÐ)Ó=ˆØ—J‘JˆŒ	Ø×Ñ ¨iÐÓ8Ð8r6   N)rÝ  r!   rá  rÚ  rÖ   r!   ©rÜ   rÝ   rÞ   rÙ  r¼   r6   r4   r  r  ò  s   „ ô9r6   r  c                  ó   — e Zd Zdd„Zy)r  c                óœ   — |j                   j                  |d¬«      }|j                  ||j                  ¬«      }|j	                  |d¬«      S )Nr9   rB  rä  rå  ræ  )rè  ré  rê  r”  rì  )rN   rÝ  rá  rí  Údfs        r4   rÙ  zFrameSplitter._chopü  sI   € ð �j‰j×"Ñ" 9°1Ð"Ó5ˆØ×(Ñ(¨°3·8±8Ð(Ó<ˆØ�‰˜u¨YˆÓ7Ð7r6   N)rÝ  r   rá  rÚ  rÖ   r   rï  r¼   r6   r4   r  r  û  s   „ ô8r6   r  rÏ  r©  )Krß   Ú
__future__r   rÀ  rá   Útypingr   r   r   r   Únumpyr.   Úpandas._libsr   r	   Úpandas._libs.groupbyÚ_libsrå  r�   Úpandas._typingr
   r   r   r   r   Úpandas.errorsr   Úpandas.util._decoratorsr   Úpandas.core.dtypes.castr   Úpandas.core.dtypes.commonr   r   r   r   r   Úpandas.core.dtypes.missingr   r   Úpandas.core.arraysr   Úpandas.core.framer   Úpandas.core.groupbyr   Úpandas.core.indexes.apir   r   r   r    Úpandas.core.seriesr!   Úpandas.core.sortingr"   r#   r$   r%   r&   Úcollections.abcr'   r(   r)   r*   Úpandas.core.genericr+   r5   r>   r@   ré   r®  r•  r¢  r  r  r¼   r6   r4   Ú<module>r     sñ   ðñõ #ã Û ÷ó ó ÷÷ *Ð )÷õ õ .Ý 2õ÷õ ÷õ
 +Ý 'Ý '÷ó õ &÷õ ñ ÷ó õ ,ó>ò÷O
ñ O
÷dkñ kô\T�ô Tónô(�7˜8Ñ$ô (ôD9�\ô 9ô8�Lõ 8r6   