
    Mhl                        S SK Jr  S SKJr  S SKJrJrJrJr  S SK	J
r
Jr  S SKJrJrJr  S SKJrJrJrJrJrJrJrJrJr  S SKJrJr  \(       a  S SKJrJrJ r   S S	K!J"r"J#r#  S S
K$J%r%   " S S\5      r& " S S\\&5      r'g)    )annotations)dedent)TYPE_CHECKINGAnyCallableLiteral)deprecate_kwargdoc)BaseIndexerExpandingIndexerGroupbyIndexer)	_shared_docscreate_section_headerkwargs_numeric_onlynumba_notestemplate_headertemplate_returnstemplate_see_alsowindow_agg_numba_parameterswindow_apply_parameters)BaseWindowGroupbyRollingAndExpandingMixin)AxisQuantileInterpolationWindowingRankType)	DataFrameSeries)NDFramec                    ^  \ rS rSr% Sr/ SQrS\S'       Sh         SiU 4S jjjrSjS jr\	" \
S	   \" S
5      \" S5      SSS9U 4S j5       r\r\	" \\" S5      \\" S5      \\" S5      \" S5      SSSS9
SkSlU 4S jjj5       r\	" \\" S5      \\" S5      \\" S5      \\" S5      \" S5      SSSS9     Sm           SnU 4S jjj5       r\	" \\" S5      \\" 5       \" S5      \\" S5      \\" S5      \\" S5      \" S5      SS S S9   So     SpU 4S! jjj5       r\	" \\" S5      \\" 5       \" S5      \\" S5      \\" S5      \\" S5      \" S"5      SS#S$S9   So     SpU 4S% jjj5       r\	" \\" S5      \\" 5       \" S5      \\" S5      \\" S5      \\" S5      \" S&5      SS'S(S9   So     SpU 4S) jjj5       r\	" \\" S5      \\" 5       \" S5      \\" S5      \\" S5      \\" S5      \" S*5      SS+S+S9   So     SpU 4S, jjj5       r\	" \\" S5      \\" 5       \" S5      \\" S5      \\" S5      \\" S5      \" S-5      SS.S.S9   So     SpU 4S/ jjj5       r\	" \\" S5      \" S05      R;                  S1SS5      \\" S25      \" S5      \\" S5      S3\\" S5      \" S45      R;                  S1SS5      \" S5      \" S55      R;                  S1SS5      SS6S7S9    Sq       SrU 4S8 jjj5       r\	" \\" S5      \" S05      R;                  S1SS5      \\" S25      \" S5      \\" S5      S9\\" S5      \" S:5      R;                  S1SS5      \" S5      \" S;5      R;                  S1SS5      SS<S=S9    Sq       SrU 4S> jjj5       r\	" \\" S5      \" S05      R;                  S1SS5      \\" S5      \\" S5      \\" S5      S?\" S5      \" S@5      R;                  S1SS5      SSASBS9SsStU 4SC jjj5       r \	" \\" S5      \\" S5      \\" S5      SD\\" S5      SE\" S5      \" SF5      SSGSHS9SkSlU 4SI jjj5       r!\	" \\" S5      \\" S5      \\" S5      SJ\\" S5      SK\" S5      \" SL5      R;                  S1SS5      SSMSNS9SkSlU 4SO jjj5       r"\	" \\" S5      \" SP5      R;                  S1SS5      \\" S5      \\" S5      \\" S5      \" SQ5      SSRSRS9\#" SRSSST9  Su     SvU 4SU jjj5       5       r$\	" \SV\" S5      \" SW5      R;                  S1SS5      \\" S5      \\" S5      \\" S5      \" SX5      R;                  S1SS5      SSYSYS9    Sw       SxU 4SZ jjj5       r%\	" \\" S5      \" S[5      R;                  S1SS5      \\" S5      \\" S5      \\" S5      \" S\5      SS]S^S9    Sy       SzU 4S_ jjj5       r&\	" \\" S5      \" S`5      R;                  S1SS5      \\" S5      \\" S5      \" Sa5      R;                  S1SS5      \\" S5      \" Sb5      \" S5      \" Sc5      SSdSeS9    Sy       SzU 4Sf jjj5       r'Sgr(U =r)$ ){	Expanding3   a  
Provide expanding window calculations.

Parameters
----------
min_periods : int, default 1
    Minimum number of observations in window required to have a value;
    otherwise, result is ``np.nan``.

axis : int or str, default 0
    If ``0`` or ``'index'``, roll across the rows.

    If ``1`` or ``'columns'``, roll across the columns.

    For `Series` this parameter is unused and defaults to 0.

method : str {'single', 'table'}, default 'single'
    Execute the rolling operation per single column or row (``'single'``)
    or over the entire object (``'table'``).

    This argument is only implemented when specifying ``engine='numba'``
    in the method call.

    .. versionadded:: 1.3.0

Returns
-------
pandas.api.typing.Expanding

See Also
--------
rolling : Provides rolling window calculations.
ewm : Provides exponential weighted functions.

Notes
-----
See :ref:`Windowing Operations <window.expanding>` for further usage details
and examples.

Examples
--------
>>> df = pd.DataFrame({"B": [0, 1, 2, np.nan, 4]})
>>> df
     B
0  0.0
1  1.0
2  2.0
3  NaN
4  4.0

**min_periods**

Expanding sum with 1 vs 3 observations needed to calculate a value.

>>> df.expanding(1).sum()
     B
0  0.0
1  1.0
2  3.0
3  3.0
4  7.0
>>> df.expanding(3).sum()
     B
0  NaN
1  NaN
2  3.0
3  3.0
4  7.0
)min_periodsaxismethodz	list[str]_attributes   c                (   > [         TU ]  UUUUUS9  g )N)objr"   r#   r$   	selection)super__init__)selfr(   r"   r#   r$   r)   	__class__s         N/var/www/html/env/lib/python3.13/site-packages/pandas/core/window/expanding.pyr+   Expanding.__init__|   s&     	# 	 	
    c                    [        5       $ )zK
