U
    sVc                     @   s   d dl m Z 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
mZmZmZ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 dd Ze ZG dd dZG d	d
 d
ZG dd dZ G dd dZ!G dd dZ"G dd dZ#dS )    )datetime	timedeltaN)Categorical	DataFrameDatetimeIndexIndexNaTPeriodPeriodIndex
RangeIndexSeries	TimedeltaTimedeltaIndex	Timestamp
date_rangeisnatimedelta_rangeto_timedelta)nanopsc               
      s   t jdddt jdddt jdddt jdddt jdddjddt jdddt jdddg} tj	
d  fdd| D }| | }|S )N
   a)namez
US/Easterntzc                    s   g | ]}t  |d dqS )r   )indexr   )r   ).0idxarr K/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/reductions/test_reductions.py
<listcomp>,   s     zget_objs.<locals>.<listcomp>)tmZmakeBoolIndexZmakeIntIndexZmakeFloatIndexZmakeDateIndextz_localizeZmakePeriodIndexZmakeStringIndexnprandomrandn)Zindexesseriesobjsr   r   r    get_objs    s    
r)   c                   @   s  e Zd Zejdddgejdedd Zejdddgejddd	d
edddfddgdd Z	ejdddgdd Z
ejdddgejdddgdd Zdd Zejdddgddggdd Zejd d!d"gd#d$ Zd%d& Zd'S )(TestReductionsopnamemaxminobjc                 C   s~   t || }t|ts&t |j| }ntt |j| |jd}t |dd d k	rn|dd}|j|kszt	n||kszt	d S )N)Zordinalfreqr   M8[ns]int64)
getattr
isinstancer
   valuesr	   Zasi8r/   astypevalueAssertionError)selfr+   r.   resultexpectedr   r   r    test_ops6   s    
zTestReductions.test_opsz
dtype, val)object       @)float64r=   datetime64[ns]        )Int64   )booleanTc                    s  |} fdd}|d g d}|t || s2t|t ||ddsJt|g  d}|t || sjt|t ||ddst dkrd S |d |g d}t || |kst|t ||ddst|d |d g d}t || |kst|t ||dds
td S )Nc                    s.    dkr| t kS  dkr"| tjkS t| S d S )Nr?   )rC   rE   )r   pdNAr   )resdtyper   r    check_missingU   s
    
z4TestReductions.test_nanminmax.<locals>.check_missingrI   Fskipnar<   )r2   r7   )r8   r+   rJ   valindex_or_seriesklassrK   r.   r   rI   r    test_nanminmaxF   s     zTestReductions.test_nanminmaxc                 C   s   |}|t krd| nd| }|ttdddg}t|| dksDtt||dd}|tkrlt|sxtn|dksxt|ttdddtg}t|| dkstt||dd}|tkrt|stn|dkstd S )	Nargr   r@   rA   rB   FrL   )r   r   r   r2   r7   r   r$   isnan)r8   r+   rO   rP   arg_opr.   r9   r   r   r    test_nanargminmaxq   s    z TestReductions.test_nanargminmaxrJ   r0   zdatetime64[ns, UTC]c              	   C   s   |}|t krd| nd| }|g |d}t|| tks<tt||ddtksTttjtdd t||  W 5 Q R X tjtdd t||dd W 5 Q R X d S )NrR   r   rI   FrL   zempty sequencematch)r   r2   r   r7   pytestraises
ValueError)r8   r+   rO   rJ   rP   rU   r.   r   r   r    test_nanops_empty_object   s    z'TestReductions.test_nanops_empty_objectc                 C   s  t tjddd}| dks"t| dks2tt tjdtjdg}| dksVt| dksft|jd	d
dkszt|jd	d
dkstt tjg}| dkst| dkst|jd	d
dkst|jd	d
dkstt ttdddtdddtg}| dkst| dks&t|jd	d
dks<t|jd	d
dksRtt tg}| dksnt| dkst|jd	d
dkst|jd	d
dkstd S )N   r1   rI   r      rB   rD      FrL   rS   r@   rA   )	r   r$   arangeargminr7   argmaxnanr   r   )r8   r.   r   r   r    test_argminmax   s.     
zTestReductions.test_argminmaxzop, expected_colr   bc                 C   s\   t tdddddgd}|jtdd|d	< t||d
d}|| d }t|| d S )Nz2016-01-01 00:00:00r_   UTC)periodsr   r   )columnsi  secondsre   rB   axis)	r   r   r   subtractr   r2   renamer"   assert_series_equal)r8   opZexpected_coldfr9   r:   r   r   r    test_same_tz_min_max_axis_1   s     z*TestReductions.test_same_tz_min_max_axis_1funcmaximumZminimumc                 C   s>   |}t dg|}t|}tt|||}t|| d S )NZ2019)rF   Zto_datetimer#   r   r2   r$   r"   ro   )r8   Ztz_aware_fixturers   r   rR   r:   r9   r   r   r    (test_numpy_reduction_with_tz_aware_dtype   s
    z7TestReductions.test_numpy_reduction_with_tz_aware_dtypec                 C   sV   t tddtgddtddtjgddd}ttddd}| }t|| d S )NrB   rD   timedelta64[ns]rI   rC   ABr_   )	r   r   r   r$   rc   r   sumr"   ro   )r8   rq   r:   r9   r   r   r    test_nan_int_timedelta_sum   s    z)TestReductions.test_nan_int_timedelta_sumN)__name__
