§
    	�’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¦  «        ZJdS )(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)ÚNDFrameÚreturnÚNonec                ór   — t          | t          j        ¦  «        r|t          k    rt	          d¦  «        ‚d S d S )NzMust produce aggregated value)Ú
isinstanceÚnpÚndarrayÚobjectÚ
ValueError)ÚobjÚdtypes     úEC:\Projects\DSCons\.venv\Lib\site-packages\pandas\core\groupby\ops.pyÚcheck_result_arrayr7   Q   sA   € õ �#•r”zÑ"Ô"ð >Ø•FŠ?ˆ?õ Ð<Ñ=Ô=Ð=ð	>ð >Øˆ?ó    c                ó€   — 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   )Úhasattrr:   ÚndimÚlen)Úress    r6   Úextract_resultr@   \   sD   € õ
 ˆs�IÑÔð àŒkˆØŒ8�qŠ=ˆ=�S ™XœX¨š]˜]à�a”&ˆCØ€Jr8   c                  ó¨  — e Zd ZU dZ eg d¢¦  «        ZdWd
„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/d0œd1œZd2ed3<   d)d4iZedXd5„¦   «         Zeej        dYd9„¦   «         ¦   «         ZdZd<„Zd[d@„Zd\dA„Zd\dB„ZedCdCdDdEœd]dM„¦   «         ZedDdNœd]dO„¦   «         Zed^dS„¦   «         ZedTdUœd_dV„¦   «         ZdCS )`Ú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ÚidxmaxÚkindÚstrÚhowÚhas_dropped_naÚboolr,   r-   c                ó0   — || _         || _        || _        d S ©N©rJ   rL   rM   )ÚselfrJ   rL   rM   s       r6   Ú__init__zWrappedCythonOp.__init__~   s   € ØˆŒ	ØˆŒØ,ˆÔÐÐr8   rC   )Úval_testrD   ÚsumÚ	group_sumÚprodÚ
group_prodrH   ©ÚnamerI   Ú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ÚcummaxrE   )Ú	aggregateÚ	transformzdict[str, dict]Ú_CYTHON_FUNCTIONSé   c                ó(   — || j         d         v rdS dS )Nrz   r{   )r|   )ÚclsrL   s     r6   Úget_kind_from_howz!WrappedCythonOp.get_kind_from_how£   s   € à�#Ô'¨Ô4Ð4Ð4Ø�;Øˆ{r8   r5   únp.dtypeÚ
is_numericc                ór  — |j         }| j        |         |         }t          |¦  «        r|}nt          t          |¦  «        }|r|S |t          j        t          ¦  «        k    rF|dv rt          d|› d|› d�¦  «        ‚|dv r|S |dv rnd|j	        vrt          d|› d|› d�¦  «        ‚|S t          d|¦  «        ‚)	N)ra   rv   z2function is not implemented for this dtype: [how->z,dtype->ú])re   rf   rH   rI   ©rg   ri   r2   zPThis should not be reached. Please report a bug at github.com/pandas-dev/pandas/)
rZ   r|   ÚcallableÚgetattrÚ
libgroupbyr0   r5   r2   ÚNotImplementedErrorÚ__signatures__)r   rJ   rL   r5   r‚   Ú	dtype_strÚftypeÚfs           r6   Ú_get_cython_functionz$WrappedCythonOp._get_cython_function«   s.  € ð
 ”Jˆ	ØÔ% dÔ+¨CÔ0ˆõ �E‰?Œ?ð 	+ØˆAˆAå�
 EÑ*Ô*ˆAØð 	ØˆHØ•b”h�vÑ&Ô&Ò&Ð&ØÐ+Ð+Ð+å)ð7Ø ð7ð 7Ø*3ð7ð 7ð 7ñô ð ð Ð:Ð:Ð:à�ØÐ(Ð(Ð(àØ Ô!1Ð1Ð1å)ð7Ø ð7ð 7Ø*3ð7ð 7ð 7ñô ð ð ˆHå%ð0àñô ð r8   Úvaluesú
np.ndarrayc                ó
  — | j         }|dv rt          |¦  «        }ng|j        j        dv rY|dv s| j        dk    r| j        rt          |¦  «        }n3|dv r/|j        j        dk    rt          |¦  «        }nt          |¦  «        }|S )zÖ
        Cast numeric dtypes to float64 for functions that only support that.

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

        Returns
        -------
        values : np.ndarray
        )ra   re   rf   rg   ri   Úiu)rc   r_   r{   )rU   ro   rW   rw   rv   Úi)rL   r   r5   rJ   rM   r   r   )rR   r�   rL   s      r6   Ú_get_cython_valsz WrappedCythonOp._get_cython_valsÖ   s¦   € ð ŒhˆàÐ:Ð:Ð:õ $ FÑ+Ô+ˆFˆFàŒ\Ô $Ð&Ð&Ø�oÐ%Ð%Ø”	˜[Ò(Ð(¨TÔ-@Ð(õ (¨Ñ/Ô/��àÐDÐDÐDà”<Ô$¨Ò+Ð+Ý)¨&Ñ1Ô1�F�Få*¨6Ñ2Ô2�Fàˆr8   ÚngroupsÚintr   c                óÚ   — | j         }| j        }| j                             |d¦  «        }|dk    r||f}n6|dk    rt	          d¦  «        ‚|dk    r|j        }n|g|j        dd …         ¢R }|S )Nr;   ro   z<arity of more than 1 is not supported for the 'how' argumentr{   )rL   rJ   Ú_cython_arityÚgetr‰   Úshape)rR   r•   r�   rL   rJ   ÚarityÚ	out_shapes          r6   Ú_get_output_shapez!WrappedCythonOp._get_output_shapeû   s”   € ØŒhˆØŒyˆàÔ"×&Ò& s¨AÑ.Ô.ˆð �&Š=ˆ=Ø  %Ð(ˆIˆIØ�QŠYˆYÝ%ØNñô ð ð �[Ò Ð ØœˆIˆIà Ð4 6¤<°°°Ô#3Ð4Ð4ˆIØÐr8   c                ó�   — | j         }|dk    rd}n#|dv rd}n|j        dv r|j        › |j        › �}nd}t          j        |¦  «        S )NrE   Úfloat64©rH   rI   ÚintpÚiufcbr2   )rL   rJ   Úitemsizer0   r5   )rR   r5   rL   Ú	out_dtypes       r6   Ú_get_out_dtypezWrappedCythonOp._get_out_dtype  sf   € ØŒhˆà�&Š=ˆ=Ø!ˆIˆIØÐ(Ð(Ð(ð ˆIˆIØŒZ˜7Ð"Ð"Ø œ:Ð7 u¤~Ð7Ð7ˆIˆIà ˆIÝŒx˜	Ñ"Ô"Ð"r8   c                ó   — | j         }|dv r<|t          j        t          ¦  «        k    rt          j        t          j        ¦  «        S n6|dv r2|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.
        )rU   rw   rU   rW   rv   )r_   ra   rc   re   rf   ÚfcÚiub)rL   r0   r5   rN   Úint64rJ   rŸ   )rR   r5   rL   s      r6   Ú_get_result_dtypez!WrappedCythonOp._get_result_dtype  sƒ   € ð ŒhˆàÐ=Ð=Ð=Ø�œ¥™œÒ&Ð&Ý”x¥¤Ñ)Ô)Ð)ð 'àÐ;Ð;Ð;ØŒz˜TÐ!Ð!Ø�Ø”˜uÐ$Ð$Ý”x¥¤
Ñ+Ô+Ð+Øˆr8   Nr   )ÚmaskÚresult_maskÚinitialÚ	min_countÚcomp_idsr«   únpt.NDArray[np.bool_] | Noner¬   r­   r   c          
     óü   — |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 )Nr;   )r®   r•   r¯   r«   r¬   r­   r   )r=   Ú_call_cython_oprš   ÚT)rR   r�   r®   r•   r¯   r«   r¬   r­   ÚkwargsÚvalues2dr?   s              r6   Ú_cython_op_ndim_compatz&WrappedCythonOp._cython_op_ndim_compat7  só   € ð Œ;˜!ÒÐà˜d A A A˜g”ˆHØÐØ˜D ! ! !˜G”}�ØÐ&Ø)¨$°°°¨'Ô2�Ø&�$Ô&Øð	à#ØØ!ØØ'Øð	ð 	ð ð	ð 	ˆCð Œy˜Œ|˜qÒ Ð Ø˜1”v�ð ”5ˆLà#ˆtÔ#Øð	
àØØØØ#Øð	
ð 	
ð ð	
ð 	
ð 		
r8   )r­   c               óœ  — |}	|j         }
|
j        dv }|
j        dv }| j        dv r|€t          |¦  «        }|r|                     d¦  «        }d}n |
j        dk    r|                     d¦  «        }|j         dk    r|                     t          j        ¦  «        }| j        dv r}|
t          k    r7|d	         r/|�-| 	                    ¦   «         r| 
                    ¦   «         }d||<   |                     t          d
¬¦  «                             t          j        ¦  «        }d}|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œ|¤Ž |                     t          d
¬¦  «        }nt| j        dv r5 |d#||||||dœ|¤Ž |
t          k    r|                     t          ¦  «        }n6t-          | j        › d�¦  «        ‚| j        dk    r||d<    |d#||||||dœ|¤Ž | j        dk    r‘| j        dvrˆ|j         j        dv rz|sxt/          | j        dv rd nd!|¦  «        }||k     }| 	                    ¦   «         rC|�||                              ¦   «         sJ ‚n$|                     d"¦  «        }t          j        ||<   |j        }| j        | j        vr+|                      |	j         ¦  «        }t9          ||¦  «        }n|}|S )$Nr¢   ÚmM)rC   rD   r©   TÚbÚuint8Úfloat16ÚskipnaF©Úcopy©r5   rz   )	rH   rI   r[   r]   r_   rm   rk   rU   ra   rU   r­   )ÚoutÚcountsr�   Úlabelsr®   r«   r¬   Úis_datetimelike)rf   re   rc   ro   rW   )re   rf   rÃ   )r®   r«   r¬   )rÀ   r�   rÂ   r«   r¬   r…   )rÀ   rÁ   r�   rÂ   r«   r¬   z is not implementedrE   r¬   )rÀ   r�   rÂ   r•   rÃ   r«   r    r’   )rU   rW   r   r;   rŸ   © )r5   rJ   rL   r   ÚviewÚastyper0   Úfloat32r2   rC   r¾   rN   Úint8r³   r�   rŽ   r”   r¥   r   ÚemptyÚzerosr©   r‰   r]   rD   ÚnanÚcast_blocklistrª   r   )rR   r�   r®   r•   r¯   r«   r¬   r­   r´   Úorig_valuesr5   r‚   rÃ   rœ   Úfuncr¤   ÚresultrÁ   ÚcutoffÚempty_groupsÚ	res_dtypeÚ	op_results                         r6   r²   zWrappedCythonOp._call_cython_opf  sæ  € ð ˆà”ˆØ”Z 7Ð*ˆ
àœ*¨Ð,ˆàŒ8�~Ð%Ð%Øˆ|Ý˜F‘|”|�àð 	*Ø—[’[ Ñ)Ô)ˆFØˆJˆJØŒZ˜3ÒÐØ—[’[ Ñ)Ô)ˆFØŒ<˜9Ò$Ð$Ø—]’]¥2¤:Ñ.Ô.ˆFàŒ8�~Ð%Ð%Ø�ŠˆØ˜(Ô#ð ,àÐ'¨D¯HªH©J¬JÐ'à!'§¢¡¤˜Ø'+˜˜t™Ø—]’]¥4¨e�]Ñ4Ô4×9Ò9½"¼'ÑBÔBˆFØˆJà”ˆØÐØ”6ˆDØÐ&Ø)œm�à×*Ò*¨7°FÑ;Ô;ˆ	Ø×(Ò(¨¬°D´H¸f¼lÈJÑWÔWˆØ×&Ò& vÑ.Ô.ˆØ×'Ò'¨¬Ñ5Ô5ˆ	å�BœH Y°iÐ@Ñ@Ô@ÑAÔAˆØŒ9˜Ò#Ð#Ý”X˜g­R¬XÐ6Ñ6Ô6ˆFØŒxð 
ð 
ð 
ð ”8˜uÒ$Ð$ð )0�F˜9Ñ%Ø�ð 
ØØ!Ø!Ø#Ø'ØØ +Ø$3ð
ð 
ð ð
ð 
ð 
ð 
ð ”ÐBÐBÐBØ”8˜~Ð-Ð-Ø0?�FÐ,Ñ-Ø�ØØØØð		ð
 (ØØ +ð	ð 	ð ð	ð 	ð 	ð 	ð ”˜^Ð+Ð+Ø�ð ØØ!Ø#ØØ +ðð ð ðð ð ð  Ÿš¥t°%˜Ñ8Ô8��Ø”Ð-Ð-Ð-Ø�ð ØØ!Ø!Ø#ØØ +ðð ð ðð ð ð �F’?�?Ø#Ÿ]š]­6Ñ2Ô2�Føõ *¨T¬XÐ*JÐ*JÐ*JÑKÔKÐKð Œx˜6Ò!Ð!à(3��}Ñ%ØˆDð ØØØØØ /Øðð ð ðð ð ð Œ9˜Ò#Ð#¨¬Ð8LÐ(LÐ(Lð Œ|Ô  DÐ(Ð(°Ð(å $¤(¨oÐ"=Ð"=˜Q˜QÀ1ÀiÑPÔP�Ø%¨š�Ø×#Ò#Ñ%Ô%ð 6Ø"Ð.Ø*¨<Ô8×<Ò<Ñ>Ô>Ð>Ð>Ð>Ð>ð "(§¢¨yÑ!9Ô!9˜Ý/1¬v˜˜|Ñ,à”ˆàŒ8˜4Ô.Ð.Ð.ð
 ×.Ò.¨{Ô/@ÑAÔAˆIÝ/°¸	ÑBÔBˆIˆIàˆIàÐr8   Úaxisr   r
   c                ó°   — |j         dk    rt          d¦  «        ‚|j         dk    r|dk    s
J |¦   «         ‚d S t          |j        ¦  «        s|dk    sJ ‚d S d S )Né   z.number of dimensions is currently limited to 2r;   r   )r=   r‰   r   r5   )rR   rÔ   r�   s      r6   Ú_validate_axiszWrappedCythonOp._validate_axis  sr   € àŒ;˜Š?ˆ?Ý%Ð&VÑWÔWÐWØŒ;˜!ÒÐØ˜1’9�9�9˜d‘9”9�9�9�9Ý$ V¤\Ñ2Ô2ð 	ð ˜1’9�9�9�9ð	ð 	ð �9r8   éÿÿÿÿ)r®   c          	     óÂ   — |                       ||¦  «         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/   r0   r1   Ú_groupby_oprL   rM   r¶   )rR   r�   rÔ   r®   r¯   r•   r´   s          r6   Úcython_operationz WrappedCythonOp.cython_operation  s©   € ð 	×Ò˜D &Ñ)Ô)Ð)å˜&¥"¤*Ñ-Ô-ð 		à%�6Ô%ð Ø”HØ#Ô2Ø#ØØðð ð ðð ð ð +ˆtÔ*Øð
àØØØð
ð 
ð ð
ð 
ð 	
r8   )rJ   rK   rL   rK   rM   rN   r,   r-   )rL   rK   r,   rK   )rJ   rK   rL   rK   r5   r�   r‚   rN   )r�   r�   r,   r�   )r•   r–   r�   r�   r,   r   )r5   r�   r,   r�   )r�   r�   r®   r–   r•   r–   r¯   r�   r«   r°   r¬   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Ì   rS   Ú	functoolsÚpartialrˆ   Úgroup_any_allÚgroup_idxmin_idxmaxrd   r|   Ú__annotations__r˜   Úclassmethodr€   ÚcacherŽ   r”   r�   r¥   rª   r   r¶   r²   r×   rÜ   rÄ   r8   r6   rB   rB   j   sQ  € € € € € € ðð ð �YØCÐCÐCñô €Nð-ð -ð -ð -ð
ØÐ$�9Ô$ ZÔ%=ÈÐNÑNÔNð
àÐ$�9Ô$ ZÔ%=ÈÐNÑNÔNð
ð �;ð
ð �Lð	
ð
 Ð'�iÔ'¨
Ô(FÈXÐVÑVÔVð
ð Ð'�iÔ'¨
Ô(FÈXÐVÑVÔVð
ð �;ð
ð �;ð
ð �Lð
ð Ð,ð
ð �;ð
ð Ð$�9Ô$ ZÔ%9ÀÐFÑFÔFð
ð Ð$�9Ô$ ZÔ%9ÀÐFÑFÔFð
ð �Lð
ð �Lð
ð  �[ð!
ð" �Lð#
ð$ �Lð%
ð 
ð* 'Ø$Ø$Ø$Ø ð
ð 
ð+*ð *Ðð ð ð ñ ð< ˜Q�K€Màðð ð ñ „[ðð Ø„_ð'ð 'ð 'ñ „_ñ „[ð'ðR#ð #ð #ð #ðJð ð ð ð&#ð #ð #ð #ðð ð ð ð4 ð .2Ø48Øð,
ð ,
ð ,
ð ,
ð ,
ñ „Uð,
ð\ ð ðcð cð cð cð cñ „UðcðJ ðð ð ñ „Uðð ð ð!
ð !
ð !
ð !
ð !
ñ „Uð!
ð !
ð !
r8   rB   c                  óü  — e Zd ZU dZded<   	 	 dRdSd„ZedTd„¦   «         ZdUd„ZedVd„¦   «         Z	dWd„Z
edXd„¦   «         ZedYd„¦   «         ZeedZd„¦   «         ¦   «         Zed[d„¦   «         Zed\d „¦   «         Zed]d"„¦   «         Zed^d$„¦   «         Zed_d&„¦   «         Zeed`d'„¦   «         ¦   «         Zeed`d(„¦   «         ¦   «         ZedZd)„¦   «         ZeedVd*„¦   «         ¦   «         Zedad+„¦   «         ZedZd,„¦   «         Zedbd.„¦   «         Zedcd/„¦   «         Zedcd0„¦   «         Zddd8„Zded9„Zedfd;„¦   «         Z e	 dgdhdC„¦   «         Z!e	 didjdI„¦   «         Z"edkdK„¦   «         Z#edldO„¦   «         Z$eedZdP„¦   «         ¦   «         Z%dQS )mÚ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Ô   TÚ	groupingsúlist[grouper.Grouping]ÚsortrN   Údropnar,   r-   c                ó|   — t          |t          ¦  «        s
J |¦   «         ‚|| _        || _        || _        || _        d S rP   )r/   r   rÔ   Ú
_groupingsÚ_sortrî   )rR   rÔ   rë   rí   rî   s        r6   rS   zBaseGrouper.__init__N  sB   € õ ˜$¥Ñ&Ô&Ð,Ð,¨Ñ,Ô,Ð&àˆŒ	Ø#ˆŒØˆŒ
ØˆŒˆˆr8   c                ó   — | j         S rP   )rð   ©rR   s    r6   rë   zBaseGrouper.groupings\  s
   € àŒÐr8   úIterator[Hashable]c                ó*   — t          | j        ¦  «        S rP   )ÚiterÚindicesró   s    r6   Ú__iter__zBaseGrouper.__iter__`  s   € Ý�D”LÑ!Ô!Ð!r8   r–   c                ó*   — t          | j        ¦  «        S rP   )r>   rë   ró   s    r6   ÚnkeyszBaseGrouper.nkeysc  s   € å�4”>Ñ"Ô"Ð"r8   Údatar   ú#Iterator[tuple[Hashable, NDFrameT]]c              #  ór   K  — |                       |¦  «        }| j        }t          ||d¬¦  «        E d{V —† dS )úš
        Groupby iterator

        Returns
        -------
        Generator yielding sequence of (name, subsetted object)
        for each group
        T©ÚstrictN)Ú_get_splitterÚresult_indexÚzip)rR   rû   ÚsplitterÚkeyss       r6   Úget_iteratorzBaseGrouper.get_iteratorg  sP   è è € ð ×%Ò% dÑ+Ô+ˆàÔ ˆÝ�t˜X¨dÐ3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3r8   r+   ÚDataSplitterc                ó†   — 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)rR   rû   Úklasss      r6   r  zBaseGrouper._get_splitteru  sQ   € õ �d�FÑ#Ô#ð 	"Ý(6ˆEˆEõ "ˆEàˆuØØŒLØÔ'ØÔ&ð	
ñ 
ô 
ð 	
r8   ú$dict[Hashable, npt.NDArray[np.intp]]c                ó¸  — t          | j        ¦  «        dk    r-t          | j        t          ¦  «        r| j        d         j        }n&d„ | j        D ¦   «         }t          || j        ¦  «        }| j        sgt          | j        t          ¦  «        }|s+| j        j
        rd„ |                     ¦   «         D ¦   «         }n |rd„ |                     ¦   «         D ¦   «         }|S )z"dict {group name -> group indices}r;   r   c                ó   — g | ]	}|j         ‘Œ
S rÄ   ©Úcodes©Ú.0Úpings     r6   ú
<listcomp>z'BaseGrouper.indices.<locals>.<listcomp>�  s   € Ð@Ð@Ð@¨˜$œ*Ð@Ð@Ð@r8   c                óP   — i | ]#\  }}t          |¦  «        rt          j        n||“Œ$S rÄ   ©r   r0   rË   ©r  ÚkeyÚvalues      r6   ú
<dictcomp>z'BaseGrouper.indices.<locals>.<dictcomp>•  s<   € ð ð ð Ù<F¸CÀ�d 3™iœiÐ0•B”F�F¨S°%ðð ð r8   c                óH   — i | ]\  }}t          d „ |D ¦   «         ¦  «        |“Œ S )c              3  óP   K  — | ]!}t          |¦  «        rt          j        n|V — Œ"d S rP   r  )r  Úcomps     r6   ú	<genexpr>z1BaseGrouper.indices.<locals>.<dictcomp>.<genexpr>œ  s3   è è € ÐIÐI¸T¥D¨¡J¤JÐ8�"œ&˜&°DÐIÐIÐIÐIÐIÐIr8   )Útupler  s      r6   r  z'BaseGrouper.indices.<locals>.<dictcomp>š  sG   € ð ð ð ñ #˜˜Uõ ÐIÐIÀSÐIÑIÔIÑIÔIÈ5ðð ð r8   )r>   rë   r/   r  r   r÷   r&   Úlevelsrî   r   ÚhasnansÚitems)rR   rÏ   Ú
codes_listÚhas_mis       r6   r÷   zBaseGrouper.indices‰  sõ   € õ ˆtŒ~ÑÔ !Ò#Ð#­
°4Ô3DÕFVÑ(WÔ(WÐ#à”^ AÔ&Ô.ˆFˆFà@Ð@°´Ð@Ñ@Ô@ˆJÝ% j°$´+Ñ>Ô>ˆFØŒ{ð 	Ý Ô 1µ:Ñ>Ô>ˆFØð 
˜dÔ/Ô7ð 
ðð ØJPÏ,Ê,É.Ì.ðñ ô ��ð ð ðð ð '-§l¢l¡n¤nðñ ô �ð ˆr8   únpt.NDArray[np.intp]c                ó  — | j         }| j        r>t          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   r0   Úwhererw   r%   r•   Útake)rR   rÚ   r«   Ú	null_gapsrÏ   s        r6   r  zBaseGrouper.result_ilocs¢  s�   € ð ŒhˆàÔð 	Ý”8˜C 1šHÑ%Ô%ˆDåœ	 #¨¢)Ñ,Ô,¨TÔ2ˆIØ�d”)ˆCå'¨¨T¬\Ñ:Ô:ˆàÔð 	1à•b”g˜i¨Ñ0Ô0Ñ0ˆFàˆr8   ú#list[npt.NDArray[np.signedinteger]]c                ó$   — d„ | j         D ¦   «         S )Nc                ó   — g | ]	}|j         ‘Œ
S rÄ   r  r  s     r6   r  z%BaseGrouper.codes.<locals>.<listcomp>½  s   € Ð6Ð6Ð6˜t�”
Ð6Ð6Ð6r8   ©rë   ró   s    r6   r  zBaseGrouper.codes»  s   € à6Ð6 t¤~Ð6Ñ6Ô6Ð6r8   úlist[Index]c                ót   — t          | j        ¦  «        dk    rt          | j        j        ¦  «        S | j        gS ©Nr;   )r>   rë   Úlistr  r$  ró   s    r6   r$  zBaseGrouper.levels¿  s7   € åˆtŒ~ÑÔ Ò"Ð"å˜Ô)Ô0Ñ1Ô1Ð1àÔ%Ð&Ð&r8   úlist[Hashable]c                ó$   — d„ | j         D ¦   «         S )Nc                ó   — g | ]	}|j         ‘Œ
S rÄ   rY   r  s     r6   r  z%BaseGrouper.names.<locals>.<listcomp>É  s   € Ð5Ð5Ð5˜d�”	Ð5Ð5Ð5r8   r1  ró   s    r6   ÚnameszBaseGrouper.namesÇ  s   € à5Ð5 d¤nÐ5Ñ5Ô5Ð5r8   r!   c                ó˜   — | j         }| j        }|r!t          j        ||dk             |¬¦  «        }ng }t	          || j        dd¬¦  «        S )z&
        Compute group sizes.
        rØ   )Ú	minlengthr©   F)Úindexr5   r¾   )rÚ   r•   r0   Úbincountr!   r  )rR   rÚ   r•   rÀ   s       r6   rG   zBaseGrouper.sizeË  sW   € ð
 ŒhˆØ”,ˆàð 	Ý”+˜c #¨¢)œn¸Ð@Ñ@Ô@ˆCˆCàˆCÝ�c Ô!2¸'ÈÐNÑNÔNÐNr8   údict[Hashable, Index]c                óF  ‡ ‡— t          ‰ j        ¦  «        dk    r‰ j        d         j        S ‰ j        \  }}|j        Št          j        |t          t          |¦  «        ¦  «        ¬¦  «        }ˆ ˆfd„|                     ¦   «          	                    ¦   «         D ¦   «         }|S )ú!dict {group name -> group labels}r;   r   )Ú
categoriesc                óX   •— i | ]&\  }}‰|         ‰j                              |¦  «        “Œ'S rÄ   )rÔ   r,  )r  ÚgroupÚ
axis_ilocsrR   r�   s      €€r6   r  z&BaseGrouper.groups.<locals>.<dictcomp>á  sC   ø€ ð 
ð 
ð 
ñ "��zð �5ŒM˜4œ9Ÿ>š>¨*Ñ5Ô5ð
ð 
ð 
r8   )
r>   rë   ÚgroupsÚresult_index_and_idsr:   r   Ú
from_codesÚrangeÚ_reverse_indexerr&  )rR   r  rÚ   rA  rÏ   r�   s   `    @r6   rE  zBaseGrouper.groupsÙ  s³   øø€ õ ˆtŒ~ÑÔ !Ò#Ð#Ø”> !Ô$Ô+Ð+Ø Ô5Ñˆ�cØÔ%ˆÝ Ô+¨C½EÅ#ÀlÑBSÔBSÑ<TÔ<TÐUÑUÔUˆ
ð
ð 
ð 
ð 
ð 
ð &0×%@Ò%@Ñ%BÔ%B×%HÒ%HÑ%JÔ%Jð
ñ 
ô 
ˆð
 ˆr8   c                ó8   — t          | j        d¬¦  «        j        S )NFr½   )r   rÚ   Úis_monotonic_increasingró   s    r6   Úis_monotoniczBaseGrouper.is_monotonicè  s   € õ �T”X EÐ*Ñ*Ô*ÔBÐBr8   c                óV   — t          | j        dk                          ¦   «         ¦  «        S )zE
        Whether grouper has null value(s) that are dropped.
        r   )rN   rÚ   rC   ró   s    r6   rM   zBaseGrouper.has_dropped_naî  s$   € õ �T”X ’\×&Ò&Ñ(Ô(Ñ)Ô)Ð)r8   c                ó   — | j         S rP   ©rÚ   ró   s    r6   Ú
