HOME


sh-3ll 1.0
DIR:/usr/local/lib64/python3.6/site-packages/pandas/core/groupby/__pycache__/
Upload File :
Current File : //usr/local/lib64/python3.6/site-packages/pandas/core/groupby/__pycache__/ops.cpython-36.pyc
3

���hЁ�@sdZddlZddlmZmZmZmZmZddlZ	ddl
mZmZm
Z
ddljjZddljjZddlmZmZmZddlmZddlmZddlmZdd	lm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/dd
l0m1Z1m2Z2ddl3j4j5Z5ddl6m7Z7ddl8j4j9Z:ddl;m<Z<dd
l=m>Z>ddl?m@Z@mAZAddlBmCZCmDZDmEZEddlFmGZGddlHmIZImJZJmKZKmLZLmMZMmNZNddlOmPZPmQZQmRZRmSZSGdd�d�ZTGdd�deT�ZUeVd�dd�ZWGdd�d�ZXGdd�deX�ZYGdd�deX�ZZd#ee	j[e\e\eXd �d!d"�Z]dS)$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.
�N)�List�Optional�Sequence�Tuple�Type)�NaT�iNaT�lib)�F�
FrameOrSeries�Label)�AbstractMethodError)�cache_readonly)�maybe_cast_result)�ensure_float64�ensure_int64�ensure_int_or_float�ensure_platform_int�
is_bool_dtype�is_categorical_dtype�is_complex_dtype�is_datetime64_any_dtype�is_datetime64tz_dtype�is_extension_array_dtype�is_integer_dtype�is_numeric_dtype�is_period_dtype�	is_sparse�is_timedelta64_dtype�needs_i8_conversion)�_maybe_fill�isna)�SelectionMixin)�	DataFrame)�NDFrame)�base�grouper)�Index�
MultiIndex�ensure_index)�Series)�compress_group_index�decons_obs_group_ids�get_flattened_iterator�get_group_index�get_group_index_sorter�get_indexer_dict)�NUMBA_FUNC_CACHE�generate_numba_func�maybe_use_numba�split_for_numbac@seZdZdZdxedeeeeejd�dd�Z	e
ed	d
�dd��Ze
e
ed
fd
�dd��Zdd�Ze
ed
�dd��Zdyeed�dd�Zdzeedd�dd�Zdd�Zdd�Zd{eeed �d!d"�Zed#d$��Ze
eejd
�d%d&��Ze
eed
�d'd(��Ze
eed
�d)d*��Zed
�d+d,�Z ed-d.��Z!eed
�d/d0��Z"ed1d2��Z#eejd
�d3d4��Z$e
ejejfd
�d5d6�Z%eed
�d7d8��Z&e
eejd
�d9d:��Z'eed
�d;d<��Z(eed
�d=d>�Z)d?d@dAdBdCdDdEdFdGdHdI�
dJdKdLdMdNdO�dP�Z*dQdRiZ+dQdSdTdUdVgiZ,dWdX�Z-e.e.ejedY�dZd[�Z/e.e.ejedY�d\d]�Z0d}e.e.eee
ejeee.fd_�d`da�Z1de.eee
ejeee.fdb�dcdd�Z2d�e.ede�dfdg�Z3d�edh�didj�Z4edk�dldm�Z5dnddo�eee.dp�dqdr�Z6eeds�dtdu�Z7dnddo�eee.dp�dvdw�Z8dS)��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
    group_keys : bool, default True
    mutated : bool, default False
    indexer : intp array, 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

    TFNzSequence[grouper.Grouping])�axis�	groupings�sort�
group_keys�mutated�indexercCsRt|t�st|��t|�dk|_|_||_t|�|_||_	||_
||_||_dS)N�)
�
isinstancer'�AssertionError�len�_filter_empty_groups�
compressedr6�list�
_groupingsr8r9r:r;)�selfr6r7r8r9r:r;�rE�9/tmp/pip-build-5_djhm0z/pandas/pandas/core/groupby/ops.py�__init__Xs	
zBaseGrouper.__init__zgrouper.Grouping)�returncCs|jS)N)rC)rDrErErFr7kszBaseGrouper.groupings.cCstdd�|jD��S)Ncss|]}|jVqdS)N)�ngroups)�.0�pingrErErF�	<genexpr>qsz$BaseGrouper.shape.<locals>.<genexpr>)�tupler7)rDrErErF�shapeoszBaseGrouper.shapecCs
t|j�S)N)�iter�indices)rDrErErF�__iter__sszBaseGrouper.__iter__cCs
t|j�S)N)r?r7)rDrErErF�nkeysvszBaseGrouper.nkeysr)�datar6ccsJ|j||d�}|j�}x.t||�D] \}\}}||j|dd�fVq"WdS)z�
        Groupby iterator

        Returns
        -------
        Generator yielding sequence of (name, subsetted object)
        for each group
        )r6�groupby)�methodN)�
_get_splitter�_get_group_keys�zipZ__finalize__)rDrSr6�splitter�keys�key�i�grouprErErF�get_iteratorzs	zBaseGrouper.get_iterator�DataSplitter)rSr6rHcCs|j\}}}t||||d�S)z�
        Returns
        -------
        Generator yielding subsetted objects

        __finalize__ has not been called for the the subsetted objects returned.
        )r6)�
group_info�get_splitter)rDrSr6�comp_ids�_rIrErErFrV�szBaseGrouper._get_splittercCs|jdjS)z�
        We are a grouper as part of another's groupings.

        We have a specific method of grouping, so cannot
        convert to a Index for our grouper.
        r)r7r&)rDrErErF�_get_grouper�szBaseGrouper._get_groupercCs:t|j�dkr|jdS|j\}}}t|||j|j�SdS)Nr<r)r?r7�levelsr`r-�codes)rDrbrcrIrErErFrW�s
