Ë
    ¤ehZ•  ã                  ó  — 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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.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: erddl;m<Z<m=Z=m>Z> ddl?m@Z@ d$d„ZAd„ ZB G d„ d«      ZC G d„ d«      ZD G d„ deD«      ZEd%d„ZF G d„ dee   «      ZG G d„ deG«      ZH G d „ d!eG«      ZIdd"œ	 	 	 	 	 	 	 	 	 	 	 	 	 d&d#„ZJy)'a  
Provide classes to perform the groupby aggregate operations.

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

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

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

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

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

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

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

    r   rÉ   c                ó|   — t        |t        «      sJ |«       ‚|| _        t        |«      | _        || _        || _        y rI   )r-   r   rÉ   ÚlistÚ
_groupingsÚ_sortÚdropna)rN   rÉ   Ú	groupingsÚsortré   s        r4   rO   zBaseGrouper.__init__B  s9   € ô ˜$¤Ô&Ð,¨Ó,Ð&àˆŒ	Ü26°y³/ˆŒØˆŒ
Øˆ�r6   c                ó   — | j                   S rI   )rç   ©rN   s    r4   rê   zBaseGrouper.groupingsP  s   € à�‰Ðr6   c                ó:   — t        d„ | j                  D «       «      S )Nc              3  ó4   K  — | ]  }|j                   –— Œ y ­wrI   )r�   )Ú.0Úpings     r4   ú	<genexpr>z$BaseGrouper.shape.<locals>.<genexpr>V  s   è ø€ Ò= d�T—\•\Ñ=ùs   ‚)Útuplerê   rí   s    r4   rŽ   zBaseGrouper.shapeT  s   € äÑ=¨d¯n©nÔ=Ó=Ð=r6   c                ó,   — t        | j                  «      S rI   )ÚiterÚindicesrí   s    r4   Ú__iter__zBaseGrouper.__iter__X  s   € Ü�D—L‘LÓ!Ð!r6   c                ó,   — t        | j                  «      S rI   )r<   rê   rí   s    r4   ÚnkeyszBaseGrouper.nkeys[  s   € ä�4—>‘>Ó"Ð"r6   c              #  óv   K  — | j                  ||¬«      }| j                  }t        ||«      E d{  –—†  y7 Œ­w)úš
        Groupby iterator

        Returns
        -------
        Generator yielding sequence of (name, subsetted object)
        for each group
        ©rÉ   N)Ú_get_splitterÚgroup_keys_seqÚzip)rN   ÚdatarÉ   ÚsplitterÚkeyss        r4   Úget_iteratorzBaseGrouper.get_iterator_  s8   è ø€ ð ×%Ñ% d°Ð%Ó6ˆØ×"Ñ"ˆÜ�t˜XÓ&×&Ò&ús   ‚/9±7²9c                ól   — | j                   \  }}}t        |||| j                  | j                  |¬«      S )zV
        Returns
        -------
        Generator yielding subsetted objects
        )Ú
sorted_idsÚsort_idxrÉ   )Ú
group_inforý   Ú_sorted_idsÚ	_sort_idx)rN   r   rÉ   rÍ   Ú_r�   s         r4   rý   zBaseGrouper._get_splittern  s<   € ð Ÿ/™/‰ˆˆQ�ÜØØØØ×'Ñ'Ø—^‘^Øô
ð 	
r6   c                ó´   — t        | j                  «      dk(  r| j                  d   S | j                  \  }}}t	        ||| j                  | j
                  «      S ©Nr9   r   )r<   rê   Úlevelsr  r$   Úcodes©rN   rÍ   r
  r�   s       r4   rþ   zBaseGrouper.group_keys_seq  sM   € ô ˆt�~‰~Ó !Ò#Ø—;‘;˜q‘>Ð!à"Ÿo™o‰OˆC��Gô & c¨7°D·K±KÀÇÁÓLÐLr6   c                óP  — t        | j                  «      dk(  r3t        | j                  t        «      r| j                  d   j
                  S | j                  D �cg c]  }|j                  ‘Œ }}| j                  D �cg c]  }|j                  ‘Œ }}t        ||«      S c c}w c c}w )z"dict {group name -> group indices}r9   r   )	r<   rê   r-   Úresult_indexr   rö   r  Ú_group_indexr'   )rN   rñ   Ú