codes_infozBaseGrouper.codes_infoö  s   € ð Œxˆr8   c                ó*   — t          | j        ¦  «        S rP   )r>   r  ró   s    r6   r•   zBaseGrouper.ngroupsû  s   € õ �4Ô$Ñ%Ô%Ð%r8   c                ó   — | j         d         S )Nr   ©rF  ró   s    r6   r  zBaseGrouper.result_index   ó   € àÔ(¨Ô+Ð+r8   c                ó   — | j         d         S r4  rS  ró   s    r6   rÚ   zBaseGrouper.ids  rT  r8   ú"tuple[Index, npt.NDArray[np.intp]]c           
     ój	  ‡‡‡‡‡— d„ | j         D ¦   «         Šd„ | j         D ¦   «         }d„ | j         D ¦   «         Št          t          | j         ‰d¬¦  «        ¦  «        D ],\  }\  }}|j        r|                     |j        ¦  «        ‰|<   Œ-t          | j         ¦  «        dk    r6‰d         }| j        d         |_        t          | j
        d         ¦  «        }�nÙt          |¦  «        r'|                      ‰| j
        | j        ‰¦  «        \  }}�n£t          |¦  «        s&|                      ‰| j
        | j        ¦  «        \  }}�nn| j        Šd„ | j         D ¦   «         Šd	„ t          |¦  «        D ¦   «         }d
