Ë
    ¤ehu ã                  ó  — d Z ddlmZ ddlZddlmZ ddlmZ ddlZddl	m
Z
 ddlmZmZmZmZ ddlZddlmZmZmZ ddlmc mc 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) ddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:c m;Z< ddl=m>Z>m?Z?m@Z@mAZA ddlBmCZCmDZDmEZEmFZFmGZG ddlHmIZI ddlJmKZKmLZL ddlMmNZNmOZO ddlPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ ddl[m\Z\m]Z]m^Z^ er.ddl_m`Z`maZambZb ddlcmdZdmeZemfZfmgZgmhZhmiZi ddljmkZkmlZl ddlmmnZn dd lompZp dd!lqmrZr  G d"„ d#e8«      Zs G d$„ d%es«      Zt G d&„ d'es«      Zu G d(„ d)es«      Zv G d*„ d+ev«      Zweuj                   ew_          G d,„ d-etew«      Zxy).zc
Provide a generic structure to support window functions,
similar to how we have a Groupby object.
é    )ÚannotationsN)Ú	timedelta)Úpartial)Údedent)ÚTYPE_CHECKINGÚAnyÚCallableÚLiteral)Ú
BaseOffsetÚ	TimedeltaÚ	to_offset)Úimport_optional_dependency)Ú	DataError)Údeprecate_kwargÚdoc)Úensure_float64Úis_boolÚ
is_integerÚis_numeric_dtypeÚneeds_i8_conversion)Ú
ArrowDtype)ÚABCDataFrameÚ	ABCSeries)Únotna)Úexecutor)Ú	factorize)ÚResamplerWindowApply)ÚExtensionArray)ÚSelectionMixin)ÚBaseIndexerÚFixedWindowIndexerÚGroupbyIndexerÚVariableWindowIndexer)ÚDatetimeIndexÚIndexÚ
MultiIndexÚPeriodIndexÚTimedeltaIndex)Úconcat)Úget_jit_argumentsÚmaybe_use_numba)Úflex_binary_momentÚzsqrt)
Ú_shared_docsÚcreate_section_headerÚkwargs_numeric_onlyÚkwargs_scipyÚnumba_notesÚtemplate_headerÚtemplate_returnsÚtemplate_see_alsoÚwindow_agg_numba_parametersÚwindow_apply_parameters)Ú'generate_manual_numpy_nan_agg_with_axisÚgenerate_numba_apply_funcÚgenerate_numba_table_func)ÚHashableÚIteratorÚSized)Ú	ArrayLikeÚAxisÚNDFrameTÚQuantileInterpolationÚWindowingRankTypeÚnpt)Ú	DataFrameÚSeries)ÚNDFrame©ÚBaseGrouper)Údtype_to_unitc                  óÊ  — e Zd ZU dZg Zded<    e«       Zded<   ded<   	 	 	 	 	 	 	 	 	 d"dd	œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d#d
„Zd$d„Z		 	 	 	 	 	 	 	 d%d„Z
d&d'd„Zd(d„Zd)d„Zd*d+d„Zd&d„Zd,d„Zd„ Zd-d„Zd.d„Zd/d„Zd0d„Zed1d„«       Zd2d„Zd3d„Z	 d&	 	 	 	 	 d4d„Z	 d*	 	 	 	 	 	 	 d5d„Z	 	 d6	 	 	 	 	 	 	 d7d„Z	 	 	 	 	 	 	 	 	 	 	 	 d8d„Z	 	 d9	 	 	 	 	 	 	 d:d„Z	 d&	 	 	 d;d „Zd!„ Z e Z!y)<Ú
BaseWindowz7Provides utilities for performing windowing operations.ú	list[str]Ú_attributeszfrozenset[Hashable]Ú
exclusionsr%   Ú_onN)Ú	selectionc               óê  — || _         || _        || _        |	| _        || _        || _        || _        || _        |�|j                  |«      nd | _	        |
| _
        d | _        | j                  €G| j                  dk(  r| j                   j                  | _        nÅ| j                   j                  | _        n©t        | j                  t         «      r| j                  | _        n}t        | j                   t"        «      rJ| j                  | j                   j                  v r(t!        | j                   | j                     «      | _        nt%        d| j                  › d�«      ‚|| _        | j)                  «        y )Nr   zinvalid on specified as z3, must be a column (of DataFrame), an Index or None)ÚobjÚonÚclosedÚstepÚwindowÚmin_periodsÚcenterÚwin_typeÚ_get_axis_numberÚaxisÚmethodÚ_win_freq_i8ÚindexrO   ÚcolumnsÚ
isinstancer%   r   Ú
ValueErrorÚ
_selectionÚ	_validate)ÚselfrR   rV   rW   rX   rY   r[   rS   rT   rU   r\   rP   s               úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/pandas/core/window/rolling.pyÚ__init__zBaseWindow.__init__   s'  € ð ˆŒØˆŒØˆŒØˆŒ	ØˆŒØ&ˆÔØˆŒØ ˆŒØ26Ð2B�C×(Ñ(¨Ô.ÈˆŒ	ØˆŒØ(,ˆÔØ�7‰7ˆ?Ø�y‰y˜AŠ~ØŸ8™8Ÿ>™>�•ð  Ÿ8™8×+Ñ+�•Ü˜Ÿ™¤Ô'Ø—w‘wˆD�HÜ˜Ÿ™¤,Ô/°D·G±G¸t¿x¹x×?OÑ?OÑ4OÜ˜TŸX™X d§g¡gÑ.Ó/ˆD�HäØ*¨4¯7©7¨)ð 4Dð Dóð ð
 $ˆŒØ�‰Õó    c                óš  — | j                   � t        | j                   «      st        d«      ‚| j                  ��t	        | j                  «      st        d«      ‚| j                  dk  rt        d«      ‚t	        | j
                  «      r>| j                  | j
                  kD  r%t        d| j                  › d| j
                  › �«      ‚| j                  �| j                  dvrt        d«      ‚t        | j                  t        t        f«      st        d	t        | «      › �«      ‚t        | j
                  t        «      r°t        j                  | j
                  j                   «      j"                  j%                  «       }t        j                  t        «       j                   «      j"                  j%                  «       }||k7  r+t        t        | j
                  «      j&                  › d
�«      ‚| j(                  dvrt        d«      ‚| j*                  �;t	        | j*                  «      st        d«      ‚| j*                  dk  rt        d«      ‚y y )Nzcenter must be a booleanzmin_periods must be an integerr   zmin_periods must be >= 0zmin_periods z must be <= window )ÚrightÚbothÚleftÚneitherz3closed must be 'right', 'left', 'both' or 'neither'zinvalid type: z? does not implement the correct signature for get_window_bounds)ÚtableÚsinglez!method must be 'table' or 'singlezstep must be an integerzstep must be >= 0)rX   r   ra   rW   r   rV   rT   r`   rR   r   r   Ú	TypeErrorÚtyper    ÚinspectÚ	signatureÚget_window_boundsÚ
parametersÚkeysÚ__name__r\   rU   )rd   Úget_window_bounds_signatureÚexpected_signatures      re   rc   zBaseWindow._validate¬   sù  € Ø�;‰;Ð"¬7°4·;±;Ô+?ÜÐ7Ó8Ð8Ø×ÑÐ'Ü˜d×.Ñ.Ô/Ü Ð!AÓBÐBØ×Ñ !Ò#Ü Ð!;Ó<Ð<Ü˜$Ÿ+™+Ô&¨4×+;Ñ+;¸d¿k¹kÒ+IÜ Ø" 4×#3Ñ#3Ð"4Ð4GÈÏÉÀ}ÐUóð ð �;‰;Ð" t§{¡{ð ;
ñ (
ô ÐRÓSÐSÜ˜$Ÿ(™(¤Y´Ð$=Ô>Ü˜n¬T°$«Z¨LÐ9Ó:Ð:Ü�d—k‘k¤;Ô/ô +2×*;Ñ*;Ø—‘×-Ñ-ó+ç‰jŸ™›ð (ô ")×!2Ñ!2Ü“×/Ñ/ó"ç‰jŸ™›ð ð +Ð.@Ò@Ü Ü˜DŸK™KÓ(×1Ñ1Ð2ð 3Bð Cóð ð �;‰;Ð1Ñ1ÜÐ@ÓAÐAØ�9‰9Ð Ü˜dŸi™iÔ(Ü Ð!:Ó;Ð;Ø�y‰y˜1Š}Ü Ð!4Ó5Ð5ð ð !rg   c           	     ó0  — t        |«      t        |«      k7  r$t        dt        |«      › dt        |«      › d�«      ‚t        |«      || j                  xs dz   dz
  | j                  xs dz  k7  r(t        dt        |«      › d|› d| j                  › d�«      ‚y )	Nzstart (z) and end (z ) bounds must be the same lengthé   zstart and end bounds (z)) must be the same length as the object (z) divided by the step (z) if given and rounded up)Úlenra   rU   )rd   ÚstartÚendÚnum_valss       re   Ú_check_window_boundszBaseWindow._check_window_bounds×   s«   € ô ˆu‹:œ˜S›Ò!ÜØœ#˜e›*˜ [´°S³°
ð ;ð óð ô ˆu‹:˜( d§i¡i¢n°1Ñ5¸Ñ9¸t¿y¹yº~ÈAÑNÒNÜØ(¬¨U«¨ð 5"Ø"* Ð+BÀ4Ç9Á9À+ð N*ð+óð ð Org   c                ó\   — |�t        |«      t        |«      k(  r|S |dd| j                  …   S )zJ
        Slices the index for a given result and the preset step.
        N)r{   rU   )rd   r^   Úresults      re   Ú_slice_axis_for_stepzBaseWindow._slice_axis_for_stepæ   s9   € ð ˆ~¤ V£´°E³
Ò!:ð ð	
ð ‘|˜$Ÿ)™)�|Ñ$ð	
rg   c                óÄ   — | j                   j                  dk(  rG|rDt        | j                   j                  «      s$t	        t        | «      j                  › d|› d�«      ‚yyy)zö
        Validate numeric_only argument, raising if invalid for the input.

        Parameters
        ----------
        name : str
            Name of the operator (kernel).
        numeric_only : bool
            Value passed by user.
        rz   ú.z  does not implement numeric_onlyN)Ú_selected_objÚndimr   ÚdtypeÚNotImplementedErrorrp   rv   )rd   ÚnameÚnumeric_onlys      re   Ú_validate_numeric_onlyz!BaseWindow._validate_numeric_onlyð   sg   € ð ×Ñ×#Ñ# qÒ(ÙÜ$ T×%7Ñ%7×%=Ñ%=Ô>ä%Ü˜“:×&Ñ&Ð' q¨¨Ð.NÐOóð ð ?ð ð )rg   c                ó0   — |j                  dgdg¬«      }|S )z¹Subset DataFrame to numeric columns.

        Parameters
        ----------
        obj : DataFrame

        Returns
        -------
        obj subset to numeric-only columns.
        Únumberr   )ÚincludeÚexclude)Úselect_dtypes)rd   rR   r�   s      re   Ú_make_numeric_onlyzBaseWindow._make_numeric_only  s"   € ð ×"Ñ"¨H¨:À¸}Ð"ÓMˆØˆrg   c                óÂ  — | j                   �`t        | j                   t        «      sF|j                  dk(  r7|j	                  |j
                  j                  | j                   g«      d¬«      }|j                  dkD  r"|s| j                  dk(  r| j                  |«      }| j                  dk(  r2|j                  dd¬«      }|j                  j                  «       |_
        |S )úA
        Split data into blocks & return conformed data.
        é   F)r_   Úcopyrz   Úfloat64)r•   )rS   r`   r%   r†   Úreindexr_   Ú
differencer[   r‘   ÚastypeÚ_mgrÚconsolidate)rd   rR   rŠ   s      re   Ú_create_datazBaseWindow._create_data  s¬   € ð
 �7‰7Ð¤z°$·'±'¼5Ô'AÀcÇhÁhÐRSÂmØ—+‘+ c§k¡k×&<Ñ&<¸d¿g¹g¸YÓ&GÈe�+ÓTˆCØ�8‰8�aŠ<™\¨T¯Y©Y¸!ª^ð ×)Ñ)¨#Ó.ˆCØ�9‰9˜Š>Ø—*‘*˜Y¨U�*Ó3ˆCØ—x‘x×+Ñ+Ó-ˆCŒHØˆ
rg   c                óÀ   — |€| j                   }| j                  D �ci c]  }|t        | |«      “Œ }}| j                  ||«      } t	        | «      |fd|i|¤Ž}|S c c}w )a  
        Sub-classes to define. Return a sliced object.

        Parameters
        ----------
        key : str / list of selections
        ndim : {1, 2}
            requested ndim of result
        subset : object, default None
            subset to act on
        rP   )rR   rM   ÚgetattrÚ_infer_selectionrp   )rd   Úkeyr†   ÚsubsetÚattrÚkwargsrP   Únew_wins           re   Ú_gotitemzBaseWindow._gotitem#  sp   € ð ˆ>Ø—X‘XˆFð 9=×8HÑ8HÖI°�$œ  dÓ+Ñ+ÐIˆÐIà×)Ñ)¨#¨vÓ6ˆ	Ø”$�t“*˜VÑC¨yÐC¸FÑCˆØˆùò	 Js   �Ac                óº   — || j                   v rt        j                  | |«      S || j                  v r| |   S t	        dt        | «      j                  › d|› d�«      ‚)Nú'z' object has no attribute ')Ú_internal_names_setÚobjectÚ__getattribute__rR   ÚAttributeErrorrp   rv   )rd   r¢   s     re   Ú__getattr__zBaseWindow.__getattr__;  sd   € Ø�4×+Ñ+Ñ+Ü×*Ñ*¨4°Ó6Ð6Ø�4—8‘8ÑØ˜‘:ÐäØ”�T“
×#Ñ#Ð$Ð$?À¸vÀQÐGó
ð 	
rg   c                ó6   — | j                   j                  «       S ©N)rR   Ú_dir_additions©rd   s    re   r¯   zBaseWindow._dir_additionsE  s   € Ø�x‰x×&Ñ&Ó(Ð(rg   c                ó†   ‡ — ˆ fd„‰ j                   D «       }dj                  |«      }t        ‰ «      j                  › d|› d�S )z@
        Provide a nice str repr of our rolling object.
        c              3  ój   •K  — | ]*  }t        ‰|d «      �|d   dk7  r|› dt        ‰|«      › �–— Œ, y ­w)Nr   Ú_ú=)rž   )Ú.0Ú	attr_namerd   s     €re   ú	<genexpr>z&BaseWindow.__repr__.<locals>.<genexpr>L  sF   øè ø€ ò 
