a
    <bO                     @   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& d8ddZ'd9d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g de	j01d d!d"gd#d$ Z2d%d& Z3e	j0j4d'd(d)d* Z5e	j01d+g d,d-d. Z6e	j01d/ed0ej7gd1d2 Z8d3d4 Z9e	j01d g d5d6d7 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	                    s  t || }	|r| dv rtnd}
tdtdddi}t|
 t ||  }W d   n1 s^0    Y  t|tsvJ tt	||d< t|
 t ||  }W d   n1 s0    Y  t|tsJ t	|sJ |rD 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v r|j|dd}tj||d||d |r|jj}||jksJ ||jksJ tjtdd |	dd W d   n1 s 0    Y  |r|tj }t || d
d}t || dd}| dv r| dkrRd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 r/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/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   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!   sr    %
**



*

rU   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   )rE   float_framefloat_string_framehas_numeric_onlyr#   r#   r$   assert_stat_op_api   s    r[   c                    s`  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 d   n1 s0    Y  |r\|tj }	t |	| dd	}
t |	| dd	}| dkr@|
	 r0J |	 r\J n|

 sNJ |
 s\J 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$   rM      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   Nany)r7   r9   r>   r?   r@   rA   rB   rC   rD   r]   all)rE   r"   rF   rG   rJ   rM   r%   rN   rO   rQ   rR   rS   r#   r!   r$   assert_bool_op_calc   s6    


(

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)rC   randomrandnr=   r7   )rE   bool_frame_with_narY   has_bool_onlymixedr#   r#   r$   assert_bool_op_api   s    rf   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g ddd Zejdg d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$g d%d&d' Zd(d) Zejd*d+ Zejd,d-d.gd/gd0gd1ged1gd1gd2ed3ged4gd5fd6d.gd/gejgejejged7eejgd1gd2e j!gee j!gd5fd-d8d9ejejgd8d9ejejgd:ejejejged1ejejejgd1gd2eg d;eg d<g d=d>fd6d8d9ejejgd8d9ejejgd:ejejejgeejd1ejejgd1gd2eg d?eg d@g d=d>fgdAdB Z"dCdD Z#dEdF Z$dGdH Z%dIdJ Z&dKdL Z'ejdMdNdOgejdPg dQdRdS Z(dTdU Z)dVdW Z*dXdY Z+dZd[ Z,d\d] Z-d^d_ Z.d`da Z/dbdc Z0ddde Z1dfdg Z2dhdi Z3djdk Z4dldm Z5dndo Z6ejdpdqdrdsgfdtdrdugfgdvdw Z7dxdy Z8ejdzd{d|gd}d~ Z9ejdzd{d|gdd Z:dd Z;ejddrd:gejdd{d|gejdd-d6gdd Z<dd Z=dd Z>ejdej?i d6fej@i d-fej?dg id6fej@dg id-fej?dd6d6gid6fej@dd6d6gid6fej?dd-d6gid-fej@dd-d6gid6fej?dd-d-gid-fej@dd-d-gid-fej?d6gd6gdd6fej@d6gd6gdd6fej?d6d6gd6d-gdd-fej@d6d6gd6d-gdd6fej@deAdd0gdd7id6fej?deAdd0gdd7id-fej@deAdrd:geBd7id6fej?deAdrd:geBd7id-feCej@deAdrd:gdd7id6eCej@deAdrd:gdd7id6eCej?deAdrd:gdd7id-eCej?deAdrd:gdd7id-eCej@deAd:dgdd7id-eCej@deAd:dgdd7id-eCej?deAd:dgdd7id-eCej?deAd:dgdd7id-eCej@deAdrd:gdd7id6eCej?deAdrd:gdd7id-eCej@deAd:dgdd7id-eCej?deAd:dgdd7id-ej@deAdrd:gdd7id-fej?deAdrd:gdd7id6fej@deAd:dgdd7id-fej?deAd:dgdd7id6feCej@eAddgdd7eAddgdd7dd-g#dd ZDdd ZEdd ZFejdd{d|g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)rZ   r   productr   minmaxmadvarstdsemr[   selfrX   rY   r#   r#   r$   test_stat_op_api  s"    z'TestDataFrameAnalytics.test_stat_op_apic                 C   s   t d|| t d|| d S )Nskewkurtrq   rr   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$   rh   '  s    z7TestDataFrameAnalytics.test_stat_op_calc.<locals>.countc                 S   s   t t|  S r   )r=   
algorithmsZunique1dr\   rx   r#   r#   r$   ri   *  s    z9TestDataFrameAnalytics.test_stat_op_calc.<locals>.nuniquec                 S   s   t | |    S r   )rC   absr   r   r#   r#   r$   rm   -  s    z5TestDataFrameAnalytics.test_stat_op_calc.<locals>.madc                 S   s   t j| ddS Nr)   Zddof)rC   rn   r   r#   r#   r$   rn   0  s    z5TestDataFrameAnalytics.test_stat_op_calc.<locals>.varc                 S   s   t j| ddS r|   )rC   ro   r   r#   r#   r$   ro   3  s    z5TestDataFrameAnalytics.test_stat_op_calc.<locals>.stdc                 S   s   t j| ddt t|  S r|   )rC   ro   sqrtr=   r   r#   r#   r$   rp   6  s    z5TestDataFrameAnalytics.test_stat_op_calc.<locals>.semri   FT)rG   r*   rH   r/   Zfloat32gMbP?)r*   r+   )rI   r   rH   rj   rm   rn   ro   rp   rh   )rU   rC   r/   astypeZnansumr   r0   Znanprod)	rs   float_frame_with_naZmixed_float_framerh   ri   rm   rn   ro   rp   r#   r#   r$   test_stat_op_calc&  sP    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   )ru      FZbias)scipy.statsru   r=   rC   nan)r    ru   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=   rC   r   )r    r   r#   r#   r$   rv   l  s    zDTestDataFrameAnalytics.test_stat_op_calc_skew_kurtosis.<locals>.kurtru   rv   rU   )rs   r   r   rv   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]   rC   r   r   r   r#   r#   r$   r%   z  s    z3TestDataFrameAnalytics.test_median.<locals>.wrapperr   Tr   F)r*   rH   r   )rs   r   	int_framer%   r#   r#   r$   test_medianx  s
    