zBaseGrouper._get_group_keys)�frSr6cCsN|j}|j||d�}|j�}d}|j�}|jdkrFtj|jjt	��rFn�t
j|�tj
kr�t|t�r�|dkr�|jjr�y|j|||�\}}Wn2tjk
r�}	zdt|	�kr��WYdd}	~	XnXt|�t|�kr�|||fSxlt||�D]^\}
\}}tj|d|
�|dk�rg}n|dk�rq�|j}
||�}t||
��s6d}|j|�q�W|||fS)N)r6�rzLet this error raise above us�nameT)r:rVrW�_get_sorted_data�ndim�np�anyZdtypes�applyr�comZget_callable_namer%Zplotting_methodsr=�
FrameSplitter�index�_has_complex_internals�
fast_apply�libreductionZInvalidApply�strr?rX�object�__setattr__�axes�_is_indexed_like�append)rDrgrSr6r:rYr9Z
result_values�sdata�errr[r\r]Z
group_axes�resrErErFrn�s<




zBaseGrouper.applycCsHt|j�dkr|jdjSdd�|jD�}dd�|jD�}t||�SdS)z$ dict {group name -> group indices} r<rcSsg|]
}|j�qSrE)rf)rJrKrErErF�
<listcomp>�sz'BaseGrouper.indices.<locals>.<listcomp>cSsg|]
}|j�qSrE)�group_index)rJrKrErErFr~�sN)r?r7rPr0)rDZ
codes_listrZrErErFrP�s
zBaseGrouper.indicescCsdd�|jD�S)NcSsg|]
}|j�qSrE)rf)rJrKrErErFr~�sz%BaseGrouper.codes.<locals>.<listcomp>)r7)rDrErErFrf�szBaseGrouper.codescCsdd�|jD�S)NcSsg|]
}|j�qSrE)r)rJrKrErErFr~�sz&BaseGrouper.levels.<locals>.<listcomp>)r7)rDrErErFre�szBaseGrouper.levelscCsdd�|jD�S)NcSsg|]
}|j�qSrE)ri)rJrKrErErFr~�sz%BaseGrouper.names.<locals>.<listcomp>)r7)rDrErErF�names�szBaseGrouper.namescCsD|j\}}}t|�}|r0tj||dk|d�}ng}t||jdd�S)z&
        Compute group sizes.
        r<)Z	minlength�int64)rq�dtype���)r`rrlZbincountr*�result_index)rD�idsrcZngroup�outrErErF�size�szBaseGrouper.sizecCsFt|j�dkr|jdjStdd�|jD��}t|�}|jj|�SdS)z# dict {group name -> group labels} r<rcss|]}|jVqdS)N)r&)rJrKrErErFrLsz%BaseGrouper.groups.<locals>.<genexpr>N)r?r7�groupsrXr'r6rT)rDZ
to_groupbyrErErFr�s
zBaseGrouper.groupscCst|jd�jS)Nr)r'r`�is_monotonic)rDrErErFr�szBaseGrouper.is_monotoniccCs&|j�\}}t|�}t|�}|||fS)N)�_get_compressed_codesr?r)rDrb�
obs_group_idsrIrErErFr`szBaseGrouper.group_infocCs2|j\}}}|jdk	r.tj||jf�}||}|S)N)r`r;rlZlexsort)rDrfrcZsorterrErErF�
codes_infos

