
    d8#                     l   d dl Zd dlZd dlmZ d dl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S )    N)groupby)group_cumprodgroup_cumsum
group_mean	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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order)axisddof   r   )nprandomRandomStatenanonesastyper   zerosrandtilearangesqueezereshapestdnewaxisalgoallclosertoltmassert_numpy_array_equalselfprngoutcountsvalueslabelsexpected_outexpected_countss           `/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/pandas/tests/groupby/test_libgroupby.pytest_group_var_generic_1dz+GroupVarTestMixin.test_group_var_generic_1d   sE   y$$T**v'//
;;!7+++diiA&&--dj9991t,,33F;; Jv&&vS&99==11=MMQRR
!!RZ- !1*		#vvv...{3di88888
#FO<<<<<    c                 h   t           j                            d          }t           j        t          j        d          z                      | j                  }t          j        d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#   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$$T**v'//
;;!7+++dii1oo,,TZ888!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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_finite4   s   y$$T**v'//
;;!7+++diiA&&--dj999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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   r   r   rB   r   r   r   r   rC   gƠ>r-   )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_nanC   s   y$$T**v'//
;;!7+++diiA&&--dj999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.   rI   )r1   r3   r4   r5   r6   s        r9   test_group_var_constantz)GroupVarTestMixin.test_group_var_constantX   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?   rD   rJ   rM    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))rU   r   r   rL   gUUUUUU?gMb@?rF   )r   r   r   r>   r    r   r$   r"   shaper#   r+   r.   rI   )r1   r2   r3   r4   r5   r6   s         r9   test_group_var_large_inputsz/TestGroupVarFloat64.test_group_var_large_inputsn   s    y$$T**hz4441#W---))E""V+33DJ??!%v...		#vvv...ayE!!!!
s4y(@@@@@@r;   N)rN   rO   rP   __test__staticmethodr   r+   r   float64r   r-   rW   rQ   r;   r9   rS   rS   g   sH        H<	""DJEDA A A A Ar;   rS   c                   :    e Zd ZdZ ee          Zej        Z	dZ
dS )TestGroupVarFloat32Tg{Gz?N)rN   rO   rP   rX   rY   r   r+   r   float32r   r-   rQ   r;   r9   r\   r\   }   s.        H<	""DJEDDDr;   r\   r   r]   rZ   c           
         t          j        t           j                            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 )N   r   )      r_   )r      r   r   c                     t          |                                           rt          j        t          j        d          S | d         |                                 |                                 | d         gS )Nrb   r   )r	   allr   repeatr    maxmin)groups    r9   _ohlcztest_group_ohlc.<locals>._ohlc   sU    ;;?? 	(9RVQ'''a%))++uyy{{E"I>>r;   r`   ra   )r`   r`      )r   r>   r   randnr#   lenr   r   rf   r&   diffr_
libgroupby
group_ohlcr.   rI   r/   r    )	r   objbinsr3   r4   r6   funcrj   expecteds	            r9   test_group_ohlcrv      s   
(29??2&&e
4
4
4C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   rb   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]   rZ   c                     t          j        |           j        }t          t           j        }}t          |||           d S N)r   r   typer   cumsumr   )r   r   rz   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   rZ   r   cumprodr   )r   rz   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   rb   rZ   r`      r   r   Tnsr   m8[ns]r   )r   r>   r   r    ry   fillr   r.   r/   r   timedelta64view)r|   r6   r   r}   actualru   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=   rZ   rV   r   r   r   r   r   r   rb   NaTr   Tr|   r   )r   r#   r>   r   r   r"   rm   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=   rZ   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=   rZ   r   r   r   r   r   r   Fr   r   r   )r   r#   r>   r   r   r"   rm   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;   )numpyr   r   pandas._libsr   rp   pandas._libs.groupbyr   r   r   r   pandas.core.dtypes.commonr   pandasr	   pandas._testing_testingr.   r   rS   r\   markparametrizerv   r   r   r   r   r   r   r   rQ   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    r;   