o
    Eh\)                  
   @   s  d dl Zd dlZd dlmZ d dlm  mZ d dl	Z
d dl	mZmZ d dlmZ ejejejejejddgg dddd	 Zd
d Zejjdd Zdd Zdd Zejdddgejdg ddd Zdd Zdd Zejdddgejdg dejdg dg d fg d!g d"fg d#g d fgd$d% Z ejdddgd&d' Z!ejd(d)d*gd+d, Z"ej#ejdddgejd-d.e$d/j%fd0gd1d2 Z&d3d4 Z'dS )5    N)UnsupportedFunctionCall)	DataFrameSeriesInt64Float64)znp.int32znp.int64z
np.float32z
np.float64r   r   )paramsZidsc                 C   s   | j }|}|dkrtj}n|dkrtj}t|jdkr"t|jnt|j}t|jdkr6t|j	nt|j	}|||fS )zZ
    Fixture of dtypes with min and max values used for testing
    cummin and cummax
    r   r   i)
Zparamnpint64float64dtypekindiinfominZfinfomax)Zrequestr   Znp_typemin_valmax_val r   Dlib/python3.10/site-packages/pandas/tests/groupby/test_cumulative.pydtypes_for_minmax   s   	


r   c                  C   s   t dgd dd} | dd  }| jdddd d	d
 }d|_t|| t dgd dd} | d t| d< | dd  }| jdddd dd
 }d|_t|| d S )Nb
      keyvaluer   r   FZ
group_keysc                 S      |   S Ncumprodxr   r   r   <lambda>3       z&test_groupby_cumprod.<locals>.<lambda>d   c                 S   r   r   r   r!   r   r   r   r#   :   r$   )	r   groupbyr    applynametmassert_series_equalastypefloat)dfactualexpectedr   r   r   test_groupby_cumprod.   s   r0   c                  C   st   t dgd dd} | dd  }tg ddd}t|| | jdd	d
d dd }d|_t|| d S )Nr      順 r   r   r   )r2   l    d(	 l     I5 l      Fx:^ r(   Fr   c                 S   r   r   r   r!   r   r   r   r#   K   r$   z/test_groupby_cumprod_overflow.<locals>.<lambda>)r   r&   r    r   r)   r*   r'   r(   )r-   r.   r/   Znumpy_resultr   r   r   test_groupby_cumprod_overflow?   s   r4   c                  C   s\   t ddtjdgg dd} | djddd}t dtjtjgg d	d
}t|| d S )N   r   )r5   r   g      @)ar   cr6   TF)Znumeric_onlyskipna)r5   r   g      @)r   r7   )r   r	   nanr&   r    r)   assert_frame_equal)r-   resultr/   r   r   r   1test_groupby_cumprod_nan_influences_other_columnsQ   s   
r<   c              
   C   sF  | d }| d }t g dg dd}g d}||}t d|i|}|d }t|| |jdd	d
jdd  }t|| ||j	ddgdf< |d |j	ddgdf< ||j	g ddf< |d |j	ddgdf< |d }tj||dd |jdd	d
jdd  }tj||dd |ddi}t
j|j	g ddf< t dt
jdt
jdt
jdt
jdgi}|d }t|| |jdd	d
jdd  }t|| t dgtdgd}ttddgdd}|dd  }t|| t g dg dd}|dj }tg ddd }t|| d S )!Nr   r5   r5   r5   r5   r5   r   r   r   r      r1   r?   r   r   r?   r   r5   AB)r?   r?   r?   r   r   r   r   r5   rB   rA   Fr   c                 S   r   r   cumminr!   r   r   r   r#   l   r$   ztest_cummin.<locals>.<lambda>r         r   r?   rE      T)Zcheck_exactc                 S   r   r   rC   r!   r   r   r   r#   w   r$   r,   r   r   r1   rE   r1   r?   c                 S   r   r   rC   r!   r   r   r   r#      r$   2001r6   r   r   indexr(   r6   r5   r   r5   )r5   r   r   r3   )r   r+   r&   rD   r)   r:   rB   r'   to_framelocr	   r9   pdto_datetimer   r*   r   )r   r   r   base_dfZexpected_minsr-   r/   r;   r   r   r   test_cummin_   sF   
$rT   methodrD   cummaxr   )UInt64r   r   r,   Zbooleanc                 C   s   t g dtjgd d}|d ||d< |d}t dtjgd i|d}t||  }t|| t|d |   }t|| d S )Nr=      r@   rB   rA   r   )	r   r	   r9   r+   r&   getattrr)   r:   rO   )rU   r   rS   groupedr/   r;   r   r   r   test_cummin_max_all_nan_column   s   
r\   c              
   C   s  | d }| d }t g dg dd}g d}||}t d|i|}|d }t|| |jdd	d