zBaseGrouper.codes_infocCsR|j}t|�dkr2t||jddd�}t||jd�S|jd}|jtjt|j	��fS)Nr<T)r8�xnull)r8r)
rfr?r.rNr+r8r7rl�aranger)rDZ	all_codesrrKrErErFr�%s
z!BaseGrouper._get_compressed_codescCs
t|j�S)N)r?r�)rDrErErFrI.szBaseGrouper.ngroupscCs&|j}|j\}}}t|||j|dd�S)NT)r�)rfr`r,rN)rDrfrbZobs_idsrcrErErF�reconstructed_codes2szBaseGrouper.reconstructed_codescCsZ|jr.t|j�dkr.|jdjj|jd�S|j}dd�|jD�}t||d|jd�}|S)Nr<rcSsg|]
}|j�qSrE)r�)rJrKrErErFr~>sz,BaseGrouper.result_index.<locals>.<listcomp>F)rerfZverify_integrityr�)rAr?r7r��renamer�r�r()rDrfre�resultrErErFr�8szBaseGrouper.result_indexcCsf|jr$t|j�dkr$|jdjgSg}x8t|j|j�D]&\}}t|�}|jj|�}|j|�q8W|S)Nr<r)	rAr?r7r�rXr�r�takerz)rDZ	name_listrKrfrerErErF�get_group_levelsDszBaseGrouper.get_group_levelsZ	group_addZ
group_prodZ	group_minZ	group_maxZ
group_meanZgroup_medianZ	group_var�	group_nthZ
group_lastZ
group_ohlc)
�add�prod�min�maxZmeanZmedian�var�first�last�ohlcZ
group_cumprodZgroup_cumsumZgroup_cumminZgroup_cummaxZ
group_rank)�cumprod�cumsumZcumminZcummax�rank)�	aggregate�	transformr���open�high�low�closecCstjj||�S)zp
        if we define a builtin function for this argument, return it,
        otherwise return the arg
        )r"Z_builtin_table�get)rD�argrErErF�_is_builtin_funcnszBaseGrouper._is_builtin_func)�kind�how�values�
is_numericcCs�|jj}|j||}tt|d�}|dk	r2|r2|Sx2|dgD]&}tt|�d|��d�}	|	dk	r<|	Sq<Wt|d�r�|dkr�d|jkr�d}|}
|
dkr�td|�d|�d���|
S)Nrvrc�__signatures__z2function is not implemented for this dtype: [how->z,dtype->�])r�ri�_cython_functions�getattr�
libgroupby�hasattrr��NotImplementedError)rDr�r�r�r�Z	dtype_strZftyperg�dt�f2�funcrErErF�_get_cython_functionus"
z BaseGrouper._get_cython_functioncCs�y|j||||�}Wnntk
r�|r|yt|�}Wn4tk
rhtj|dd�dkrb|jt�}n�YnX|j||||�}n�YnX||fS)a$
        Find the appropriate cython function, casting if necessary.

        Parameters
        ----------
        kind : str
        how : str
        values : np.ndarray
        is_numeric : bool

        Returns
        -------
        func : callable
        values : np.ndarray
        F)Zskipna�complex)r�r�r�	TypeErrorr	Zinfer_dtype�astyper�)rDr�r�r�r�r�rErErF�_get_cython_func_and_vals�sz%BaseGrouper._get_cython_func_and_valsr<)r�r�r6�	min_countrHcKs�|dkst�|}|jdkr$td��n|jdkr>|dks>t|��t|j�sRt|j�rdt|j�d���nFt|j�r�|dkr�td|�d���n"t|j�r�|dkr�td
|�d���t|j�r�|j	d�}t
|j�}t|j�}	|r�|j	d�}d}	nht|j��r�t
|�}nRt|��r(|tkj��rt|�}nt
|�}n&|	�rDt|��rDt|�}n
|jt�}|jj|d�}
|j}d}|dk�r�|dd�df}|j|
f}
nN|dk�r�d}|dk�s�t|��|j}|
dk�r�td��|jf|jdd�}
|j||||	�\}}|dk�r�d}n |	�r|jj�|jj��}nd}|j\}}}|dk�rtttj |
|d�tj!d�}tj"|jtj#d�}|j$||||||�}n8|dk�r�ttj%||d�tj!d�}|j&|||||f|�}t|��r�|�r�|tk}|j��r�|jd�}tj!||<|dk�r|j'�r|j(��r|jdk�st�||dk}|dk�rB|
dk�rB|dd�df}|j)j|d�}|�rb|j*d|�}t|j��szt+|j��r�t,|�|jtj#�|jd�}n|�r�|dk�r�|j|j�}t-|j��r�t.|||d�}||fS)z�
        Returns the values of a cython operation as a Tuple of [data, names].

        Names is only useful when dealing with 2D results, like ohlc
        (see self._name_functions).
        r�r�rhz.number of dimensions is currently limited to 2r<z dtype not supportedr�r�r�r�z!datetime64 type does not support z operationsz"timedelta64 type does not support zM8[ns]r�TFNrz<arity of more than 1 is not supported for the 'how' argumentr��floatrv)r�)Z
fill_valueZfloat64)r��objr�)r�r�)r�r�r�r�)r�r�)/r>rkr�rr�rrrr�viewrrrrrrrmrrr�rv�
_cython_arityr�rI�TrNr�r��itemsizer`r rl�empty�nan�zerosr��
_aggregateZ
empty_like�
_transformr@�all�_name_functionsZswapaxesr�typerr)rDr�r�r�r6r��kwargsZorig_values�is_datetimeliker��arityZvdimZswappedZ	out_shaper�Z	out_dtyperfrcr��counts�maskr�rErErF�_cython_operation�s�	


























