a
    oÝEb¼;  ã                   @   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eeg¡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¡ej "d+¡d,d-„ ƒƒƒZ#ej deeg¡d.d/„ ƒZ$ej d0d1dddd2dd3ddejejg
fd4dddd5d6d7ddejejg
fg¡d8d9„ ƒZ%ej d:d;g d<¢gd=g d>¢gg¡d?d@„ ƒZ&dAdB„ Z'ej dCd#g dD¢fdEg dF¢fg¡ej dGd)g fdHd(gfg¡dIdJ„ ƒƒZ(ej dKeeeg¡ej dLg dM¢¡ej dNd#d#gd d#gdOœd#dPgd d#gdOœd#gdQ ejd#dPejge)e*dRdQƒƒ dOœg¡dSdT„ ƒƒƒZ+ej dUd#d#d gd#gfd#dPd d#gd#dPgfdPd#d gd#gfdPdPd d#gdPdPgfdVdWe*dWƒe)e*dVdWƒƒdWgdV  fdWdVe*dVƒdVgdV fd d e ,g ¡e ,g ¡fd#d e ,g ¡e ,g ¡fd d#d gd gfg	¡dXdY„ ƒZ-ej dZeg d[¢g d\¢d]œƒdPeg d^¢ej.g d\¢e*d_ƒgd`dgda�dbej/dc�feejd#dPejge)e*dRddƒƒ d#gde dPgdf  e*ddƒdgœƒdWeg dh¢ej.d#gde dPgdf  e*ddƒgd`dgda�dbej/dc�fg¡didj„ ƒZ0ej dkg dl¢¡ej dLg dm¢¡dndo„ ƒƒZ1dpdq„ Z2drds„ Z3dS )té    N)Ú	DataFrameÚ
MultiIndexÚSeriesÚconcatÚ
date_range)ÚBaseIndexerÚFixedForwardWindowIndexer)ÚExpandingIndexerÚFixedWindowIndexerÚVariableOffsetWindowIndexer)ÚBusinessDayc                  C   sZ   G dd„ dt ƒ} | ƒ }tjtdd��" ttdƒƒ |¡ W d   ƒ n1 sL0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )z8test_bad_get_window_bounds_signature.<locals>.BadIndexerc                 S   s   d S ©N© )Úselfr   r   úe/home/ja/django-apps/lartica_env/lib/python3.9/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   s   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   ÚmeanZ	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                   @   s   e Zd Zdd„ ZdS )z3test_indexer_constructor_arg.<locals>.CustomIndexerc                 S   sl   t j|t jd�}t j|t jd�}t|ƒD ]:}| j| rLd||< |d ||< q(|||< || j ||< q(||fS ©N©Údtyper   é   )ÚnpÚemptyÚint64r   Úuse_expandingÚwindow_size©r   Ú
num_valuesÚmin_periodsÚcenterÚclosedÚstartÚendÚir   r   r   r   1   s    
zEtest_indexer_constructor_arg.<locals>.CustomIndexer.get_window_boundsNr   r   r   r   r   ÚCustomIndexer0   s   r<   r.   ©r3   r2   )ç        ç      ð?ç      @r@   ç      $@©r   r   r   r   Úsumr#   Úassert_frame_equal)r2   Údfr<   r   r&   r'   r   r   r   Útest_indexer_constructor_arg+   s    rF   c                  C   s`   t dtdƒiƒ} G dd„ dtƒ}|dd�}| j|dddd	� ¡ }t dg d
¢iƒ}t ||¡ d S )Nr*   r   c                   @   s   e Zd Zdd„ ZdS )z8test_indexer_accepts_rolling_args.<locals>.CustomIndexerc                 S   sz   t j|t jd�}t j|t jd�}t|ƒD ]H}|rZ|dkrZ|dkrZ|dkrZd||< |||< q(|||< || j ||< q(||fS )Nr,   r.   Úbothé   r   )r/   r0   r1   r   r3   r4   r   r   r   r   G   s    
zJtest_indexer_accepts_rolling_args.<locals>.CustomIndexer.get_window_boundsNr   r   r   r   r   r<   F   s   r<   r.   ©r3   TrG   )r7   r6   r8   )r>   r?   rA   r@   ç      @rB   )rE   r<   r   r&   r'   r   r   r   Ú!test_indexer_accepts_rolling_argsC   s    
rK   Úconstructorzfunc,np_func,expected,np_kwargsÚcountr@   ç       @Úminr>   r?   rJ   ç      @ç      @ç       @Úmaxç      Y@ç      "@Ústdg–Ã»·ÛK@gþDéû¾mK@gµ!µ?þJ@gß'Üež æ?Zddofr.   Úvarg[{Ÿªª@¨@g[{Ÿªª‚§@g[{ŸªªÄ¦@g      à?Úmediang      !@z ignore:min_periods:FutureWarningc                    sj  t  d¡}d|d< tdd�}d}tjt|d��. | |ƒj|dd	�}t||ƒƒ  W d   ƒ n1 sb0    Y  d
}tjt|d��. | |ƒj|dd�}t||ƒƒ  W d   ƒ n1 s²0    Y  | |ƒj|dd�}t||ƒƒ }	| |ƒ}t 	|	|¡ | | 
‡ ‡fdd„¡ƒ}
t 	|	|
¡ |dk�r dnd }| |ƒj||d�}t||ƒƒ }| | 
‡ ‡fdd„¡ƒ}t 	||¡ d S )NrA   rT   r   é   rI   z.Forward-looking windows can't have center=Truer   T)Úwindowr7   zAForward-looking windows don't support setting the closed argumentÚright)rZ   r8   rH   ©rZ   r6   c                    s   ˆ | fi ˆ¤ŽS r   r   ©Úx©Únp_funcÚ	np_kwargsr   r   Ú<lambda>ª   ó    z-test_rolling_forward_window.<locals>.<lambda>rM   r   c                    s   ˆ | fi ˆ¤ŽS r   r   r]   r_   r   r   rb   ´   rc   )r/   Úaranger   r   r   r   r   Úgetattrr#   Úassert_equalÚapply)rL   Úfuncr`   r'   ra   r*   r   r   r   r&   Z	expected2r6   Zrolling3Zresult3Z	expected3r   r_   r   Útest_rolling_forward_windowY   s,    9