„ t          |¦  «        D ¦   «         }|                      ˆfd„|D ¦   «         ˆfd„|D ¦   «         ˆfd„|D ¦   «         ˆfd„|D ¦   «         ¬¦  «        \  }	}
|                      ˆfd„|D ¦   «         ˆfd„|D ¦   «         ˆfd„|D ¦   «         ¬¦  «        \  }}t          j        t          j        |j
        t          |	¦  «        ¦  «        t          j        |	j
        t          |¦  «        d¬¦  «        gd¬¦  «        }t          j        ||z   d¬¦  «        \  }}t)          t+          |j        ¦  «        t+          |	j        ¦  «        z   |t+          |j        ¦  «        t+          |	j        ¦  «        z   ¬¦  «                             |¦  «        }t          |¦  «        |
z  |z   }t          ‰¦  «        rÚt          ‰¦  «        Šˆfd„t          t1          ‰¦  «        d¦  «        D ¦   «         }t          |¦  «        dk    r(|                     |¦  «                             ¦   «         }n|                     ¦   «         }|                     |¦  «        }t          j        |d¬¦  «        \  }}t          |¦  «        }|                     |¦  «        }n€t9          |d¬¦  «        \  }}t          |¦  «        }t          j        |t          j        t          j        t          |¦  «        ¦  «        |¦  «        g¦  «        }|                     |¦  «        }| j        r!t          j         |
dk     |dk     z  d|¦  «        }||fS )Nc                óD   — g | ]}t          j        |j        d ¬¦  «        ‘ŒS )Fr½   )r   Ú_with_inferÚuniquesr  s     r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>
  s7   € ð 