__module____qualname__rY   markparametrizer(   r;   r   rQ   rV   r\   rd   rr   ru   r{   r   r   r   r    r*   5   s2   
 



r*   c                	   @   s  e Zd Zejddddddgdd Zd	d
 Zejdddgdd Zdd Z	dd Z
ejddddddg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ejdddgejd(g egeeeggd)d* Zd+d, Zd-d. Zd/S )0TestIndexReductionszstart,stop,step)r   i  r_   )i  r   i)@B r^   )r   r   )r   r      c                 C   s   t |||}|j }| }||ks*t|jdd}||ksBt|j }| }||ks`t|jdd}||ksxtt ||| }t| stt| std S NFrL   )r   Z_valuesr,   r7   r-   r   )r8   startstopstepr   r:   r9   Zresult2r   r   r    test_max_min_range   s    

z&TestIndexReductions.test_max_min_rangec                 C   s   t dddg}|jstt dtjddg}|jr4t||fD ]L}| tdksTt| tdksht| dksxt|	 dks<tq<d S )N1 days2 daysz3 daysr   r   rD   )
r   is_monotonic_increasingr7   r$   rc   r-   r   r,   ra   rb   r8   idx1idx2r   r   r   r    test_minmax_timedelta64   s    

z+TestIndexReductions.test_minmax_timedelta64rp   r-   r,   c                 C   s`   t g }t|| tkstt tg}t|| tks:tt tttg}t|| tks\td S N)r   r2   r   r7   r8   rp   r.   r   r   r    !test_minmax_timedelta_empty_or_na  s    
z5TestIndexReductions.test_minmax_timedelta_empty_or_nac              	   C   s
  t dddd}t|tdks$tt|tdks:td}tjt|d tj|dd W 5 Q R X tjt|d tj|dd W 5 Q R X t	|dkstt
|d	kstd}tjt|d tj	|dd W 5 Q R X tjt|d tj
|dd W 5 Q R X d S )
Nz
16815 daysz
16820 daysDr/   $the 'out' parameter is not supportedrW   r   outr]   )r   r$   r-   r   r7   r,   rY   rZ   r[   ra   rb   )r8   tderrmsgr   r   r    test_numpy_minmax_timedelta64  s    z1TestIndexReductions.test_numpy_minmax_timedelta64c                 C   s  t dd tdD }| }| }ttdd}||ks@t|  }|d |ks\t|d}t	t
dd	}||kst| }td
}||kst|  }|d |kst| }td}||kst|  }|d |kst| }tt | j }||kst|  }|d |ks<tt tdtdg}|  tddksltt tdtdtdg}|  tddkstd S )Nc                 S   s"   g | ]}t d t|| d qS Z20130101ri   r   r   r   ir   r   r    r!   2  s     z:TestIndexReductions.test_timedelta_ops.<locals>.<listcomp>r   	   ri   r   g?i(
  msz00:00:09z00:01:21z
2015-02-03z
2015-02-07r^   )daysz
2015-02-15   )r   rangediffmeanr   r   r7   to_frameZquantiler   r$   Ztimedelta64medianrz   stddropnar4   r   )r8   sr   r9   r:   r   r   r    test_timedelta_ops.  sB    
z&TestIndexReductions.test_timedelta_opsr+   ZskewZkurtZsemprodvarc              	   C   s   t dd tdD }| }dd| dd| dd	| d
g}tjt|d t||  W 5 Q R X tjt|d t| |dd W 5 Q R X d S )Nc                 S   s"   g | ]}t d t|| d qS r   r   r   r   r   r    r!   f  s     zDTestIndexReductions.test_invalid_td64_reductions.<locals>.<listcomp>r   |zreduction operation 'z' not allowed for this dtypezcannot perform z with type timedelta64\[ns\]zdoes not support reduction ''rW   F)Znumeric_only)	r   r   r   joinrY   rZ   	TypeErrorr2   r   )r8   r+   r   r   msgr   r   r    test_invalid_td64_reductionsc  s    


