U
    >vf[x                     @  s   d dl mZ d dlmZmZ d dlZd dlZd dlZd dlm	Z	m
Z
 d dlZd dlmZ ejddddd	 ZG d
d dZG dd deZG dd deZG dd deZG dd deZG dd deZdS )    )annotations)datetime	timedeltaN)IS64is_platform_windowsTclass)ZautouseZscopec                 #  sv    j }t|j|j|jg} fdd} jj}|js<|j	rDd V  n.|D ]"}||sHt
d|j d| qHd V  d S )Nc                   s.   | \ j jj}t fdd|D S )Nc                 3  s,   | ]$}|j ko" |j ko"|j kV  qd S Nname.0xdtypeklassmethod G/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/indexing/test_coercion.py	<genexpr>#   s    z<check_comprehensiveness.<locals>.has_test.<locals>.<genexpr>)nodesessionitemsany)comboZ	cls_funcsrequestr   r   has_test    s
    

z)check_comprehensiveness.<locals>.has_testztest method is not defined: z, )cls	itertoolsproductklassesdtypesr   configoptionlfkeywordAssertionError__name__)r   r   Zcombosr   optsr   r   r   r   check_comprehensiveness   s    r)   c                	   @  s6   e Zd ZddgZddddddd	d
dg	Zedd ZdS )CoercionBaseindexseriesobjectint64float64
complex128bool
datetime64datetime64tztimedelta64Zperiodc                 C  s   t | d S r   NotImplementedErrorselfr   r   r   r   E   s    zCoercionBase.methodN)r'   
__module____qualname__r    r!   propertyr   r   r   r   r   r*   7   s   r*   c                   @  sH  e Zd ZU dZg Zded< dd Zdd Zej	
dd	efd
efdefgdd Zej	
dd
ejfdejfd	efgdd Zej	
dd
ejfdejfd	efgdd Zej	jdddd Zej	jdddd Zej	jdddd Zej	jdddd Zej	jdddd Zej	jdddd  Zej	jddd!d" Zd#S )$TestSetitemCoercionsetitemz	list[str]r    c                 C  s>   t ddg}t|j|d d < t ddg}t|| d S )Na   )pdSerieslistvaluestmassert_series_equal)r8   Zserexpectedr   r   r   0test_setitem_series_no_coercion_from_values_listQ   s    zDTestSetitemCoercion.test_setitem_series_no_coercion_from_values_listc                 C  s   |  }d||< tjdddddg|d}t|| |jj|ksDt|  }d|j|< tjdddddg|d}t|| |jj|kstdS )z-test index's coercion triggered by assign key   r?            r+   N)	copyr@   rA   rD   rE   r+   r   r&   loc)r8   Zoriginal_seriesZloc_keyZexpected_indexexpected_dtypetempexpr   r   r    _assert_setitem_index_conversionZ   s    
z4TestSetitemCoercion._assert_setitem_index_conversionzval,exp_dtyper   rH   皙?c              	   C  s   t jddddgtdd}|jjtks*t|tkrb| }d}t	j
||d d	|d	< W 5 Q R X n$t td|g }| |||| d S )
Nr?   rI   rJ   rK   abcdrL   z/index 5 is out of bounds for axis 0 with size 4)matchrH   )r@   rA   rB   r+   r   r-   r&   
IndexErrorrM   pytestZraisesIndexrR   )r8   val	exp_dtypeobjrP   msg	exp_indexr   r   r   test_setitem_index_objectn   s    z-TestSetitemCoercion.test_setitem_index_objectc                 C  sL   t ddddg}|jjtjks$tt dddd|g}| |||| d S )Nr?   rI   rJ   rK   r   )	r@   rA   r+   r   npr.   r&   rX   rR   )r8   rY   rZ   r[   r]   r   r   r   test_setitem_index_int64~   s    z,TestSetitemCoercion.test_setitem_index_int64gffffff@c                 C  sX   t jddddgddddgd	}|jjtjks0tt dddd|g}| |||| d S )
Nr?   rI   rJ   rK   rS   g @g@gffffff@rL   )	r@   rA   r+   r   r_   r/   r&   rX   rR   )r8   rY   rZ   r   r[   r]   r   r   r   test_setitem_index_float64   s    z.TestSetitemCoercion.test_setitem_index_float64Test not implementedreasonc                 C  s   t d S r   r5   r7   r   r   r   test_setitem_series_period   s    z.TestSetitemCoercion.test_setitem_series_periodc                 C  s   t d S r   r5   r7   r   r   r   test_setitem_index_complex128   s    z1TestSetitemCoercion.test_setitem_index_complex128c                 C  s   t d S r   r5   r7   r   r   r   test_setitem_index_bool   s    z+TestSetitemCoercion.test_setitem_index_boolc                 C  s   t d S r   r5   r7   r   r   r   test_setitem_index_datetime64   s    z1TestSetitemCoercion.test_setitem_index_datetime64c                 C  s   t d S r   r5   r7   r   r   r   test_setitem_index_datetime64tz   s    z3TestSetitemCoercion.test_setitem_index_datetime64tzc                 C  s   t d S r   r5   r7   r   r   r   test_setitem_index_timedelta64   s    z2TestSetitemCoercion.test_setitem_index_timedelta64c                 C  s   t d S r   r5   r7   r   r   r   test_setitem_index_period   s    z-TestSetitemCoercion.test_setitem_index_periodN)r'   r9   r:   r   r    __annotations__rG   rR   rW   markparametrizer-   rV   r^   r_   r.   r/   r`   ra   xfailre   rf   rg   rh   ri   rj   rk   r   r   r   r   r<   J   sB   
	 
 
 






