U
    sVc,                     @   s  d Z ddlZddlZddlmZ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d/ed0ed1gd2d3 Z(ejd4dddddd	ddd5d6d7d8d9d:d;d!d$d<d=d>gd?d@ Z)ejddddd	d
dddddg
dAdB Z*ejdCdDdEgejdFdGdHdIdJdKdLdMdNdOg	ejd/ej+dPdQdRdSgdTdUej+dPdQdRdSgdVdUej+dWdXdYdZgd[dUej+dWdXdYdZgd\dUej+dDdDdEdEgd]dUgd^d_ Z,dS )`z
test cython .agg behavior
    N)is_float_dtypeis_integer_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    N/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/groupby/aggregate/test_cython.py<lambda>7       z(test_cythonized_aggers.<locals>.<lambda>)axisc                    s   i | ]\}}| |d  qS )r   r    ).0catgroup)opr    r!   
<dictcomp>;   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cat1Z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   aggr2   r8   framer=   expectedr    r    r!   test_cython_agg_booleanO   s    rK   c               
   C   s  t tjdddddgd d} tjtdd	6 tjt	d
d	 | 
dd jdd W 5 Q R X 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   This will raise a TypeErrormatchdoes not implementrC   rD   Tnumeric_onlyzCould not convert (foo|bar)*r0   )r   r*   r,   rE   r2   assert_produces_warningFutureWarningpytestraisesNotImplementedErrorr/   r   	TypeErrorZsort_valuesZdrop_duplicatesr3   rH   r    r    r!   test_cython_agg_nothing_to_agg\   s    "*""r\   c               
   C   s|   t tjdddddgd tjdddd	d
} tjtdd4 t	j
tdd | djjdd W 5 Q R X W 5 Q R X d S )Nr   r?   r@   rL   rM   rN   nowr5   )periodsfreq)rC   rD   datesrO   rP   rR   rD   TrS   )r   r*   r,   rE   pdZ
date_ranger2   rV   rW   rX   rY   rZ   r/   r`   r   )rI   r    r    r!   )test_cython_agg_nothing_to_agg_with_datesn   s    
rb   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   )r:   r    r    r!   test_cython_agg_frame_columns{   s
    rh   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_countsZto_dictr   r    r    r!   r"      r#   z-test_cython_agg_return_dict.<locals>.<lambda>r   )rj   ri   rk   r   r1   )r0   r1   )
r   r*   r,   r-   r/   rG   r   r   r2   r8   )r:   tsrJ   r    r    r!   test_cython_agg_return_dict   s    

	rp   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   rm   Er   rU   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*   r2   r8   )Zdrro   r;   ZsummedrJ   r    r    r!   test_cython_fail_agg   s    rs   z
op, targop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altrT   )r   r*   r,   r-   rE   rF   floatr/   _cython_agg_generalrG   r2   r3   )r(   targopr:   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/   ra   cutr|   rG   r2   r3   )r(   r}   r   r:   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   )rf   r   rN   r?   r   r   Trz      )r_   $   )r1   ZorderedrU   r   r   i  )r   r   r/   ra   r   r|   Zinterval_rangeZCategoricalIndexrC   r2   r3   )r   r:   r   r=   Z	intervalsrJ   r    r    r!   $test_cython_agg_empty_buckets_nanops   s6        r   r(   r9   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   rn   rD   rU   )r   r   r   r/   	aggregater2   r3   )r(   r9   r:   r0   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   copyr2   Zassert_equal)rG   r:   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   rc   rd   r      rl   	   Int64dtype)r   r   Zfloat64)r   r   )
r   ra   arrayNAr   r/   ZassignrF   r2   r8   )r   r:   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   rc   rd   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  }nh|dkrvt| jrZ| j}qt| jrl| 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st
|d
 |}|j|ks t
d S )Nrc   rC   rD   )keycolr   Z
always_intr   r   r   r   )ra   r   r   r/   Z
Int64Dtyper   r   r   ZFloat64Dtyper   AssertionErrorr   )r9   r   actionr   r:   r;   Zexpected_dtyper=   r    r    r!   test_cython_agg_EA_known_dtypesO  s4    








r   )-__doc__Znumpyr*   rX   Zpandas.core.dtypes.commonr   r   Zpandasra   r   r   r   r   r   r	   r
   Zpandas._testingZ_testingr2   markZparametrizeparamfilterwarningsr>   rK   r\   rb   rh   rp   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   <module>   s   $	
!




	



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