U
    *ifO                  	   @   s  d dl mZ d dlmZ d dlZd dlmZ d dlZd dl	Z	d dl
mZ d dlm  mZ d dlm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 d dlm Z! d dl"m#  m$Z$ d dl%m#  m&Z& d:ddZ'd;ddZ(d<ddZ)d=ddZ*G dd dZ+G dd dZ,G dd dZ-dd Z.dd Z/e	j01ddd	dge	j01dd d!gd"d# Z2d$d% Z3e	j0j4d&d'd(d) Z5e	j01d*d!d d+d,d-gd.d/ Z6e	j01d0ed1ej7gd2d3 Z8d4d5 Z9e	j01dd d!d,d-d6d7gd8d9 Z:dS )>    )	timedelta)DecimalN)tzlocal)is_platform_windowsis_categorical_dtype)Categorical	DataFrameIndex
MultiIndexSeries	Timestamp
date_rangeisnanotnato_datetimeto_timedeltaTFh㈵>:0yE>c	              	      sX  t || }	|r| dkrtnd}
tdtdddi}t|
 t ||  }W 5 Q R X t|tsbtt	t
||d< t|
 t ||  }W 5 Q R X t|tstt
|st|r fdd	}t |}|	d
dd}|	ddd}tj||||||d tj||j|dd||d n }|	d
d}|	dd}tj||||||d | dkrz|j|dd}tj||d||d |r|jj}||jkst||jksttjtdd |	dd W 5 Q R X |rT|tj }t || d
d}t || dd}| dkrT| dkrdnd
}t||j|jd}t|| t||j|jd}t|| dS )a  
    Check that operator opname works as advertised on frame

    Parameters
    ----------
    opname : str
        Name of the operator to test on frame
    alternative : function
        Function that opname is tested against; i.e. "frame.opname()" should
        equal "alternative(frame)".
    frame : DataFrame
        The object that the tests are executed on
    has_skipna : bool, default True
        Whether the method "opname" has the kwarg "skip_na"
    check_dtype : bool, default True
        Whether the dtypes of the result of "frame.opname()" and
        "alternative(frame)" should be checked.
    check_dates : bool, default false
        Whether opname should be tested on a Datetime Series
    rtol : float, default 1e-5
        Relative tolerance.
    atol : float, default 1e-8
        Absolute tolerance.
    skipna_alternative : function, default None
        NaN-safe version of alternative
    )meanmedianNbz1/1/2001   periodsac                    s
    | j S Nvaluesxalternative U/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/frame/test_reductions.pywrapperW   s    z$assert_stat_op_calc.<locals>.wrapperr   Faxisskipna   )check_dtypertolatolr'   )r+   r,   sumprodNo axis named 2matchr0   indexdtype)getattrFutureWarningr	   r   tmassert_produces_warning
isinstancer   AssertionErrorrangelenZ_make_skipna_wrapperassert_series_equalapplyr   r6   pytestraises
ValueErrornpNaNr5   )opnamer"   frame
has_skipnar*   check_datesr+   r,   skipna_alternativefZexpected_warningdfresultr%   skipna_wrapperresult0result1expectedZ	lcd_dtypeall_nar0r1unitr#   r!   r$   assert_stat_op_calc!   s    %
    


    

rV   c                 C   sp   t || dd t || dd |rlt || ddd t || ddd t || ddd t || ddd dS )a  
    Check that API for operator opname works as advertised on frame

    Parameters
    ----------
    opname : str
        Name of the operator to test on frame
    float_frame : DataFrame
        DataFrame with columns of type float
    float_string_frame : DataFrame
        DataFrame with both float and string columns
    has_numeric_only : bool, default False
        Whether the method "opname" has the kwarg "numeric_only"
    r   r-   r)   Tr'   numeric_onlyFN)r7   )rF   float_framefloat_string_framehas_numeric_onlyr#   r#   r$   assert_stat_op_api   s    r\   c              	      sL  t || }|rh fdd} fdd}|ddd}|ddd}t||| t||j|dd	 n } }|dd	}|dd	}t||| tj||j|dd	dd
 tjtdd |dd	 W 5 Q R X |rH|tj }	t |	| dd	}
t |	| dd	}| dkr,|
	 rt
|	 rHt
n|
 s:t
| sHt
dS )a  
    Check that bool operator opname works as advertised on frame

    Parameters
    ----------
    opname : str
        Name of the operator to test on frame
    alternative : function
        Function that opname is tested against; i.e. "frame.opname()" should
        equal "alternative(frame)".
    frame : DataFrame
        The object that the tests are executed on
    has_skipna : bool, default True
        Whether the method "opname" has the kwarg "skip_na"
    c                    s   |   j} |S r   )dropnar   )r    Znonar!   r#   r$   rN      s    
z+assert_bool_op_calc.<locals>.skipna_wrapperc                    s
    | j S r   r   r   r!   r#   r$   r%      s    z$assert_bool_op_calc.<locals>.wrapperr   Fr&   r)   r-   )r*   r1   r2   r   anyN)r7   r9   r?   r@   rA   rB   rC   rD   rE   r^   r<   all)rF   r"   rG   rH   rK   rN   r%   rO   rP   rR   rS   rT   r#   r!   r$   assert_bool_op_calc   s:    


  