**ri   c                 C   sf   t  d¡}d|d< tdd�}| |ƒj|dd�}| ¡ }| ddd	d
ddddt jt jg
ƒ}t ||¡ d S )NrA   rT   r   rI   rY   r\   r>   gÅoòÛ@gê\QJÖ@gúòì£Ó@g§v†©-Õ@gA€Û@)r/   rd   r   r   ZskewÚnanr#   rf   )rL   r*   r   r   r&   r'   r   r   r   Útest_rolling_forward_skewness¸   s&    

öÿrk   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|_t ||¡ d S )Nr!   éÿÿÿÿr.   rH   éd   )r   r   )ZaxisrY   rI   r\   r   T)Zdrop)r/   rd   ZreshapeZconcatenater   r   r   re   ÚlocÚsliceZreset_indexr   Únamer#   rf   )rh   r'   Zvalues1Zvalues2r*   r   r   r&   r   r   r   Útest_rolling_forward_cov_corrÒ   s    
rs   zclosed,expected_datar[   )
r>   r?   rN   r@   rQ   ç      (@rP   rQ   rR   rU   Úleft)
r>   r>   r?   rN   ç      @rU   rv   rP   rQ   rR   c                 C   s^   t ddd�}ttdƒ|d�}tdƒ}t||d�}|j|| d� ¡ }t||d�}t ||¡ d S )NZ2020r!   )Zperiods)Úindexr.   )rw   Úoffset)r8   )	r   r   r   r   r   r   rC   r#   rD   )r8   Zexpected_datarw   rE   rx   r   r&   r'   r   r   r   Ú&test_non_fixed_variable_window_indexer÷   s    ry   c                  C   sL   t dg d¢iƒ} tdd�}| j|dd� ¡ }t dg d¢iƒ}t ||¡ d S )NÚb)NNNé   rH   rI   r   r\   )r>   r>   r?   r?   )r   r   r   rM   r#   rD   )rE   r   r&   r'   r   r   r   Ú test_fixed_forward_indexer_count  s
    
r|   )Ú	end_valuer*   )r>   r.   r.   rY   rH   rn   )r>   r.   r   rY   r.   )rh   ÚargsZ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| rRd||< t|ˆ  dƒ||< q(|||< || j ||< q(||fS r+   )r/   r0   r1   r   r2   rS   r3   r4   ©r}   r   r   r     s    
zBtest_indexer_quantile_sum.<locals>.CustomIndexer.get_window_boundsNr   r   r   r   r   r<     s   r<   r)   r*   r   r.   r=   )r   r   r   re   r   r#   rD   )
r}   r*   rh   r~   r<   r2   rE   r   r&   r'   r   r   r   Útest_indexer_quantile_sum  s    r€   Úindexer_classr3   )r.   rH   é   Údf_data)Úarz   rH   é   é   c                 C   sX   t |ƒ}d}| |d�}|j}t|ƒD ].}| d¡d j|dd� ¡  |j|ks$J ‚q$d S )NrY   rI   r„   rz   r.   r\   )r   r3   r   Úgroupbyr   r"   )r�   r3   rƒ   rE   Z
num_trialsr   Zoriginal_window_sizer;   r   r   r   Ú0test_indexers_are_reusable_after_groupby_rolling-  s    
rˆ   z5window_size, num_values, expected_start, expected_endr   r‚   c                 C   s^   t | d�}|j|d�\}}tj|t |¡dd� tj|t |¡dd� t|ƒt|ƒksZJ ‚d S )NrI   )r5   F)Zcheck_dtype)r   r   r#   Zassert_numpy_array_equalr/   ÚarrayÚlen)r3   r5   Zexpected_startZexpected_endr   r9   r:   r   r   r   Ú!test_fixed_forward_indexer_boundsF  s
    