zBaseGrouper._cython_operation)r�r6r�rHcCs|jd||||d�S)Nr�)r�)r�)rDr�r�r6r�rErErFr�LszBaseGrouper.aggregate)r�r6cKs|jd|||f|�S)Nr�)r�)rDr�r�r6r�rErErFr�SszBaseGrouper.transform)r�cCs4|tjkr |||||ddd�n||||||�|S)Nr<)r�r�r�)r�r�)rDr�r�r�rbZagg_funcr�rErErFr�Vs
zBaseGrouper._aggregate)r�c	Ks$|j\}}}||||||f|�|S)N)r`)	rDr�r�rbZtransform_funcr�r�rcrIrErErFr�bszBaseGrouper._transform�cython)�engine�
engine_kwargs)r�r�r�cOs�|jdkst�t|�r4|j||f|�||d�|��St|�dkrL|j||�St|j�rb|j||�S|jjrv|j||�Sy|j	||�St
k
r�}zdt|�kr�n�WYdd}~XnX|j||�S)Nr)r�r�zFunction does not reduce)rIr>r3�_aggregate_series_pure_pythonr?rr�rqrr�_aggregate_series_fast�
ValueErrorru)rDr�r�r�r��argsr�r|rErErF�
agg_seriesks"

zBaseGrouper.agg_series)r�r�cCsn|j|�}|j\}}}|jdd�}t||�}|j|�}tj||dd�}tj|||||�}|j	�\}	}
|	|
fS)NrF)�
allow_fill)
r�r`�ilocr/r��
algorithms�take_ndrtZ
SeriesGrouper�
get_result)rDr�r�rrcrI�dummyr;r&r�r�rErErFr��s


