U
    c                     @  s   d Z ddlmZ ddlmZ ddlmZ ddlZddlZ	ddl
mZ ddlmZmZ ddlmZ dd
dZdd Zdd ZdddddZdS )z/Common utility functions for rolling operations    )annotations)defaultdict)castN)find_stack_level)ABCDataFrame	ABCSeries)
MultiIndexFc                   s  t tr,t tr,t\}}||S t trddlm   fdd}i t tr|dkrRkrttjD ].}j	d d |f j	d d |f |< q|S jj
stdjj
stdjdd	\}}t||\}}jj}|D ]0}	|	|kr|	|kr||	 ||	 |	< q |j|d
S q|dkrttttjD ]x}ttjD ]b}
|
|k rkr|
 | | |
< n2tj	d d |f j	d d |
f  | |
< qqrddlm jj}t|r<fddttjD dddj_jjdkrttj_t|tt| }fddtjjD }tjj|jg }tj||f|d_tjj}|d gtt|d  }| nHtttjtt|g_dd t|gjg _n$ tjjgg g gdjddj jj_j |jjj _S n*fddttjD |S nt!S d S )Nr   	DataFramec                   s.    | |j d}t|jdkr*|j|j |_|S )N)indexr   )r   lencolumns)dataZframe_templateresultr	    =/tmp/pip-unpacked-wheel-g7fro6k3/pandas/core/window/common.pydataframe_from_int_dict   s    z3flex_binary_moment.<locals>.dataframe_from_int_dictFz'arg1' columns are not uniquez'arg2' columns are not uniqueouter)join)r   r   T)concatc                   s2   g | ]*  fd dt tjD ddqS )c                   s   g | ]}  | qS r   r   ).0j)iresultsr   r   
<listcomp>L   s     z1flex_binary_moment.<locals>.<listcomp>.<listcomp>T)ignore_index)ranger   r   )r   )arg2r   r   )r   r   r   J   s
   z&flex_binary_moment.<locals>.<listcomp>   )r   Zaxisc                 3  s0   | ](}t  j|tt j V  qd S N)nprepeatr   Zget_level_valuesr   r   r   )r   r   r   r   	<genexpr>c   s
   
z%flex_binary_moment.<locals>.<genexpr>)names)levelscodesZfloat64)r   r   Zdtypec                   s*   i | ]"}|t  jd d |f  qS r   )prep_binaryilocr"   )arg1r   fr   r   
<dictcomp>   s    z&flex_binary_moment.<locals>.<dictcomp>)"
isinstancer   r'   r   Zpandasr
   r   r   r   r(   Z	is_unique
ValueErrorZalignunionr   r   dictr   Znlevelsr   r   r    Ztilelistr$   nameZfrom_arraysr%   Zreorder_levelsZ
sort_indexZfrom_productZ	swaplevelZ	set_namesflex_binary_moment)r)   r   r*   ZpairwiseXYr   r   Zres_columnscolr   Zresult_indexZresult_levelZarg2_levelsZresult_namesZ
num_levelsZ	new_orderr   )r
   r)   r   r   r*   r   r   r   r2      s    

,

$
 
 
 r2   c              	   C  s\   t jdd t | }| dk }W 5 Q R X t| trH|j rXd||< n| rXd||< |S )Nignore)allr   )r    Zerrstatesqrtr,   r   Z_valuesany)xr   maskr   r   r   zsqrt   s    



r<   c                 C  s    | d|  }|d|   }||fS )Nr   r   )r)   r   r3   r4   r   r   r   r'      s    r'   strNone)kernelreturnc                 C  s   |dk	ot |dk}|dk	o&t |dk}|r6|r6d}n|r@d}n|rJd}nd}|dkr~tjd| d| j d	| d
tt d dS )a  
    Warn for deprecation of args and kwargs in rolling/expanding functions.

    Parameters
    ----------
    cls : type
        Class to warn about.
    kernel : str
        Operation name.
    args : tuple or None
        args passed by user. Will be None if and only if kernel does not have args.
    kwargs : dict or None
        kwargs passed by user. Will be None if and only if kernel does not have kwargs.
    Nr   zargs and kwargsargskwargs zPassing additional z to .zj has no impact on the result and is deprecated. This will raise a TypeError in a future version of pandas.)category
stacklevel)r   warningswarn__name__FutureWarningr   )clsr?   rA   rB   Z	warn_argsZwarn_kwargsmsgr   r   r   maybe_warn_args_and_kwargs   s    rM   )F)__doc__
__future__r   collectionsr   typingr   rG   Znumpyr    Zpandas.util._exceptionsr   Zpandas.core.dtypes.genericr   r   Zpandas.core.indexes.apir   r2   r<   r'   rM   r   r   r   r   <module>   s   
 