U
    >vf7                     @   sD   d dl Zd dlZd dlZd dlmZ d dlm	Z	 G dd de	Z
dS )    N)BaseExtensionTestsc                
   @   s  e Zd Zejdd dd dd dd dd dd dd gd	d
dddddgddd Zdd Zdd Zdd Zdd Z	dd Z
ejdddgd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zejjded.d.d.d/d/gejd.d.d.d/d/gd0d1ejd.d.d.ejejgd0d1gd2d3d4gd5d6d7 Zd8d9 Zd:d; Zejjd<d=d>d?gejd=d>d?gd@d1ed=d>d?ggdAdBd2gd5dCdD ZejjdEd=d>d?ejgd/fejd=d>d?ejgd.ejjdFdGdHejd=d>d?ejgd@d1d/fejd=d>d?ejgd@d1d/fgdIdJdKdLgd5dMdN ZejdOd.d/gejdddPgdQdR ZejdddPgdSdT Z dUdV Z!dWdX Z"dYdZ Z#d[d\ Z$d]d^ Z%d_d` Z&dadb Z'dcdd Z(dedf Z)dgdh Z*didj Z+dkdl Z,dmdn Z-dodp Z.dqdr Z/dsdt Z0dudv Z1dPS )wBaseSetitemTestsc                 C   s   | j S Nindexx r	   G/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/extension/base/setitem.py<lambda>       zBaseSetitemTests.<lambda>c                 C   s
   t | jS r   )listr   r   r	   r	   r
   r      r   c                 C   s   t d S r   )slicer   r	   r	   r
   r      r   c                 C   s   t dt| S )Nr   )r   lenr   r	   r	   r
   r      r   c                 C   s   t t| S r   )ranger   r   r	   r	   r
   r      r   c                 C   s   t tt| S r   )r   r   r   r   r	   r	   r
   r      r   c                 C   s   t jt| tdS Ndtype)npZonesr   boolr   r	   r	   r
   r      r   r   zlist[index]Z
null_sliceZ
full_slicer   zlist(range)mask)paramsidsc                 C   s   |j S )z
        Fixture for an indexer to pass to obj.loc to get/set the full length of the
        object.

        In some cases, assumes that obj.index is the default RangeIndex.
        )param)selfrequestr	   r	   r
   full_indexer
   s    zBaseSetitemTests.full_indexerc                 C   s2   |rt |}|d |d< |d |d ks.td S N   r   pdSeriesAssertionErrorr   databox_in_seriesr	   r	   r
   test_setitem_scalar_series'   s    
z+BaseSetitemTests.test_setitem_scalar_seriesc                 C   sZ   |rt |}| }|d |d g|ddg< |d |d ksBt|d |d ksVtd S r   )r    r!   copyr"   r   r$   r%   originalr	   r	   r
   test_setitem_sequence-   s    
z&BaseSetitemTests.test_setitem_sequencec              	   C   s   t |}| }|d g}|r*||}d}tjt|dd ||ddg< W 5 Q R X | || tjt|dd ||t	d< W 5 Q R X | || d S )Nr   z5cannot set using a {} indexer with a different lengthz	list-likematchr   r      )
r    r!   r'   Z_from_sequencepytestraises
ValueErrorformatassert_series_equalr   )r   r$   Zas_arrayserr)   valuexprr	   r	   r
   .test_setitem_sequence_mismatched_length_raises6   s    


z?BaseSetitemTests.test_setitem_sequence_mismatched_length_raisesc                 C   s8   |rt |}| }g |tjg td< | || d S r   )r    r!   r'   r   arrayintassert_equalr(   r	   r	   r
   test_setitem_empty_indexerG   s
    
z+BaseSetitemTests.test_setitem_empty_indexerc                 C   sJ   |rt |}|d |ddg< |d |d ks2t|d |d ksFtd S )N   r   r   r   r#   r	   r	   r
    test_setitem_sequence_broadcastsN   s
    