z"TestDataFrameAnalytics.test_medianmethod)r/   r   r0   rn   ro   ru   rk   rl   c                 C   s   g dg dg dd}t |g d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snJ t||d}t|d|d}|dv rXt	
|| qXd S )N)gȃw@Ba@gCVZg
?Z.F?)r   r           )g94c4?g@}jX?gNr   r   cfoobarbazOr4   r   r   r   r   r)   r   r6   r)   Zf8r.   )r	   rC   r   objectr   r6   Zobject_r7   r   r9   r>   )rs   r   datadf1df2rK   rL   rP   r#   r#   r$   %test_stat_operators_attempt_obj_array  s    &z<TestDataFrameAnalytics.test_stat_operators_attempt_obj_arrayop)r   ro   rn   ru   rv   rp   c              	   C   s   t g dg dg dd}tjtdd t|| }W d    n1 sL0    Y  t|dksfJ tdd	Z tjtdd t|| }W d    n1 s0    Y  t|dksJ W d    n1 s0    Y  d S )
Nr)   r   r   r   )      ?       @g      @g      @r   r   r   d)intfloatstrSelect only valid columnsr2   r   use_bottleneckF)r	   r9   r:   r8   r7   r=   pdoption_context)rs   r   rK   rL   r#   r#   r$   test_mixed_ops  s"    **z%TestDataFrameAnalytics.test_mixed_opsc                 C   sr   t g dg dg dd}|jg dd |jdd}t|jtjg dtd	 |j	jd
d}t
|| d S )N)TTFFF)
         (   2   )r   r   r   r   e)Z	bool_dataZint_dataZstring_datacolumnsr   r-   )r      Zabcder   r)   )r	   reindexr/   r9   Zassert_numpy_array_equalr   rC   arrayr   Tr>   )rs   rK   testZaltr#   r#   r$   test_reduce_mixed_frame  s    z.TestDataFrameAnalytics.test_reduce_mixed_framec                 C   s   t g dg d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 )Nr)   r)   r)   r)   r   r   r)   r   ABCr   Fr\   r-   r   )r'   r\   )r	   rC   r   r9   r>   ri   r   )rs   rK   r#   r#   r$   test_nunique  s      z#TestDataFrameAnalytics.test_nuniquetzNUTCc                 C   sr   t ddgtd|dgd d}tt | }W d    n1 sH0    Y  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>   rs   r   rK   rL   rP   r#   r#   r$    test_mean_mixed_datetime_numeric  s
     &z7TestDataFrameAnalytics.test_mean_mixed_datetime_numericc                 C   sh   t dtd|dgd i}tt | }W d    n1 sB0    Y  ttjd}t	|| d S )Nr   r   r   r   r   )
