U
    ¾mœdúF  ã                   @   s¬   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„ ZG dd„ dƒZG dd	„ d	ƒZejd
d„ ƒZdd„ Zdd„ ZdS )é    N)ÚSettingWithCopyError)Ú	DataFrameÚ
MultiIndexÚSeriesÚ	TimestampÚ
date_rangeÚisnaÚnotnac                 C   s   | |kst ‚d S ©N)ÚAssertionError)ÚaÚb© r   úf/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/indexing/multiindex/test_setitem.pyÚassert_equal   s    r   c                   @   sÀ   e Zd Zedfdd„Zdd„ Z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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 ),ÚTestMultiIndexSetItemNc                 C   s.   ||j |< |j | }|d kr |}|||ƒ d S r
   )Úloc)ÚselfÚtargetÚindexersÚvalueÚ
compare_fnÚexpectedÚresultr   r   r   Úcheck   s
    

zTestMultiIndexSetItem.checkc                 C   sæ   ddddddddg}t jt d	d
¡t d	d¡gddgd�}d\}}ttj||d�}| j|||fdfd	d� td||d�}| j|||fdfdd� t||d�}| j|||fdfdd� td||d�}| j|||fdft d¡dd� d S )NÚAÚwÚlr   ÚxÚXÚdZprofitr   éd   éP   ÚtimeZfirm©Únames)r   é   ©ÚcolumnsÚindex)r   r   r   iüÿÿé   r&   é   )r   r   r   r   )r   Úfrom_productÚnpÚaranger   Únanr   Úarray)r   Úcolsr)   ÚtÚnÚdfr   r   r   Útest_setitem_multiindex    s.     ÿý
üz-TestMultiIndexSetItem.test_setitem_multiindexc                 C   s¤   t t d¡ dd¡d d¡td�}d|d< |d d	 d
k}ddg}|d |j||f< t dd
d	dgddgd�}t |j||f |¡ | j	|||f|d tj|d� d S )Né   é   z	A,B,C,D,Eú,©r(   Údtypeéc   ÚFr   r&   r   ÚBÚCg     ÀX@é   ©r)   r(   ©r   r   r   r   r   )
r   r-   r.   ÚreshapeÚsplitÚfloatr   ÚtmÚassert_frame_equalr   )r   r4   Zrow_selectionZcol_selectionÚoutputr   r   r   Útest_setitem_multiindex2>   s$      ÿûz.TestMultiIndexSetItem.test_setitem_multiindex2c                 C   s  t  dddgtdddd�g¡}t  dd	gtd
ddd�g¡}ttj d¡||d�}t  dtdƒfdtdƒfg¡}t  dtd
ƒfdtdƒfg¡}ttj d¡||d�}| j|||f|t	j
d� ttj d¡||d�}| j||td d d ƒf|t	j
d� | ¡ }| j||j|jf|t	j
|d� d S )Nr   r=   r>   z
2015-01-01z
2015-04-01ZMS)ÚfreqÚfooÚbarz
2016-01-01z
2016-02-01)é   r?   r@   z
2015-02-01)r&   r&   )r   r   r   r   )r&   r?   rA   )r   r,   r   r   r-   ÚrandomÚfrom_tuplesr   r   rE   rF   ÚsliceÚcopyr)   r(   )r   Úidxr1   r4   ZsubidxZsubcolsÚvalsrP   r   r   r   Útest_setitem_multiindex3Q   sF    ÿÿÿÿüü
ûz.TestMultiIndexSetItem.test_setitem_multiindex3c              	   C   sÎ   t  ddddddg¡t  ddddddg¡t  ddd¡g}tt j dd	¡|d
ddgd� ¡ }|jdg d }| ¡ }|jdg  d9  < t	 
|jdg |¡ d}tjt|d�� |jd  d9  < W 5 Q R X d S )NrK   ZbazZquxÚoneÚtwor   é   r*   r+   r   r=   r>   r@   r&   zAcannot align on a multi-index with out specifying the join levels©Úmatch)r-   r0   r.   r   rM   ÚrandnÚ
sort_indexr   rP   rE   rF   ÚpytestÚraisesÚ	TypeError)r   ÚarraysÚdf_origr   r4   Úmsgr   r   r   Útest_multiindex_setitem~   s     ý  ÿ
z-TestMultiIndexSetItem.test_multiindex_setitemc              
   C   sÚ   t  ddddddddœi¡}tj|jdd	d
gd�|_| ¡ }|jdddg  d9  < tj}| ¡ }|j	|d d …d d …df d d …f  d9  < t
 ||¡ | ¡ }|j	|d d …d d …df df  d9  < t
 ||¡ d S )NZpricer&   r?   r*   r7   r   ))ÚDEZCoalÚStock)rb   ÚGasrc   )rb   ZElecZDemand)ÚFRrd   rc   )re   ZSolarÚSupIm)re   ZWindrf   ZSitZComÚTyper$   r+   rc   )r   Ú	from_dictr   rN   r)   rP   ÚilocÚpdZ