r`   c                 C   s   |}t jt|dk|d< t|| dd t|| dd |rt|| ddd t|| ddd t|| ddd t|| ddd d	S )
a  
    Check that API for boolean operator opname works as advertised on frame

    Parameters
    ----------
    opname : str
        Name of the operator to test on frame
    float_frame : DataFrame
        DataFrame with columns of type float
    float_string_frame : DataFrame
        DataFrame with both float and string columns
    has_bool_only : bool, default False
        Whether the method "opname" has the kwarg "bool_only"
    g      ?Z_bool_r   r-   r)   T)r'   	bool_onlyFN)rD   randomrandnr>   r7   )rF   bool_frame_with_narZ   has_bool_onlymixedr#   r#   r$   assert_bool_op_api   s    rg   c                -   @   s  e Zd Zejddd Zejdejdd Z	dd Z
ejdd	 Zejd
dd Zejdddddddddgdd Zejdddddddgdd Zdd Zdd  Zejd!d"d#gd$d% Zejd!d"d#gd&d' Zd(d) Zd*d+ Zejd,dddgd-d. Zd/d0 Zejd1d2 Zejd3d4d5gd6gd7gd8ged8gd8gd9ed:ged;gd<fd=d5gd6gejgejejged>eejgd8gd9e j!gee j!gd<fd4d?d@ejejgd?d@ejejgdAejejejged8ejejejgd8gd9ed:dBdBdBged;dCdCdCgdDdAdEdFgdGfd=d?d@ejejgd?d@ejejgdAejejejgeejd8ejejgd8gd9edBd:dBdBgedCd;dCdCgdDdAdEdFgdGfgdHdI Z"dJdK Z#dLdM Z$dNdO Z%dPdQ Z&dRdS Z'ejdTdUdVgejdWd"d4d=gdXdY Z(dZd[ Z)d\d] Z*d^d_ Z+d`da Z,dbdc Z-ddde Z.dfdg Z/dhdi Z0djdk Z1dldm Z2dndo Z3dpdq Z4drds Z5dtdu Z6ejdvdwdDdxgfdydDdzgfgd{d| Z7d}d~ Z8ejdddgdd Z9ejdddgdd Z:dd Z;ejddDdAgejdddgejdd4d=gdd Z<dd Z=dd Z>ejdej?i d=fej@i d4fej?dg id=fej@dg id4fej?dd=d=gid=fej@dd=d=gid=fej?dd4d=gid4fej@dd4d=gid=fej?dd4d4gid4fej@dd4d4gid4fej?d=gd=gdd=fej@d=gd=gdd=fej?d=d=gd=d4gdd4fej@d=d=gd=d4gdd=fej@deAdd7gdd>id=fej?deAdd7gdd>id4fej@deAdDdAgeBd>id=fej?deAdDdAgeBd>id4feCej@deAdDdAgdd>id=eCej@deAdDdAgdd>id=eCej?deAdDdAgdd>id4eCej?deAdDdAgdd>id4eCej@deAdAdEgdd>id4eCej@deAdAdEgdd>id4eCej?deAdAdEgdd>id4eCej?deAdAdEgdd>id4eCej@deAdDdAgdd>id=eCej?deAdDdAgdd>id4eCej@deAdAdEgdd>id4eCej?deAdAdEgdd>id4ej@deAdDdAgdd>id4fej?deAdDdAgdd>id=fej@deAdAdEgdd>id4fej?deAdAdEgdd>id=feCej@eAddgdd>eAddgdd>dd4g#dd ZDdd ZEdd ZFejdddgdd ZGdd ZHd"S )TestDataFrameAnalyticsz)ignore:Dropping of nuisance:FutureWarningc                 C   s   t d|| t d|| t d||dd t d|| t d|| t d|| t d	|| t d
|| t d||dd t d|| t d|| t d|| t d|| d S )Ncountr/   nuniqueF)r[   r   productr   minmaxmadvarstdsemr\   selfrY   rZ   r#   r#   r$   test_stat_op_api  s.          z'TestDataFrameAnalytics.test_stat_op_apic                 C   s   t d|| t d|| d S )Nskewkurtrr   rs   r#   r#   r$   test_stat_op_api_skew_kurt   s    z1TestDataFrameAnalytics.test_stat_op_api_skew_kurtc           	      C   s   dd }dd }dd }dd }d	d
 }dd }t d||dddd t dtj|dddd t dtj|tjd t dtj|dd t dtj|tjd t d|| t d|| t d|| t d|| t d||dddd d S )Nc                 S   s   t |  S r   )r   r/   sr#   r#   r$   ri   '  s    z7TestDataFrameAnalytics.test_stat_op_calc.<locals>.countc                 S   s   t t|  S r   )r>   
algorithmsZunique1dr]   ry   r#   r#   r$   rj   *  s    z9TestDataFrameAnalytics.test_stat_op_calc.<locals>.nuniquec                 S   s   t | |    S r   )rD   absr   r   r#   r#   r$   rn   -  s    z5TestDataFrameAnalytics.test_stat_op_calc.<locals>.madc                 S   s   t j| ddS Nr)   Zddof)rD   ro   r   r#   r#   r$   ro   0  s    z5TestDataFrameAnalytics.test_stat_op_calc.<locals>.varc                 S   s   t j| ddS r}   )rD   rp   r   r#   r#   r$   rp   3  s    z5TestDataFrameAnalytics.test_stat_op_calc.<locals>.stdc                 S   s   t j| ddt t|  S r}   )rD   rp   sqrtr>   r   r#   r#   r$   rq   6  s    z5TestDataFrameAnalytics.test_stat_op_calc.<locals>.semrj   FT)rH   r*   rI   r/   Zfloat32gMbP?)r*   r+   )rJ   r   rI   rk   rn   ro   rp   rq   ri   )rV   rD   r/   astypeZnansumr   r0   Znanprod)	rt   float_frame_with_naZmixed_float_frameri   rj   rn   ro   rp   rq   r#   r#   r$   test_stat_op_calc&  s\          z(TestDataFrameAnalytics.test_stat_op_calcc                 C   s,   dd }dd }t d|| t d|| d S )Nc                 S   s*   ddl m} t| dk rtjS || ddS )Nr   )rv      FZbias)scipy.statsrv   r>   rD   nan)r    rv   r#   r#   r$   skewnesse  s    zHTestDataFrameAnalytics.test_stat_op_calc_skew_kurtosis.<locals>.skewnessc                 S   s*   ddl m} t| dk rtjS || ddS )Nr   )kurtosis   Fr   )r   r   r>   rD   r   )r    r   r#   r#   r$   rw   l  s    zDTestDataFrameAnalytics.test_stat_op_calc_skew_kurtosis.<locals>.kurtrv   rw   rV   )rt   r   r   rw   r#   r#   r$   test_stat_op_calc_skew_kurtosisc  s    z6TestDataFrameAnalytics.test_stat_op_calc_skew_kurtosiszignore::RuntimeWarningc                 C   s.   dd }t d||dd t d||ddd d S )Nc                 S   s   t |  rtjS t| S r   )r   r^   rD   r   r   r   r#   r#   r$   r%   z  s    z3TestDataFrameAnalytics.test_median.<locals>.wrapperr   Tr   F)r*   rI   r   )rt   r   	int_framer%   r#   r#   r$   test_medianx  s        z"TestDataFrameAnalytics.test_medianmethodr/   r   r0   ro   rp   rv   rl   rm   c                 C   s   dddgdddgdddgd	}t |d
ddgdd}t tjdgtjdgtjdgdtd}||fD ]L}|jjtjksvtt||d}t|	d|d}|dkr`t
|| q`d S )Ngȃw@Ba@gCVZg
?Z.F?r           g94c4?g@}jX?gNr   r   cfoobarbazOr4   r   r   r   r   r)   r   r6   r)   Zf8r.   )r	   rD   r   objectr   r6   Zobject_r<   r7   r   r9   r?   )rt   r   datadf1df2rL   rM   rQ   r#   r#   r$   %test_stat_operators_attempt_obj_array  s$    &z<TestDataFrameAnalytics.test_stat_operators_attempt_obj_arrayoprw   rq   c              
   C   s   t ddddgddddgd	d