r<   c                	   @  s  e Zd ZdgZdZdd Zejddde	fdde	fdde	fd	d	e	fgd
d Z
ejddddejfdde	fd	d	e	fgdd Zejddddejfdde	fd	d	e	fgdd Zejjdeddfejddddfgddgdejdedejddddgdd Zdd  Zejdejd!d"d#d!d$fedede	fdde	fd	d	e	fgd%d& Zejjd'd(d)d* Zejjd'd(d+d, Zd-S ).TestInsertIndexCoercionr+   insertc                 C  s2   |  }|d|}t|| |j|ks.tdS )z!test coercion triggered by insertr?   N)rM   rq   rD   assert_index_equalr   r&   r8   originalvaluerF   rO   targetresr   r   r   _assert_insert_conversion   s    z1TestInsertIndexCoercion._assert_insert_conversionz"insert, coerced_val, coerced_dtyper?   rS   Fr   c                 C  sD   t td}|jtkstt d|dddg}| |||| d S )NrT   r>   bcd)r@   rX   rB   r   r-   r&   rx   )r8   rq   coerced_valcoerced_dtyper[   rQ   r   r   r   test_insert_index_object   s    
z0TestInsertIndexCoercion.test_insert_index_object)r?   r?   Nc                 C  sV   |}t jddddg|d}|d k	r&|n|}t jd|dddg|d}| |||| d S )Nr?   rI   rJ   rK   r   r@   rX   rx   )r8   Zany_int_numpy_dtyperq   r|   r}   r   r[   rQ   r   r   r   test_insert_int_index   s
    z-TestInsertIndexCoercion.test_insert_int_index)r?         ?Nc                 C  sV   |}t jddddg|d}|d k	r&|n|}t jd|dddg|d}| |||| d S )Nr   g       @g      @g      @r   r   )r8   Zfloat_numpy_dtyperq   r|   r}   r   r[   rQ   r   r   r   test_insert_float_index   s
    z/TestInsertIndexCoercion.test_insert_float_indexfill_val,exp_dtype
2012-01-01datetime64[ns]
US/Easterntzdatetime64[ns, US/Eastern]r2   r3   idsinsert_value
Asia/Tokyoc           
      C  s  t jddddg|jd}|j|ks&tt jd| dddg|jd}| |||| |jrt d}|d|}|	t
