o
    d[                     @   s   d dl Zd dlZd dlmZmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZ ejdd Zejdd ZG dd	 d	Zejd
ddgdd ggdd ZdS )    N)	DataFrameIndex
MultiIndexNaTSeries	Timestamp
date_range)offsetsc                   C   s"   t tddddtdddS )N20130101   speriodsfreqABr   )r   r   range	set_index r   r   ^/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/window/test_timeseries_window.pyregular   s
   r   c                  C   s8   t dtdi} tdtdtdtdtdg| _| S )Nr   r   20130101 09:00:0020130101 09:00:0220130101 09:00:0320130101 09:00:0520130101 09:00:06)r   r   r   index)dfr   r   r   ragged   s   r   c                   @   s  e Zd Zdd Zdd Zejdde	dgdd	 Z
ejdd
eddgdd Zejdddeg dgdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Z d6d7 Z!d8d9 Z"d:d; Z#d<d= Z$ejd>d?d@dAgdB fd?dCdAgdD dEg fd?dFdAgdD dGg fdHd@dAgdB fdHdCdAgdD dEg fdHdFdAgdD dGg fd@d@dAgdB fd@dCdAgdD dEg fd@dFdAgdD dGg fdId@dAgdB fdIdCdAgdD dEg fdIdFdAgdD dGg fdJd@dAgdB fdJdCdAgdD dEg fdJdFdAgdD dGg fgdKdL Z%ejdMg dNdOdP Z&dQdR Z'dSdT Z(dUdV Z)dWdX Z*dYdZ Z+d[S )\TestRollingTSc                 C   sP   t ddddtjdgitdtdtdtd	td
gd}| |d  d S )Nr   r            r   r   r   r   r   r   2s)r   npnanr   rollingsumselfr   r   r   r   test_doc_string*   s   
zTestRollingTS.test_doc_stringc                 C   s   d}t jt|d |jdd W d    n1 sw   Y  d}t jt|d | jdd W d    d S 1 s<w   Y  d S )Nz@passed window foobar is not compatible with a datetimelike indexmatchfoobarwindowwindow must be an integer)pytestraises
ValueErrorr(   reset_index)r+   r   msgr   r   r   test_invalid_window_non_int8   s   "z)TestRollingTS.test_invalid_window_non_intr   Z2MSr"   c                 C   sD   d}t jt|d |j|d W d    d S 1 sw   Y  d S )Nz-\<2 \* MonthBegins\> is a non-fixed frequencyr-   r0   r3   r4   r5   r(   )r+   r   r   r7   r   r   r   test_invalid_window_nonfixedB   s   "z*TestRollingTS.test_invalid_window_nonfixed1DZ2msc                 C   s   |j |d d S )Nr0   )r(   )r+   r   r   r   r   r   test_valid_windowI   s   zTestRollingTS.test_valid_windowminp      ?Zfoo)r!   r"      c                 C   sF   d}t jt|d |jd|d W d    d S 1 sw   Y  d S )NzQlocal variable 'minp' referenced before assignment|min_periods must be an integerr-   r;   r1   min_periodsr9   )r+   r=   r   r7   r   r   r   test_invalid_minpM   s
   "zTestRollingTS.test_invalid_minpc                 C   s   |}d}t jt|d |jddd W d    n1 sw   Y  | }tdt|d|d< |jd	dd  d
}t jt|d |jd	dd W d    n1 sTw   Y  |jd	ddj  d S )NzSinvalid on specified as foobar, must be a column \(of DataFrame\), an Index or Noner-   r%   r/   )r1   onr
   r   CZ2dr2   r   )	r3   r4   r5   r(   copyr   lenr)   r   )r+   r   r   r7   r   r   r   test_onW   s   zTestRollingTS.test_onc                 C   sb   t tddddtdd}|jjsJ |jddd  |d}|jjs(J |d  d S )	Nr
   r   r   r   r   r%   r   rC   )	r   r   r   r   is_monotonic_increasingr(   r)   r   r   r*   r   r   r   test_monotonic_ono   s   
zTestRollingTS.test_monotonic_onc                 C   s   t tddddtdd}|d}|j }|d |d< ||_|jjr'J d	}tjt	|d
 |
d  W d    n1 sBw   Y  | }d}tjt	|d
 |j