ddgd}tjtdd t|| }W 5 Q R X t|dks^ttdd< tjtdd t|| }W 5 Q R X t|dkstW 5 Q R X d S )Nr)   r   r   r         ?       @g      @g      @r   r   r   d)intfloatstrSelect only valid columnsr2   use_bottleneckF)	r	   r9   r:   r8   r7   r>   r<   pdoption_context)rt   r   rL   rM   r#   r#   r$   test_mixed_ops  s&    


  z%TestDataFrameAnalytics.test_mixed_opsc                 C   s   t dddddgdddddgdd	d
ddgd}|jdddgd |jdd}t|jtjdddgtd |j	jdd}t
|| d S )NTF
         (   2   r   r   r   r   e)	bool_dataint_datastring_datar   r   r   columnsr   r-   r      Zabcder   r)   )r	   reindexr/   r9   Zassert_numpy_array_equalr   rD   arrayr   Tr?   )rt   rL   testZaltr#   r#   r$   test_reduce_mixed_frame  s     z.TestDataFrameAnalytics.test_reduce_mixed_framec                 C   s   t dddgdddgdtjdgd}t| tdddd t|jddtdddd t|jddtdddd t|jddd	tdddd d S )
Nr)   r   r   ABCFr]   r-   r   )r'   r]   )r	   rD   r   r9   r?   rj   r   )rt   rL   r#   r#   r$   test_nunique  s    $
   z#TestDataFrameAnalytics.test_nuniquetzNUTCc              	   C   s^   t ddgtd|dgd d}tt | }W 5 Q R X tdgdgd}t|| d S )	Nr)   2000r   r   r   r   r   r   r5   )r	   r   r9   r:   r8   r   r   r?   rt   r   rL   rM   rQ   r#   r#   r$    test_mean_mixed_datetime_numeric  s
     z7TestDataFrameAnalytics.test_mean_mixed_datetime_numericc              	   C   sT   t dtd|dgd i}tt | }W 5 Q R X ttjd}t	|| d S )Nr   r   r   r   r   )
r	   r   r9   r:   r8   r   r   rD   float64r?   r   r#   r#   r$   test_mean_excludes_datetimes  s
    z3TestDataFrameAnalytics.test_mean_excludes_datetimesc                 C   s   dd t dddd t dddd t dddd t ddd	d t d
dddt dddd t ddd	d t dddd t dddd t ddg
}t|}tjtdd | }W 5 Q R X tddgddgd}t|| d S )Nr   z628.00r   r)   z383.00r   z651.00z575.00r   z1114.00ZTESTz241.00z572.00z609.00z820.00   z1223.00r   r2   g@gL@r   r   r   )r   r	   r9   r:   r8   r   r   r?   )rt   r   rL   rM   rQ   r#   r#   r$   test_mean_mixed_string_decimal  s&     z5TestDataFrameAnalytics.test_mean_mixed_string_decimalc              	   C   s   |j dd}|dd }t|| |jdd}|dd }t|| ttjddd}tj	|dd	}|dk 
 rttd
d$ tj	|dd	}|dk 
 rtW 5 Q R X d S )Nr   r~   c                 S   s   | j ddS Nr   r~   )rp   r   r#   r#   r$   <lambda>      z5TestDataFrameAnalytics.test_var_std.<locals>.<lambda>c                 S   s   | j ddS r   )ro   r   r#   r#   r$   r   
  r   r)     r   r   r-   r   F)rp   r@   r9   assert_almost_equalro   rD   repeatrb   nanopsZnanvarr^   r<   r   r   rt   Zdatetime_framerM   rQ   arrr#   r#   r$   test_var_std  s    z#TestDataFrameAnalytics.test_var_stdmethc              	   C   s  t tjdddddgd}d|jd< t tjdddddgd}d	|jd< t||d
dd}t|ddg |d
d}t|| t||d
dd}t|ddg |d
d}t|| d}tj	t
|d t||d
dd W 5 Q R X d}tj	t
|d t||d
dd W 5 Q R X d S )Nr   r   r   r   r   r   100)r   r   r   r)   TrW   r-   z6unsupported operand type\(s\) for -: 'float' and 'str'r2   Fz&could not convert string to float: 'a')r	   rD   rb   rc   locr7   r9   r?   rA   rB   	TypeError)rt   r   r   r   rM   rQ   msgr#   r#   r$   test_numeric_only_flag  s     

z-TestDataFrameAnalytics.test_numeric_only_flagc              	   C   s   |j dd}|dd }t|| ttjddd}tj|dd}|dk 	 rZt
td	d
$ tj|dd}|dk 	 rt
W 5 Q R X d S )Nr   r~   c                 S   s   | j ddtt|  S r   )rp   rD   r   r>   r   r#   r#   r$   r   2  r   z1TestDataFrameAnalytics.test_sem.<locals>.<lambda>r   r   r   r-   r   F)rq   r@   r9   r   rD   r   rb   r   Znansemr^   r<   r   r   r   r#   r#   r$   test_sem0  s    zTestDataFrameAnalytics.test_semc              
   C   s   t dgdddgddggddddddgddddddgddddddggd}ttjd	d
