
    .i4                        d dl m Z  d dlmZ d dlZd dlZd dlZd dlmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ ej&                  d        Zd Zd	 Zd
 Zd Zej2                  j5                  d e	ddg       e	ddg       e	ddg      ej6                  j9                  ddgddgg      g      d        Zd Zd Zej2                  jA                  d      d        Z!ej2                  j5                  ddi d fddd id fdddiejD                  fdi dfddd idfdddiejD                  fg      d        Z#ej2                  j5                  ddejD                  fd ejD                  fd!d"d#g      d$        Z$d% Z%d& Z&ej2                  j5                  d'di g d(fddd ig d(fdddidejD                  dgfdddiejD                  ejD                  ejD                  gfdi g d)fddd ig d)fdddidejD                  dgfdddiejD                  ejD                  ejD                  gfg      d*        Z'ej&                  d+        Z(d, Z)d- Z*d. Z+y)/    )datetime)methodcallerN)	DataFrameIndexSeries	Timestamp)Grouper)
date_rangec                      t        t        j                  j                  d      j	                  d      t        dd            S )N     z1/1/2000)periodsindex)r   nprandomdefault_rngstandard_normalr
        e/var/www/app/trading-bot/venv/lib/python3.12/site-packages/pandas/tests/resample/test_time_grouper.pytest_seriesr      s6    
		a 006T2 r   c                 X   t        ddd      }| j                  |      }d }|j                  |      }| j                  d       j                  |      }|j                  j	                  d      |_        |j                  j	                  d      |_        t        j                  ||       y )NYErightfreqlabelclosedc                 (    | j                         dd  S )N)sort_valuesxs    r   fztest_apply.<locals>.f    s    }}rs##r   c                     | j                   S Nyearr#   s    r   <lambda>ztest_apply.<locals>.<lambda>$   
    QVV r   r   )r	   groupbyapplyr   	dropleveltmassert_series_equal)r   groupergroupedr%   appliedexpecteds         r   
test_applyr5      s    4ww?G!!'*G$ mmAG""#34::1=HMM++A.GM^^--a0HN7H-r   c                    t         j                  | d d d<   | j                  d       j                         }t	        ddd      }| j                  |      j                         }|j
                  |_        t        j                  ||       | j                  d      j                         }|j
                  |_        t        j                  ||       y )N   c                     | j                   S r'   r(   r#   s    r   r*   ztest_count.<locals>.<lambda>.   r+   r   r   r   r   )	r   nanr,   countr	   r   r/   r0   resample)r   r4   r1   results       r   
test_countr=   +   s    vvK!""#34::<H4ww?G  )//1F\\HN68,!!$'--/F\\HN68,r   c                     | j                  dd      j                         }| j                  d       j                  t        j                        }|j
                  |_        t        j                  ||       y )Nr   r   )r   c                     | j                   S r'   r(   r#   s    r   r*   z&test_numpy_reduction.<locals>.<lambda><   r+   r   )r;   prodr,   aggr   r   r/   r0   )r   r<   r4   s      r   test_numpy_reductionrB   :   s[    !!$w!7<<>F""#3488AH\\HN68,r   c                  &   d} t        dd|       }t        ddd|      }t        d	
      }|j                  |      \  }}|j	                  |d      }d }|j                  |      }t        j                  |j                  |j                         y )Nr   
2000-01-01D)startr   r      r   )opencloser   MEr   F)
group_keysc                     | d   | d   z  S )NrI   rH   r   )dfs    r   r%   ztest_apply_iteration.<locals>.fM   s    '{RZ''r   )	r
   r   r	   _get_grouperr,   r-   r/   assert_index_equalr   )	NindrN   tgr1   _r2   r%   r<   s	            r   test_apply_iterationrU   A   s    A