d|}|jt
kstt|| t jddd}|d|}|d||jj}|j|jkstt|| nHt jddd}|d|}|	t
d|}|jt
ks&tt|| d}	|d|	}|	t
d|	}|d |	ksft|jt
ksvtt|| d S )	N
2011-01-01z
2011-01-02
2011-01-03
2011-01-04r   r   r?   r   )r@   ZDatetimeIndexr   r   r&   daterx   	Timestamprq   astyper-   rD   rr   
tz_convert)
r8   fill_valrZ   r   r[   rQ   tsresultrF   itemr   r   r   test_insert_index_datetimes   s@    
 
z3TestInsertIndexCoercion.test_insert_index_datetimesc                 C  s   t ddddg}|jdks tt dddddg}| |t d|d t ddfD ]<}|d|}|t	d|}|jt	kstt
|| qXd S )	N1 day2 dayz3 dayz4 daytimedelta64[ns]z10 dayr   r?   )r@   TimedeltaIndexr   r&   rx   	Timedeltar   rq   r   r-   rD   rr   )r8   r[   rQ   r   r   rF   r   r   r   test_insert_index_timedelta64&  s       z5TestInsertIndexCoercion.test_insert_index_timedelta64z2012-01Mfreq	period[M]c           	      C  s  t jddddgdd}|jdks$tt jddd|t jdddt jdddt jdddg}t|t jrt j|dd}| |||| | |t||| nj|d|}|	t
d|}t|| t|t js|dt|}|	t
dt|}t|| d S )	Nz2011-01z2011-02z2011-03z2011-04r   r   r   r   )r@   PeriodIndexr   r&   Period
isinstancerx   strrq   r   r-   rD   rr   r   )	r8   rq   r|   r}   r[   datarQ   r   rF   r   r   r   test_insert_index_period6  s&    
z0TestInsertIndexCoercion.test_insert_index_periodrb   rc   c                 C  s   t d S r   r5   r7   r   r   r   test_insert_index_complex128^  s    z4TestInsertIndexCoercion.test_insert_index_complex128c                 C  s   t d S r   r5   r7   r   r   r   test_insert_index_boolb  s    z.TestInsertIndexCoercion.test_insert_index_boolN)r'   r9   r:   r    r   rx   rW   rm   rn   r-   r~   r_   r/   r   r   r@   r   r   r   r   r   ro   r   r   r   r   r   r   rp      sp   	

	


	

*	

rp   c                	   @  s   e Zd ZdZeddddgZdd Zdd Zdd	 Z	e
jd
defdefdefdefgdd Ze
jd
dejfdejfdejfdefgdd Ze
jddejfdejfdejfdefgdd Ze
jd
dejfdejfdejfdefgdd Ze
jd
defdefdefdejfgdd Ze
jjd
eddfejdddefgddgdd d! Ze
jjd"d#d$d% Ze
jjd"d#d&d' Ze
jjd"d#d(d) Ze
jjd"d#d*d+ Ze
jd,ejd-d.e d-d.e!d-d/gd0d1 Z"d2d3 Z#d4S )5TestWhereCoercionwhereTFc                 C  s2   |  }|||}t|| |j|ks.tdS )z test coercion triggered by whereN)rM   r   rD   assert_equalr   r&   )r8   rt   condrC   rF   rO   rv   rw   r   r   r   _assert_where_conversionk  s    z*TestWhereCoercion._assert_where_conversionc                   s|    dkr|ddddg}n6t  ttjfr:tj dd}n| fdddD }||d |d	 |d
 |d g|d}||fS )NTFrK   periodsc                 3  s   | ]}|  V  qd S r   r   r   r   r   r   r   z  s     z3TestWhereCoercion._construct_exp.<locals>.<genexpr>)rH            r   r?   rI   rJ   r   )r   r   r_   r2   r@   