|d}| }tt |jdd	d}W 5 Q R X tj
||dd |jd kst|jdkstd S )Nr   onetwothreer   r)   r   )Zlevelscodes   r   r   levelF)Zcheck_names)r   r	   rD   rb   rc   rw   r9   r:   r8   Zxsr?   namer<   )rt   r5   rL   rw   Zkurt2r#   r#   r$   	test_kurt=  s    ,z TestDataFrameAnalytics.test_kurtzdropna, expectedT   g      $@r   r   )
categories2000-1-21 days)r   r   r   DEFGFr      	   r)   NaTr   r   r   r   )HIJKLMNc                 C   s   t ddddgddtjdgdtjtjtjgtjtjdtjgttjtjdtjgtdd	ddgtd
dddgddddgddddgddtjtjgtdtjdtjgtd	d	ddgtd
dd
dgtjdddd}|t|  j	|d}t |}t
|| d S )Nr         r   r   r)   r   r   r   r   r   r   r   r   int64r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r	   rD   r   r   r   r   arangesortedkeysmoder9   assert_frame_equal)rt   r]   rQ   rL   rM   r#   r#   r$   test_mode_dropnaL  s(    7


z'TestDataFrameAnalytics.test_mode_dropnac              	   C   sp   t dtjtjddgi}t ddtjgi}tt& |jdd}|jddjdd}W 5 Q R X t	|| d S )Nr   r   Fr   )ZbyT)Zdrop)
r	   rD   r   r9   r:   UserWarningr   Zsort_valuesZreset_indexr  )rt   rL   rQ   rM   r#   r#   r$   test_mode_sortwarning  s    z,TestDataFrameAnalytics.test_mode_sortwarningc                 C   sB   t g ddgd}| }t g ddgtg tdd}t|| d S )Nr   r   r   r   )r   r5   )r	   r   r
   r   r9   r  rt   rL   rM   rQ   r#   r#   r$   test_mode_empty_df  s    z)TestDataFrameAnalytics.test_mode_empty_dfc              	   C   s  t tddddtddddtdtddd d	}t |d
 |d  |d
 |d  d}| }|d |jd ksxt|d |jd kst|jdd}||jd k st| }|d |jd kst|d |jd kst|jdd}||d
 k st|	 }t	|}t |d
 |d  |d |d
  d}t
|| t
|| | }d|d< d|d< d|d< td|d< | }tttddttdddddtdg|jd}t
|| t
jtdd  |jdd}W 5 Q R X tdddgddd!gd}t
|| |d
dg d}ttddgd }t
|| |d
dg  }ttddtddgd
dgd}t
|| t td"dd#td$dd#d%}|d& |d'  |d(< |d( jd)kst|d' |d&  |d*< |  |d( jd)kst|d* jd)kstd S )+Nz2012-1-1r   r   r   freqz2012-1-2Z20120101r   )minutessecondsr   r   r   r   r   r   )r   r   r)   )r   r   r-   )r   r   )r   r   r   r   r   Z20130101r   i1  r
  )daysr   Select only validr2   r   Z20130102r   Z20130105)timetime2r  r  Zoff1timedelta64[ns]Zoff2)r	   r   r   r   rl   r   r<   r_   rm   r|   r9   r  copyr   r   	Timedeltar   r?   r:   r8   r6   _consolidate_inplace)rt   rL   ZdiffsrM   Zresult2rQ   rf   r#   r#   r$   test_operators_timedelta64  s~    && 

z1TestDataFrameAnalytics.test_operators_timedelta64c                 C   s   t jddd}t||d}| }t j|jd< |jdd}t|d  t jgdd	gd
d}t	|| |jddd}tt 
dgd t jt 
dg }t	|| d S )Nz1 Dayr   r   r   )r  Fr(   r   r   r  r4   r)   r&   r   r   )r   timedelta_ranger	   r  r   ilocrp   r   r9   r?   r  )rt   ZtdirL   rM   rQ   r#   r#   r$   !test_std_timedelta64_skipna_false  s      $z8TestDataFrameAnalytics.test_std_timedelta64_skipna_falsec                 C   sZ   t  }|d}|d}t|ts(tt|ts6tt|dksFtt|dksVtd S )Nr   r)   )r	   r/   r;   r   r<   r>   )rt   Zempty_frameZaxis0Zaxis1r#   r#   r$   test_sum_corner  s    

z&TestDataFrameAnalytics.test_sum_cornerzmethod, unit)r/   r   )r0   r)   rX   c                 C   s  dddg}t ||g|tjgtjtjgd}t|||d}t|||g|dd}t|| t|||dd	}t||tjg|d
}t|| t|||dd	}t|||g|dd}t|| t|jdd  ||dd	}t|tjtjg|d
}t|| t |gd |gd tjgd  d}t|||dd	}t|ddgd
}t|| t|||dd	}t|ddgd
}t|| d S )Nr   r   r   r   rX   r   r4   r)   )rX   	min_countr   r   r   r   r   r   r   r   )r	   rD   r   r7   r   r9   r?   r  )rt   r   rU   rX   idxrL   rM   rQ   r#   r#   r$   test_sum_prod_nanops#  s*    
"&z+TestDataFrameAnalytics.test_sum_prod_nanopsc                 C   s   dddg}t ddgdtjgtjtjgd}|t}| }tdddgd|d}t|| |jdd}t|| |jd	d}tddtjgd|d}t|| d S )
Nr   r   r   r   r   m8[ns])r6   r5   r  r)   )	r	   rD   r   r@   r   r/   r   r9   r?   )rt   r  rL   r   rM   rQ   r#   r#   r$   test_sum_nanops_timedeltaE  s    
"
z0TestDataFrameAnalytics.test_sum_nanops_timedeltac                 C   sN   t dddgdddgd}|jdd	}ttjtjgd
dgd}t|| d S )Nr)   r   r   r   r   r   )r    yr   r!  r    r#  r   )r	   r/   r   rD   r   r9   r?   r  r#   r#   r$   test_sum_nanops_min_countZ  s    z0TestDataFrameAnalytics.test_sum_nanops_min_countc                 C   s6   |j t}t||j|jd}|td }|  d S )Nr5   r   r)   )r   r   r   r	   r5   r   r   r/   )rt   rY   r   rG   Zdeltasr#   r#   r$   test_sum_objecta  s    z&TestDataFrameAnalytics.test_sum_objectc                 C   s"   t |}|d |d d S )Nr)   r   )rD   isnanr/   )rt   rY   boolsr#   r#   r$   test_sum_boolg  s    