<c1
=C	A*#	6B	d	B$JGQ jjUj3G( ]]1F&,,1r   r   rG   r   abg?g@c                    t        |       j                  }t        dt        t	        |             i|       }d| d}t        j                  t        |      5  |j                  t        d             d d d        y # 1 sw Y   y xY w)NrV   r   zVOnly valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of ''matchrE   rK   )
type__name__r   rangelenpytestraises	TypeErrorr,   r	   )r   namerN   msgs       r   test_fails_on_no_datetime_indexre   U   sy     ;D	Cs5z*+5	9B	337&	;  
y	, &


7$%& & &s   A==Bc            	      b   d} t         j                  j                  d      j                  | df      }t	        |g d      }t        ddd      t        ddd      t        ddd      t        ddd      t        ddd	      gdz  |d
<   |j                  t        d
d            }t        j                  |j                  t        ddd            |d d d	          t        j                  |j                  t        ddd            |dd d	          t        j                  |j                  t        ddd            |dd d	          t        j                  |j                  t        ddd            |dd d	          t        j                  |j                  t        ddd	            |dd d	          y )N   r      ABCrE   columns  rG   r7      keyrE   rq   r   )r   r   r   r   r   r   r,   r	   r/   assert_frame_equal	get_group)ndatarN   r2   s       r   test_aaa_group_orderrw   j   s    	A99  #33QF;D	4!5	6Bq!q!q!q!q! 	

BuI jjU56G'++HT1a,@A2cc7K'++HT1a,@A2add8L'++HT1a,@A2add8L'++HT1a,@A2add8L'++HT1a,@A2add8Lr   c                 B   t         j                  j                  d      j                  d      }t	        |g d      }g ddz  |d<   t	        |g d      }t        t        dd	d	      t        dd	d      t        dd	d
      t        dd	d      t        dd	d      gdz  d      |d<   |j                  d      }|j                  t        dd            } t        ||              } t        ||              }t        ddddd      |_        t        j                  ||       y)?Check TimeGrouper's aggregation is identical as normal groupby.r   rg   rh   ri   rm   rG   r   r7   rh   rp   rh   rq   ro   rG   r7   rp   M8[ns]dtyperE   rr   
2013-01-01ns)rF   r   r   unitrc   N)r   r   r   r   r   r   r   r,   r	   getattrr
   r   r/   assert_equal)resample_methodrv   	normal_dfdt_dfnormal_grouped
dt_groupedr4   	dt_results           r   test_aggregate_normalr      s    99  #33G<D$(<=I&*Ied$89ET1a T1a T1a T1a T1a 	
 	 
E%L &&u-Nw5s;<J7w~79H4
O46IadHN OOHi(r   z7if TimeGrouper is used included, 'nth' doesn't work yet)reasonc            	      *   t         j                  j                  d      j                  d      } t	        | g d      }g ddz  |d<   t	        | g d      }t        dd	d	      t        dd	d      t        dd	d
      t        dd	d      t        dd	d      gdz  |d<   |j                  d      }|j                  t        dd            }|j                  d
      }t        dddd      |_
        |j                  d
      }t        j                  ||       y)ry   r   rz   ri   rm   r{   rh   rq   ro   rG   r7   rp   rE   rr   r   )rF   r   r   rc   N)r   r   r   r   r   r   r,   r	   nthr
   r   r/   rs   )rv   r   r   r   r   r4   r   s          r   test_aggregate_nthr      s    99  #33G<D$(<=I&*Ied$89Eq!q!q!q!q! 	

E%L &&u-Nw5s;<J!!!$HlaeTHNq!I(I.r   zmethod, method_args, unitsum	min_countr@   c                 (   t        dgdz  t        j                  gdz  z   t        ddd            } t	        | fi ||j                  d            }t        j                  d	d
gdd      }t        d|g|      }t        j                  ||       y )Nr   r   2017rh   r   )r   r   r   2Dz
2017-01-01z
2017-01-03r|   r~   r   g        )
r   r   r9   r
   r   r;   pdDatetimeIndexr/   r0   )methodmethod_argsr   serr<   exp_dtir4   s          r   !test_resample_entirely_nat_windowr      s     !qBFF8a<'z&!RV/W