r	   r   r9   r:   r8   r   r   rC   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 d    n1 s0    Y  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.00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>   )rs   r   rK   rL   rP   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 
 rJ td
d. tj	|dd	}|dk 
 rJ W d    n1 s0    Y  d S )Nr   r}   c                 S   s   | j ddS Nr   r}   )ro   r   r#   r#   r$   <lambda>      z5TestDataFrameAnalytics.test_var_std.<locals>.<lambda>c                 S   s   | j ddS r   )rn   r   r#   r#   r$   r   
  r   r)     r   r   r-   r   F)ro   r?   r9   assert_almost_equalrn   rC   repeatra   nanopsZnanvarr]   r   r   rs   Zdatetime_framerL   rP   arrr#   r#   r$   test_var_std  s    z#TestDataFrameAnalytics.test_var_stdmeth)rp   rn   ro   c                 C   sB  t tjddg dd}d|jd< t tjddg d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 d    n1 s0    Y  d}tj	t
|d" t||ddd
 W d    n1 s40    Y  d S )Nr   r   r   r   Z100)r   r   r   r)   TrV   r   r   r-   z6unsupported operand type\(s\) for -: 'float' and 'str'r2   Fz&could not convert string to float: 'a')r	   rC   ra   rb   locr7   r9   r>   r@   rA   	TypeError)rs   r   r   r   rL   rP   msgr#   r#   r$   test_numeric_only_flag  s     

0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 	 rZJ t
d	d
. tj|dd}|dk 	 rJ W d    n1 s0    Y  d S )Nr   r}   c                 S   s   | j ddtt|  S r   )ro   rC   r~   r=   r   r#   r#   r$   r   2  r   z1TestDataFrameAnalytics.test_sem.<locals>.<lambda>r   r   r   r-   r   F)rp   r?   r9   r   rC   r   ra   r   Znansemr]   r   r   r   r#   r#   r$   test_sem0  s    zTestDataFrameAnalytics.test_semc                 C   s   t dgg dddggg dg dg dgd}ttjd	d
|d}| }tt" |jdd	d}W d    n1 s~0    Y  tj
||dd |jd u sJ |jdksJ d S )Nr   )onetwoZthreer   r)   )r   r   r   r   r   r   )r   r)   r   r   r)   r   )r   r)   r   r)   r   r)   )Zlevelscodes   r   r   levelF)Zcheck_names)r   r	   rC   ra   rb   rv   r9   r:   r8   xsr>   name)rs   r5   rK   rv   Zkurt2r#   r#   r$   	test_kurt=  s    0z TestDataFrameAnalytics.test_kurtzdropna, expectedT   g      $@r   r   )
categories2000-1-21 days)r   r   r   DEFGFr      	   r)   )r   NaTr   r   r   r   r   r   )r   r)   r   r   )HIJKLMNr   r   r   r   )r   r   r   r   c                 C   s   t g d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g dtg dg dg d	ddtjtjgtdtjdtjgtg d
tg dtjdddd}|t|  j	|d}t |}t
|| d S )N)r   r         r   r   r)   r   r   r   )r   r   r   r   )r   r   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	   rC   r   r   r   r   arangesortedkeysmoder9   assert_frame_equal)rs   r\   rP   rK   rL   r#   r#   r$   test_mode_dropnaL  s(    7