z"BaseGrouper._aggregate_series_fastcOs t|�rt|||d�\}}|j\}	}
}tj|td�}d}
t||	|dd�}x�|D]�\}}t|�r�t|�\}}|||f|��}|tkr�|t|<n||f|�|�}|
dkr�t	|t
ttjf�r�t
|�dkr�|j�}ntd��tj|dd�}
|jd||<||
|<qNW|
dk	�s
t�tj|
dd�}
|
|fS)	NZgroupby_agg)r�r)r6r<zFunction does not reduce�O)Z	try_float)r3r2r`rlr��intrar4r1r=r*r'�ndarrayr?�itemr�r�rNr>r	Zmaybe_convert_objects)rDr�r�r�r�r�r�Z
numba_func�	cache_keyrrcrIr�r�rY�labelr]r�rqr}rErErFr��s2


z)BaseGrouper._aggregate_series_pure_python)TTFN)r)r)rr�)r�r�)rr�)rr�)r�)9�__name__�
__module__�__qualname__�__doc__r'�boolrrlr�rG�propertyrr7rr�rNrQrRrr^rVrdrWr
rnrrPrfrerr�r*r�r�r�r`r�r�rIr�r�r�r�r�r�r�rur�r�r�r�r�r�r�r�r�r�rErErErFr5Bs� 		>

	$"
  
#r5c@s�eZdZdZd&eed�dd�Zedd��Zee	d	�d
d��Z
dd
�Zd'ee	d�dd�Z
edd��Zedd��Zeeejd	�dd��Zedd��Zeeed	�dd��Zeeed	�dd��Zedd	�dd ��Zd!dd"�eeed#�d$d%�ZdS)(�
BinGroupera{
    This is an internal Grouper class

    Parameters
    ----------
    bins : the split index of binlabels to group the item of axis
    binlabels : the label list
    filter_empty : boolean, default False
    mutated : boolean, default False
    indexer : a intp array

    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

    FN)�filter_emptyr:cCsBt|�|_t|�|_||_||_||_t|j�t|j�ks>t�dS)N)	r�binsr)�	binlabelsr@r:r;r?r>)rDr�r�r�r:r;rErErFrG�s

zBinGrouper.__init__cCsdd�t|j|j�D�}|S)z# dict {group name -> group labels} cSsi|]\}}|tk	r||�qSrE)r)rJr[�valuerErErF�
<dictcomp>sz%BinGrouper.groups.<locals>.<dictcomp>)rXr�r�)rDr�rErErFr�
szBinGrouper.groups)rHcCsdS)Nr<rE)rDrErErFrRszBinGrouper.nkeyscCs|S)z�
        We are a grouper as part of another's groupings.

        We have a specific method of grouping, so cannot
        convert to a Index for our grouper.
        rE)rDrErErFrdszBinGrouper._get_grouperr)rSr6c#s�|dkr�fdd�}n�fdd�}t�j|�}d}x6t|j|j�D]$\}}|tk	rd||||�fV|}qDW||kr�|jd||d�fVdS)z�
        Groupby iterator

        Returns
        -------
        Generator yielding sequence of (name, subsetted object)
        for each group
        rcs�j||�S)N)r�)�start�edge)rSrErF�<lambda>-sz)BinGrouper.get_iterator.<locals>.<lambda>cs�jdd�||�fS)N)r�)r�r�)rSrErFr�/sr<Nr�)r?rxrXr�r�r)rDrSr6Zslicer�lengthr�r�r�rE)rSrFr^#s	zBinGrouper.get_iteratorcCsTtjt�}d}x@t|j|j�D].\}}||kr|tk	rHtt||��||<|}qW|S)Nr)�collections�defaultdictrBrXr�r�r�range)rDrPr\r��binrErErFrP<s