ddd  W d    d S 1 siw   Y  d S )Nr
   r   r   r   r   r   r?   r   zindex values must be monotonicr-   r%   zNinvalid on specified as A, must be a column \(of DataFrame\), an Index or NonerI   )r   r   r   r   r   Zto_listrJ   r3   r4   r5   r(   r)   r6   )r+   r   Znon_monotonic_indexr7   r   r   r   test_non_monotonic_on|   s$   

"z#TestRollingTS.test_non_monotonic_onc                 C   s   t tdtddddd}tdtdtdtdtd	g|d
< |d
dj jdd}|jdd
dj }t	
|| |d
ddg   dd
g }|jdd
ddg  }t	|| d S )Nr   r   3sr   )r   rE   r   r   r   r   r   r%   T)droprI   r   )r   r   r   r   r   r(   r   r)   r6   tmassert_series_equalassert_frame_equal)r+   r   expectedresultr   r   r   test_frame_on   s    	$	zTestRollingTS.test_frame_onc              
   C   s  t g ddddtjdgttdtdtdtd	td
gdg dd}t g ddddtjdg|d dg dd}|jddd }|}t|| t	dddtjdgdd}|jdddj
 }t|| |g d }|jdddg d  }t|| d S )N)r   r!   r"   r?   r#   r   r!   r"   r#   r   r   r   r   r   )r   r   rE   )r   rE   r   )columns        r!   r?   r?      r?   rE   r%   rI   r   )name)r   r&   r'   r   r   r(   r)   rO   rQ   r   r   rP   )r+   r   Z	expected1rS   rR   r   r   r   test_frame_on2   s6   zTestRollingTS.test_frame_on2c                 C   s   |  }tdddd|_|jddd }|jdd }t|| tddd	d|_|jddd }|jd	dd }t|| |jddd }|jd	dd }t|| |jdd }|jd	d }t|| d S )
Nr
   r   Dr   r!   r@   r;   r0   Z2D)rF   r   r   r(   r)   rO   rQ   r+   r   r   rR   rS   r   r   r   test_basic_regular   s   z TestRollingTS.test_basic_regularc                 C   sd   |}|j ddd }| d }t|| |j ddd }|j ddd }t|| d S )Nr"   r!   rA   r%   )r(   r)   rO   rQ   r\   r   r   r   test_min_periods   s   zTestRollingTS.test_min_periodsc                 C   sl  t ddgd itdtdtdtdtdgd	}d
}tjt|d |jddd W d    n1 s5w   Y  | }g d|d< |jddd }t	|| |d }t	|| | }g d|d< |jddd }t	|| | }t
jddddg|d< |jddd }t	|| | }t
jdddt
jg|d< |jddd }t	|| d S )Nr   r!   r   z20130101 09:00:01r   r   z20130101 09:00:04r   r$   z3closed must be 'right', 'left', 'both' or 'neither'r-   r%   Zblabla)r1   closed)r>   r"   r"   r"   r!   right)r`   )r>   r"   r?   r?   r"   Zbothr>   r"   leftZneither)r   r   r3   r4   r5   r(   rF   r)   rO   rQ   r&   r'   )r+   r   r   r7   rR   rS   r   r   r   test_closed   s>   zTestRollingTS.test_closedc                 C   s  |}|j ddd }| }g d|d< t|| |j ddd }| }g d|d< t|| |j ddd }| }tjtjd	tjd
g|d< t|| |j ddd }| }g d|d< t|| |j dd }| }g d|d< t|| |j ddd }| }g d|d< t|| |j dd	d }| }tjtjd	ddg|d< t|| |j ddd }| }g d|d< t|| d S )N1sr!   r@   rW   r!   r"   r?   r#   r   r%   rV   r"   r?   rX   rM   )rW   r!   r?   r   rX   r0   Z4s)rW   r!   r?      	   rf   rg   5s)rW   r!   r?   rf   
   )r(   r)   rF   rO   rQ   r&   r'   r+   r   r   rS   rR   r   r   r   test_ragged_sum&  sB   zTestRollingTS.test_ragged_sumc                 C   l   |}|j ddd }| }g d|d< t|| |j ddd }| }g d|d< t|| d S Nrd   r!   r@   re   r   r%   rW   r!   g      ?      @g      @)r(   meanrF   rO   rQ   rj   r   r   r   test_ragged_meanP     zTestRollingTS.test_ragged_meanc                 C   rl   rm   )r(   medianrF   rO   rQ   rj   r   r   r   test_ragged_median\  rr   z TestRollingTS.test_ragged_medianc                 C   sp   |}|j dddd}| }g d|d< t|| |j dddd}| }g d|d< t|| d S )	Nrd   r!   r@         ?re   r   r%   rn   )r(   quantilerF   rO   rQ   rj   r   r   r   test_ragged_quantileh  s   z"TestRollingTS.test_ragged_quantilec                 C      |}|j dddjdd}| }dgd |d< t|| |j dddjdd}| }tjgd |d< t|| |j d	ddjdd}| }dgd
