
    bMh(              	          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          Z G d d	e          Z G d
 de          Zej                            dddg          d             Zd Zej                            dg d          d             Zd Zd Zd Zd Zd Z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             Z#dS )    N)groupby)group_cumprodgroup_cumsum
group_mean	group_sum	group_var)ensure_platform_int)isnac                   ,    e Zd Zd Zd Zd Zd Zd ZdS )GroupVarTestMixinc                    t           j                            d          }t           j        t          j        d          z                      | j                  }t          j        dd          }d|                    d                              | j                  z  }t          j        t          j	        d          d                              d	          }t          j
        |                              d
d                              dd          dz  d d t           j        f         }|dz   }|                     ||||           t          j        ||| j                  sJ t#          j        ||           d S )N         r   int64dtype
   )   r   )   intp)r   r   Forderr   )axisddofr   )nprandomdefault_rngnanonesastyper   zerostilearangesqueezereshapestdnewaxisalgoallclosertoltmassert_numpy_array_equalselfprngoutcountsvalueslabelsexpected_outexpected_countss           d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/tests/groupby/test_libgroupby.pytest_group_var_generic_1dz+GroupVarTestMixin.test_group_var_generic_1d   sC   y$$Q''v'//
;;!7+++dkk'**11$*===1t,,33F;; Jv&&vS&99==11=MMQRR
!!RZ- !1*		#vvv...{3di88888
#FO<<<<<    c                 f   t           j                            d          }t           j        t          j        d          z                      | j                  }t          j        dd          }d|                    d                              | j                  z  }t          j        dd	          }t          j        |	                    d
          dz  gg          }|dz   }| 
                    ||||           t          j        ||| j                  sJ t          j        ||           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/   r0   s           r9   %test_group_var_generic_1d_flat_labelsz7GroupVarTestMixin.test_group_var_generic_1d_flat_labels%   s   y$$Q''v'//
;;!7+++dkk&))00<<<!6***x&**!*"4"4"9!: ;<< 1*		#vvv...{3di88888
#FO<<<<<r;   c                    t           j                            d          }t           j        t          j        d          z                      | j                  }t          j        dd          }d|                    d                              | j                  z  }t          j        t          j	        d          d                              d	          }t          j
        |                    ddd          d
d          dz  }|dz   }|                     ||||           t          j        ||| j                  sJ t          j        ||           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/   r0   s           r9   $test_group_var_generic_2d_all_finitez6GroupVarTestMixin.test_group_var_generic_2d_all_finite5   s   y$$Q''v'//
;;!7+++dkk'**11$*===1t,,33F;;vfnnQ155AAFFF!K 1*		#vvv...{3di88888
#FO<<<<<r;   c                    t           j                            d          }t           j        t          j        d          z                      | j                  }t          j        dd          }d|                    d                              | j                  z  }t           j        |d d df<   t          j        t          j	        d          d	                              d
          }t          j
        |d d df                             ddd                              dd          dz  t           j        t          j        d          z  g          j                            | j                  }|dz   }|                     ||||           t          j        ||d           t          j        ||           d S )Nr   rA   r   r   r   r   rB   r   rC   r   r   r   r   rD   gƠ>r-   )r   r   r    r!   r"   r#   r   r$   r%   r&   vstackr(   r)   Tr+   r.   assert_almost_equalr/   r0   s           r9   "test_group_var_generic_2d_some_nanz4GroupVarTestMixin.test_group_var_generic_2d_some_nanD   s}   y$$Q''v'//
;;!7+++dkk'**11$*===vqqq!t1t,,33F;;yqqq!t$$Q$5599qq9IIQN#
 

 FF4: 	 !1*		#vvv...