Return an indexer class that will compute the window start and end bounds
)r   )r,   s    r.   _get_window_indexerExpanding._get_window_indexer   s      !!r0   	aggregatez
        See Also
        --------
        pandas.DataFrame.aggregate : Similar DataFrame method.
        pandas.Series.aggregate : Similar Series method.
        a  
        Examples
        --------
        >>> df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6], "C": [7, 8, 9]})
        >>> df
           A  B  C
        0  1  4  7
        1  2  5  8
        2  3  6  9

        >>> df.ewm(alpha=0.5).mean()
                  A         B         C
        0  1.000000  4.000000  7.000000
        1  1.666667  4.666667  7.666667
        2  2.428571  5.428571  8.428571
        zSeries/Dataframe )see_alsoexamplesklassr#   c                ,   > [         TU ]  " U/UQ70 UD6$ )N)r*   r4   )r,   funcargskwargsr-   s       r.   r4   Expanding.aggregate   s     @ w 7777r0   ReturnszSee AlsoExamplesz        >>> ser = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
        >>> ser.expanding().count()
        a    1.0
        b    2.0
        c    3.0
        d    4.0
        dtype: float64
        	expandingzcount of non NaN observationscount)window_methodaggregation_description
agg_methodc                   > [         TU ]  US9$ N)numeric_only)r*   rA   r,   rG   r-   s     r.   rA   Expanding.count   s    . w},}77r0   
Parametersz        >>> ser = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
        >>> ser.expanding().apply(lambda s: s.max() - 2 * s.min())
        a   -1.0
        b    0.0
        c    1.0
        d    2.0
        dtype: float64
        zcustom aggregation functionapplyc           	     (   > [         TU ]  UUUUUUS9$ )N)rawengineengine_kwargsr;   r<   )r*   rK   )r,   r:   rM   rN   rO   r;   r<   r-   s          r.   rK   Expanding.apply   s.    B w}'  
 	
r0   Notesz        >>> ser = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
        >>> ser.expanding().sum()
        a     1.0
        b     3.0
        c     6.0
        d    10.0
        dtype: float64
        sumc                "   > [         TU ]  UUUS9$ N)rG   rN   rO   )r*   rR   r,   rG   rN   rO   r-   s       r.   rR   Expanding.sum   %    B w{%'  
 	
r0   z        >>> ser = pd.Series([3, 2, 1, 4], index=['a', 'b', 'c', 'd'])
        >>> ser.expanding().max()
        a    3.0
        b    3.0
        c    3.0
        d    4.0
        dtype: float64
        maximummaxc                "   > [         TU ]  UUUS9$ rT   )r*   rY   rU   s       r.   rY   Expanding.max   rW   r0   z        >>> ser = pd.Series([2, 3, 4, 1], index=['a', 'b', 'c', 'd'])
        >>> ser.expanding().min()
        a    2.0
        b    2.0
        c    2.0
        d    1.0
        dtype: float64
        minimumminc                "   > [         TU ]  UUUS9$ rT   )r*   r]   rU   s       r.   r]   Expanding.minG  rW   r0   z        >>> ser = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
        >>> ser.expanding().mean()
        a    1.0
        b    1.5
        c    2.0
        d    2.5
        dtype: float64
        meanc                "   > [         TU ]  UUUS9$ rT   )r*   r`   rU   s       r.   r`   Expanding.meann  s%    B w|%'  
 	