z$TestDataFrameAnalytics.test_sum_boolc              	   C   sh   t tdddddddgddddg}tjtdd	 | }W 5 Q R X td
di}t|| d S )Nr   r   r   r)   r   r   r   r  r2   r   g      @)	r	   r   r   r9   r:   r8   r/   r   r?   r  r#   r#   r$   test_sum_mixed_datetimem  s    z.TestDataFrameAnalytics.test_sum_mixed_datetimec              	   C   s   t jtdd |jdd}W 5 Q R X |jddd}t |j|j t|jt|jk s\t	t jtdd |jdd}W 5 Q R X |jddd}t |j|j |d dk|d	< |d}|d	 |d	 j
 kst	d S )
Nr  r2   r   r-   TrW   r)   r   bool)r9   r:   r8   r   r/   Zassert_index_equalr5   r>   r   r<   r   )rt   rY   rZ   Zthe_meanZthe_sumZmeansr#   r#   r$   test_mean_cornerx  s    
z'TestDataFrameAnalytics.test_mean_cornerc              	   C   s   t tdtdddtjdddtjddddd}|jd	d
}tddi}t	
|| t	t | }W 5 Q R X td|jd d}t	
|| d S )Nr   
2016-01-01r   1D2016r   r  )r   r   r   r   Tr  r   r)   r   )r   r   )r	   rD   r   r   r   r  period_ranger   r   r9   r?   r:   r8   r   r  r#   r#   r$   test_mean_datetimelike  s    
z-TestDataFrameAnalytics.test_mean_datetimelikec              	   C   s   t tdtdddtjdddd}|jdd}td|jd	 |jd
 d}t	
|| tjdddd|d< tjtdd |jdd W 5 Q R X d S )Nr   r-  r   r.  r   Fr  r)   )r)   r   r0  r/  r   r  r   z"mean is not implemented for Periodr2   )r	   rD   r   r   r   r  r   r   r   r9   r?   r1  rA   rB   r   r  r#   r#   r$   )test_mean_datetimelike_numeric_only_false  s    
	z@TestDataFrameAnalytics.test_mean_datetimelike_numeric_only_falsec                 C   sD   t jjddd}t|dd}|jdd}t| }t|| d S )Nr   )r   r   )sizeInt64r   Tr  )rD   rb   randintr	   r   r9   r?   )rt   r   rL   rM   rQ   r#   r#   r$   *test_mean_extensionarray_numeric_only_true  s
    zATestDataFrameAnalytics.test_mean_extensionarray_numeric_only_truec              	   C   sF   t jtdd. |d |d |d |d W 5 Q R X d S )Nr   r2   r)   )r9   r:   r8   rp   ro   r   rv   )rt   rZ   r#   r#   r$   test_stats_mixed_type  s     


z,TestDataFrameAnalytics.test_stats_mixed_typec                 C   s8   t tdtdd}t|}|jddd dks4td S )Nr)   r   r%  r-   r   )r	   r=   r   r/   r<   )rt   rL   r(  r#   r#   r$   test_sum_bools  s    z%TestDataFrameAnalytics.test_sum_boolsc           
   	   C   s   |}t j|jdd< t j|jdddd f< dD ]H}dD ]>}||fD ]0}|j||d}|jtj||d}t|| qDq8q0d	}	tj	t
|	d
 |jdd W 5 Q R X d S Nr   r      r   r  )TF)r   r)   r&   z)No axis named 2 for object type DataFramer2   r   r-   )rD   r   r  idxminr@   r   r9   r?   rA   rB   rC   
rt   rY   r   rG   r(   r'   rL   rM   rQ   r   r#   r#   r$   test_idxmin  s    z"TestDataFrameAnalytics.test_idxminc           
   	   C   s   |}t j|jdd< t j|jdddd f< dD ]H}dD ]>}||fD ]0}|j||d}|jtj||d}t|| qDq8q0d	}	tj	t
|	d
 |jdd W 5 Q R X d S r:  )rD   r   r  idxmaxr@   r   r9   r?   rA   rB   rC   r=  r#   r#   r$   test_idxmax  s    z"TestDataFrameAnalytics.test_idxmaxc                 C   sr  t ddd}tdddgtdd d d |jdd	d
}| }tdddgdddgd}t|| | }tdddgdddgd}t|| t	j
|jd< | }tdddgdddgd}t|| | }tdddgdddgd}t|| |d d d |d< |  | }tddddgddddgd}t|| | }tddddgddddgd}t|| d S )Nr-  r   r   r   r   r)   r  T)deep)r)   r   r   r   )r   r   r   )r   r	   r=   r  r?  r   r9   r?   r<  r   r   r   r  rt   ZdtirL   rM   rQ   r#   r#   r$   test_idxmax_mixed_dtype  s.    ,z.TestDataFrameAnalytics.test_idxmax_mixed_dtypezop, expected_valuer?  r   r<  r   c                 C   sn   t ddddddgddddddgddd}|d	}t|| }t d
|itddgd	ddd}t|| d S )Nd      r   r)   r   )IDvaluer5  r   rF  rG  )r   r6   r   )r	   groupbyr7   r
   r9   r  )rt   r   Zexpected_valuerL   rM   rQ   r#   r#   r$   !test_idxmax_idxmin_convert_dtypes  s    
