ó
    Ñ]j ¤  ã                  ó  • S r SSKJr  SSKrSSKrSSKJrJrJrJ	r	  SSK
rSSKJrJr  SSKJs  Jr  SSKJrJrJrJrJr  SSKJr  SSKJr  SS	KJr  SS
KJ r J!r!J"r"J#r#J$r$  SSK%J&r&J'r'  SSK(J)r)  SSK*J+r+  SSK,J-r-  SSK.J/r/J0r0J1r1J2r2  SSK3J4r4  SSK5J6r6J7r7J8r8J9r9J:r:  \(       a  SSK;J<r<J=r=J>r>J?r?  SSK@JArA  S#S jrBS rC " S S5      rD " S S5      rE " S S\E5      rFS$S jrG " S S\\   5      rH " S S \H5      rI " S! S"\H5      rJg)%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                ón   • [        U [        R                  5      (       a  U[        :w  a  [	        S5      eg g )NzMust produce aggregated value)Ú
isinstanceÚnpÚndarrayÚobjectÚ
ValueError)ÚobjÚdtypes     ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/pandas/core/groupby/ops.pyÚcheck_result_arrayr5   Q   s4   € ô �#”r—z‘z×"Ñ"Ø”F‹?ô Ð<Ó=Ð=ð ð #ó    c                óˆ   • [        U S5      (       a0  U R                  n U R                  S:X  a  [        U 5      S:X  a  U S   n U $ )zV
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  • \ rS rSr% Sr\" / SQ5      rS@S jr0 S\R                  " \
R                  SS9_S\R                  " \
R                  SS9_SS	_S
S_S\R                  " \
R                  SS9_S\R                  " \
R                  SS9_SS_SS_SS_SS_SS_S\R                  " \
R                  SS9_S\R                  " \
R                  SS9_SS_SS_SS _S!S"_S#S$0ES%S&S'S(S)S*.S+.rS,\S-'   S#S.0r\SAS/ j5       r\\R&                          SBS0 j5       5       rSCS1 jrSDS2 jrSES3 jrSES4 jr\S5S5S6S7.               SFS8 jj5       r\S6S9.               SFS: jj5       r\SGS; j5       r\S<S=.           SHS> jj5       rS?rg5)IÚWrappedCythonOpéj   a  
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                ó(   • Xl         X l        X0l        g ©N©ÚkindÚhowÚhas_dropped_na)ÚselfrL   rM   rN   s       r4   Ú__init__ÚWrappedCythonOp.__init__~   s   € ØŒ	ØŒØ,Õr6   rB   )Úval_testrC   ÚsumÚ	group_sumÚprodÚ
group_prodrG   )ÚnamerH   Ú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ÚcummaxrD   )Ú	aggregateÚ	transformzdict[str, dict]Ú_CYTHON_FUNCTIONSé   c                ó*   • XR                   S   ;   a  gg)Nrw   rx   )ry   )ÚclsrM   s     r4   Úget_kind_from_howÚ!WrappedCythonOp.get_kind_from_how£   s   € à×'Ñ'¨Ñ4Ó4ØØr6   c                ó„  • UR                   nU R                  U   U   n[        U5      (       a  UnO[        [        U5      nU(       a  U$ U[
        R                  " [        5      :X  aM  US;   a  [        SU SU S35      eUS;   a  U$ US;   a   U$ SUR                  ;  a  [        SU SU S35      eU$ [        SU5      e)	N)r^   rs   z2function is not implemented for this dtype: [how->z,dtype->Ú])rb   rc   rG   rH   ©rd   rf   r0   zPThis should not be reached. Please report a bug at github.com/pandas-dev/pandas/)
rW   ry   ÚcallableÚgetattrÚ
libgroupbyr.   r3   r0   ÚNotImplementedErrorÚ__signatures__)r|   rL   rM   r3   Ú
is_numericÚ	dtype_strÚftypeÚfs           r4   Ú_get_cython_functionÚ$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                óP  • U R                   nUS;   a  [        U5      nU$ UR                  R                  S;   al  US;   d!  U R                  S:X  a  U R                  (       a  [        U5      nU$ US;   a2  UR                  R                  S:X  a  [        U5      nU$ [        U5      nU$ )z–
Cast numeric dtypes to float64 for functions that only support that.

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

Returns
-------
values : np.ndarray
)r^   rb   rc   rd   rf   Úiu)r`   r\   rx   )rS   rl   rU   rt   rs   Úi)rM   r   r3   rL   rN   r   r   )rO   ÚvaluesrM   s      r4   Ú_get_cython_valsÚ WrappedCythonOp._get_cython_valsÖ   s«   € ð �h‰hˆàÐ:Ó:ô $ FÓ+ˆFð" ˆð �\‰\×Ñ $Ó&Ø�oÓ%Ø—	‘	˜[Ó(¨T×-@×-@ô (¨Ó/�ð ˆð ÐDÓDà—<‘<×$Ñ$¨Ó+Ü)¨&Ó1�Fð ˆô +¨6Ó2�Fàˆr6   c                óô   • U R                   nU R                  nU R                  R                  US5      nUS:X  a  X4nU$ US:”  a  [	        S5      eUS:X  a  UR
                  nU$ U/UR
                  SS  Q7nU$ )Nr9   rl   z<arity of more than 1 is not supported for the 'how' argumentrx   )rM   rL   Ú_cython_arityÚgetr…   Úshape)rO   Úngroupsr�   rM   rL   ÚarityÚ	out_shapes          r4   Ú_get_output_shapeÚ!WrappedCythonOp._get_output_shapeû   s™   € Ø�h‰hˆØ�y‰yˆà×"Ñ"×&Ñ& s¨AÓ.ˆð �&‹=Ø Ð(ˆIð Ðð �Q‹YÜ%ØNóð ð �[Ó ØŸ™ˆIð Ðð !Ð4 6§<¡<°°Ð#3Ñ4ˆIØÐr6   c                óÄ   • U R                   nUS:X  a  SnO6US;   a  SnO-UR                  S;   a  UR                   UR                   3nOSn[        R                  " U5      $ )NrD   Úfloat64©rG   rH   ÚintpÚiufcbr0   )rM   rL   Úitemsizer.   r3   )rO   r3   rM   Ú	out_dtypes       r4   Ú_get_out_dtypeÚWrappedCythonOp._get_out_dtype  s^   € Ø�h‰hˆà�&‹=Ø!‰IØÐ(Ó(ð ‰IØ�Z‰Z˜7Ó"Ø Ÿ:™:˜, u§~¡~Ð&6Ð7‰Ià ˆIÜ�xŠx˜	Ó"Ð"r6   c                óL  • U R                   nUS;   aE  U[        R                  " [        5      :X  a$  [        R                  " [        R                  5      $  U$ US;   aF  UR
                  S;   a  U$ UR
                  S;   a$  [        R                  " [        R                  5      $ U$ )z¼
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.
)rS   rt   rS   rU   rs   )r\   r^   r`   rb   rc   ÚfcÚiub)rM   r.   r3   ÚboolÚint64rL   r�   )rO   r3   rM   s      r4   Ú_get_result_dtypeÚ!WrappedCythonOp._get_result_dtype  s…   € ð �h‰hˆàÐ=Ó=ØœŸš¤›Ó&Ü—x’x¤§¡Ó)Ð)ð 'ð ˆð Ð;Ó;Ø�z‰z˜TÓ!Ø�Ø—‘˜uÓ$Ü—x’x¤§
¡
Ó+Ð+Øˆr6   Nr   )ÚmaskÚresult_maskÚinitialc          
     ó  • UR                   S:X  a_  US S S 24   n	Ub	  US S S 24   nUb	  US S S 24   nU R                  " U	4UUUUUUS.UD6n
U
R                  S   S:X  a  U
S   $ U
R                  $ U R                  " U4UUUUUUS.UD6$ )Nr9   )Ú	min_countr—   Úcomp_idsr¬   r­   r®   r   )r;   Ú_call_cython_opr–   ÚT)rO   r�   r°   r—   r±   r¬   r­   r®   ÚkwargsÚvalues2dr=   s              r4   Ú_cython_op_ndim_compatÚ&WrappedCythonOp._cython_op_ndim_compat7  sÕ   € ð �;‰;˜!Óà˜d¢A˜g‘ˆHØÑØ˜D¢!˜G‘}�ØÑ&Ø)¨$²¨'Ñ2�Ø×&Ò&Øð	à#ØØ!ØØ'Øñ	ð ñ	ˆCð �y‰y˜‰|˜qÓ Ø˜1‘v�ð —5‘5ˆLà×#Ò#Øð	
àØØØØ#Øñ	
ð ñ	
ð 		
r6   )r®   c               ó’  • Un	UR                   n
U
R                  S;   nU
R                  S;   nU R                  S;   a  Uc  [        U5      nU(       a  UR	                  S5      nSnO!U
R                  S:X  a  UR	                  S5      nUR                   S:X  a  UR                  [        R                  5      nU R                  S;   as  U
[        :X  a6  US	   (       a,  Ub)  UR                  5       (       a  UR                  5       nSX'   UR                  [        S
S9R	                  [        R                  5      nSnUR                  nUb  UR                  nUb  UR                  nU R                  X15      nU R                  U R                  U R                  UR                   U5      nU R!                  U5      nU R#                  UR                   5      n[%        [        R&                  " XßS95      nU R                  S:X  Ga  [        R(                  " U[        R*                  S9nU R                  S;   a&  U R                  S:X  a  XxS'   U" S#UUUUUUUUS.UD6  OâU R                  S;   a%  U R                  S;   a  XÈS'   U" UUUU4UUUS.UD6  O­U R                  S;   a#  U" S#UUUUUS.UD6  UR                  [        S
S9nOzU R                  S;   a/  U" S#UUUUUUS.UD6  U
[        :X  a  UR                  [        5      nO;[-        U R                   S35      eU R                  S:w  a  XhS'   U" S#UUUUUUS.UD6  U R                  S:X  a«  U R                  S;  a›  UR                   R                  S;   a�  U(       dz  [/        U R                  S;   a  S OS!U5      nWU:  nUR                  5       (       aB  Ub  UU   R1                  5       (       d   eO$UR                  S"5      n[        R2                  UU'   UR                  nU R                  U R4                  ;  a)  U R7                  U	R                   5      n[9        UU5      nU$ UnU$ )$Nr    ÚmM)rB   rC   r©   TÚbÚuint8Úfloat16ÚskipnaF©Úcopy©r3   rw   )	rG   rH   rX   rZ   r\   rj   rh   rS   r^   rS   r®   )ÚoutÚcountsr�   Úlabelsr°   r¬   r­   Úis_datetimelike)rc   rb   r`   rl   rU   )rb   rc   rÄ   )r°   r¬   r­   )rÁ   r�   rÃ   r¬   r­   r�   )rÁ   rÂ   r�   rÃ   r¬   r­   z is not implementedrD   r­   )rÁ   r�   rÃ   r—   rÄ   r¬   rž   rŽ   )rS   rU   r   r9   r�   © )r3   rL   rM   r   ÚviewÚastyper.   Úfloat32r0   rB   r¿   r¨   Úint8r³   rš   r‹   r‘   r£   r   ÚemptyÚzerosr©   r…   rZ   rC   ÚnanÚcast_blocklistrª   r   )rO   r�   r°   r—   r±   r¬   r­   r®   r´   Úorig_valuesr3   r‡   rÄ   r™   Úfuncr¢   ÚresultrÂ   ÚcutoffÚempty_groupsÚ	res_dtypeÚ	op_results                         r4   r²   ÚWrappedCythonOp._call_cython_opf  s4  € ð ˆà—‘ˆØ—Z‘Z 7Ñ*ˆ
àŸ*™*¨Ñ,ˆà�8‰8�~Ó%Ø‰|Ü˜F“|�æØ—[‘[ Ó)ˆFØ‰JØ�Z‰Z˜3ÓØ—[‘[ Ó)ˆFØ�<‰<˜9Ó$Ø—]‘]¤2§:¡:Ó.ˆFà�8‰8�~Ó%Øœ‹Ø˜(×#àÑ'¨D¯H©H¯J©Jà!'§¡£˜Ø'+˜™Ø—]‘]¤4¨e�]Ð4×9Ñ9¼"¿'¹'ÓBˆFØˆJà—‘ˆØÑØ—6‘6ˆDØÑ&Ø)Ÿm™m�à×*Ñ*¨7Ó;ˆ	Ø×(Ñ(¨¯©°D·H±H¸f¿l¹lÈJÓWˆØ×&Ñ& vÓ.ˆØ×'Ñ'¨¯©Ó5ˆ	äœBŸHšH YÑ@ÓAˆØ�9‰9˜Ô#Ü—X’X˜g¬R¯X©XÑ6ˆFØ�x‰xð 
ó 
ð —8‘8˜uÓ$ð )0˜9Ñ%Ùð 
ØØ!Ø!Ø#Ø'ØØ +Ø$3ñ
ð ó
ð —‘ÐBÓBØ—8‘8˜~Ó-Ø0?Ð,Ñ-ÙØØØØð		ð
 (ØØ +ñ	ð ó	ð —‘˜^Ó+Ùð ØØ!Ø#ØØ +ñð òð  Ÿ™¤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                ó¼   • UR                   S:”  a  [        S5      eUR                   S:X  a  US:X  d   U5       eg [        UR                  5      (       d	  US:X  d   eg g )Né   z.number of dimensions is currently limited to 2r9   r   )r;   r…   r   r3   )rO   Úaxisr�   s      r4   Ú_validate_axisÚWrappedCythonOp._validate_axis  sX   € à�;‰;˜‹?Ü%Ð&VÓWÐWØ�;‰;˜!ÓØ˜1“9Ð"˜dÓ"‘9Ü$ V§\¡\×2Ñ2ð ˜1“9Ð‘9ð 3r6   éÿÿÿÿ)r°   c          	     óê   • U R                  X!5        [        U[        R                  5      (       d,  UR                  " SU R
                  U R                  UUUS.UD6$ U R                  " U4UUUSS.UD6$ )zG
Call our cython function, with appropriate pre- and post- processing.
)rM   rN   r°   r—   ÚidsN)r°   r—   r±   r¬   rÅ   )rÙ   r-   r.   r/   Ú_groupby_oprM   rN   r¶   )rO   r�   rØ   r°   r±   r—   r´   s          r4   Úcython_operationÚ WrappedCythonOp.cython_operation  s‘   € ð 	×Ñ˜DÔ)ä˜&¤"§*¡*×-Ñ-à×%Ò%ð Ø—H‘HØ#×2Ñ2Ø#ØØñð ñð ð ×*Ò*Øð
àØØØñ
ð ñ
ð 	
r6   )rN   rM   rL   )rL   ÚstrrM   rá   rN   r¨   ÚreturnÚNone)rM   rá   râ   rá   )rL   rá   rM   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__Ú__firstlineno__Ú__doc__Ú	frozensetrÍ   rP   Ú	functoolsÚpartialr„   Úgroup_any_allÚgroup_idxmin_idxmaxra   ry   Ú__annotations__r”   Úclassmethodr}   Úcacher‹   r‘   rš   r£   rª   r   r¶   r²   rÙ   rß   Ú__static_attributes__rÅ   r6   r4   r@   r@   j   sH  ‡ ññ Ú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                  óþ  • \ rS rSr% SrS\S'     S%         S&S jjr\S'S j5       rS(S jr	\S)S j5       r
S*S	 jr\S+S
 j5       r\S,S j5       r\\S-S j5       5       r\S.S j5       r\S/S j5       r\S0S j5       r\S1S j5       r\S2S j5       r\\S3S j5       5       r\\S3S j5       5       r\S-S j5       r\\S)S j5       5       r\S4S j5       r\S-S j5       r\S5S j5       r\S6S j5       r\S6S j5       r          S7S jr        S8S jr \S9S j5       r!\ S:         S;S jj5       r"\ S<       S=S jj5       r#\      S>S  j5       r$\      S?S! j5       r%\\S-S" j5       5       r&S#r'g$)@ÚBaseGrouperi<  a`  
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                ól   • [        U[        5      (       d   U5       eXl        X l        X0l        X@l        g rJ   )r-   r   rØ   Ú
_groupingsÚ_sortÚdropna)rO   rØ   Ú	groupingsÚsortrû   s        r4   rP   ÚBaseGrouper.__init__N  s0   € ô ˜$¤×&Ñ&Ð,¨Ó,Ð&àŒ	Ø#ŒØŒ
Ø�r6   c                ó   • U R                   $ rJ   )rù   ©rO   s    r4   rü   ÚBaseGrouper.groupings\  s   € à�‰Ðr6   c                ó,   • [        U R                  5      $ rJ   )ÚiterÚindicesr   s    r4   Ú__iter__ÚBaseGrouper.__iter__`  s   € Ü�D—L‘LÓ!Ð!r6   c                ó,   • [        U R                  5      $ rJ   )r<   rü   r   s    r4   ÚnkeysÚBaseGrouper.nkeysc  s   € ä�4—>‘>Ó"Ð"r6   c              #  ón   #   • U R                  U5      nU R                  n[        X2SS9 Sh  v•N   g N7f)új
Groupby iterator

Returns
-------
Generator yielding sequence of (name, subsetted object)
for each group
T©ÚstrictN)Ú_get_splitterÚresult_indexÚzip)rO   ÚdataÚsplitterÚkeyss       r4   Úget_iteratorÚBaseGrouper.get_iteratorg  s2   é € ð ×%Ñ% dÓ+ˆà× Ñ ˆÜ�t¨dÑ3×3Ó3ùs   ‚+5­3®5c                ó”   • [        U[        5      (       a  [        nO[        nU" UU R                  U R
                  U R                  S9$ )z6
Returns
-------
Generator yielding subsetted objects
)Ú
sorted_idsÚsort_idx)r-   r!   ÚSeriesSplitterÚFrameSplitterr—   Ú_sorted_idsÚresult_ilocs)rO   r  Úklasss      r4   r  ÚBaseGrouper._get_splitteru  sF   € ô �dœF×#Ñ#Ü(6‰Eô "ˆEáØØ�L‰LØ×'Ñ'Ø×&Ñ&ñ	
ð 	
r6   c                óà  • [        U R                  5      S:X  a9  [        U R                  [        5      (       a  U R                  S   R
                  nO:U R                   Vs/ s H  o"R                  PM     nn[        X0R                  5      nU R                  (       d¿  [        U R                  [        5      nU(       db  U R                  R                  (       aG  UR                  5        VVs0 s H(  u  pV[        U5      (       a  [        R                  OUU_M*     nnnU$ U(       a5  UR                  5        VVs0 s H  u  pV[!        S U 5       5      U_M     nnnU$ s  snf s  snnf s  snnf )z"dict {group name -> group indices}r9   r   c              3  óf   #   • U  H'  n[        U5      (       a  [        R                  OUv •  M)     g 7frJ   )r   r.   rÌ   )Ú.0Úcomps     r4   Ú	<genexpr>Ú&BaseGrouper.indices.<locals>.<genexpr>œ  s!   é € ÐIÂS¸T¤D¨§J¡Jœ"Ÿ&š&°DÔ8ÂSùs   ‚/1)r<   rü   r-   r  r   r  Úcodesr&   Úlevelsrû   r   ÚhasnansÚitemsr   r.   rÌ   Útuple)rO   rÐ   ÚpingÚ
codes_listÚhas_miÚkeyÚvalues          r4   r  ÚBaseGrouper.indices‰  s$  € ô ˆt�~‰~Ó !Ó#¬
°4×3DÑ3DÔFV×(WÑ(Wà—^‘^ AÑ&×.Ñ.‰Fà15·²Ó@²¨Ÿ*œ*±ˆJÐ@Ü% j·+±+Ó>ˆFØ�{�{Ü × 1Ñ 1´:Ó>ˆFÞ˜d×/Ñ/×7×7àJPÏ,É,Ì.ôÚJX¹J¸Cœd 3Ÿi™i”B—F’F¨S°%Ò7É.ð ñ ð ˆö ð
 '-§l¡l¤nôò '5™
˜ô ÑIÁSÓIÓIÈ5ÒPÙ&4ð ñ ð ˆùò! Aùó
ùó
s   Á!EÃ-/E$Ä;E*c                ó2  • U R                   nU R                  (       a9  [        R                  " US:¬  5      n[        R                  " US:H  5      U   nX   n[        XR                  5      nU R                  (       a  U[        R                  " WU5      -  nU$ )zB
Get the original integer locations of result_index in the input.
r   rÛ   )rÝ   rN   r.   Úwherert   r%   r—   Útake)rO   rÝ   r¬   Ú	null_gapsrÐ   s        r4   r  ÚBaseGrouper.result_ilocs¢  sw   € ð �h‰hˆà××Ü—8’8˜C 1™HÓ%ˆDäŸ	š	 #¨¡)Ó,¨TÑ2ˆIØ‘)ˆCä'¨¯\©\Ó:ˆà××à”b—g’g˜i¨Ó0Ñ0ˆFàˆr6   c                óX   • U R                    Vs/ s H  oR                  PM     sn$ s  snf rJ   )rü   r%  ©rO   r*  s     r4   r%  ÚBaseGrouper.codes»  s    € à'+§~¢~Ó6¢~˜t—
”
¡~Ñ6Ð6ùÒ6ó   �'c                óŒ   • [        U R                  5      S:”  a  [        U R                  R                  5      $ U R                  /$ ©Nr9   )r<   rü   Úlistr  r&  r   s    r4   r&  ÚBaseGrouper.levels¿  s9   € äˆt�~‰~Ó Ó"ä˜×)Ñ)×0Ñ0Ó1Ð1à×%Ñ%Ð&Ð&r6   c                óX   • U R                    Vs/ s H  oR                  PM     sn$ s  snf rJ   )rü   rW   r6  s     r4   ÚnamesÚBaseGrouper.namesÇ  s    € à&*§n¢nÓ5¢n˜d—	”	¡nÑ5Ð5ùÒ5r8  c                ó¤   • U R                   nU R                  nU(       a  [        R                  " XS:g     US9nO/ n[	        X0R
                  SSS9$ )z
Compute group sizes.
rÛ   )Ú	minlengthr©   F)Úindexr3   r¿   )rÝ   r—   r.   Úbincountr!   r  )rO   rÝ   r—   rÁ   s       r4   rF   ÚBaseGrouper.sizeË  sI   € ð
 �h‰hˆØ—,‘,ˆæÜ—+’+˜c¨¡)™n¸Ñ@‰CàˆCÜ�c×!2Ñ!2¸'ÈÑNÐNr6   c                ó”  • [        U R                  5      S:X  a  U R                  S   R                  $ U R                  u  pUR                  n[
        R                  " U[        [        U5      5      S9nUR                  5       R                  5        VVs0 s H#  u  pVX5   U R                  R                  U5      _M%     nnnU$ s  snnf )ú!dict {group name -> group labels}r9   r   )Ú
categories)r<   rü   ÚgroupsÚresult_index_and_idsr8   r   Ú
from_codesÚrangeÚ_reverse_indexerr(  rØ   r2  )rO   r  rÝ   r�   rG  ÚgroupÚ
axis_ilocsrÐ   s           r4   rH  ÚBaseGrouper.groupsÙ  s¹   € ô ˆt�~‰~Ó !Ó#Ø—>‘> !Ñ$×+Ñ+Ð+Ø ×5Ñ5ÑˆØ×%Ñ%ˆÜ ×+Ò+¨C¼EÄ#ÀlÓBSÓ<TÑUˆ
ð &0×%@Ñ%@Ó%B×%HÑ%HÔ%Jô
ò &KÑ!�ð ‰M˜4Ÿ9™9Ÿ>™>¨*Ó5Ò5Ù%Jð 	ñ 
ð
 ˆùó
s   Â*Cc                ó>   • [        U R                  SS9R                  $ )NFr¾   )r   rÝ   Úis_monotonic_increasingr   s    r4   Úis_monotonicÚBaseGrouper.is_monotonicè  s   € ô �T—X‘X EÑ*×BÑBÐBr6   c                óN   • [        U R                  S:  R                  5       5      $ )z5
Whether grouper has null value(s) that are dropped.
r   )r¨   rÝ   rB   r   s    r4   rN   ÚBaseGrouper.has_dropped_naî  s    € ô �T—X‘X ‘\×&Ñ&Ó(Ó)Ð)r6   c                ó   • U R                   $ rJ   ©rÝ   r   s    r4   Ú
codes_infoÚBaseGrouper.codes_infoö  s   € ð �x‰xˆr6   c                ó,   • [        U R                  5      $ rJ   )r<   r  r   s    r4   r—   ÚBaseGrouper.ngroupsû  s   € ô �4×$Ñ$Ó%Ð%r6   c                ó    • U R                   S   $ )Nr   ©rI  r   s    r4   r  ÚBaseGrouper.result_index   ó   € à×(Ñ(¨Ñ+Ð+r6   c                ó    • U R                   S   $ r:  r]  r   s    r4   rÝ   ÚBaseGrouper.ids  r_  r6   c           
     óZ  • U R                    Vs/ s H"  n[        R                  " UR                  SS9PM$     nnU R                    Vs/ s H&  oR                  =(       d    UR
                  (       + PM(     nnU R                    Vs/ s H  oR                  PM     nn[        [        U R                   USS95       H8  u  nu  pUR
                  (       d  M  UR                  UR                  5      X%'   M:     [        U R                   5      S:X  a4  US   nU R                  S   Ul        [        U R                  S   5      nXx4$ [!        U5      (       a,  U R#                  X R                  U R                  U5      u  pxXx4$ [%        U5      (       d+  U R'                  X R                  U R                  5      u  pxXx4$ U R                  n	U R                    Vs/ s H  oR                  PM     n
n[        U5       VVs/ s H  u  p¼U(       d  M  UPM     nnn[        U5       VVs/ s H  u  p¼U(       a  M  UPM     nnnU R#                  U Vs/ s H  o²U   PM	     snU Vs/ s H  oºU   PM	     snU Vs/ s H  o¹U   PM	     snU Vs/ s H  o´U   PM	     snS9u  nnU R'                  U Vs/ s H  o²U   PM	     snU Vs/ s H  oºU   PM	     snU Vs/ s H  o¹U   PM	     snS9u  nn[(        R*                  " [(        R,                  " UR                  [        U5      5      [(        R.                  " UR                  [        U5      SS	9/SS	9n[(        R0                  " Xí-   SS
9u  nn[3        [5        UR6                  5      [5        UR6                  5      -   U[5        UR                  5      [5        UR                  5      -   S9R9                  U5      n[        U5      U-  U-   n[%        U5      (       aÆ  [        U5      n[        [;        U5      S5       VVs/ s H  u  nnU(       a  M  UU-
  PM     nnn[        U5      S:”  a   UR=                  U5      R?                  5       nOUR?                  5       nURA                  U5      n[(        R0                  " USS
9u  nn[        U5      nURA                  U5      nOs[C        USS9u  nn[        U5      n[(        R*                  " U[(        RD                  " [(        RF                  " [        U5      5      U5      /5      nURA                  U5      nU RH                  (       a!  [(        RJ                  " US:  US:  -  SU5      nXx4$ s  snf s  snf s  snf s  snf s  snnf s  snnf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snnf )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>  rW   r   r%  rC   Ú_ob_index_and_idsrB   Ú_unob_index_and_idsr.   ÚconcatenateÚtileÚrepeatÚuniquer   r;  r&  Úreorder_levelsÚreversedÚ_drop_level_numbersÚargsortr2  r"   ÚdeleteÚarangerû   r1  )rO   r*  r&  Úobsrc  ÚkÚlevelr  rÝ   r>  r%  ÚidxÚobÚ
ob_indicesÚunob_indicesÚob_indexÚob_idsÚ
unob_indexÚunob_idsÚresult_index_codesÚ_rB  Ún_levelsrý   Údrop_levelsÚsorterri  Útakers                               r4   rI  Ú BaseGrouper.result_index_and_ids  sö  € ð EIÇNÂNó
ÚDR¸DŒE×Ò˜dŸl™l°Ô7ÁNð 	ð 
ð HLÇ~Â~ó
ÚGU¸t�N‰N×: $×":Ñ":Ô:Ò:Á~ð 	ð 
ð )-¯ªÓ7ª —”©ˆÐ7ä )¬#¨d¯n©n¸fÈTÑ*RÖ SÑˆA‰}�Ø×'×'Ñ'Ø!×0Ñ0°·±ÓA�“	ñ !Tô ˆt�~‰~Ó !Ó#Ø! !™9ˆLØ $§
¡
¨1¡ˆLÔÜ% d§j¡j°¡mÓ4ˆCðP Ð Ð ôO ��X‰XØ $× 6Ñ 6ØŸ
™
 D§J¡J°ó!ÑˆLðL Ð Ð ôG �S—‘Ø $× 8Ñ 8¸ÇÁÈTÏZÉZÓ XÑˆLðD Ð Ð ð —J‘JˆEØ,0¯NªNÓ;ªN D—Z”Z©NˆEÐ;Ü-6°s¬^ÔBª^¡' #¼rŸ#©^ˆJÑBÜ/8¸¬~ÔHª~¡G CÄRŸC©~ˆLÑHØ#×5Ñ5Ù/9Ó:ªz¨˜sœ©zÑ:Ù-7Ó8ªZ c˜S”z©ZÑ8Ù-7Ó8ªZ c˜S”z©ZÑ8Ù-7Ó8ªZ c˜S”z©ZÑ8ð	  6ð  ÑˆH�fð $(×#;Ñ#;Ù/;Ó<ª|¨˜sœ©|Ñ<Ù-9Ó:ª\ c˜S”z©\Ñ:Ù-9Ó:ª\ c˜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‰zä˜u›:�ô &/¬x¸«ÀÔ%Bôâ%B™	˜˜TÜó #�H˜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�àÐ Ð ùòo
ùò
ùò 8ùò& <ùÛBùÛHùâ:ùÚ8ùÚ8ùÚ8ùò =ùÚ:ùÚ:ùó0se   �)U$Á-U)ÂU.ÇU3Ç9U8È
U8È!U>È2U>É
VÉV	
É2VÊVÊ+VÊ?V
ËV"ÐV'Ð+	V'c                ó`   • [        S U R                   5       5      (       a  U $ U R                  $ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frJ   )rj  )r!  r*  s     r4   r#  Ú/BaseGrouper.observed_grouper.<locals>.<genexpr>e  s   é € Ð9ª. $�~Ž~ª.ùó   ‚)rC   rü   Ú_observed_grouperr   s    r4   Úobserved_grouperÚBaseGrouper.observed_grouperc  s(   € äÑ9¨$¯.ª.Ó9×9Ñ9ØˆKà×%Ñ%Ð%r6   c                ó¬   • U R                    Vs/ s H  oR                  PM     nn[        U R                  X R                  U R
                  S9nU$ s  snf )N)rý   rû   )rü   Úobserved_groupingr÷   rØ   rú   rû   )rO   r*  rü   r   s       r4   r‘  ÚBaseGrouper._observed_grouperj  sC   € à8<¿ºÓGº°×+Ô+¹ˆ	ÐGÜ˜dŸi™i¨¿¹ÈDÏKÉKÑXˆØˆùò Hs   �Ac                óÚ  ^• [        U4S jTSS   5       5      nU(       a  TS   OSn[        S U 5       5      n[        X'SSS9n[        X†S9u  pš[	        U	5      n	[        XšXrSS	9n[        UUUSS
9nU(       dà  [        U5      S:”  aÑ  [        T5      n[        [        T5      S5       VVs/ s H  u  pïU(       a  M  XÞ-
  PM     nnn[        U5      S:”  a   UR                  U5      R                  5       nOUR                  5       nUR                  U5      n[        R                  " USS9u  nn[        R                  " U	S:H  SUR                  U	5      5      n	[	        U	5      n	XÉ4$ s  snnf )Nc              3  ó4   >#   • U  H  nTS    U:H  v •  M     g7f)r   NrÅ   )r!  rý   rc  s     €r4   r#  Ú0BaseGrouper._ob_index_and_ids.<locals>.<genexpr>w  s   øé € Ð Hºi°d  q¡¨TÖ!1ºiùs   ƒr9   r   Fc              3  ó8   #   • U  H  n[        U5      v •  M     g 7frJ   ©r<   ©r!  r}  s     r4   r#  r™  y  ó   é € Ð5ªf U”c˜%—j�jªfùr�  T©rý   Úxnullrg  )rŸ  )r&  r%  r>  Úverify_integrityre  rÛ   )rC   r)  r$   r"   r   r#   r   r<   rl  rv  rw  rx  r2  r.   rt  r1  )rO   r&  r%  r>  rc  Úconsistent_sortingÚsort_in_compressr–   Úgroup_indexrƒ  Úobs_group_idsÚob_index_codesr‚  rˆ  r~  rý   r‰  rŠ  r‡  rB  s       `               r4   ro  ÚBaseGrouper._ob_index_and_idsp  sf  ø€ ô !Ô H¸eÀAÀB¹iÓ HÓHÐÞ'9˜5 š8¸uÐÜÑ5©fÓ5Ó5ˆÜ% e¸ÀTÑJˆÜ 4°[Ñ XÑˆÜ$ VÓ,ˆÜ-Ø 5°tñ
ˆô ØØ ØØ"ñ	
ˆö "¤c¨(£m°aÓ&7ä˜5“zˆHô "+¬8°E«?¸AÔ!>ôâ!>‘I�CÜó �”Ù!>ð ñ ô
 �;Ó !Ó#Ø!×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   Â+E'Â<E'c                ó€   • [        S U 5       5      n[        X$SSS9n[        R                  " XS9n[	        U5      nXe4$ )Nc              3  ó8   #   • U  H  n[        U5      v •  M     g 7frJ   r›  rœ  s     r4   r#  Ú2BaseGrouper._unob_index_and_ids.<locals>.<genexpr>ž  r�  r�  Trž  )r>  )r)  r$   r   Úfrom_productr   )rO   r&  r%  r>  r–   r…  r„  s          r4   rp  ÚBaseGrouper._unob_index_and_ids˜  sE   € ô Ñ5©fÓ5Ó5ˆÜ" 5°dÀ$ÑGˆÜ×,Ò,¨VÑAˆ
Ü& xÓ0ˆØÐ#Ð#r6   c              #  óÈ   #   • U R                   n[        U R                  5      S:X  a  Uv •  g [        UR                  S-
  SS5       H  nUR                  U5      v •  M     g 7f)Nr9   rÛ   )r  r<   rü   rK  ÚnlevelsÚget_level_values)rO   r  r}  s      r4   Úget_group_levelsÚBaseGrouper.get_group_levels¤  sY   é € ð ×(Ñ(ˆÜˆt�~‰~Ó !Ó#ØÓä˜|×3Ñ3°aÑ7¸¸RÖ@�Ø"×3Ñ3°EÓ:Ô:ò Aùs   ‚A A"c           	     ó’   • US;   d   e[        XU R                  S9nUR                  " SUUUU R                  U R                  S.UD6$ )z+
Returns the values of a cython operation.
)rx   rw   rK   )r�   rØ   r°   r±   r—   rÅ   )r@   rN   rß   rÝ   r—   )rO   rL   r�   rM   rØ   r°   r´   Úcy_ops           r4   Ú_cython_operationÚBaseGrouper._cython_operation²  s^   € ð Ð1Ó1Ð1Ð1ä TÀ4×CVÑCVÑWˆà×%Ò%ð 
ØØØØ—X‘XØ—L‘Lñ
ð ñ
ð 	
r6   c                óZ   • U R                  X5      nUR                  R                  U5      $ )zá
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)rO   r2   rÏ   Úpreserve_dtyperÐ   s        r4   Ú
agg_seriesÚBaseGrouper.agg_seriesÌ  s)   € ð  ×3Ñ3°CÓ>ˆØ�y‰y×/Ñ/°Ó7Ð7r6   c                óü   • [         R                  " U R                  SS9nSnU R                  U5      n[	        U5       H:  u  pgU" U5      n[        U5      nU(       d  [        X‡R                  5        SnXƒU'   M<     U$ )NÚOrÀ   FT)r.   rÊ   r—   r  rl  r>   r5   r3   )	rO   r2   rÏ   rÐ   Úinitializedr  r�   rM  r=   s	            r4   r¶  Ú)BaseGrouper._aggregate_series_pure_pythonß  ss   € ô —’˜$Ÿ,™,¨cÑ2ˆØˆà×%Ñ% cÓ*ˆä! (Ö+‰HˆAÙ�u“+ˆCÜ  Ó%ˆCæä" 3¯©Ô4Ø"�à�1‹Iñ ,ð ˆr6   c                óˆ  • SnU R                  U5      nU R                  n/ n[        XTSS9nU HZ  u  p‰[        R	                  U	SU5        U	R
                  n
U" U	5      nU(       d  [        Xº5      (       d  SnUR                  U5        M\     [        U5      S:X  a&  [        USS 5      S;   a  U" UR                  S S 5        Xc4$ )NFTr  rW   r   rè   )rd   rf   rS   rU   )r  r  r  r0   Ú__setattr__ÚaxesÚ_is_indexed_likeÚappendr<   rƒ   Úiloc)rO   rŠ   r  Úmutatedr  Ú
group_keysÚresult_valuesÚzippedr-  rM  Ú
group_axesr=   s               r4   Úapply_groupwiseÚBaseGrouper.apply_groupwiseõ  sÍ   € ð ˆØ×%Ñ% dÓ+ˆØ×&Ñ&ˆ
Øˆô �Z°$Ñ7ˆã ‰JˆCô ×Ñ˜u f¨cÔ2ð Ÿ™ˆJÙ�E“(ˆCÞÔ#3°C×#DÑ#DØ�Ø× Ñ  Ö%ñ !ô ˆz‹?˜aÓ¤G¨A¨z¸4Ó$@ð E
ó %
ñ ˆd�i‰i˜˜ˆmÔàÐ%Ð%r6   c                ó‚   • U R                   R                  U R                  5      n[        U SS5      (       a  XS:¬     nU$ )Nrû   Tr   )rÝ   r2  r  rƒ   )rO   rÐ   s     r4   r  ÚBaseGrouper._sorted_ids   s<   € ð —‘—‘˜t×0Ñ0Ó1ˆÜ�4˜ 4×(Ñ(à a™KÑ(ˆFØˆr6   )rù   rú   rØ   rû   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Ø  rc  z
list[bool]râ   ú'tuple[MultiIndex, npt.NDArray[np.intp]])r&  rÖ  r%  rÚ  r>  rØ  râ   rÛ  )râ   zGenerator[Index])rÛ   )
rL   rá   rM   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ì   rò   rP   Úpropertyrü   r  r  r  r   r  r   r  r  r%  r&  r>  rF   rH  rR  rN   rX  r—   r  rÝ   rI  r’  r‘  ro  rp  r¯  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                  ó  • \ rS rSr% SrS\S'   S\S'    S SS jjr\S	 5       r\	SS
 j5       r
\SS j5       rSS jr\S 5       r\SS j5       r\S 5       r\	SS j5       r\	SS j5       r\	SS j5       r\	SS j5       rSrg)Ú
BinGrouperi*  a�  
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                ó¬   • [        U5      U l        [        U5      U l        X0l        [        U R                  5      [        U R                  5      :X  d   eg rJ   )r   rß  r    rà  Úindexerr<   )rO   rß  rà  râ  s       r4   rP   ÚBinGrouper.__init__L  sB   € ô ! Ó&ˆŒ	Ü% iÓ0ˆŒØŒô �4—>‘>Ó"¤c¨$¯)©)£nÓ4Ð4Ñ4r6   c                óŽ   • [        U R                  U R                  SS9 VVs0 s H  u  pU[        Ld  M  X_M     nnnU$ s  snnf )rF  Tr  )r  rà  rß  r   )rO   r-  r.  rÐ   s       r4   rH  ÚBinGrouper.groupsZ  sN   € ô " $§.¡.°$·)±)ÀDÒIô
âI‘
�Øœ#ˆ~ó ˆCŠJÙIð 	ñ 
ð
 ˆùó
s
   £A¶Ac                ó   • gr:  rÅ   r   s    r4   r  ÚBinGrouper.nkeysf  s   € ð r6   c                ó‚   • U R                   nU R                  b%  [        R                  " XR                  45      nX   nU$ rJ   )rÝ   râ  r.   Úlexsort)rO   rÝ   rŠ  s      r4   rX  ÚBinGrouper.codes_infok  s8   € ð �h‰hˆØ�<‰<Ñ#Ü—Z’Z §l¡lÐ 3Ó4ˆFØ‘+ˆCØˆ
r6   c              #  óî   ^#   • U4S jnSn[        U R                  U R                  SS9 H  u  pEU[        La  XR" X45      4v •  UnM     U[	        T5      :  a  U R                  S   U" US5      4v •  gg7f)r  c                ó    >• TR                   X $ rJ   )rÅ  )ÚstartÚedger  s     €r4   Ú<lambda>Ú)BinGrouper.get_iterator.<locals>.<lambda>}  s   ø€  T§Y¡Y¨uÑ%:r6   r   Tr  rÛ   N)r  rß  rà  r   r<   )rO   r  Úslicerrí  rî  Úlabels    `    r4   r  ÚBinGrouper.get_iteratort  s{   øé € ô ;ˆà !ˆÜ˜tŸy™y¨$¯.©.ÀÔF‰KˆDØœCÒØ˜V EÓ0Ð0Ò0ØŠEñ Gð
 ”3�t“9ÓØ—.‘. Ñ$¡f¨U°DÓ&9Ð9Ó9ð ùs   ƒA2A5c                óÞ   • [         R                  " [        5      nSn[        U R                  U R
                  SS9 H-  u  p4X$:  d  M  U[        La  [        [        X$5      5      X'   UnM/     U$ ©Nr   Tr  )ÚcollectionsÚdefaultdictr;  r  rà  rß  r   rK  )rO   r  r�   rò  Úbins        r4   r  ÚBinGrouper.indicesˆ  s^   € ä×)Ò)¬$Ó/ˆàˆÜ˜dŸn™n¨d¯i©iÀÔE‰JˆEØ�wØ¤Ò#Ü%)¬%°«-Ó%8�G‘NØ’ñ	 Fð
 ˆr6   c                ó   • U R                   /$ rJ   rW  r   s    r4   r%  ÚBinGrouper.codes”  s   € à—‘ˆzÐr6   c                óD  • U R                   n[        U R                   5      S:w  a"  [        U R                   S   5      (       a  USS  n[        U5      n[        R                  " [        R
                  SU R                  4   5      n[        U5      nU[        U R                  5      :X  a,  [        R                  " [        R                  " U5      U5      nO>[        R                  " [        R
                  S[        R                  " U5      4   U5      n[        U5      nX4$ )Nr   r9   rÛ   )
rà  r<   r   r.   ÚdiffÚr_rß  r   rs  rz  )rO   r  r—   ÚreprÝ   s        r4   rI  Ú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Ü! #Ó&ˆàÐ Ð r6   c                ó   • U R                   /$ rJ   )rà  r   s    r4   r&  ÚBinGrouper.levelsª  s   € à—‘ÐÐr6   c                ó0   • U R                   R                  /$ rJ   )rà  rW   r   s    r4   r>  ÚBinGrouper.names®  s   € à—‘×#Ñ#Ð$Ð$r6   c                óœ   • U R                   nU R                  nUR                  U5      n[        R                  " X3SS UR
                  S9nU/$ )NF)Úin_axisr}  ri  )rà  rÝ   r2  r   ÚGroupingr8   )rO   Úlevr%  rÃ   r*  s        r4   rü   ÚBinGrouper.groupings²  sG   € à�n‰nˆØ—‘ˆØ—‘˜%“ˆÜ×ÒØ E°¸s¿{¹{ñ
ˆð ˆvˆr6   c                ó   • U $ rJ   rÅ   r   s    r4   r’  ÚBinGrouper.observed_grouper¼  s   € àˆr6   )rà  rß  râ  rJ   ©râ   rã   rÑ  rÓ  )r  r+   )râ   rÚ  rÕ  r×  rÐ  )râ   rÞ  )rè   ré   rê   rë   rì   rò   rP   r   rH  rÜ  r  rX  r  r  r%  rI  r&  r>  rü   r’  rõ   rÅ   r6   r4   rÞ  rÞ  *  sö   ‡ ñð<  ÓØÓð ð	5ð
 
õ5ð ñ	ó ð	ð óó ðð óó ðô:ð( ñ	ó ð	ð óó ðð ñ!ó ð!ð" ó ó ð ð ó%ó ð%ð óó ðð óó ór6   rÞ  c                óð   • [        U [        5      (       a.  [        U5      S:”  a  gU R                  R	                  US   5      $ [        U [
        5      (       a  U R                  R	                  US   5      $ g)Nr9   Fr   )r-   r!   r<   rB  Úequalsr   )r2   rÂ  s     r4   rÃ  rÃ  Á  s_   € Ü�#”v×ÑÜˆt‹9�q‹=ØØ�y‰y×Ñ  Q¡Ó(Ð(Ü	�Cœ×	#Ñ	#Ø�y‰y×Ñ  Q¡Ó(Ð(àr6   c                  óZ   • \ rS rSr          SS jrS	S jr\S
S j5       rSS jrSr	g)rÒ  iÐ  c               ó4   • Xl         X l        X@l        X0l        g rJ   )r  r—   Ú_slabelsÚ	_sort_idx)rO   r  r—   r  r  s        r4   rP   ÚDataSplitter.__init__Ñ  s   € ð Œ	ØŒà"ŒØ!�r6   c              #  ó   #   • U R                   S:X  a  g [        R                  " U R                  U R                   5      u  pU R                  n[        XSS9 H"  u  pEU R                  U[        XE5      5      v •  M$     g 7frõ  )r—   r	   Úgenerate_slicesr  Ú_sorted_datar  Ú_chopÚslice)rO   ÚstartsÚendsÚsdatarí  Úends         r4   r  ÚDataSplitter.__iter__ß  sf   é € Ø�<‰<˜1Óð ä×*Ò*¨4¯=©=¸$¿,¹,ÓG‰ˆØ×!Ñ!ˆÜ˜f°4Ô8‰JˆEØ—*‘*˜U¤E¨%Ó$5Ó6Ô6ò 9ùs   ‚A<A>c                óJ   • U R                   R                  U R                  SS9$ )Nr   rd  )r  r2  r  r   s    r4   r  ÚDataSplitter._sorted_dataê  s   € à�y‰y�~‰~˜dŸn™n°1ˆ~Ð5Ð5r6   c                ó   • [        U 5      erJ   r   )rO   r  Ú	slice_objs      r4   r  ÚDataSplitter._chopî  s   € Ü! $Ó'Ð'r6   )r  r  r  r—   N)
r  r   r—   ræ   r  rÔ  r  rÔ  râ   rã   )râ   r*   )râ   r   )r!  r  râ   r+   )
rè   ré   rê   rë   rP   r  r   r  r  rõ   rÅ   r6   r4   rÒ  rÒ  Ð  sU   † ð"àð"ð ð"ð
 'ð"ð )ð"ð 
ô"ô	7ð ó6ó ð6÷(r6   rÒ  c                  ó   • \ rS rSrSS jrSrg)r  iò  c                ó¬   • UR                   R                  U5      nUR                  X3R                  S9nUR                  Ul        UR                  USS9$ )N©rÂ  Úgroupby©Úmethod)Ú_mgrÚ	get_sliceÚ_constructor_from_mgrrÂ  rW   Ú_nameÚ__finalize__)rO   r  r!  ÚmgrÚsers        r4   r  ÚSeriesSplitter._chopó  sN   € à�j‰j×"Ñ" 9Ó-ˆØ×)Ñ)¨#·H±HÐ)Ð=ˆØ—J‘JˆŒ	Ø×Ñ ¨iÐÐ8Ð8r6   rÅ   N)r  r!   r!  r  râ   r!   ©rè   ré   rê   rë   r  rõ   rÅ   r6   r4   r  r  ò  s   † ÷9r6   r  c                  ó   • \ rS rSrSS jrSrg)r  iû  c                óˆ   • UR                   R                  USS9nUR                  X3R                  S9nUR	                  USS9$ )Nr9   rd  r%  r&  r'  )r)  r*  r+  rÂ  r-  )rO   r  r!  r.  Údfs        r4   r  ÚFrameSplitter._chopü  sG   € ð �j‰j×"Ñ" 9°1Ð"Ð5ˆØ×(Ñ(¨·8±8Ð(Ð<ˆØ�‰˜u¨YˆÐ7Ð7r6   rÅ   N)r  r   r!  r  râ   r   r1  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>rJ     sñ   ðñõ #ã Û ÷ó ó ÷÷ *Ð )÷õ õ .Ý 2õ÷õ ÷õ
 +Ý 'Ý '÷ó õ &÷õ ö ÷ó õ ,ô>ò÷O
ñ O
÷dkñ kô\T�ô Tônô(�7˜8Ñ$ô (ôD9�\ô 9ô8�Lõ 8r6   