z0TestIndexReductions.test_invalid_td64_reductionsc                 C   s   |}t dddg|d}|js tt dtddtg|d}|jr@t||fD ]T}| td|dksdt| td|dks|t| dkst| dksHtqHd S )N
2011-01-01
2011-01-02
2011-01-03r   r   rD   )	r   r   r7   r   r-   r   r,   ra   rb   )r8   Ztz_naive_fixturer   r   r   r   r   r   r    test_minmax_tzx  s    
 
z"TestIndexReductions.test_minmax_tzc                 C   s`   t g }tt|| stt tg}tt|| s:tt tttg}tt|| s\td S r   )r   r   r2   r7   r   r   r   r   r    test_minmax_nat_datetime64  s    
z.TestIndexReductions.test_minmax_nat_datetime64c              	   C   s:  t dddg}|j }t|}||ks.t|j }t|}||ksNtd}tjt|d tj|dd W 5 Q R X tjt|d tj|dd W 5 Q R X |j	 }t	|}||kst|j
 }t
|}||kstd}tjt|d tj
|dd W 5 Q R X tjt|d tj	|dd W 5 Q R X d S )NrB   rD   r_   r   rW   r   r   )r   r4   r,   r$   r7   r-   rY   rZ   r[   rb   ra   )r8   r   r:   r9   r   r   r   r    test_numpy_minmax_integer  s.    







z-TestIndexReductions.test_numpy_minmax_integerc              	   C   s   t ddd}t|}|dks"tt|}|dks8td}tjt|d tj|dd W 5 Q R X tjt|d tj|dd W 5 Q R X d S )Nr   r   r_   r   r   rW   r   )r   r$   r,   r7   r-   rY   rZ   r[   )r8   r   r9   r   r   r   r    test_numpy_minmax_range  s    

z+TestIndexReductions.test_numpy_minmax_rangec              	   C   s  t ddd}t|tdks"tt|tdks8td}tjt|d tj|dd	 W 5 Q R X tjt|d tj|dd	 W 5 Q R X t	|dkstt
|d
kstd}tjt|d tj	|dd	 W 5 Q R X tjt|d tj
|dd	 W 5 Q R X d S )N
2016-01-15
2016-01-20r   endz2016-01-15 00:00:00z2016-01-20 00:00:00r   rW   r   r   r]   )r   r$   r-   r   r7   r,   rY   rZ   r[   ra   rb   )r8   Zdrr   r   r   r    test_numpy_minmax_datetime64  s    z0TestIndexReductions.test_numpy_minmax_datetime64c                 C   s   t tdddgdd}|jrt|dd  js0tt dtddtgdd}|jrPt||fD ]4}| tdddkstt| tdddksXtqX| dkst| dkst| dkst| d	kstd S )
Nr   r   r   r   r   rB   r   r_   rD   )	r
   r   r   r7   r-   r	   r,   ra   rb   r   r   r   r    test_minmax_period  s    
 
z&TestIndexReductions.test_minmax_perioddatac                 C   s(   t |dd}t|| }|tks$td S )NMr   )r
   r2   r   r7   )r8   rp   r   r.   r9   r   r   r    test_minmax_period_empty_nat  s    z0TestIndexReductions.test_minmax_period_empty_natc              	   C   s  t jddd}t|tdddks(tt|tdddksBtd}tjt	|d tj|dd	 W 5 Q R X tjt	|d tj|dd	 W 5 Q R X t
|dkstt|d
kstd}tjt	|d tj
|dd	 W 5 Q R X tjt	|d tj|dd	 W 5 Q R X d S )Nr   r   r   r   r   r   rW   r   r   r]   )rF   Zperiod_ranger$   r-   r	   r7   r,   rY   rZ   r[   ra   rb   )r8   prr   r   r   r    test_numpy_minmax_period  s    z,TestIndexReductions.test_numpy_minmax_periodc              	   C   s   t jtdtddd}d}tjt|d |  W 5 Q R X d}tjt|d |  W 5 Q R X t jtdtddd}| d	kst| d
kstd S )NZaabbcaZcabF
categoriesorderedzwCategorical is not ordered for operation min\nyou can use .as_ordered\(\) to change the Categorical to an ordered one\nrW   zwCategorical is not ordered for operation max\nyou can use .as_ordered\(\) to change the Categorical to an ordered one\nTcre   )	rF   ZCategoricalIndexlistrY   rZ   r   r-   r,   r7   )r8   cir   r   r   r    test_min_max_categorical  s    z,TestIndexReductions.test_min_max_categoricalN)r|   r}   r~   rY   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r      s:   