z8TestDataFrameAnalytics.test_idxmax_idxmin_convert_dtypesc                 C   s   t ddd}t||d d d d}| }tj|jd< |  |jdd}td	ddg}t	
|| |jdd}td	dd	g}t	
|| d S )
Nr-  r   r   r  )r   r   )r   r   r)   r-   r   )r   r	   r  r   r   r  r  r?  r   r9   r?   r<  rB  r#   r#   r$   "test_idxmax_dt64_multicolumn_axis1)  s    z9TestDataFrameAnalytics.test_idxmax_dt64_multicolumn_axis1rF   r^   r_   c                 C   s   t |||dd d S )NT)re   )rg   )rt   rF   rd   rZ   r#   r#   r$   test_any_all?  s       z#TestDataFrameAnalytics.test_any_allc                 C   s$   | d}t|tt||dd d S )NT)rH   )Zfillnar`   r7   rD   )rt   rF   rd   rL   r#   r#   r$   test_any_all_bool_frameE  s    
z.TestDataFrameAnalytics.test_any_all_bool_framec                 C   s.  t dddgdddgdddgddddgd}|dd	g d
}tdddgdddgd}t|| |dd	g jd
dd}t|| |d
}tdddgdddgd}t|| |jd
dd}t|| |jd d }|dkst|jd d }|dkst|dg jd d }|dks*td S )NTFr   r   r   r   r   r   r   r)   ra   r-   r   )r	   r^   r   r9   r?   r_   itemr<   r  r#   r#   r$   test_any_all_extraL  s.    
z)TestDataFrameAnalytics.test_any_all_extrar'   bool_agg_funcr(   c                 C   sx   t dtjtjdgtjdtjdgtjtjtjdgtjtjdtjggd}t||||d}tddddg}t|| d S )Nr)   Tr   5r   r&   )r	   rD   r   r7   r   r9   r?   )rt   r'   rP  r(   rL   rM   rQ   r#   r#   r$   test_any_all_object_dtypem  s    z0TestDataFrameAnalytics.test_any_all_object_dtypec                 C   s`   dt jdt jg}tdtdtjtjg}t||d}|d}tddddg}t	|| d S )Nr)   r   z
1960-02-15z
1960-02-16r   TF)
rD   r   r   r   r   r	   r^   r   r9   r?   )rt   Z
float_dataZdatetime_datarL   rM   rQ   r#   r#   r$   test_any_datetime~  s    
z(TestDataFrameAnalytics.test_any_datetimec                 C   s   t dddgdddgd d d gd}|jdd	}ttjd
}t|| t dddgdddgd d d gdddgd}|jdd	}tddi}t|| d S )Nr)   r   r   r   r   r   )col1col2col3TrM  r   F)rU  rV  rW  col4rX  )r	   r_   r   rD   bool_r9   r?   r  r#   r#   r$   test_any_all_bool_only  s     	z-TestDataFrameAnalytics.test_any_all_bool_onlyzfunc, data, expectedr   r   r   r   zM8[ns]zM8[ns, UTC]r   categoryr   r   c              	   C   s   t |}d }tdd |jD r$t}tj|ddd ||}W 5 Q R X t|tjsXt	|
 |ksht	tj|ddd tt ||jd d}W 5 Q R X t|tjst	|
 |kst	d S )Nc                 s   s   | ]}t |V  qd S r   r   ).0r    r#   r#   r$   	<genexpr>  s     z>TestDataFrameAnalytics.test_any_all_np_func.<locals>.<genexpr>r   Fr3   Zcheck_stacklevelr-   )r	   r^   Zdtypesr8   r9   r:   r;   rD   rY  r<   rN  r7   __name__)rt   funcr   rQ   warnrM   r#   r#   r$   test_any_all_np_func  s(    5     z+TestDataFrameAnalytics.test_any_all_np_funcc                 C   sL   t tddgd }|dks$tt tddgd }|dksHtd S )Nr   r   r   TF)rD   r_   r	   rN  r<   r^   )rt   rM   r#   r#   r$   test_any_all_object  s    z*TestDataFrameAnalytics.test_any_all_objectc                 C   s0  t ddgddgdt}|  tddg|d< |d d|d< | }|d	dg }t|| |jdd
d}tddgd	dgd}t	|| |d	dg jdd
d}t	|| |jdd drt
|jdd
d}tddgd	dgd}t	|| |d	dg jdd
d}t	|| |jdd ds,t
d S )Nr   r   TFr   r   r[  r   r   r   )ra   r'   r   )r	   r   r   r  r   Z_get_bool_datar9   r  r_   r?   r<   r^   )rt   rL   resrQ   r#   r#   r$   test_any_all_object_bool_only  s&    z4TestDataFrameAnalytics.test_any_all_object_bool_onlyc              
   C   st   t dditjddgddggddgdd	}d
}tjt|d. tt t	||d dd W 5 Q R X W 5 Q R X d S )Nr   r)   r   r   r   outin)namesr   z.Must specify 'axis' when aggregating by level.r2   )r'   r   )
r	   r   Zfrom_productrA   rB   rC   r9   r:   r8   r7   )rt   r   rL   Zxprr#   r#   r$   #test_any_all_level_axis_none_raises  s     z:TestDataFrameAnalytics.test_any_all_level_axis_none_raisesc              	   C   s   t dddg}t dtjdtjgi}tdddg}ttjtjdg}td 0 |j|dd dD ]}t|||dd qbW 5 Q R X d S )	Nr   r   r   r)   r   )lowerr'   )ltlegtgeeqner-   )r	   rD   r   r   r9   r:   Zclipr7   )rt   rL   Zdf_nanrz   Zs_nanr   r#   r#   r$   test_series_broadcasting*  s    z/TestDataFrameAnalytics.test_series_broadcasting)Ir_  
__module____qualname__rA   markfilterwarningsru   tdZskip_if_no_scipyrx   r   r   r   parametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   rD   r   r   r   r   r   r  r  r  r  r  r  r  r"  r$  r&  r)  r*  r,  r2  r3  r7  r8  r9  r>  r@  rC  rI  rJ  rK  rL  rO  rS  rT  rZ  r^   r_   r   r   paramrb  rc  re  ri  rq  r#   r#   r#   r$   rh     sJ  


=


 








5
X
 
&


!

3
"
rh   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zej	d	d
dgej	dddge
dddZdd Zdd Zdd Zdd Zdd ZdS )TestDataFrameReductionsc                 C   s   t dtjtjtdgi}| }ttdgdgd}t|| | }ttdgdgd}t|| t dtjtjgi}| }ttjgdgd}t|| | }ttjgdgd}t|| d S )Nr   z
2012-05-01r   )	r	   r   r   r   rl   r   r9   r?   rm   )rt   rL   rd  expr#   r#   r$   test_min_max_dt64_with_NaT9  s    z2TestDataFrameReductions.test_min_max_dt64_with_NaTc                 C   s   |}t |trt rtd ttd|dtd|dgtd|dtjgd}|j	ddd	}t
|jd
 tjg}|j|d jkstt|| |jddd	}t
