o
    d7                     @   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g d	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g d)ejg d)d*d+ejd,d,d,ejejgd*d+gg d-d.d/d0 Zd1d2 Zd3d4 Zejjd5g d6ejg d6d7d+eg d6gg d8d.d9d: Zejjd;d<d=d>ejgd?fejd<d=d>ejgd,ejjd@dAdBejd<d=d>ejgd7d+d?fejd<d=d>ejgd7d+d?fgg dCd.dDdE ZejdFd,d?gejdddGgdHdI ZejdddGgdJdK Z dLdM Z!dNdO Z"dPdQ Z#dRdS Z$dTdU Z%dVdW Z&dXdY Z'dZd[ Z(d\d] Z)d^d_ Z*d`da Z+dbdc Z,ddde Z-dfdg Z.dhdi Z/djdk Z0dldm Z1dGS )nBaseSetitemTestsc                 C   s   | j S Nindexx r	   W/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/extension/base/setitem.py<lambda>   s    zBaseSetitemTests.<lambda>c                 C   s
   t | jS r   )listr   r   r	   r	   r
   r      s   
 c                 C   s   t d S r   )slicer   r	   r	   r
   r      s    c                 C   s   t dt| S )Nr   )r   lenr   r	   r	   r
   r      s    c                 C   s   t t| S r   )ranger   r   r	   r	   r
   r      s    c                 C   s   t tt| S r   )r   r   r   r   r	   r	   r
   r      s    c                 C   s   t jt| tdS Ndtype)npZonesr   boolr   r	   r	   r
   r      s    )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J d S N   r   pdSeries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s!J |d |d ks+J d S r   )r   r    copy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 d    n1 s2w   Y  | || tjt|dd ||t	d< W d    n1 sXw   Y  | || 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sJ |d |d ks#J 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sJ d S r   )r   r    getattr)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J d S )NABr   r   rC   )r   	DataFramer   aranger   r<   r   r"   dfr	   r	   r
   test_setitem_loc_scalar_mixed\      z.BaseSetitemTests.test_setitem_loc_scalar_mixedc                 C   s6   t d|i}|d |jd< |jd |d ksJ d S )NrC   r   
   rC   r   rE   r<   rG   r	   r	   r
   test_setitem_loc_scalar_singlea      z/BaseSetitemTests.test_setitem_loc_scalar_singlec                 C   s8   t ||d}|d |jd< |jd |d ksJ d S )NrA   r   rK   rM   rG   r	   r	   r
   ,test_setitem_loc_scalar_multiple_homogoneousf      z=BaseSetitemTests.test_setitem_loc_scalar_multiple_homogoneousc                 C   sB   t tt||d}|d |jd< |jd |d ksJ d S )NrA   r   r   r   rD   )r   rE   r   rF   r   r=   r<   rG   r	   r	   r
   test_setitem_iloc_scalar_mixedk   rJ   z/BaseSetitemTests.test_setitem_iloc_scalar_mixedc                 C   s6   t d|i}|d |jd< |jd |d ksJ d S )NrC   r   )rL   r   rK   r   rE   r=   r<   rG   r	   r	   r
   test_setitem_iloc_scalar_singlep   rO   z0BaseSetitemTests.test_setitem_iloc_scalar_singlec                 C   s8   t ||d}|d |jd< |jd |d ksJ d S )NrA   r   )rL   r   rK   rT   rG   r	   r	   r
   -test_setitem_iloc_scalar_multiple_homogoneousu   rQ   z>BaseSetitemTests.test_setitem_iloc_scalar_multiple_homogoneousr   )TTTFFbooleanr   T)numpy-arrayzboolean-arrayzboolean-array-na)r   c                 C   sR   |d d   }|g d}|rt|}t|}|d ||< | || d S N   r   r   r   r+      r   r%   taker   r    r7   )r   r"   r   r#   r?   expectedr	   r	   r
   test_setitem_maskz   s   


z"BaseSetitemTests.test_setitem_maskc                 C   s   t ddg}|rt|}tjtdd |d ||< W d    n1 s&w   Y  tj|dd}tjtdd |d ||< W d    d S 1 sKw   Y  d S )NTFzwrong lengthr)   r   rW   r   )r   r5   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< |r!t |}|d ||< |d d |d k s5J d S )Nr   r   rW   Tr+   rZ   r   )r   r5   r   zerosshapeNAr    allrb   r	   r	   r
   'test_setitem_mask_boolean_array_with_na   s   
 z8BaseSetitemTests.test_setitem_mask_boolean_array_with_naidx)r   r   r9   ZInt64)r   zinteger-arrayrX   c                 C   sR   |d d   }|g d}|rt|}t|}|d ||< | || d S rY   r]   )r   r"   ri   r#   r?   r_   r	   r	   r
   test_setitem_integer_array   s   

