o
    թZh(                  	   @   s  d dl Zd dlZd dlmZ d dlmZmZ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ejdddgdd Zdd Zejdg ddd Zdd Zdd Zdd Zdd Zdd  Zd!d" Z ejd#ej!gej!gej!ggej!gej!ggfej!gej!gej! ggej!gej"ggfej!gej! gej!ggej!gej"ggfej!gej! gej! ggej!gej! ggfgd$d% Z#dS )&    N)groupby)group_cumprodgroup_cumsum
group_mean	group_sum	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| 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^J t|| d S )N         r   int64dtype
   )   r   )   intp)r   r   Forderr   )axisddofr   )nprandomdefault_rngnanonesastyper   zerostilearangeZsqueezereshapestdZnewaxisalgoallclosertoltmassert_numpy_array_equalselfprngoutcountsvalueslabelsZexpected_outZexpected_counts r2   [/var/www/html/lang_env/lib/python3.10/site-packages/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| j }t jdd	d}t |j	dd
d gg}|d }| 
|||| t ||| jsNJ t|| d S )Nr   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+   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| j }t t 	ddd	}t j
|dddd
ddd }|d }| |||| t ||| jsUJ 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+   r2   r2   r3   $test_group_var_generic_2d_all_finite5   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| 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   r8   r   r   r   r   r9   r   r:   r   r   r   r   r;   gƠ>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_nanD   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s4J |d dks<J t|d d	 d S )
Nr   r   r   gUUUժ?)r   r   r   r   r   r   g        )	r   r6   r   r   r   r!   r&   r)   r?   )r,   r.   r/   r0   r1   r2   r2   r3   test_group_var_constantY   s   z)GroupVarTestMixin.test_group_var_constantN)__name__
__module____qualname__r4   r7   r<   r@   rB   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 )TestGroupVarFloat64Tgh㈵>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>J t
j|d	 d
dd d S )Nr   r   r   r   @B l    J))rG   r   r   rA   gUUUUUU?gMb@?r=   )r   r   r   r6   r   r   r    shaper!   r&   r)   r?   )r,   r-   r.   r/   r0   r1   r2   r2   r3   test_group_var_large_inputso   s   z/TestGroupVarFloat64.test_group_var_large_inputsN)rC   rD   rE   __test__staticmethodr   r&   r   float64r   r(   rI   r2   r2   r2   r3   rF   h   s    rF   c                   @   s"   e Zd ZdZeeZejZ	dZ
dS )TestGroupVarFloat32Tg{Gz?N)rC   rD   rE   rJ   rK   r   r&   r   float32r   r(   r2   r2   r2   r3   rM   ~   s
    rM   r   rN   rL   c           	   	   C   s6  t jt jdd| d}t g d}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g dt jd t j|d d
< ||||d d d f | t j|d< t|| d S )Nr      r   )      rO   )r      r   r   c                 S   s6   t |  rttjdS | d |  |  | d gS )NrR   r   )r	   allr   repeatr   maxmin)groupr2   r2   r3   _ohlc   s   ztest_group_ohlc.<locals>._ohlcrP   rQ   )rP   rP      )r   r6   r   r   Zstandard_normalr!   lenr   r   rU   r#   diffZr_
libgroupbyZ
group_ohlcr)   r?   r*   r   )	r   objZbinsr.   r/   r1   funcrY   expectedr2   r2   r3   test_group_ohlc   s   &4
ra   c                 C   sx   d}t jdgdgdgdgg|d}t |}t jg d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   rR   r   )r   r   r   r   Nr   )Zcheck_dtype)r   r6   
zeros_liker   r)   r*   )pd_opnp_opr   is_datetimelikedataZanswerr1   ngroupsr2   r2   r3   (_check_cython_group_transform_cumulative   s   
$rh   np_dtype)r   Zuint64rN   rL   c                 C   s(   t | j}tt j}}t||| d S N)r   r   typer   Zcumsumrh   )ri   r   rc   rd   r2   r2   r3   "test_cython_group_transform_cumsum   s   rl   c                  C   s"   t j} tt j}}t|||  d S rj   )r   rL   r   Zcumprodrh   )r   rc   rd   r2   r2   r3   #test_cython_group_transform_cumprod   s   rm   c               
   C   s  d} t jg d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 )NF)r   r   r   r   r   r   r   r   r   rR   rL   rP      r   r   Tnsr   m8[ns]r   )r   r6   r   r   rb   fillr   r)   r*   r   timedelta64view)re   r1   rg   rf   actualr`   r2   r2   r3   !test_cython_group_transform_algos   s6   $

(




"	ru   c                  C   s   t jddd} t jdgdd}t jt ddt d	dt d
gddd d d f dd}t jt|t jd}t| |||dd t	
| d d df t jdgdd d S )Nr5   rL   rH   r   r   r   r   r   ro   rR   NaTrp   Tre   r   )r   r!   r6   rr   rs   r    r[   r   r   r)   r*   rt   r/   rf   r1   r2   r2   r3   #test_cython_group_mean_datetimelike   s   
(rz   c               	   C   s   t jddd} t jddd}t jdddd d d f }t jdt jd}tjtdd t| |||d	d
d W d    d S 1 s@w   Y  d S )Nr5   rL   rv   r   r   r   	min_count)matchTr   )re   r{   )r   r!   r   pytestZraisesAssertionErrorr   ry   r2   r2   r3   &test_cython_group_mean_wrong_min_count  s   "r   c                  C   s   t jddd} t jdgdd}t jt dt dgddd d d f dd}t jt|t jd}t| |||d	d
 t	
| d d df t jt t |d |d ddd d S )Nr5   rL   rv   r   r   r   rw   rp   Frx   r   r   )r   r!   r6   rr   rs   r    r[   r   r   r)   r*   divideaddry   r2   r2   r3   :test_cython_group_mean_not_datetimelike_but_has_NaT_values  s    
2r   c                  C   s   t jt jt jgt jt jggdd} t jddgdd}t jt jdgddgddgddgdd	gd
t jggdd}t jg dt jd}t| |||dd t jt jdgdt jggdd}t| | d S )NrL   r   r   r   g      ?g       @g      @g      @g      @r   )r   r   r   r   r   r   Frx   r   )r   r6   r   infr   r   r)   r*   )rt   r/   rf   r1   r`   r2   r2   r3   .test_cython_group_mean_Inf_at_begining_and_end   s   "*r   zvalues, outc                 C   s   t jt jgt jggdd}t jddgdd}t j| dd}t jg dt jd}t||||d dd t j|dd}t|| d S )NrL   r   r   r   )r   r   r   Frx   )r   r6   r   r   r   r)   r*   )r0   r.   rt   r/   rf   r1   r`   r2   r2   r3   -test_cython_group_sum_Inf_at_begining_and_end4  s   r   )$numpyr   r}   Zpandas._libsr   r]   Zpandas._libs.groupbyr   r   r   r   r   Zpandas.core.dtypes.commonr   Zpandasr	   Zpandas._testingZ_testingr)   r
   rF   rM   markZparametrizera   rh   rl   rm   ru   rz   r   r   r   r   r   r   r2   r2   r2   r3   <module>   s<    U

&
$&&*	