z1BaseSetitemTests.test_setitem_sequence_broadcastssetterlocilocc                 C   s8   t |}t||}|d |d< |d |d ks4td S r   )r    r!   getattrr"   )r   r$   r=   arrr	   r	   r
   test_setitem_scalarU   s    

z$BaseSetitemTests.test_setitem_scalarc                 C   sB   t tt||d}|d |jd< |jd |d ks>td S )NABr   r   rE   )r    	DataFramer   aranger   r>   r"   r   r$   dfr	   r	   r
   test_setitem_loc_scalar_mixed\   s    z.BaseSetitemTests.test_setitem_loc_scalar_mixedc                 C   s6   t d|i}|d |jd< |jd |d ks2td S )NrE   r   
   rE   r    rG   r>   r"   rI   r	   r	   r
   test_setitem_loc_scalar_singlea   s    z/BaseSetitemTests.test_setitem_loc_scalar_singlec                 C   s8   t ||d}|d |jd< |jd |d ks4td S )NrC   r   rL   rN   rI   r	   r	   r
   ,test_setitem_loc_scalar_multiple_homogoneousf   s    z=BaseSetitemTests.test_setitem_loc_scalar_multiple_homogoneousc                 C   sB   t tt||d}|d |jd< |jd |d ks>td S )NrC   r   r   r   rF   )r    rG   r   rH   r   r?   r>   r"   rI   r	   r	   r
   test_setitem_iloc_scalar_mixedk   s    z/BaseSetitemTests.test_setitem_iloc_scalar_mixedc                 C   s6   t d|i}|d |jd< |jd |d ks2td S )NrE   r   )rM   r   rL   r    rG   r?   r>   r"   rI   r	   r	   r
   test_setitem_iloc_scalar_singlep   s    z0BaseSetitemTests.test_setitem_iloc_scalar_singlec                 C   s8   t ||d}|d |jd< |jd |d ks4td S )NrC   r   )rM   r   rL   rS   rI   r	   r	   r
   -test_setitem_iloc_scalar_multiple_homogoneousu   s    z>BaseSetitemTests.test_setitem_iloc_scalar_multiple_homogoneousTFbooleanr   znumpy-arrayzboolean-arrayzboolean-array-na)r   c                 C   sX   |d d   }|dddddg}|r<t|}t|}|d ||< | || d S N   r   r-      r'   taker    r!   r9   )r   r$   r   r%   rA   expectedr	   r	   r
   test_setitem_maskz   s    


z"BaseSetitemTests.test_setitem_maskc              	   C   sz   t ddg}|rt|}tjtdd |d ||< W 5 Q R X tj|dd}tjtdd |d ||< W 5 Q R X d S )NTFzwrong lengthr+   r   rV   r   )r   r7   r    r!   r.   r/   
IndexErrorr   r$   r%   r   r	   r	   r
   test_setitem_mask_raises   s    
z)BaseSetitemTests.test_setitem_mask_raisesc                 C   sn   t jtj|jdddd}d|d d< t j|dd< |rBt |}|d ||< |d d |d k sjtd S )Nr   r   rV   Tr-   rX   r   )	r    r7   r   zerosshapeNAr!   allr"   r_   r	   r	   r
   'test_setitem_mask_boolean_array_with_na   s    
z8BaseSetitemTests.test_setitem_mask_boolean_array_with_naidxr   r   r;   ZInt64r   zinteger-arrayc                 C   sX   |d d   }|dddddg}|r<t|}t|}|d ||< | || d S rW   rZ   )r   r$   rf   r%   rA   r\   r	   r	   r
   test_setitem_integer_array   s    

z+BaseSetitemTests.test_setitem_integer_arrayzidx, box_in_serieszGH-31948)reason)Zmarksz
list-Falsez	list-Truezinteger-array-Falsezinteger-array-Truec              	   C   sZ   |  }|r,tj|dd tt|D d}d}tjt|d |d ||< W 5 Q R X d S )Nc                 S   s   g | ]}t d qS )rY   )tmZrands).0_r	   r	   r
   
