U
    +ifs+                     @   s  d Z ddlZddl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 ddlmZ ejddddd	d
dejdejdgddddg
dd Zdd Zdd Zdd Zdd Zdd Zdd Zejd dejfdejfd	ejfd!ej fdej!fdej"fdej#fd"d#d$ fd%d&d$ fg	d'd( Z$ejd dejfdd)d$ fd	d*d$ fdej"fdej#fgd+d, Z%d-d. Z&ejd/d"d%ddgejd0ed1ed2gd3d4 Z'ejd5dddddd	ddd6d7d8d9d:d;d<d"d%d=d>d?gd@dA Z(ejddddd	d
dddddg
dBdC Z)ejdDdEdFgejdGdHdIdJdKdLdMdNdOdPg	ejd0ej*dQdRdSdTgdUdVej*dQdRdSdTgdWdVej*dXdYdZd[gd\dVej*dXdYdZd[gd]dVej*dEdEdFdFgd^dVgd_d` Z+dS )az
test cython .agg behavior
    N)is_float_dtype)	DataFrameIndexNaTSeries	Timedelta	Timestampbdate_rangeop_namecountsumZstdvarZsemmeanmedianzignore::RuntimeWarning)Zmarksprodminmaxc           
         s8  ddddddddddt jt jgddgd t jdd}t|}t j|jd	d
d	df< fdd |jdgddd} fdd|D }td|i}d|j_	 |}t
|| |ddg}i }|D ]$\\}}}	 |	d ||i |< qt|jjdd}ddg|j_d|_	 |d }dkr4t
|| d S )Nr      g      ?AB      )r   r   C   
   r   c                    s   t |   S N)getattrx)r
    ]/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/groupby/aggregate/test_cython.py<lambda>4       z(test_cythonized_aggers.<locals>.<lambda>)axisc                    s   i | ]\}}| |d  qS )r   r   ).0catgroup)opr   r    
<dictcomp>8   s      z*test_cythonized_aggers.<locals>.<dictcomp>F)Zdropna)r   r   )npnanrandomrandnr   locZdropgroupbyindexnametmassert_frame_equal
setdefaultTstacknamesassert_series_equal)
r
   datadfgroupedexpresultZexpdZcat1cat2r&   r   )r'   r
   r    test_cythonized_aggers   s.    


r>   c                  C   sd   t tjdddtjddddd} | dd  }| dd tj}t	|| d S )	Nr      2   r   boolabrC   rD   )
r   r)   r+   randintastyper.   r   aggr1   r7   framer<   expectedr   r   r    test_cython_agg_booleanL   s    rK   c               	   C   s   t tjdddddgd d} tjtdd	 | d
d jdd W 5 Q R X tjt	dd	 | d
d   W 5 Q R X t tjdddddgd d} t
t | dg | d
  }W 5 Q R X t g | d
   d}t
|| d S )Nr   r?   r@   foobar   rB   does not implementmatchrC   rD   Tnumeric_onlyzCould not convert (foo|bar)*r/   )r   r)   r+   rE   pytestraisesNotImplementedErrorr.   r   	TypeErrorr1   Zassert_produces_warningFutureWarningZsort_valuesZdrop_duplicatesr2   rH   r   r   r    test_cython_agg_nothing_to_aggY   s    " ""rZ   c               	   C   sb   t tjdddddgd tjdddd	d
} tjtdd | 	dj
jdd W 5 Q R X d S )Nr   r?   r@   rL   rM   rN   nowr4   )periodsfreq)rC   rD   datesrO   rP   rD   TrR   )r   r)   r+   rE   pdZ
date_rangerU   rV   rW   r.   r^   r   )rI   r   r   r    )test_cython_agg_nothing_to_agg_with_datesj   s    
r`   c                  C   sf   t dddgdddgd} | jddd	  | jddd	  | jddd	  | jddd	  d S )
Nr   r         r?   )r   yr   columns)levelr#   )r   r.   r   )r9   r   r   r    test_cython_agg_frame_columnsv   s
    rf   c               
   C   s   t ddddddddgddddddddgtjdtjdd} | dd	 d
d }tddddddddgtddgddd	d}t	|| d S )NrL   rM   onetwothree   )r   r   r   Dr   r   c                 S   s   |    S r   )Zvalue_countsto_dictr   r   r   r    r!      r"   z-test_cython_agg_return_dict.<locals>.<lambda>r   )rh   rg   ri   r   r0   )r/   r0   )
r   r)   r+   r,   r.   rG   r   r   r1   r7   )r9   tsrJ   r   r   r    test_cython_agg_return_dict   s    

	ro   c                  C   sX   t ddd} tdddddgd	 | d
}|dd }| }|tj}t|| d S )Nz1/1/2000r@   )r\   r   r   r   rk   Er   rT   c                 S   s   | j S r   )monthr   r   r   r    r!      r"   z&test_cython_fail_agg.<locals>.<lambda>)r	   r   r.   r   rG   r)   r1   r7   )Zdrrn   r:   ZsummedrJ   r   r   r    test_cython_fail_agg   s    rr   z
op, targopaddfirstc                 C   s
   | j d S Nr   Zilocr   r   r   r    r!      r"   r!   lastc                 C   s
   | j d S )Nrv   r   r   r   r    r!      r"   c                 C   s^   t tjd}tjjddddt}||j| d dd}||	|}t
