o
    Û­jR>  ã                   @   s²  d dl Zd dl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mZmZ d dlmZ dd„ Zdd	„ Zd
d„ Zdd„ Zej ddedddddddddejg
i fdejdddddddddejg
i fdejdddddddddejg
i fdejddddddddd ejg
d!d"ifd#ej dddd$d%d&ddd'ejg
d!d"ifd(ej!ddddddddd)ejg
i fg¡d*d+„ ƒZ"d,d-„ Z#ej d.d/dddd0dd1ddejejg
fd2dddd3d4d5ddejejg
fg¡d6d7„ ƒZ$ej d8d9g d:¢gd;g d<¢gg¡d=d>„ ƒZ%d?d@„ Z&dAdB„ Z'dCdD„ Z(ej dEd"g dF¢fdGg dH¢fg¡ej dId(g fdJd'gfg¡dKdL„ ƒƒZ)ej dMeeeg¡ej dNg dO¢¡ej dPd"d"gd d"gdQœd"dRgd d"gdQœd"gdS ejd"dRejge*e+dTdSƒƒ dQœg¡dUdV„ ƒƒƒZ,ej dWd"d"d gd"gfd"dRd d"gd"dRgfdRd"d gd"gfdRdRd d"gdRdRgfdXdYe+dYƒe*e+dXdYƒƒdYgdX  fdYdXe+dXƒdXgdX fd d e -g ¡e -g ¡fd"d e -g ¡e -g ¡fd d"d gd gfg	¡dZd[„ ƒZ.ej d\eg d]¢g d^¢d_œƒdReg d`¢ej/g d^¢e+daƒgdbdgdc�ddej0de�feejd"dRejge*e+dTdfƒƒ d"gdg dRgdh  e+dfƒdiœƒdYeg dj¢ej/d"gdg dRgdh  e+dfƒgdbdgdc�ddej0de�fg¡dkdl„ ƒZ1ej dmg dn¢¡ej dNg do¢¡dpdq„ ƒƒZ2drds„ Z3dtdu„ Z4dS )vé    N)Ú	DataFrameÚ
MultiIndexÚSeriesÚconcatÚ
date_range)ÚBaseIndexerÚFixedForwardWindowIndexer)ÚExpandingIndexerÚFixedWindowIndexerÚVariableOffsetWindowIndexer)ÚBusinessDayc                  C   s\   G dd„ dt ƒ} | ƒ }tjtdd�� ttdƒƒ |¡ W d   ƒ d S 1 s'w   Y  d S )Nc                   @   ó   e Zd Zdd„ ZdS )z8test_bad_get_window_bounds_signature.<locals>.BadIndexerc                 S   s   d S ©N© )Úselfr   r   úb/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pandas/tests/window/test_base_indexer.pyÚget_window_bounds   s   zJtest_bad_get_window_bounds_signature.<locals>.BadIndexer.get_window_boundsN©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   Ú
BadIndexer   ó    r   zBadIndexer does not implement©Úmatché   )r   ÚpytestÚraisesÚ
ValueErrorr   ÚrangeÚrolling)r   Úindexerr   r   r   Ú$test_bad_get_window_bounds_signature   s
   "ÿr"   c                  C   s<   t tdƒƒ} tƒ }|  |¡ ¡ }|  ¡  ¡ }t ||¡ d S )Né
   )r   r   r	   r    ÚmeanÚ	expandingÚtmÚassert_series_equal)Úsr!   ÚresultÚexpectedr   r   r   Útest_expanding_indexer#   s
   r+   c                  C   sb   g d¢} t dtdƒiƒ}G dd„ dtƒ}|d| d�}| |¡ ¡ }t dg d¢iƒ}t ||¡ d S )	N©TFTFTÚvaluesr   c                   @   r   )z3test_indexer_constructor_arg.<locals>.CustomIndexerc           	      S   sl   t j|t jd�}t j|t jd�}t|ƒD ]}| j| r&d||< |d ||< q|||< || j ||< q||fS ©N©Údtyper   é   )ÚnpÚemptyÚint64r   Úuse_expandingÚwindow_size©	r   Ú
num_valuesÚmin_periodsÚcenterÚclosedÚstepÚstartÚendÚir   r   r   r   1   s   
zEtest_indexer_constructor_arg.<locals>.CustomIndexer.get_window_boundsNr   r   r   r   r   ÚCustomIndexer0   r   r@   r1   ©r6   r5   )ç        ç      ð?ç      @rD   ç      $@©r   r   r   r    Úsumr&   Úassert_frame_equal)r5   Údfr@   r!   r)   r*   r   r   r   Útest_indexer_constructor_arg+   s   rJ   c                  C   sb   t dtdƒiƒ} G dd„ dtƒ}|dd�}| j|ddddd	� ¡ }t dg d
¢iƒ}t ||¡ d S )Nr-   r   c                   @   r   )z8test_indexer_accepts_rolling_args.<locals>.CustomIndexerc           	      S   s‚   t j|t jd�}t j|t jd�}t|ƒD ](}|r1|dkr1|dkr1|dkr1|dkr1d||< |||< q|||< || j ||< q||fS )Nr/   r1   Úbothé   r   )r2   r3   r4   r   r6   r7   r   r   r   r   G   s   ÿ
zJtest_indexer_accepts_rolling_args.<locals>.CustomIndexer.get_window_boundsNr   r   r   r   r   r@   F   r   r@   r1   ©r6   TrK   )r:   r9   r;   r<   )rB   rC   rE   rD   ç      @rF   )rI   r@   r!   r)   r*   r   r   r   Ú!test_indexer_accepts_rolling_argsC   s   

ÿþrO   zfunc,np_func,expected,np_kwargsÚcountrD   ç       @ÚminrB   rC   rN   ç      @ç      @ç       @Úmaxç      Y@ç      "@Ústdg–Ã»·ÛK@gþDéû¾mK@gµ!µ?þJ@gß'Üež æ?Úddofr1   Úvarg[{Ÿªª@¨@g[{Ÿªª‚§@g[{ŸªªÄ¦@g      à?Úmediang      !@c                    st  t  d¡}d|d< tdd�}d}tjt|d�� | |ƒj|dd	�}	t|	|ƒƒ  W d   ƒ n1 s1w   Y  d
}tjt|d�� | |ƒj|dd�}	t|	|ƒƒ  W d   ƒ n1 sYw   Y  | |ƒj|d|d�}	t|	|ƒƒ }
| |ƒd d |… }t 	|
|¡ | |	 
‡ ‡fdd„¡ƒ}t 	|
|¡ |dkr•dnd }| |ƒj||d�}t||ƒƒ }| | 
‡ ‡fdd„¡ƒ}t 	||¡ d S )NrE   rW   r   é   rM   z.Forward-looking windows can't have center=Truer   T)Úwindowr:   zAForward-looking windows don't support setting the closed argumentÚright)r^   r;   rL   ©r^   r9   r<   c                    ó   ˆ | fi ˆ¤ŽS r   r   ©Úx©Únp_funcÚ	np_kwargsr   r   Ú<lambda>²   ó    z-test_rolling_forward_window.<locals>.<lambda>rP   r   ©r^   r9   c                    ra   r   r   rb   rd   r   r   rg   ¼   rh   )r2   Úaranger   r   r   r   r    Úgetattrr&   Úassert_equalÚapply)Úframe_or_seriesÚfuncre   r*   rf   r<   r-   r!   r   r    r)   Ú	expected2r9   Úrolling3Úresult3Ú	expected3r   rd   r   Útest_rolling_forward_windowa   s0   
9
þþrt   c                 C   sr   t  d¡}d|d< tdd�}| |ƒj|d|d�}| ¡ }| ddd	d
ddddt jt jg
ƒd d |… }t ||¡ d S )NrE   rW   r   rM   r]   r`   rB   gÅoòÛ@gê\QJÖ@gúòì£Ó@g§v†©-Õ@gA€Û@)r2   rj   r   r    ÚskewÚnanr&   rl   )rn   r<   r-   r!   r    r)   r*   r   r   r   Útest_rolling_forward_skewnessÀ   s*   