XC0\&0K0d1CDFl;8RVWGsDk1H68,r   zfunc, fill_valueminmax)r   r   )r@   rG   )r:   r   c                    d}t         j                  j                  d      j                  |df      j	                  d      }t        |g d      }ddt         j                  ddgdz  |d	<   t        |g d      }t        t        d
dd      t        d
dd      t        j                  t        d
dd      t        d
dd      gdz  d      |d	<   |j                  d	      }|j                  t        d	d            } t        ||              } t        ||              }	t        |gdz  gdgg d      }
t        j                  ||
g      }|j                         }t!        dddd	|d	   j"                  j$                        }|j'                  d       |_        t+        j,                  ||	       |	j(                  j.                  d	k(  sJ y )Nrg   r   rh   int64ri   rm   rG   rp   rq   ro   r|   r}   rE   rr   r7   )r   rn   r   rF   r   r   rc   r   )r   r   r   r   astyper   r9   r   r   r   NaTr,   r	   r   concat
sort_indexr
   _valuesr   
_with_freqr   r/   rs   rc   )func
fill_valueru   rv   r   r   r   r   normal_resultr   padr4   dtis                r   test_aggregate_with_natr      s    	A99  #33QF;BB7KD$(<=I1bffa+a/Ied$89ET1a T1a FFT1a T1a 	
 	 
E%L &&u-Nw5s;<J1GND13M)
D)+I
j\A%&qc;O
PCyy--.H""$H
5\!!&&C ^^D)HN(I.??5(((r   c                  z   d} t         j                  j                  d      j                  | df      j	                  d      }t        |g d      }ddt         j                  ddgdz  |d	<   t        |g d      }t        t        d
dd      t        d
dd      t        j                  t        d
dd      t        d
dd      gdz  d      |d	<   |j                  d	      }|j                  t        d	d            }|j                         }|j                         }t        dgdg      }t        j                  ||g      }	|	j!                         }	t#        dddd	|d	   j$                  j&                        j)                  d       |	_        t-        j.                  |	|       |j*                  j0                  d	k(  sJ y )Nrg   r   rh   r   ri   rm   rG   rp   rq   ro   r|   r}   rE   rr   r   r7   r   r   r   )r   r   r   r   r   r   r9   r   r   r   r   r,   r	   sizer   r   r   r
   r   r   r   r   r/   r0   rc   )
ru   rv   r   r   r   r   r   r   r   r4   s
             r   test_aggregate_with_nat_sizer      s   
A99  #33QF;BB7KD$(<=I1bffa+a/Ied$89ET1a T1a FFT1a T1a 	
 	 
E%L &&u-Nw5s;<J"'')M!I
!QC
 Cyy--.H""$H5\!!&& j N 8Y/??5(((r   c                      t        t        dd            } d}| |k(  sJ t        t        ddd            } d}| |k(  sJ y )Nrj   hrr   zTimeGrouper(key='A', freq=<Hour>, sort=True, dropna=True, closed='left', label='left', how='mean', convention='e', origin='start_day')rD   )rq   r   originzTimeGrouper(key='A', freq=<Hour>, sort=True, dropna=True, closed='left', label='left', how='mean', convention='e', origin=Timestamp('2000-01-01 00:00:00')))reprr	   )r<   r4   s     r   	test_reprr   %  s[    'c,-F	. 
 X'cLABF	C 
 Xr   z$method, method_args, expected_values)rG   r   rG   )rG   rG   rG   c           	          t        dt        dddd            }|j                  d      }t        j                  g d	d
d      } t        | fi ||      }t        ||      }t        j                  ||       y )NrG   r   r   r   r   r   r   r   r   30min)z2017-01-01T00:00:00z2017-01-01T00:30:00z2017-01-01T01:00:00r|   r   )r   r
   r;   r   r   r   r/   r0   )r   r   expected_valuesr   	resampledr   r<   r4   s           r   test_upsample_sumr   8  sv     *VQStL