IndexSlicer   rE   rF   )r   r_   r   rQ   r4   r   r   r   Útest_multiindex_setitem2–   s0    úÿÿ ÿ,(z.TestMultiIndexSetItem.test_multiindex_setitem2c                 C   s~   t tjjdddd� dd¡tdƒdddgddd	ggd
�}tj|d< t ddg¡}||jd< t	 
|jd t|ddgdd�¡ d S )Nr7   é
   é	   ©Úsizer+   Úabcr?   é   rL   r'   r    ç        ç      ð?)r?   r    )r)   Úname)r   r-   rM   ÚrandintrB   Úlistr/   r0   r   rE   Úassert_series_equalr   )r   r4   Úarrr   r   r   Útest_multiindex_assignmentµ   s    ý

z0TestMultiIndexSetItem.test_multiindex_assignmentc              	   C   s„  t  ddg¡}tt jjdddd� dd¡tdƒd	d	d
gd
ddggt jd�}|d jd d… j	}||j
d< t|d
dgddd�}|j
d }t ||¡ |s¤t ||j	¡ |d |j
d< |j
d }|d }t ||¡ d|j
d< tdd
dgddd�}t |j
d |¡ d}tjt|d�� ddddg|j
d< W 5 Q R X tjt|d�� dg|j
d< W 5 Q R X dg|j
d	dgf< |j
d dk ¡ �s€t‚d S )Nrr   rs   r7   rl   rm   rn   r+   rp   r?   rq   rL   )r(   r)   r:   Úcr&   )r?   rz   Úint64)r)   rt   r:   g      à?Úfloat64z@Must have equal len keys and value when setting with an iterablerW   r   r*   )r-   r0   r   rM   ru   rB   rv   r{   ri   Úvaluesr   r   rE   rw   Zassert_numpy_array_equalr[   r\   Ú
ValueErrorÚallr   )r   Úusing_copy_on_writerx   r4   ÚviewÚexpr   r`   r   r   r   Ú'test_multiindex_assignment_single_dtypeÄ   s8    ü



z=TestMultiIndexSetItem.test_multiindex_assignment_single_dtypec           
      C   s®   d}d}dd„ t tt |¡ ¡ ƒD ƒ}|d d… }ttjjd||fd�tj|d�}| 	|¡ 
¡ }|j|d d… d	�}tj|d
< |D ]&\}}t |jd ¡}	|	|j|d
f< q‚d S )Nr!   rl   c                 S   s   g | ]}d | ‘qS )r   r   )Ú.0Únumr   r   r   Ú
<listcomp>÷   s     z>TestMultiIndexSetItem.test_groupby_example.<locals>.<listcomp>r7   rn   )r:   r(   r?   )ÚlevelZnew_colr   )ÚmapÚstrr-   r.   Útolistr   rM   ru   r{   Ú	set_indexrZ   Úgroupbyr/   Úshaper   )
r   ZNUM_ROWSZNUM_COLSZ	col_namesZ
index_colsr4   Úgrprt   Zdf2Únew_valsr   r   r   Útest_groupby_exampleó   s    ý
z*TestMultiIndexSetItem.test_groupby_examplec              	   C   s¦   |}|d }t j|d< t|jdd… ƒ ¡ s0t‚t|jd d… ƒ ¡ sJt‚t|jdd … ƒ ¡ sdt‚t j|d< t|jd ƒs€t‚tj	t
dd�� |d  W 5 Q R X d S )	Nr   )éÐ  r+   é*   éA   )r‘   r+   rl   é1   Ú49rW   )r-   r/   r   r}   r   r   r	   ri   r[   r\   ÚKeyError)r   Ú/multiindex_year_month_day_dataframe_random_dataÚymdÚsr   r   r   Útest_series_setitem	  s    

z)TestMultiIndexSetItem.test_series_setitemc              	   C   sø   |}|j  ¡ }|j ¡ }||dk }| |dk¡}t ||¡ d||dk< d||dk< t |j|¡ d||dk< d||dk< t |j|¡ d||d d… dk < t |d d… |d d… dk d¡ t |j|¡ t	j
tdd�� d||d < W 5 Q R X d S )Nr   r7   r&   éÿÿÿÿzboolean values onlyrW   )ÚTrP   r}   ÚwhererE   rF   Zassert_almost_equalr-   Zputmaskr[   r\   r]   )r   Ú multiindex_dataframe_random_dataÚframer4   r}   r   r   r   r   r   Ú"test_frame_getitem_setitem_boolean  s"    

"z8TestMultiIndexSetItem.test_frame_getitem_setitem_booleanc                 C   s  ddgdddgg}dddddgdddddgg}t ||d d	gd
�}tddddddgi|d�}|jd d …df }t |d |¡ |j|jdd… df }t |d dd… |¡ |jd d …d d …f }t ||¡ |}d|jd d …df< d|d< t ||¡ d|jd d …d d …f< t ||¡ d S )NÚt1Út2r   r   rz   r   r*   r&   Úid)ÚcodesÚlevelsr%   r   r+   é   rq   ©r)   rl   )r   r   r   rE   rw   r)   rF   )r   r¥   r¤   Zmidxr4   r   r   r   r   Ú%test_frame_getitem_setitem_multislice2  s     z;TestMultiIndexSetItem.test_frame_getitem_setitem_multislicec                 C   s€   t tj dd¡ddddgddddggd�}| ¡ }|d |d< t |d |d ¡ | ¡ }|d j|d< t |d |d ¡ d S )Nrl   r?   r   r   r   r*   ©r(   )r   r-   rM   rY   rP   rE   rF   r}   )r   r4   Úcpr   r   r   Útest_frame_setitem_multi_columnI  s     ÿz5TestMultiIndexSetItem.test_frame_setitem_multi_columnc                 C   sÀ   t  dddg¡}tdddg|d�}d|d	< |d	 jd
k ¡ s@t‚dddg|d< |d |d	< |d }|d }|d }tj||dd� tj||dd� |jdks t‚|jdks®t‚|jdks¼t‚d S )N©r   Ú1©r   Ú2©r=   r­   r*   r+   r7   r@   rr   r   r   r&   F)Zcheck_names)	r   rN   r   r}   r   r   rE   rw   rt   )r   r(   r4   Z	sliced_a1Z	sliced_a2Z	sliced_b1r   r   r   Ú test_frame_setitem_multi_column2W  s    z6TestMultiIndexSetItem.test_frame_setitem_multi_column2c                 C   sH   |}|d d… }|j ddddgf }|j d dddg }t ||¡ d S )Nr7   )r‘   r*   rV   r   r=   r>   )r   rE   rw   )r   r—   r˜   r4   r   r   r   r   r   Ú#test_loc_getitem_tuple_plus_columnsn  s
    z9TestMultiIndexSetItem.test_loc_getitem_tuple_plus_columnsc              	   C   sÂ   t dddgddggddddddgddddddggd�}ttj t|ƒd¡|dddd	gd
�}t ||¡}|jdd… }| 	|j
dd … ¡}t ||¡ d|jdd…< |jdd… dkj ¡ s¾t‚d S )Nr   r*   r&   )r¥   r¤   r?   r   r   rz   r    r@   r¦   )r   r   r-   rM   rY   ÚlenrE   Úget_objr   Úreindexr)   r   r}   r   r   )r   Zframe_or_seriesr)   ÚobjÚresr‚   r   r   r   Ú'test_loc_getitem_setitem_slice_integersy  s     ÿ  
ÿz=TestMultiIndexSetItem.test_loc_getitem_setitem_slice_integersc                 C   sd   |}|j }|d }|| ¡ k|d< t |d || ¡ k¡ |jdgd�}t |d || ¡ k¡ d S )N)rJ   rU   r©   )rœ   ZmedianrE   rw   rµ   )r   rž   rŸ   Zdftr™   Z	reindexedr   r   r   Útest_setitem_change_dtypeŠ  s    z/TestMultiIndexSetItem.test_setitem_change_dtypec                 C   s~   |}|j dddg }d|j|< |j| jdk ¡ s6t‚| ¡ }|d }d||< |r`t ||¡ n|j|df dk ¡ szt‚d S )Nr*   r?   r7   r;   r=   éa   )r)   r   r}   r   r   rP   rE   rF   )r   rž   r€   rŸ   ZsubsetZframe_originalÚcolr   r   r   Útest_set_column_scalar_with_loc•  s    
z5TestMultiIndexSetItem.test_set_column_scalar_with_locc                 C   st   t ddddgddddgddddggtd	ƒd
�}| ddg¡}t dg¡}d|j|df< | d¡d dk ¡ spt‚d S )Nr*   r   r   ÚyÚYr&   ÚzÚZZABCDr©   r   r=   ©r*   r*   Ú_r>   )	r   rv   r‹   r   rN   r   Zxsr   r   )r   r4   Úmir   r   r   Útest_nonunique_assignment_1750§  s      ÿz4TestMultiIndexSetItem.test_nonunique_assignment_1750c                 C   sZ   t  dddg¡}tt d¡ d¡|td�}|j ¡ }|d  	tj
¡|d< t |j|¡ d S )Nr¬   r°   r®   r+   )r*   r+   r9   r   )r   rN   r   r-   r.   rB   Úobjectr)   rP   Zastyper|   rE   Zassert_index_equal)r   r1   r4   r)   r   r   r   Ú test_astype_assignment_with_dups³  s
    