5

 r   c                   @   s  e Zd Zdd Zejddddddgejd	d
dgejdddgdd Zejdddgdd Zejddgejddddgdd Z	ejdddddgdd Z
dd Zejd	d
dgejddd gd!d" Zejd	d
dgejdd#dgd$d% Zejdd&ejd'd
dgd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zejd4eegd5d6 Zd7d8 Zejd9d:d;gejd'd
dgd<d= Zejd9d:d;gejd>dd?gd?dgdejgejdggd@dA ZejddddBdgejd9d:d;gejd'd
dgejdCdDdDdDgddgddggfdEdEdEgd
d
gd
d
ggfejejejgejejgdd
ggfdDejdDgejdgddggfdEejdEgd
ejgd
d
ggfdEejdDgd
dgd
dggfgdFdG ZejdHd;dd
dgfd:dd
d
gfgdIdJ ZdKdL Z dMdN Z!dOdP Z"ejdQeg ddRe#fedSdTdUge$fedVdWge$fedSdSdTdTd?ejdUge$fgdXdY Z%dZd[ Z&d?S )\TestSeriesReductionsc              	   C   s   t tjd}| }tj|dd< tj|dd< t| sFt	tjdd
d}tj|d d df< tdd t| |  W 5 Q R X tj|d	d
}t| st	d S )Nr   r]      d   Zf4rD   mode.use_inf_as_naTrB   rk   )r   r$   r%   r&   copyinfrc   isinfrz   r7   r5   rF   option_contextr"   assert_almost_equalr   nansumall)r8   r   s2r   rH   r   r   r    test_sum_inf,  s    z!TestSeriesReductions.test_sum_infrJ   r>   ZFloat32rC   rE   r<   use_bottleneckTFzmethod, unit)rz           )r         ?c              	   C   sF  t d|. tg |d}t|| }||ks4tt||dd}||ksPtt||dd}t|sltt||dd}||k t||ddd}||kstt||ddd}t|stt||d	dd}||kstt||d	dd}t|stttjg|d}t|| }||ks&tt||dd}||ksDtt||dd}t|sbtt||dd}||k t||ddd}||kstt||ddd}t|stttjdg|d}t|| }|d
kstt||dd}|d
kstt||dd}|d
ks"tt||dd}|d
ks@tt||ddd}|d
ks`ttt	d|d}t||d|k
 sttdg|d}t||dd}t|stt||d	dd}t|stttjg|d}t||dd}t|stttjdg|d}t||dd}t|s8tW 5 Q R X d S )Nr   rI   r   )	min_countrB   TrL   )rM   r   Fr   )r   r   rD   )rF   r   r   r2   r7   r   r$   rc   r   emptyr   )r8   methodunitr   rJ   r   r9   rq   r   r   r    
test_empty>  sn    zTestSeriesReductions.test_emptyc              	   C   s  t dtjtjtjgtjddgd}tt t	||dd}W 5 Q R X t d|gddgd}t
|| tt t	||ddd	}W 5 Q R X t d|gddgd}t
|| tt t	||ddd	}W 5 Q R X t dtjgddgd}t
|| d S )
NrB   )r   re   )r   rB   r   r   levelr   re   )r   r   )r   r$   rc   rF   Z
MultiIndexZfrom_productr"   assert_produces_warningFutureWarningr2   ro   )r8   r   r   r   r9   r:   r   r   r    test_empty_multi  s     z%TestSeriesReductions.test_empty_multir   r   ZFloat64c                 C   sT   t g |d}t|| }|tjks&tt tjg|d}t|| }|tjksPtd S NrI   )r   r2   rF   rG   r7   r$   rc   )r8   r   rJ   Zeserr9   Znserr   r   r    &test_ops_consistency_on_empty_nullable  s    z;TestSeriesReductions.test_ops_consistency_on_empty_nullabler   r   r   c              	   C   s   t ttd| }t|sttg dd}|dkrjddddg}tjt|d t ||  W 5 Q R X nt || }|t	kstd S )	NrI   m8[ns]r   r   zoperation 'var' not allowedz.cannot perform var with type timedelta64\[ns\]z does not support reduction 'var'rW   )
r2   r   floatr   r7   r   rY   rZ   r   r   )r8   r   r9   Ztdserr   r   r   r    test_ops_consistency_on_empty  s    z2TestSeriesReductions.test_ops_consistency_on_emptyc                 C   s0   t dtjgddgd}t|}t|d d S )Nr   r   rB   r   )r   r$   rc   r   r"   r   )r8   serr9   r   r   r    test_nansum_buglet  s    
z'TestSeriesReductions.test_nansum_bugletZint32r1   c              	   C   s   t d|| tjd|d}t|}|jdd}t||jddksHt|jdd}t|dksdt|j	dd}t||d kstW 5 Q R X d S )	Nr   @KL rI   FrL   r1   r   rS   )
rF   r   r$   r`   r   rz   intr7   r-   r,   r8   r   rJ   vr   r9   r   r   r    test_sum_overflow_int  s    z*TestSeriesReductions.test_sum_overflow_intZfloat32c              	   C   s   t d| tjd|d}t|}|jdd}||j|dksDt|jdd}tt	|dsdt|j
dd}tt	||d stW 5 Q R X d S )Nr   r   rI   FrL   r   rS   )rF   r   r$   r`   r   rz   r7   r-   Zallcloser   r,   r   r   r   r    test_sum_overflow_float  s    z,TestSeriesReductions.test_sum_overflow_float)r   r   r0   zM8[ns, UTC]rM   c                 C   s<   t g |dj|dtkstt g |dj|dtks8td S )NrI   rL   )r   r-   r   r7   r,   )r8   rJ   rM   r   r   r    +test_empty_timeseries_reductions_return_nat
  s    z@TestSeriesReductions.test_empty_timeseries_reductions_return_natc              	   C   s|   t dd}t||d}t |}t |}||ks8t| }||ksLtd}tjt|d t j||d W 5 Q R X d S NrB   rA   r   r   rW   r   )r$   r`   r   ra   r7   rY   rZ   r[   r8   r   r   r9   r:   r   r   r   r    test_numpy_argmin  s    

z&TestSeriesReductions.test_numpy_argminc              	   C   s|   t dd}t||d}t |}t |}||ks8t| }||ksLtd}tjt|d t j||d W 5 Q R X d S r   )r$   r`   r   rb   r7   rY   rZ   r[   r   r   r   r    test_numpy_argmax#  s    

z&TestSeriesReductions.test_numpy_argmaxc                 C   s   t  d}tj|dd< ||  | ks4tt|jddsHt|	 }||  | ksht|j
j 
| |j kst|tj }t| stttddd}| }|d	ksttj|d	< | }|d
kstd S )Nr'   r]      FrL   20130102r   rg   r   rB   )r"   makeStringSeriesrn   r$   NaNidxminr-   r7   r   r   r   r4   tolistra   rc   r   r   )r8   string_seriesnonaallnar   r9   r   r   r    test_idxmin4  s    $

z TestSeriesReductions.test_idxminc                 C   st  t  d}tj|dd< ||  | ks4tt|jddsHt|	 }||  | ksht|j
j 
| |j kst|tj }t| stddlm} t|dd	d
}| }|dksttj|d< | }|dksttdddgdddg}| }|dks t| }|dks6tt|j
|j
}| }|dksZt| }|dksptd S )Nr'   r]   r   FrL   r   )r   r   r   r   r^   rB   rD   r_   g?g @g@)r"   r   rn   r$   r   idxmaxr,   r7   r   r   r   r4   r  rb   rc   pandasr   r   r  )r8   r  r  r  r   r   r9   r   r   r    test_idxmaxR  s4    $

z TestSeriesReductions.test_idxmaxc                 C   sD   t  }|dk}| rt| s(ttddg}| s@td S )Nr   abcT)r"   ZmakeTimeSeriesr   r7   anyr   )r8   tsZbool_seriesr   r   r   r    test_all_any  s    z!TestSeriesReductions.test_all_anyrP   c                 C   sJ   |dddg}t |rtt |s*ttdddg}t |sFtd S )Nr   rB   rD   r_   )r$   r   r7   r  r   )r8   rP   r   r   r   r    test_numpy_all_any  s
    z'TestSeriesReductions.test_numpy_all_anyc              
   C   s  t tjdg}t tjdg}|jdds,t|jdds<t|jddsLt|jddr\tt ddddddgddddddgd}tt$ t	|jddt dddg W 5 Q R X tt$ t	|jddt dddg W 5 Q R X d	}t
jt|d
* tt |jddd W 5 Q R X W 5 Q R X t
jt|d
* tt |jddd W 5 Q R X W 5 Q R X |jddszt|jddrtd S )NTFrL   r   rB   rD   r   r   z5Option bool_only is not implemented with option levelrW   )	bool_onlyr   )r  )r   r$   rc   r   r7   r  r"   r   r   ro   rY   rZ   NotImplementedError)r8   s1r   r   r   r   r   r    test_all_any_params  s(    $((""z(TestSeriesReductions.test_all_any_paramsbool_agg_funcr  r   c                 C   s:   t dddddgtd}t|||d}d}||ks6td S )	Nr   re   r   derI   rL   T)r   r<   r2   r7   )r8   r  rM   r   r9   r:   r   r   r    test_any_all_object_dtype  s    z.TestSeriesReductions.test_any_all_object_dtyper   Nc                 C   s8   t |}t||dd}|dko&d |k}||ks4td S )NFrL   r  )r   r2   r7   )r8   r   r  r   r9   r:   r   r   r    !test_any_all_object_dtype_missing  s    z6TestSeriesReductions.test_any_all_object_dtype_missingZUInt64zdata,expected_datar   rB   c           	      C   sP   t ||d}|| |dk }t|||d}|tjkr@|tjksL||ksLtd S )NrI   r   rL   )r   r2   rF   rG   r7   )	r8   r  rM   r   rJ   Zexpected_datar   r:   r9   r   r   r    "test_any_all_nullable_kleene_logic  s    z7TestSeriesReductions.test_any_all_nullable_kleene_logiczbool_agg_func,expectedc              	   C   sh   t ddddddgddddddgdd}tt t||dd}W 5 Q R X t |dd	}t|| d S )
NFTr   rB   rD   rE   )r   rJ   r   rI   )r   r"   r   r   r2   ro   )r8   r  r:   r   r9   r   r   r    test_any_all_boolean_level  s    z/TestSeriesReductions.test_any_all_boolean_levelc                 C   s@   t ddgddgd}|jddd}tddg}t|| d S )NTFrB   rD   rw   )rl   r  )r   r  r   r"   ro   )r8   rq   r9   r:   r   r   r    test_any_axis1_bool_only  s    z-TestSeriesReductions.test_any_axis1_bool_onlyc                 C   sT  t dddj}t|}t|}| s*t| s6t| sBt| sNt|  s^t|  snt|d}t|}t|}| st| st| st| st|  st|  st||d  }t|}t|}| st| rt| st| r,t|  s>t|  rPtd S )Nz
1995-01-02r_   r   rf   r   )r   _datar   r   r   r7   r  r#   )r8   Zdtar   rq   Ztdar   r   r    test_any_all_datetimelike  s6    
z.TestSeriesReductions.test_any_all_datetimelikec                 C   s  t dddd}t|td }| }|dks2t| }|dksFttj|d< | }|dksdt| }|dksxttt ddd	}tt d
dd	}t|| }t|| }t	
|| ||  }t	
|| | }td}||kst| }td}||kstd S )Nz2012-1-1r_   r   rg   r/   Z20120101r   rD   rB   r   Z20120102r   r   )r   r   r   r  r7   r  r$   rc   absr"   ro   r,   r   r-   )r8   Zdtir   r9   r  r   r:   r   r   r    test_timedelta64_analytics   s0    
z/TestSeriesReductions.test_timedelta64_analyticsztest_input,error_typerI   foobarZbaz)rB   )rD   c              	   C   s   d}t j||d |  W 5 Q R X t j||d |jdd W 5 Q R X d}t j||d |  W 5 Q R X t j||d |jdd W 5 Q R X dS )zU
        Cases where ``Series.argmax`` and related should raise an exception
        zbreduction operation 'argmin' not allowed for this dtype|attempt to get argmin of an empty sequencerW   FrL   zbreduction operation 'argmax' not allowed for this dtype|attempt to get argmax of an empty sequenceN)rY   rZ   r  r  )r8   Z
test_inputZ
error_typer   r   r   r    test_assert_idxminmax_raisesJ  s    z1TestSeriesReductions.test_assert_idxminmax_raisesc              	   C   s   t dtj tjtjg}| dks(tt|jdds>t| dksNtt|jddsdtt	ddN | dkstt|jddst| dkstt|jdd W 5 Q R X d S )Nr   rB   FrL   rD   r   T)
r   r$   r   rc   r  r7   rT   r  rF   r   )r8   r   r   r   r    test_idxminmax_with_infj  s    z,TestSeriesReductions.test_idxminmax_with_inf)'r|   r}   r~   r   rY   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r   r   r  r  r  r$   rc   r  rF   rG   r  r  r  r  r  r[   r   r"  r#  r   r   r   r    r   '  s    `