ð 
ð 
Ø<@�EÔ˜dœl°Ð7Ñ7Ô7ð
ð 
ð 
r8   c                ó,   — g | ]}|j         p|j         ‘ŒS rÄ   )Ú	_observedÚ_passed_categoricalr  s     r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>  s2   € ð 
ð 
ð 
Ø?CˆDŒNÐ: $Ô":Ð:ð
ð 
ð 
r8   c                ó   — g | ]	}|j         ‘Œ
S rÄ   )rñ   r  s     r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>  s   € Ð7Ð7Ð7 �”Ð7Ð7Ð7r8   Trÿ   r;   r   c                ó   — g | ]	}|j         ‘Œ
S rÄ   r  r  s     r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>#  s   € Ð;Ð;Ð; D�T”ZÐ;Ð;Ð;r8   c                ó   — g | ]	\  }}|¯|‘Œ
S rÄ   rÄ   ©r  ÚidxÚobs      r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>$  s!   € ÐBÐBÐB¡' # r¸rÐB˜#ÐBÐBÐBr8   c                ó   — g | ]	\  }}|°|‘Œ
S rÄ   rÄ   ra  s      r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>%  s!   € ÐHÐHÐH¡G C¨ÀRÐH˜CÐHÐHÐHr8   c                ó    •— g | ]
}‰|         ‘ŒS rÄ   rÄ   ©r  rb  r$  s     €r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>'  s   ø€ Ð:Ð:Ð:¨˜˜sœÐ:Ð:Ð:r8   c                ó    •— g | ]
}‰|         ‘ŒS rÄ   rÄ   ©r  rb  r  s     €r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>(  ó   ø€ Ð8Ð8Ð8 c�u˜S”zÐ8Ð8Ð8r8   c                ó    •— g | ]
}‰|         ‘ŒS rÄ   rÄ   ©r  rb  r9  s     €r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>)  ri  r8   c                ó    •— g | ]
}‰|         ‘ŒS rÄ   rÄ   )r  rb  Úsortss     €r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>*  ri  r8   )r$  r  r9  rm  c                ó    •— g | ]
}‰|         ‘ŒS rÄ   rÄ   rf  s     €r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>-  s   ø€ Ð<Ð<Ð<¨˜˜sœÐ<Ð<Ð<r8   c                ó    •— g | ]
}‰|         ‘ŒS rÄ   rÄ   rh  s     €r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>.  ó   ø€ Ð:Ð:Ð: c�u˜S”zÐ:Ð:Ð:r8   c                ó    •— g | ]
}‰|         ‘ŒS rÄ   rÄ   rk  s     €r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>/  rp  r8   )r$  r  r9  ©rÔ   ©Úreturn_indexc                ó$   •— g | ]\  }}|°‰|z
  ‘ŒS rÄ   rÄ   ©r  rb  rí   Ún_levelss      €r6   r  z4BaseGrouper.result_index_and_ids.<locals>.<listcomp>G  s7   ø€ ð ð ð á!˜˜TØðØ˜s‘Nðð ð r8   F©rí   rØ   )!rë   Ú	enumerater  r]  Úset_categoriesÚ