date_range)r8   r[   r   r   rZ   rC   rQ   r   r   r   _construct_expt  s    $z TestWhereCoercion._construct_expc                 C  sb   || j }||d ||d |g|d}| ||||| | ||||\}}| ||||| d S )Nr   rI   r   )_condr   r   )r8   r[   r   r   rZ   r   rQ   rC   r   r   r   	_run_test  s
    
zTestWhereCoercion._run_testr   r?   rS         ?      ?c                 C  s2   |}|t d}|jtkst| |||| d S )NrT   )rB   r   r-   r&   r   r8   index_or_seriesr   rZ   r   r[   r   r   r   test_where_object  s    z#TestWhereCoercion.test_where_objectc                 C  s8   |}|ddddg}|j tjks$t| |||| d S )Nr?   rI   rJ   rK   )r   r_   r.   r&   r   r8   r   r   rZ   r   r   r[   r   r   r   test_where_int64  s    z"TestWhereCoercion.test_where_int64zfill_val, exp_dtypec                 C  s8   |}|ddddg}|j tjks$t| |||| d S )NrS   皙@ffffff
@皙@)r   r_   r/   r&   r   r   r   r   r   test_where_float64  s    z$TestWhereCoercion.test_where_float64c                 C  s>   |}|ddddgt jd}|jt jks*t| |||| d S )Nr          @       @      @      @      @      @r   )r_   r0   r   r&   r   r   r   r   r   test_where_complex128  s    
z'TestWhereCoercion.test_where_complex128c                 C  s:   t j}|ddddg}|jtjks&t| |||| d S )NTF)r@   rA   r   r_   bool_r&   r   )r8   r   rZ   r   r[   r   r   r   test_where_series_bool  s    z(TestWhereCoercion.test_where_series_boolr   r   r   r   r2   r3   r   c                 C  s   |}|t jddddd }|jdks,t|}|dkrb|| | fD ]}| |||| qJn"|| fD ]}| |||| qnd S )Nr   rK   Dr   r   r   )r@   r   Z
_with_freqr   r&   Zto_pydatetimeZto_datetime64r   )r8   r   r   rZ   r   r[   fvZscalarr   r   r   test_where_datetime64  s    	z'TestWhereCoercion.test_where_datetime64rb   rc   c                 C  s   t d S r   r5   r7   r   r   r   test_where_index_complex128  s    z-TestWhereCoercion.test_where_index_complex128c                 C  s   t d S r   r5   r7   r   r   r   test_where_index_bool  s    z'TestWhereCoercion.test_where_index_boolc                 C  s   t d S r   r5   r7   r   r   r   test_where_series_timedelta64  s    z/TestWhereCoercion.test_where_series_timedelta64c                 C  s   t d S r   r5   r7   r   r   r   test_where_series_period  s    z*TestWhereCoercion.test_where_series_periodru   	   daysr   c                 C  s   t jddd}tddddg}t d||dg}|||}t|| tdd}t j	|d	 |||d
 gt
d}|d |kst|||}t|| d S )Nz1 DayrK   r   TFz4 DaysNaTnsr   rJ   r   r?   )r@   Ztimedelta_ranger_   arrayr   r   rD   rr   r2   rX   r-   r&   )r8   ru   Ztdir   rF   r   Zdtnatr   r   r   test_where_index_timedelta64  s    z.TestWhereCoercion.test_where_index_timedelta64c           
      C  s0  t jdddd}|d}tdddg}|d |jd	  }t ||d
 |g}|||}t	|| tj
||jd	  td}|||}t |d |d
 |d g}t	|| t jdd}t j||d
 |gtd}|||}t	|| t dd}	t j|	|d
 |	gtd}|||	}t	|| d S )N
2016-01-01rJ   ZQSr   QFT
   r?   r   r   rI   rK   r   z