-

 	"

**
r   c                	   @   s   e Zd Zejdeeegeeedgeededggdd Z	ejde
eege
eedge
ededggdd Zdd	 Zd
d ZdS )TestDatetime64SeriesReductionsnat_serZnatc                 C   sL   |  tkst| tks t|j ddtks4t|jddtksHtd S r   r-   r   r7   r,   )r8   r%  r   r   r    test_minmax_nat_series  s    
z5TestDatetime64SeriesReductions.test_minmax_nat_seriesnat_dfc                 C   s\   |  d tkst| d tks(t|j ddd tks@t|jddd tksXtd S )Nr   FrL   r&  )r8   r(  r   r   r    test_minmax_nat_dataframe  s    
z8TestDatetime64SeriesReductions.test_minmax_nat_dataframec                 C   s   t dd}|tjt|}| }| }t|t	s>t
t|t	sLt
||d ks\t
||d kslt
| |d kst
| |d kst
d S )N1/1/2000z
12/31/2000r   rS   )r   Ztaker$   r%   Zpermutationlenr-   r,   r3   r   r7   )r8   rngZrng2Zthe_minZthe_maxr   r   r    test_min_max  s    
z+TestDatetime64SeriesReductions.test_min_maxc              
   C   s   t dddd}ddddddddddg
}t|tjt||d}|j }t|jj	d	 }t
|tsjt||ksvt|j }t|jj	d
 }t