r0   z        >>> ser = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
        >>> ser.expanding().median()
        a    1.0
        b    1.5
        c    2.0
        d    2.5
        dtype: float64
        medianc                "   > [         TU ]  UUUS9$ rT   )r*   rc   rU   s       r.   rc   Expanding.median  s%    B w~%'  
 	
r0   z
        ddof : int, default 1
            Delta Degrees of Freedom.  The divisor used in calculations
            is ``N - ddof``, where ``N`` represents the number of elements.

        
z1.4z/numpy.std : Equivalent method for NumPy array.
z
        The default ``ddof`` of 1 used in :meth:`Series.std` is different
        than the default ``ddof`` of 0 in :func:`numpy.std`.

        A minimum of one period is required for the rolling calculation.

        a  
        >>> s = pd.Series([5, 5, 6, 7, 5, 5, 5])

        >>> s.expanding(3).std()
        0         NaN
        1         NaN
        2    0.577350
        3    0.957427
        4    0.894427
        5    0.836660
        6    0.786796
        dtype: float64
        zstandard deviationstdc                $   > [         TU ]  UUUUS9$ N)ddofrG   rN   rO   )r*   rg   r,   rj   rG   rN   rO   r-   s        r.   rg   Expanding.std  (    j w{%'	  
 	
r0   z/numpy.var : Equivalent method for NumPy array.
z
        The default ``ddof`` of 1 used in :meth:`Series.var` is different
        than the default ``ddof`` of 0 in :func:`numpy.var`.

        A minimum of one period is required for the rolling calculation.

        a  
        >>> s = pd.Series([5, 5, 6, 7, 5, 5, 5])

        >>> s.expanding(3).var()
        0         NaN
        1         NaN
        2    0.333333
        3    0.916667
        4    0.800000
        5    0.700000
        6    0.619048
        dtype: float64
        variancevarc                $   > [         TU ]  UUUUS9$ ri   )r*   ro   rk   s        r.   ro   Expanding.var  rm   r0   z:A minimum of one period is required for the calculation.

z
        >>> s = pd.Series([0, 1, 2, 3])

        >>> s.expanding().sem()
        0         NaN
        1    0.707107
        2    0.707107
        3    0.745356
        dtype: float64
        zstandard error of meansemc                   > [         TU ]  XS9$ )N)rj   rG   )r*   rr   )r,   rj   rG   r-   s      r.   rr   Expanding.sem4  s    F w{{@@r0   z:scipy.stats.skew : Third moment of a probability density.
zEA minimum of three periods is required for the rolling calculation.

a           >>> ser = pd.Series([-1, 0, 2, -1, 2], index=['a', 'b', 'c', 'd', 'e'])
        >>> ser.expanding().skew()
        a         NaN
        b         NaN
        c    0.935220
        d    1.414214
        e    0.315356
        dtype: float64
        zunbiased skewnessskewc                   > [         TU ]  US9$ rF   )r*   ru   rH   s     r.   ru   Expanding.skewY  s    : w||66r0   z/scipy.stats.kurtosis : Reference SciPy method.
z<A minimum of four periods is required for the calculation.

a[  
        The example below will show a rolling calculation with a window size of
        four matching the equivalent function call using `scipy.stats`.

        >>> arr = [1, 2, 3, 4, 999]
        >>> import scipy.stats
        >>> print(f"{{scipy.stats.kurtosis(arr[:-1], bias=False):.6f}}")
        -1.200000
        >>> print(f"{{scipy.stats.kurtosis(arr, bias=False):.6f}}")
        4.999874
        >>> s = pd.Series(arr)
        >>> s.expanding(4).kurt()
        0         NaN
        1         NaN
        2         NaN
        3   -1.200000
        4    4.999874
        dtype: float64
        z,Fisher's definition of kurtosis without biaskurtc                   > [         TU ]  US9$ rF   )r*   rx   rH   s     r.   rx   Expanding.kurtx  s    L w||66r0   a  
        quantile : float
            Quantile to compute. 0 <= quantile <= 1.

            .. deprecated:: 2.1.0
                This will be renamed to 'q' in a future version.
        interpolation : {{'linear', 'lower', 'higher', 'midpoint', 'nearest'}}
            This optional parameter specifies the interpolation method to use,
            when the desired quantile lies between two data points `i` and `j`:

                * linear: `i + (j - i) * fraction`, where `fraction` is the
                  fractional part of the index surrounded by `i` and `j`.
                * lower: `i`.
                * higher: `j`.
                * nearest: `i` or `j` whichever is nearest.
                * midpoint: (`i` + `j`) / 2.
        a          >>> ser = pd.Series([1, 2, 3, 4, 5, 6], index=['a', 'b', 'c', 'd', 'e', 'f'])
        >>> ser.expanding(min_periods=4).quantile(.25)
        a     NaN
        b     NaN
        c     NaN
        d    1.75
        e    2.00
        f    2.25
        dtype: float64
        quantileq)old_arg_namenew_arg_namec                "   > [         TU ]  UUUS9$ )N)r|   interpolationrG   )r*   r{   )r,   r|   r   rG   r-   s       r.   r{   Expanding.quantile  s&    h w'%   
 	
r0   z.. versionadded:: 1.4.0 

a  
        method : {{'average', 'min', 'max'}}, default 'average'
            How to rank the group of records that have the same value (i.e. ties):

            * average: average rank of the group
            * min: lowest rank in the group
            * max: highest rank in the group

        ascending : bool, default True
            Whether or not the elements should be ranked in ascending order.
        pct : bool, default False
            Whether or not to display the returned rankings in percentile
            form.
        a+  
        >>> s = pd.Series([1, 4, 2, 3, 5, 3])
        >>> s.expanding().rank()
        0    1.0
        1    2.0
        2    2.0
        3    3.0
        4    5.0
        5    3.5
        dtype: float64

        >>> s.expanding().rank(method="max")
        0    1.0
        1    2.0
        2    2.0
        3    3.0
        4    5.0
        5    4.0
        dtype: float64

        >>> s.expanding().rank(method="min")
        0    1.0
        1    2.0
        2    2.0
        3    3.0
        4    5.0
        5    3.0
        dtype: float64
        rankc                $   > [         TU ]  UUUUS9$ )N)r$   	ascendingpctrG   )r*   r   )r,   r$   r   r   rG   r-   s        r.   r   Expanding.rank  s(    H w|%	  
 	
r0   a   
        other : Series or DataFrame, optional
            If not supplied then will default to self and produce pairwise
            output.
        pairwise : bool, default None
            If False then only matching columns between self and other will be
            used and the output will be a DataFrame.
            If True then all pairwise combinations will be calculated and the
            output will be a MultiIndexed DataFrame in the case of DataFrame
            inputs. In the case of missing elements, only complete pairwise
            observations will be used.
        ddof : int, default 1
            Delta Degrees of Freedom.  The divisor used in calculations
            is ``N - ddof``, where ``N`` represents the number of elements.
        a0          >>> ser1 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
        >>> ser2 = pd.Series([10, 11, 13, 16], index=['a', 'b', 'c', 'd'])
        >>> ser1.expanding().cov(ser2)
        a         NaN
        b    0.500000
        c    1.500000
        d    3.333333
        dtype: float64
        zsample covariancecovc                $   > [         TU ]  UUUUS9$ N)otherpairwiserj   rG   )r*   r   r,   r   r   rj   rG   r-   s        r.   r   Expanding.cov%  s(    b w{%	  
 	
r0   aN  
        other : Series or DataFrame, optional
            If not supplied then will default to self and produce pairwise
            output.
        pairwise : bool, default None
            If False then only matching columns between self and other will be
            used and the output will be a DataFrame.
            If True then all pairwise combinations will be calculated and the
            output will be a MultiIndexed DataFrame in the case of DataFrame
            inputs. In the case of missing elements, only complete pairwise
            observations will be used.
        z
        cov : Similar method to calculate covariance.
        numpy.corrcoef : NumPy Pearson's correlation calculation.
        ao  
        This function uses Pearson's definition of correlation
        (https://en.wikipedia.org/wiki/Pearson_correlation_coefficient).

        When `other` is not specified, the output will be self correlation (e.g.
        all 1's), except for :class:`~pandas.DataFrame` inputs with `pairwise`
        set to `True`.

        Function will return ``NaN`` for correlations of equal valued sequences;
        this is the result of a 0/0 division error.

        When `pairwise` is set to `False`, only matching columns between `self` and
        `other` will be used.

        When `pairwise` is set to `True`, the output will be a MultiIndex DataFrame
        with the original index on the first level, and the `other` DataFrame
        columns on the second level.

        In the case of missing elements, only complete pairwise observations
        will be used.

        a1          >>> ser1 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
        >>> ser2 = pd.Series([10, 11, 13, 16], index=['a', 'b', 'c', 'd'])
        >>> ser1.expanding().corr(ser2)
        a         NaN
        b    1.000000
        c    0.981981
        d    0.975900
        dtype: float64
        correlationcorrc                $   > [         TU ]  UUUUS9$ r   )r*   r   r   s        r.   r   Expanding.corr]  s(    X w|%	  
 	
r0    )r&   r   singleN)
r(   r   r"   intr#   r   r$   strreturnNone)r   r   )F)rG   bool)FNNNN)r:   zCallable[..., Any]rM   r   rN   !Literal['cython', 'numba'] | NonerO   dict[str, bool] | Noner;   ztuple[Any, ...] | Noner<   zdict[str, Any] | None)FNN)rG   r   rN   r   rO   r   )r&   FNN)rj   r   rG   r   rN   r   rO   r   )r&   F)rj   r   rG   r   )linearF)r|   floatr   r   rG   r   )averageTFF)r$   r   r   r   r   r   rG   r   )NNr&   F)r   zDataFrame | Series | Noner   zbool | Nonerj   r   rG   r   )*__name__
__module____qualname____firstlineno____doc__r%   __annotations__r+   r2   r
   r   r   r4   aggr   r   r   r   rA   r   rK   r   r   r   rR   rY   r]   r`   rc   replacerg   ro   rr   ru   rx   r	   r{   r   r   r   __static_attributes____classcell__)r-   s   @r.   r    r    3   s   DL ?K>
 

 
 	

 
 

 
 " 	[!
 
$ !;>8?>8 Ci(j)j)
	
 " ?),8 8-,8 	l+i(j)j)
	
 " =-6 4804'+(,
 
 
 2	

 .
 %
 &
10
$ 	l+#%i(j)g&j)
	
 " %3: #4804	



 2

 .	

76

 	l+#%i(j)g&j)
	
 " )3: #4804	



 2

 .	

76

 	l+#%i(j)g&j)
	
 " )3: #4804	



 2

 .	

76

 	l+#%i(j)g&j)
	
 " &3: #4804	



 2

 .	

76

 	l+#%i(j)g&j)
	
 " (3: #4804	



 2

 .	

76

 	l+	
 '$A
#E*i(j):g&	
 '$A
j)	
 '$A
! 4Y-` "4804

 
 2	

 .
]-\
 	l+	
 '$A