2020-04-21r   )r@   r   Z	to_periodr_   r   r   r   r   rD   rr   Zasarrayr-   r   rX   r   )
r8   Zdtipir   ru   rF   r   othertdZperr   r   r   test_where_index_period  s&    
z)TestWhereCoercion.test_where_index_periodN)$r'   r9   r:   r   r_   r   r   r   r   r   rW   rm   rn   r-   r   r.   r/   r0   r   r   r   r   r   r@   r   r   ro   r   r   r   r   r   r   r4   r   r   r   r   r   r   r   g  sp   		
 
 
	






 
r   c                   @  s  e Zd ZdZejjdddd Zdd Zej	dd	e
fd
e
fde
fde
fgdd Zej	dd	ejfd
ejfdejfde
fgdd Zej	dd	ejfd
ejfdejfde
fgdd Zejj	deddfejddde
fd	e
fde
fgddddgddd Zej	dejddddfede
fejdd ddfd	e
fde
fgd!d" Zej	d#d	d
ddejd	d$d%d&ejdddedejd	d'ed(d)g	d*d+ Zejjddd,d- Zejjddd.d/ Zejjddd0d1 Zejjddd2d3 Zejjddd4d5 Zej	d#d	d
ddejd	d$d%d&ejdddedejd	d'ed(d6g	d7d8 Zejjddd9d: Zejjddd;d< Z d=S )>TestFillnaSeriesCoercionfillnarb   rc   c                 C  s   t d S r   r5   r7   r   r   r   test_has_comprehensive_tests  s    z5TestFillnaSeriesCoercion.test_has_comprehensive_testsc                 C  s0   |  }||}t|| |j|ks,tdS )z!test coercion triggered by fillnaN)rM   r   rD   r   r   r&   rs   r   r   r   _assert_fillna_conversion#  s    
z2TestFillnaSeriesCoercion._assert_fillna_conversionzfill_val, fill_dtyper?   rS   r   Tc                 C  sH   |}|dt jddg}|jtks$t|d|ddg}| |||| d S )Nr>   rz   r{   )r_   nanr   r-   r&   r   r8   r   r   
fill_dtyper   r[   rQ   r   r   r   test_fillna_object*  s
    z+TestFillnaSeriesCoercion.test_fillna_objectzfill_val,fill_dtypec                 C  sJ   |}|dt jddg}|jt jks&t|d|ddg}| |||| d S )NrS   r   r   )r_   r   r   r/   r&   r   r   r   r   r   test_fillna_float646  s
    z,TestFillnaSeriesCoercion.test_fillna_float64c                 C  sP   |}|dt jddgt jd}|jt jks,t|d|ddg}| |||| d S )Nr   r   r   r   )r_   r   r0   r   r&   r   r   r   r   r   test_fillna_complex128B  s
    
z/TestFillnaSeriesCoercion.test_fillna_complex128r   r   r   r   r   r2   r3   r-   r   c                 C  sl   |}|t dt jt dt dg}|jdks6t|t d|t dt dg}| |||| d S )Nr   r   r   r   )r@   r   r   r   r&   r   r   r   r   r   test_fillna_datetimeS  s"    z-TestFillnaSeriesCoercion.test_fillna_datetimer   r   c           	      C  s   |}d}|t jd|dt jt jd|dt jd|dg}|jdksFtt|dd d kr\|}n
||}|t jd|d|t jd|dt jd|dg}| |||| d S )Nr   r   r   r   r   r   r   )r@   r   r   r   r&   getattrr   r   )	r8   r   r   r   r   r   r[   r   rQ   r   r   r   test_fillna_datetime64tzs  s*    
z1TestFillnaSeriesCoercion.test_fillna_datetime64tzr   rI   leftclosedr   r   r   c                 C  sr   t jdddddtj}t|jt js,t||}||d ||d |d |d	 gt	d
}t	}| 
|||| d S )Nr   g      @rightr   r?   r   rI   rJ   rK   r   )r@   Zinterval_rangerq   r_   r   r   r   ZIntervalDtyper&   r-   r   )r8   r   r   iir[   rQ   r   r   r   r   test_fillna_interval  s    &z-TestFillnaSeriesCoercion.test_fillna_intervalc                 C  s   t d S r   r5   r7   r   r   r   test_fillna_series_int64  s    z1TestFillnaSeriesCoercion.test_fillna_series_int64c                 C  s   t d S r   r5   r7   r   r   r   test_fillna_index_int64  s    z0TestFillnaSeriesCoercion.test_fillna_index_int64c                 C  s   t d S r   r5   r7   r   r   r   test_fillna_series_bool  s    z0TestFillnaSeriesCoercion.test_fillna_series_boolc                 C  s   t d S r   r5   r7   r   r   r   test_fillna_index_bool  s    z/TestFillnaSeriesCoercion.test_fillna_index_boolc                 C  s   t d S r   r5   r7   r   r   r   test_fillna_series_timedelta64  s    z7TestFillnaSeriesCoercion.test_fillna_series_timedelta64Wc                 C  sr   t jdddddt j}t|jt js,t||}||d ||d |d |d gtd	}t}| 	|||| d S )
Nr   rK   r   r   r?   r   rI   rJ   r   )
r@   Zperiod_rangerq   r   r   r   ZPeriodDtyper&   r-   r   )r8   r   r   r   r[   rQ   r   r   r   r   test_fillna_series_period  s    &z2TestFillnaSeriesCoercion.test_fillna_series_periodc                 C  s   t d S r   r5   r7   r   r   r   test_fillna_index_timedelta64  s    z6TestFillnaSeriesCoercion.test_fillna_index_timedelta64c                 C  s   t d S r   r5   r7   r   r   r   test_fillna_index_period  s    z1TestFillnaSeriesCoercion.test_fillna_index_periodN)!r'   r9   r:   r   rW   rm   ro   r   r   rn   r-   r   r_   r/   r0   r   r   r@   r   r   r   ZIntervalr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   

 
	


