z'TestDataFrameAnalytics.test_mode_dropnac                 C   s   t dtjtjddgi}t ddtjgi}tt0 |jdd}|jddjdd}W d    n1 sj0    Y  t	|| d S )Nr   r   Fr   )ZbyT)Zdrop)
r	   rC   r   r9   r:   UserWarningr  Zsort_valuesZreset_indexr  )rs   rK   rP   rL   r#   r#   r$   test_mode_sortwarning  s    2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  rs   rK   rL   rP   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sxJ |d |jd ksJ |jdd}||jd k sJ | }|d |jd ksJ |d |jd ksJ |jdd}||d
 k sJ | }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 d    n1 s0    Y  tg d!g d"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sJ |d( |d'  |d+< |  |d) jd*ks
J |d+ jd*ksJ 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)   r)   r   r   Z20130102r   Z20130105)timetime2r  r  Zoff1timedelta64[ns]Zoff2)r	   r   r   r   rk   r   r^   rl   r{   r9   r  copyr   r   	Timedeltar   r>   r:   r8   r6   _consolidate_inplace)rs   rK   ZdiffsrL   Zresult2rP   re   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   ilocro   r   r9   r>   r  )rs   ZtdirK   rL   rP   r#   r#   r$   !test_std_timedelta64_skipna_false  s    $z8TestDataFrameAnalytics.test_std_timedelta64_skipna_falsec                 C   sZ   t  }|d}|d}t|ts(J t|ts6J t|dksFJ t|dksVJ d S )Nr   r)   )r	   r/   r;   r   r=   )rs   Zempty_frameZaxis0Zaxis1r#   r#   r$   test_sum_corner  s    

z&TestDataFrameAnalytics.test_sum_cornerzmethod, unit)r/   r   )r0   r)   rW   )NTFc                 C   s  g d}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   rW   r   r4   r)   )rW   	min_countr   r   r   r   r   r   r   r   )r	   rC   r   r7   r   r9   r>   r  )rs   r   rT   rW   idxrK   rL   rP   r#   r#   r$   test_sum_prod_nanops#  s*    "&z+TestDataFrameAnalytics.test_sum_prod_nanopsc                 C   s   g d}t ddgdtjgtjtjgd}|t}| }tg d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	   rC   r   r?   r   r/   r   r9   r>   )rs   r!  rK   r   rL   rP   r#   r#   r$   test_sum_nanops_timedeltaE  s    "
z0TestDataFrameAnalytics.test_sum_nanops_timedeltac                 C   sJ   t g dg dd}|jdd}ttjtjgddgd}t|| d S )	Nr   r   r   r   )r    yr   r$  r    r'  r   )r	   r/   r   rC   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/   )rs   rX   r   rF   Zdeltasr#   r#   r$   test_sum_objecta  s    z&TestDataFrameAnalytics.test_sum_objectc                 C   s"   t |}|d |d d S )Nr)   r   )rC   isnanr/   )rs   rX   boolsr#   r#   r$   test_sum_boolg  s    

z$TestDataFrameAnalytics.test_sum_boolc                 C   sv   t tdddg ddg d}tjtdd | }W d    n1 sP0    Y  td	d
i}t|| d S )Nr   r   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 d    n1 s00    Y  |jddd}t |j|j t|jt|jk spJ t jtdd |jdd}W d    n1 s0    Y  |jddd}t |j|j |d dk|d	< |d}|d	 |d	 j	 ksJ d S )
Nr  r2   r   r-   TrV   r)   r   bool)
r9   r:   r8   r   r/   Zassert_index_equalr5   r=   r   r   )rs   rX   rY   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 d    n1 s0    Y  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	   rC   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 d    n1 s0    Y  d S )Nr   r1  r   r2  r   Fr  r)   )r)   r   r4  r3  r   r
  r   z"mean is not implemented for Periodr2   )r	   rC   r   r   r   r  r   r   r   r9   r>   r5  r@   rA   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  )rC   ra   randintr	   r   r9   r>   )rs   r   rK   rL   rP   r#   r#   r$   *test_mean_extensionarray_numeric_only_true  s
    zATestDataFrameAnalytics.test_mean_extensionarray_numeric_only_truec                 C   sZ   t jtdd8 |d |d |d |d W d    n1 sL0    Y  d S )Nr   r2   r)   )r9   r:   r8   ro   rn   r   ru   )rs   rY   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s4J d S )Nr)   r   r)  r-   r   )r	   r<   r   r/   )rs   rK   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 d    n1 s0    Y  d S Nr   r      r   r  )TF)r   r)   r&   z)No axis named 2 for object type DataFramer2   r   r-   )rC   r   r  idxminr?   r   r9   r>   r@   rA   rB   