àÜ�t˜Y¨Ó-Ð9¸iÈ¹lÈcÒ>Qð ˆk˜œ7 4¨Ó3Ð4Ô5ñ
ùs   ƒ03ú,z [ú])rM   Újoinrp   rv   )rd   Ú
attrs_listÚattrss   `  re   Ú__repr__zBaseWindow.__repr__H  sF   ø€ ó
à!×-Ñ-ô
ˆ
ð
 —‘˜Ó$ˆÜ�t“*×%Ñ%Ð& b¨¨¨qÐ1Ð1rg   c              #  óÆ  K  — | j                   j                  | j                  «      }| j                  |«      }| j	                  «       }|j                  t        |«      | j                  | j                  | j                  | j                  ¬«      \  }}| j                  ||t        |«      «       t        ||«      D ]"  \  }}|j                  t        ||«         }|–— Œ$ y ­w©N©Ú
num_valuesrW   rX   rT   rU   )r…   Úset_axisrO   rœ   Ú_get_window_indexerrs   r{   rW   rX   rT   rU   r   ÚzipÚilocÚslice)rd   rR   Úindexerr|   r}   ÚsÚer�   s           re   Ú__iter__zBaseWindow.__iter__T  sÆ   è ø€ Ø× Ñ ×)Ñ)¨$¯(©(Ó3ˆØ×Ñ Ó$ˆØ×*Ñ*Ó,ˆà×.Ñ.Ü˜3“xØ×(Ñ(Ø—;‘;Ø—;‘;Ø—‘ð /ó 
‰
ˆˆsð 	×!Ñ! %¨¬c°#«hÔ7ä˜˜s“Oò 	‰DˆAˆqØ—X‘Xœe A q›kÑ*ˆFØ‹Lñ	ùs   ‚CC!c                ó  — t        |j                  «      r/t        dt        | «      j                  › d|j                  › d�«      ‚	 t        |t        «      r0|j                  t        j                  t        j                  ¬«      }nt        |«      }t        j                  |«      }|j                  «       r%t        j                   |t        j                  |«      }|S # t        t        f$ r}t        d|j                  › �«      |‚d}~ww xY w)z1Convert input to numpy arrays for Cython routineszops for z for this dtype z are not implemented)Úna_valuezcannot handle this type -> N)r   r‡   rˆ   rp   rv   r`   r   Úto_numpyÚnpr–   Únanr   ra   ro   ÚisinfÚanyÚwhere)rd   ÚvaluesÚerrÚinfs       re   Ú_prep_valueszBaseWindow._prep_valuesf  sÝ   € ä˜vŸ|™|Ô,Ü%Øœ4 ›:×.Ñ.Ð/ð 0ØŸ™˜Ð&:ð<óð ð	SÜ˜&¤.Ô1ØŸ™¬¯©¼b¿f¹f˜ÓE‘ä'¨Ó/�ô
 �h‰h�vÓˆØ�7‰7Œ9Ü—X‘X˜c¤2§6¡6¨6Ó2ˆFàˆøô œIÐ&ò 	SÜÐ9¸&¿,¹,¸ÐHÓIÈsÐRûð	Sús   ÁAC ÃD
Ã,DÄD
c                óX  — ddl m} | j                  ��| j                  j	                  |j
                  «      sñ| j                  j                  } || j                  | j                  j
                  |d¬«      }||j                  v r|||<   y ||j
                  j                  v ry || j                  j                  v rf| j                  j                  }|j                  }|j                  |«      }|j                  |d | «      }	t        |	«      }
|j                  |
||«       y |||<   y y y )Nr   ©rE   F©r^   r‰   r•   )ÚpandasrE   rS   rO   Úequalsr^   r‰   rR   r_   Únamesr…   Úget_locÚintersectionr{   Úinsert)rd   r�   rR   rE   r‰   Ú	extra_colÚold_colsÚnew_colsÚold_locÚoverlapÚnew_locs              re   Ú_insert_on_columnzBaseWindow._insert_on_column~  sù   € õ 	"à�7‰7Ñ t§x¡x§¡°s·y±yÔ'AØ—8‘8—=‘=ˆDÙ˜tŸx™x¨t¯x©x¯~©~ÀDÈuÔUˆIØ�v—~‘~Ñ%à(��t’Ø˜Ÿ™×+Ñ+Ñ+ØØ˜×+Ñ+×3Ñ3Ñ3à×-Ñ-×5Ñ5�Ø!Ÿ>™>�Ø"×*Ñ*¨4Ó0�Ø"×/Ñ/°¸¸'Ð0BÓC�Ü˜g›,�Ø—‘˜g t¨YÕ7ð  )��t’ð% (BÐrg   c                óZ  — t        | j                  t        t        t        f«      r| j                  j
                  S t        | j                  j                  t        «      rL| j                  j                  j                  dv r*| j                  j                  t        j                  ¬«      S y )NÚmM©r‡   )r`   rO   r'   r$   r(   Úasi8r‡   r   ÚkindrÍ   rÎ   Úint64r°   s    re   Ú_index_arrayzBaseWindow._index_array—  sm   € ô �d—h‘h¤¬m¼^Ð LÔMØ—8‘8—=‘=Ð Ü˜Ÿ™Ÿ™¬
Ô3¸¿¹¿¹×8KÑ8KÈtÑ8SØ—8‘8×$Ñ$¬2¯8©8Ð$Ó4Ð4Ørg   c                óÎ   — |j                   d   dk(  r|j                   d   dkD  rt        d«      ‚|j                   d   dk(  r|j                  d«      S | j                  ||«       |S )zValidate and finalize result.rz   r   úNo numeric types to aggregater–   )Úshaper   r™   ræ   )rd   ÚoutrR   s      re   Ú_resolve_outputzBaseWindow._resolve_output   sa   € à�9‰9�Q‰<˜1Ò §¡¨1¡°Ò!1ÜÐ;Ó<Ð<Ø�9‰9�Q‰<˜1ÒØ—:‘:˜iÓ(Ð(à×Ñ˜s CÔ(Øˆ
rg   c                óê   — t        | j                  t        «      r| j                  S | j                  �,t	        | j
                  | j                  | j                  ¬«      S t        | j                  ¬«      S )z[
        Return an indexer class that will compute the window start and end bounds
        )Úindex_arrayÚwindow_sizerX   )rõ   )r`   rV   r    r]   r#   rí   rX   r!   r°   s    re   rÃ   zBaseWindow._get_window_indexerª  s_   € ô �d—k‘k¤;Ô/Ø—;‘;ÐØ×ÑÐ(Ü(Ø ×-Ñ-Ø ×-Ñ-Ø—{‘{ôð ô
 "¨d¯k©kÔ:Ð:rg   c                ó€  — | j                  | j                  «      }|dk(  rt        |«      j                  t        «      }	 | j                  |j                  «      } ||«      }| j                  |j                  |«      }|j                  |||j                  ¬«      S # t        t        f$ r}t        d«      |‚d}~ww xY w)z5
        Series version of _apply_columnwise
        Úcountrï   N©r^   r‰   )rœ   r…   r   r™   ÚintrÖ   Ú_valuesro   rˆ   r   r‚   r^   Ú_constructorr‰   )rd   Úhomogeneous_funcr‰   rR   rÓ   rÔ   r�   r^   s           re   Ú_apply_serieszBaseWindow._apply_series¸  sµ   € ð ×Ñ × 2Ñ 2Ó3ˆà�7Š?ä˜“*×#Ñ#¤CÓ(ˆCð	FØ×&Ñ& s§{¡{Ó3ˆFñ " &Ó)ˆØ×)Ñ)¨#¯)©)°VÓ<ˆØ×Ñ ¨e¸#¿(¹(ÐÓCÐCøô Ô.Ð/ò 	FÜÐ;Ó<À#ÐEûð	Fús   Á B ÂB=Â,B8Â8B=c                ó¶  — | j                  ||«       | j                  j                  dk(  r| j                  ||«      S | j	                  | j                  |«      }|dk(  r=t        |«      j                  t        «      }|j                  j                  «       |_        | j                  dk(  r|j                  }g }g }t        |j                  «       «      D ]A  \  }}	 | j                  |«      } ||«      }
|j'                  |
«       |j'                  |«       ŒC | j)                  |j*                  t-        |«      dkD  r|d   nd«      }t/        |«      j1                  |||j2                  j5                  |«      d¬«      }| j                  dk(  r|j                  }| j7                  ||«      S # t        t         f$ r}	t#        d|j$                  › �«      |	‚d}	~	ww xY w)zl
        Apply the given function to the DataFrame broken down into homogeneous
        sub-frames.
        rz   r÷   z#Cannot aggregate non-numeric type: Nr   F)r^   r_   Úverify_integrity)r‹   r…   r†   rý   rœ   r   r™   rù   rš   r›   r[   ÚTÚ	enumerateÚ_iter_column_arraysrÖ   ro   rˆ   r   r‡   Úappendr‚   r^   r{   rp   Ú_from_arraysr_   Útakerò   )rd   rü   r‰   rŠ   rR   ÚtakerÚ
res_valuesÚiÚarrrÔ   Úresr^   Údfs                re   Ú_apply_columnwisezBaseWindow._apply_columnwiseÌ  s½  € ð 	×#Ñ# D¨,Ô7Ø×Ñ×"Ñ" aÒ'Ø×%Ñ%Ð&6¸Ó=Ð=à×Ñ × 2Ñ 2°LÓAˆØ�7Š?ä˜“*×#Ñ#¤CÓ(ˆCØ—x‘x×+Ñ+Ó-ˆCŒHà�9‰9˜Š>Ø—%‘%ˆCàˆØˆ
Ü × 7Ñ 7Ó 9Ó:ò 	‰FˆAˆsðØ×'Ñ'¨Ó,�ñ
 # 3Ó'ˆCØ×Ñ˜cÔ"Ø�L‰L˜�Oð	ð ×)Ñ)Ø�I‰I¬¨J«¸!Ò(;�z !’}Àó
ˆô �#‹Y×#Ñ#ØØØ—K‘K×$Ñ$ UÓ+Ø"ð	 $ó 
ˆð �9‰9˜Š>Ø—‘ˆBà×#Ñ# B¨Ó,Ð,øô+ Ô2Ð3ò ÜØ9¸#¿)¹)¸ÐEóàðûðús   ÃF+Æ+GÆ:GÇGc                ób  — | j                   j                  dk(  rt        d«      ‚| j                  | j                   |«      }| j	                  |j                  «       «      }| j                  dk(  r|j                  n|} ||«      }| j                  dk(  r|j                  n|}| j                  |j                  |«      }|j                  d   t        |j                  «      k(  r|j                  n|j                  dd| j                  …   }|j                  |||¬«      }	| j                  |	|«      S )zT
        Apply the given function to the DataFrame across the entire object
        rz   z1method='table' not applicable for Series objects.N©r^   r_   )r…   r†   ra   rœ   rÖ   rÍ   r[   r   r‚   r^   rð   r{   r_   rU   rû   rò   )
rd   rü   r‰   rŠ   rR   rÓ   r�   r^   r_   rñ   s
             re   Ú_apply_tablewisezBaseWindow._apply_tablewise  s  € ð ×Ñ×"Ñ" aÒ'ÜÐPÓQÐQØ×Ñ × 2Ñ 2°LÓAˆØ×"Ñ" 3§<¡<£>Ó2ˆØ!ŸY™Y¨!š^�—’°ˆÙ! &Ó)ˆØ!ŸY™Y¨!š^�—’°ˆØ×)Ñ)¨#¯)©)°VÓ<ˆð �|‰|˜A‰¤# c§k¡kÓ"2Ò2ð �KŠKà—‘™\ §	¡	˜\Ñ*ð 	ð
 ×Ñ˜v¨U¸GÐÓDˆà×#Ñ# C¨Ó-Ð-rg   c                óò   — | j                  ||«      }|€	|}|€dn|}nCt        |t        t        f«      st	        d«      ‚|j
                  dk(  r|r| j                  |«      }t        |||t        |«      ¬«      S )ú]
        Apply the given pairwise function given 2 pandas objects (DataFrame/Series)
        Tz#other must be a DataFrame or Seriesr”   )Úpairwise)	rœ   r`   r   r   ra   r†   r‘   r,   Úbool)rd   ÚtargetÚotherr  ÚfuncrŠ   s         re   Ú_apply_pairwisezBaseWindow._apply_pairwise  sy   € ð ×"Ñ" 6¨<Ó8ˆØˆ=ØˆEà'Ð/‘t°X‰HÜ˜E¤L´)Ð#<Ô=ÜÐBÓCÐCØ�Z‰Z˜1Š_¡Ø×+Ñ+¨EÓ2ˆEä! &¨%°ÄÀXÃÔOÐOrg   c                óò   ‡ ‡‡‡‡— ‰ j                  «       Š‰ j                  �‰ j                  n‰j                  Šdˆˆˆˆ ˆfd„}‰ j                  dk(  r‰ j	                  |||«      S ‰ j                  |||«      S )aÞ  
        Rolling statistical measure using supplied function.

        Designed to be used with passed-in Cython array-based functions.

        Parameters
        ----------
        func : callable function to apply
        name : str,
        numba_args : tuple
            args to be passed when func is a numba func
        **kwargs
            additional arguments for rolling function and window function

        Returns
        -------
        y : type of input
        c                óÀ   •— | j                   dk(  r| j                  «       S ˆˆˆˆˆfd„}t        j                  d¬«      5   || «      }d d d «       |S # 1 sw Y   S xY w)Nr   c                óÔ   •— ‰j                  t        | «      ‰‰j                  ‰j                  ‰j                  ¬«      \  }}‰j                  ||t        | «      «        ‰| ||‰g‰¢­Ž S r¿   )rs   r{   rX   rT   rU   r   )Úxr|   r}   r  rW   Ú