_orig_catsr>   r9  rZ   r   r  rD   Ú_ob_index_and_idsrC   Ú_unob_index_and_idsr0   ÚconcatenateÚtileÚrepeatÚuniquer   r5  r$  Úreorder_levelsÚreversedÚ_drop_level_numbersÚargsortr,  r"   ÚdeleteÚarangerî   r+  )rR   ÚobsÚkr  Úlevelr  rÚ   Ú
ob_indicesÚunob_indicesÚob_indexÚob_idsÚ
unob_indexÚunob_idsÚresult_index_codesÚ_r<  Údrop_levelsÚsorterrZ  Útakerr  r$  rw  r9  rm  s                       @@@@@r6   rF  z BaseGrouper.result_index_and_ids  s  øøøøø€ ð
ð 
ØDHÄNð
ñ 
ô 
ˆð
ð 
ØGKÄ~ð
ñ 
ô 
ˆð 8Ð7¨¬Ð7Ñ7Ô7ˆå )­#¨d¬n¸fÈTÐ*RÑ*RÔ*RÑ SÔ Sð 	Bð 	BÑˆA‰}��eØÔ'ð BØ!×0Ò0°´ÑAÔA��q‘	øåˆtŒ~ÑÔ !Ò#Ð#Ø! !œ9ˆLØ $¤
¨1¤ˆLÔÝ% d¤j°¤mÑ4Ô4ˆC‰CÝ�‰XŒXð E	GØ $× 6Ò 6Ø˜œ
 D¤J°ñ!ô !ÑˆL˜#™#õ �S‘”ð A	GØ $× 8Ò 8¸ÀÄÈTÌZÑ XÔ XÑˆL˜#™#ð ”JˆEØ;Ð;¨D¬NÐ;Ñ;Ô;ˆEØBÐB­Y°s©^¬^ÐBÑBÔBˆJØHÐH­y¸©~¬~ÐHÑHÔHˆLØ#×5Ò5Ø:Ð:Ð:Ð:¨zÐ:Ñ:Ô:Ø8Ð8Ð8Ð8¨ZÐ8Ñ8Ô8Ø8Ð8Ð8Ð8¨ZÐ8Ñ8Ô8Ø8Ð8Ð8Ð8¨ZÐ8Ñ8Ô8ð	  6ñ  ô  ÑˆH�fð $(×#;Ò#;Ø<Ð<Ð<Ð<¨|Ð<Ñ<Ô<Ø:Ð:Ð:Ð:¨\Ð:Ñ:Ô:Ø:Ð:Ð:Ð:¨\Ð:Ñ:Ô:ð $<ñ $ô $Ñ ˆJ˜õ "$¤å”G˜JÔ,­c°(©m¬mÑ<Ô<Ý”I˜hœn­c°*©o¬oÀAÐFÑFÔFðð ð"ñ "ô "Ðõ ”y °
Ñ!:ÈÐNÑNÔN‰HˆAˆuÝ%Ý˜JÔ-Ñ.Ô.µ°h´oÑ1FÔ1FÑFØ(Ý˜:Ô+Ñ,Ô,­t°H´NÑ/CÔ/CÑCðñ ô ÷ Šn˜UÑ#Ô#ð	 õ �j‘/”/ FÑ*¨XÑ5ˆCå�5‰zŒzð 8å˜u™:œ:�ðð ð ð å%.­x¸©¬ÀÑ%BÔ%Bðñ ô �õ
 �{Ñ#Ô# aÒ'Ð'Ø)×=Ò=¸kÑJÔJ×RÒRÑTÔT�F�Fà)×1Ò1Ñ3Ô3�FØ+×0Ò0°Ñ8Ô8�Ýœ9 V¸$Ð?Ñ?Ô?‘��5Ý)¨#Ñ.Ô.�Ø—j’j ‘o”o��õ  4°C¸eÐDÑDÔD‘��WÝ)¨#Ñ.Ô.�ÝœØ�bœi­¬	µ#°lÑ2CÔ2CÑ(DÔ(DÀgÑNÔNÐOñô �ð  ,×0Ò0°Ñ7Ô7�àŒ{ð GÝ”h ¨¢
¨x¸!ª|Ñ<¸bÀ#ÑFÔF�à˜SÐ Ð r8   c                óP   — t          d„ | j        D ¦   «         ¦  «        r| S | j        S )Nc              3  ó$   K  — | ]}|j         V — Œd S rP   )r\  r  s     r6   r"  z/BaseGrouper.observed_grouper.<locals>.<genexpr>e  s$   è è € Ð9Ð9 $ˆtŒ~Ð9Ð9Ð9Ð9Ð9Ð9r8   )rD   rë   Ú_observed_grouperró   s    r6   Úobserved_grouperzBaseGrouper.observed_grouperc  s1   € åÐ9Ð9¨$¬.Ð9Ñ9Ô9Ñ9Ô9ð 	ØˆKàÔ%Ð%r8   c                ól   — d„ | j         D ¦   «         }t          | j        || j        | j        ¬¦  «        }|S )Nc                ó   — g | ]	}|j         ‘Œ
S rÄ   )Úobserved_groupingr  s     r6   r  z1BaseGrouper._observed_grouper.<locals>.<listcomp>l  s   € ÐGÐGÐG°�TÔ+ÐGÐGÐGr8   )rí   rî   )rë   rê   rÔ   rñ   rî   )rR   rë   r   s      r6   r˜  zBaseGrouper._observed_grouperj  s8   € àGÐG¸¼ÐGÑGÔGˆ	Ý˜dœi¨¸¼ÈDÌKÐXÑXÔXˆØˆr8   r$  r  úlist[npt.NDArray[np.intp]]r9  rm  ú
list[bool]ú'tuple[MultiIndex, npt.NDArray[np.intp]]c                ód  ‡‡— 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k    rât          ‰¦  «        Šˆfd„t          t          ‰¦  «        d¦  «        D ¦   «         }t          |¦  «        dk    r(| 
                    |¦  «                             ¦   «         }n|                     ¦   «         }|                     |¦  «        }t          j        |d¬¦  «        \  }}t          j        |	dk    d|                     |	¦  «        ¦  «        }	t	          |	¦  «        }	||	fS )Nc              3  ó0   •K  — | ]}‰d          |k    V — ŒdS )r   NrÄ   )r  rí   rm  s     €r6   r"  z0BaseGrouper._ob_index_and_ids.<locals>.<genexpr>w  s,   øè è € Ð HÐ H°d  q¤¨TÒ!1Ð HÐ HÐ HÐ HÐ HÐ Hr8   r;   r   Fc              3  ó4   K  — | ]}t          |¦  «        V — Œd S rP   ©r>   ©r  rŠ  s     r6   r"  z0BaseGrouper._ob_index_and_ids.<locals>.<genexpr>y  ó(   è è € Ð5Ð5 U•c˜%‘j”jÐ5Ð5Ð5Ð5Ð5Ð5r8   T©rí   Úxnullrx  )r§  )r$  r  r9  Úverify_integrityc                ó$   •— g | ]\  }}|°‰|z
  ‘ŒS rÄ   rÄ   rv  s      €r6   r  z1BaseGrouper._ob_index_and_ids.<locals>.<listcomp>‰  s7   ø€ ð ð ð á�C˜ØðØ˜3‘ðð ð r8   rs  rØ   )rD   r#  r$   r"   r   r#   r   r>   ry  rƒ  r„  r…  r,  r0   r�  r+  )rR   r$  r  r9  rm  Úconsistent_sortingÚsort_in_compressrš   Úgroup_indexrŽ  Úobs_group_idsÚob_index_codesr�  r“  r”  r’  r<  rw  s       `            @r6   r|  zBaseGrouper._ob_index_and_idsp  så  øø€ õ !Ð HÐ HÐ HÐ H¸eÀAÀBÀB¼iÐ HÑ HÔ HÑHÔHÐØ'9ÐD˜5 œ8˜8¸uÐÝÐ5Ð5¨fÐ5Ñ5Ô5Ñ5Ô5ˆÝ% e¨U¸ÀTÐJÑJÔJˆÝ 4°[ÐGWÐ XÑ XÔ XÑˆ�Ý$ VÑ,Ô,ˆÝ-Ø�M 5¨%°tð