rs   rX   r   rF   r(   r'   rK   rL   rP   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 d    n1 s0    Y  d S r>  )rC   r   r  idxmaxr?   r   r9   r>   r@   rA   rB   rA  r#   r#   r$   test_idxmax  s    z"TestDataFrameAnalytics.test_idxmaxc                 C   sP  t ddd}tg dtdd d d |jddd}| }tg d	g dd
}t|| | }tg dg dd
}t|| t	j
|jd< | }tg d	g dd
}t|| | }tg dg dd
}t|| |d d d |d< |  | }tg dg dd
}t|| | }tg dg dd
}t|| d S )Nr1  r   r   )r   r   r)   r  T)deepr   )r)   r   r   r   )r   r   r   )r   r   r   )r)   r   r   r   r   )r   r   r)   r   )r   r	   r<   r  rC  r   r9   r>   r@  r   r   r   r  rs   ZdtirK   rL   rP   r#   r#   r$   test_idxmax_mixed_dtype  s.    *z.TestDataFrameAnalytics.test_idxmax_mixed_dtypezop, expected_valuerC  r   r   r@  r   c                 C   s^   t g dg dddd}|d}t|| }t d|itdd	gddd
d}t|| d S )N)d   rH  rH     rI  rI  )r   r   r   r)   r   r   )IDvaluer9  r   rJ  rK  rH  rI  )r   r6   r   )r	   groupbyr7   r
   r9   r  )rs   r   Zexpected_valuerK   rL   rP   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g d	}t	