<listcomp>   s     zMBaseSetitemTests.test_setitem_integer_with_missing_raises.<locals>.<listcomp>r   z9Cannot index with an integer indexer containing NA valuesr+   r   )r'   r    r!   r   r   r.   r/   r0   )r   r$   rf   r%   rA   msgr	   r	   r
   (test_setitem_integer_with_missing_raises   s     z9BaseSetitemTests.test_setitem_integer_with_missing_raisesas_callableNc                    s   t |}tjt|td d d d< |r: fdd}n }|rNt||}n|}|dd ||< |dd ||< |d |d kst|d	 |d
 kstd S )Nr   Tr;   c                    s    S r   r	   r   r   r	   r
   r      r   z<BaseSetitemTests.test_setitem_mask_aligned.<locals>.<lambda>rX      r   r      r    r!   r   ra   r   r   r@   r"   )r   r$   ro   r=   r3   Zmask2targetr	   rp   r
   test_setitem_mask_aligned   s    
z*BaseSetitemTests.test_setitem_mask_alignedc                 C   st   t |}tjt|td}d|d d< |r8t||}n|}|d ||< |d |d ks\t|d |d ksptd S )Nr   Tr;   rM   r   r   rs   )r   r$   r=   r3   r   rt   r	   r	   r
   test_setitem_mask_broadcast   s    
z,BaseSetitemTests.test_setitem_mask_broadcastc                 C   s   t d|i}| }d|d< t |dgt| d}| || | }d|jd d df< | || ||d< t ||d}| || d S NrD   r   rE   rC   )r    rG   r'   r   assert_frame_equalr>   r   r$   rJ   resultr\   r	   r	   r
   test_setitem_expand_columns   s    z,BaseSetitemTests.test_setitem_expand_columnsc                 C   sx   t ddgt| i}| }||d< t dgt| |d}| || | }||jd d df< | || d S rw   )r    rG   r   r'   rx   r>   ry   r	   r	   r
   "test_setitem_expand_with_extension  s    z3BaseSetitemTests.test_setitem_expand_with_extensionc              	   C   sh   t ddgt| i}dt|d d  dt| d}tjt|d |d d |d< W 5 Q R X d S )	NrD   r   zLength of values \(rX   z$\) does not match length of index \(z\)r+   rE   )r    rG   r   r.   r/   r0   )r   r$   rJ   r5   r	   r	   r
   !test_setitem_frame_invalid_length  s
     z2BaseSetitemTests.test_setitem_frame_invalid_lengthc                 C   sP   t j|d d ddgd}t j|ddg|jd}|d |d< | || d S )Nr;   )r   r   rQ   r   r   )r    r!   r[   r   r2   )r   r$   r3   r\   r	   r	   r
   test_setitem_tuple_index  s    z)BaseSetitemTests.test_setitem_tuple_indexc                 C   s\   |d d   }|dddddg}|r<t|}t|}|d |d d< | || d S rW   rZ   )r   r$   r%   rA   r\   r	   r	   r
   test_setitem_slice   s    