r   c                   @  s  e Zd ZU dgZdZi Zded< ddged< dd	ged
< ddged< ddged< ddged< ededged< dD ]0Z	de	 dZ
ejde	dejde	dgee
< qxededged< ejddgdd d! Zejdd
ddddd"d#dg	dd$d% Zejdd
ddddd"d#dg	dd
dddd&d'd'd(g	d)d*d+ Zejd,d- Zd.d/ Zejjd0dddddd
gdd1ejjd2d"d#gdd1d3d4 Zejjd0dd"d#gdd1ejjd2dd"d#gdd1d5d6 Zejjd7d8d9d: Zd;S )<TestReplaceSeriesCoercionr,   replacezdict[str, list]repr>   ry   r-   rK   rH   r.   rS   r   r/   r   r   r0   TFr1   r   r   r   )UTCr   zdatetime64[ns, ]r   r   r   r   dict)paramsc                 C  s   |j S r   paramr8   r   r   r   r   how  s    zTestReplaceSeriesCoercion.howdatetime64[ns, UTC]r   c                 C  s   |j S r   r  r  r   r   r   from_key  s    z"TestReplaceSeriesCoercion.from_keyr2   r3   r4   )r  r   c                 C  s   |j S r   r  r  r   r   r   to_key  s    z TestReplaceSeriesCoercion.to_keyc                 C  sP   |dkr$t t| j| | j| }n(|dkrHtj| j| | j| d}nt|S )z9
        Object we will pass to `Series.replace`
        r  r,   rL   )r  zipr  r@   rA   
ValueError)r8   r	  r  r  replacerr   r   r   r  ,  s    z"TestReplaceSeriesCoercion.replacerc           	      C  s   t jddgdd}t j| j| |dd}|j|ks6t|drN|drNd S |dkrZd S ||}|d	krt|d
ks|dkr|dkrtrt	 rt
d| d|  t j| j| |d|d}n$t j| j| |dd}|j|kstt|| d S )NrJ   rK   Zxxxr	   yyyr+   r
   r   )r   r
  r/   r.   r0   )r.   r/   z32-bit platform buggy: z -> )r+   r
   r   )r@   rX   rA   r  r   r&   
startswithr   r   r   rW   skiprD   rE   	r8   r	  r  r  r  r+   r[   r   rQ   r   r   r   test_replace_series9  s&    

z-TestReplaceSeriesCoercion.test_replace_seriesr  )Zindirectr  c           	      C  st   t jddgdd}t j| j| |dd}|j|ks6t||}t j| j| |dd}|j|ksdtt|| d S NrJ   rK   Zxyzr	   r  r  )	r@   rX   rA   r  r   r&   r   rD   rE   r  r   r   r   test_replace_series_datetime_tzV  s    	
z9TestReplaceSeriesCoercion.test_replace_series_datetime_tzc           	      C  s   t jddgdd}t j| j| |dd}|j|ks6t||}t j| j| |dd}t|jt jrt|jt jr|	|j}n|j|kstt
|| d S r  )r@   rX   rA   r  r   r&   r   r   ZDatetimeTZDtyper   rD   rE   r  r   r   r   %test_replace_series_datetime_datetimej  s    
 z?TestReplaceSeriesCoercion.test_replace_series_datetime_datetimerb   rc   c                 C  s   t d S r   r5   r7   r   r   r   test_replace_series_period  s    z4TestReplaceSeriesCoercion.test_replace_series_periodN)r'   r9   r:   r    r   r  rl   r@   r   r   keyr   rW   fixturer	  r  r  r  r  rm   rn   r  r  ro   r  r   r   r   r   r     s   





  r   )
__future__r   r   r   r   Znumpyr_   rW   Zpandas.compatr   r   Zpandasr@   Zpandas._testingZ_testingrD   r  r)   r*   r<   rp   r   r   r   r   r   r   r   <module>   s$   
e 9 4 N