|| |jdd}tg d
}t	
|| d S )Nr1  r   r   r  )r   r   )r   r   r)   r-   )r   r   r   )r   r   r   )r   r	   r  r   r   r  r  rC  r   r9   r>   r@  rF  r#   r#   r$   "test_idxmax_dt64_multicolumn_axis1)  s    z9TestDataFrameAnalytics.test_idxmax_dt64_multicolumn_axis1rE   r]   r^   c                 C   s   t |||dd d S )NT)rd   )rf   )rs   rE   rc   rY   r#   r#   r$   test_any_all?  s    z#TestDataFrameAnalytics.test_any_allc                 C   s$   | d}t|tt||dd d S )NT)rG   )Zfillnar_   r7   rC   )rs   rE   rc   rK   r#   r#   r$   test_any_all_bool_frameE  s    
z.TestDataFrameAnalytics.test_any_all_bool_framec                 C   s  t g dg dg ddg dd}|ddg d	}tg dg dd}t|| |ddg jd	d
d}t|| |d	}tg dg dd}t|| |jd	d
d}t|| |jd d }|du sJ |jd d }|d
u sJ |dg jd d }|d
u sJ d S )N)TFF)TTF)TTTr   r   r   r   r   r)   Tr`   r-   Fr   )r	   r]   r   r9   r>   r^   itemr  r#   r#   r$   test_any_all_extraL  s.    
z)TestDataFrameAnalytics.test_any_all_extrar'   bool_agg_funcr(   c                 C   st   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g d}t|| d S )Nr)   Tr   5r   r&   )TTTT)r	   rC   r   r7   r   r9   r>   )rs   r'   rT  r(   rK   rL   rP   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g d}t	|| d S )Nr)   r   z
1960-02-15z
1960-02-16r   )TTTF)
rC   r   r   r   r   r	   r]   r   r9   r>   )rs   Z
float_dataZdatetime_datarK   rL   rP   r#   r#   r$   test_any_datetime~  s    
z(TestDataFrameAnalytics.test_any_datetimec                 C   s   t g dg dg dd}|jdd}ttjd}t|| t g dg dg dg dd	}|jdd}td
di}t|| d S )Nr   r&  )NNN)col1col2col3TrQ  r   )FFT)rY  rZ  r[  col4r\  F)r	   r^   r   rC   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   r#  categoryr   r   c                 C   s   t |}d }tdd |jD r$t}tj|ddd ||}W d    n1 sR0    Y  t|tjslJ |	 |u s|J tj|ddd& t
t ||jd d}W d    n1 s0    Y  t|tjsJ |	 |u sJ d S )Nc                 s   s   | ]}t |V  qd S r   r   ).0r    r#   r#   r$   	<genexpr>  r   z>TestDataFrameAnalytics.test_any_all_np_func.<locals>.<genexpr>r   Fr3   Zcheck_stacklevelr-   )r	   r]   Zdtypesr8   r9   r:   r;   rC   r]  rR  r7   __name__)rs   funcr   rP   warnrL   r#   r#   r$   test_any_all_np_func  s     5&4z+TestDataFrameAnalytics.test_any_all_np_funcc                 C   sL   t tddgd }|du s$J t tddgd }|du sHJ d S )Nr   r   r   TF)rC   r^   r	   rR  r]   )rs   rL   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rJ |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,J d S )Nr   r   TFr   r   r_  r   r   r   )r`   r'   r   )r	   r   r   r  r   Z_get_bool_datar9   r  r^   r>   r]   )rs   rK   resrP   r#   r#   r$   test_any_all_object_bool_only  s&    z4TestDataFrameAnalytics.test_any_all_object_bool_onlyc              	   C   s   t dditjddgddggddgdd	}d
}tjt|dL tt" t	||d dd W d    n1 sp0    Y  W d    n1 s0    Y  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_productr@   rA   rB   r9   r:   r8   r7   )rs   r   rK   Zxprr#   r#   r$   #test_any_all_level_axis_none_raises  s    z:TestDataFrameAnalytics.test_any_all_level_axis_none_raisesc                 C   s   t g d}t dtjdtjgi}tg d}ttjtjdg}td : |j|dd dD ]}t|||dd	 q^W d    n1 s0    Y  d S )
N)r   r   r   r   r   r   r)   r   )lowerr'   )ltlegtgeeqner-   )r	   rC   r   r   r9   r:   Zclipr7   )rs   rK   Zdf_nanry   Zs_nanr   r#   r#   r$   test_series_broadcasting*  s    z/TestDataFrameAnalytics.test_series_broadcasting)Irc  
__module____qualname__r@   markfilterwarningsrt   tdZskip_if_no_scipyrw   r   r   r   parametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   rC   r   r   r   r   r   r  r  r	  r  r  r  r"  r%  r(  r*  r-  r.  r0  r6  r7  r;  r<  r=  rB  rD  rG  rM  rN  rO  rP  rS  rW  rX  r^  r]   r^   r   r   paramrf  rg  ri  rm  ru  r#   r#   r#   r$   rg     sH  


=













5
X
 
&


!

3
"
rg   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   rk   r   r9   r>   rl   )rs   rK   rh  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sJ t|| |jddd	}t
|jd tjg}|j|d jksJ 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   r@   skipr	   r   r   r   rk   r   r   r6   r9   r>   rl   )rs   requestZtz_naive_fixturer   rK   rh  rP   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u | tju ksBJ |jddjtju | tju kshJ t	|jdd| t	|jdd| d S )Nr    r   r-   r)   )
r	   r   r   rk   r    r   r   rl   r9   r>   )rs   rK   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>J t|jddjt| ksdJ t	|jdd| t	|jdd| d S )Nr    r   r   r-   r)   )
r	   r   r   rC   r+  rk   r    rl   r9   r>   )rs   rK   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   rk   rl   )r  c                 C   s<   t |}t|g}t|g}t||dd}t|| d S )Nr)   r-   )r   r   r	   r7   r9   r>   )rs   r  r   Z
initial_dtrP   rK   rL   r#   r#   r$   test_preserve_timezone  s
    