öÿórw   zfunc,expectedÚcovg     @X@g     @WÀÚcorrgîá°óÚë?g¥hÆ"¥ª’?g¡´1=�ë¿c                 C   s¢   t  d¡ dd¡}|d }d|d< t j||gdd�}tdd	�}t|ƒj|dd
�}t|| ƒƒ jt	d ƒdfdf }|j
dd�}t|ƒj
dd�}|j|_t ||¡ d S )Nr#   éÿÿÿÿr1   rL   éd   )r   r   )Úaxisr]   rM   ri   r   T)Údrop)r2   rj   ÚreshapeÚconcatenater   r   r    rk   ÚlocÚsliceÚreset_indexr   Únamer&   rl   )ro   r*   Úvalues1Úvalues2r-   r!   r    r)   r   r   r   Útest_rolling_forward_cov_corrÙ   s   
r†   zclosed,expected_datar_   )
rB   rC   rQ   rD   rT   ç      (@rS   rT   rU   rX   Úleft)
rB   rB   rC   rQ   ç      @rX   r‰   rS   rT   rU   c                 C   s^   t ddd�}ttdƒ|d�}tdƒ}t||d�}|j|| d� ¡ }t||d�}t ||¡ d S )NÚ2020r#   ©Úperiods)Úindexr1   ©r�   Úoffset)r;   )	r   r   r   r   r   r    rG   r&   rH   )r;   Úexpected_datar�   rI   r�   r!   r)   r*   r   r   r   Ú&test_non_fixed_variable_window_indexerþ   s   r‘   c                   C   sD   t jtdd�� tdtdƒd� W d   ƒ d S 1 sw   Y  d S )Nzindex must be a DatetimeIndex.r   Úfoor1   rŽ   )r   r   r   r   r   r   r   r   r   Ú(test_variableoffsetwindowindexer_not_dti  s   "ÿr“   c                  C   sL   t ddd�} tjtdd�� t| dd� W d   ƒ d S 1 sw   Y  d S )NrŠ   r#   r‹   z(offset must be a DateOffset-like object.r   r’   rŽ   )r   r   r   r   r   )Úidxr   r   r   Ú+test_variableoffsetwindowindexer_not_offset  s   "ÿr•   c                 C   sX   t dg d¢iƒ}tdd�}|j|d| d� ¡ }t dg d¢iƒd d | … }t ||¡ d S )NÚb)NNNé   rL   rM   r   r`   )rB   rB   rC   rC   )r   r   r    rP   r&   rH   )r<   rI   r!   r)   r*   r   r   r   Ú test_fixed_forward_indexer_count  s
   