numba_argsrd   Úwindow_indexers      €€€€€re   Úcalcz9BaseWindow._apply.<locals>.homogeneous_func.<locals>.calcY  si   ø€ Ø+×=Ñ=Ü" 1›vØ +ØŸ;™;ØŸ;™;ØŸ™ð >ó ‘
��sð ×)Ñ)¨%°´c¸!³fÔ=á˜A˜u c¨;ÐD¸ÒDÐDrg   Úignore©Úall)Úsizer•   rÎ   Úerrstate)rÓ   r  r�   r  rW   r  rd   r  s      €€€€€re   rü   z+BaseWindow._apply.<locals>.homogeneous_funcS  s^   ø€ ð �{‰{˜aÒØ—{‘{“}Ð$÷
Eð 
Eô —‘ Ô*ñ &Ù˜f›�÷&ð ˆM÷&ð ˆMús   Á 	AÁArn   ©rÓ   ú
np.ndarray)rÃ   rW   rõ   r\   r  r  )	rd   r  r‰   rŠ   r  r£   rü   rW   r  s	   ``  `  @@re   Ú_applyzBaseWindow._apply2  s~   ü€ ð4 ×1Ñ1Ó3ˆð ×ÑÐ+ð ×Òà×+Ñ+ð 	÷	ñ 	ð. �;‰;˜(Ò"Ø×)Ñ)Ð*:¸DÀ,ÓOÐOà×(Ñ(Ð)9¸4ÀÓNÐNrg   c                ó<  — | j                  «       }| j                  �| j                  n|j                  }| j                  | j                  «      }| j
                  dk(  r|j                  }| j                  |j                  «       «      }|j                  dk(  r|j                  dd«      }|j                  t        |«      || j                  | j                  | j                  ¬«      \  }}	| j!                  ||	t        |«      «       t"        j$                  }
t#        j&                  ||
fddit)        |«      ¤Ž} ||j                  f||	|dœ|¤Žj                  }| j
                  dk(  r|j                  n|}| j+                  |j,                  |«      }|j                  dk(  r0|j/                  «       }|j1                  |||j2                  ¬«      }|S | j+                  |j4                  |j                  «      }|j1                  |||¬«      }| j7                  ||«      S )	Nrz   éÿÿÿÿrÀ   Úis_grouped_kernelF)r|   r}   rW   rø   r  )rÃ   rW   rõ   rœ   r…   r[   r   rÖ   rÍ   r†   Úreshapers   r{   rX   rT   rU   r   r   Úfloat_dtype_mappingÚgenerate_shared_aggregatorr*   r‚   r^   Úsqueezerû   r‰   r_   rò   )rd   r  Úengine_kwargsÚfunc_kwargsr  rW   rR   rÓ   r|   r}   Údtype_mappingÚ
aggregatorr�   r^   rñ   r_   s                   re   Ú_numba_applyzBaseWindow._numba_applyo  sú  € ð ×1Ñ1Ó3ˆð ×ÑÐ+ð ×Òà×+Ñ+ð 	ð
 ×Ñ × 2Ñ 2Ó3ˆØ�9‰9˜Š>Ø—%‘%ˆCØ×"Ñ" 3§<¡<£>Ó2ˆØ�;‰;˜!ÒØ—^‘^ B¨Ó*ˆFØ#×5Ñ5Ü˜6“{Ø#Ø—;‘;Ø—;‘;Ø—‘ð 6ó 
‰
ˆˆsð 	×!Ñ! %¨¬c°&«kÔ:ô
 !×4Ñ4ˆÜ×8Ñ8ØØñ
ð $ð
ô   Ó.ñ	
ˆ
ñ Ø�H‰Hð
Ø! s¸ñ
ØGRñ
ç
‰!ð 	ð "ŸY™Y¨!š^�—’°ˆØ×)Ñ)¨#¯)©)°VÓ<ˆØ�8‰8�qŠ=Ø—^‘^Ó%ˆFØ×"Ñ" 6°¸S¿X¹XÐ"ÓFˆCØˆJà×/Ñ/°·±¸V¿X¹XÓFˆGØ×"Ñ" 6°ÀÐ"ÓHˆCØ×'Ñ'¨¨SÓ1Ð1rg   c                ón   — t        | |||¬«      j                  «       }|€| j                  |d||¬«      S |S )N©Úargsr£   F)Úrawr5  r£   )r   ÚaggÚapply©rd   r  r5  r£   r�   s        re   Ú	aggregatezBaseWindow.aggregate¢  s<   € Ü% d¨D°tÀFÔK×OÑOÓQˆØˆ>Ø—:‘:˜d¨°DÀ�:ÓHÐHØˆrg   )	NNFNr   NNNrn   )rR   rF   rW   ú
int | NonerX   úbool | NonerY   ú
str | Noner[   r?   rS   zstr | Index | NonerT   r=  rU   r;  r\   ÚstrÚreturnÚNone©r?  r@  )r|   r%  r}   r%  r~   rù   r?  r@  r®   )r^   r%   r�   zSized | Noner?  r%   )r‰   r>  rŠ   r  r?  r@  )rR   r@   r?  r@   ©F©rR   r@   rŠ   r  r?  r@   )r¢   r>  )r?  r>  )r?  r<   )rÓ   r>   r?  r%  )r�   rD   rR   rD   r?  r@  )r?  znpt.NDArray[np.int64] | None)rñ   rD   rR   rD   r?  rD   )r?  r    )rü   úCallable[..., ArrayLike]r‰   r=  r?  rE   )rü   rD  r‰   r>  rŠ   r  r?  úDataFrame | Series)NF)rü   rD  r‰   r=  rŠ   r  r?  rE  ©r  rE  r  úDataFrame | Series | Noner  r<  r  zFCallable[[DataFrame | Series, DataFrame | Series], DataFrame | Series]rŠ   r  r?  rE  ©F© )r  úCallable[..., Any]r‰   r>  rŠ   r  r  útuple[Any, ...])r  rJ  r.  údict[str, bool] | None)"rv   Ú
__module__Ú__qualname__Ú__doc__rM   Ú__annotations__Ú	frozensetrN   rf   rc   r   r‚   r‹   r‘   rœ   r¥   r¬   r¯   r½   rÊ   rÖ   ræ   Úpropertyrí   rò   rÃ   rý   r  r  r  r&  r2  r:  r7  rI  rg   re   rK   rK   x   se  … ÙAà€K�ÓÙ&/£k€JÐ#Ó1Ø	ƒJð
 Ø"&Ø#Ø#ØØ!%Ø!ØØð+ð ñ+àð+ð  ð	+ð
 ð+ð ð+ð ð+ð ð+ð ð+ð ð+ð ð+ð 
ó+óZ)6ðVØðØ&0ðØ<?ðà	óô
óó(ôó"ó0
ò)ó
2óó$ó0)ð2 òó ðóó;ð NRðDØ 8ðDØ@JðDà	óDð0 #ð	3-à2ð3-ð ð3-ð ð	3-ð
 
ó3-ðp  Ø"ð	.à2ð.ð ð.ð ð	.ð
 
ó.ð4Pà"ðPð )ðPð ð	Pð
 UðPð ðPð 
óPð6 #Ø&(ð;Oà ð;Oð ð;Oð ð	;Oð
 $ó;Oð@ 15ð12à ð12ð .ó12òfð �Crg   rK   c                  óÀ   ‡ — e Zd ZU dZded<   ded<   dgZded<   dd	œ	 	 	 	 	 	 	 dˆ fd
„Z	 	 d	 	 	 	 	 	 	 	 	 dˆ fd„Z	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zddˆ fd„Z	dˆ fd„	Z
ˆ xZS )ÚBaseWindowGroupbyz3
    Provide the groupby windowing facilities.
    rH   Ú_grouperr  Ú	_as_indexrL   rM   T)rV  c               ó  •— ddl m} t        ||«      st        d«      ‚|| _        || _        |j                  | j                  j                  d¬«      }|j                  d«      �t        d«      ‚t        ‰| �,  |g|¢­i |¤Ž y )Nr   rG   zMust pass a BaseGrouper object.r  ©r_   ÚerrorsrU   z step not implemented for groupby)Úpandas.core.groupby.opsrH   r`   ra   rU  rV  ÚdroprÜ   Úgetrˆ   Úsuperrf   )rd   rR   rU  rV  r5  r£   rH   Ú	__class__s          €re   rf   zBaseWindowGroupby.__init__´  s|   ø€ õ 	8ä˜( KÔ0ÜÐ>Ó?Ð?Ø ˆŒØ"ˆŒð �h‰h˜tŸ}™}×2Ñ2¸8ˆhÓDˆà�:‰:�fÓÐ)Ü%Ð&HÓIÐIÜ‰Ñ˜Ð.˜tÒ. vÓ.rg   c           	     óö  •— t        ‰| �  ||||fi |¤Ž}| j                  j                  }g |j                  ¢}t        j
                  | j                  j                  «      }	|	|z   }
| j                  j                  D �cg c](  }|| j                  j                  j                  vs|€|‘Œ* }}t        |«      t        |	«      k7  r|j                  |d¬«      }| j                  j                  }t        j
                  | j                  j                  «      }| j                  j                  j                  «       }|rt        j                  t        |«      «      }n%t        j                   g t        j"                  ¬«      }|D �cg c]  }|j%                  |«      ‘Œ }}|�|j%                  |«      }t'        |t(        «      st)        j*                  |g«      }|j-                  t        |j                  «      «       |j-                  t        |j                  «      «       t)        |||
d¬«      }||_        | j.                  s-|j1                  t        t3        t        |	«      «      «      ¬«      }|S c c}w c c}w )Nr  rX  ré   F©rÜ   rÿ   )Úlevel)r]  r&  rR   r^   rÜ   r•   rU  r{   r[  ÚcodesÚlevelsÚindicesrÓ   rÎ   ÚconcatenateÚlistÚarrayÚintpr  r`   r&   Úfrom_arraysÚextendrV  Úreset_indexÚrange)rd   r  r‰   rŠ   r  r£   r�   Úgrouped_object_indexÚgrouped_index_nameÚgroupby_keysÚresult_index_namesr    Údrop_columnsrb  rc  Úgroup_indicesrÇ   ÚcÚidxÚresult_indexr^  s                       €re   r&  zBaseWindowGroupby._applyË  s  ø€ ô ‘‘ØØØØñ	
ð
 ñ
ˆð  $Ÿx™xŸ~™~ÐØ:Ð3×9Ñ9Ð:ÐÜ—y‘y §¡×!4Ñ!4Ó5ˆØ)Ð,>Ñ>Ðð —}‘}×*Ñ*ö
àØ˜$Ÿ(™(Ÿ.™.×.Ñ.Ñ.°#°+ò ð
ˆð 
ô ˆ|Ó¤ LÓ 1Ò1à—[‘[¨¸h�[ÓGˆFà—‘×#Ñ#ˆÜ—‘˜4Ÿ=™=×/Ñ/Ó0ˆàŸ™×-Ñ-×4Ñ4Ó6ˆÙÜ—n‘n¤T¨-Ó%8Ó9‰Gä—h‘h˜r¬¯©Ô1ˆGØ*/Ö0 Q�—‘˜•Ð0ˆÐ0ð  Ð+Ø&×+Ñ+¨GÓ4ˆCÜ˜c¤:Ô.Ü ×,Ñ,¨c¨UÓ3�Ø�L‰Lœ˜cŸi™i›Ô)Ø�M‰Mœ$˜sŸz™zÓ*Ô+ä!Ø�EÐ!3Àeô
ˆð $ˆŒØ�~Š~Ø×'Ñ'¬d´5¼¸\Ó9JÓ3KÓ.LÐ'ÓMˆFØˆùòI
ùò$ 1s   Á?-I1ÆI6c                óÔ  •‡— |j                  | j                  j                  d¬«      }t        ‰| �  |‰|||«      }‰��It        ˆfd„| j                  j                  j                  «       D «       «      �st        |«      }t        | j                  j                  j                  «       D �cg c],  }|j                  |«      j                  |j                  «      ‘Œ. c}«      }d„ | j                  j                  j                  «       D «       }	g }
g }t        t        t!        |	Ž «      D ][  }t#        j$                  t#        j&                  |«      |«      }t)        |«      \  }}|
j+                  |«       |j+                  |«       Œ] nï| j                  j,                  }
| j                  j.                  }| j                  j                  j                  «       }|rt#        j0                  t        |«      «      }n%t#        j&                  g t"        j2                  ¬«      }|j4                  dk(  rd}nt        |j6                  «      }|
D �cg c]'  }t#        j$                  |j                  |«      |«      ‘Œ) }
}t9        |j                  t:        «      r^t        |j                  j,                  «      }t        |j                  j.                  «      }t        |j                  j                  «      }n5t)        |j                  «      \  }}|g}|g}|j                  j<                  g}|
|z   }||z   }| j                  j                  |z   }t;        |||d¬«      }||_        |S c c}w c c}w )	r  r  rX  c              3  óL   •K  — | ]  }t        |«      t        ‰«      k(  –— Œ y ­wr®   )r{   )rµ   Úgroupr  s     €re   r·   z4BaseWindowGroupby._apply_pairwise.<locals>.<genexpr>  s#   øè ø€ ò )
Ø).ŒC�‹Jœ#˜e›*Õ$ñ)
ùs   ƒ!$c              3  óF   K  — | ]  }t        j                  |«      –— Œ y ­wr®   )ÚcomÚmaybe_make_list)rµ   Úpairs     re   r·   z4BaseWindowGroupby._apply_pairwise.<locals>.<genexpr>&  s    è ø€ ò Ø.2”×#Ñ# D×)ñùs   ‚!ré   rz   Fr`  )r[  rU  rÜ   r]  r  r!  rd  rÓ   r{   r)   r  r—   r^   ru   Úmaprf  rÄ   rÎ   Úrepeatrg  r   r  rb  rc  re  rh  r†   r_   r`   r&   r‰   )rd   r  r  r  r  rŠ   r�   Úold_result_lenÚ
gb_indicesÚgb_pairsÚgroupby_codesÚgroupby_levelsÚgb_level_pairÚlabelsrb  rc  rr  rÇ   Ú	repeat_byrs  Úresult_codesÚresult_levelsÚresult_namesÚ	idx_codesÚ
idx_levelsru  r^  s     `                       €re   r  z!BaseWindowGroupby._apply_pairwise  sÎ  ù€ ð —‘ T§]¡]×%8Ñ%8À�ÓJˆÜ‘Ñ(¨°¸À$ÈÓUˆàÑ¤Só )
Ø26·-±-×2GÑ2G×2NÑ2NÓ2Pô)
õ &
ô ! ›[ˆNÜð '+§m¡m×&;Ñ&;×&BÑ&BÓ&Döà"ð —K‘K 
Ó+×3Ñ3°F·L±LÕAòóˆFñØ6:·m±m×6KÑ6K×6PÑ6PÓ6RôˆHð ˆMØˆNä!$¤T¬3°¨>Ó!:ò .�ÜŸ™¤2§8¡8¨MÓ#:¸NÓK�Ü )¨&Ó 1‘��vØ×$Ñ$ UÔ+Ø×%Ñ% fÕ-ñ	.ð !ŸM™M×/Ñ/ˆMð "Ÿ]™]×1Ñ1ˆNà ŸM™M×1Ñ1×8Ñ8Ó:ˆMÙÜŸ.™.¬¨mÓ)<Ó=‘äŸ(™( 2¬R¯W©WÔ5�à�{‰{˜aÒØ‘	ä §¡Ó/�	à?LöØ:;”—	‘	˜!Ÿ&™& ›/¨9Õ5ðˆMð ô �f—l‘l¤JÔ/Ü §¡× 2Ñ 2Ó3ˆLÜ  §¡×!4Ñ!4Ó5ˆMÜ §¡× 2Ñ 2Ó3‰Lä$-¨f¯l©lÓ$;Ñ!ˆI�zØ%˜;ˆLØ'˜LˆMØ"ŸL™L×-Ñ-Ð.ˆLð % |Ñ3ˆØ&¨Ñ6ˆØ—}‘}×*Ñ*¨\Ñ9ˆä!Ø˜<¨|Èeô
ˆð $ˆŒØˆùòuùòFs   Â-1M É
,M%c                ó  •— |j                   snt        j                  t        | j                  j
                  j                  «       «      «      j                  t        j                  «      }|j                  |«      }t        ‰| �-  ||«      S )r“   )ÚemptyrÎ   re  rf  rU  rd  rÓ   r™   rì   r  r]  rœ   )rd   rR   rŠ   Úgroupby_orderr^  s       €re   rœ   zBaseWindowGroupby._create_data\  sf   ø€ ð �yŠyÜŸN™N¬4°·±×0EÑ0E×0LÑ0LÓ0NÓ+OÓP×WÑWÜ—‘óˆMð —(‘(˜=Ó)ˆCÜ‰wÑ# C¨Ó6Ð6rg   c                óŠ   •— | j                   �%| j                  j                  | j                  «      }t        ‰| �  |||¬«      S )N)r¡   )rS   rR   Ú	set_indexrO   r]  r¥   )rd   r    r†   r¡   r^  s       €re   r¥   zBaseWindowGroupby._gotitemj  s>   ø€ ð �7‰7Ðà—X‘X×'Ñ'¨¯©Ó1ˆFÜ‰wÑ  T°&ÐÓ9Ð9rg   )rR   rE  rU  rH   rV  r  r?  r@  rH  )
r  rJ  r‰   r>  rŠ   r  r  rK  r?  rE  rF  rB  rC  r®   )rv   rM  rN  rO  rP  rM   rf   r&  r  rœ   r¥   Ú__classcell__©r^  s   @re   rT  rT  «  sæ   ø… ñð ÓØƒOØ(˜\€K�Ó)ð ñ/àð/ð ð	/ð
 ð/ð 