r‹   zdf, window_size, expected)r   r.   rH   )r.   rH   rH   )rz   r„   )r   g      ø?rN   rY   r„   )Únamesrz   )rw   rr   r-   é   r{   é   )rz   r„   Úc)çÍÌÌÌÌÌ@r�   g      @rv   rv   g      @rP   rt   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 )NrI   r„   rz   r.   r\   )r   r‡   r   r"   r#   r$   )rE   r3   r'   r   r&   r   r   r   Ú0test_rolling_groupby_with_fixed_forward_specific`  s    6
r‘   Ú
group_keys)	)r.   )r.   rH   )rH   r.   )r.   r.   rH   )r.   rH   r.   )r.   r.   rH   rH   )r.   rH   rY   rH   rY   )r.   r.   rH   r.   r.   rH   r.   r.   rH   r.   r.   rH   )r.   rH   rY   r.   rH   rY   r.   rH   rY   r.   rH   rY   r.   rH   rY   )r.   rH   rY   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„   rz   r�   rI   r„   rz   r.   r\   r�   c                    s4   g | ],\}‰ ˆ j ‡ ‡fd d„ttˆ ƒƒD ƒd�‘qS )c                    s*   g | ]"}ˆ d  j ||ˆ … jdd�‘qS )rz   r.   )Z	min_count)ZilocrC   )Ú.0r;   )Úgr3   r   r   Ú
<listcomp>¼  s   ÿzKtest_rolling_groupby_with_fixed_forward_many.<locals>.<listcomp>.<listcomp>)rz   )Zassignr   rŠ   )r–   Ú_rI   )r—   r   r˜   º  s   ú
þÿz@test_rolling_groupby_with_fixed_forward_many.<locals>.<listcomp>)r   r/   r‰   Úlistrd   rŠ   Úfloat64r1   r   r‡   r   rC   rw   rŒ   r   Z	set_indexr#   r$   )r’   r3   rE   r   r&   ÚgroupsZmanualr   rI   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 sT0    Y  tjt|d�� tt|ƒƒ W d   ƒ n1 sŽ0    Y  tjt|d�� |j	dd� W d   ƒ n1 sÈ0    Y  tjt|d�� |j
dd� W d   ƒ n1 �s0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )z4test_unequal_start_end_bounds.<locals>.CustomIndexerc                 S   s   t  dg¡t  ddg¡fS ©Nr.   rH   ©r/   r‰   ©r   r5   r6   r7   r8   r   r   r   r   Ë  s    zFtest_unequal_start_end_bounds.<locals>.CustomIndexer.get_window_boundsNr   r   r   r   r   r<   Ê  s   r<   r.   r9   r   T©Úpairwise©r   r   r   r   r   r   r"   ÚnextÚiterrm   rl   ©r<   r   Z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 sX0    Y  tjt|d�� tt|ƒƒ W d   ƒ n1 s’0    Y  tjt|d�� |j	dd� W d   ƒ n1 sÌ0    Y  tjt|d�� |j
dd� W d   ƒ n1 �s0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )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<   à  s   r<   r.   zstart and endr   Tr¡   r£   r¦   r   r   r   Útest_unequal_bounds_to_objectÞ  s    &**r¨   )4Únumpyr/   r   Zpandasr   r   r   r   r   Zpandas._testingZ_testingr#   Zpandas.api.indexersr   r   Zpandas.core.indexers.objectsr	   r
   r   Zpandas.tseries.offsetsr   r    r(   rF   rK   ÚmarkZparametrizerŠ   rj   rO   rS   rV   rW   rX   Úfilterwarningsri   rk   rs   ry   r|   r€   rš   r   rˆ   r‰   r‹   Zfrom_arraysr›   r‘   r�   r§   r¨   r   r   r   r   Ú<module>   s:  
 "üöñöñüÕþ5
(
öþþþ


þþ

	ÿ
ÿ(ýþ"÷þ
üýýÿ ÿç÷õþ4
þ