gd  |d< t|| |j dddjdd}| }tjddddg|d< t|| d S )Nrd   r!   r@   r   ZddofrW   r   r   rM   ru   r#   rh   g۞?r>   gPS?)r(   stdrF   rO   rQ   r&   r'   rj   r   r   r   test_ragged_stdt  "   zTestRollingTS.test_ragged_stdc                 C   rx   )Nrd   r!   r@   r   ry   rW   r   r   rM   g      ?r#   rh   ru   r>   g?)r(   varrF   rO   rQ   r&   r'   rj   r   r   r   test_ragged_var  r|   zTestRollingTS.test_ragged_varc                 C   s|   |}|j ddd }| }tjgd |d< t|| |j ddd }| }tjgd g d |d< t|| d S )	NrM   r!   r@   r   r   rh   r"   )rW   rW   rW   )r(   skewrF   r&   r'   rO   rQ   rj   r   r   r   test_ragged_skew  s   zTestRollingTS.test_ragged_skewc                 C   sz   |}|j ddd }| }tjgd |d< t|| |j ddd }| }tjgd dg |d< t|| d S )	NrM   r!   r@   r   r   rh   r#   g333333)r(   kurtrF   r&   r'   rO   rQ   rj   r   r   r   test_ragged_kurt  s   zTestRollingTS.test_ragged_kurtc                 C   s   |}|j ddd }| }g d|d< t|| |}|j dd }t|| |j ddd }| }g d|d< t|| |j dd	d }| }tjtjd	tjd	g|d< t|| d S )
Nrd   r!   r@   )r>   r!   r!   r!   r!   r   r0   r%   )r>   r!   r"   r!   r"   r"   )r(   countrF   rO   rQ   r&   r'   rj   r   r   r   test_ragged_count  s    zTestRollingTS.test_ragged_countc                 C   s   t tddddg ddd}|d }| }g d|d	< t|| t tddddg d
dd}t|| |d }| }g d|d	< t|| |d }| }g d|d	< t|| d S )Nr
   r   r   r   re   r   r   rd   r   )r   r#   r?   r#   r   r%   )      @r#   r?   r?   r#   rh   )r   r#   r?   r?   r?   )r   r   r   r(   minrF   rO   rQ   r+   r   rS   rR   r   r   r   test_regular_min  s.   zTestRollingTS.test_regular_minc                 C   s   |}|j ddd }| }g d|d< t|| |j ddd }| }g d|d< t|| |j ddd }| }g d	|d< t|| d S )
Nrd   r!   r@   re   r   r%   )rW   r!   r!   r?   r?   rh   )rW   r   r   r!   r!   )r(   r   rF   rO   rQ   rj   r   r   r   test_ragged_min     zTestRollingTS.test_ragged_minc                 C   s   d}t dtj|itd|ddd}|jddd	 }|d
 }|| dk   s/J |jddd	 }|d }|| dk   sKJ d S )Ni'  r   r
   r   r   r$   r"   r!   r^   r%   g{Gz?   Z200s)	r   r&   randomZrandnr   r(   r   allbool)r+   NZdfprR   rS   r   r   r   test_perf_min  s   zTestRollingTS.test_perf_minc                 C   s   |}|j ddd }| }g d|d< t|| |j ddd }| }g d|d< t|| |j ddd }| }g d|d< t|| d S )Nrd   r!   r@   re   r   r%   rh   )r(   maxrF   rO   rQ   rj   r   r   r   test_ragged_max  r   zTestRollingTS.test_ragged_maxzfreq, op, result_datamsr   rW   ri   rp   rg   gqq?r   g       @r   hr[   c                 C   sn   t dd| dd}td|dd}tj|jd< d	|jd