z.TestDataFrameReductions.test_preserve_timezonec                 C   s   t dg dig dg dgd}tjtdd |jdd	}W d    n1 sP0    Y  t dd
dgiddgd}t|| tjtdd |jdd	}W d    n1 s0    Y  t dd
d
giddgd}t|| d S )Nr   )FFTFTFT)r   r   r   r   r   r   r   )r   r)   r   r   r)   r   r   r   zUsing the levelr2   r   r   FTr   r   )r	   r9   r:   r8   r]   r  r^   )rs   rK   rL   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   ry   r)   ms)r   tr-   FTr   r  )r   r5   rV  )r	   r   r   r]   r9   r>   r  r#   r#   r$   test_frame_any_with_timedelta  s    
z5TestDataFrameReductions.test_frame_any_with_timedeltac                 C   sJ   |g d}t jtdd |jd d W d    n1 s<0    Y  d S )Nr   r(   r2   r  )r9   r:   r8   rm   )rs   frame_or_seriesobjr#   r#   r$   'test_reductions_deprecation_skipna_none  s    z?TestDataFrameReductions.test_reductions_deprecation_skipna_nonec                 C   sd   |g dt g dg dgd}tjtdd  t||dd W d    n1 sV0    Y  d S )Nr   r&  r   r   r2   r   r   )r   Zfrom_arraysr9   r:   r8   r7   )rs   r  reduction_functionsr  r#   r#   r$   *test_reductions_deprecation_level_argument  s
    zBTestDataFrameReductions.test_reductions_deprecation_level_argumentc                 C   sd   |dv rt d |g d}d}t jt|d  t||d d W d    n1 sV0    Y  d S )N)rh   rm   z<Count does not accept skipna. Mad needs a deprecation cycle.r   zAFor argument "skipna" expected type bool, received type NoneType.r2   r  )r@   r  rA   rB   r7   )rs   r  r  r  r   r#   r#   r$   "test_reductions_skipna_none_raises  s    
z:TestDataFrameReductions.test_reductions_skipna_none_raisesN)rc  rv  rw  r  r  r  r  r@   rx  r{  r   r  r  r  r  r  r  r#   r#   r#   r$   r}  8  s   
r}  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 d    n1 sJ0    Y  tjtdd tt|| W d    n1 s0    Y  tjtdd  t||dd	 W d    n1 s0    Y  tjt	d
d  t||d d	}W d    n1 s0    Y  t g t
g td}t|| tjt	d
dd" tt||dd}W d    n1 sf0    Y  t|| d S )Nr   r)   r_  r   )r6   r   does not support reductionr2   FrQ  r   r4   rb  r-   )r   to_framer@   rA   r   r7   rC   r9   r:   r8   r
   r/  r>   )rs   r   serrK   rL   rP   r#   r#   r$   .test_any_all_categorical_dtype_nuisance_column  s&    *,.02zBTestNuisanceColumns.test_any_all_categorical_dtype_nuisance_columnc                 C   s  t dtg di}|d }tjtdd |  W d    n1 sH0    Y  tjtdd |jdd W d    n1 s0    Y  tjtdd | }W d    n1 s0    Y  t	g t
g tjd}t|| |d t|d	< tjtdd |jdd W d    n1 s&0    Y  tjtdd | }W d    n1 s^0    Y  t	d
gd	gd}t|| d S )Nr   )r)   r   r   r   r   r  r2   Fr  r   r4   r   r   r   )r	   r   r@   rA   r   r   r9   r:   r8   r   r
   rC   r   r>   r   r   )rs   rK   r  rL   rP   r#   r#   r$   -test_median_categorical_dtype_nuisance_column  s*    &*&,(zATestNuisanceColumns.test_median_categorical_dtype_nuisance_columnrk   rl   c                 C   sT  t g ddd}t|}|d}tjtdd t||  W d    n1 sR0    Y  tjtdd tt|| W d    n1 s0    Y  tjtdd  t||dd W d    n1 s0    Y  tj	t
dd t|| }W d    n1 s0    Y  tg tg tjd	}t|| tj	t
ddd
 tt||}W d    n1 sh0    Y  t|| |d t|d< tj	t
