o
    ŀg3                     @   sz   d dl Z d dlZ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mZmZ d dlmZ d dlmZ G dd dZdS )    N)PYPY)CategoricalCategoricalDtype	DataFrameIndexNaTSeries
date_range)	is_scalarc                   @   s  e Zd Zejdddgdd Zdd Zdd	 Zejd
e	de
jfg de
jfejeedddddeejjdddgejdddgdd Zejdddde
jge	dfddde
jgg dfgejdd d!gejd"ddgd#d$ Zejd"ddgejdd d!gd%d& Zejd'ddgd(d) Zejd'ddgd*d+ Zejd,g d-ejd'ddgd.d/ Zejd0d1d2gd3d4 Zejd5g d6g d7d8gfg d9g d7d8dgfg d:g d7g d7fe
je
je
jd;d8gg d7d8d;gfe
je
je
jd;d8d;gg d7d;gfe
je
jd;d8d;gg d7d;gfgd<d= Zd>d? Zd@dA ZdBdC ZdDdE ZdFdG ZdHdI ZdJdK ZejdLddMg ddNgdOdP Z dQdR Z!dSS )TTestCategoricalAnalyticsaggregationminmaxc                 C   s   t g ddd}d| }t||}tjt|d |  W d    n1 s'w   Y  |dkr3tjntj}tjt|d || W d    d S 1 sNw   Y  d S )NabcdFordered)Categorical is not ordered for operation matchr   )	r   getattrpytestraises	TypeErrornpminimummaximumreduce)selfr   catmsgagg_funcufunc r&   b/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/arrays/categorical/test_analytics.pytest_min_max_not_ordered_raises   s   

"z8TestCategoricalAnalytics.test_min_max_not_ordered_raisesc                 C   s   t g ddd}||}| }| }|dksJ |dks J tj|dks*J tj|dks4J t g dg ddd}||}| }| }|dksQJ |dksWJ tj|dksaJ tj|dkskJ d S )Nr   Tr   r   r   )r   r   r   r   
categoriesr   )r   r   r   r   r   r    r   )r!   index_or_series_or_arrayr"   obj_min_maxr&   r&   r'   test_min_max_ordered%   s$   z-TestCategoricalAnalytics.test_min_max_orderedc                 C   sp   t g ddd}t|}|d}tt dg|jd}t|| |d}tt dg|jd}t|| d S )	Nr   Tr   r   r   dtyper   r   )r   r   aggr   r1   tmassert_series_equal)r!   r"   df
result_maxexpected_max
result_minexpected_minr&   r&   r'   test_min_max_reduce<   s   

z,TestCategoricalAnalytics.test_min_max_reducezcategories,expectedABC         z
2020-01-01r?   )periodscategoryr0   z1https://github.com/pandas-dev/pandas/issues/29962)reason)marksc                 C   s.   t g |dd}t||}| }||u sJ d S NTr)   )r   r   )r!   r*   expectedr   r"   r$   resultr&   r&   r'   test_min_max_ordered_emptyI   s   
z3TestCategoricalAnalytics.test_min_max_ordered_emptyzvalues, categoriesr   r   r   cbar=   r>   r?   r>   r=   skipnaTFfunctionc                 C   s`   t ||dd}t|||d}|du r|tju sJ d S |dkr$|d n|d }||ks.J d S )NTr)   rJ   Fr   r   r>   )r   r   r   nan)r!   valuesr*   rK   rJ   r"   rF   rE   r&   r&   r'   test_min_max_with_nan`   s   z.TestCategoricalAnalytics.test_min_max_with_nanc                 C   s8   t tjgddgdd}t|||d}|tju sJ d S )Nr=   r>   Tr)   rL   )r   r   rM   r   )r!   rK   rJ   r"   rF   r&   r&   r'   test_min_max_only_nanq   s   z.TestCategoricalAnalytics.test_min_max_only_nanmethodc                 C   sb   t tjddtjgg ddd}tjtdd t||dd W d    d S 1 s*w   Y  d S )	Nr=   r>         r?   r>   r=   Tr)   z.* got an unexpected keywordr   )numeric_only)r   r   rM   r   r   r   r   )r!   rQ   r"   r&   r&   r'    test_numeric_only_min_max_raisesy   s   "z9TestCategoricalAnalytics.test_numeric_only_min_max_raisesc                 C   sh   t g ddd}d| d}tt|}tjtt|d || W d    d S 1 s-w   Y  d S )Nr   r   r   r   Fr   r   zF
you can use .as_ordered() to change the Categorical to an ordered oner   )r   r   r   r   r   r   reescape)r!   rQ   r"   r#   r&   r&   r'   test_numpy_min_max_raises   s   


