o
    Û­j‰&  ã                   @   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
mZmZ d dlmZ d dlmZ ej d¡Zdd„ Zej dg d¢¡d	d
„ ƒZdd„ Zej dddg¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zej dddd igd!dgg¡d"d#„ ƒZ d$d%„ Z!d&d'„ Z"d(d)„ Z#d*d+„ Z$d,d-„ Z%d.d/„ Z&ej d0g d1¢¡d2d3„ ƒZ'd4d5„ Z(d6d7„ Z)d8d9„ Z*dS ):é    N)	Ú	DataFrameÚIndexÚ
MultiIndexÚSeriesÚ	TimestampÚconcatÚ
date_rangeÚisnaÚnotna)Úoffsetsz3ignore:.*(empty slice|0 for slice).*:RuntimeWarningc                 C   s   | t  | ¡  ¡ S ©N)ÚnpÚisfiniteÚmean©Úx© r   ú[/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pandas/tests/window/test_apply.pyÚf   s   r   Úbad_raw)Né   r   c                 C   sP   t jtdd�� ttdƒƒ d¡jt| d� W d   ƒ d S 1 s!w   Y  d S )Nz'raw parameter must be `True` or `False`©Úmatché   r   ©Úraw)ÚpytestÚraisesÚ
ValueErrorr   ÚrangeÚrollingÚapplyÚlen)r   r   r   r   Útest_rolling_apply_invalid_raw   s   "ÿr#   c                 C   sx   | \}}t g d¢ƒ}| d¡jtj||d�}| ¡  ¡ sJ ‚|jddd�jtj||d�}t g d¢td�}t 	||¡ d S )N)r   é   r   é   é
   ©Úenginer   r   ©Úmin_periods)r   r   é   r&   ©Údtype)