jdd  }t|| ||j	ddgdf< ||j	g ddf< |d }t|| |jdd	d
jdd  }t|| |ddi}t
j|j	g ddf< t dt
jdt
jdt
jdt
jdgi}|d }t|| |jdd	d
jdd  }t|| t dgtdgd}ttddgdd}|dd  }t|| t g dg dd}|dj }tg ddd}t|| d S )Nr   r   r=   r>   r@   )r?   r1   r1   r1   r   r?   r?   r?   rB   rA   Fr   c                 S   r   r   rV   r!   r   r   r   r#      r$   ztest_cummax.<locals>.<lambda>rE   rG   c                 S   r   r   r]   r!   r   r   r   r#      r$   r,   rI   r1   r?   c                 S   r   r   r]   r!   r   r   r   r#      r$   r5   rJ   rK   r   rL   r6   rN   )r   r5   r5   )r   r5   r   r3   )r   r+   r&   rV   r)   r:   rB   r'   rO   rP   r	   r9   rQ   rR   r   r*   r   )r   r   r   rS   Zexpected_maxsr-   r/   r;   r   r   r   test_cummax   sB   
$r^   c                  C   s\   t dd tdD } td| | jdd}|d}| }|dd	g }t|| d S )
Nc                 S   s   g | ]}t jj| qS r   )rQ   ZNaTZ_value).0nr   r   r   
<listcomp>   s    z:test_cummax_i8_at_implementation_bound.<locals>.<listcomp>rF   r5   zM8[ns]rA   rB   CrA   rB   rc   )	r   ranger   Z_valuesviewr&   rV   r)   r:   )Zserr-   gbresZexpr   r   r   &test_cummax_i8_at_implementation_bound   s   
rh   )r,   r   r   zgroups,expected_datar5   r5   r5   )r5   NNr5   r   r?   r5   Nr   )r5   r?   r?   c           	      C   sh   t dtg d|di}| }||d }t|| dd}t||dd}t|| t|| d S )Nr6   rk   rY   Fr8   )r   r(   )r   r   copyr&   rZ   r)   r:   r*   )	rU   r   groupsZexpected_datar-   Zorigrf   r;   r/   r   r   r   test_cummin_max_skipna   s   ro   c                 C   sn   t tjddgg dd}|g dddg }t|| dd}t tjtjtjgg dd}t|| d S )	N       @)rp   rp   rp   rK   ri   r6   r   Frl   )r   r	   r9   r&   rZ   r)   r:   )rU   r-   rf   r;   r/   r   r   r   $test_cummin_max_skipna_multiple_cols   s
   rq   funcr    cumsumc                 C   s   t g dg dd}|d}d}tjt|d t|| ddd	 W d    n1 s-w   Y  tjt|d t|| dd
 W d    d S 1 sMw   Y  d S )NrN   rj   r@   rA   z+numpy operations are not valid with groupbymatchr5   r   r?   )Zfoo)r   r&   pytestZraisesr   rZ   )rr   r-   gmsgr   r   r   test_numpy_compat	  s   
"ry   z	dtype,valrW   Zuint64)r   l         c                 C   sT   |t jg}tddg|d|d}|d}|| }td|i|d}t|| d S )Nr5   )grpr   rY   rz   r   )rQ   ZNAr   r&   Z	transformr)   r:   )rU   r   valdatar-   r[   r;   r/   r   r   r   #test_nullable_int_not_cast_as_float  s   


r}   c                  C   sD  t ddtjgdtjdgg dgg dd} t dtjgtjdgddggdd	gd}| d
 }t|| | jd
dd }t|| d}tjt|d | d
jdd}W d    n1 saw   Y  | jdd}t|| d}tjt|d | d
j	dd}W d    n1 sw   Y  | j	dd}t|| d S )Nr5   r   	   )r?   r1   r~   rb   )columnsr1   rB   rc   rA   F)Zas_indexz1DataFrameGroupBy.cumsum with axis=1 is deprecatedrt   )Zaxisz2DataFrameGroupBy.cumprod with axis=1 is deprecated)
r   r	   r9   r&   rs   r)   r:   Zassert_produces_warningFutureWarningr    )r-   r/   r;   rx   r   r   r   test_cython_api2'  s$   *&r   )(Znumpyr	   rv   Zpandas.errorsr   Zpandas.util._test_decoratorsutilZ_test_decoratorsZtdZpandasrQ   r   r   Zpandas._testingZ_testingr)   ZfixtureZint32r
   Zfloat32r   r   r0   ZmarkZ
skip_ubsanr4   r<   rT   Zparametrizer\   r^   rh   ro   rq   ry   Zskip_if_32bitr   r   r}   r   r   r   r   r   <module>   sV    

64