|tst||kstd S )Nr*  r   Z4hr  rx   ry   C)TSVLrS   r   )r   r   r$   r%   r&   r+  r/  r,   r   Ziatr3   r7   r-   )r8   r,  Zlvlsrq   r9   expr   r   r    test_min_max_series  s    

z2TestDatetime64SeriesReductions.test_min_max_seriesN)r|   r}   r~   rY   r   r   r   r   r   r'  r   r)  r-  r3  r   r   r   r    r$  }  s$   



r$  c                   @   s   e Zd Zejdddgdd Zejdededfededfedej	g edfd	d
dgdd
d	gfd	d
dej	gdd
d	gfgejdddgdd Z
ejdddgejdddgdd Zejdddgejdddgdd ZdS )TestCategoricalSeriesReductionsfunctionr-   r,   c              	   C   sL   t tddddgdd}d| }tjt|d t||  W 5 Q R X d S )	Nr   re   r   r  F)r   z)Categorical is not ordered for operation rW   )r   r   rY   rZ   r   r2   )r8   r5  catr   r   r   r    test_min_max_unordered_raises  s    
z=TestCategoricalSeriesReductions.test_min_max_unordered_raiseszvalues, categoriesr
  ZcbarB   rD   r_   c                 C   sJ   t t||dd}t||dd}|dkr2|d n|d }||ksFtd S )NTr   rL   r-   r   rD   )r   r   r2   r7   )r8   r4   r   r5  r6  r9   r:   r   r   r    test_min_max_ordered  s    z4TestCategoricalSeriesReductions.test_min_max_orderedrM   TFc                 C   s<   t ttjgddgdd}t|||d}|tjks8td S )NrB   rD   Tr   rL   r   r   r$   rc   r2   r7   )r8   r5  rM   r6  r9   r   r   r    "test_min_max_ordered_with_nan_only  s    zBTestCategoricalSeriesReductions.test_min_max_ordered_with_nan_onlyc                 C   sh   t tddtjdgddgdd}t|||d}|dkrV|dkrDdnd}||ksdtn|tjksdtd S )Nr   re   Tr   rL   r-   r9  )r8   r5  rM   r6  r9   r:   r   r   r    test_min_max_skipna  s    z3TestCategoricalSeriesReductions.test_min_max_skipnaN)r|   r}   r~   rY   r   r   r7  r   r$   rc   r8  r:  r;  r   r   r   r    r4    s&   