< t|jd| d| }t||d}t|| d S )Nz2018-1-1 01:00:001ri   )startr   r   r   float)datar   Zdtyper!   r"   10r0   )r   r   )	r   r   r&   r'   Zilocgetattrr(   rO   rP   )r+   r   opZresult_datar   r   rS   rR   r   r   r   test_freqs_ops  s   
zTestRollingTS.test_freqs_opsf)
r)   rp   r   rs   rz   r}   r   r   r   r   c                 C   sh   |d }|j dd}|j dd}t|| }t|| }t|| |d}|d}t|| d S )Nr"   r!   r0   rd   ru   )r(   r   rO   rQ   rv   )r+   r   r   r   ZerrrS   rR   r   r   r   test_all7  s   

zTestRollingTS.test_allc                    s   | t dtditddddd}|dd}|jd	d
}t|  } fdd}||jj	
|jddd}t|| d S )Nr   2   r
   Hr   r$   09:0016:00Z5Hr0   c                    s"   |  dd} t| jddd  S )Nr   r   r   r!   r^   )between_timer   r(   )xr   r   r   
agg_by_dayf  s   z+TestRollingTS.test_all2.<locals>.agg_by_dayr   T)levelrN   )r   r&   aranger   r   r(   r   groupbyr   dayapplyr6   rO   rQ   )r+   Zarithmetic_win_operatorsr   Zdftr   rS   r   rR   r   r   r   	test_all2T  s   zTestRollingTS.test_all2c                 C   s   t dddd}ttt||d}|d }ttjgdgt|d   |d}t	|| |jd	dd
 }t	|| |d }ttjdgdgt|d	   |d}t	|| |jddd
 }t	|| d S )Nz
2017-01-01   Z1hr   r$   Z2hru   r!   r"   r^   Z3hr>   r?   )
r   r   r&   r   rG   r(   Zcovr'   rO   rP   )r+   idxssrS   rR   Z	expected2r   r   r   test_rolling_cov_offsetp  s   "$z%TestRollingTS.test_rolling_cov_offsetc                 C   sh   t dt dt dt dt dg}tdg di|d}|d	 }tdg d
i|d}t|| d S )Nz20190101 09:00:30z20190101 09:00:27z20190101 09:00:20z20190101 09:00:18z20190101 09:00:10column)r?   r#   r#   r   rf   r$   rh   )ro   ro         @r         @)r   r   r(   r   rO   rQ   )r+   r   r   rS   rR   r   r   r    test_rolling_on_decreasing_index  s   z.TestRollingTS.test_rolling_on_decreasing_indexc                 C   s>   t dg ig d}|d }t dg ig d}t|| d S )Nr   r$   rh   )r   r(   r   rO   rQ   r   r   r   r   test_rolling_on_empty  s   z#TestRollingTS.test_rolling_on_emptyc                 C   sr   t dtditjtdddtdgddgd	d
}|jd|jdd }t dg di|jd
}t	
|| d S )Nr   rf   Z20190101r?   rD   r"   dateseq)namesr$   Z10drI   )rW   r>   ro   r   g      $@g      .@)r   r   r   Zfrom_productr   r(   r   Zget_level_valuesr)   rO   rQ   r   r   r   r   !test_rolling_on_multi_index_level  s   
z/TestRollingTS.test_rolling_on_multi_index_levelN),__name__
__module____qualname__r,   r8   r3   markparametrizer	   Z
MonthBeginr:   ZDayr<   r&   arrayrB   rH   rK   rL   rT   rZ   r]   r_   rc   rk   rq   rt   rw   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    &   sx    



	 $+*

r    z	msg, axisr   r!   r   c                 C   s   t dtg}|dkrdnd|i}ttdfi |}tjt|  dd |jd|d		  W d    d S 1 s:w   Y  d S )
NZ2020r!   rU   r   r"   z values must not have NaTr-   r[   )axis)
r   r   r   r&   eyer3   r4   r5   r(   rp   )r7   r   r   kwargsr   r   r   r   test_nat_axis_error  s   "r   )numpyr&   r3   Zpandasr   r   r   r   r   r   r   Zpandas._testingZ_testingrO   Zpandas.tseriesr	   Zfixturer   r   r    r   r   r   r   r   r   r   <module>   s"    $	

     