U
    fª/eL  ã                   @   s¦   d dl Zd dlmZ d dlmZmZmZ d dl	m
Z
 d dlmZ d dlmZ G dd„ dƒZG dd	„ d	eƒZG d
d„ deƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    N)Úgroupby)Úgroup_cumprod_float64Úgroup_cumsumÚ	group_var)Úensure_platform_int)Úisnac                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚGroupVarTestMixinc                 C   sÎ   t j d¡}t jt  d¡  | j¡}t jddd}d| dd¡ | j¡ }t  	t  
d¡d	¡ d
¡}t  |¡jdddjdddd d d …t jf }|d }|  ||||¡ t  ||| j¡s¾t‚t ||¡ d S )NéÒ  )é   é   r
   Úint64©Údtypeé
   é   r   )é   Úintp)r
   r   ÚF©Úorder)ÚaxisÚddofé   r   )ÚnpÚrandomÚRandomStateÚnanÚonesÚastyper   ÚzerosÚrandÚtileÚarangeZsqueezeÚreshapeÚstdZnewaxisÚalgoÚallcloseÚrtolÚAssertionErrorÚtmÚassert_numpy_array_equal©ÚselfÚprngÚoutÚcountsÚvaluesÚlabelsZexpected_outZexpected_counts© r2   úH/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/groupby/test_libgroupby.pyÚtest_group_var_generic_1d   s     ÿþz+GroupVarTestMixin.test_group_var_generic_1dc                 C   s®   t j d¡}t jt  d¡  | j¡}t jddd}d| dd¡ | j¡ }t jddd}t  	|j
dd	d
 gg¡}|d }|  ||||¡ t  ||| j¡sžt‚t ||¡ d S )Nr	   )r   r   r   r   r   r   r
   r   )r   r   )r   r   r   r   r   r   r   r   r    Úarrayr$   r%   r&   r'   r(   r)   r*   r+   r2   r2   r3   Ú%test_group_var_generic_1d_flat_labels"   s    z7GroupVarTestMixin.test_group_var_generic_1d_flat_labelsc                 C   s¼   t j d¡}t jt  d¡  | j¡}t jddd}d| dd¡ | j¡ }t  	t  
d¡d¡ d	¡}t j| ddd¡d
ddd }|d }|  ||||¡ t  ||| j¡s¬t‚t ||¡ d S )Nr	   ©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$   r#   r%   r&   r'   r(   r)   r*   r+   r2   r2   r3   Ú$test_group_var_generic_2d_all_finite2   s    z6GroupVarTestMixin.test_group_var_generic_2d_all_finitec                 C   sö   t j d¡}t jt  d¡  | j¡}t jddd}d| dd¡ | j¡ }t j|d d …df< t  	t  
d¡d	¡ d
¡}t  |d d …df jddddjdddd t jt  d¡ g¡j | j¡}|d }|  ||||¡ tj||dd t ||¡ d S )Nr	   r7   r
   r   r   r   r   r   r8   r   r   r   r   r9   gíµ ÷Æ >©r'   )r   r   r   r   r   r   r   r   r    r!   r"   Zvstackr#   r$   ÚTr%   r)   Úassert_almost_equalr*   r+   r2   r2   r3   Ú"test_group_var_generic_2d_some_nanA   s"    (þÿûz4GroupVarTestMixin.test_group_var_generic_2d_some_nanc                 C   sŒ   t jt jgg| jd}t jdgdd}dt jd| jd }t jddd}|  ||||¡ |d dksht‚|d dksxt‚t 	|d d	¡ d S )
Nr   r   r   gUUUÕª¦ê?)r   r   r   r   ©r   r   g        )
r   r5   r   r   r   r   r%   r(   r)   r=   )r,   r.   r/   r0   r1   r2   r2   r3   Útest_group_var_constantV   s    z)GroupVarTestMixin.test_group_var_constantN)Ú__name__Ú
__module__Ú__qualname__r4   r6   r:   r>   r@   r2   r2   r2   r3   r      s
   r   c                   @   s*   e Zd ZdZeeƒZejZ	dZ