r4  c                   @   s  e Zd Zejddeg ejdfdeg ejdfgdd Z	ejdddddd	gdgfddddd	d
d
d
gdd
gfddddd	gdgfddddd	d
d
d
gdd
gfgejde
ejd ejd  dd Zejdddgfddejgfgdd Zejdddgdgdgfddgejgdgfgdd Zejdddgdgfddgejgfgdd Zejdddddgddgfdejgejddgfgd d! Zejddd"d#d$gd%d&gfdejgejd%d&gfgd'd( Zejddedd	gdd	gd)ed*gdd*gd)ed
dgd
d	dgdd+fdeejgdd	gd)eejd*gdd*gd)eejd
dgd
d	dgdd+fgd,d- Zejddd.gdd.gfdd.gdd.gfgd/d0 Zd1d2 Zd3d4 Zejd5d6d7ddd8d9gedgejdejfd6d7ddd8d9gedgejdejfd8d:d8ged8gejdejfgd;d< Zejd5d6d7dd8d9ged=d7d>d8d9gejdejfd8d:d8d:d
ged:d8gejdejfgd?d@ ZdAS )BTestSeriesModezdropna, expectedTrI   Fc                 C   s(   t g tjd}||}t|| d S r   )r   r$   r>   moder"   ro   r8   r   r:   r   r9   r   r   r    test_mode_empty  s    
zTestSeriesMode.test_mode_emptyzdropna, data, expectedrB   rD   r_   dtZ
AllIntegerZFloatc                 C   s2   t ||d}||}t ||d}t|| d S r   r   r=  r"   ro   )r8   r   r   r:   r@  r   r9   r   r   r    test_mode_numerical  s    
z"TestSeriesMode.test_mode_numericalr   c                 C   s8   t dddtjtjg}||}t |}t|| d S )NrB   rD   )r   r$   rc   r=  r"   ro   r>  r   r   r    test_mode_numerical_nan  s    
z&TestSeriesMode.test_mode_numerical_nanz'dropna, expected1, expected2, expected3re   r!  rc   c                 C   s   dgd dgd  }t |dd}||}t |dd}t|| dddtjtjtjg}t |td}||}t |td}t|| dddtjtjtjg}t |tdt}||}t |td}t|| d S )	Nr   rD   re   r_   r   rI   r   r!  )	r   r=  r"   ro   r$   rc   r<   r5   str)r8   r   	expected1	expected2	expected3r   r   r9   r   r   r    test_mode_str_obj  s    