z6TestMultiIndexSetItem.test_astype_assignment_with_dupsc                 C   sj   t jdddgddgd�}tddd	g|d
gd�}tjdddd�|jd< td
dddgi|d�}t ||¡ d S )N)r   rz   )r   r   )r   r    Úl1Úl2r$   r   r*   r&   Úe©Údatar)   r(   r;   ée   r{   )r:   )r   rÉ   r!   r§   )r   rN   r   r-   r.   r   rE   rF   )r   r)   r4   r   r   r   r   Útest_setitem_nonmonotonic½  s     ÿz/TestMultiIndexSetItem.test_setitem_nonmonotonic)Ú__name__Ú
__module__Ú__qualname__r   r   r5   rH   rS   ÚtdZ&skip_array_manager_not_yet_implementedra   rk   ry   rƒ   r�   rš   r    r¨   r«   r±   r²   r¸   r¹   r¼   rÄ   rÆ   rÍ   r   r   r   r   r      s,   -
/
r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú"TestSetitemWithExpansionMultiIndexc                 C   sš   ddddddgddddddgdd	d
dddgg}t t|Ž ƒ}t |¡}ttj dd¡|d�}| ¡ }| ¡ }ddddg|d< ddddg|d< t	 
||¡ d S )Nr   ÚtopZroutine1Zroutine2Ú ZODZresult1Zresult2ZwxZwyr?   rV   r©   r*   r&   r+   r   )r   rÔ   rÔ   )ÚsortedÚzipr   rN   r   r-   rM   rY   rP   rE   rF   )r   r^   Ztuplesr)   r4   r   r   r   r   r   Ú#test_setitem_new_column_mixed_depthÉ  s    ý
zFTestSetitemWithExpansionMultiIndex.test_setitem_new_column_mixed_depthc                 C   s\   t  dddg¡}tddgddgdd	gg|d
�}tdddœƒ}||d< |d  ¡  ¡ sXt‚d S )N)Ú1aZ2a)rØ   Z2b)rØ   Z2cr*   r&   r+   r?   r7   rV   r§   )rÁ   )r*   r&   Únew)r   rN   r   r   r   r   r   )r   Zmixr4   r™   r   r   r   Útest_setitem_new_column_all_naÚ  s
    zATestSetitemWithExpansionMultiIndex.test_setitem_new_column_all_nac                 C   sŽ   t jdgdddgd�}tdddgg|d	d
