U
    ¾mœd×<  ã                   @   s²   d dl m Z 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 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Ú	timedeltaN)ÚPerformanceWarning)ÚCategoricalÚ	DataFrameÚSeriesÚ	TimestampÚ
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#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   ú`/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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_internals7   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sˆt‚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_consolidate@   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_inplaceQ   s    z4TestDataFrameBlockInternals.test_consolidate_inplacec              	   C   s¦   |rBt jtdd�� d|jd< W 5 Q R X |jd dk ¡ s>t‚d S d|jd< |jd dk ¡ sbt‚d|d< |d }d|jd< |jd dk ¡ r’t‚|dk ¡ s¢t‚d S )Nz	read-only©Úmatché   r*   r+   é   é   )ÚpytestÚraisesÚ
ValueErrorÚvaluesÚallr   )r   r'   Úusing_copy_on_writeÚcolr   r   r   Útest_modify_valuesX   s    

z.TestDataFrameBlockInternals.test_modify_valuesc                 C   s<   d|d< |j  ¡ }d||dk< d||dk< t ||j ¡ d S )Nr*   r+   é   r   )rA   r2   r#   Zassert_almost_equal)r   r'   r(   r   r   r   Útest_boolean_set_unconsl   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 )Nr0   l   ÿÿÿÿ )Únamel            iÕ  r   Tg      ð?rF   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_convertu   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s†t	‚|d
 jdks˜t	‚|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;   rF   iÐ  r   zdatetime64[ns]r   )ÚdaysÚsecondsr   úM8[ns]zm8[ns]Úfloat64é   Úobjectztimedelta64[ns]ZABCDZfoo©Úindex)r   r%   rK   r   Údtypesr   Únowr   r    r   Úlistr#   rJ   )r   Úfloat_string_frameÚdatar   rL   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 |d  ¡ |¡ tt	dƒt
ddd� d¡dœtdƒd�}|jd dks˜t‚|jd dksªt‚ttdƒd�}t  d¡|d< t jdddgdd�|d< t ||¡ d S )Nr   rF   r   ztimedelta64[s]r   rU   r0   z00:00:01Ús)r   r   r   )r   zM8[s])Údt1Údt2r^   rQ   r_   z
2013-01-01z
2013-01-02z
2013-01-03zdatetime64[D])r%   Úarrayr   r3   r   Ztimedelta_ranger#   Zassert_numpy_array_equalZto_numpyr   r	   ÚastyperW   r   Z
datetime64r$   )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 t jtdd�� |d	ƒ W 5 Q R X t jtdd�� |d
ƒ W 5 Q R X d}t jt|d�� |dƒ W 5 Q R X d S )Nc                 S   s2   t t tdddƒddfd¡ƒ}t|dddg| d	�S )
NrN   r   Zaaé   é	   r0   r   ÚC)r[   Úcolumnsr    )rY   Ú	itertoolsÚrepeatr   r   )r    r[   r   r   r   Úfü   s    zGTestDataFrameBlockInternals.test_constructor_compound_dtypes.<locals>.fz@compound dtypes are not implemented in the DataFrame constructorr9   )r0   zdatetime64[h])r   Ústr)rf   r&   zargument must berI   rR   zD^Unknown datetime string format, unable to parse: aa, at position 0$rQ   )r>   r?   ÚNotImplementedErrorÚ	TypeErrorr@   )r   rj   Ú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   rZ   Ztimezone_frameZempty_frameZ	unpickledr   r   r   Útest_pickle  s    


z'TestDataFrameBlockInternals.test_picklec              	   C   sÎ   t t dddddg¡t dddddg¡ddd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 )Nz2012-06-21 00:00z2012-06-23 07:00z2012-06-23 16:30z2012-06-25 08:00z2012-06-26 12:00z2012-06-27 08:00éM   éA   r   )ÚstartingÚendingÚmeasurer   ÚUTCrv   rw   )r   r   Úto_datetimerv   rA   rV   Ztz_localizeZ
tz_convertrH   rw   r#   Zassert_index_equalZDatetimeIndex)r   r   Zser_startingZ
ser_endingr   r   r   Útest_consolidate_datetime64   sD    ûÿ	ûÿ	íÿ



z7TestDataFrameBlockInternals.test_consolidate_datetime64c                 C   s   |j r
t‚|j st‚d S rp   )Z_is_mixed_typer   )r   r'   rZ   r   r   r   Útest_is_mixed_typeM  s    
z.TestDataFrameBlockInternals.test_is_mixed_typec              
   C   sÎ   t dd ƒ�º ttj d¡ddd�}t|ƒ |d  d¡|d< |rdt ¡ � tj|d d	< W 5 Q R X ntj|d d	< t|ƒ | 	¡ }|d  	¡ }|rªt
 |d d	 ¡rÀt‚nt
 |d d	 ¡sÀt‚W 5 Q R X d S )
NZchained_assignment)rS   rS   )ÚaÚbÚcÚd)Úerj   ÚgÚh)rV   rg   r�   rT   r‚   r   )r
   r   r%   Úrandomrr   ra   r#   Zraises_chained_assignment_errorÚNaNÚsumr   Úisnar   )r   rC   ÚYrL   Úexpr   r   r   Ú test_stale_cached_series_bug_473Q  s$    
ý
z<TestDataFrameBlockInternals.test_stale_cached_series_bug_473c           
   	   C   sî   t ddgd�}tj|d< i }t t¡�d t|jƒD ]R\}}tddƒD ]>}||krbd||< tj||< |rv||j	||f< qD||| |< qDq2W 5 Q R X d}t
|j	t || ¡|gf ƒ}t
|j	t || ¡|gf ƒ}	||	  krädksên t‚d S )Nr   r   rU   éd   éÈ   )r   r%   rK   r#   Zassert_produces_warningr   Ú	enumeraterV   r3   Úlocr-   r   r‡   r   )
r   rC   r   ZwasColÚiÚdtrD   ZmyidÚfirstÚsecondr   r   r   Ú$test_strange_column_corruption_issueh  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   rF   r   r0   r   )
r   r`   r   r#   r$   Ú
isinstancer!   r.   r   r   )r   rb   rL   r(   r   r   r   Ú test_constructor_no_pandas_array  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s–t‚t|d jj	d ƒt
ks²t‚t ||¡ d S )Nr   rF   r   rS   r}   r~   r   r€   )r}   r~   r   )r}   r~   r   r   )r   r   ZarraysZPandasArrayr%   r`   rT   Útyper!   r.   r   r   r#   r$   )r   r   Zdf2r   r   r   Ú!test_add_column_with_pandas_arrayˆ  s    "

ýÿz=TestDataFrameBlockInternals.test_add_column_with_pandas_arrayN)Ú__name__Ú
__module__Ú__qualname__r   r)   r/   r8   rE   rG   rM   r\   rc   ro   rs   r{   r|   rŠ   r“   r•   r—   r   r   r   r   r   %   s"   		C!-	r   c                 C   sd   t dtddd gdd�iƒ}|d jddd� t|jjd jtƒsDt‚| s`| 	¡  
¡  
¡ dks`t‚d S )	Nr}   r   rF   Úcategoryr   T)Zinplacer   )r   r   Zfillnar”   r!   r.   rA   r   r   Zisnullr†   )rC   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s„t‚d S )	Nr}   r   Úcol1r   Úcol2r0   )r   r�   )r�   rž   )r   r   rT   Úatr#   r$   r   )r   r(   r   r   r   Ú$test_nonconsolidated_item_cache_take§  s    
r    )r   r   rh   Únumpyr%   r>   Zpandas.errorsr   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdZpandasr   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      u