õ/ð6 #Ø&(ð;à ð;ð ð;ð ð	;ð
 $ð;ð 
õ;ðzRà"ðRð )ðRð ð	Rð
 UðRð ðRð 
õRöh7÷:ñ :rg   rT  c                  ón  ‡ — e Zd ZdZg d¢Zˆ fd„Zd#d„Z	 	 d$	 	 	 	 	 	 	 d%d„Z ee	d    e
d«       e
d«      d	d
¬«      d„ «       ZeZ ee ed«      ee ed«      e ed«      e ed«       e
d«      ddd¬«      d&d'd„«       Z ee ed«      ee ed«      e ed«      e ed«       e
d«      ddd¬«      d&d'd„«       Z ee ed«      ee ed«      e ed«      e ed«       e
d«      ddd¬«      d(d)d„«       Z ee ed«      ee ed«      e ed«      e ed«       e
d«      dd d!¬«      d(d)d"„«       Zˆ xZS )*ÚWindowaä  
    Provide rolling window calculations.

    Parameters
    ----------
    window : int, timedelta, str, offset, or BaseIndexer subclass
        Size of the moving window.

        If an integer, the fixed number of observations used for
        each window.

        If a timedelta, str, or offset, the time period of each window. Each
        window will be a variable sized based on the observations included in
        the time-period. This is only valid for datetimelike indexes.
        To learn more about the offsets & frequency strings, please see `this link
        <https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases>`__.

        If a BaseIndexer subclass, the window boundaries
        based on the defined ``get_window_bounds`` method. Additional rolling
        keyword arguments, namely ``min_periods``, ``center``, ``closed`` and
        ``step`` will be passed to ``get_window_bounds``.

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

        For a window that is specified by an offset, ``min_periods`` will default to 1.

        For a window that is specified by an integer, ``min_periods`` will default
        to the size of the window.

    center : bool, default False
        If False, set the window labels as the right edge of the window index.

        If True, set the window labels as the center of the window index.

    win_type : str, default None
        If ``None``, all points are evenly weighted.

        If a string, it must be a valid `scipy.signal window function
        <https://docs.scipy.org/doc/scipy/reference/signal.windows.html#module-scipy.signal.windows>`__.

        Certain Scipy window types require additional parameters to be passed
        in the aggregation function. The additional parameters must match
        the keywords specified in the Scipy window type method signature.

    on : str, optional
        For a DataFrame, a column label or Index level on which
        to calculate the rolling window, rather than the DataFrame's index.

        Provided integer column is ignored and excluded from result since
        an integer index is not used to calculate the rolling window.

    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.

        .. deprecated:: 2.1.0

            The axis keyword is deprecated. For ``axis=1``,
            transpose the DataFrame first instead.

    closed : str, default None
        If ``'right'``, the first point in the window is excluded from calculations.

        If ``'left'``, the last point in the window is excluded from calculations.

        If ``'both'``, the no points in the window are excluded from calculations.

        If ``'neither'``, the first and last points in the window are excluded
        from calculations.

        Default ``None`` (``'right'``).

    step : int, default None

        .. versionadded:: 1.5.0

        Evaluate the window at every ``step`` result, equivalent to slicing as
        ``[::step]``. ``window`` must be an integer. Using a step argument other
        than None or 1 will produce a result with a different shape than the input.

    method : str {'single', 'table'}, default 'single'

        .. versionadded:: 1.3.0

        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.

    Returns
    -------
    pandas.api.typing.Window or pandas.api.typing.Rolling
        An instance of Window is returned if ``win_type`` is passed. Otherwise,
        an instance of Rolling is returned.

    See Also
    --------
    expanding : Provides expanding transformations.
    ewm : Provides exponential weighted functions.

    Notes
    -----
    See :ref:`Windowing Operations <window.generic>` 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

    **window**

    Rolling sum with a window length of 2 observations.

    >>> df.rolling(2).sum()
         B
    0  NaN
    1  1.0
    2  3.0
    3  NaN
    4  NaN

    Rolling sum with a window span of 2 seconds.

    >>> df_time = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]},
    ...                        index=[pd.Timestamp('20130101 09:00:00'),
    ...                               pd.Timestamp('20130101 09:00:02'),
    ...                               pd.Timestamp('20130101 09:00:03'),
    ...                               pd.Timestamp('20130101 09:00:05'),
    ...                               pd.Timestamp('20130101 09:00:06')])

    >>> df_time
                           B
    2013-01-01 09:00:00  0.0
    2013-01-01 09:00:02  1.0
    2013-01-01 09:00:03  2.0
    2013-01-01 09:00:05  NaN
    2013-01-01 09:00:06  4.0

    >>> df_time.rolling('2s').sum()
                           B
    2013-01-01 09:00:00  0.0
    2013-01-01 09:00:02  1.0
    2013-01-01 09:00:03  3.0
    2013-01-01 09:00:05  NaN
    2013-01-01 09:00:06  4.0

    Rolling sum with forward looking windows with 2 observations.

    >>> indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=2)
    >>> df.rolling(window=indexer, min_periods=1).sum()
         B
    0  1.0
    1  3.0
    2  2.0
    3  4.0
    4  4.0

    **min_periods**

    Rolling sum with a window length of 2 observations, but only needs a minimum of 1
    observation to calculate a value.

    >>> df.rolling(2, min_periods=1).sum()
         B
    0  0.0
    1  1.0
    2  3.0
    3  2.0
    4  4.0

    **center**

    Rolling sum with the result assigned to the center of the window index.

    >>> df.rolling(3, min_periods=1, center=True).sum()
         B
    0  1.0
    1  3.0
    2  3.0
    3  6.0
    4  4.0

    >>> df.rolling(3, min_periods=1, center=False).sum()
         B
    0  0.0
    1  1.0
    2  3.0
    3  3.0
    4  6.0

    **step**

    Rolling sum with a window length of 2 observations, minimum of 1 observation to
    calculate a value, and a step of 2.

    >>> df.rolling(2, min_periods=1, step=2).sum()
         B
    0  0.0
    2  3.0
    4  4.0

    **win_type**

    Rolling sum with a window length of 2, using the Scipy ``'gaussian'``
    window type. ``std`` is required in the aggregation function.

    >>> df.rolling(2, win_type='gaussian').sum(std=3)
              B
    0       NaN
    1  0.986207
    2  2.958621
    3       NaN
    4       NaN

    **on**

    Rolling sum with a window length of 2 days.

    >>> df = pd.DataFrame({
    ...     'A': [pd.to_datetime('2020-01-01'),
    ...           pd.to_datetime('2020-01-01'),
    ...           pd.to_datetime('2020-01-02'),],
    ...     'B': [1, 2, 3], },
    ...     index=pd.date_range('2020', periods=3))

    >>> df
                        A  B
    2020-01-01 2020-01-01  1
    2020-01-02 2020-01-01  2
    2020-01-03 2020-01-02  3

    >>> df.rolling('2D', on='A').sum()
                        A    B
    2020-01-01 2020-01-01  1.0
    2020-01-02 2020-01-01  3.0
    2020-01-03 2020-01-02  6.0
    ©	rV   rW   rX   rY   r[   rS   rT   rU   r\   c                óü  •— t         ‰| �  «        t        | j                  t        «      st        d| j                  › �«      ‚t        dd¬«      }t        || j                  d «      | _        | j                  €t        d| j                  › �«      ‚t        | j                  t        «      rt        d«      ‚t        | j                  «      r| j                  dk  rt        d«      ‚| j                  dk7  rt        d	«      ‚y )