|| d S )Ni  r   r@   )sizeTZaltrS   )r   r)   r+   r,   rE   rF   floatr.   _cython_agg_generalrG   r1   r2   )r'   targopr9   labelsr<   rJ   r   r   r    test__cython_agg_general   s
    r   c                 C   s   t | dkrt| S tjS ru   )lenr)   r   r*   r   r   r   r    r!      r"   c                 C   s   t j| ddS )Nr   )Zddof)r)   r   r   r   r   r    r!      r"   c                    s   t dddg}tddd}|jt|d ||d}|j| d dd	}|jt|d ||d}| fd
d}t|| d S )N   r      r   7   r?   observedTrz   c                    s    | S r   r   r   r}   r   r    r!      r"   z/test_cython_agg_empty_buckets.<locals>.<lambda>)	r   ranger.   r_   cutr|   rG   r1   r2   )r'   r}   r   r9   grpsgr<   rJ   r   r   r    test_cython_agg_empty_buckets   s    r   c                 C   s  t dddgdgd}tddd}|jt|d || d	jd
d dd}tjdddd}t dddddgitj|dddd}| r||jdk }t	
|| |jt|d || d	jdd dd}t dddddgitj|dddd}| r||jdk }t	
|| d S )Nr   r   r   rC   )rd   r   rN   r?   r   rs   Trz      )r]   $   )r0   ZorderedrT   r   r   i  )r   r   r.   r_   r   r|   Zinterval_rangeZCategoricalIndexrC   r1   r2   )r   r9   r   r<   Z	intervalsrJ   r   r   r    $test_cython_agg_empty_buckets_nanops   s6        r   r'   r8   z2016-10-14 21:00:44.557z17088 days 21:00:44.557c                 C   sZ   t ddg|tgd}tddgdd}t d|tgi|d}|d| }t|| d S )Nr   r   rB   rC   rm   rD   rT   )r   r   r   r.   	aggregater1   r2   )r'   r8   r9   r/   rJ   r<   r   r   r    "test_cython_with_timestamp_and_nat   s
    r   rG   ZohlcZcumprodZcumsumshiftanyallZquantileZrankZcumminZcummaxc                 C   sr   t dddddgdddddgd}d|jjd	 j_|d
gd| i}| d
gd| i}t	|| d S )Ngffffff@g@g@gffffff@g      @Zsetosa)sepal_lengthspeciesFr   r   r   )
r   Z_mgrZarraysflagsZ	writeabler.   rG   copyr1   Zassert_equal)rG   r9   r<   rJ   r   r   r     test_read_only_buffer_source_agg   s    r   c                 C   s   t ddgd tjddddddd	d
dtjg
ddd}t|dd |  }|j|d dd}t|dd |  }| dkr|d}t	|| d S )Nr   r   r?   r   r   ra   rb   r      rj   	   Int64dtype)r   r   Zfloat64)r   r   )
r   r_   arrayNAr   r.   ZassignrF   r1   r7   )r
   r9   r<   Zdf2rJ   r   r   r    test_cython_agg_nullable_int'  s    
"
r   with_naTFzop_name, action)r   	large_int)r   always_float)r   r   )r   r   )r   r   )r   preserve)r   r   )rt   r   )rw   r   r   r   ra   rb   r   r   ZInt8g?g?g333333?g?ZFloat32ZFloat64booleanc                 C   s  |rt j| d< tddddg| d}|d}|dkr@t  }nV|dkrdt| jrZ| j}qt  }n2|dkrt| jr~| j}qt  }n|d	kr| j}t|| }|d
 j|kst	|
|}|d
 j|kst	t|d
 | }|j|kst	|d
 
|}|j|kst	d S )Nra   rC   rD   )keycolr   Z
always_intr   r   r   r   )r_   r   r   r.   Z
Int64Dtyper   r   ZFloat64Dtyper   AssertionErrorr   )r8   r
   actionr   r9   r:   Zexpected_dtyper<   r   r   r    test_cython_agg_EA_known_dtypesJ  s0    







r   ),__doc__numpyr)   rU   Zpandas.core.dtypes.commonr   Zpandasr_   r   r   r   r   r   r   r	   Zpandas._testingZ_testingr1   markZparametrizeparamfilterwarningsr>   rK   rZ   r`   rf   ro   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    <module>   s   $	
!




	



! 