codes_listr  s       r4   rö   zBaseGrouper.indicesŠ  s‡   € ô ˆt�~‰~Ó !Ò#¬
°4×3DÑ3DÔFVÔ(Wà—>‘> !Ñ$×,Ñ,Ð,Ø-1¯^©^Ö< T�d—j“jÐ<ˆ
Ð<Ø.2¯n©nÖ= d�×!Ó!Ð=ˆÐ=Ü 
¨DÓ1Ð1ùò =ùÚ=s   ÁBÁ=B#c                ó’  — t        | j                  | j                  | j                  d¬«      }t	        || j                  ¬«      \  }}| j
                  r8t        j                  |dk\  «      }t        j                  |dk(  «      |   }||   }t        || j                  «      }| j
                  r|t        j                  |«      z  }|S )zR
        Get the original integer locations of result_index in the input.
        T©rë   Úxnull©rë   r   rË   )r%   r  rŽ   rè   r"   rM   r.   Úwhererp   r&   r�   Útake)rN   Úgroup_indexr
  r¡   Ú	null_gapsrÂ   s         r4   Úresult_ilocszBaseGrouper.result_ilocs”  sª   € ô &Ø�J‰J˜Ÿ
™
¨¯©¸4ô
ˆô .¨kÀÇ
Á
ÔK‰ˆ�Qà×ÒÜ—8‘8˜K¨1Ñ,Ó-ˆDäŸ	™	 +°Ñ"3Ó4°TÑ:ˆIØ% dÑ+ˆKä'¨°T·\±\ÓBˆà×Òà”b—g‘g˜i¨Ó0Ñ0ˆFàˆr6   c                óT   — | j                   D �cg c]  }|j                  ‘Œ c}S c c}w rI   )rê   r  ©rN   rñ   s     r4   r  zBaseGrouper.codes¯  s    € ð (,§~¡~Ö6˜t�—
“
Ò6Ð6ùÒ6ó   �%c                óT   — | j                   D �cg c]  }|j                  ‘Œ c}S c c}w rI   )rê   r  r  s     r4   r  zBaseGrouper.levels´  s    € à.2¯n©nÖ= d�×!Ó!Ò=Ð=ùÒ=r  c                óT   — | j                   D �cg c]  }|j                  ‘Œ c}S c c}w rI   )rê   rU   r  s     r4   ÚnameszBaseGrouper.names¸  s   € à&*§n¡nÖ5˜d�—	“	Ò5Ð5ùÒ5r  c                ó˜   — | j                   \  }}}|rt        j                  ||dk7     |¬«      }ng }t        || j                  dd¬«      S )z&
        Compute group sizes.
        rË   )Ú	minlengthrŸ   F)Úindexr3   r±   )r  r.   Úbincountr!   r  )rN   rÍ   r
  r�   r³   s        r4   rE   zBaseGrouper.size¼  sJ   € ð
 Ÿ/™/‰ˆˆQ�áÜ—+‘+˜c #¨¡)™n¸Ô@‰CàˆCÜ�c ×!2Ñ!2¸'ÈÔNÐNr6   c                ó–  — t        | j                  «      dk(  r| j                  d   j                  S g }| j                  D ]X  }|j                  }t	        |t
        «      s|j                  |«       Œ1|j                  |j                  d   j                  «       ŒZ t        j                  |«      }| j                  j                  |«      S )ú!dict {group name -> group labels}r9   r   )r<   rê   ÚgroupsÚgrouping_vectorr-   rä   Úappendr   Úfrom_arraysrÉ   Úgroupby)rN   Ú