NzInvalid win_type zscipy.signal.windowsz,Scipy is required to generate window weight.)Úextraz6BaseIndexer subclasses not implemented with win_types.r   ú&window must be an integer 0 or greaterrn   z+'single' is the only supported method type.)r]  rc   r`   rY   r>  ra   r   rž   Ú_scipy_weight_generatorrV   r    rˆ   r   r\   )rd   Úsignalr^  s     €re   rc   zWindow._validate|  sÜ   ø€ Ü‰ÑÔä˜$Ÿ-™-¬Ô-ÜÐ0°·±°Ð@ÓAÐAÜ+Ø"Ð*Xô
ˆô (/¨v°t·}±}ÀdÓ'KˆÔ$Ø×'Ñ'Ð/ÜÐ0°·±°Ð@ÓAÐAä�d—k‘k¤;Ô/Ü%ØHóð ô ˜$Ÿ+™+Ô&¨$¯+©+¸ª/ÜÐEÓFÐFà�;‰;˜(Ò"Ü%Ð&SÓTÐTð #rg   c                ól   — |dkD  r.t        |d«      g}t        j                  |t        |«         «      }|S )zT
        Center the result in the window for weighted rolling aggregations.
        r   N)rÆ   rÎ   r•   Útuple)rd   r�   ÚoffsetÚlead_indexers       re   Ú_center_windowzWindow._center_window’  s7   € ð �AŠ:Ü! &¨$Ó/Ð0ˆLÜ—W‘W˜V¤E¨,Ó$7Ñ8Ó9ˆFØˆrg   c                óÚ   ‡ ‡‡‡—  ‰ j                   ‰ j                  fi |¤ŽŠ‰ j                  rt        ‰«      dz
  dz  ndŠdˆˆˆ ˆfd„}‰ j	                  |||«      dd‰ j
                  …   S )a+  
        Rolling with weights statistical measure using supplied function.

        Designed to be used with passed-in Cython array-based functions.

        Parameters
        ----------
        func : callable function to apply
        name : str,
        numeric_only : bool, default False
            Whether to only operate on bool, int, and float columns
        numba_args : tuple
            unused
        **kwargs
            additional arguments for scipy windows if necessary

        Returns
        -------
        y : type of input
        rz   r”   r   c                ó  •— | j                   dk(  r| j                  «       S ˆˆˆˆfd„}t        j                  d¬«      5  t        j                   || «      «      }d d d «       ‰j
                  r‰j                  ‰«      }S # 1 sw Y   Œ)xY w)Nr   c                óÞ   •— t        j                  t         j                  g‰z  «      }t        j                  | |f«      }  ‰| ‰‰j                  �‰j                  «      S t        ‰«      «      S r®   )rÎ   rg  rÏ   re  rW   r{   )r  Úadditional_nansr  r�  rd   rV   s     €€€€re   r  z5Window._apply.<locals>.homogeneous_func.<locals>.calcÃ  sk   ø€ Ü"$§(¡(¬B¯F©F¨8°fÑ+<Ó"=�Ü—N‘N A Ð#7Ó8�ÙØØØ(,×(8Ñ(8Ð(D�D×$Ñ$óð ô KNÈfË+óð rg   r  r   )r"  r•   rÎ   r#  ÚasarrayrX   rŸ  )rÓ   r  r�   r  r�  rd   rV   s      €€€€re   rü   z'Window._apply.<locals>.homogeneous_func½  sw   ø€ ð �{‰{˜aÒØ—{‘{“}Ð$÷ô —‘ Ô*ñ 2äŸ™¡D¨£LÓ1�÷2ð �{Š{Ø×,Ñ,¨V°VÓ<�àˆM÷2ð 2ús   ¿BÂBNr$  )r™  rV   rX   r{   r  rU   )	rd   r  r‰   rŠ   r  r£   rü   r�  rV   s	   ``     @@re   r&  zWindow._apply›  sv   û€ ð: .�×-Ñ-Ø�K‰Kñ
Ø!ñ
ˆð ,0¯;ª;”#�f“+ ‘/ aÒ'¸Aˆ÷	ð 	ð0 ×%Ñ%Ð&6¸¸lÓKÙˆt�y‰yˆLñ
ð 	
rg   r:  z£
        See Also
        --------
        pandas.DataFrame.aggregate : Similar DataFrame method.
        pandas.Series.aggregate : Similar Series method.
        at  
        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.rolling(2, win_type="boxcar").agg("mean")
             A    B    C
        0  NaN  NaN  NaN
        1  1.5  4.5  7.5
        2  2.5  5.5  8.5
        zSeries/DataFrameÚ ©Úsee_alsoÚexamplesÚklassr[   c                óT   — t        | |||¬«      j                  «       }|€ || «      }|S )Nr4  )r   r7  r9  s        re   r:  zWindow.aggregateÙ  s1   € ô@ & d¨D°tÀFÔK×OÑOÓQˆØˆ>á˜$“ZˆFàˆrg   Ú
ParametersÚReturnsúSee AlsoÚExamplesaï          >>> ser = pd.Series([0, 1, 5, 2, 8])

        To get an instance of :class:`~pandas.core.window.rolling.Window` we need
        to pass the parameter `win_type`.

        >>> type(ser.rolling(2, win_type='gaussian'))
        <class 'pandas.core.window.rolling.Window'>

        In order to use the `SciPy` Gaussian window we need to provide the parameters
        `M` and `std`. The parameter `M` corresponds to 2 in our example.
        We pass the second parameter `std` as a parameter of the following method
        (`sum` in this case):

        >>> ser.rolling(2, win_type='gaussian').sum(std=3)
        0         NaN
        1    0.986207
        2    5.917243
        3    6.903450
        4    9.862071
        dtype: float64
        Úrollingzweighted window sumÚsum©Úwindow_methodÚaggregation_descriptionÚ
agg_methodc                óN   — t         j                  } | j                  |fd|dœ|¤ŽS )Nr°  ©r‰   rŠ   )Úwindow_aggregationsÚroll_weighted_sumr&  ©rd   rŠ   r£   Úwindow_funcs       re   r°  z
Window.sum  s=   € ôN *×;Ñ;ˆð ˆt�{‰{Øð
àØ%ñ
ð ñ	
ð 	
rg   aº          >>> ser = pd.Series([0, 1, 5, 2, 8])

        To get an instance of :class:`~pandas.core.window.rolling.Window` we need
        to pass the parameter `win_type`.

        >>> type(ser.rolling(2, win_type='gaussian'))
        <class 'pandas.core.window.rolling.Window'>

        In order to use the `SciPy` Gaussian window we need to provide the parameters
        `M` and `std`. The parameter `M` corresponds to 2 in our example.
        We pass the second parameter `std` as a parameter of the following method:

        >>> ser.rolling(2, win_type='gaussian').mean(std=3)
        0    NaN
        1    0.5
        2    3.0
        3    3.5
        4    5.0
        dtype: float64
        zweighted window meanÚmeanc                óN   — t         j                  } | j                  |fd|dœ|¤ŽS )Nr»  r¶  )r·  Úroll_weighted_meanr&  r¹  s       re   r»  zWindow.mean4  s=   € ôL *×<Ñ<ˆð ˆt�{‰{Øð
àØ%ñ
ð ñ	
ð 	
rg   a¾          >>> ser = pd.Series([0, 1, 5, 2, 8])

        To get an instance of :class:`~pandas.core.window.rolling.Window` we need
        to pass the parameter `win_type`.

        >>> type(ser.rolling(2, win_type='gaussian'))
        <class 'pandas.core.window.rolling.Window'>

        In order to use the `SciPy` Gaussian window we need to provide the parameters
        `M` and `std`. The parameter `M` corresponds to 2 in our example.
        We pass the second parameter `std` as a parameter of the following method:

        >>> ser.rolling(2, win_type='gaussian').var(std=3)
        0     NaN
        1     0.5
        2     8.0
        3     4.5
        4    18.0
        dtype: float64
        zweighted window varianceÚvarc                óˆ   — t        t        j                  |¬«      }|j                  dd «        | j                  |fd|dœ|¤ŽS )N©Úddofr‰   r¾  r¶  )r   r·  Úroll_weighted_varÚpopr&  )rd   rÁ  rŠ   r£   rº  s        re   r¾  z
Window.vare  sD   € ôL Ô1×CÑCÈ$ÔOˆØ�
‰
�6˜4Ô Øˆt�{‰{˜;ÐX¨UÀÑXÐQWÑXÐXrg   aÒ          >>> ser = pd.Series([0, 1, 5, 2, 8])

        To get an instance of :class:`~pandas.core.window.rolling.Window` we need
        to pass the parameter `win_type`.

        >>> type(ser.rolling(2, win_type='gaussian'))
        <class 'pandas.core.window.rolling.Window'>

        In order to use the `SciPy` Gaussian window we need to provide the parameters
        `M` and `std`. The parameter `M` corresponds to 2 in our example.
        We pass the second parameter `std` as a parameter of the following method:

        >>> ser.rolling(2, win_type='gaussian').std(std=3)
        0         NaN
        1    0.707107
        2    2.828427
        3    2.121320
        4    4.242641
        dtype: float64
        z"weighted window standard deviationÚstdc           	     ó@   — t         | j                  d|d|dœ|¤Ž«      S )NrÄ  )rÁ  r‰   rŠ   rI  )r-   r¾  )rd   rÁ  rŠ   r£   s       re   rÄ  z
Window.std�  s,   € ôL ØˆD�H‰HÐP˜$ U¸ÑPÈÑPó
ð 	
rg   )r�   r%  r�  rù   r?  r%  rH  )r  z,Callable[[np.ndarray, int, int], np.ndarray]r‰   r>  rŠ   r  r  rK  rB  ©rŠ   r  ©rz   F©rÁ  rù   rŠ   r  )rv   rM  rN  rO  rM   rc   rŸ  r&  r   r.   r   r:  r7  r3   r/   r0   r1   r4   r5   r°  r»  r¾  rÄ  r‘  r’  s   @re   r”  r”  t  s,  ø„ ñyòv
€KôUó,ð #Ø&(ð<
à:ð<
ð ð<
ð ð	<
ð
 $ó<
ñ| 	Ø�[Ñ!Ùðó
ñ ðó
ð$ !Øô;ñ>ó?ð>ð €CáØÙ˜lÓ+ØØÙ˜iÓ(ØÙ˜jÓ)ØÙ˜jÓ)Ùðó	
ð0  Ø 5ØôI%óL

óM%ðL

ñ 	ØÙ˜lÓ+ØØÙ˜iÓ(ØÙ˜jÓ)ØÙ˜jÓ)Ùðó	
ð.  Ø 6ØôG$óJ

óK$ðJ

ñ 	ØÙ˜lÓ+ØØÙ˜iÓ(ØÙ˜jÓ)ØÙ˜jÓ)Ùðó	
ð.  Ø :ØôG$óJYóK$ðJYñ
 	ØÙ˜lÓ+ØØÙ˜iÓ(ØÙ˜jÓ)ØÙ˜jÓ)Ùðó	
ð.  Ø DØôG$óJ
óK$ôJ
rg   r”  c                  ó´  — e Zd Zddd„Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 d	 	 	 	 	 dd„Z	 	 	 d	 	 	 	 	 dd„Z	 	 	 d	 	 	 	 	 dd„Z	 	 	 d	 	 	 	 	 dd„Z		 	 	 d	 	 	 	 	 dd	„Z
	 	 	 	 d	 	 	 	 	 	 	 dd
„Z	 	 	 	 d	 	 	 	 	 	 	 dd„Zddd„Zddd„Zddd„Z	 	 d	 	 	 	 	 dd„Z	 	 	 	 d 	 	 	 	 	 	 	 d!d„Z	 	 	 	 d"	 	 	 	 	 	 	 d#d„Z	 	 	 	 d"	 	 	 	 	 	 	 d#d„Zy)$ÚRollingAndExpandingMixinc                óJ   — t         j                  }| j                  |d|¬«      S )Nr÷   r¶  )r·  Úroll_sumr&  ©rd   rŠ   rº  s      re   r÷   zRollingAndExpandingMixin.count»  s"   € Ü)×2Ñ2ˆØ�{‰{˜;¨WÀ<ˆ{ÓPÐPrg   Nc                ó~  — |€d}|€i }t        |«      st        d«      ‚d}t        |«      rN|du rt        d«      ‚|}| j                  dk(  rt	        |fi t        ||«      ¤Ž}nHt        |fi t        ||«      ¤Ž}n1|dv r"|�t        d«      ‚| j                  ||||«      }nt        d«      ‚| j                  |d	|¬
«      S )NrI  z'raw parameter must be `True` or `False`Fz.raw must be `True` when using the numba enginern   )ÚcythonNz+cython engine does not accept engine_kwargsz)engine must be either 'numba' or 'cython'r8  )r‰   r  )	r   ra   r+   r\   r9   r*   r:   Ú_generate_cython_apply_funcr&  )	rd   r  r6  Úenginer.  r5  r£   r  Ú
apply_funcs	            re   r8  zRollingAndExpandingMixin.apply¿  sô   € ð ˆ<ØˆDØˆ>ØˆFä�sŒ|ÜÐFÓGÐGà&(ˆ
Ü˜6Ô"Ø�e‰|Ü Ð!QÓRÐRØˆJØ�{‰{˜hÒ&Ü6ØñÜ-¨m¸VÓDñ‘
ô 7ØñÜ-¨m¸VÓDñ‘
ð Ð'Ñ'ØÐ(Ü Ð!NÓOÐOØ×9Ñ9¸$ÀÈÈTÓR‰JäÐHÓIÐIà�{‰{ØØØ!ð ó 
ð 	
rg   c                óf   ‡ ‡‡— ddl mŠ t        t        j                  ||||¬«      Š|fˆˆ ˆfd„	}|S )Nr   rØ   )r5  r£   r6  Úfunctionc                óH   •— |s ‰| ‰j                   d¬«      }  ‰| |||«      S )NF)r^   r•   )rO   )rÓ   Úbeginr}   rW   r6  rE   rd   rº  s        €€€re   rÒ  zHRollingAndExpandingMixin._generate_cython_apply_func.<locals>.apply_funcû  s)   ø€ Ùá ¨d¯h©h¸UÔC�Ù˜v u¨c°;Ó?Ð?rg   )rÚ   rE   r   r·  Ú
roll_apply)rd   r5  r£   r6  rÔ  rÒ  rE   rº  s   `     @@re   rÐ  z4RollingAndExpandingMixin._generate_cython_apply_funcê  s;   ú€ õ 	"äÜ×*Ñ*ØØØØô
ˆð =@÷ 	@ð Ðrg   c                ó
  — t        |«      rU| j                  dk(  r.t        t        j                  «      }| j                  |d||¬«      S ddlm} | j                  ||«      S t        j                  }| j                  |d|¬«      S )Nrm   T©r6  rÑ  r.  r   )Úsliding_sumr°  r¶  )r+   r\   r8   rÎ   Únansumr8  Úpandas.core._numba.kernelsrÚ  r2  r·  rÌ  r&  )rd   rŠ   rÑ  r.  r  rÚ  rº  s          re   r°  zRollingAndExpandingMixin.sum  s�   € ô ˜6Ô"Ø�{‰{˜gÒ%Ü>¼r¿y¹yÓI�Ø—z‘zØØØ!Ø"/ð	 "ó ð õ Cà×(Ñ(¨°mÓDÐDÜ)×2Ñ2ˆØ�{‰{˜;¨UÀˆ{ÓNÐNrg   c                ó  — t        |«      rW| j                  dk(  r.t        t        j                  «      }| j                  |d||¬«      S ddlm} | j                  ||d¬«      S t        j                  }| j                  |d|¬«      S )	Nrm   TrÙ  r   ©Úsliding_min_max©Úis_maxÚmaxr¶  )r+   r\   r8   rÎ   Únanmaxr8  rÜ  rß  r2  r·  Úroll_maxr&  ©rd   rŠ   rÑ  r.  r  rß  rº  s          re   râ  zRollingAndExpandingMixin.max  s‡   € ô ˜6Ô"Ø�{‰{˜gÒ%Ü>¼r¿y¹yÓI�Ø—z‘zØØØ!Ø"/ð	 "ó ð õ Gà×(Ñ(¨¸-ÐPTÐ(ÓUÐUÜ)×2Ñ2ˆØ�{‰{˜;¨UÀˆ{ÓNÐNrg   c                ó  — t        |«      rW| j                  dk(  r.t        t        j                  «      }| j                  |d||¬«      S ddlm} | j                  ||d¬«      S t        j                  }| j                  |d|¬	«      S )
Nrm   TrÙ  r   rÞ  Frà  Úminr¶  )r+   r\   r8   rÎ   Únanminr8  rÜ  rß  r2  r·  Úroll_minr&  rå  s          re   rç  zRollingAndExpandingMixin.min/  s‡   € ô ˜6Ô"Ø�{‰{˜gÒ%Ü>¼r¿y¹yÓI�Ø—z‘zØØØ!Ø"/ð	 "ó ð õ Gà×(Ñ(¨¸-ÐPUÐ(ÓVÐVÜ)×2Ñ2ˆØ�{‰{˜;¨UÀˆ{ÓNÐNrg   c                ó
  — t        |«      rU| j                  dk(  r.t        t        j                  «      }| j                  |d||¬«      S ddlm} | j                  ||«      S t        j                  }| j                  |d|¬«      S )Nrm   TrÙ  r   )Úsliding_meanr»  r¶  )r+   r\   r8   rÎ   Únanmeanr8  rÜ  rë  r2  r·  Ú	roll_meanr&  )rd   rŠ   rÑ  r.  r  rë  rº  s          re   r»  zRollingAndExpandingMixin.meanE  s�   € ô ˜6Ô"Ø�{‰{˜gÒ%Ü>¼r¿z¹zÓJ�Ø—z‘zØØØ!Ø"/ð	 "ó ð õ Dà×(Ñ(¨°}ÓEÐEÜ)×3Ñ3ˆØ�{‰{˜;¨VÀ,ˆ{ÓOÐOrg   c                óü   — t        |«      rN| j                  dk(  rt        t        j                  «      }nt        j                  }| j                  |d||¬«      S t        j                  }| j                  |d|¬«      S )Nrm   TrÙ  Úmedianr¶  )	r+   r\   r8   rÎ   Ú	nanmedianr8  r·  Úroll_median_cr&  )rd   rŠ   rÑ  r.  r  rº  s         re   rï  zRollingAndExpandingMixin.median[  ss   € ô ˜6Ô"Ø�{‰{˜gÒ%Ü>¼r¿|¹|ÓL‘ä—|‘|�à—:‘:ØØØØ+ð	 ó ð ô *×7Ñ7ˆØ�{‰{˜;¨XÀLˆ{ÓQÐQrg   c                óê   ‡‡— t        |«      r=| j                  dk(  rt        d«      ‚ddlm} t        | j                  ||‰¬«      «      S t        j                  Šˆˆfd„}| j                  |d|¬«      S )	Nrm   z%std not supported with method='table'r   ©Úsliding_varrÀ  c           	     ó0   •— t         ‰| |||‰¬«      «      S )NrÀ  )r-   )rÓ   rÖ  r}   rW   rÁ  rº  s       €€re   Ú