ñ 
ô 
ˆõ ØØ ØØ"ð	
ñ 
ô 
ˆð "ð 	D¥c¨(¡m¤m°aÒ&7Ð&7å˜5‘z”zˆHðð ð ð å!*­8°E©?¬?¸AÑ!>Ô!>ðñ ô ˆKõ
 �;ÑÔ !Ò#Ð#Ø!×5Ò5°kÑBÔB×JÒJÑLÔL��à!×)Ò)Ñ+Ô+�Ø—}’} VÑ,Ô,ˆHÝ”y °dÐ;Ñ;Ô;‰HˆAˆuÝ”X˜f¨šl¨B°·
²
¸6Ñ0BÔ0BÑCÔCˆFÝ$ VÑ,Ô,ˆØ˜ÐÐr8   c                ó¬   — t          d„ |D ¦   «         ¦  «        }t          ||dd¬¦  «        }t          j        ||¬¦  «        }t	          |¦  «        }||fS )Nc              3  ó4   K  — | ]}t          |¦  «        V — Œd S rP   r£  r¤  s     r6   r"  z2BaseGrouper._unob_index_and_ids.<locals>.<genexpr>ž  r¥  r8   Tr¦  )r9  )r#  r$   r   Úfrom_productr   )rR   r$  r  r9  rš   r�  r�  s          r6   r}  zBaseGrouper._unob_index_and_ids˜  sc   € õ Ð5Ð5¨fÐ5Ñ5Ô5Ñ5Ô5ˆÝ" 5¨%°dÀ$ÐGÑGÔGˆÝÔ,¨V¸5ÐAÑAÔAˆ
Ý& xÑ0Ô0ˆØ˜8Ð#Ð#r8   úGenerator[Index]c              #  óº   K  — | j         }t          | j        ¦  «        dk    r|V — d S t          |j        dz
  dd¦  «        D ]}|                     |¦  «        V — Œd S )Nr;   rØ   )r  r>   rë   rH  ÚnlevelsÚget_level_values)rR   r  rŠ  s      r6   Úget_group_levelszBaseGrouper.get_group_levels¤  s�   è è € ð Ô(ˆÝˆtŒ~ÑÔ !Ò#Ð#ØÐÐÐÐÐå˜|Ô3°aÑ7¸¸RÑ@Ô@ð ;ð ;�Ø"×3Ò3°EÑ:Ô:Ð:Ð:Ð:Ð:ð;ð ;r8   rØ   rJ   rK   rL   r   r®   r
   c           	     óv   — |dv sJ ‚t          ||| j        ¬¦  «        } |j        d|||| j        | j        dœ|¤ŽS )z;
        Returns the values of a cython operation.
        )r{   rz   rQ   )r�   rÔ   r®   r¯   r•   rÄ   )rB   rM   rÜ   rÚ   r•   )rR   rJ   r�   rL   rÔ   r®   r´   Úcy_ops           r6   Ú_cython_operationzBaseGrouper._cython_operation²  sk   € ð Ð1Ð1Ð1Ð1Ð1å T¨sÀ4ÔCVÐWÑWÔWˆà%ˆuÔ%ð 
ØØØØ”XØ”Lð
ð 
ð ð
ð 
ð 	
r8   Fr4   rÎ   r'   Úpreserve_dtypec                ób   — |                       ||¦  «        }|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)rR   r4   rÎ   rº  rÏ   s        r6   Ú
agg_serieszBaseGrouper.agg_seriesÌ  s/   € ð  ×3Ò3°C¸Ñ>Ô>ˆØŒy×/Ò/°Ñ7Ô7Ð7r8   únpt.NDArray[np.object_]c                ó  — t          j        | j        d¬¦  «        }d}|                      |¦  «        }t	          |¦  «        D ]=\  }} ||¦  «        }t          |¦  «        }|st          ||j        ¦  «         d}|||<   Œ>|S )NÚOr¿   FT)r0   rÉ   r•   r  ry  r@   r7   r5   )	rR   r4   rÎ   rÏ   Úinitializedr  r“   rC  r?   s	            r6   r¼  z)BaseGrouper._aggregate_series_pure_pythonß  s–   € õ ”˜$œ,¨cÐ2Ñ2Ô2ˆØˆà×%Ò% cÑ*Ô*ˆå! (Ñ+Ô+ð 		ð 		‰HˆAˆuØ�$�u‘+”+ˆCÝ  Ñ%Ô%ˆCàð #å" 3¨¬Ñ4Ô4Ð4Ø"�àˆF�1‰IˆIàˆr8   r�   úDataFrame | Seriesútuple[list, bool]c                ó¨  — d}|                       |¦  «        }| j        }g }t          ||d¬¦  «        }|D ]\\  }}	t                               |	d|¦  «         |	j        }
 ||	¦  «        }|st          ||
¦  «        sd}|                     |¦  «         Œ]t          |¦  «        dk    r+t          |dd ¦  «        dv r ||j
        d d…         ¦  «         ||fS )NFTrÿ   rZ   r   rÝ   )rg   ri   rU   rW   )r  r  r  r2   Ú__setattr__ÚaxesÚ_is_indexed_likeÚappendr>   r‡   Úiloc)rR   r�   rû   Úmutatedr  Ú
