3
���hn � @ sF d Z ddlmZ ddlmZ ddlZddlmZ ddlm Z m
Z
mZmZm
Z
mZmZmZ ddlZddlmZmZ ddljjjZddlmZmZmZ dd lm Z dd
l!m"Z# ddl$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 dd
l2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z< ddl=j>j?Z@ddlAmBZB ddlCmDZDmEZEmFZF ddlGmHZHmIZI ddlJmKZKmLZLmMZMmNZNmOZO ddlPmQZQmRZRmSZSmTZT ddlUmVZV eWd�dd�ZXeWeeW eWeWeWeWd�dd�ZYe e d�dd�ZZG dd� de:e<e;�Z[G d d!� d!e[�Z\G d"d#� d#e[�Z]G d$d%� d%e]�Z^G d&d'� d'e^�Z_e\j e__ G d(d)� d)eKe_�Z`dS )*zc
Provide a generic structure to support window functions,
similar to how we have a Groupby object.
� )� timedelta)�partialN)�dedent)�Callable�Dict�List�Optional�Set�Tuple�Type�Union)�
BaseOffset� to_offset)�Axis�
FrameOrSeries�Scalar)�import_optional_dependency)�function)�Appender�Substitution�cache_readonly�doc)�ensure_float64�is_bool�is_float_dtype�
is_integer�is_integer_dtype�is_list_like� is_scalar�needs_i8_conversion)�ABCDataFrame�ABCDatetimeIndex�ABCPeriodIndex� ABCSeries�ABCTimedeltaIndex)� DataError�PandasObject�SelectionMixin�ShallowMixin)�
extract_array)�Index�
MultiIndex�ensure_index)�NUMBA_FUNC_CACHE�maybe_use_numba)�WindowGroupByMixin�
_doc_template�_flex_binary_moment�_shared_docs�zsqrt)�BaseIndexer�FixedWindowIndexer�GroupbyRollingIndexer�VariableWindowIndexer)�generate_numba_apply_func)�returnc C s t | �st| �} t| d d �S )z�
Calculate an offset necessary to have the window label to be centered.
Parameters
----------
window: ndarray or int
window weights or window
Returns
-------
int
� g @)r �len�int)�window� r> |