zsqrt_funcz0RollingAndExpandingMixin.std.<locals>.zsqrt_func  s   ø€ Ü™ V¨U°C¸È4ÔPÓQÐQrg   rÄ  r¶  )
r+   r\   rˆ   rÜ  rô  r-   r2  r·  Úroll_varr&  )rd   rÁ  rŠ   rÑ  r.  rô  rö  rº  s    `     @re   rÄ  zRollingAndExpandingMixin.stdp  sw   ù€ ô ˜6Ô"Ø�{‰{˜gÒ%Ü)Ð*QÓRÐRÝ>ä˜×*Ñ*¨;¸ÈDÐ*ÓQÓRÐRÜ)×2Ñ2ˆõ	Rð �{‰{ØØØ%ð ó 
ð 	
rg   c                óÞ   — t        |«      r4| j                  dk(  rt        d«      ‚ddlm} | j                  |||¬«      S t        t        j                  |¬«      }| j                  |d|¬«      S )Nrm   z%var not supported with method='table'r   ró  rÀ  r¾  r¶  )
r+   r\   rˆ   rÜ  rô  r2  r   r·  r÷  r&  )rd   rÁ  rŠ   rÑ  r.  rô  rº  s          re   r¾  zRollingAndExpandingMixin.varˆ  sq   € ô ˜6Ô"Ø�{‰{˜gÒ%Ü)Ð*QÓRÐRÝ>à×$Ñ$ [°-ÀdÐ$ÓKÐKÜÔ1×:Ñ:ÀÔFˆØ�{‰{ØØØ%ð ó 
ð 	
rg   c                óJ   — t         j                  }| j                  |d|¬«      S )NÚskewr¶  )r·  Ú	roll_skewr&  rÍ  s      re   rú  zRollingAndExpandingMixin.skewœ  ó,   € Ü)×3Ñ3ˆØ�{‰{ØØØ%ð ó 
ð 	
rg   c                ó”   — | j                  d|«       | j                  |¬«      | j                  |¬«      |z
  j                  d«      z  S ©NÚsem©rŠ   ç      à?©r‹   rÄ  r÷   Úpow©rd   rÁ  rŠ   s      re   rÿ  zRollingAndExpandingMixin.sem¤  sF   € à×#Ñ# E¨<Ô8Ø�x‰x \ˆxÓ2Ø�J‰J LˆJÓ1°DÑ8ß
‰#ˆc‹(ñð 	rg   c                óJ   — t         j                  }| j                  |d|¬«      S )NÚkurtr¶  )r·  Ú	roll_kurtr&  rÍ  s      re   r  zRollingAndExpandingMixin.kurt«  rü  rg   c                óº   — |dk(  rt         j                  }n2|dk(  rt         j                  }nt        t         j                  ||¬«      }| j                  |d|¬«      S )Ng      ð?g        )ÚquantileÚinterpolationr	  r¶  )r·  rä  ré  r   Úroll_quantiler&  )rd   Úqr
  rŠ   rº  s        re   r	  z!RollingAndExpandingMixin.quantile³  sX   € ð �Š8Ü-×6Ñ6‰KØ�#ŠXÜ-×6Ñ6‰Kä!Ü#×1Ñ1ØØ+ôˆKð �{‰{˜;¨ZÀlˆ{ÓSÐSrg   c                ód   — t        t        j                  |||¬«      }| j                  |d|¬«      S )N)r\   Ú	ascendingÚ
percentileÚrankr¶  )r   r·  Ú	roll_rankr&  )rd   r\   r  ÚpctrŠ   rº  s         re   r  zRollingAndExpandingMixin.rankÆ  s7   € ô Ü×)Ñ)ØØØô	
ˆð �{‰{˜;¨VÀ,ˆ{ÓOÐOrg   c                ó²   ‡ ‡‡— ‰ j                   �t        d«      ‚‰ j                  d|«       ddlmŠ ˆˆˆ fd„}‰ j                  ‰ j                  ||||«      S )Nzstep not implemented for covÚcovr   rØ   c                ó8  •— ‰j                  | «      }‰j                  |«      }‰j                  «       }‰j                  �‰j                  n|j                  }|j	                  t        |«      |‰j                  ‰j                  ‰j                  ¬«      \  }}‰j                  ||t        |«      «       t        j                  d¬«      5  t        j                  ||z  |||«      }t        j                  ||||«      }	t        j                  ||||«      }
t        j                  t        ||z   «      j!                  t        j"                  «      ||d«      }||	|
z  z
  ||‰z
  z  z  }d d d «        ‰| j$                  | j&                  d¬«      S # 1 sw Y   Œ)xY w)NrÀ   r  r   r   FrÙ   )rÖ   rÃ   rW   rõ   rs   r{   rX   rT   rU   r   rÎ   r#  r·  rí  rÌ  r   r™   r–   r^   r‰   )r  ÚyÚx_arrayÚy_arrayr  rW   r|   r}   Úmean_x_yÚmean_xÚmean_yÚ	count_x_yr�   rE   rÁ  rd   s                €€€re   Úcov_funcz.RollingAndExpandingMixin.cov.<locals>.cov_funcã  sˆ  ø€ Ø×'Ñ'¨Ó*ˆGØ×'Ñ'¨Ó*ˆGØ!×5Ñ5Ó7ˆNð ×#Ñ#Ð/ð × Ò à#×/Ñ/ð ð
 (×9Ñ9Ü˜w›<Ø'Ø—{‘{Ø—{‘{Ø—Y‘Yð :ó ‰JˆE�3ð ×%Ñ% e¨S´#°g³,Ô?ä—‘ Ô*ñ 	YÜ.×8Ñ8Ø˜gÑ% u¨c°;ó�ô -×6Ñ6°wÀÀsÈKÓX�Ü,×6Ñ6°wÀÀsÈKÓX�Ü/×8Ñ8Ü˜' GÑ+Ó,×3Ñ3´B·J±JÓ?ÀÈÈQó�	ð # V¨f¡_Ñ4¸ÀiÐRVÑFVÑ9WÑX�÷	Yñ ˜&¨¯©°a·f±fÀ5ÔIÐI÷	Yð 	Yús   Ã
BFÆF©rU   rˆ   r‹   rÚ   rE   r  r…   )rd   r  r  rÁ  rŠ   r  rE   s   `  `  @re   r  zRollingAndExpandingMixin.covÖ  sZ   ú€ ð �9‰9Ð Ü%Ð&DÓEÐEØ×#Ñ# E¨<Ô8å!ö	Jð< ×#Ñ#Ø×Ñ  x°¸<ó
ð 	
rg   c                ó²   ‡ ‡‡— ‰ j                   �t        d«      ‚‰ j                  d|«       ddlmŠ ˆˆˆ fd„}‰ j                  ‰ j                  ||||«      S )Nzstep not implemented for corrÚcorrr   rØ   c                ó¶  •— ‰j                  | «      }‰j                  |«      }‰j                  «       }‰j                  �‰j                  n|j                  }|j	                  t        |«      |‰j                  ‰j                  ‰j                  ¬«      \  }}‰j                  ||t        |«      «       t        j                  d¬«      5  t        j                  ||z  |||«      }t        j                  ||||«      }	t        j                  ||||«      }
t        j                  t        ||z   «      j!                  t        j"                  «      ||d«      }t        j$                  ||||‰«      }t        j$                  ||||‰«      }||	|
z  z
  ||‰z
  z  z  }||z  dz  }||z  }d d d «        ‰| j&                  | j(                  d¬«      S # 1 sw Y   Œ)xY w)NrÀ   r  r   r   r  FrÙ   )rÖ   rÃ   rW   rõ   rs   r{   rX   rT   rU   r   rÎ   r#  r·  rí  rÌ  r   r™   r–   r÷  r^   r‰   )r  r  r  r  r  rW   r|   r}   r  r  r  r  Úx_varÚy_varÚ	numeratorÚdenominatorr�   rE   rÁ  rd   s                    €€€re   Ú	corr_funcz0RollingAndExpandingMixin.corr.<locals>.corr_func  sÚ  ø€ Ø×'Ñ'¨Ó*ˆGØ×'Ñ'¨Ó*ˆGØ!×5Ñ5Ó7ˆNð ×#Ñ#Ð/ð × Ò à#×/Ñ/ð ð
 (×9Ñ9Ü˜w›<Ø'Ø—{‘{Ø—{‘{Ø—Y‘Yð :ó ‰JˆE�3ð ×%Ñ% e¨S´#°g³,Ô?ä—‘ Ô*ñ 1Ü.×8Ñ8Ø˜gÑ% u¨c°;ó�ô -×6Ñ6°wÀÀsÈKÓX�Ü,×6Ñ6°wÀÀsÈKÓX�Ü/×8Ñ8Ü˜' GÑ+Ó,×3Ñ3´B·J±JÓ?ÀÈÈQó�	ô ,×4Ñ4Ø˜U C¨°dó�ô ,×4Ñ4Ø˜U C¨°dó�ð &¨°©Ñ7Ø ¨TÑ!1Ñ2ñ�	ð  % u™}°Ñ4�Ø" [Ñ0�÷'1ñ( ˜&¨¯©°a·f±fÀ5ÔIÐI÷)1ð 1ús   Ã
CGÇGr  )rd   r  r  rÁ  rŠ   r&  rE   s   `  `  @re   r   zRollingAndExpandingMixin.corr  s[   ú€ ð �9‰9Ð Ü%Ð&EÓFÐFØ×#Ñ# F¨LÔ9å!ö&	JðP ×#Ñ#Ø×Ñ  x°¸Ló
ð 	
rg   rB  rÆ  ©FNNNN©r  rJ  r6  r  rÑ  ú!Literal['cython', 'numba'] | Noner.  rL  r5  ztuple[Any, ...] | Noner£   zdict[str, Any] | None)
r5  rK  r£   zdict[str, Any]r6  zbool | np.bool_rÔ  rJ  r?  z?Callable[[np.ndarray, np.ndarray, np.ndarray, int], np.ndarray]©FNN©rŠ   r  rÑ  r)  r.  rL  ©rz   FNN©rÁ  rù   rŠ   r  rÑ  r)  r.  rL  rÇ  rÈ  ©ÚlinearF©r  Úfloatr
  rA   rŠ   r  ©ÚaverageTFF©r\   rB   r  r  r  r  rŠ   r  ©NNrz   F©r  rG  r  r<  rÁ  rù   rŠ   r  )rv   rM  rN  r÷   r8  rÐ  r°  râ  rç  r»  rï  rÄ  r¾  rú  rÿ  r  r	  r  r  r   rI  rg   re   rÊ  rÊ  º  sÞ  „ ôQð Ø48Ø04Ø'+Ø(,ð)
à ð)
ð ð)
ð 2ð	)
ð
 .ð)
ð %ð)
ð &ó)
ðVàðð ðð ð	ð
 %ðð 
Ióð6 #Ø48Ø04ð	OàðOð 2ðOð .ó	Oð0 #Ø48Ø04ð	OàðOð 2ðOð .ó	Oð0 #Ø48Ø04ð	OàðOð 2ðOð .ó	Oð0 #Ø48Ø04ð	PàðPð 2ðPð .ó	Pð0 #Ø48Ø04ð	RàðRð 2ðRð .ó	Rð. Ø"Ø48Ø04ð
àð
ð ð
ð 2ð	
ð
 .ó
ð4 Ø"Ø48Ø04ð
àð
ð ð
ð 2ð	
ð
 .ó
ô(
ôô
ð 08Ø"ð	TàðTð -ðTð ó	Tð* %.ØØØ"ðPà!ðPð ðPð ð	Pð
 óPð$ ,0Ø $ØØ"ð-
à(ð-
ð ð-
ð ð	-
ð
 ó-
ðb ,0Ø $ØØ"ð7
à(ð7
ð ð7
ð ð	7
ð
 ô7
rg   rÊ  c                  óÔ  ‡ — e Zd ZU g d¢Zded<   ˆ fd„Zdgd„Zdhd„Z ee	d    e
d«       e
d	«      d
d¬«      ˆ fd„«       ZeZ ee ed«      e ed«      e ed«      e ed«       e
d«      j%                  ddd«      ddd¬«      didjˆ fd„«       Z ee ed«      e ed«      e ed«      e ed«       e
d«      ddd¬«      	 	 	 	 	 dk	 	 	 	 	 	 	 	 	 	 	 dlˆ fd„«       Z ee ed«      e e«        ed«      e ed«      e ed«      e ed«       e
d «      j%                  ddd«      dd!d!¬«      	 	 	 dm	 	 	 	 	 dnˆ fd"„«       Z ee ed«      e e«        ed«      e ed«      e ed«      e ed«       e
d#«      dd$d%¬«      	 diddd&œ	 	 	 	 	 dnˆ fd'„«       Z ee ed«      e e«        ed«      e ed«      e ed«      e ed«       e
d(«      j%                  ddd«      dd)d*¬«      	 	 	 dm	 	 	 	 	 dnˆ fd+„«       Z ee ed«      e e«        ed«      e ed«      e ed«      e ed«       e
d,«      j%                  ddd«      dd-d-¬«      	 	 	 dm	 	 	 	 	 dnˆ fd.„«       Z ee ed«      e e«        ed«      e ed«      e ed«      e ed«       e
d/«      j%                  ddd«      dd0d0¬«      	 	 	 dm	 	 	 	 	 dnˆ fd1„«       Z ee ed«       e
d2«      j%                  ddd«      e ed3«       ed«      e ed«      d4e ed«       e
d5«      j%                  ddd«       ed«       e
d6«      j%                  ddd«      dd7d8¬«      	 	 	 	 do	 	 	 	 	 	 	 dpˆ fd9„«       Z ee ed«       e
d2«      j%                  ddd«      e ed3«       ed«      e ed«      d:e ed«       e
d;«      j%                  ddd«       ed«       e
d<«      j%                  ddd«      dd=d>¬«      	 	 	 	 do	 	 	 	 	 	 	 dpˆ fd?„«       Z ee ed«      e ed«      e ed«      d@e ed«       e
dA«       ed«       e
dB«      ddCdD¬«      didjˆ fdE„«       Z ee ed«       e
d2«      j%                  ddd«      e ed«      e ed«      e ed«      dF ed«       e
dG«      j%                  ddd«      ddHdI¬«      dqdrdJ„«       Z  ee ed«      e ed«      e ed«      dKe ed«      dL ed«       e
dM«      j%                  ddd«      ddNdO¬«      didjˆ fdP„«       Z! ee ed«       e
dQ«      j%                  ddd«      e ed«      e ed«      e ed«       e
dR«      j%                  ddd«      ddSdS¬«       e"dSdT¬U«      	 	 ds	 	 	 	 	 dtˆ fdV„«       «       Z# eedW ed«       e
dX«      j%                  ddd«      e ed«      e ed«      e ed«       e
dY«      j%                  ddd«      ddZdZ¬«      	 	 	 	 du	 	 	 	 	 	 	 dvˆ fd[„«       Z$ ee ed«       e
d\«      j%                  ddd«      e ed«      e ed«      e ed«       e
d]«      dd^d_¬«      	 	 	 	 dw	 	 	 	 	 	 	 dxˆ fd`„«       Z% ee ed«       e
d\«      j%                  ddd«      e ed«      e ed«       e
da«      j%                  ddd«      e ed«       e
db«      j%                  ddd«       ed«       e
dc«      j%                  ddd«      dddde¬«      	 	 	 	 dw	 	 	 	 	 	 	 dxˆ fdf„«       Z&ˆ xZ'S )yÚRollingr•  rL   rM   c                ó°  •— t         ‰| �  «        | j                  j                  smt	        | j
                  t        t        t        f«      sHt	        | j
                  j                  t        «      �r[| j
                  j                  j                  dv �r8t	        | j                  t        t        t        f«      �r| j!                  «        	 t#        | j                  «      }t	        | j
                  t        «      rT|j(                  | j
                  j*                  j(                  | j
                  j*                  j,                  z  z  | _        nS	 t1        | j
                  j                  «      }t3        |j(                  «      j5                  |«      j6                  | _        | j8                  €d| _        | j:                  �t=        d«      ‚y t	        | j                  t>        «      ry tA        | j                  «      r| j                  dk  rt'        d«      ‚y # t$        t&        f$ r}t'        d| j                  › d�«      |‚d }~ww xY w# t$        $ r d}Y Œçw xY w)	Nrè   zpassed window z, is not compatible with a datetimelike indexÚnsrz   z,step is not supported with frequency windowsr   r˜  )!r]  rc   rR   r�  r`   rO   r$   r(   r'   r‡   r   rë   rV   r>  r   r   Ú _validate_datetimelike_monotonicr   ro   ra   ÚnanosÚfreqÚnr]   rI   r   Úas_unitÚ_valuerW   rU   rˆ   r    r   )rd   r=  rÔ   Úunitr^  s       €re   rc   zRolling._validateL  sÎ  ø€ Ü‰ÑÔð �H‰H�NŠNÜ˜$Ÿ(™(¤]´NÄKÐ$PÔQÜ˜4Ÿ8™8Ÿ>™>¬:Õ6¸4¿8¹8¿>¹>×;NÑ;NÐRVÒ;VÜ˜Ÿ™¤s¬J¼	Ð&BÕCØ×1Ñ1Ô3ðÜ  §¡Ó-�ô ˜$Ÿ(™(¤KÔ0ð %)§J¡JØ—H‘H—M‘M×'Ñ'¨$¯(©(¯-©-¯/©/Ñ9ñ%�Õ!ð Ü(¨¯©¯©Ó8�Dô %.¨d¯j©jÓ$9×$AÑ$AÀ$Ó$G×$NÑ$N�Ô!ð ×ÑÐ'Ø#$�Ô à�y‰yÐ$Ü)ØBóð ð %ô
 ˜Ÿ™¤[Ô1àÜ˜DŸK™KÔ(¨D¯K©K¸!ªOÜÐEÓFÐFð -<øô? œzÐ*ò Ü Ø$ T§[¡[ Mð 2;ð ;óð ðûðûô !ò  à’Dð ús*   Ã
H ÅI ÈIÈ%H?È?IÉIÉIc                óÐ   — | j                   j                  r| j                  d«       | j                   j                  s)| j                   j                  s| j                  d«       yyy)z€
        Validate self._on is monotonic (increasing or decreasing) and has
        no NaT values for frequency windows.
        úvalues must not have NaTzvalues must be monotonicN)rO   ÚhasnansÚ_raise_monotonic_errorÚis_monotonic_increasingÚis_monotonic_decreasingr°   s    re   r;  z(Rolling._validate_datetimelike_monotonic|  sQ   € ð
 �8‰8×ÒØ×'Ñ'Ð(BÔCØ—‘×0Ò0°D·H±H×4TÒ4TØ×'Ñ'Ð(BÕCð 5UÐ0rg   c                óf   — | j                   }|€| j                  dk(  rd}nd}t        |› d|› �«      ‚)Nr   r^   Úcolumnú )rS   r[   ra   )rd   ÚmsgrS   s      re   rE  zRolling._raise_monotonic_error†  s:   € Ø�W‰WˆØˆ:Ø�y‰y˜AŠ~Ø‘à�Ü˜B˜4˜q  ˜Ó'Ð'rg   r:  z³
        See Also
        --------
        pandas.Series.rolling : Calling object with Series data.
        pandas.DataFrame.rolling : Calling object with DataFrame data.
        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.rolling(2).sum()
             A     B     C
        0  NaN   NaN   NaN
        1  3.0   9.0  15.0
        2  5.0  11.0  17.0

        >>> df.rolling(2).agg({"A": "sum", "B": "min"})
             A    B
        0  NaN  NaN
        1  3.0  4.0
        2  5.0  5.0
        zSeries/Dataframer¥  r¦  c                ó*   •— t        ‰| �  |g|¢­i |¤ŽS r®   )r]  r:  )rd   r  r5  r£   r^  s       €re   r:  zRolling.aggregate�  s    ø€ ôL ‰wÑ  Ð7¨Ò7°Ñ7Ð7rg   r«  r¬  r­  r®  a«  
        >>> s = pd.Series([2, 3, np.nan, 10])
        >>> s.rolling(2).count()
        0    NaN
        1    2.0
        2    1.0
        3    1.0
        dtype: float64
        >>> s.rolling(3).count()
        0    NaN
        1    NaN
        2    2.0
        3    2.0
        dtype: float64
        >>> s.rolling(4).count()
        0    NaN
        1    NaN
        2    NaN
        3    3.0
        dtype: float64
        ú