"z2TestCategoricalAnalytics.test_numpy_min_max_raiseskwarg)axisoutkeepdimsc                 C   s   t g ddd}d| d| }|dkrd}|di}tt|}tjt|d	 ||fi | W d    d S 1 s:w   Y  d S )
NrW   Tr   zthe 'z=' parameter is not supported in the pandas implementation of r\   z8`axis` must be fewer than the number of dimensions \(1\)*   r   )r   r   r   r   r   
ValueError)r!   rQ   r[   r"   r#   kwargsr&   r&   r'   ,test_numpy_min_max_unsupported_kwargs_raises   s   
"zETestCategoricalAnalytics.test_numpy_min_max_unsupported_kwargs_raiseszmethod, expected)r   r   )r   r   c                 C   s6   t g ddd}tt|}||d d}||ksJ d S )NrW   Tr   )r\   )r   r   r   )r!   rQ   rE   r"   rF   r&   r&   r'   #test_numpy_min_max_axis_equals_none   s   
z<TestCategoricalAnalytics.test_numpy_min_max_axis_equals_nonezvalues,categories,exp_mode)r=   r=   r>   rT   rS   rS   rS   rR   rS   )r=   r=   r=   rT   rS   rS   rS   )r=   r>   r?   rT   rS   rT   c                 C   s:   t ||dd}t| j}t ||dd}t|| d S rD   )r   r   mode_valuesr3   assert_categorical_equal)r!   rN   r*   exp_moder"   resexpr&   r&   r'   	test_mode   s   z"TestCategoricalAnalytics.test_modec                 C   s  t g dg d|d}t|}|d}|dksJ t|s J |d}|dks+J t|s1J |dg}|dg}tjdgtjd}t|| t|| |jddgd	d
}|jddgd	d
}tjddgtjd}t|| t|| t	j
tdd |d W d    n1 sw   Y  t	j
tdd |d W d    n1 sw   Y  d}t	j
t|d |ddg W d    n1 sw   Y  t	j
t|d |ddg W d    d S 1 sw   Y  d S )N)cheesemilkapplebreadrn   )rk   rl   rm   rn   r)   rm   r>   rn   r?   r0   right)siderS   cucumberr   zMCannot setitem on a Categorical with a new category, set the categories first)r   r   searchsortedr
   r   arrayintpr3   assert_numpy_array_equalr   r   r   )r!   r   r"   serres_catres_serri   r#   r&   r&   r'   test_searchsorted   sH   

"z*TestCategoricalAnalytics.test_searchsortedc                 C   s   t g d|d}tg d|d}| }t|| tg d|d}| }t|tddg|d tg d|d}| }tg d|d}t|| tdtjdtjdg|d}| }tdtjdg|d}t|| d S )	N)r   r   r   r   r0   )r   r   r   r   r   r   )r   r   r   r   r   )r   r   r   )r   r   uniquer3   rf   r   rM   )r!   r   r1   r"   rh   exp_catr&   r&   r'   test_unique   s   z$TestCategoricalAnalytics.test_uniquec                 C   s   t g d|d}tg d|d}tg d|d}t| | tt| t| tt| | tg d|d}tddg|d}t| | tt| t| tt| | d S )	NrI   r   )r?   r=   r>   r>   r=   r0   )r?   r=   r>   )r=   r=   r>   r>   r=   r>   )r   r   r3   rf   rz   assert_index_equalr   r   )r!   r   r1   r   ri   r&   r&   r'   test_unique_index_series   s   z1TestCategoricalAnalytics.test_unique_index_seriesc                 C   s   t g d}|d}t tjddddg}t|| t|d d |dd   |d}t dddtjtjgg d	d
}t|| t|dd  |d d  t||d d S )N)r   r   r   r   r   r=   r   r   r   r   r   )r*   r>   r   )r   shiftr   rM   r3   rf   )r!   r"   sp1xp1sn2xp2r&   r&   r'   
test_shift  s   

z#TestCategoricalAnalytics.test_shiftc                 C   s"   t g d}d}|j|ksJ d S )Nr<      )r   nbytes)r!   r"   ri   r&   r&   r'   test_nbytes&  s   z$TestCategoricalAnalytics.test_nbytesc                 C   s   t g d}d|j  k r| ksJ  J d|j  k r'|jddks*J  J t g d}|jdd|jks;J tsP|jddt| }t|dk sRJ d S d S )Nr<   r   T)deep)foor   bard   )r   r   memory_usager   sys	getsizeofabs)r!   r"   diffr&   r&   r'   test_memory_usage+  s   "&z*TestCategoricalAnalytics.test_memory_usagec                 C   s   t tdtddd}|jdd d d}t tdtd	dd}t|| t tdtd
dd}|jdd d d}t tdtddd}t|| |jdd d d}t|ttjdgd tj	d d S )NABABCCBATr)   c                 S      |   S Nlowerxr&   r&   r'   <lambda>=      z3TestCategoricalAnalytics.test_map.<locals>.<lambda>)	na_actionababcrH   r;   Fc                 S   r   r   r   r   r&   r&   r'   r   B  r   abcc                 S   s   dS )Nr=   r&   r   r&   r&   r'   r   F  s    r=   rS   r0   )
r   listmapr3   rf   r}   r   r   rs   int64)r!   r   rF   ri   r&   r&   r'   test_map;  s   &z!TestCategoricalAnalytics.test_mapvalueTrueg      @c                 C   s\   t g d}dt|j }tjt|d |j|d W d    d S 1 s'w   Y  d S )N)ABr   Cr   z9For argument "inplace" expected type bool, received type r   )inplace)r   type__name__r   r   r`   sort_values)r!   r   r"   r#   r&   r&   r'   test_validate_inplace_raisesJ  s   "z5TestCategoricalAnalytics.test_validate_inplace_raisesc                 C   sb   t ddg}tddg}|d d j|dd}|jjtjks J |jddgd	d
}t	|| d S )Nr   r   g        g      ?r   linear)interpolationr   T)
allow_fill)
r   r   	_quantile_codesr1   r   int8taker3   assert_extension_array_equal)r!   r"   idxrF   rE   r&   r&   r'   test_quantile_emptyU  s   z,TestCategoricalAnalytics.test_quantile_emptyN)"r   
__module____qualname__r   markparametrizer(   r/   r:   r   r   rM   paramr   r	   r   xfailrG   rO   rP   rV   rZ   rb   rc   rj   ry   r|   r~   r   r   r   r   r   r   r&   r&   r&   r'   r      sx    
*



  
2

r   )rX   r   numpyr   r   pandas.compatr   pandasr   r   r   r   r   r   r	   pandas._testing_testingr3   pandas.api.typesr
   r   r&   r&   r&   r'   <module>   s    $	