sLw????
#FO<<<<<r;   c                    t          j        t           j        gg| j                  }t          j        dgd          }dt          j        d| j                  z  }t          j        dd          }|                     ||||           |d         dk    sJ |d         dk    sJ t          j        |d         d	           d S )
Nr   r   r   gUUUժ?)r   r   r   r   r   r   g        )	r   r>   r!   r   r"   r$   r+   r.   rJ   )r1   r3   r4   r5   r6   s        r9   test_group_var_constantz)GroupVarTestMixin.test_group_var_constantY   s     hz4441#W---"RWV4:%F%F%FF!6***		#vvv...ayA~~~~4yA~~~~
s4y#.....r;   N)__name__
__module____qualname__r:   r?   rE   rK   rN    r;   r9   r   r      s_        = = ="= = = = = == = =*/ / / / /r;   r   c                   @    e Zd ZdZ ee          Zej        Z	dZ
d ZdS )TestGroupVarFloat64Tgh㈵>c                    t           j                            d          }t          j        t           j        gg| j                  }t          j        dgd          }|                    d          dz                       | j                  }d|_        t          j        dd          }| 	                    ||||           |d         dk    sJ t          j        |d	         d
d           d S )Nr   r   r   r   @B l    J))rV   r   r   rM   gUUUUUU?gMb@?rG   )r   r   r    r>   r!   r   r#   shaper$   r+   r.   rJ   )r1   r2   r3   r4   r5   r6   s         r9   test_group_var_large_inputsz/TestGroupVarFloat64.test_group_var_large_inputso   s    y$$Q''hz4441#W---++e$$v-55djAA!%v...		#vvv...ayE!!!!
s4y(@@@@@@r;   N)rO   rP   rQ   __test__staticmethodr   r+   r   float64r   r-   rX   rR   r;   r9   rT   rT   h   sH        H<	""DJEDA A A A Ar;   rT   c                   :    e Zd ZdZ ee          Zej        Z	dZ
dS )TestGroupVarFloat32Tg{Gz?N)rO   rP   rQ   rY   rZ   r   r+   r   float32r   r-   rR   r;   r9   r]   r]   ~   s.        H<	""DJEDDDr;   r]   r   r^   r[   c           
         t          j        t           j                            d                              d          |           }t          j        g d          }t          j        d|           }t          j        t          |          t           j                  }t          t          j	        t          j
        d          t          j        t           j        d|f                                       }t          j        } ||||d d d f         |           d }t          j         ||d d	                    ||d	d
                    ||d