rz   r¯  zcount of non NaN observationsr÷   r±  c                ó"   •— t         ‰| �  |«      S r®   )r]  r÷   ©rd   rŠ   r^  s     €re   r÷   zRolling.count¹  s   ø€ ôJ ‰w‰}˜\Ó*Ð*rg   zË        >>> ser = pd.Series([1, 6, 5, 4])
        >>> ser.rolling(2).apply(lambda s: s.sum() - s.min())
        0    NaN
        1    6.0
        2    6.0
        3    5.0
        dtype: float64
        zcustom aggregation functionr8  Nc                ó.   •— t         ‰| �  ||||||¬«      S )N)r6  rÑ  r.  r5  r£   )r]  r8  )rd   r  r6  rÑ  r.  r5  r£   r^  s          €re   r8  zRolling.applyà  s.   ø€ ôB ‰w‰}ØØØØ'ØØð ó 
ð 	
rg   ÚNotesa]  
        >>> s = pd.Series([1, 2, 3, 4, 5])
        >>> s
        0    1
        1    2
        2    3
        3    4
        4    5
        dtype: int64

        >>> s.rolling(3).sum()
        0     NaN
        1     NaN
        2     6.0
        3     9.0
        4    12.0
        dtype: float64

        >>> s.rolling(3, center=True).sum()
        0     NaN
        1     6.0
        2     9.0
        3    12.0
        4     NaN
        dtype: float64

        For DataFrame, each sum is computed column-wise.

        >>> df = pd.DataFrame({{"A": s, "B": s ** 2}})
        >>> df
           A   B
        0  1   1
        1  2   4
        2  3   9
        3  4  16
        4  5  25

        >>> df.rolling(3).sum()
              A     B
        0   NaN   NaN
        1   NaN   NaN
        2   6.0  14.0
        3   9.0  29.0
        4  12.0  50.0
        r°  c                ó(   •— t         ‰| �  |||¬«      S ©N)rŠ   rÑ  r.  )r]  r°  ©rd   rŠ   rÑ  r.  r^  s       €re   r°  zRolling.sum
  s%   ø€ ôJ ‰w‰{Ø%ØØ'ð ó 
ð 	
rg   z®        >>> ser = pd.Series([1, 2, 3, 4])
        >>> ser.rolling(2).max()
        0    NaN
        1    2.0
        2    3.0
        3    4.0
        dtype: float64
        Úmaximumrâ  )rÑ  r.  c               ó(   •— t         ‰| �  |||¬«      S rS  )r]  râ  )rd   rŠ   rÑ  r.  r5  r£   r^  s         €re   râ  zRolling.maxU  s%   ø€ ôF ‰w‰{Ø%ØØ'ð ó 
ð 	
rg   zþ
        Performing a rolling minimum with a window size of 3.

        >>> s = pd.Series([4, 3, 5, 2, 6])
        >>> s.rolling(3).min()
        0    NaN
        1    NaN
        2    3.0
        3    2.0
        4    2.0
        dtype: float64
        Úminimumrç  c                ó(   •— t         ‰| �  |||¬«      S rS  )r]  rç  rT  s       €re   rç  zRolling.min~  s%   ø€ ôH ‰w‰{Ø%ØØ'ð ó 
ð 	
rg   a¢  
        The below examples will show rolling mean calculations with window sizes of
        two and three, respectively.

        >>> s = pd.Series([1, 2, 3, 4])
        >>> s.rolling(2).mean()
        0    NaN
        1    1.5
        2    2.5
        3    3.5
        dtype: float64

        >>> s.rolling(3).mean()
        0    NaN
        1    NaN
        2    2.0
        3    3.0
        dtype: float64
        r»  c                ó(   •— t         ‰| �  |||¬«      S rS  )r]  r»  rT  s       €re   r»  zRolling.mean¨  s%   ø€ ôV ‰w‰|Ø%ØØ'ð ó 
ð 	
rg   a  
        Compute the rolling median of a series with a window size of 3.

        >>> s = pd.Series([0, 1, 2, 3, 4])
        >>> s.rolling(3).median()
        0    NaN
        1    NaN
        2    1.0
        3    2.0
        4    3.0
        dtype: float64
        rï  c                ó(   •— t         ‰| �  |||¬«      S rS  )r]  rï  rT  s       €re   rï  zRolling.medianÙ  s%   ø€ ôH ‰w‰~Ø%ØØ'ð ó 
ð 	
rg   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.rolling(3).std()
        0         NaN
        1         NaN
        2    0.577350
        3    1.000000
        4    1.000000
        5    1.154701
        6    0.000000
        dtype: float64
        zstandard deviationrÄ  c                ó*   •— t         ‰| �  ||||¬«      S ©N)rÁ  rŠ   rÑ  r.  )r]  rÄ  ©rd   rÁ  rŠ   rÑ  r.  r^  s        €re   rÄ  zRolling.std	  ó(   ø€ ôh ‰w‰{ØØ%ØØ'ð	 ó 
ð 	
rg   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.rolling(3).var()
        0         NaN
        1         NaN
        2    0.333333
        3    1.000000
        4    1.000000
        5    1.333333
        6    0.000000
        dtype: float64
        Úvariancer¾  c                ó*   •— t         ‰| �  ||||¬«      S r\  )r]  r¾  r]  s        €re   r¾  zRolling.var>	  r^  rg   z:scipy.stats.skew : Third moment of a probability density.
zV
        A minimum of three periods is required for the rolling calculation.

        zÿ        >>> ser = pd.Series([1, 5, 2, 7, 15, 6])
        >>> ser.rolling(3).skew().round(6)
        0         NaN
        1         NaN
        2    1.293343
        3   -0.585583
        4    0.670284
        5    1.652317
        dtype: float64
        zunbiased skewnessrú  c                ó$   •— t         ‰| �  |¬«      S ©Nr   )r]  rú  rO  s     €re   rú  zRolling.skewy	  s   ø€ ôD ‰w‰|¨ˆ|Ó6Ð6rg   z:A minimum of one period is required for the calculation.

zÎ
        >>> s = pd.Series([0, 1, 2, 3])
        >>> s.rolling(2, min_periods=1).sem()
        0         NaN
        1    0.707107
        2    0.707107
        3    0.707107
        dtype: float64
        zstandard error of meanrÿ  c                ó’   — | j                  d|«       | j                  |¬«      | j                  |«      |z
  j                  d«      z  S rþ  r  r  s      re   rÿ  zRolling.sem�	  sG   € ðF 	×#Ñ# E¨<Ô8Ø�x‰x \ˆxÓ2Ø�J‰J�|Ó$ tÑ+ß
‰#ˆc‹(ñð 	rg   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[1:], bias=False):.6f}}")
        3.999946
        >>> s = pd.Series(arr)
        >>> s.rolling(4).kurt()
        0         NaN
        1         NaN
        2         NaN
        3   -1.200000
        4    3.999946
        dtype: float64
        z,Fisher's definition of kurtosis without biasr  c                ó$   •— t         ‰| �  |¬«      S rb  )r]  r  rO  s     €re   r  zRolling.kurtÅ	  s   ø€ ôL ‰w‰|¨ˆ|Ó6Ð6rg   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.
        ae  
        >>> s = pd.Series([1, 2, 3, 4])
        >>> s.rolling(2).quantile(.4, interpolation='lower')
        0    NaN
        1    1.0
        2    2.0
        3    3.0
        dtype: float64

        >>> s.rolling(2).quantile(.4, interpolation='midpoint')
        0    NaN
        1    1.5
        2    2.5
        3    3.5
        dtype: float64
        r	  r  )Úold_arg_nameÚnew_arg_namec                ó(   •— t         ‰| �  |||¬«      S )N)r  r
  rŠ   )r]  r	  )rd   r  r
  rŠ   r^  s       €re   r	  zRolling.quantileí	  s&   ø€ ôr ‰wÑØØ'Ø%ð  ó 