z+BaseSetitemTests.test_setitem_integer_arrayzidx, box_in_seriesr   r   r9   FzGH-31948)reason)Zmarks)z
list-Falsez	list-Truezinteger-array-Falsezinteger-array-Truec                 C   sp   |  }|rtj|dd tt|D d}d}tjt|d |d ||< W d    d S 1 s1w   Y  d S )Nc                 S   s   g | ]}t d qS )r\   )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-   r.   )r   r"   ri   r#   r?   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 }|r't||}n|}|dd ||< |dd ||< |d |d ksCJ |d	 |d
 ksMJ d S )Nr   Tr9   c                    s    S r   r	   r   r   r	   r
   r      s    z<BaseSetitemTests.test_setitem_mask_aligned.<locals>.<lambda>rZ      r   r      r   r    r   rd   r   r   r>   )r   r"   rr   r;   r1   Zmask2targetr	   rs   r
   test_setitem_mask_aligned   s   
z*BaseSetitemTests.test_setitem_mask_alignedc                 C   st   t |}tjt|td}d|d d< |rt||}n|}|d ||< |d |d ks.J |d |d ks8J d S )Nr   Tr9   rL   r   r   rv   )r   r"   r;   r1   r   rw   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 NrB   r   rC   rA   )r   rE   r%   r   assert_frame_equalr<   r   r"   rH   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 rz   )r   rE   r   r%   r{   r<   r|   r	   r	   r
   "test_setitem_expand_with_extension  s   z3BaseSetitemTests.test_setitem_expand_with_extensionc                 C   s~   t ddgt| i}dt|d d  dt| d}tjt|d |d d |d< W d    d S 1 s8w   Y  d S )	NrB   r   zLength of values \(rZ   z$\) does not match length of index \(z\)r)   rC   )r   rE   r   r,   r-   r.   )r   r"   rH   r3   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 )Nr9   )r   r   rR   r   r   )r   r    r^   r   r0   )r   r"   r1   r_   r	   r	   r
   test_setitem_tuple_index  s   z)BaseSetitemTests.test_setitem_tuple_indexc                 C   sV   |d d   }|g d}|rt|}t|}|d |d d< | || d S )NrZ   r[   r   r+   r]   )r   r"   r#   r?   r_   r	   r	   r
   test_setitem_slice   s   

z#BaseSetitemTests.test_setitem_slicec                 C   s   |d d   }tj|g dd}tj|g d|jd}|  }|d |jd d< | || |  }|d |jd d< | || d S )NrZ   )abcder   r[   r   r+   r   )r%   r   r    r^   r   r=   r7   r<   )r   r"   r?   sr_   r}   r	   r	   r
   test_setitem_loc_iloc_slice*  s   z,BaseSetitemTests.test_setitem_loc_iloc_slicec                 C   sP   |d d }t t |d d |d d< W d    d S 1 s!w   Y  d S )NrZ   r9   r   )r,   r-   r.   r   r"   r?   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 )NrZ   )r%   Zassert_extension_array_equalr   r	   r	   r
   test_setitem_slice_array<  s   z)BaseSetitemTests.test_setitem_slice_arrayc                 C   sP   |d d   }tt |ddg |d< W d    d S 1 s!w   Y  d S )NrZ   r   r   )r%   r,   r-   r.   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sJ |d |d ks$J d S r   )view)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   rE   r    r   r<   r{   )r   r"   r   rH   r_   r}   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"   r9   )r9   r"   r   r   )r   rE   r<   r{   r    r   )r   r"   Zna_valuerH   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astyper0   )r   r"   r   r1   r}   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 < | || |sZ|sZ|jj
d |u sZJ |jd d |jd d< | || d S )NrB   r   )r   rE   
isinstanceZ_mgrcoreZ	internalsZArrayManageroptionsmodeZcopy_on_writeZarraysr%   r=   r{   values)r   r"   rH   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   rF   r   deleter0   )r   r"   r1   Ztakerr_   r	   r	   r
   test_delitem_series  s   z$BaseSetitemTests.test_delitem_seriesc                 C   s   d}t jttf|d ||d< W d    n1 sw   Y  t jttf|d ||d d < W d    d S 1 s:w   Y  d S )N r)   r   )r,   r-   r.   	TypeError)r   r"   Zinvalid_scalarrp   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 s2J |jdd d f |d k sCJ d S )N)r   r   r   r   )r%   r   rE   r<   r   rg   )r   r"   r'   rH   r	   r	   r
   test_setitem_2d_values  s
   *"&z'BaseSetitemTests.test_setitem_2d_values)2__name__
__module____qualname__r,   Zfixturer   r$   r(   r4   r8   r:   markZparametrizer@   rI   rN   rP   rS   rU   rV   r   r5   r   rf   r`   rc   rh   rj   r   Zxfailrq   rx   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   r   	   s    	
		

		$


	
	
r   )numpyr   r,   Zpandasr   Zpandas._testingZ_testingrl   Z pandas.tests.extension.base.baser   r   r	   r	   r	   r
   <module>   s    