dgd�}|jd |jd< t jddgdddgd�}tdddgdddgg|d	d
dgd�}t ||¡ d S )N)r*   r&   r+   Úi1Úi2Zi3r$   rl   é   é   r   r=   r>   rÊ   )r   r   r   )r   rN   r   r   rE   rF   )r   rÃ   r4   Zmi_expectedr   r   r   r   Ú)test_setitem_enlargement_keep_index_namesâ  s     ÿýzLTestSetitemWithExpansionMultiIndex.test_setitem_enlargement_keep_index_namesN)rÎ   rÏ   rÐ   r×   rÚ   rß   r   r   r   r   rÒ   È  s   rÒ   c              	   C   sz   | j }|rNtjtdd�� d|d jd d …< W 5 Q R X |d jdk ¡ svt‚n(d|d jd d …< |d jdk ¡ svt‚d S )Nz	read-onlyrW   r   rJ   )rœ   r[   r\   r~   r}   r   r   )rž   r€   r4   r   r   r   Útest_frame_setitem_view_directò  s    rà   c              	   C   sZ   | j }|r,t ¡ � d|d d< W 5 Q R X n*d}tjt|d�� d|d d< W 5 Q R X d S ©Nr&   rJ   rT   zAA value is trying to be set on a copy of a slice from a DataFramerW   )rœ   rE   Úraises_chained_assignment_errorr[   r\   r   )rž   r€   r4   r`   r   r   r   Útest_frame_setitem_copy_raises  s    
rã   c              	   C   sv   | j }|}| ¡ }|r8t ¡ � d|d d< W 5 Q R X n*d}tjt|d�� d|d d< W 5 Q R X |}t ||¡ d S rá   )rœ   rP   rE   râ   r[   r\   r   rF   )rž   r€   rŸ   r   r4   r`   r   r   r   r   Ú test_frame_setitem_copy_no_write  s    
rä   )Únumpyr-   r[   Zpandas.errorsr   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsrÑ   Zpandasrj   r   r   r   r   r   r   r	   Zpandas._testingZ_testingrE   r   r   rÒ   Zskip_array_manager_invalid_testrà   rã   rä   r   r   r   r   Ú<module>   s    $	   3*
