U
    f/e$9                     @   s   d dl m Z mZ d dlmZ d dlZ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mZmZmZmZmZ d dlmZ d dlmZmZ ejZG dd dZd	d
 Z dd Z!dS )    )datetime	timedelta)StringION)PerformanceWarning)Categorical	DataFrameSeries	Timestampcompat
date_rangeoption_context)NumericBlockObjectBlockc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%S )&TestDataFrameBlockInternalsc                 C   sx   t dddd}|d }td|i}|d jjd ks6ttj|jd< |d jjd ksVt|jdksdt|d |ksttd S )	N20130101   
US/Eastern)periodstz   B)r   r   D)r   r   Z_valuesfreqAssertionErrorpdZNaTZiloc)selfZdtitsdf r   K/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/frame/test_block_internals.py,test_setitem_invalidates_datetime_index_freq(   s    zHTestDataFrameBlockInternals.test_setitem_invalidates_datetime_index_freqc                 C   sX   t |jtd}t |jtd}t|| t |jtjd}t |jtjd}t|| d S )Ndtype)r   _mgrintZ_seriestmassert_frame_equalnpint32)r   float_frameZcastedexpectedr   r   r   test_cast_internals9   s    z/TestDataFrameBlockInternals.test_cast_internalsc                 C   s   d|d< |  }t|jjdks$t|  }||k	s8tt|| d|d< t|jjdks`t| }|d ksttt|jjdkstd S )N      @Er   g       @Fr   )Z_consolidatelenr#   blocksr   r%   r&   Z_consolidate_inplace)r   r)   ZconsolidatedZreconsZreturn_valuer   r   r   test_consolidateB   s    z,TestDataFrameBlockInternals.test_consolidatec                 C   s4   |  }ttdtdD ]}t||t|< qd S )NAZ)copyrangeordchr)r   r)   frameletterr   r   r   test_consolidate_inplaceS   s    z4TestDataFrameBlockInternals.test_consolidate_inplacec                 C   s.   d|d< |j  rt|j}|j  s*td S )Nr,   r-   )r#   Zis_consolidatedr   values)r   r)   _r   r   r   test_values_consolidateZ   s    z3TestDataFrameBlockInternals.test_values_consolidatec                 C   st   d|j d< |j d dk s td|d< |d }d|j d< |j d dk sPt|d |k	s`t|dk sptd S )N   r,   r-         )r;   allr   )r   r)   colr   r   r   test_modify_values`   s    

z.TestDataFrameBlockInternals.test_modify_valuesc                 C   s<   d|d< |j  }d||dk< d||dk< t||j  d S )Nr,   r-      r   )r;   r4   r%   Zassert_almost_equal)r   r)   r*   r   r   r   test_boolean_set_unconsn   s
    
z3TestDataFrameBlockInternals.test_boolean_set_unconsc              	   C   s  t ddgi}|d }ttdgtjdd}t|| t ddgi}|d }ttdgtjdd}t|| t dtddddgi}|d }tttddddgtj	dd}t|| t dd dgi}|d }tttj
dgtjdd}t|| t ddd	gi}|d }ttdd	gtjdd}t|| t dd
dgi}|d }ttd
dgtjdd}t|| t dd
dgi}|d }ttd
dgtjdd}t|| t dd
dgi}|d }ttd
dgtj	dd}t|| t ddd gi}|d }ttdtj
gtjdd}t|| t dd
d gi}|d }ttd
tj
gtjdd}t|| t ddddd gi}|d }ttdddd gtj	dd}t|| t dddtdddd gi}|d }ttddtdddd gtj	dd}t|| d S )Nr2   l    )namel            i  r   Tg      ?rD   y      ?       @r   g      @g       @i  )r   r   r'   Zasarrayint64r%   assert_series_equalZuint64r   Zobject_nanZfloat_Zcomplex_)r   r   resultr*   r   r   r   test_constructor_with_convertw   sl      z9TestDataFrameBlockInternals.test_constructor_with_convertc                 C   s   t dddtjt dddgt dddt dddt dddgg}t|}|j}tddi}t  |d< tddd	|d
< |d jdkst	|d
 jdkst	|j}ttdgd tdtdtdg t
dddd
g d}t|| d S )N  r   r>   rD   i  r   zdatetime64[ns]r   )dayssecondsr   M8[ns]zm8[ns]float64   objectztimedelta64[ns]ABCDZfooindex)r   r'   rI   r   Zdtypesr   nowr   r"   r   listr%   rH   )r   float_string_framedatar   rJ   r*   r   r   r   test_construction_with_mixed   s*     	z8TestDataFrameBlockInternals.test_construction_with_mixedc                 C   s   t jdddgdd}ttdd}||d< tdtjddd	d
itdd}t|| ttdt	ddddtdd}ttdd}t 
d|d< t jdddgdd|d< t|| d S )Nr   rD   r   ztimedelta64[s]r!   rT   r2   z00:00:01s)r   r   r   )r   )dt1dt2z
2013-01-01r\   z
2013-01-02z
2013-01-03zdatetime64[D]r]   )r'   arrayr   r5   r   Ztimedelta_ranger%   r&   r	   r   Z
datetime64)r   arrr   r*   r   r   r   "test_construction_with_conversions   s*     
	 
z>TestDataFrameBlockInternals.test_construction_with_conversionsc              	   C   s   dd }d}t jt|d |dddg W 5 Q R X d}tjt|d |d	 W 5 Q R X tjt|d |d
 W 5 Q R X t s|d d S )Nc                 S   s2   t ttdddddfd}t|dddg| d	S )
NrL   r   Zaa   	   r2   r   C)rY   columnsr"   )rW   	itertoolsrepeatr   r   )r"   rY   r   r   r   f   s    zGTestDataFrameBlockInternals.test_constructor_compound_dtypes.<locals>.fz@compound dtypes are not implemented in the DataFrame constructor)match)r2   zdatetime64[h])r   str)rc   r(   zBeither all columns will be cast to that dtype, or a TypeError willrG   rP   rO   )pytestZraisesNotImplementedErrorr%   assert_produces_warningFutureWarningr
   Zis_platform_windows)r   rg   msgZdepr_msgr   r   r    test_constructor_compound_dtypes   s    z<TestDataFrameBlockInternals.test_constructor_compound_dtypesc                 C   sP   t  }t|}t|| |jj t|}t| t|}t|| d S N)r   r%   Zround_trip_pickler&   r#   ndimrepr)r   rX   Ztimezone_frameZempty_frameZ	unpickledr   r   r   test_pickle  s    


z'TestDataFrameBlockInternals.test_picklec                 C   s   d}t jt|ddgd}|j}|j|_|d}|d}d|j_|j	}|j|_|d}|d}d|j_|j|_|j|_	t
t |j|j t
t |j	|j d S )	Nzstarting,ending,measure
2012-06-21 00:00,2012-06-23 07:00,77
2012-06-23 07:00,2012-06-23 16:30,65
2012-06-23 16:30,2012-06-25 08:00,77
2012-06-25 08:00,2012-06-26 12:00,0
2012-06-26 12:00,2012-06-27 08:00,77
r   r   )Zparse_datesr   UTCstartingending)r   Zread_csvr   ru   r;   rU   Ztz_localizeZ
tz_convertrF   rv   r%   Zassert_index_equalZDatetimeIndex)r   rY   r   Zser_startingZ
ser_endingr   r   r   test_consolidate_datetime64!  s"    



z7TestDataFrameBlockInternals.test_consolidate_datetime64c                 C   s   |j r
t|j std S rp   )Z_is_mixed_typer   )r   r)   rX   r   r   r   test_is_mixed_type@  s    
z.TestDataFrameBlockInternals.test_is_mixed_typec              	   C   s   t dd v ttjdddd}t| |d d|d< tj|d d	< t| | }|d  }t	|d d	 s|t
W 5 Q R X d S )
NZchained_assignment)rQ   rQ   )abcd)erg   gh)rU   rd   r}   rR   r~   r{   )r   r   r'   randomrr   ZastypeNaNsumr   isnar   )r   YrJ   expr   r   r    test_stale_cached_series_bug_473D  s    
z<TestDataFrameBlockInternals.test_stale_cached_series_bug_473c           	   	   C   s   t ddgd}tj|d< i }ttP t|jD ]>\}}tddD ]*}||krbd||< tj||< ||| |< qDq2W 5 Q R X d}t	|j
t|| |gf }t	|j
t|| |gf }||  krdksn td S )Nr   r   rT   d      )r   r'   rI   r%   rl   r   	enumeraterU   r5   r/   locr   r   r   )	r   r   ZwasColidtrB   Zmyidfirstsecondr   r   r   $test_strange_column_corruption_issueU  s    

z@TestDataFrameBlockInternals.test_strange_column_corruption_issuec                 C   sT   t dddgj}td|i}tddddgi}t|| t|jjd tsPt	d S )Nr   rD   r   r2   r   )
r   r^   r   r%   r&   
isinstancer#   r0   r   r   )r   r_   rJ   r*   r   r   r    test_constructor_no_pandas_arrayj  s
    z<TestDataFrameBlockInternals.test_constructor_no_pandas_arrayc              
   C   s   t ddddgddddgd	}tjtjddd dgtd
|d< t ddddgddddgtjtjddd dgtd
d}t|d jj	d t
kstt|d jj	d t
kstt|| d S )Nr   rD   r   rQ   ry   rz   r{   r|   )ry   rz   r!   )ry   rz   r{   r   )r   r   ZarraysZPandasArrayr'   r^   rR   typer#   r0   r   r   r%   r&   )r   r   Zdf2r   r   r   !test_add_column_with_pandas_arrays  s    "

z=TestDataFrameBlockInternals.test_add_column_with_pandas_arrayN)__name__
__module____qualname__r    r+   r1   r:   r=   rC   rE   rK   rZ   r`   ro   rs   rw   rx   r   r   r   r   r   r   r   r   r   '   s$   		C	r   c                  C   s`   t dtddd gddi} | d jddd t| jjd jtsDt| 	 
 
 dks\td S )	Nry   r   rD   categoryr!   T)Zinplacer   )r   r   Zfillnar   r#   r0   r;   r   r   Zisnullr   )r   r   r   r   +test_update_inplace_sets_valid_block_values  s    r   c                  C   s   t  } tdgtd| d< tdgtd| d< | d dk | | d dk  d| jd< t dgdgdtd}t| | | jd dkstd S )	Nry   r!   col1r   col2r2   )r   r   )r   r   )r   r   rR   atr%   r&   r   )r   r*   r   r   r   $test_nonconsolidated_item_cache_take  s    
r   )"r   r   ior   re   Znumpyr'   rj   Zpandas.errorsr   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   r   r   r   r	   r
   r   r   Zpandas._testingZ_testingr%   Zpandas.core.internalsr   r   Zskip_array_manager_invalid_testZ
pytestmarkr   r   r   r   r   r   r   <module>   s    $	  ^