U
    /ea%                     @   s  d dl Z d dlZd dlZedZd dlmZ d dl	m
Z
 d dlmZ e jdd ZG dd dZejd	ejejjfejejjfejejjfgd
d Zdd Zejdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"ejj#e
 ddejddd gd!d" Z$d#d$ Z%d%d& Z&ejdd'd(gd)d* Z'ejdd'd(gd+d, Z(ejj)d-dd.d/ Z*ejjd0dd ggd1d2gd3d4d5 Z+d6d7 Z,dS )8    NZpandas)PANDAS_GT_140)	assert_eqc                 c   sB   z
dV  W 5 zt | | W n tk
r.   Y nX | j| X dS )zVEnsure that an attribute added to 'obj' during the test is
    removed when we're doneN)delattrAttributeError
_accessorsdiscard)objattr r
   G/tmp/pip-unpacked-wheel-dbjnr7gq/dask/dataframe/tests/test_accessors.pyensure_removed   s    
r   c                   @   s(   e Zd Zdd Zedd Zdd ZdS )
MyAccessorc                 C   s   || _ d| _d S )Nitem)r   r   )selfr   r
   r
   r   __init__   s    zMyAccessor.__init__c                 C   s   | j S Nr   r   r
   r
   r   prop   s    zMyAccessor.propc                 C   s   | j S r   r   r   r
   r
   r   method#   s    zMyAccessor.methodN)__name__
__module____qualname__r   propertyr   r   r
   r
   r
   r   r      s   
r   zobj, registrarc              	   C   s   t | dp tt| }|dt t| jg tdd}|jj	dksJt
tt| }||A dhksht
d| jksvt
W 5 Q R X d S )Nminedtype   r   )r   setdirr   ddfrom_pandasZ_partition_typefloatr   r   AssertionErrorr   )r   Z	registrarbeforeinstanceafterr
   r
   r   test_register'   s    	r'   c               	   C   sx   t tjdb tjdt tddg} t| d}|jj	|ksHt
|jjdksXt
|j dksjt
W 5 Q R X d S )Nr      r   r   )r   r    Series
extensionsregister_series_accessorr   pdr!   r   r   r#   r   r   )abr
   r
   r   test_accessor_works:   s    r/   c                  C   s   dd l } tjddddgdddd	g| jtd
tdtdd gdddddddgd}|d d|d< tj|jd< t	|d}||fS )Nr   abcZbcdZcdefZDEFGr(   r         g    eAg   *dAg    AzM8[ns]r   )str_colint_coldt_colEfghindexr3   string
string_col)r6   r=   )
numpyr,   	DataFramearrayintZastypeZNAlocr    r!   )npdfddfr
   r
   r   df_ddfF   s    

 
rF   c                 C   s   | \}}dt |jjkstt|jjj|jjjdd t|jj tj|jj |j	t
d t|jjjjt|jjjjkstt|jj jt|jj jkstd S )NdateF)Zcheck_names)r;   r   )r   r5   dtr#   r   rG   Zto_pydatetimer,   r)   r;   objectr   daskrF   rD   rE   r
   r
   r   test_dt_accessor]   s    
$rL   c              	   C   s<   | \}}t t}|jj W 5 Q R X dt|jks8td S )Nz.dt accessor)pytestraisesr   r3   rH   strvaluer#   rF   rD   rE   excr
   r
   r   test_dt_accessor_not_availabler   s    rS   c                 C   s  | \}}dt |jjkstdt |jjks0tdt |jjksDtdt |jjksXtt|jjdrjtt|jj |jj  t	|jj j
t	|jj j
kstt|jj |jj  t	|jj j
t	|jj j
kstt|jj |jj  t	|jj j
t	|jj j
ks2tt|jjd|jjd t|jjd|jjd t	|jjdj
t	|jjdj
kstt|jjjddd|jjjddd t	|jjjdddj
t	|jjjdddj
kstdD ]b}t|jjjd|d|jjjd|d t	|jjjd|dj
t	|jjjd|dj
kstqdD ]b}t|jjjd|d	|jjjd|d	 t	|jjjd|d	j
t	|jjjd|d	j
ksdtqdd S )
NupperZget_dummiesr-   dF)Zcase)TF)na)regex)r   r3   rO   r#   r=   r;   hasattrr   rT   r   rJ   contains)rF   rD   rE   rV   rW   r
   r
   r   test_str_accessor{   sP    ((* rZ   c              	   C   sN   | \}}t t}|jj W 5 Q R X dt|jks8tdt|jksJtd S )Nz.str accessorrO   )rM   rN   r   r4   rO   rP   r#   r   rQ   r
   r
   r   test_str_accessor_not_available   s
    r[   c                 C   sH   | \}}t |jjd d |jjd d  t |jjd |jjd  d S )Nr   r(   )r   r3   rO   rK   r
   r
   r   test_str_accessor_getitem   s    "r\   c                 C   s*   | \}}t |jjd|jjd d S )Nz	(.*)b(.*))r   r3   rO   