r˜   )Ú	end_valuer-   )rB   r1   r1   r]   rL   rz   )rB   r1   r   r]   r1   )ro   ÚargsÚquantilec           
         sh   G ‡ fdd„dt ƒ}g d¢}tdtdƒiƒ}|d|d�}t| |¡|ƒ|Ž }td|iƒ}	t ||	¡ d S )Nc                       s   e Zd Z‡ fdd„ZdS )z0test_indexer_quantile_sum.<locals>.CustomIndexerc           	         sr   t j|t jd�}t j|t jd�}t|ƒD ] }| j| r)d||< t|ˆ  dƒ||< q|||< || j ||< q||fS r.   )r2   r3   r4   r   r5   rV   r6   r7   ©r™   r   r   r   ,  s   
zBtest_indexer_quantile_sum.<locals>.CustomIndexer.get_window_boundsNr   r   rœ   r   r   r@   +  s    r@   r,   r-   r   r1   rA   )r   r   r   rk   r    r&   rH   )
r™   r-   ro   rš   r@   r5   rI   r!   r)   r*   r   rœ   r   Útest_indexer_quantile_sum%  s   r�   Úindexer_classr6   )r1   rL   é   Údf_data)Úar–   rL   é   é   c                 C   sX   t |ƒ}d}| |d�}|j}t|ƒD ]}| d¡d j|dd� ¡  |j|ks)J ‚qd S )Nr]   rM   r¡   r–   r1   ri   )r   r6   r   Úgroupbyr    r$   )rž   r6   r    rI   Ú
num_trialsr!   Úoriginal_window_sizer?   r   r   r   Ú0test_indexers_are_reusable_after_groupby_rollingA  s   
þr§   z5window_size, num_values, expected_start, expected_endr   rŸ   c                 C   st   t | d�}|j||d�\}}tj|t |d d |… ¡dd� tj|t |d d |… ¡dd� t|ƒt|ƒks8J ‚d S )NrM   )r8   r<   F)Úcheck_dtype)r   r   r&   Úassert_numpy_array_equalr2   ÚarrayÚlen)r6   r8   Úexpected_startÚexpected_endr<   r!   r=   r>   r   r   r   Ú!test_fixed_forward_indexer_boundsZ  s   
ÿ r®   zdf, window_size, expected)r   r1   rL   )r1   rL   rL   )r–   r¡   )r   g      ø?rQ   r]   r¡   )Únamesr–   )r�   rƒ   r0   é   r—   é   )r–   r¡   Úc)çÍÌÌÌÌÌ@r³   g      @r‰   r‰   g      @rS   r‡   g      )@g      *@g      +@g      ,@g      -@g      .@g      /@g      0@g     €0@g      1@c                 C   s6   t |d�}|  d¡d j|dd� ¡ }t ||¡ d S )NrM   r¡   r–   r1   ri   )r   r¤   r    r$   r&   r'   )rI   r6   r*   r!   r)   r   r   r   Ú0test_rolling_groupby_with_fixed_forward_specificv  s   
6r´   Ú
group_keys)	)r1   )r1   rL   )rL   r1   )r1   r1   rL   )r1   rL   r1   )r1   r1   rL   rL   )r1   rL   r]   rL   r]   )r1   r1   rL   r1   r1   rL   r1   r1   rL   r1   r1   rL   )r1   rL   r]   r1   rL   r]   r1   rL   r]   r1   rL   r]   r1   rL   r]   )r1   rL   r]   r£   r   é   é   c                    sº   t t t| ƒ¡tjt| ƒtjd�d tjt| ƒtjd�dœƒ}tˆ d�}| 	d¡d j
|dd� ¡ }dd	g|j_| 	d¡g d¢ }t‡ fd
d„|D ƒƒ}| dd	g¡d }t ||¡ d S )Nr/   é   )r¡   r–   r²   rM   r¡   r–   r1   ri   r²   c                    s4   g | ]\}‰ ˆ j ‡ ‡fd d„ttˆ ƒƒD ƒd�‘qS )c                    s*   g | ]}ˆ d  j ||ˆ … jdd�‘qS )r–   r1   )Ú	min_count)ÚilocrG   )Ú.0r?   )Úgr6   r   r   Ú
<listcomp>Ò  s    ÿÿzKtest_rolling_groupby_with_fixed_forward_many.<locals>.<listcomp>.<listcomp>)r–   )Úassignr   r«   )r»   Ú_rM   )r¼   r   r½   Ð  s    ú
þÿÿz@test_rolling_groupby_with_fixed_forward_many.<locals>.<listcomp>)r   r2   rª   Úlistrj   r«   Úfloat64r4   r   r¤   r    rG   r�   r¯   r   Ú	set_indexr&   r'   )rµ   r6   rI   r!   r)   ÚgroupsÚmanualr   rM   r   Ú,test_rolling_groupby_with_fixed_forward_many±  s"   ýÿ