z TestSeriesMode.test_mode_str_objzdropna, expected1, expected2r   c                 C   sl   t dddg}||}t |}t|| t dddtjtjtjg}||}t |td}t|| d S )NrB   r   rI   )r   r=  r"   ro   r$   rc   r<   )r8   r   rE  rF  r   r9   r:   r   r   r    test_mode_mixeddtype6  s    

z#TestSeriesMode.test_mode_mixeddtype
1900-05-03r   
2013-01-02c                 C   sx   t dddddgdd}||}t |dd}t|| t dddddddgdd}||}t |dd}t|| d S )Nr   rK  rJ  rc   r0   rI   rA  r8   r   rE  rF  r   r9   r   r   r    test_mode_datetimeE  s*     
	
z!TestSeriesMode.test_mode_datetime-1 days0 daysr   2 min1 dayc              	   C   sz   t dddddgdd}||}t |dd}t|| t dddd	d
d
ddgdd}||}t |dd}t|| d S )Nr   rN  rO  rc   rv   rI   rQ  z-1 dayz-1 day 2 minrP  rA  rL  r   r   r    test_mode_timedeltah  s,    
 


z"TestSeriesMode.test_mode_timedelta)r   r   r   c              	   C   s   t tddtjtjg}||}t |dd}t|| t tdddtjtjg}||}t |dd}t|| t tdddddtjtjgdddgdd}||}t |dd}t|| d S )	NrB   rD   categoryrI   r   r_   Tr   )r   r   r$   rc   r=  r"   ro   )r8   r   rE  rF  rG  r   r9   r   r   r    test_mode_category  s$    

  
z!TestSeriesMode.test_mode_category            c                 C   sr   t dddgtjd}||}t |tjd}t|| t ddgtjd}||}t |tjd}t|| d S )NrB   rU  rI   )r   r$   Zuint64r=  r"   ro   rL  r   r   r    test_mode_intoverflow  s    

z$TestSeriesMode.test_mode_intoverflowc              	   C   sf   t dtjg}t dddtjtjg}tt" |jdd}| jdd}W 5 Q R X t	|| d S )Nr   rB   F)r   T)Zdrop)
r   r$   rc   r"   r   UserWarningr=  Zsort_valuesZreset_indexro   )r8   r:   r   r9   r   r   r    test_mode_sortwarning  s    z$TestSeriesMode.test_mode_sortwarningc                 C   s>   t dddtjgdd}| }t ddidd}t|| d S )NTFrE   rI   r   )r   rF   rG   r=  r"   ro   )r8   r   r9   r:   r   r   r    test_mode_boolean_with_na  s    z(TestSeriesMode.test_mode_boolean_with_nazarray,expected,dtyper   y              ?y      ?      ?y      ?       @y               @c                 C   s    t ||d }t|| d S r   rA  r8   arrayr:   rJ   r9   r   r   r    test_single_mode_value_complex  s    z-TestSeriesMode.test_single_mode_value_complexy                y      ?        c                 C   s    t ||d }t|| d S r   rA  rZ  r   r   r    test_multimode_complex  s    z%TestSeriesMode.test_multimode_complexN)r|   r}   r~   rY   r   r   r   r$   r>   r?  r   Z	typecodesrB  rc   rC  rH  rI  rM  rR  r   rT  rV  rX  rY  Z
complex128Z	complex64r\  r]  r   r   r   r    r<    s   "
	  
$






r<  )$r   r   Znumpyr$   rY   r  rF   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Zpandas._testingZ_testingr"   Zpandas.corer   r)   r(   r*   r   r   r$  r4  r<  r   r   r   r    <module>   s*   H "  S    ZA6