zBinGrouper.indicescCs�|j}tj|�}tjtjd|jf�}t|�}|t|j�krPtjtj|�|�}ntjtjdtj|�f|�}|j	ddd�|j	ddd�|fS)Nrr<r�F)�copyr�)
rIrlr�Zdiff�r_r�rr?�repeatr�)rDrIr��reprbrErErFr`Hs
zBinGrouper.group_infocCs2tjdtj|jdd�|jdd�k�dfgS)Nrr<r�)rlr�Zflatnonzeror�)rDrErErFr�ZszBinGrouper.reconstructed_codescCs0t|j�dkr*t|jd�r*|jdd�S|jS)Nrr<)r?r�r!)rDrErErFr�_szBinGrouper.result_indexcCs|jgS)N)r�)rDrErErFrefszBinGrouper.levelscCs
|jjgS)N)r�ri)rDrErErFr�jszBinGrouper.nameszList[grouper.Grouping]cCsdd�t|j|j�D�S)Nc	Ss$g|]\}}tj||dd|d��qS)FN)Zin_axis�levelri)r&ZGrouping)rJZlvlrirErErFr~qsz(BinGrouper.groupings.<locals>.<listcomp>)rXrer�)rDrErErFr7nszBinGrouper.groupingsr�)r�r�)r�r�r�c	Os\|jdkst�t|j�dks t�t|j�r6|j||�S|dd�}tj|||j|�}|j	�S)Nr)
rIr>r?r�rr�r�rtZSeriesBinGrouperr�)	rDr�r�r�r�r�r�r�r&rErErFr�us

zBinGrouper.agg_series)FFN)r)r�r�r�r�r�rGrr�r�r�rRrdrr^rPr`rrlr�r�r�r'rerr�r7r*r
rur�rErErErFr��s,	r�)rHcCsHt|t�r*t|�dkrdS|jj|d�St|t�rD|jj|d�SdS)Nr<Fr)r=r*r?rq�equalsr#)r�rxrErErFry�s

ryc@s^eZdZdeeed�dd�Zedd��Zedd��Zd	d
�Z	ed�dd
�Z
eed�dd�Z
dS)r_r)rSrIr6cCs2||_t|�|_||_||_t|t�s.t|��dS)N)rSr�labelsrIr6r=r�r>)rDrSrrIr6rErErFrG�s

zDataSplitter.__init__cCstj|j|jdd�S)NF)r�)r�r�r�sort_idx)rDrErErF�slabels�szDataSplitter.slabelscCst|j|j�S)N)r/rrI)rDrErErFr�szDataSplitter.sort_idxccsf|j�}|jdkrdStj|j|j�\}}x6tt||��D]$\}\}}||j|t||��fVq:WdS)Nr)	rjrIr	�generate_slicesr�	enumeraterX�_chop�slice)rDr{�starts�endsr\r��endrErErFrQ�s
zDataSplitter.__iter__)rHcCs|jj|j|jd�S)N)r6)rSr�rr6)rDrErErFrj�szDataSplitter._get_sorted_data)�	slice_objrHcCst|��dS)N)r
)rDr{r
rErErFr�szDataSplitter._chopN)r)r�r�r�rr�rGrrrrQrjrr$rrErErErFr_�s
r_c@seZdZeeed�dd�ZdS)�SeriesSplitter)r{r
rHcCs|jj|�}|j||jdd�S)NT)riZfastpath)�_mgr�	get_slice�_constructorri)rDr{r
�mgrrErErFr�szSeriesSplitter._chopN)r�r�r�r*rrrErErErFr�src@s.eZdZeed�dd�Zeeed�dd�ZdS)rp)rgr{cCs&tj|j|j�\}}tj|||||�S)N)r	rrrIrtZapply_frame_axis0)rDrgr{r�rrrErErFrs�szFrameSplitter.fast_apply)r{r
rHcCs |jj|d|jd�}|j|�S)Nr<)r6)rr
r6r)rDr{r
rrErErFr�szFrameSplitter._chopN)	r�r�r�r
rrsr#rrrErErErFrp�srp)rSrrIr6rHcCs"t|t�rt}nt}|||||�S)N)r=r*rrp)rSrrIr6�klassrErErFra�s
ra)r)^r�r�ZtypingrrrrrZnumpyrlZpandas._libsrrr	Zpandas._libs.groupbyZ_libsrTr�Zpandas._libs.reductionZ	reductionrtZpandas._typingr
rrZ
pandas.errorsr
Zpandas.util._decoratorsrZpandas.core.dtypes.castrZpandas.core.dtypes.commonrrrrrrrrrrrrrrrrZpandas.core.dtypes.missingr r!Zpandas.core.algorithms�corer�Zpandas.core.baser"Zpandas.core.common�commonroZpandas.core.framer#Zpandas.core.genericr$Zpandas.core.groupbyr%r&Zpandas.core.indexes.apir'r(r)Zpandas.core.seriesr*Zpandas.core.sortingr+r,r-r.r/r0Zpandas.core.util.numba_r1r2r3r4r5r�r�ryr_rrpr�r�rarErErErF�<module>sHH 2'