|jd tjg}|j|d jkstt|| d S )NzSGH#37659 OSError raised within tzlocal bc Windows chokes in times before 1970-01-01z2020-01-01 08:00:00r   z1920-02-01 09:00:00z2020-02-01 08:00:00r   r   r)   Fr&   )r   r   r   )r   r   )r;   r   r   rA   skipr	   r   r   r   rl   r   r   r6   r<   r9   r?   rm   )rt   requestZtz_naive_fixturer   rL   rd  rQ   r#   r#   r$   'test_min_max_dt64_with_NaT_skipna_falseP  s(    

	z?TestDataFrameReductions.test_min_max_dt64_with_NaT_skipna_falsec                 C   s   t dtg i}ttg }|jddjtjk| tjkksBt|jddjtjk| tjkkshtt	
|jdd| t	
|jdd| d S )Nr    r   r-   r)   )r	   r   r   rl   r    r   r   r<   rm   r9   r?   )rt   rL   Zexpected_dt_seriesr#   r#   r$   *test_min_max_dt64_api_consistency_with_NaTn  s    &&zBTestDataFrameReductions.test_min_max_dt64_api_consistency_with_NaTc                 C   s   t dg i}tg td}t|jddjt| ks>tt|jddjt| ksdtt	
|jdd| t	
|jdd| d S )Nr    r   r   r-   r)   )r	   r   r   rD   r'  rl   r    r<   rm   r9   r?   )rt   rL   Zexpected_float_seriesr#   r#   r$   *test_min_max_dt64_api_consistency_empty_df}  s    &&zBTestDataFrameReductions.test_min_max_dt64_api_consistency_empty_dfinitialz2018-10-08 13:36:45+00:00z2018-10-08 13:36:45+03:00r   rl   rm   )r  c                 C   s<   t |}t|g}t|g}t||dd}t|| d S )Nr)   r-   )r   r   r	   r7   r9   r?   )rt   r  r   Z
initial_dtrQ   rL   rM   r#   r#   r$   test_preserve_timezone  s
    

z.TestDataFrameReductions.test_preserve_timezonec              
   C   s   t ddddddddgidddddddgddddddd	ggd
}tjtdd |jdd}W 5 Q R X t dddgiddgd
}t|| tjtdd |jdd}W 5 Q R X t dddgiddgd
}t|| d S )Nr   FTr   r   r   r)   r   r   r   zUsing the levelr2   r   )r	   r9   r:   r8   r^   r  r_   )rt   rL   rM   exr#   r#   r$   test_frame_any_all_with_level  s    z5TestDataFrameReductions.test_frame_any_all_with_levelc                 C   s   t tddgttddtddgd}|jdd}tddgd	d
gd}t|| |jdd}tddgd}t|| d S )Nr   rz   r)   ms)r   tr-   FTr   r  )r   r5   rR  )r	   r   r   r^   r9   r?   r  r#   r#   r$   test_frame_any_with_timedelta  s    
z5TestDataFrameReductions.test_frame_any_with_timedeltac              	   C   s8   |dddg}t jtdd |jd d W 5 Q R X d S )Nr)   r   r   r(   r2   r  )r9   r:   r8   rn   )rt   frame_or_seriesobjr#   r#   r$   'test_reductions_deprecation_skipna_none  s    z?TestDataFrameReductions.test_reductions_deprecation_skipna_nonec              	   C   sV   |dddgt dddgdddggd}tjtdd	 t||d
d W 5 Q R X d S )Nr)   r   r   r   r   r   r   r   r2   r   r   )r   Zfrom_arraysr9   r:   r8   r7   )rt   r  reduction_functionsr  r#   r#   r$   *test_reductions_deprecation_level_argument  s     zBTestDataFrameReductions.test_reductions_deprecation_level_argumentc              	   C   sR   |dkrt d |dddg}d}t jt|d t||d d W 5 Q R X d S )	N)ri   rn   z<Count does not accept skipna. Mad needs a deprecation cycle.r)   r   r   zAFor argument "skipna" expected type bool, received type NoneType.r2   r  )rA   r}  rB   rC   r7   )rt   r  r  r  r   r#   r#   r$   "test_reductions_skipna_none_raises  s    
z:TestDataFrameReductions.test_reductions_skipna_none_raisesN)r_  rr  rs  r{  r  r  r  rA   rt  rw  r   r  r  r  r  r  r  r#   r#   r#   r$   ry  8  s   
ry  c                   @   sP   e Zd Zejdddgdd Zdd Zejddd	gd
d Zdd Z	dS )TestNuisanceColumnsr   r^   r_   c              	   C   s  t ddgddd}| }tjtdd t||  W 5 Q R X tjtdd tt|| W 5 Q R X tjtdd t||dd	 W 5 Q R X tjt	d
d t||d d	}W 5 Q R X t g t
g td}t|| tjt	d
dd tt||dd}W 5 Q R X t|| d S )Nr   r)   r[  r   )r6   r   does not support reductionr2   FrM  r   r4   r^  r-   )r   to_framerA   rB   r   r7   rD   r9   r:   r8   r
   r+  r?   )rt   r   serrL   rM   rQ   r#   r#   r$   .test_any_all_categorical_dtype_nuisance_column  s,       zBTestNuisanceColumns.test_any_all_categorical_dtype_nuisance_columnc              	   C   s&  t dtdddddgi}|d }tjtdd |  W 5 Q R X tjtdd |jdd W 5 Q R X tjtd	d | }W 5 Q R X t	g t
g tjd
}t|| |d t|d< tjtdd |jdd W 5 Q R X tjtd	d | }W 5 Q R X t	dgdgd}t|| d S )Nr   r)   r   r   r  r2   Fr  r   r4   r   r   r   )r	   r   rA   rB   r   r   r9   r:   r8   r   r
   rD   r   r?   r   r   )rt   rL   r  rM   rQ   r#   r#   r$   -test_median_categorical_dtype_nuisance_column  s.      zATestNuisanceColumns.test_median_categorical_dtype_nuisance_columnrl   rm   c              	   C   s  t ddddgdd}t|}|d}tjtdd t||  W 5 Q R X tjtdd tt|| W 5 Q R X tjtdd t||dd	 W 5 Q R X tj	t