r   r    r!   r   Úsumr	   ÚallÚfloatÚtmÚassert_almost_equal)Úengine_and_rawr(   r   ÚvalsÚresultÚexpectedr   r   r   Ú test_rolling_apply_out_of_bounds$   s   r7   Úwindowr$   Ú2sc                    sÂ   t tj d¡ d¡tj d¡jdddd�dœtdddd	�d
�‰ ‡ fdd„}ˆ  | ¡j|dd�}ˆ j	dd …  
ˆ ¡}t ||¡ t t¡� ˆ  | ¡j|dd� W d   ƒ d S 1 sZw   Y  d S )Nr$   é   r   r&   )Úsize©ÚAÚBÚ20130101Ús©ÚperiodsÚfreq©Úindexc                    s$   | j d ˆ j d krtjS | jd S )Nr   éÿÿÿÿ)rE   r   ÚnanÚilocr   ©Údfr   r   r   ?   s   
z1test_rolling_apply_with_pandas_objects.<locals>.fFr   T)r   r   ÚrandomÚdefault_rngÚstandard_normalÚintegersr   r    r!   rH   Úreindex_liker1   Úassert_frame_equalÚexternal_error_raisedÚAttributeError)r8   r   r5   r6   r   rI   r   Ú&test_rolling_apply_with_pandas_objects2   s   þû
"ÿrS   c                 C   s¸   | \}}t g dd�}|jd|d�jdd„ ||d�}t ||¡ t g d¢ƒ}|jd	d
|d�jdd„ ||d�}t g d¢ƒd d |… }t ||¡ |jd	d
|d�jt||d�}t ||¡ d S )NÚfloat64r,   r&   )Ústepc                 S   s   |   ¡ S r   )r   r   r   r   r   Ú<lambda>Q   ó    z$test_rolling_apply.<locals>.<lambda>r'   )NNNr$   r   ©r*   rU   c                 S   s   t | ƒS r   )r"   r   r   r   r   rV   X   rW   )ç      ð?ç       @rZ   )r   r    r!   r1   Úassert_series_equalr"   )r3   rU   r(   r   r6   r5   r@   r   r   r   Útest_rolling_applyL   s   
ÿ
ÿr\   c                 C   s~   | \}}t tdddd�tdƒdœƒ d¡d }|jdd	�}|jd
d	�}|jdd„ ||d�}|jdd„ ||d�}t ||¡ d S )Nr?   r:   r@   rA   r<   r=   r$   r   )r8   Ú1sc                 S   ó   dS ©Nr   r   r   r   r   r   rV   m   ó    z test_all_apply.<locals>.<lambda>r'   c                 S   r^   r_   r   r   r   r   r   rV   n   r`   )r   r   r   Ú	set_indexr    r!   r1   rP   )r3   r(   r   rJ   ÚerÚrr5   r6   r   r   r   Útest_all_applya   s   ÿýÿrd   c                 C   sê   | \}}t dtdƒiƒ}tdƒtdƒtdƒtdƒtdƒg|_dd	„ }|jd
dd�j|||d�}| ¡ }d|d< t ||¡ |jddd�j|||d�}| ¡ }d|d< t ||¡ |jddd�j|||d�}| ¡ }d|d< t ||¡ d S )Nr>   r:   z20130101 09:00:00z20130101 09:00:02z20130101 09:00:03z20130101 09:00:05z20130101 09:00:06c                 S   r^   r_   r   r   r   r   r   rV   ~   r`   z#test_ragged_apply.<locals>.<lambda>r]   r   ©r8   r*   r'   rY   r9   Ú5s)	r   r   r   rE   r    r!   Úcopyr1   rP   )r3   r(   r   rJ   r   r5   r6   r   r   r   Útest_ragged_applyr   s*   ûrh   c                   C   sT   t jtdd�� ttdƒƒ d¡jdd„ dd� W d   ƒ d S 1 s#w   Y  d S )Nz)engine must be either 'numba' or 'cython'r   r   c                 S   ó   | S r   r   r   r   r   r   rV   ‘   r`   z%test_invalid_engine.<locals>.<lambda>Úfoo)r(   ©r   r   r   r   r   r    r!   r   r   r   r   Útest_invalid_engine�   s   ""ÿrl   c                   C   sZ   t jtdd�� ttdƒƒ d¡jdd„ dddid	� W d   ƒ d S 1 s&w   Y  d S )
Nz+cython engine does not accept engine_kwargsr   r   c                 S   ri   r   r   r   r   r   r   rV   —   r`   z3test_invalid_engine_kwargs_cython.<locals>.<lambda>ÚcythonÚnopythonF)r(   Úengine_kwargsrk   r   r   r   r   Ú!test_invalid_engine_kwargs_cython”   s
   ÿ"ÿrp   c                   C   sV   t jtdd�� ttdƒƒ d¡jdd„ ddd� W d   ƒ d S 1 s$w   Y  d S )	Nz.raw must be `True` when using the numba enginer   r   c                 S   ri   r   r   r   r   r   r   rV   Ÿ   r`   z(test_invalid_raw_numba.<locals>.<lambda>FÚnumba)r   r(   rk   r   r   r   r   Útest_invalid_raw_numba›   s
   ÿ$"ýrr   Úargs_kwargsÚparr&   )r&   c                 C   sÐ   dd„ }t ddgddgdœƒ}tddgƒ}t ddgdd	gg|d
�}| d¡j|| d | d d�}t ||¡ tjddgdd gd�}tdd	g|dd�}| 	d¡d  d¡}|j|| d | d d�}t 
||¡ d S )Nc                 S   s   t  | | ¡S r   )r   r.   )r   rt   r   r   r   Únumpysum¥   s   z0test_rolling_apply_args_kwargs.<locals>.numpysumr   r$   )ÚgrÚarv   rw   g      &@g      (@)Úcolumnsr   )ÚargsÚkwargs)r   r   )r   r   )Únames)rE   Úname)r   r   r    r!   r1   rP   r   Úfrom_tuplesr   Úgroupbyr[   )rs   ru   rJ   Úidxr6   r5   ÚmidxÚ
gb_rollingr   r   r   Útest_rolling_apply_args_kwargs¢   s   r‚   c                 C   s\  t tj d¡ d¡ƒ}tj|d d…< tj|dd …< |jddd�jt| d�}t	 
|jd t |dd… ¡¡ |jd	d
d�jt| d�}t|jd ƒsJJ ‚t|jd ƒrSJ ‚t|jd ƒr\J ‚t|jd ƒseJ ‚t tj d¡ d	¡ƒ}|jddd�jt| d�}t|jd ƒs…J ‚t|jd ƒsŽJ ‚|jd	dd�jt| d�}|jd	dd�jt| d�}t	 
||¡ d S )Nr$   é2   r&   éöÿÿÿé   r)   r   rF   é   é   é   é   iúÿÿÿéûÿÿÿr:   r   r%   r   r   )r   r   rK   rL   rM   rG   r    r!   r   r1   r2   rH   r   r	   r
   )r   Úobjr5   Úobj2Úresult0Úresult1r   r   r   Ú	test_nans¹   s"    r�   c                 C   sš   t tj d¡ d¡ƒ}tj|d d…< tj|dd …< |jdddd�jt| d	�}t	|t tjgd
 ƒgƒjddd�jt| d	�j