z#BaseSetitemTests.test_setitem_slicec                 C   s   |d d   }tj|dddddgd}tj|dddd	d
g|jd}|  }|d |jd d	< | || |  }|d |jd d< | || d S )NrX   abcder   r   r-   rY   )r'   r    r!   r[   r   r?   r9   r>   )r   r$   rA   sr\   rz   r	   r	   r
   test_setitem_loc_iloc_slice*  s     z,BaseSetitemTests.test_setitem_loc_iloc_slicec              	   C   s:   |d d }t t |d d |d d< W 5 Q R X d S )NrX   r;   r   )r.   r/   r0   r   r$   rA   r	   r	   r
   )test_setitem_slice_mismatch_length_raises7  s    z:BaseSetitemTests.test_setitem_slice_mismatch_length_raisesc                 C   s<   |d d   }|dd  |d d< | ||dd   d S )NrX   )r'   Zassert_extension_array_equalr   r	   r	   r
   test_setitem_slice_array<  s    z)BaseSetitemTests.test_setitem_slice_arrayc              	   C   s:   |d d   }tt |ddg |d< W 5 Q R X d S )NrX   r   r   )r'   r.   r/   r0   r   r	   r	   r
   &test_setitem_scalar_key_sequence_raiseA  s    z7BaseSetitemTests.test_setitem_scalar_key_sequence_raisec                 C   sL   |  }|d d  }|d |d< |d |d ks4t|d |d ksHtd S r   )viewr"   )r   r$   Zview1Zview2r	   r	   r
   test_setitem_preserves_viewsF  s
    z-BaseSetitemTests.test_setitem_preserves_viewsc                 C   sP   t dt |i }}t j|jd}||}|d |j|df< | || d S )Nr$   r   )r    rG   r!   r   r>   rx   )r   r$   r   rJ   r\   rz   keyr	   r	   r
   ,test_setitem_with_expansion_dataframe_columnO  s
    z=BaseSetitemTests.test_setitem_with_expansion_dataframe_columnc                 C   s   t d|d d i}|d |jd< t d|d d i}| || ||jd< t dt j|d |d |g|jdi}| || d S )Nr$   r   )r   r$   r;   )r;   r$   r   r   )r    rG   r>   rx   r!   r   )r   r$   Zna_valuerJ   r\   r	   r	   r
   test_setitem_with_expansion_rowY  s    
 z0BaseSetitemTests.test_setitem_with_expansion_rowc                 C   s\   t j|dd}t j|jtdd}||}||j|< t j|t|jdtd}| || d S )Nr$   name)r   r   r   )r   r   r   )r    r!   r   objectr>   Zastyper2   )r   r$   r   r3   rz   r   r\   r	   r	   r
   test_setitem_seriesg  s    
   z$BaseSetitemTests.test_setitem_seriesc                 C   s   t d|i}t|jt jjj}t jjj	}|jj
d }| }||jd d < | || |jd d |jd d< | || |j|jd d < | || |s|s|jj
d |kst|jd d |jd d< | || d S )NrD   r   )r    rG   
isinstanceZ_mgrcoreZ	internalsZArrayManageroptionsmodeZcopy_on_writeZarraysr'   r?   rx   valuesr"   )r   r$   rJ   Zusing_array_managerZusing_copy_on_writeZblk_dataorigr	   r	   r
   test_setitem_frame_2d_valuesv  s    
z-BaseSetitemTests.test_setitem_frame_2d_valuesc                 C   sF   t j|dd}tt|}t|d}|| }|d= | || d S )Nr$   r   r   )r    r!   r   rH   r   deleter2   )r   r$   r3   Ztakerr\   r	   r	   r
   test_delitem_series  s    z$BaseSetitemTests.test_delitem_seriesc              	   C   sX   d}t jttf|d ||d< W 5 Q R X t jttf|d ||d d < W 5 Q R X d S )N r+   r   )r.   r/   r0   	TypeError)r   r$   Zinvalid_scalarrm   r	   r	   r
   test_setitem_invalid  s
    z%BaseSetitemTests.test_setitem_invalidc                 C   s   |  }t||d}|jddgd d f j|jddgd d f< |jdd d f |d k sdt|jdd d f |d k std S )N)r   r   r   r   )r'   r    rG   r>   r   rd   r"   )r   r$   r)   rJ   r	   r	   r
   test_setitem_2d_values  s
    *"z'BaseSetitemTests.test_setitem_2d_values)2__name__
__module____qualname__r.   Zfixturer   r&   r*   r6   r:   r<   markZparametrizerB   rK   rO   rP   rR   rT   rU   r   r7   r    rc   r]   r`   re   rg   r   Zxfailrn   ru   rv   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   r   	   s   

		
	
	*
  


	
	
r   )Znumpyr   r.   Zpandasr    Zpandas._testingZ_testingri   Z pandas.tests.extension.base.baser   r   r	   r	   r	   r
   <module>   s
   