group_keysÚresult_valuesÚzippedr  rC  Ú
group_axesr?   s               r6   Úapply_groupwisezBaseGrouper.apply_groupwiseõ  s  € ð ˆØ×%Ò% dÑ+Ô+ˆØÔ&ˆ
Øˆõ �Z °$Ð7Ñ7Ô7ˆà ð 	&ð 	&‰JˆC�õ ×Ò˜u f¨cÑ2Ô2Ð2ð œˆJØ�!�E‘(”(ˆCØð Õ#3°C¸Ñ#DÔ#Dð Ø�Ø× Ò  Ñ%Ô%Ð%Ð%åˆz‰?Œ?˜aÒÐ¥G¨A¨z¸4Ñ$@Ô$@ð E
ð %
ð %
ð ˆAˆdŒi˜˜˜ŒmÑÔÐà˜gÐ%Ð%r8   c                ó~   — | j                              | j        ¦  «        }t          | dd¦  «        r||dk             }|S )Nrî   Tr   )rÚ   r,  r  r‡   ©rR   rÏ   s     r6   r  zBaseGrouper._sorted_ids   sA   € ð ”—’˜tÔ0Ñ1Ô1ˆÝ�4˜ 4Ñ(Ô(ð 	)à˜F ašKÔ(ˆFØˆr8   N)TT)
rÔ   r   rë   rì   rí   rN   rî   rN   r,   r-   ©r,   rì   )r,   rô   ©r,   r–   )rû   r   r,   rü   )rû   r+   r,   r  )r,   r  ©r,   r)  )r,   r.  ©r,   r2  ©r,   r6  )r,   r!   )r,   r>  ©r,   rN   )r,   r   )r,   rV  )r,   rê   )
r$  r2  r  r�  r9  r6  rm  rž  r,   rŸ  )r$  r2  r  r�  r9  r6  r,   rŸ  )r,   r²  )rØ   )
rJ   rK   rL   rK   rÔ   r   r®   r–   r,   r
   )F)r4   r!   rÎ   r'   rº  rN   r,   r
   )r4   r!   rÎ   r'   r,   rÀ  )r�   r'   rû   rÄ  r,   rÅ  )&rÝ   rÞ   rß   rà   ræ   rS   Úpropertyrë   rø   rú   r  r   r  r   r÷   r  r  r$  r9  rG   rE  rL  rM   rP  r•   r  rÚ   rF  r™  r˜  r|  r}  r¶  r¹  r¿  r¼  rÑ  r  rÄ   r8   r6   rê   rê   <  s  € € € € € € ðð ð €K€K�Kð Øðð ð ð ð ð ðð ð ñ „Xðð"ð "ð "ð "ð ð#ð #ð #ñ „Xð#ð4ð 4ð 4ð 4ð ð
ð 
ð 
ñ „Uð
ð& ðð ð ñ „^ðð0 Øðð ð ñ „^ñ „Uðð. ð7ð 7ð 7ñ „Xð7ð ð'ð 'ð 'ñ „Xð'ð ð6ð 6ð 6ñ „Xð6ð ðOð Oð Oñ „UðOð ðð ð ñ „^ðð ØðCð Cð Cñ „^ñ „UðCð Øð*ð *ð *ñ „^ñ „Uð*ð ðð ð ñ „^ðð Øð&ð &ð &ñ „^ñ „Uð&ð ð,ð ,ð ,ñ „Xð,ð ð,ð ,ð ,ñ „Xð,ð ðX!ð X!ð X!ñ „^ðX!ðt ð&ð &ð &ñ „Xð&ð ðð ð ñ „^ðð
& ð & ð & ð & ðP
$ð 
$ð 
$ð 
$ð ð;ð ;ð ;ñ „Uð;ð ð ð
ð 
ð 
ð 
ñ „Uð
ð2 àBGð8ð 8ð 8ð 8ñ „Uð8ð$ ðð ð ñ „Uðð* ð%&ð %&ð %&ñ „Uð%&ðT Øðð ð ñ „^ñ „Uðð ð r8   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dS )'Ú
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   Ú	binlabelsNr,   r-   c                ó¼   — t          |¦  «        | _        t          |¦  «        | _        || _        t          | j        ¦  «        t          | j        ¦  «        k    sJ ‚d S rP   )r   rÝ  r    rÞ  Úindexerr>   )rR   rÝ  rÞ  rà  s       r6   rS   zBinGrouper.__init__L  sT   € õ ! Ñ&Ô&ˆŒ	Ý% iÑ0Ô0ˆŒØˆŒõ �4”>Ñ"Ô"¥c¨$¬)¡n¤nÒ4Ð4Ð4Ð4Ð4Ð4r8   c                óR   — d„ t          | j        | j        d¬¦  «        D ¦   «         }|S )r@  c                ó,   — i | ]\  }}|t           u¯||“ŒS rÄ   )r   r  s      r6   r  z%BinGrouper.groups.<locals>.<dictcomp>_  s/   € ð 
ð 
ð 
á��UØ�#ˆ~ˆ~ð �àˆ~ˆ~r8   Trÿ   )r  rÞ  rÝ  rÓ  s     r6   rE  zBinGrouper.groupsZ  s:   € ð

ð 
å! $¤.°$´)ÀDÐIÑIÔIð
ñ 
ô 
ˆð
 ˆr8   r–   c                ó   — dS r4  rÄ   ró   s    r6   rú   zBinGrouper.nkeysf  s	   € ð ˆqr8   r)  c                óh   — | j         }| j        �#t          j        || j        f¦  «        }||         }|S rP   )rÚ   rà  r0   Úlexsort)rR   rÚ   r”  s      r6   rP  zBinGrouper.codes_infok  s7   € ð ŒhˆØŒ<Ð#Ý”Z  d¤lÐ 3Ñ4Ô4ˆFØ�f”+ˆCØˆ