to_groupbyrñ   Úgvr%  s        r4   r)  zBaseGrouper.groupsÉ  sª   € ô ˆt�~‰~Ó !Ò#Ø—>‘> !Ñ$×+Ñ+Ð+àˆJØŸ™ò G�Ø×)Ñ)�Ü! "¤kÔ2Ø×%Ñ% bÕ)à×%Ñ% b§l¡l°1¡o×&EÑ&EÕFðGô ×*Ñ*¨:Ó6ˆEØ—9‘9×$Ñ$ UÓ+Ð+r6   c                óF   — t        | j                  d   «      j                  S ©Nr   )r   r  Úis_monotonic_increasingrí   s    r4   Úis_monotoniczBaseGrouper.is_monotonicÙ  s   € ô �T—_‘_ QÑ'Ó(×@Ñ@Ð@r6   c                óT   — t        | j                  d   dk  j                  «       «      S )zE
        Whether grouper has null value(s) that are dropped.
        r   )rž   r  rA   rí   s    r4   rM   zBaseGrouper.has_dropped_naß  s&   € ô �T—_‘_ QÑ'¨!Ñ+×0Ñ0Ó2Ó3Ð3r6   c                ó^   — | j                  «       \  }}t        |«      }t        |«      }|||fS rI   )Ú_get_compressed_codesr<   r   )rN   r¥   Úobs_group_idsr�   s       r4   r  zBaseGrouper.group_infoç  s6   € à"&×"<Ñ"<Ó">Ñˆ�-ä�mÓ$ˆÜ& xÓ0ˆà˜¨Ð/Ð/r6   c                ó&   — | j                   \  }}}|S rI   )r  ©rN   rÍ   r
  s      r4   Ú
codes_infozBaseGrouper.codes_infoð  s   € ð —O‘O‰	ˆˆQ�Øˆ
r6   c                óL  — t        | j                  «      dkD  r:t        | j                  | j                  dd¬«      }t        || j                  ¬«      S | j                  d   }|j                  t        j                  t        |j                  «      t        j                  ¬«      fS )Nr9   Tr  r  r   r²   )r<   rê   r%   r  rŽ   r"   rè   r.   Úaranger  r–   )rN   r  rñ   s      r4   r6  z!BaseGrouper._get_compressed_codesö  sx   € ô
 ˆt�~‰~Ó Ò"Ü)¨$¯*©*°d·j±jÀtÐSWÔXˆKÜ'¨¸$¿*¹*ÔEÐEð �~‰~˜aÑ ˆØ�z‰zœ2Ÿ9™9¤S¨×):Ñ):Ó%;Ä2Ç7Á7ÔKÐKÐKr6   c                ó,   — t        | j                  «      S rI   )r<   r  rí   s    r4   r�   zBaseGrouper.ngroups  s   € ô �4×$Ñ$Ó%Ð%r6   c                ón   — | j                   }| j                  \  }}}t        ||| j                  |d¬«      S )NT)r  )r  r  r#   rŽ   )rN   r  rÍ   Úobs_idsr
  s        r4   Úreconstructed_codeszBaseGrouper.reconstructed_codes  s1   € à—
‘
ˆØŸ/™/‰ˆˆW�aÜ# C¨°$·*±*¸eÈ4ÔPÐPr6   c                ó6  — t        | j                  «      dk(  r5| j                  d   j                  j                  | j                  d   «      S | j
                  }| j                  D �cg c]  }|j                  ‘Œ }}t        ||d| j                  ¬«      S c c}w )Nr9   r   F)r  r  Úverify_integrityr"  )r<   rê   Ú_result_indexÚrenamer"  r@  r   )rN   r  rñ   r  s       r4   r  zBaseGrouper.result_index  sƒ   € äˆt�~‰~Ó !Ò#Ø—>‘> !Ñ$×2Ñ2×9Ñ9¸$¿*¹*ÀQ¹-ÓHÐHà×(Ñ(ˆØ15·±Ö@¨�$×$Ó$Ð@ˆÐ@ÜØ ¸ÀdÇjÁjô
ð 	
ùò As   Á(Bc                ó,  — t        | j                  «      dk(  r| j                  d   j                  gS g }t        | j                  | j                  «      D ]<  \  }}t        |«      }|j                  j                  |«      }|j                  |«       Œ> |S r  )r<   rê   Ú_group_arraylikerÿ   r@  r   r  r+  )rN   Ú	name_listrñ   r  r  s        r4   Úget_group_levelszBaseGrouper.get_group_levels  sŒ   € ô ˆt�~‰~Ó !Ò#Ø—N‘N 1Ñ%×6Ñ6Ð7Ð7àˆ	Ü˜tŸ~™~¨t×/GÑ/GÓHò 	%‰KˆD�%Ü'¨Ó.ˆEØ×*Ñ*×/Ñ/°Ó6ˆFà×Ñ˜VÕ$ð		%ð Ðr6   c           	     ó¦   — |dv sJ ‚t        ||| j                  ¬«      }| j                  \  }}	}	| j                  }
 |j                  d|||||