MCW%IME
 1\&0K0;FoU3H68,r   c            	      D    t        g dg ddt        dddd      	      S )
N)
      	   )2   <   r   )pricevolumez
01/01/2018r7   Wr   r   r   )r   r
   r   r   r   groupy_test_dfr   R  s%    6qsF r   c                    | j                         }d |j                  _        | |g}|D ]V  }t        j                  t
        d      5  |j                  d      j                  d      j                  d       d d d        X y # 1 sw Y   cxY w)Nz?Direct interpolation of MultiIndex data frames is not supportedrZ   r   1Dlinearr   )	copyr   rc   r`   ra   NotImplementedErrorr,   r;   interpolate)r   !groupy_test_df_without_index_namedfsrN   s       r   (test_groupby_resample_interpolate_raisesr   Z  s     )7(;(;(=%37%++0<
=C M]]S
 	M JJx ))$/;;8;L		M 	MM	M 	Ms   1BB	c           	         | j                         }d |j                  _        | |g}|D ]  }|j                  d      j	                  d       }dgdz  dgz   }g t        t        ddd	            t        d
      }t        j                  j                  ||gd|j                  j                  g      }t        dg di|      }t        j                  ||        y )Nr   c                 D    | j                  d      j                  d      S )Nr   r   r   r;   r   r#   s    r   r*   zEtest_groupby_resample_interpolate_with_apply_syntax.<locals>.<lambda>v  s    ajj&22(2C r   r      r   
2018-01-07z
2018-01-21r   )r   
2018-01-14namesr   )      $@gm۶m#@gn۶m۶#@g%I$I#@g۶m۶m#@g$I$I#@gI$I$#@      #@gm۶m"@gn۶m۶"@g%I$I"@g۶m۶m"@g$I$I"@gI$I$"@g      "@      &@rv   r   )r   r   rc   r,   r-   listr
   r   r   
MultiIndexfrom_arraysr   r/   rs   )	r   r   r   rN   r<   r   week_startingexpected_indr4   s	            r   3test_groupby_resample_interpolate_with_apply_syntaxr   k  s     )7(;(;(=%37%++0<
=C &0H%++C
 bT!
*\<dCD
l#
 }}00]#RXX]]+ 1 

  ( +
. 	fh/M&0r   c                 n   | j                  d      j                  d       }g d}t        j                  t	        d      t	        d      t	        d      g      j                  d      }t        j                  j                  ||gddg	      }t        d
g di|      }t        j                  ||d       y)zSimilar test as test_groupby_resample_interpolate_with_apply_syntax but
    with resampling that results in missing anchor points when interpolating.
    See GH#21351.r   c                 D    | j                  d      j                  d      S )N265hr   r   r   r#   s    r   r*   zNtest_groupby_resample_interpolate_with_apply_syntax_off_grid.<locals>.<lambda>  s    !**V$000A r   )r   r   r   r   z2018-01-18 01:00:00r   r   r   r   r   )r   r   r   r   F)check_namesN)r,   r-   r   r   r   as_unitr   r   r   r/   rs   )r   r<   r   r   r   r4   s         r   <test_groupby_resample_interpolate_with_apply_syntax_off_gridr     s    
 ##H-33AF F$$l#+,l#	
 gdm  ==,,	) - L
 ()H &(>r   ),r   operatorr   numpyr   r`   pandasr   r   r   r   r   pandas._testing_testingr/   pandas.core.groupby.grouperr	   pandas.core.indexes.datetimesr
   fixturer   r5   r=   rB   rU   markparametrizer   r   re   rw   r   xfailr   r9   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s    !      / 4  . --2( q!fsCjsCj
!!Aq6C:"67		&	&M,)> ST/ U/2 	A	a !$	a "&&)	Q	+q!1%	+q!266*
-
- RVV_ubffoz;M))	))X%)P& *	I	a ),	a 1bffa.1	a 266266266":;	Y	+q!9-	+q!Arvvq>2	+q!BFFBFFBFF#;<	
-
-  M"/0d?r   