r8   rû   r+   c              #  óô   ‡K  — ˆfd„}d}t          | j        | j        d¬¦  «        D ] \  }}|t          ur| |||¦  «        fV — |}Œ!|t	          ‰¦  «        k     r| j        d          ||d¦  «        fV — dS dS )rþ   c                ó"   •— ‰j         | |…         S rP   )rË  )ÚstartÚedgerû   s     €r6   ú<lambda>z)BinGrouper.get_iterator.<locals>.<lambda>}  s   ø€  T¤Y¨u°T¨zÔ%:€ r8   r   Trÿ   rØ   N)r  rÝ  rÞ  r   r>   )rR   rû   Úslicerrè  ré  Úlabels    `    r6   r  zBinGrouper.get_iteratort  s´   øè è € ð ;Ð:Ð:Ð:ˆà !ˆÝ˜tœy¨$¬.ÀÐFÑFÔFð 	ð 	‰KˆD�%Ø�CÐÐØ˜V˜V E¨4Ñ0Ô0Ð0Ð0Ð0Ð0ØˆEˆEà•3�t‘9”9ÒÐØ”. Ô$ f f¨U°DÑ&9Ô&9Ð9Ð9Ð9Ð9Ð9Ð9ð Ðr8   c                óâ   — t          j        t          ¦  «        }d}t          | j        | j        d¬¦  «        D ]6\  }}||k     r+|t          ur t          t          ||¦  «        ¦  «        ||<   |}Œ7|S ©Nr   Trÿ   )ÚcollectionsÚdefaultdictr5  r  rÞ  rÝ  r   rH  )rR   r÷   r“   rì  Úbins        r6   r÷   zBinGrouper.indicesˆ  su   € åÔ)­$Ñ/Ô/ˆàˆÝ˜dœn¨d¬iÀÐEÑEÔEð 	ð 	‰JˆE�3Ø�3ŠwˆwØ¥Ð#Ð#Ý%)­%°°3©-¬-Ñ%8Ô%8�G˜E‘NØ�øØˆr8   r�  c                ó   — | j         gS rP   rO  ró   s    r6   r  zBinGrouper.codes”  s   € à”ˆzÐr8   c                ó2  — | j         }t          | j         ¦  «        dk    r$t          | j         d         ¦  «        r
|dd …         }t          |¦  «        }t          j        t          j        d| j        f         ¦  «        }t          |¦  «        }|t          | j        ¦  «        k    r(t          j        t          j	        |¦  «        |¦  «        }n9t          j        t          j        dt          j	        |¦  «        f         |¦  «        }t          |¦  «        }||fS )Nr   r;   rØ   )
rÞ  r>   r   r0   ÚdiffÚr_rÝ  r   r€  r‡  )rR   r  r•   ÚreprÚ   s        r6   rF  zBinGrouper.result_index_and_ids˜  så   € à”~ˆÝˆtŒ~ÑÔ !Ò#Ð#­¨T¬^¸AÔ->Ñ(?Ô(?Ð#Ø'¨¨¨Ô+ˆLå�lÑ#Ô#ˆÝŒg•b”e˜A˜tœy˜LÔ)Ñ*Ô*ˆå! #Ñ&Ô&ˆØ•c˜$œ)‘n”nÒ$Ð$Ý”)�BœI gÑ.Ô.°Ñ4Ô4ˆCˆCå”)�BœE "¥b¤i°Ñ&8Ô&8Ð"8Ô9¸3Ñ?Ô?ˆCÝ! #Ñ&Ô&ˆà˜SÐ Ð r8   r2  c                ó   — | j         gS rP   )rÞ  ró   s    r6   r$  zBinGrouper.levelsª  s   € à”ÐÐr8   r6  c                ó   — | j         j        gS rP   )rÞ  rZ   ró   s    r6   r9  zBinGrouper.names®  s   € à”Ô#Ð$Ð$r8   rì   c                óŠ   — | j         }| j        }|                     |¦  «        }t          j        ||dd |j        ¬¦  «        }|gS )NF)Úin_axisrŠ  rZ  )rÞ  rÚ   r,  r   ÚGroupingr:   )rR   Úlevr  rÂ   r  s        r6   rë   zBinGrouper.groupings²  sL   € àŒnˆØ”ˆØ—’˜%‘”ˆÝÔØ�F E°¸s¼{ð
ñ 
ô 
ˆð ˆvˆr8   c                ó   — | S rP   rÄ   ró   s    r6   r™  zBinGrouper.observed_grouper¼  s   € àˆr8   rP   ©r,   r-   rÕ  rÖ  )rû   r+   )r,   r�  r×  rØ  rÔ  )r,   rÜ  )rÝ   rÞ   rß   rà   ræ   rS   r   rE  rÚ  rú   rP  r  r÷   r  rF  r$  r9  rë   r™  rÄ   r8   r6   rÜ  rÜ  *  s�  € € € € € € ðð ð<  ÐÐÑØÐÐÑð ð	5ð 5ð 5ð 5ð 5ð ð	ð 	ñ „^ð	ð ðð ð ñ „Xðð ðð ð ñ „^ðð:ð :ð :ð :ð( ð	ð 	ñ „^ð	ð ðð ð ñ „^ðð ð!ð !ñ „^ð!ð" ð ð  ð  ñ „Xð ð ð%ð %ð %ñ „Xð%ð ðð ð ñ „Xðð ðð ð ñ „Xðð ð r8   rÜ  rN   c                ó  — t          | t          ¦  «        r5t          |¦  «        dk    rdS | j                             |d         ¦  «        S t          | t
          ¦  «        r | j                             |d         ¦  «        S dS )Nr;   Fr   )r/   r!   r>   r<  Úequalsr   )r4   rÈ  s     r6   rÉ  rÉ  Á  ss   € Ý�#•vÑÔð )Ýˆt‰9Œ9�qŠ=ˆ=Ø�5ØŒy×Ò  Q¤Ñ(Ô(Ð(Ý	�C�Ñ	#Ô	#ð )ØŒy×Ò  Q¤Ñ(Ô(Ð(àˆ5r8   c                  ó>   — e Zd Zdd
„Zdd„Zedd„¦   «         Zdd„ZdS )r  rû   r   r•   r–   r
  r)  r	  r,   r-   c               ó>   — || _         || _        || _        || _        d S rP   )rû   r•   Ú_slabelsÚ	_sort_idx)rR   rû   r•   r
  r	  s        r6   rS   zDataSplitter.__init__Ñ  s$   € ð ˆŒ	ØˆŒà"ˆŒØ!ˆŒˆˆr8   r*   c              #  óò   K  — | j         dk    rd S t          j        | j        | j         ¦  «        \  }}| j        }t          ||d¬¦  «        D ]+\  }}|                      |t          ||¦  «        ¦  «        V — Œ,d S rî  )r•   r	   Úgenerate_slicesr  Ú_sorted_datar  Ú_chopÚslice)rR   ÚstartsÚendsÚsdatarè  Úends         r6   rø   zDataSplitter.__iter__ß  s�   è è € ØŒ<˜1ÒÐð ˆFåÔ*¨4¬=¸$¼,ÑGÔG‰ˆ�ØÔ!ˆÝ˜f d°4Ð8Ñ8Ô8ð 	7ð 	7‰JˆE�3Ø—*’*˜U¥E¨%°Ñ$5Ô$5Ñ6Ô6Ð6Ð6Ð6Ð6ð	7ð 	7r8   c                óD   — | j                              | j        d¬¦  «        S )Nr   rr  )rû   r,  r  ró   s    r6   r  zDataSplitter._sorted_dataê  s   € àŒy�~Š~˜dœn°1ˆ~Ñ5Ô5Ð5r8   Ú	slice_objr	  r+   c                ó    — t          | ¦  «        ‚rP   r   )rR   r  r  s      r6   r  zDataSplitter._chopî  s   € Ý! $Ñ'Ô'Ð'r8   N)
rû   r   r•   r–   r
  r)  r	  r)  r,   r-   )r,   r*   )r,   r   )r  r	  r,   r+   )rÝ   rÞ   rß   rS   rø   r   r  r  rÄ   r8   r6   r  r  Ð  sp   € € € € € ð"ð "ð "ð "ð	7ð 	7ð 	7ð 	7ð ð6ð 6ð 6ñ „^ð6ð(ð (ð (ð (ð (ð (r8   r  c                  ó   — e Zd Zdd„ZdS )	r  r  r!   r  r	  r,   c                ó´   — |j                              |¦  «        }|                     ||j        ¬¦  «        }|j        |_        |                     |d¬¦  «        S )N©rÈ  Úgroupby©Úmethod)Ú_mgrÚ	get_sliceÚ_constructor_from_mgrrÈ  rZ   Ú_nameÚ__finalize__)rR   r  r  ÚmgrÚsers        r6   r  zSeriesSplitter._chopó  sS   € àŒj×"Ò" 9Ñ-Ô-ˆØ×)Ò)¨#°C´HÐ)Ñ=Ô=ˆØ”JˆŒ	Ø×Ò ¨iÐÑ8Ô8Ð8r8   N)r  r!   r  r	  r,   r!   ©rÝ   rÞ   rß   r  rÄ   r8   r6   r  r  ò  s(   € € € € € ð9ð 9ð 9ð 9ð 9ð 9r8   r  c                  ó   — e Zd Zdd„ZdS )	r  r  r   r  r	  r,   c                ó    — |j                              |d¬¦  «        }|                     ||j        ¬¦  «        }|                     |d¬¦  «        S )Nr;   rr  r  r  r  )r  r  r  rÈ  r  )rR   r  r  r  Údfs        r6   r  zFrameSplitter._chopü  sN   € ð Œj×"Ò" 9°1Ð"Ñ5Ô5ˆØ×(Ò(¨°3´8Ð(Ñ<Ô<ˆØ�Š˜u¨YˆÑ7Ô7Ð7r8   N)r  r   r  r	  r,   r   r  rÄ   r8   r6   r  r  û  s(   € € € € € ð8ð 8ð 8ð 8ð 8ð 8r8   r  rþ  rÙ  )Krà   Ú
__future__r   rï  râ   Útypingr   r   r   r   Únumpyr0   Ú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+   r7   r@   rB   rê   rÜ  rÉ  r  r  r  rÄ   r8   r6   ú<module>r6     sD  ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð ðð ð ð ð ð ð ð ð *Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð
 +Ð *Ð *Ð *Ð *Ð *Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð ð ð ð ð ð ð ð ð ð &Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ,ðð ð ð ð ð ð ð ð ð ð ð ð ,Ð+Ð+Ð+Ð+Ð+ð>ð >ð >ð >ðð ð ðO
ð O
ð O
ð O
ð O
ñ O
ô O
ð O
ðdkð kð kð kð kñ kô kð kð\Tð Tð Tð Tð T�ñ Tô Tð Tðnð ð ð ð(ð (ð (ð (ð (�7˜8Ô$ñ (ô (ð (ðD9ð 9ð 9ð 9ð 9�\ñ 9ô 9ð 9ð8ð 8ð 8ð 8ð 8�Lñ 8ô 8ð 8ð 8ð 8r8   