dœ|¤ŽS )z;
        Returns the values of a cython operation.
        )rt   rs   rJ   )r‰   rÉ   r¤   r¥   r�   r·   )r@   rM   r  r�   rÏ   )rN   rK   r‰   rL   rÉ   r¤   r¨   Úcy_oprÍ   r
  r�   s              r4   Ú_cython_operationzBaseGrouper._cython_operation,  sr   € ð Ð1Ñ1Ð1Ð1ä T¨sÀ4×CVÑCVÔWˆà—O‘O‰	ˆˆQ�Ø—,‘,ˆØ%ˆu×%Ñ%ð 
ØØØØØñ
ð ñ
ð 	
r6   c                óà   — t        |j                  t        j                  «      sd}| j	                  ||«      }t        j                  |d¬«      }|rt        ||j                  d¬«      }|S |}|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
        TF)Ú	try_float)Únumeric_only)	r-   r8   r.   r/   Ú_aggregate_series_pure_pythonr	   Úmaybe_convert_objectsr   r3   )rN   r2   rÁ   Úpreserve_dtyperÂ   Únpvaluesr³   s          r4   Ú
agg_serieszBaseGrouper.agg_seriesH  sj   € ô" ˜#Ÿ+™+¤r§z¡zÔ2ð
 "ˆNà×3Ñ3°C¸Ó>ˆä×,Ñ,¨V¸uÔEˆÙÜ-¨h¸¿	¹	ÐPTÔUˆCð ˆ
ð ˆCØˆ
r6   c                ó  — | j                   \  }}}t        j                  |d¬«      }d}| j                  |d¬«      }t	        |«      D ]7  \  }}	 ||	«      }
t        |
«      }
|st        |
|	j                  «       d}|
||<   Œ9 |S )NÚOr²   Fr   rü   T)r  r.   r¼   rý   Ú	enumerater>   r5   r3   )rN   r2   rÁ   r
  r�   rÂ   Úinitializedr  rˆ   Úgroupr=   s              r4   rO  z)BaseGrouper._aggregate_series_pure_pythoni  sŽ   € ð Ÿ™‰ˆˆ1ˆgä—‘˜'¨Ô-ˆØˆà×%Ñ% c°Ð%Ó2ˆä! (Ó+ò 		‰HˆAˆuÙ�u“+ˆCÜ  Ó%ˆCáä" 3¨¯©Ô4Ø"�àˆF�1ŠIð		ð ˆr6   c                óz  — d}| j                  ||¬«      }| j                  }g }t        ||«      }|D ]R  \  }	}
t        j	                  |
d|	«       |
j
                  } ||