d                    g          }t          j        ||           t          j        |t          j        g dt           j                             t           j        |d d	<    ||||d d d f         |           t           j        |d<   t          j        ||           d S )Nr      r   )      r`   )r      r   r   c                     t          |                                           rt          j        t          j        d          S | d         |                                 |                                 | d         gS )Nrc   r   )r
   allr   repeatr!   maxmin)groups    r9   _ohlcztest_group_ohlc.<locals>._ohlc   sU    ;;?? 	(9RVQ'''a%))++uyy{{E"I>>r;   ra   rb   )ra   ra      )r   r>   r   r    standard_normalr$   lenr   r	   rg   r&   diffr_
libgroupby
group_ohlcr.   rJ   r/   r!   )	r   objbinsr3   r4   r6   funcrk   expecteds	            r9   test_group_ohlcrw      s   
(29((++;;B??u
M
M
MC8KKK  D
(65
!
!CXc#hhbh///F 29Q<<q$w9P9P!Q!QRRF DDfc!!!T'lF+++? ? ?
 xs2A2ws1R4y)9)955RSS??KLLH3)))"((K(K(KLLLfCGDfc!!!T'lF+++&HQK3)))))r;   c                 (   d}t          j        dgdgdgdgg|          }t          j        |          }t          j        g dt           j                  }d} | |||||           t	          j         ||          |ddd	f         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   rc   r   )r   r   r   r   Nr   )check_dtype)r   r>   
zeros_liker   r.   r/   )pd_opnp_opr   is_datetimelikedataanswerr6   ngroupss           r9   (_check_cython_group_transform_cumulativer      s     O8aS1#sQC(666D]4  FXlll"'222FG	E&$999dVAAAqD\uMMMMMMr;   np_dtype)r   uint64r^   r[   c                     t          j        |           j        }t          t           j        }}t          |||           d S N)r   r   typer   cumsumr   )r   r   r{   r|   s       r9   "test_cython_group_transform_cumsumr      s9     HX#E5E,UE5AAAAAr;   c                  f    t           j        } t          t           j        }}t	          |||            d S r   )r   r[   r   cumprodr   )r   r{   r|   s      r9   #test_cython_group_transform_cumprodr      s,    JE "*5E,UE5AAAAAr;   c            
         d} t          j        g dt           j                  }d}t          j        dgdgdgt           j        gdggd          }t          j        |          }|                    t           j                   t          |||||            t          j        ddd	t           j        d
gd          }t          j        |d d df         |           t          j        |          }|                    t           j                   t          |||||            t          j        ddd	t           j        dgd          }t          j        |d d df         |           d} t          j        t          j
        dd          gdz  d          d d d f         }t          j        |d          }t          ||                    d          |||            t          j        t          j
        dd          t          j
        dd          t          j
        dd          t          j
        dd          t          j
        dd          g          }t          j        |d d df                             d          |           d S )NF)r   r   r   r   r   r   r   r   r   rc   r[   ra      r   r   Tnsr   m8[ns]r   )r   r>   r   r!   rz   fillr   r.   r/   r   timedelta64view)r}   r6   r   r~   actualrv   s         r9   !test_cython_group_transform_algosr      sM   O XoooRW555FG8aS1#sRVHqc2)DDDD]4  F
KK&$AAAxAq"&"-Y???Hqqq!th777]4  F
KKvw@@@xAq"&"-Y???Hqqq!th777 O8R^At,,-1BBB111d7KD]4w///F7++VWoNNNxN1d##N1d##N1d##N1d##N1d##	
 H qqq!t 1 1( ; ;XFFFFFr;   c                  L   t          j        dd          } t          j        dgd          }t          j        t          j        dd          t          j        d	d          t          j        d
          gd          d d d f                             d                              d          }t          j        t          |          t           j                  }t          | |||d           t          j
        | d d df         t          j        dgd                     d S )Nr=   r[   rW   r   r   r   r   r   r   rc   NaTr   Tr}   r   )r   r$   r>   r   r   r#   rn   r   r   r.   r/   r   r4   r~   r6   s       r9   #test_cython_group_mean_datetimeliker      s   XF)444FXqc)))F
^At$$bnQ&=&=r~e?T?TU	
 	
 	
 !!T'	 
g				 	 Xc$iirw///FvvtVTBBBBqqq!tbhs).L.L.LMMMMMr;   c            	      p   t          j        dd          } t          j        dd          }t          j        dd          d d d f         }t          j        dt           j                  }t          j        t
          d          5  t          | |||d	d
           d d d            d S # 1 swxY w Y   d S )Nr=   r[   r   r   r   r   	min_count)matchTr   )r}   r   )r   r$   r   pytestraisesAssertionErrorr   r   s       r9   &test_cython_group_mean_wrong_min_countr     s
   XF)444FXaw'''F8AY'''40DXarw'''F	~[	9	9	9 T T664QRSSSST T T T T T T T T T T T T T T T T Ts   B++B/2B/c                     t          j        dd          } t          j        dgd          }t          j        t          j        d          t          j        d          gd          d d d f                             d                              d          }t          j        t          |          t           j                  }t          | |||d	
           t          j
        | d d df         t          j        t          j        t          j        |d         |d                   d          d                     d S )Nr=   r[   r   r   r   r   r   r   Fr   r   r   )r   r$   r>   r   r   r#   rn   r   r   r.   r/   divideaddr   s       r9   :test_cython_group_mean_not_datetimelike_but_has_NaT_valuesr     s&   XF)444FXqc)))F
^E""BN5$9$9:	
 	
 	
 !!T'	 
g				 	 Xc$iirw///FvvtVUCCCCqqq!tbhryQa)A)A1EEYWWW    r;   c            	      ,   t          j        t           j        t           j        gt           j        t           j        ggd          } t          j        ddg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          }t          j        g dt           j                  }t          | |||d           t          j        t           j        dgdt           j        ggd          }t          j        | |           d S )Nr[   r   r   r   g      ?g       @g      @g      @g      @r   )r   r   r   r   r   r   Fr   r   )r   r>   r!   infr   r   r.   r/   )r   r4   r~   r6   rv   s        r9   .test_cython_group_mean_Inf_at_begining_and_endr      s   X'"&"&)9:)LLLFXq!fG,,,F8
&#c
S#Jc
S#JBFT  D X(((888FvvtVUCCCCx"&!q"&k2)DDDH    r;   zvalues, outc                    t          j        t           j        gt           j        ggd          }t          j        ddgd          }t          j        | d          }t          j        g dt           j                  }t	          ||||d d           t          j        |d          }t          j        ||           d S )Nr[   r   r   r   )r   r   r   Fr   )r   r>   r!   r   r   r.   r/   )r5   r3   r   r4   r~   r6   rv   s          r9   -test_cython_group_sum_Inf_at_begining_and_endr   4  s     Xx"&*)<<<FXq!fG,,,F8F),,,DXiiirw///FffdFD%HHHHx9---H    r;   )$numpyr   r   pandas._libsr   rq   pandas._libs.groupbyr   r   r   r   r   pandas.core.dtypes.commonr	   pandasr
   pandas._testing_testingr.   r   rT   r]   markparametrizerw   r   r   r   r   r   r   r   r   r   r!   r   rR   r;   r9   <module>r      s
        . . . . . .              : 9 9 9 9 9            R/ R/ R/ R/ R/ R/ R/ R/jA A A A A+ A A A,    +    9i"899* * :9*6N N N2 %N%N%NOOB B POBB B B#G #G #GLN N N$T T T  (  ( 6(RVHrvh	'26(RVH)=>6(RVHwi	(BF8bfX*>?6(bfWIx	(BF8bfX*>?6(bfWIy	)RVHwi+@A	     r;   