d
d t|| }W 5 Q R X tg tg tjd}t|| tj	t
d
dd tt||}W 5 Q R X t|| |d t|d< tj	t
d
d t|| }W 5 Q R X |dkrntdgdgd}ntdgdgd}t|| tj	t
d
dd tt||}W 5 Q R X t|| d S )Nr   r   r   F)Zorderedr   zis not ordered for operationr2   r  r   r4   r^  r   rl   r   )r   r   r  rA   rB   r   r7   rD   r9   r:   r8   r
   r   r?   r   r   )rt   r   catr  rL   rM   rQ   r#   r#   r$   :test_min_max_categorical_dtype_non_ordered_nuisance_column  sP    
    
  zNTestNuisanceColumns.test_min_max_categorical_dtype_non_ordered_nuisance_columnc              	   C   s   t dddgdddgdtd}tjtd	d
 | }W 5 Q R X tdgdgd}t|| |d t	d |d< tjtd	d
 | }W 5 Q R X tddgddgd}t|| d S )Nr   r)   r   r   r   r   r   r   r   r2   r   r   r   r   r   g      @)
r	   r   r9   r:   r8   r   r   r?   r   r   r  r#   r#   r$   3test_reduction_object_block_splits_nuisance_columnsF  s       zGTestNuisanceColumns.test_reduction_object_block_splits_nuisance_columnsN)
r_  rr  rs  rA   rt  rw  r  r  r  r  r#   r#   r#   r$   r    s   
#
/r  c                  C   s   t dt jddd} d| d< t| }|jdd}tt	j
d	d
t	jg}t|| |jddd}t|| |jddd}tt	j
dd
t	j
dd
t	j
dd
t	jg}t|| d S )Nr   zm8[s]r   r   ZNat)r  r  Fr  r   r  r   r&   r)   r   r   )rD   r   r   r   viewZreshaper	   r/   r   r   r  r   r9   r?   )r   rL   rM   rQ   r#   r#   r$   !test_sum_timedelta64_skipna_false]  s"     


r  c                  C   sP   t ddggtdd} | ddi} |  }tddgddgd}t|| d S )Nr   r)   abr   r   r5  r   )r	   listr   r/   r   r9   r?   )rL   rM   rQ   r#   r#   r$   !test_mixed_frame_with_integer_sumw  s
    r  rX   r   rl   rm   c                 C   sn   t d}t|jd |jgt d}td|i}t|| |d}tt|| gt	dgddd}t
|| d S )Nr   r   r5  r  r   r   )rD   Ziinfor   rm   rl   r   Z
Int64Dtyper	   r7   r
   r9   r?   )r   rX   Z
int64_infor  rL   rM   rQ   r#   r#   r$   test_minmax_extensionarray  s    

 r  c                 C   s  t tjddtj}|| }| }| }t|| |jdd}|jdd}t|| t	j
|jd d ddf< | }| }|jdd ddf  |d< t|| |jdd}|jdd}|jjdddgd d df  |d d d< t|| d S )NrD  r   r)   r-   r   r   r   )r	   rD   rb   rc   r   r   rn   r9   r?   r   NAr  r   r   Zany_signed_int_ea_dtyperL   r   rM   rQ   r#   r#   r$   test_mad_nullable_integer  s"    
*r  z GH#42895 caused by lack of 2D EA)reasonc                 C   s   t tjddtj}|| }tj|jd d df< tj	tjgt
| | d|jd d df< | }| }tj|d< t|| d S )NrD  r   r)   r   )r	   rD   rb   rc   r   r   r   r  r  r   r>   rn   r9   r?   r  r#   r#   r$    test_mad_nullable_integer_all_na  s    
(
r  r   r/   r   r   c              	   C   s   t tjddtjddgddgd}| }tt t|| dd}W 5 Q R X t|| t|j	dd| d	d
}t|| d S )Nr   )hours   g333333(@g*@r|  r   r   Fr  )
r	   r   r  r  r9   r:   r8   r7   r  rH  )r   rL   rQ   rM   r#   r#   r$   *test_groupby_regular_arithmetic_equivalent  s     r  ts_valuez
2000-01-01c              	   C   sb   t dgdgdg| gd}tjtdd | }W 5 Q R X tdddgtdd}t|| d S )	Nr)   g?r   )r   r   r   r   zDropping of nuisancer2   abcr   )r	   r9   r:   r8   r/   r   r  r?   )r  rL   rM   rQ   r#   r#   r$   .test_frame_mixed_numeric_object_with_timestamp  s
    r  c               	   C   sl   t dddg} | jdddd}tdg}t|| td}tjt	|d | j
dddd W 5 Q R X d S )	Nr)   r   Tr   F)r'   r  rX   z2unsupported operand type(s) for +: 'int' and 'str'r2   )r	   r0   r   r9   r?   reescaperA   rB   r   r/   )rL   rM   rQ   r   r#   r#   r$   $test_prod_sum_min_count_mixed_object  s    

r  rv   rw   c              	   C   s   t tjdd}t|| }d|  d}tjt|d |d d}W 5 Q R X td  | }W 5 Q R X t|| t||dd d S )Nr   zscalar z over the entire DataFramer2   r-   r   )	r	   rD   rb   rc   r7   r9   r:   r8   r?   )r   rL   r   r   rd  rQ   r#   r#   r$   $test_reduction_axis_none_deprecation  s    
r  )TTFr   r   N)T)T)F);datetimer   decimalr   r  Zdateutil.tzr   numpyrD   rA   Zpandas.compatr   Zpandas.util._test_decoratorsutilZ_test_decoratorsrv  Zpandas.core.dtypes.commonr   Zpandasr   r   r	   r
   r   r   r   r   r   r   r   r   Zpandas._testingZ_testingr9   Zpandas.core.algorithmscorer{   Zpandas.core.nanopsr   rV   r\   r`   rg   rh   ry  r  r  r  rt  rw  r  r  Zxfailr  r  r   r  r  r  r#   r#   r#   r$   <module>   sh   4      
o

> 
        :  	


	