«      }|st        |||«      sd}|j                  |«       ŒT t        |«      dk(  r$t        |dd «      dv r ||j                  d d «       ||fS )NFrü   rU   Tr   r×   )rb   rQ   rS   )rý   rþ   rÿ   r0   Ú__setattr__ÚaxesÚ_is_indexed_liker+  r<   r}   Úiloc)rN   r„   r   rÉ   Úmutatedr  Ú
group_keysÚresult_valuesÚzippedÚkeyrX  Ú
group_axesr=   s                r4   Úapply_groupwisezBaseGrouper.apply_groupwise�  sÜ   € ð ˆØ×%Ñ% d°Ð%Ó6ˆØ×(Ñ(ˆ
Øˆô �Z Ó*ˆà ò 	&‰JˆC�ô ×Ñ˜u f¨cÔ2ð Ÿ™ˆJÙ�E“(ˆCÙÔ#3°C¸ÀTÔ#JØ�Ø× Ñ  Õ%ð	&ô ˆz‹?˜aÒ¤G¨A¨z¸4Ó$@ð E
ñ %
ñ ˆd�i‰i˜˜ˆmÔà˜gÐ%Ð%r6   c                ó:   — | j                   \  }}}t        ||«      S rI   )r  r&   r  s       r4   r	  zBaseGrouper._sort_idx«  s    € ð Ÿ/™/‰ˆˆQ�Ü% c¨7Ó3Ð3r6   c                óX   — | j                   \  }}}|j                  | j                  «      S rI   )r  r  r	  r9  s      r4   r  zBaseGrouper._sorted_ids²  s&   € ð —O‘O‰	ˆˆQ�Ø�x‰x˜Ÿ™Ó'Ð'r6   N)TT)
rÉ   r   rê   zSequence[grouper.Grouping]rë   rž   ré   rž   rÑ   rÒ   ©rÑ   zlist[grouper.Grouping])rÑ   r   )rÑ   zIterator[Hashable]©rÑ   rÕ   ©r   )r   r   rÉ   r   rÑ   z#Iterator[tuple[Hashable, NDFrameT]])r   r+   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Ñ   zlist[Index]©rÑ   zlist[Hashable])rÑ   r!   )rÑ   zdict[Hashable, np.ndarray])rÑ   rž   ©rÑ   z6tuple[npt.NDArray[np.intp], npt.NDArray[np.intp], int])rÑ   z:tuple[npt.NDArray[np.signedinteger], npt.NDArray[np.intp]])rÑ   zlist[npt.NDArray[np.intp]]©rÑ   r   )rÑ   zlist[ArrayLike])rË   )
rK   rÐ   rL   rÐ   rÉ   r   r¤   rÕ   rÑ   r
   )F)r2   r!   rÁ   r   rQ  rž   rÑ   r
   )r2   r!   rÁ   r   rÑ   znpt.NDArray[np.object_])r„   r   r   zDataFrame | SeriesrÉ   r   rÑ   ztuple[list, bool])&r×   rØ   rÙ   rÚ   rà   rO   Úpropertyrê   rŽ   r÷   rù   r  r   rý   r   rþ   rö   r  r  r  r"  rE   r)  r3  rM   r  r:  r6  r�   r@  r  rH  rK  rS  rO  rd  r	  r  r·   r6   r4   rä   rä   0  sn  … ñð ƒKð Øðàðð .ðð ð	ð
 ðð 
óð òó ðð ò>ó ð>ó"ð ò#ó ð#ð /0ð'Øð'Ø$+ð'à	,ó'ð ó
ó ð
ð  ØñMó ó ðMð ò2ó ð2ð òó ðð4 Øò7ó ó ð7ð ò>ó ð>ð ò6ó ð6ð ò
Oó ð
Oð ò,ó ð,ð ØòAó ó ðAð Øò4ó ó ð4ð ò0ó ð0ð òó ðð
 ð
Là	Cò
Ló ð
Lð Øò&ó ó ð&ð òQó ðQð
 ò
ó ð
ð òó ðð$ ð ð
àð
ð ð	
ð
 ð
ð ð
ð 
ò
ó ð
ð6 àBGðØðØ!)ðØ;?ðà	òó ðð@ ðØðØ!)ðà	 òó ðð. àEFð$&Øð$&Ø!3ð$&Ø;Bð$&à	ò$&ó ð$&ðR Øò4ó ó ð4ð
 Øò(ó ó ñ(r6   rä   c                  óî   — e Zd ZU dZded<   ded<   	 d	 dd„Zed„ «       Zedd	„«       Z	edd
„«       Z
ddd„Zed„ «       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zy)Ú
BinGrouperaå  
    This is an internal Grouper class

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

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

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

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

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

    znpt.NDArray[np.int64]Úbinsr   Ú	binlabelsNc                ó¬   — t        |«      | _        t        |«      | _        || _        t        | j                  «      t        | j                  «      k(  sJ ‚y rI   )r   rt  r    ru  Úindexerr<   )rN   rt  ru  rw  s       r4   rO   zBinGrouper.__init__Û  sD   € ô ! Ó&ˆŒ	Ü% iÓ0ˆŒØˆŒô �4—>‘>Ó"¤c¨$¯)©)£nÒ4Ð4Ñ4r6   c                óˆ   — t        | j                  | j                  «      D ��ci c]  \  }}|t        ur||“Œ }}}|S c c}}w )r(  )rÿ   ru  rt  r   )rN   rb  ÚvaluerÂ   s       r4   r)  zBinGrouper.groupsé  sK   € ô " $§.¡.°$·)±)Ó<÷