dd t|| }W d    n1 s0    Y  |dkrtdgdgd}ntdgdgd}t|| tj	t
ddd
 tt||}W d    n1 s:0    Y  t|| d S )N)r   r   r   r   F)Zorderedr   zis not ordered for operationr2   r  r   r4   rb  r   rk   r   r   r   )r   r   r  r@   rA   r   r7   rC   r9   r:   r8   r
   r   r>   r   r   )rs   r   catr  rK   rL   rP   r#   r#   r$   :test_min_max_categorical_dtype_non_ordered_nuisance_column  sD    
*,.,.,
.zNTestNuisanceColumns.test_min_max_categorical_dtype_non_ordered_nuisance_columnc                 C   s   t g dg ddtd}tjtdd | }W d    n1 sF0    Y  tdgdgd	}t|| |d t	d
 |d< tjtdd | }W d    n1 s0    Y  tddgddgd	}t|| d S )Nr   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)
rc  rv  rw  r@   rx  r{  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   )rC   r   r   r   viewZreshaper	   r/   r   r   r  r   r9   r>   )r   rK   rL   rP   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   r9  r   )r	   listr   r/   r   r9   r>   )rK   rL   rP   r#   r#   r$   !test_mixed_frame_with_integer_sumw  s
    r  rW   )TFNr   rk   rl   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   r9  r  r   r   )rC   Ziinfor   rl   rk   r   Z
Int64Dtyper	   r7   r
   r9   r>   )r   rW   Z
int64_infor  rK   rL   rP   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g dd d df  |d d d< t|| d S )NrH  r   r)   r-   r   )r   r   r   )r	   rC   ra   rb   r   r   rm   r9   r>   r   NAr  r   r   Zany_signed_int_ea_dtyperK   r   rL   rP   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 )NrH  r   r)   r   )r	   rC   ra   rb   r   r   r   r  r  r   r=   rm   r9   r>   r  r#   r#   r$    test_mad_nullable_integer_all_na  s    
(
r  r   )rl   rk   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 d    n1 s^0    Y  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  rL  )r   rK   rP   rL   r#   r#   r$   *test_groupby_regular_arithmetic_equivalent  s     .r  ts_valuez
2000-01-01c                 C   st   t dgdgdg| gd}tjtdd | }W d    n1 sF0    Y  tg dtdd	}t|| d S )
Nr)   皙?r   r   zDropping of nuisancer2   )r)   r  r   abcr   )r	   r9   r:   r8   r/   r   r  r>   )r  rK   rL   rP   r#   r#   r$   .test_frame_mixed_numeric_object_with_timestamp  s
    &r  c                  C   s~   t g d} | jdddd}tdg}t|| td}tjt	|d  | j
dddd W d    n1 sp0    Y  d S )	N)r)   r   Tr   r)   F)r'   r   rW   r   z2unsupported operand type(s) for +: 'int' and 'str'r2   )r	   r0   r   r9   r>   reescaper@   rA   r   r/   )rK   rL   rP   r   r#   r#   r$   $test_prod_sum_min_count_mixed_object  s    

r  )rk   rl   r   r   ru   rv   c                 C   s   t tjdd}t|| }d|  d}tjt|d |d d}W d    n1 sV0    Y  td  | }W d    n1 s0    Y  t|| t||dd d S )Nr   zscalar z over the entire DataFramer2   r-   r   )	r	   rC   ra   rb   r7   r9   r:   r8   r>   )r   rK   r   r   rh  rP   r#   r#   r$   $test_reduction_axis_none_deprecation  s    
($r  )TTFr   r   N)T)T)F);datetimer   decimalr   r  Zdateutil.tzr   ZnumpyrC   r@   Zpandas.compatr   Zpandas.util._test_decoratorsutilZ_test_decoratorsrz  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corerz   Zpandas.core.nanopsr   rU   r[   r_   rf   rg   r}  r  r  r  rx  r{  r  r  Zxfailr  r  r   r  r  r  r#   r#   r#   r$   <module>   sh   4      
o

> 
        :  	


	