ð 	
rg   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.rolling(3).rank()
        0    NaN
        1    NaN
        2    2.0
        3    2.0
        4    3.0
        5    1.5
        dtype: float64

        >>> s.rolling(3).rank(method="max")
        0    NaN
        1    NaN
        2    2.0
        3    2.0
        4    3.0
        5    2.0
        dtype: float64

        >>> s.rolling(3).rank(method="min")
        0    NaN
        1    NaN
        2    2.0
        3    2.0
        4    3.0
        5    1.0
        dtype: float64
        r  c                ó*   •— t         ‰| �  ||||¬«      S )N)r\   r  r  rŠ   )r]  r  )rd   r\   r  r  rŠ   r^  s        €re   r  zRolling.rank,
  s(   ø€ ôH ‰w‰|ØØØØ%ð	 ó 
ð 	
rg   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.
        zß        >>> ser1 = pd.Series([1, 2, 3, 4])
        >>> ser2 = pd.Series([1, 4, 5, 8])
        >>> ser1.rolling(2).cov(ser2)
        0    NaN
        1    1.5
        2    0.5
        3    1.5
        dtype: float64
        zsample covariancer  c                ó*   •— t         ‰| �  ||||¬«      S ©N)r  r  rÁ  rŠ   )r]  r  ©rd   r  r  rÁ  rŠ   r^  s        €re   r  zRolling.covw
  s(   ø€ ôb ‰w‰{ØØØØ%ð	 ó 
ð 	
rg   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.

        ax  
        The below example shows a rolling calculation with a window size of
        four matching the equivalent function call using :meth:`numpy.corrcoef`.

        >>> v1 = [3, 3, 3, 5, 8]
        >>> v2 = [3, 4, 4, 4, 8]
        >>> np.corrcoef(v1[:-1], v2[:-1])
        array([[1.        , 0.33333333],
               [0.33333333, 1.        ]])
        >>> np.corrcoef(v1[1:], v2[1:])
        array([[1.       , 0.9169493],
               [0.9169493, 1.       ]])
        >>> s1 = pd.Series(v1)
        >>> s2 = pd.Series(v2)
        >>> s1.rolling(4).corr(s2)
        0         NaN
        1         NaN
        2         NaN
        3    0.333333
        4    0.916949
        dtype: float64

        The below example shows a similar rolling calculation on a
        DataFrame using the pairwise option.

        >>> matrix = np.array([[51., 35.],
        ...                    [49., 30.],
        ...                    [47., 32.],
        ...                    [46., 31.],
        ...                    [50., 36.]])
        >>> np.corrcoef(matrix[:-1, 0], matrix[:-1, 1])
        array([[1.       , 0.6263001],
               [0.6263001, 1.       ]])
        >>> np.corrcoef(matrix[1:, 0], matrix[1:, 1])
        array([[1.        , 0.55536811],
               [0.55536811, 1.        ]])
        >>> df = pd.DataFrame(matrix, columns=['X', 'Y'])
        >>> df
              X     Y
        0  51.0  35.0
        1  49.0  30.0
        2  47.0  32.0
        3  46.0  31.0
        4  50.0  36.0
        >>> df.rolling(4).corr(pairwise=True)
                    X         Y
        0 X       NaN       NaN
          Y       NaN       NaN
        1 X       NaN       NaN
          Y       NaN       NaN
        2 X       NaN       NaN
          Y       NaN       NaN
        3 X  1.000000  0.626300
          Y  0.626300  1.000000
        4 X  1.000000  0.555368
          Y  0.555368  1.000000
        Úcorrelationr   c                ó*   •— t         ‰| �  ||||¬«      S rj  )r]  r   rk  s        €re   r   zRolling.corr¯
  s(   ø€ ô| ‰w‰|ØØØØ%ð	 ó 
ð 	
rg   rA  )rK  r>  rB  rÆ  r'  r(  r*  r+  r,  r-  rÇ  rÈ  r.  r0  r2  r4  r5  r6  )(rv   rM  rN  rM   rP  rc   r;  rE  r   r.   r   r:  r7  r3   r/   r0   r4   r5   Úreplacer÷   r7   r8  r6   r2   r°  râ  rç  r»  rï  rÄ  r¾  rú  rÿ  r  r   r	  r  r  r   r‘  r’  s   @re   r8  r8  ?  sd  ø… ò
€K�ó 
ô.Gó`Dó(ñ 	Ø�[Ñ!Ùðó
ñ ðó
ð0 !ØôG$óJ8óK$ðJ8ð €CáØÙ˜lÓ+ØÙ˜iÓ(ØÙ˜jÓ)ØÙ˜jÓ)Ùðó	
÷, ‰'�$˜˜AÓ
ØØ ?ØôE#õH+óI#ðH+ñ 	ØÙ˜lÓ+ØÙ˜iÓ(ØÙ˜jÓ)ØÙ˜jÓ)Ùðó
	
ð  Ø =Øô-ð6 Ø48Ø04Ø'+Ø(,ð
à ð
ð ð
ð 2ð	
ð
 .ð
ð %ð
ð &ô
ó1ð0
ñ$ 	ØÙ˜lÓ+ØÙ#Ó%Ù˜iÓ(ØÙ˜jÓ)ØÙ˜gÓ&ØÙ˜jÓ)Ùð,ó.	
÷\ ‰'�$˜˜AÓ
ØØ %Øô{>ðB #Ø48Ø04ð	

àð

ð 2ð

ð .ô	

ó>ð~

ñ 	ØÙ˜lÓ+ØÙ#Ó%Ù˜iÓ(ØÙ˜jÓ)ØÙ˜gÓ&ØÙ˜jÓ)Ùðó
	
ð  Ø )Øô3ð: #ð
ð 59Ø04ñ
àð
ð 2ð	
ð
 .ô
ó7ð6
ñ 	ØÙ˜lÓ+ØÙ#Ó%Ù˜iÓ(ØÙ˜jÓ)ØÙ˜gÓ&ØÙ˜jÓ)Ùðó	
÷ ‰'�$˜˜AÓ
ØØ )Øô9ð@ #Ø48Ø04ð	

àð

ð 2ð

ð .ô	

ó=ð<

ñ 	ØÙ˜lÓ+ØÙ#Ó%Ù˜iÓ(ØÙ˜jÓ)ØÙ˜gÓ&ØÙ˜jÓ)Ùðó	
÷( ‰'�$˜˜AÓ
ØØ &ØôG$ðN #Ø48Ø04ð	

àð

ð 2ð

ð .ô	

óK$ðJ

ñ 	ØÙ˜lÓ+ØÙ#Ó%Ù˜iÓ(ØÙ˜jÓ)ØÙ˜gÓ&ØÙ˜jÓ)Ùðó	
÷ ‰'�$˜˜AÓ
ØØ (Øô9ð@ #Ø48Ø04ð	

àð

ð 2ð

ð .ô	

ó=ð<

ñ 	ØÙ˜lÓ+Ùðó	
÷ ‰'�$˜˜AÓ
ØÙ# EÓ*Ù˜iÓ(ØÙ˜jÓ)Ø:ØÙ˜gÓ&Ùðó	
÷ ‰'�$˜˜AÓ
Ù˜jÓ)Ùðó	
÷ ‰'�$˜˜AÓ
ØØ 4ØôW,ð^ Ø"Ø48Ø04ð
àð
ð ð
ð 2ð	
ð
 .ô
ó[,ðZ
ñ 	ØÙ˜lÓ+Ùðó	
÷ ‰'�$˜˜AÓ
ØÙ# EÓ*Ù˜iÓ(ØÙ˜jÓ)Ø:ØÙ˜gÓ&Ùðó	
÷ ‰'�$˜˜AÓ
Ù˜jÓ)Ùðó	
÷ ‰'�$˜˜AÓ
ØØ *ØôW,ð^ Ø"Ø48Ø04ð
àð
ð ð
ð 2ð	
ð
 .ô
ó[,ðZ
ñ 	ØÙ˜lÓ+ØÙ˜iÓ(ØÙ˜jÓ)ØEØÙ˜gÓ&Ùðó	
ñ
 	˜jÓ)Ùð
ó	
ð  Ø 3Øô? õB7óC ðB7ñ 	ØÙ˜lÓ+Ùðó	
÷ ‰'�$˜˜AÓ
ØÙ˜iÓ(ØÙ˜jÓ)ØÙ˜gÓ&ØFÙ˜jÓ)Ùðó
	
÷ ‰'�$˜˜AÓ
ØØ 8Øô? óBóC ðBñ 	ØÙ˜lÓ+ØÙ˜iÓ(ØÙ˜jÓ)Ø:ØÙ˜gÓ&ØHÙ˜jÓ)Ùðó	
÷( ‰'�$˜˜AÓ
ØØ NØôG$õJ7óK$ðJ7ñ 	ØÙ˜lÓ+Ùðó	
÷$ ‰'�$˜˜AÓ
ØÙ˜iÓ(ØÙ˜jÓ)ØÙ˜jÓ)Ùðó	
÷" ‰'�$˜˜AÓ
ØØ *Øôa1ñd  *¸3Ô?ð 08Ø"ð	

àð

ð -ð

ð ô	

ó @óe1ðf

ñ 	ØØ&Ù˜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Ó&Ùðó	
÷, ‰'�$˜˜AÓ
Ù˜jÓ)Ùð8ó:	
÷t ‰'�$˜˜AÓ
ØØ -Øôkvðr ,0Ø $ØØ"ð
à(ð
ð ð
ð ð	
ð
 ô
óovôn
rg   r8  c                  óP   — e Zd ZdZej
                  ej
                  z   Zdd„Zd„ Zy)ÚRollingGroupbyz3
    Provide a rolling groupby implementation.
    c                óÔ  — d}| j                   }t        | j                  t        «      rjt	        | j                  «      }| j                  j
                  j                  «       }t        |t        «      sJ ‚|j                  dd«       | j                  }n1| j                  �t        }| j                  }nt        }| j                  }t        ||| j                  j                  ||¬«      }|S )z“
        Return an indexer class that will compute the window start and end bounds

        Returns
        -------
        GroupbyIndexer
        Nrô   )rô   rõ   Úgroupby_indicesr  Úindexer_kwargs)rí   r`   rV   r    rp   Ú__dict__r•   ÚdictrÃ  r]   r#   r!   r"   rU  rd  )rd   rs  rô   Úrolling_indexerrV   r  s         re   rÃ   z"RollingGroupby._get_window_indexer?  sÈ   € ð 15ˆØ×'Ñ'ˆÜ�d—k‘k¤;Ô/Ü" 4§;¡;Ó/ˆOØ!Ÿ[™[×1Ñ1×6Ñ6Ó8ˆNÜ˜n¬dÔ3Ð3Ð3à×Ñ˜}¨dÔ3Ø—[‘[‰FØ×ÑÐ*Ü3ˆOð ×&Ñ&‰Fä0ˆOØ—[‘[ˆFÜ'Ø#ØØ ŸM™M×1Ñ1Ø*Ø)ô
ˆð Ðrg   c                ód  — | j                   j                  r| j                  d«       | j                  j                  j                  «       D ]b  }| j                   j                  |«      }|j                  rŒ+|j                  rŒ8| j                  €dn| j                  }t        d|› d|› d�«      ‚ y)zC
        Validate that each group in self._on is monotonic
        rC  Nr^   zEach group within z' must be monotonic. Sort the values in z first.)rO   rD  rE  rU  rd  rÓ   r  rF  rG  rS   ra   )rd   rr  Úgroup_onrS   s       re   r;  z/RollingGroupby._validate_datetimelike_monotonicb  s�   € ð
 �8‰8×ÒØ×'Ñ'Ð(BÔCØ!Ÿ]™]×2Ñ2×9Ñ9Ó;ò 		ˆMØ—x‘x—}‘} ]Ó3ˆHà×0Ó0°H×4TÓ4Tà $§¡ ‘W°T·W±W�Ü Ø(¨¨ð -*Ø*,¨¨Wð6óð ñ		rg   N)r?  r"   )	rv   rM  rN  rO  r8  rM   rT  rÃ   r;  rI  rg   re   rp  rp  8  s+   „ ñð ×%Ñ%Ð(9×(EÑ(EÑE€Kó!óFrg   rp  )yrO  Ú
__future__r   r•   Údatetimer   Ú	functoolsr   rq   Útextwrapr   Útypingr   r   r	   r
   ÚnumpyrÎ   Úpandas._libs.tslibsr   r   r   Ú pandas._libs.window.aggregationsÚ_libsrV   Úaggregationsr·  Úpandas.compat._optionalr   Úpandas.errorsr   Úpandas.util._decoratorsr   r   Úpandas.core.dtypes.commonr   r   r   r   r   Úpandas.core.dtypes.dtypesr   Úpandas.core.dtypes.genericr   r   Úpandas.core.dtypes.missingr   Úpandas.core._numbar   Úpandas.core.algorithmsr   Úpandas.core.applyr   Úpandas.core.arraysr   Úpandas.core.baser   Úpandas.core.commonÚcoreÚcommonrz  Úpandas.core.indexers.objectsr    r!   r"   r#   Úpandas.core.indexes.apir$   r%   r&   r'   r(   Úpandas.core.reshape.concatr)   Úpandas.core.util.numba_r*   r+   Úpandas.core.window.commonr,   r-   Úpandas.core.window.docr.   r/   r0   r1   r2   r3   r4   r5   r6   r7   Úpandas.core.window.numba_r8   r9   r:   Úcollections.abcr;   r<   r=   Úpandas._typingr>   r?   r@   rA   rB   rC   rÚ   rD   rE   Úpandas.core.genericrF   rZ  rH   Úpandas.core.arrays.datetimelikerI   rK   rT  r”  rÊ  r8  rp  rI  rg   re   ú<module>r�     sE  ðñõ #ã Ý Ý Û Ý ÷ó ó ÷ñ ÷
 ?Ó >Ý >Ý #÷÷
õ õ 1÷õ -å 'Ý ,Ý 2Ý -Ý +ß  Ð  ÷ó ÷õ õ .÷÷÷÷ ÷ ÷ñ ñ ÷ñ ÷÷ ÷õ ,Ý3å 9ôp�ô pôfF:˜
ô F:ôRC	
ˆZô C	
ôLB
˜zô B
ôJs
Ð&ô s
ðl —.‘.€„ô:Ð&¨õ :rg   