á��UØœ#‰~ð �‰Jð
ˆñ 
ð
 ˆùó
s   ¤>c                 ó   — y)Nr9   r·   rí   s    r4   rù   zBinGrouper.nkeysõ  s   € ð r6   c                óŠ   — | j                   \  }}}| j                  �&t        j                  || j                  f«      }||   }|S rI   )r  rw  r.   Úlexsort)rN   rÍ   r
  Úsorters       r4   r:  zBinGrouper.codes_infoú  sB   € ð —O‘O‰	ˆˆQ�Ø�<‰<Ð#Ü—Z‘Z  d§l¡lÐ 3Ó4ˆFØ�f‘+ˆCØˆ
r6   c              #  ó   ‡K  — |dk(  rˆfd„}nˆfd„}t        ‰j                  |   «      }d}t        | j                  | j                  «      D ]  \  }}|t
        ur| |||«      f–— |}Œ ||k  r| j                  d    ||d«      f–— yy­w)rû   r   c                ó"   •— ‰j                   | | S rI   ©r]  ©ÚstartÚedger   s     €r4   ú<lambda>z)BinGrouper.get_iterator.<locals>.<lambda>  s   ø€ ¨¯©°5¸Ð)>€ r6   c                ó.   •— ‰j                   d d …| |…f   S rI   r€  r�  s     €r4   r„  z)BinGrouper.get_iterator.<locals>.<lambda>  s   ø€ ¨¯©²1°e¸D°j°=Ñ)A€ r6   rË   N)r<   r[  rÿ   rt  ru  r   )rN   r   rÉ   ÚslicerÚlengthr‚  rƒ  Úlabels    `      r4   r  zBinGrouper.get_iterator  s›   øè ø€ ð �1Š9Û>‰FãAˆFä�T—Y‘Y˜t‘_Ó%ˆàˆÜ˜tŸy™y¨$¯.©.Ó9ò 	‰KˆD�%ØœCÑØ™V E¨4Ó0Ð0Ò0Ø‰Eð	ð
 �6Š>Ø—.‘. Ñ$¡f¨U°DÓ&9Ð9Ó9ð ùs   ƒBBc                óÜ   — t        j                  t        «      }d}t        | j                  | j
                  «      D ]-  \  }}||k  sŒ|t        urt        t        ||«      «      ||<   |}Œ/ |S r1  )ÚcollectionsÚdefaultdictræ   rÿ   ru  rt  r   Úrange)rN   rö   rˆ   rˆ  Úbins        r4   rö   zBinGrouper.indices  sh   € ä×)Ñ)¬$Ó/ˆàˆÜ˜dŸn™n¨d¯i©iÓ8ò 	‰JˆE�3Ø�3‹wØ¤Ñ#Ü%)¬%°°3«-Ó%8�G˜E‘NØ‘ð		ð
 ˆr6   c                óö  — | j                   }t        j                  |t        j                  ¬«      }t        j                  t        j
                  d| j                  f   «      }t        |«      }|t        | j                  «      k(  r*t        j                  t        j                  |«      |«      }n<t        j                  t        j
                  dt        j                  |«      f   |«      }t        |«      ||fS )Nr²   r   rË   )