#E*i(j):g&	
 '$A
j)	
 '$A
! *Y-` "4804

 
 2	

 .
]-\
 	l+	
 '$A
i(j)g&Fj)		
 '$A
! 8A!DA AE!DA 	l+i(j)Eg&Qj)		
 " 3587 7987 	l+i(j):g&Hj)	
( '$A
! NG$J7 7K$J7 	l+	
$ '$A
i(j)j)
	
 " *W,Z *3? 08"	



 -

 	

 @[,\

 	&l+	
 '$A
i(j)j)	
< '$A
! &w<~ %."
!
 
 	

 
{<z
 	l+	
  '$A
i(j)j)		
 " 3Q)X ,0 $"
(
 
 	

 
U)T
 	l+	
 '$A
i(j)	

 '$A
g&	
. 	j)		
 " -GDN ,0 $"
(
 
 	

 
KDJ
r0   r    c                  T    \ rS rSrSr\R                  \R                  -   rSS jrSr	g)ExpandingGroupbyi  z-
Provide a expanding groupby implementation.
c                J    [        U R                  R                  [        S9nU$ )zk
Return an indexer class that will compute the window start and end bounds

Returns
-------
GroupbyIndexer
)groupby_indiceswindow_indexer)r   _grouperindicesr   )r,   r   s     r.   r2   $ExpandingGroupby._get_window_indexer  s&     ( MM11+
 r0   r   N)r   r   )
r   r   r   r   r   r    r%   r   r2   r   r   r0   r.   r   r     s%     ''*;*G*GGKr0   r   N)(
__future__r   textwrapr   typingr   r   r   r   pandas.util._decoratorsr	   r
   pandas.core.indexers.objectsr   r   r   pandas.core.window.docr   r   r   r   r   r   r   r   r   pandas.core.window.rollingr   r   pandas._typingr   r   r   pandasr   r   pandas.core.genericr   r    r   r   r0   r.   <module>r      sp    "  
 

 
 

   ,{
( {
|() r0   