d
d … jdd�}t ||¡ d S )Nr$   rƒ   r&   r„   r†   r‡   T)r*   Úcenterr   é	   r)   )Údrop)r   r   rK   rL   rM   rG   r    r!   r   r   rH   Úreset_indexr1   r[   )r   r‹   r5   r6   r   r   r   Útest_centerÓ   s   ÿþýüÿr”   c                 C   sF   |  d¡jt| d�}t|tƒsJ ‚t |jd t 	|dd … ¡¡ d S )Nrƒ   r   rF   éÎÿÿÿ)
r    r!   r   Ú
isinstancer   r1   r2   rH   r   r   )r   Úseriesr5   r   r   r   Útest_seriesã   s   $r˜   c                 C   sd   |  d¡jt| d�}t|tƒsJ ‚tj|jdd d …f |jdd …d d …f jtj	d| d�dd� d S )	Nrƒ   r   rF   r•   r   )Úaxisr   F©Úcheck_names)
r    r!   r   r–   r   r1   r[   rH   r   r   )r   Úframer5   r   r   r   Ú
test_frameé   s   "
ýr�   c           	      C   s„   d}d}|d d d…   d¡ ¡ }|j||d�jt| d�}|jd }|dt ¡   }|d d d…  ||¡}t	 
|jd t |¡¡ d S )	Né   r&   r$   r>   re   r   rF   r‰   )Úresampler   r    r!   r   rE   r   ÚBDayÚtruncater1   r2   rH   r   )	r   r—   ÚwinÚminpÚserÚseries_resultÚ	last_dateÚ	prev_dateÚtrunc_seriesr   r   r   Útest_time_rule_seriesó   s   
r©   c           	      C   sŽ   d}d}|d d d…   d¡ ¡ }|j||d�jt| d�}|jd }|dt ¡   }|d d d…  ||¡}t	j
| |¡|jtj| d�d	d
� d S )Nrž   r&   r$   r>   re   r   rF   r‰   Frš   )rŸ   r   r    r!   r   rE   r   r    r¡   r1   r[   Úxsr   )	r   rœ   r¢   r£   ÚfrmÚframe_resultr¦   r§   Útrunc_framer   r   r   Útest_time_rule_frameÿ   s   

ýr®   r£   )r   éc   éd   c                 C   sv   |j t|ƒd ||d�jt| d�}|j t|ƒ||d�jt| d�}t|ƒ}t |t|ƒ¡ | }t || || ¡ d S )Nr   rX   r   )r    r"   r!   r   r	   r1   r[   r2   )r   r—   r£   rU   r5   r6   Únan_maskr   r   r   Útest_min_periods  s   ÿÿr²   c                 C   sv   dd„ t dƒD ƒ}d}| t|jƒ| ¡jd|d�jt| d� d¡ |j¡}|jd|d	d
�jt| d�}t 	||¡ d S )Nc                 S   ó   g | ]}d |d›�‘qS ©r   Údr   ©Ú.0r   r   r   r   Ú
<listcomp>   ó    z.test_center_reindex_series.<locals>.<listcomp>é   r&   rž   re   r   éôÿÿÿT©r8   r*   r�   )
r   ÚreindexÚlistrE   r    r!   r   Úshiftr1   r[   )r   r—   r@   r£   Ú	series_xpÚ	series_rsr   r   r   Útest_center_reindex_series  s   ÿþûÿrÂ   c                 C   s�   t tdƒtdddd�d�}dd„ tdƒD ƒ}d	}| t|jƒ| ¡jd
|d�jt| d� 	d¡ |j¡}|jd
|dd�jt| d�}t
 ||¡ d S )Nr°   z
2020-01-01ÚD)rC   rB   rD   c                 S   r³   r´   r   r¶   r   r   r   r¸   3  r¹   z-test_center_reindex_frame.<locals>.<listcomp>rº   r&   rž   re   r   r»   Tr¼   )r   r   r   r½   r¾   rE   r    r!   r   r¿   r1   rP   )r   rœ   r@   r£   Úframe_xpÚframe_rsr   r   r   Útest_center_reindex_frame0  s   ÿþûrÆ   c                 C   st   t ddgƒ}d}tjt|d�� |jddd�jtj| d�}W d   ƒ n1 s'w   Y  t ddgƒ}t ||¡ d S )	Nr   r$   z5Support for axis=1 in DataFrame.rolling is deprecatedr   )r8   r™   r   rY   rZ   )	r   r1   Úassert_produces_warningÚFutureWarningr    r!   r   r.   rP   )r   rJ   Úmsgr5   r6   r   r   r   Ú
test_axis1A  s   ÿrÊ   )+Únumpyr   r   Úpandasr   r   r   r   r   r   r   r	   r
   Úpandas._testingÚ_testingr1   Úpandas.tseriesr   ÚmarkÚfilterwarningsÚ
pytestmarkr   Úparametrizer#   r7   rS   r\   rd   rh   rl   rp   rr   r‚   r�   r”   r˜   r�   r©   r®   r²   rÂ   rÆ   rÊ   r   r   r   r   Ú<module>   sB    ,ÿ