r�   r.   r<  r–   ÚdiffÚr_rt  r   r<   Úrepeat)rN   r�   r7  Úrepr¥   s        r4   r  zBinGrouper.group_info(  s²   € à—,‘,ˆÜŸ	™	 '´·±Ô9ˆÜ�g‰g”b—e‘e˜A˜tŸy™y˜LÑ)Ó*ˆä! #Ó&ˆØ”c˜$Ÿ)™)“nÒ$Ü—y‘y¤§¡¨7Ó!3°SÓ9‰Hä—y‘y¤§¡ r¬2¯9©9°WÓ+=Ð'=Ñ!>ÀÓDˆHô   Ó)ØØð
ð 	
r6   c                ó”   — t         j                  dt        j                  | j                  dd  | j                  d d k7  «      dz   f   gS )Nr   r9   rË   )r.   r�  Úflatnonzerort  rí   s    r4   r@  zBinGrouper.reconstructed_codes:  sB   € ô —‘�aœŸ™¨¯	©	°!°"¨¸¿¹À3ÀB¸Ñ(GÓHÈ1ÑLÐLÑMÐNÐNr6   c                ó˜   — t        | j                  «      dk7  r't        | j                  d   «      r| j                  dd  S | j                  S )Nr   r9   )r<   ru  r   rí   s    r4   r  zBinGrouper.result_index?  s>   € äˆt�~‰~Ó !Ò#¬¨T¯^©^¸AÑ->Ô(?Ø—>‘> ! "Ð%Ð%à�~‰~Ðr6   c                ó   — | j                   gS rI   )ru  rí   s    r4   r  zBinGrouper.levelsF  s   € à—‘ÐÐr6   c                ó0   — | j                   j                  gS rI   )ru  rU   rí   s    r4   r"  zBinGrouper.namesJ  s   € à—‘×#Ñ#Ð$Ð$r6   c                ó¨   — | j                   }| j                  d   }|j                  |«      }t        j                  ||dd |j
                  ¬«      }|gS )Nr   F)Úin_axisÚlevelÚuniques)ru  r  r  r   ÚGroupingr8   )rN   Úlevr  rµ   rñ   s        r4   rê   zBinGrouper.groupingsN  sN   € à�n‰nˆØ—‘ Ñ"ˆØ—‘˜%“ˆÜ×ÑØ�F E°¸s¿{¹{ô
ˆð ˆvˆr6   rI   ©rÑ   rÒ   rh  rk  ri  )r   r+   rÉ   r   ro  )rÑ   zlist[np.ndarray]rp  rm  rn  rg  )r×   rØ   rÙ   rÚ   rà   rO   r   r)  rq  rù   r:  r  rö   r  r@  r  r  r"  rê   r·   r6   r4   rs  rs  ¹  sø   … ñð<  ÓØÓð ð	5ð
 