dd„ ZdS )ÚTestGroupVarFloat64Tgñhãˆµøä>c                 C   s”   t j d¡}t jt jgg| jd}t jdgdd}| d¡d  | j¡}d|_t j	ddd}|  
||||¡ |d dks|t‚tj|d	 d
dd d S )Nr	   r   r   r   é@B l    J)£)rE   r   r   r?   gUUUUUUµ?gü©ñÒMb@?r;   )r   r   r   r5   r   r   r    r   Úshaper   r%   r(   r)   r=   )r,   r-   r.   r/   r0   r1   r2   r2   r3   Útest_group_var_large_inputsl   s    z/TestGroupVarFloat64.test_group_var_large_inputsN)rA   rB   rC   Ú__test__Ústaticmethodr   r%   r   Úfloat64r   r'   rG   r2   r2   r2   r3   rD   e   s
   rD   c                   @   s"   e Zd ZdZeeƒZejZ	dZ
dS )ÚTestGroupVarFloat32Tg{®Gáz„?N)rA   rB   rC   rH   rI   r   r%   r   Úfloat32r   r'   r2   r2   r2   r3   rK   {   s   rK   c                  C   s   dd„ } | dƒ | dƒ d S )Nc           	   	   S   s4  t jt j d¡| d}t  dddg¡}t  d| ¡}t jt|ƒt jd}tt  t  	d¡t  
t jd|f ¡¡ƒ}tj}||||d d …d f |ƒ dd	„ }t  ||d d… ƒ||dd… ƒ||dd … ƒg¡}t ||¡ t |t jddd
gt jd¡ t j|d d…< ||||d d …d f |ƒ t j|d< t ||¡ d S )Né   r   é   é   )r   é   r   r   c                 S   s6   t | ƒ ¡ rt tjd¡S | d |  ¡ |  ¡ | d gS )NrP   r   éÿÿÿÿ)r   Úallr   Úrepeatr   ÚmaxÚmin)Úgroupr2   r2   r3   Ú_ohlc   s    z.test_group_ohlc.<locals>._check.<locals>._ohlcé   )r   r5   r   Zrandnr   Úlenr   r   rS   r"   ZdiffZr_Ú
libgroupbyZ
group_ohlcr)   r=   r*   r   )	r   ÚobjZbinsr.   r/   r1   ÚfuncrW   Úexpectedr2   r2   r3   Ú_check„   s    &4
ztest_group_ohlc.<locals>._checkrL   rJ   r2   )r^   r2   r2   r3   Útest_group_ohlcƒ   s    r_   c                 C   s|   d}t jdgdgdgdgg|d}t  |¡}t jddddgt jd}d}| |||||ƒ tj||ƒ|dd…df dd	 dS )
a  
    Check a group transform that executes a cumulative function.

    Parameters
    ----------
    pd_op : callable
        The pandas cumulative function.
    np_op : callable
        The analogous one in NumPy.
    dtype : type
        The specified dtype of the data.
    Fr   r   r   rP   r   r   N)Zcheck_dtype)r   r5   Ú
zeros_liker   r)   r*   )Úpd_opÚnp_opr   Úis_datetimelikeÚdataZanswerr1   Úngroupsr2   r2   r3   Ú(_check_cython_group_transform_cumulative¢   s    
rf   c                 C   s(   t  | ¡j}tt j }}t|||ƒ d S ©N)r   r   Útyper   Zcumsumrf   )Zany_real_dtyper   ra   rb   r2   r2   r3   Ú"test_cython_group_transform_cumsum»   s    ri   c                  C   s"   t j} tt j }}t||| ƒ d S rg   )r   rJ   r   Z
cumproductrf   )r   ra   rb   r2   r2   r3   Ú#test_cython_group_transform_cumprodÂ   s    rj   c               
   C   s¤  d} t jdddddgt jd}d}t jdgdgdgt jgdggdd}t  |¡}| t j¡ t||||| ƒ t jddd	t jd
gdd}t |d d …df |¡ t  |¡}| t j¡ t	||||| ƒ t jddd	t jdgdd}t |d d …df |¡ d} t jt  
dd¡gd ddd d …d f }t j|dd}t	|| d¡||| ƒ t  t  
dd¡t  
dd¡t  
dd¡t  
dd¡t  
dd¡g¡}t |d d …df  d¡|¡ d S )NFr   r   r   r   r   rP   rJ   rN   é   r   TÚnsr
   zm8[ns]r   )r   r5   r   r   r`   Úfillr   r)   r*   r   Ztimedelta64Úview)rc   r1   re   rd   Úactualr]   r2   r2   r3   Ú!test_cython_group_transform_algosÉ   s6    $

(




ûÿ	rp   )Znumpyr   Zpandas._libsr   rZ   Zpandas._libs.groupbyr   r   r   Zpandas.core.dtypes.commonr   Zpandasr   Zpandas._testingZ_testingr)   r   rD   rK   r_   rf   ri   rj   rp   r2   r2   r2   r3   Ú<module>   s   U