extractallrK   r
   r
   r   test_str_accessor_extractall   s
     r^   zrequires pandas >= 1.4.0)reasonr   ZremoveprefixZremovesuffixc                    s   | \}}|j jd d d }|j jd dd  }d} fdd}t|||||| t|||||| t|||||| d S )Nr   r   z"definitely a missing prefix/suffixc                    s   t | jj |S r   )getattrr3   rO   )rD   argr   r
   r   call   s    z9test_str_accessor_removeprefix_removesuffix.<locals>.call)r3   Zilocr   )rF   r   rD   rE   prefixsuffixmissingrd   r
   rc   r   +test_str_accessor_removeprefix_removesuffix   s    rh   c              
   C   s
  | \}}|j jj|j j dd}t|j jj|j j dd| t|j jj|j j dd| t|j jj|j j |j j gdd|j jj|j j |j j gdd t|j jjdd|j jjdd ddgfD ](}tt |j j| W 5 Q R X qd S )N:)sepfoo)	r3   rO   catrT   r   lowerrM   rN   	TypeError)rF   rD   rE   Zsolor
   r
   r   test_str_accessor_cat   s      $$"rp   c                  C   s   t jdddddtjgdd} tj| dd}t|j | j  t|jjdd	| jjdd	 t|jjd
dd| jjd
dd d S )Nr-   r.   crk   namer   Znpartitions-)na_rep_)rj   rv   )	r,   r)   rC   nanr    r!   r   rO   rl   sdsr
   r
   r   test_str_accessor_cat_none   s
    r|   splitrsplitc                    sr    fdd}t jdddgdd}tj|dd	}d
D ]"}t|||dd|||dd q2||dddjdksntd S )Nc                    s   t | j ||S r   ra   rO   r   argskwargsrc   r
   r   rd      s    z.test_str_accessor_split_noexpand.<locals>.calla b c daa bb cc ddaaa bbb ccc ddddrk   rr   r   rt   r(   r   r1   Fnexpandr(   )r,   r)   r    r!   r   rs   r#   )r   rd   rz   r{   r   r
   rc   r    test_str_accessor_split_noexpand   s     r   c              	      s    fdd}t jdddgdddgd	}tj|d
d}dD ]"}t|||dd|||dd q8tt}||dd W 5 Q R X dt|j	kst
t dddg}tj|d
d}dD ]&}t||d|dd||d|dd qd S )Nc                    s   t | j ||S r   r   r   rc   r
   r   rd     s    z,test_str_accessor_split_expand.<locals>.callr   r   r   Zrow1Zrow2Zrow3r:   r   rt   r   Tr   )r   zn=z
a,bcd,zz,fzaabb,ccdd,z,kkzaaabbb,cccdddd,l,pp,)patr   r   )r,   r)   r    r!   r   rM   rN   NotImplementedErrorrO   rP   r#   )r   rd   rz   r{   r   infor
   rc   r   test_str_accessor_split_expand  s$       r   zNeed to pad columnsc                  C   sv   t dddg} tj| dd}t| jjddd|jjddd t d	d
dg} tj| dd}|jjddd  d S )Nr   Zaar   r   rt   r1   Tr   za b czaa bb cczaaa bbb ccc
   )r,   r)   r    r!   r   rO   r}   Zcomputery   r
   r
   r   +test_str_accessor_split_expand_more_columns  s    "r   r;   Zrange_indexzother index)idsc                 C   s\   t jddgi| d}tj|dd}|d jjdddd}|d jjdddd}t|| d S )	Nr-   za
br:   r(   rt   
Tr   )r,   r?   r    r!   rO   r}   r   )r;   rD   rE   Zpd_aZdd_ar
   r
   r   test_str_split_no_warning)  s
    r   c                 C   sD   | \}}t |jjd|jjd t |jj |jj  d S )NA)r   r=   rO   countisalpharK   r
   r
   r   test_string_nullable_types4  s    r   )-
contextlibr>   rC   rM   Zimportorskipr,   Zdask.dataframeZ	dataframer    Zdask.dataframe._compatr   Zdask.dataframe.utilsr   contextmanagerr   r   markZparametrizer)   r*   r+   r?   Zregister_dataframe_accessorZIndexZregister_index_accessorr'   r/   ZfixturerF   rL   rS   rZ   r[   r\   r^   Zskipifrh   rp   r|   r   r   Zxfailr   r   r   r
   r
   r
   r   <module>   sP   



	7	