ó5ð ñ	ó ð	ð òó ðð òó ðô:ð2 ñ	ó ð	ð ò
ó ð
ð" òOó ðOð òó ðð ò ó ð ð ò%ó ð%ð òó ñr6   rs  c                óæ   — t        | t        «      r0t        |«      dkD  ry| j                  |   j	                  ||   «      S t        | t
        «      r!| j                  |   j	                  ||   «      S y)Nr9   F)r-   r!   r<   r[  Úequalsr   )r2   r[  rÉ   s      r4   r\  r\  Y  sa   € Ü�#”vÔÜˆt‹9�qŠ=ØØ�x‰x˜‰~×$Ñ$ T¨$¡ZÓ0Ð0Ü	�CœÔ	#Ø�x‰x˜‰~×$Ñ$ T¨$¡ZÓ0Ð0àr6   c                  óV   — e Zd Zddœ	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zd	d„Zed
d„«       Zdd„Zy)rj  r   rü   c               ó˜   — || _         t        |«      | _        || _        || _        || _        || _        t        |t        «      sJ |«       ‚y rI   )	r   r   rµ   r�   Ú_slabelsr	  rÉ   r-   rÕ   )rN   r   rµ   r�   r  r  rÉ   s          r4   rO   zDataSplitter.__init__i  sH   € ð ˆŒ	Ü)¨&Ó1ˆŒØˆŒà"ˆŒØ!ˆŒàˆŒ	Ü˜$¤Ô$Ð* dÓ*Ñ$r6   c              #  ó  K  — | j                   }| j                  dk(  ry t        j                  | j                  | j                  «      \  }}t        ||«      D ]#  \  }}| j                  |t        ||«      «      –— Œ% y ­wr1  )Ú_sorted_datar�   r	   Úgenerate_slicesr£  rÿ   Ú_chopÚslice)rN   ÚsdataÚstartsÚendsr‚  Úends         r4   r÷   zDataSplitter.__iter__}  sr   è ø€ Ø×!Ñ!ˆà�<‰<˜1Òð ä×*Ñ*¨4¯=©=¸$¿,¹,ÓG‰ˆ�ä˜f dÓ+ò 	7‰JˆE�3Ø—*‘*˜U¤E¨%°Ó$5Ó6Ó6ñ	7ùs   ‚A=A?c                ód   — | j                   j                  | j                  | j                  ¬«      S )Nrü   )r   r  r	  rÉ   rí   s    r4   r¥  zDataSplitter._sorted_dataŠ  s!   € à�y‰y�~‰~˜dŸn™n°4·9±9ˆ~Ó=Ð=r6   c                ó   — t        | «      ‚rI   r   )rN   r©  Ú	slice_objs      r4   r§  zDataSplitter._chopŽ  s   € Ü! $Ó'Ð'r6   N)r   r   rµ   rl  r�   rÕ   r  rl  r  rl  rÉ   r   rÑ   rÒ   )rÑ   r)   )rÑ   r   )r¯  r¨  rÑ   r+   )r×   rØ   rÙ   rO   r÷   r   r¥  r§  r·   r6   r4   rj  rj  h  sn   „ ð ñ+àð+ð %ð+ð ð	+ð 'ð+ð )ð+ð ð+ð 
ó+ó(7ð ò>ó ð>ô(r6   rj  c                  ó   — e Zd Zdd„Zy)ÚSeriesSplitterc                óº   — |j                   j                  |«      }|j                  ||j                  ¬«      }|j                  |_        |j                  |d¬«      S )N©r[  r-  ©Úmethod)Ú_mgrÚ	get_sliceÚ_constructor_from_mgrr[  rU   Ú_nameÚ__finalize__)rN   r©  r¯  ÚmgrÚsers        r4   r§  zSeriesSplitter._chop“  sP   € à�j‰j×"Ñ" 9Ó-ˆØ×)Ñ)¨#°C·H±HÐ)Ó=ˆØ—J‘JˆŒ	Ø×Ñ ¨iÐÓ8Ð8r6   N)r©  r!   r¯  r¨  rÑ   r!   ©r×   rØ   rÙ   r§  r·   r6   r4   r±  r±  ’  s   „ ô9r6   r±  c                  ó   — e Zd Zdd„Zy)ÚFrameSplitterc                ó¶   — |j                   j                  |d| j                  z
  ¬«      }|j                  ||j                  ¬«      }|j                  |d¬«      S )Nr9   rü   r³  r-  r´  )r¶  r·  rÉ   r¸  r[  rº  )rN   r©  r¯  r»  Údfs        r4   r§  zFrameSplitter._chopœ  sQ   € ð �j‰j×"Ñ" 9°1°t·y±y±=Ð"ÓAˆØ×(Ñ(¨°3·8±8Ð(Ó<ˆØ�‰˜u¨YˆÓ7Ð7r6   N)r©  r   r¯  r¨  rÑ   r   r½  r·   r6   r4   r¿  r¿  ›  s   „ ô8r6   r¿  rü   c               óX   — t        | t        «      rt        }nt        } || |||||¬«      S )N)r  r  rÉ   )r-   r!   r±  r¿  )r   rµ   r�   r  r  rÉ   Úklasss          r4   rý   rý   §  s4   € ô �$œÔÜ$2‰ô ˆáØˆf�g¨¸ZÈdôð r6   rž  )rÉ   r   rÑ   rž   )r   r+   rµ   rl  r�   rÕ   r  rl  r  rl  rÉ   r   rÑ   rj  )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   r   Úpandas.core.dtypes.commonr   r   r   r   r   Úpandas.core.dtypes.missingr   r   Úpandas.core.framer   Úpandas.core.groupbyr   Úpandas.core.indexes.apir   r   r   r    Úpandas.core.seriesr!   Úpandas.core.sortingr"   r#   r$   r%   r&   r'   Úcollections.abcr(   r)   r*   Úpandas.core.genericr+   r5   r>   r@   rä   rs  r\  rj  r±  r¿  rý   r·   r6   r4   ú<module>r×     s:  ðñõ #ã Û ÷ó ó ÷÷ *Ð )÷õ õ .Ý 2÷÷õ ÷õ
 (Ý '÷ó õ &÷÷ ñ ÷ñ õ ,ó>ò÷D
ñ D
÷NF(ñ F(ôR]�ô ]ó@ô'(�7˜8Ñ$ô '(ôT9�\ô 9ô	8�Lô 	8ð& ñØ
ðà ðð ðð
 #ðð %ðð ðð ôr6   