ùÿrÅ   c                  C   s  G dd„ dt ƒ} | ƒ }tdƒ |¡}d}tjt|d�� | ¡  W d   ƒ n1 s*w   Y  tjt|d�� tt|ƒƒ W d   ƒ n1 sGw   Y  tjt|d�� |j	dd� W d   ƒ n1 sdw   Y  tjt|d�� |j
dd� W d   ƒ d S 1 s‚w   Y  d S )Nc                   @   r   )z4test_unequal_start_end_bounds.<locals>.CustomIndexerc                 S   s   t  dg¡t  ddg¡fS ©Nr1   rL   ©r2   rª   ©r   r8   r9   r:   r;   r<   r   r   r   r   á  s   zFtest_unequal_start_end_bounds.<locals>.CustomIndexer.get_window_boundsNr   r   r   r   r   r@   à  r   r@   r1   r=   r   T©Úpairwise©r   r   r    r   r   r   r$   ÚnextÚiterry   rx   ©r@   r!   Úrollr   r   r   r   Útest_unequal_start_end_boundsß  s    
ÿÿÿ"ÿrÐ   c                  C   s  G dd„ dt ƒ} | ƒ }tddgƒ |¡}d}tjt|d�� | ¡  W d   ƒ n1 s,w   Y  tjt|d�� tt|ƒƒ W d   ƒ n1 sIw   Y  tjt|d�� |j	dd� W d   ƒ n1 sfw   Y  tjt|d�� |j
dd� W d   ƒ d S 1 s„w   Y  d S )Nc                   @   r   )z4test_unequal_bounds_to_object.<locals>.CustomIndexerc                 S   s   t  dg¡t  dg¡fS rÆ   rÇ   rÈ   r   r   r   r   ÷  s   zFtest_unequal_bounds_to_object.<locals>.CustomIndexer.get_window_boundsNr   r   r   r   r   r@   ö  r   r@   r1   zstart and endr   TrÉ   rË   rÎ   r   r   r   Útest_unequal_bounds_to_objectô  s    
ÿÿÿ"ÿrÑ   )5Únumpyr2   r   Úpandasr   r   r   r   r   Úpandas._testingÚ_testingr&   Úpandas.api.indexersr   r   Úpandas.core.indexers.objectsr	   r
   r   Úpandas.tseries.offsetsr   r"   r+   rJ   rO   ÚmarkÚparametrizer«   rv   rR   rV   rY   r[   r\   rt   rw   r†   r‘   r“   r•   r˜   r�   rÀ   r   r§   rª   r®   Úfrom_arraysrÁ   r´   rÅ   rÐ   rÑ   r   r   r   r   Ú<module>   s:   
 "üöñöñüÕþ
5*öþþþ


þþ

	ÿ
ÿ(ýþ"÷þ
üýýÿ ÿç÷õþ
4þ