o
    d2                     @   s"  d dl Zd dlmZ d dlZd dlZd dlZd dlm	Z	m
Z
mZmZmZmZ d dlmZ ejjejddedd ejdg d	ejd
ddgejdddgdd Zdd Zdd Zdd Zdd Zejdg dedeedgdedgejdgdddd fg ded!ddeed!ddgdedgejdgdddd fg d"ed!ddeed!ddeed!ddgdeddgejdd#gdddd fg d$ed!ddeed!ddeed!ddgdeddgejdd#gdddd fgd%d& Zd'd( Zd)d* Zd+d, Z dS )-    N)ascii_lowercase)	DataFrame
MultiIndexNaTSeries	Timestamp
date_rangen
         m)r
   d   i  sortFTdropnac                    s  d fdd	}t ddd}ttjtt| tj|| tjd|| d}||d	g ||d	d
g d |jdd dd	f< d |jdd dd
f< d |jdd ddf< d |jdd ddf< d |jdd ddf< ||d	g ||d	d
g ||d	gdd ||d	d
gdd d S )NTc                    s   |   }| j||d}|d j d}| j||d}|d jtj d}|s.|jdd}|r9tj||dd ntj||dd t| | d S )N)as_indexr   julier   T)dropF)Zcheck_names)	copygroupbynuniqueapplyr   Zreset_indextmassert_series_equalassert_frame_equal)dfkeysr   Zoriginal_dfgrleftrightr   r    U/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/groupby/test_nunique.pycheck_nunique   s   z2test_series_groupby_nunique.<locals>.check_nuniquez
2015-08-23r
   )Zperiodsr   )jimjoer   r%   r&            %         r      	   Fr   )T)	r   r   nprandomchoicelistr   randintloc)r	   r   r   r   r$   daysframer"   r!   r#   test_series_groupby_nunique   s&   r8   c                  C   s  t tdtdtdd} t tdg dg dd}| jdd	d
 }t|| td|_d|j_|jdd}| d }t|| | 	dd idjd	d}t|| t dgd dgd dtdd}d|j_| 	dd id }t|| d S )NZabbaccZabxaccZabbacx)ABCabc)r'   r   r'   )r'   r'   r   r9   Fr/   columnsxr   r'   r)   )r:   r;   )index)
r   r3   r   r   r   r   r@   namer   replace)r   expectedresultr"   r"   r#   test_nuniqueB   s   
"rE   c                  C   sz   t g dg dg dg dg dgg dd} | dd	gd
  }t| j| jg}tdgd d
|d}t	|| d S )N)r   r'   ZAlice)   r   ZBob)i,  r)   ZCharlie)ip   ZDan)i     ZEdith)amountidrA   r=   rJ   rI   rA   r'   rH   )rA   r@   )
r   r   r   r   Zfrom_arraysrJ   rI   r   r   r   )datarD   r@   rC   r"   r"   r#   test_nunique_with_object[   s   rL   c                  C   s8   t dtd} | jdd }t ddd}t|| d S )NrA   )rA   dtyper   )levelint64)r   objectr   r   r   r   )rK   rD   rC   r"   r"   r#   test_nunique_with_empty_seriesn   s   rQ   c                  C   sr   t tdtdtdgg ddd} | tjddd	  }| tjddd	 tj}t	
|| d S )
Nz2016-06-28 09:35:35z2016-06-28 16:09:30z2016-06-28 16:46:28)123)timerK   rU   h)freqrK   )r   r   Z	set_indexr   pdZGrouperr   r   r   r   r   testrD   rC   r"   r"   r#   test_nunique_with_timegrouperv   s   	
r[   zkey, data, dropna, expected)r?   r?   r?   z
2019-01-01r'   r?   keyrA   rK   )r@   rA   i  )r?   r?   r?   yr^   r^   )r?   r?   r?   r?   r^   c                 C   s6   t | |d}|dgd j|d}t|| d S )N)r\   rK   r\   rK   r   )r   r   r   r   r   )r\   rK   r   rC   r   rD   r"   r"   r#   test_nunique_with_NaT   s   r_   c                  C   sX   t g dtjdgddd} | g d }t dgtdg| jd	}t	|| d S )
N)r'   r   r   r9   Zlevel_0r]   r=   )r   r   r   r   r   )r@   r>   )
r   rX   Indexr   r   r0   arrayr>   r   r   rY   r"   r"   r#   )test_nunique_preserves_column_level_names   s   rb   c                  C   sL   t tdddgd} | g dd d}tg ddd}t|| d S )	Nz
2008-12-31z
2009-01-02dater=   )r   r   r'   r   )r   r   r'   r]   )r   r   r   Z	transformr   r   r   )r   rD   rC   r"   r"   r#   $test_nunique_transform_with_datetime   s   rd   c                 C   sn   t dgd}|d d }|j|| d}| }| r't g |d d dd}nt dg|dd}t|| d S )Nr'   categoryr   )observedrO   )r@   rM   )r   Zastyper   r   r   r   )rf   catZsergbrD   rC   r"   r"   r#   test_empty_categorical   s   ri   )!datetimedtstringr   numpyr0   ZpytestZpandasrX   r   r   r   r   r   r   Zpandas._testingZ_testingr   markZslowZparametrizeZaranger8   rE   rL   rQ   r[   r`   rc   r_   rb   rd   ri   r"   r"   r"   r#   <module>   sZ     ***
