o
    i^                     @   s  d dl mZm Z  d dl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mZ d dlZd dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlm  mZ  d dl!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+ ej,Z-ej.e+e(gd	d
d Z/ej.dd Z0dd Z1dd Z2dZ3dd e+fddZ4d1ddZ5d1ddZ6ej.dd Z7G dd dZ8G dd dZ9dd  Z:G d!d" d"Z;G d#d$ d$Z<G d%d& d&Z=G d'd( d(Z>d)d* Z?d+d, Z@d-d. ZAd/d0 ZBdS )2    )datedatetimeN)BlockPlacement)	is_scalar)	Categorical	DataFrameDatetimeIndexIndexIntervalIndexSeries	Timedelta	Timestampperiod_range)DatetimeArraySparseArrayTimedeltaArray)BlockManagerSingleBlockManager
make_block)ensure_block_shape	new_blockparamsc                 C      | j S )zS
    Fixture to test both the internal new_block and pseudo-public make_block.
    param)request r   `/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pandas/tests/internals/test_internals.pyblock_maker2   s   r   c                   C   s   t dS )Nza: f8; b: object; c: f8; d: object; e: f8;f: bool; g: i8; h: complex; i: datetime-1; j: datetime-2;k: M8[ns, US/Eastern]; l: M8[ns, CET];)
create_mgrr   r   r   r   mgr:   s   r!   c                 C   sX   t | j|j | j|jksJ t| jtsJ t|jts J t | jj|jj d S N)tmassert_numpy_array_equalvaluesdtype
isinstancemgr_locsr   as_array)leftrightr   r   r   assert_block_equalC   s
   r,   c                 C   s:   t | d }t jjj|| |jfdt| d   d S )Nr   )r      )xshapestrides)nparangelibstride_tricks
as_strideditemsizelencopy)r/   arrr   r   r   get_numeric_matK   s   r:   
   c                 C   s  t |}t|}|du rtf}|f| }t|}| dv r$|| | }n| dv r2d|| |  }n| dv rFtdd | | D |}n| dv rStj|tj	d	}n| d
v r_|d d}n| 
drtd| }	|	dusuJ d|  |	 d }
|dksJ dtttd |
dj}t|t|d}nl| dv r|d d}n`| dv rtg d}nU| dv rtg d}nJ| dv r|d dkrttdd  |dd D sJ | d!rtj}nd"}t||dd#d$|d%d&|d'g
|d(}|j }||d 7 }ntd)|  d*|||t|d+S ),a  
    Supported typestr:

        * float, f8, f4, f2
        * int, i8, i4, i2, i1
        * uint, u8, u4, u2, u1
        * complex, c16, c8
        * bool
        * object, string, O
        * datetime, dt, M8[ns], M8[ns, tz]
        * timedelta, td, m8[ns]
        * sparse (SparseArray with fill_value=0.0)
        * sparse_na (SparseArray with fill_value=np.nan)
        * category, category2

    N)floatf8f4f2inti8i4i2i1uintu8u4u2u1)complexc16c8y              ?)objectstringOc                 S   s   g | ]}d |dqS )Adr   ).0ir   r   r   
<listcomp>   s    z create_block.<locals>.<listcomp>)bboolr&   )r   dtM8[ns]g    eArY   zM8[nszM8\[ns,\s*(\w+\/?\w*)\]zincompatible typestr -> r   r-   z)must have only 1 num items for a tz-awarei ʚ;)tzndim)	timedeltatdm8[ns]r_   )category)
r-   r-      ra      rb   rb   rb      rc   )	category2)
are   re   re   rU   rU   crf   rf   rQ   )sparse	sparse_nar;   c                 s   s    | ]}|d kV  qdS )r-   Nr   )rR   sr   r   r   	<genexpr>   s    zcreate_block.<locals>.<genexpr>_na        ra   rb   rc         
fill_valuezUnsupported typestr: ""	placementr\   )r   r7   Nr:   astyper1   reshaperavelonesbool_
startswithresearchgroupsr   r2   _datar   r   NotImplementedErrorallendswithnanr   	sp_valuesview
ValueError)typestrrt   
item_shape
num_offsetmaker	num_itemsr/   matr%   mrZ   rq   r9   r   r   r   create_blockU   sX   
 


r   c                 C   s0   |d u rt }tt| td|ddtt|S )Nr   r   )rt   r   )ru   r   r   slicer	   r1   r2   )r   num_rowsr   r   r   create_single_mgr   s   r   c              	   C   sD  |du rt f}d}g }i }| dD ]O}| }t|sq|dddd \}}| }| d}|| ttt|| }z	|| | W n t	yZ   |||< Y nw |t|7 }qt
|}g }	d}
| D ]\}}|dd }|	t||||
d |
t|7 }
qnt|	d	d
 d}tt||gdd |D  S )aU  
    Construct BlockManager from string description.

    String description syntax looks similar to np.matrix initializer.  It looks
    like this::

        a,b,c: f8; d,e,f: i8

    Rules are rather simple:

    * see list of supported datatypes in `create_block` method
    * components are semicolon-separated
    * each component is `NAME,NAME,NAME: DTYPE_ID`
    * whitespace around colons & semicolons are removed
    * components with same DTYPE_ID are combined into single block
    * to force multiple blocks with same dtype, use '-SUFFIX'::

        'a:f8-1; b:f8-2; c:f8-foobar'

    Nr   ;:ra   ,-)r   r   c                 S   s
   | j d S Nr   )r(   )rU   r   r   r   <lambda>      
 zcreate_mgr.<locals>.<lambda>)keyc                 S   s   g | ]	}t t|qS r   )r	   r1   r2   )rR   nr   r   r   rT      s    zcreate_mgr.<locals>.<listcomp>)ru   splitstripr7   	partitionextendlistr1   r2   KeyErrorr	   itemsappendr   sortedr   tuple)descrr   offset	mgr_itemsblock_placementsrQ   namesblockstrrt   blocksr   r   sblocksr   r   r   r       sH   
r    c                   C   s   t dg dS )Nr<   r   ra   rc   )r   r   r   r   r   fblock   s   r   c                   @   s   e Zd Zdd Zejddg dgddggdd	d
ggddggg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 )	TestBlockc                 C   s    t ddg}|jtjksJ d S )NrB   r   )r   r&   r1   int32)self
int32blockr   r   r   test_constructor   s   zTestBlock.test_constructorz	typ, datar<   r   rJ      rM   r-   rb   rV   rn   c                 C   s   t ||}tt|| d S r"   )r   r,   r#   round_trip_pickle)r   typdatablkr   r   r   test_pickle   s   

zTestBlock.test_picklec                 C   s4   t |jtsJ t|jjtjg dtjd d S )Nr   rW   )	r'   r(   r   r#   r$   r)   r1   arrayintpr   r   r   r   r   test_mgr_locs  s   zTestBlock.test_mgr_locsc                 C   s>   |j |jj ks	J |j|jjksJ t|t|jksJ d S r"   )r/   r%   r&   r7   r   r   r   r   
test_attrs  s   zTestBlock.test_attrsc                 C   s"   |  }||us
J t|| d S r"   )r8   r,   )r   r   copr   r   r   	test_copy  s   zTestBlock.test_copyc                 C   s  |  }|j}|d}|j|u sJ ||usJ t|jjtjddgtjd |j	d dk
 r4J |j	d dk
 s?J |  }|j}|d}|j|u sRJ t|jjtjddgtjd |j	d dk
 rmJ |j	d dk
 sxJ |  }|j}|d}t|jjtjddgtjd |j	d dk
 sJ |  }tjtd d |d W d    d S 1 sw   Y  d S )Nr   ra   rc   rW   r-   matchrb   )r8   r(   deleter#   r$   r)   r1   r   r   r%   r   pytestraises
IndexError)r   r   newblocsnbr   r   r   test_delete  s<   


"zTestBlock.test_deletec                 C   s   t jdddddd}t|}|jjd }t|jt	s J |
d}t|jt	s-J t|d	}|jjd }t|jtsBJ |
dd
g}t|jtsQJ d S )N   rA   rW   rn   rc   r_   r   r-   rY   rb   )r1   r2   rw   r   r   _mgrr   r'   r%   r   r   r   )r   r9   dfr   r   r   r   r   test_delete_datetimelikeC  s   
z"TestBlock.test_delete_datetimelikec                 C   s   t jdd}t|g ddd}| }d|d d < |jdk s#J t|dks+J t|dg dgddt|dg dgddt|dg d	gddg}t||D ]	\}}t	|| qPd S )
Nrb   rc   )rb   r-   ro   ra   rs   ir   r-   ro   )
r1   randomrandnr   _splitr%   r   r7   zipr,   )r   r%   r   resultexpectedresexpr   r   r   
test_splitT  s   zTestBlock.test_splitc                 C   s:   |}t t |j W d    d S 1 sw   Y  d S r"   )r#   assert_produces_warningDeprecationWarningis_categorical)r   r   r   r   r   r   test_is_categorical_deprecatedg  s   "z(TestBlock.test_is_categorical_deprecatedN)__name__
__module____qualname__r   r   markparametrizer   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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dd Zejddejfdejfgdd Zejddejfd ejfd!ejfgd"d# Zd$d% Zd&d' Zejd(g d)d*d+ Zd,d- Zd.d/ Zd0d1 Zejdg d2d3d4 Zd5d6 Z d7d8 Z!d9d: Z"d;d< Z#d=d> Z$ejdd?d@gdAdB Z%ejdg dCdDdE Z&dFdG Z'ejdHdIdJg dKdLgdMdN Z(dOS )PTestBlockManagerc                 C   s*   t d}|jdksJ t|dksJ d S )Nza,b,c: f8-1; d,e,f: f8-2ra   ro   )r    nblocksr7   r   r!   r   r   r   r   o  s   zTestBlockManager.test_attrsc                 C   s   t d}|j|j}}ttdg|d _ttdg|d _d}tjt	|d t
||}|  W d    n1 s>w   Y  ttdg|d _ttdg|d _t
||}|d d S )Nza:bool; a: f8r   r-   zGaps in blk ref_locsr   )r    axesr   r   r1   r   r(   r   r   AssertionErrorr   _rebuild_blknos_and_blklocsiget)r   tmp_mgrr   r   msgr!   r   r   r   test_duplicate_ref_loc_failuret  s   


z/TestBlockManager.test_duplicate_ref_loc_failurec                 C   sR   t |}t t|t| t|dsJ t|dsJ |jr"J |jr'J d S )N_is_consolidated_known_consolidated)r#   r   assert_frame_equalr   hasattrr   r   )r   r!   mgr2r   r   r   r     s   

zTestBlockManager.test_pickle
mgr_stringza,a,a:f8za: f8; a: i8c                 C   s*   t |}t|}tt|t| d S r"   )r    r#   r   r   r   )r   r   r!   r   r   r   r   test_non_unique_pickle  s   
z'TestBlockManager.test_non_unique_picklec                 C   sP   t d}t|}tt|t| td}t|}tt|t| d S )Na: categoryr`   )r    r#   r   r   r   r   assert_series_equalr   )r   r!   r   smgrsmgr2r   r   r   test_categorical_block_pickle  s   

z.TestBlockManager.test_categorical_block_picklec                 C   s   t td}tjdd}t| tjdtjd|j	d}t
|f|t tdgd}t|d |d  t|d |d  t|d |d  d S )	Nabcrb   rW   )r%   rt   r\   )r   r   r   r-   ra   )r	   r   r1   r   randr   r8   r2   r   r\   r   r#   assert_almost_equalr   internal_values)r   colsr%   blockr!   r   r   r   	test_iget  s   zTestBlockManager.test_igetc                 C   s   t ddd}|t|jdtdgd  |dtdgd  t|	d	
 td	gd  t|	d
 tjdgd tjd
 t|	d
 tdgd  t|	d
 tjdgd tjd
 d S )Nz
a,b,c: intrb   r   rQ   foorb   r-   barr   rW   ra   )r    insertr7   r   r1   r   isetr#   r$   r   r   object_r   r   r   r   test_set  s    " " zTestBlockManager.test_setc                 C   s  | t|jdtjttd ||jdt	dt |jd}|
|jtjks.J | }||jdt	dt |jd}|
|jtjksQJ | t|jdtjtt |jd}|
|jtjkssJ ||jdtjt |
|jtjksJ d S )NbazrW   r   quux)r  r7   r   r1   zerosru   rV   r  get_locrepeatr   r&   r  consolidater   r   rv   r@   int_float_)r   r!   idxr   r   r   r   test_set_change_dtype  s   "z&TestBlockManager.test_set_change_dtypec           	      C   s8  |j dd}t|j|jD ]*\}}t|j|j t|jtjr+|jj	|jj	u s*J q|jj
j	|jj
j	u s7J q|  |j dd}t|j|jD ]P\}}|j}|j}t|| t|tjrf|j	}|j	}n|jj	}|jj	}t|tr|d u r{|d u s||usJ qIt|tjs||usJ qI|d u r|d u sJ qId S )NF)deepT)r8   r   r   r#   assert_equalr%   r'   r1   ndarraybaser   _consolidate_inplace_ndarrayr   )	r   r!   cpr   cp_blkbvalscpvalslbaserbaser   r   r   r     s0   
zTestBlockManager.test_copyc                 C   s    t d}| jtjksJ d S )Nza: sparse-1; b: sparse-2)r    r)   r&   r1   float64r   r   r   r   test_sparse  s   zTestBlockManager.test_sparsec                 C   s,   t d}t|jdksJ t|tsJ d S )Nza: sparse-1; b: sparse-2; c: f8rb   )r    r7   r   r'   r   r   r   r   r   test_sparse_mixed  s   z"TestBlockManager.test_sparse_mixedzmgr_string, dtypezc: f4; d: f2c: f4; d: f2; e: f8c                 C      t |}| j|ksJ d S r"   r    r)   r&   r   r   r&   r!   r   r   r   test_as_array_float  s   z$TestBlockManager.test_as_array_floatza: bool-1; b: bool-2z%a: i8-1; b: i8-2; c: i4; d: i2; e: u1zc: i4; d: i2; e: u1c                 C   r   r"   r!  r"  r   r   r   test_as_array_int_bool  s   	z'TestBlockManager.test_as_array_int_boolc                 C   s   t d}| jdksJ d S )Nzh: datetime-1; g: datetime-2rY   r!  r   r   r   r   test_as_array_datetime  s   z'TestBlockManager.test_as_array_datetimec                 C   sF   t d}|djdksJ |djdksJ | jdks!J d S )Nz%h: M8[ns, US/Eastern]; g: M8[ns, CET]r   zdatetime64[ns, US/Eastern]r-   zdatetime64[ns, CET]rM   )r    r   r&   r)   r   r   r   r   test_as_array_datetime_tz  s   z*TestBlockManager.test_as_array_datetime_tzt)float16float32r  r   int64c                 C   sF  t d}t|}||}|djj|ksJ |djj|ks$J |djj|ks/J t d}t|}|j|dd}|djj|ksJJ |djj|ksUJ |d	jj|ks`J |d
jj|kskJ |djjtjkswJ |djjtjksJ |tjkr|djjtjksJ d S |djj|ksJ d S )Nr  r   r-   ra   z6a,b: object; c: bool; d: datetime; e: f4; f: f2; g: f8ignore)errorsrc   rn   ro   rb   )	r    r1   r&   rv   r   typer  r*  
datetime64)r   r'  r!   tmgrr   r   r   test_astype"  s$   



zTestBlockManager.test_astypec                 C   s>  dd }t d}| }||| t d}|dtjdgt tjd |dtjd	gt tjd |d
tjdgt tjd |jdd}|djtj	ksSJ |djtj
ks^J |d
jtjksiJ |djtj	kstJ |djtj
ksJ t d}|dtjdgt tjd |dtjd	gt tjd |d
tjdgt tjd |jdd}|djtj	ksJ |djtj
ksJ |d
jtjksJ |djtjksJ |djtjksJ |djjsJ tj|djtj	ksJ |djtj
ksJ |djtjksJ d S )Nc                 S   s   t | j}t |j}t|t|ksJ |D ]}d}|D ]}|j|jk r*d} nq|s/J q|D ]}d}|D ]}|j|jk rFd} nq8|sKJ q2dS )z4compare the blocks, numeric compare ==, object don'tFTN)setr   r7   r%   r   )old_mgrnew_mgr
old_blocks
new_blocksrU   foundr   obr   r   r   _compare?  s(   



z/TestBlockManager.test_convert.<locals>._comparezf: i8; g: f8za,b,foo: object; f: i8; g: f8r   1rW   r-   z2.ra   zfoo.T)numericrb   rc   zEa,b,foo: object; f: i4; bool: bool; dt: datetime; i: i8; g: f8; h: f2rn   ro   r      )r    convertr  r1   r   ru   r  r   r&   r*  r  r   rz   r-  r.  r(  )r   r8  r!   r3  r   r   r   test_convert>  s<   
zTestBlockManager.test_convertc                 C   sr   t jtdd td W d    n1 sw   Y  t jtdd td W d    d S 1 s2w   Y  d S )Nzneed to splitr   a: category; b: categorya: category2; b: category2)r   r   r   r    r   r   r   r   test_invalid_ea_blockx  s   

"z&TestBlockManager.test_invalid_ea_blockc                 C   sT   dD ]%}t d| }| j|ksJ t d| d| }| j|ks'J qd S )N)r=   rA   rM   rV   rJ   rY   r_   za: z; b: r!  )r   r&   r!   r   r   r   test_interleave  s   z TestBlockManager.test_interleave))r   rA   )r>  rA   )a: category; b: category2rM   )a: category2rM   )r?  rM   )a: f8r=   )a: f8; b: i8r=   )a: f4; b: i8r=   )a: f4; b: i8; d: objectrM   )a: bool; b: i8rM   )
a: complexrJ   )a: f8; b: categoryrM   )a: M8[ns]; b: categoryrM   )a: M8[ns]; b: boolrM   )a: M8[ns]; b: i8rM   )a: m8[ns]; b: boolrM   )a: m8[ns]; b: i8rM   )a: M8[ns]; b: m8[ns]rM   c                 C   s  t d}| jdksJ t d}| jdksJ t d}| jdks'J t d}| jdks4J t d}| jdksAJ t d	}| jdksNJ t d
}| jdks[J t d}| jdkshJ t d}| jdksuJ t d}| jdksJ t d}| jdksJ t d}| jdksJ t d}| jdksJ t d}| jdksJ t d}| jdksJ t d}| jdksJ d S )Nr   rA   rC  rM   rD  rE  r=   rF  rG  rH  rI  rJ  rJ   rK  rL  rM  rN  rO  rP  rQ  r!  r"  r   r   r   test_interleave_dtype  s@   z&TestBlockManager.test_interleave_dtypec                 C   s   | |jdtjt | |jdtjt | |jdtjt | |jdtjt | |jdtjt | }|jdksQJ | 	 }|jdks^J t
|jd jtsiJ t|jd jjtjt|jtjd	 d S )
NfrQ   rU   ghrc   r-   r   rW   )r  r   r	  r1   r   r   ru   r  r   get_numeric_datar'   r   r(   r   r#   r$   r)   r2   r7   r   )r   r!   consr   r   r    test_consolidate_ordering_issues  s    z1TestBlockManager.test_consolidate_ordering_issuesc                 C   s   t d}|jg ddd}| rJ t|jtg d t|d	 |d	  t|d	 |d	  t|d	 |d	  t|d	 |d	  d S )	Nz3a: f8; b: i8; c: f8; d: i8; e: f8; f: bool; g: f8-2)rT  rf   re   rQ   r   axisro   ra   r-   rb   )
r    reindex_axisis_consolidatedr#   assert_index_equalr   r	   r   r   r   )r   r!   	reindexedr   r   r   test_reindex_items  s    z#TestBlockManager.test_reindex_itemsc                 C   s  t ddd}|dtjg dtjd | }t|jt	g d t
||jd ||jd  |j|jdtg d	d
d |rct
||jd tg d nt
||jd tg d	 |jd
d}t|jt	g d |j|jdtg dd
d |rt
||jd tg d d S t
||jd tg d	 d S )N[int: int; float: float; complex: complex;str: object; bool: bool; obj: object; dt: datetimer   r   rn   r-   ra   rb   rW   )r@   r<   rJ   rV   r<   )      Y@g      i@g     r@Tinplace)      ?re  re  r8   )g     @@g     @@g     p@)r    r  r1   r   r  rV  r#   r]  r   r	   r   r   r	  r   )r   using_copy_on_writer!   r:  numeric2r   r   r   test_get_numeric_data  sR   

z&TestBlockManager.test_get_numeric_datac                 C   s  d}t ddd}|dtjg dtjd tjt|d | }W d    n1 s,w   Y  t	|j
td	d
g t||j
d	 ||j
d	  |jdtg ddd |rxt||j
d	 tg d nt||j
d	 tg d tjt|d |jdd}W d    n1 sw   Y  |dtg d |rt||j
d	 tg d d S t||j
d	 tg d d S )Nz)object-dtype columns with all-bool valuesr`  r   r   ro   )TFTrW   r   rV   rX   r   Trc  )TTTrf  )FTF)r    r  r1   r   r  r#   r   FutureWarningget_bool_datar]  r   r	   r   r   r	  r   r$   )r   rg  r   r!   boolsbools2r   r   r   test_get_bool_data  sJ   
z#TestBlockManager.test_get_bool_datac                 C   s   t td d S )Nu   b,א: object)reprr    r@  r   r   r   test_unicode_repr_doesnt_raiseI  s   z/TestBlockManager.test_unicode_repr_doesnt_raisea,b,c: i8-1; d,e,f: i8-2za,a,a: i8-1; b,b,b: i8-2c                 C   s2   t |}t|jd d d |j}||sJ d S )Nri   )r    r   r   r   equals)r   r   bm1bm2r   r   r   test_equalsL  s   zTestBlockManager.test_equals)z	a:i8;b:f8za:i8;b:f8;c:c8;d:bza:i8;e:dt;f:td;g:stringza:i8;b:category;c:category2zc:sparse;d:sparse_na;b:f8c                 C   sN   t |}t|j}|D ]}tt||j}||sJ ||s$J qd S r"   )r    	itertoolspermutationsr   r   r   r   rr  )r   r   bmblock_permsbm_permbm_thisr   r   r   (test_equals_block_order_different_dtypesU  s   z9TestBlockManager.test_equals_block_order_different_dtypesc                 C   s(   t ddd}|  g dksJ d S )Nr=   rn   )r   )rm   re         @g      @g      @)r   external_valuestolistr   r   r   r   test_single_mgr_ctorh  s   z%TestBlockManager.test_single_mgr_ctorvaluer-   Truera  g      @c                 C   sb   t d}dt|j d}tjt|d |jdgdg|d W d    d S 1 s*w   Y  d S )Nrq  z9For argument "inplace" expected type bool, received type .r   r-   ra   rc  )r    r-  r   r   r   r   replace_list)r   r  rs  r   r   r   r   test_validate_bool_argsl  s   "z(TestBlockManager.test_validate_bool_argsN))r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r  r  r1   r)  r  r#  rz   r*  r   r$  r%  r&  r0  r=  rA  rB  rR  rX  r_  ri  rn  rp  ru  r|  r  r  r   r   r   r   r   n  sn    
	'


:
%2,


	r   c                 C   s   | j dkr	|  S |  jS )Nr-   )r\   r~  r)   T)r!   r   r   r   	_as_arrayx  s   

r  c                	   @   s   e Zd ZedeedeedefdedefdedefdedefdgZej	ded	d
 Z
ej	dedd Zej	deej	ddejdgdd Zej	deej	ddejdgdd ZdS )TestIndexingr=   rA   za,b,c,d,e,f: f8r   za,b,c,d,e,f: i8za,b: f8; c,d: i8; e,f: stringza,b: f8; c,d: i8; e,f: f8r!   c                 C   s  dd }|j dksJ |j t|j D ]}|||td  |||td |||td |||tdd |||tddd	 |j dk r|||tjg tjd
 |||tj|j| tjd
 |||tj|j| tjd
 |j| dkr|||t	|j| d dk |||tjg dtjd
 |||g  |||t
t|j|  |j| dkr|||g d |||g d qd S )Nc                 S   s   t | }t|tjr1| j| }t|r1t|r1t|t|kr1t|tjt|t| tdg}t|t	r>| j
||d}n| jdkrM|dkrM| |}nd S t	d f| |f }tj|| t |dd t| j| | |j|  d S )NrW   rY  r-   r   Fcheck_dtype)r  r'   r1   r  r   r7   concatenater  rV   r   	get_slicer\   getitem_mgrr#   r$   r]  )r!   rZ  slobjr   axsliced	mat_slobjr   r   r   assert_slice_ok  s"   
 
 z4TestIndexing.test_get_slice.<locals>.assert_slice_okra   rb   d   r-   rc   r   rW   )TTFr   r-   ra   ri   r  )r\   ranger   r1   r   rz   ry   r/   r  r2   r   )r   r!   r  r  r   r   r   test_get_slice  s0   
 zTestIndexing.test_get_slicec                 C   s   dd }t |jD ]9}|||g d |||g dd |||tt |j| d |j| dkrB|||g dd |||g dd q	d S )Nc                 S   sT   t | }| ||}tjt|||t |dd t| j| ||j|  d S )NFr  )r  taker#   r$   r1   r]  r   )r!   rZ  indexerr   takenr   r   r   assert_take_ok  s   "z.TestIndexing.test_take.<locals>.assert_take_ok)r  r   r   r   rb   r  r  )r  r\   r   r/   )r   r!   r  r  r   r   r   	test_take  s   zTestIndexing.test_takerq   Nrb  c                 C   s   dd }t |jD ]q}|||tg | ||||j| | ||||j| g d | |||tg d| |||td|j| d dg| |j| dkrz||||j| d d	 | ||||j| d	d d
 | ||||j| g d | q	d S )Nc                 S   s`   t | }| j| |}| j|||d}tjtj||||dt |dd t|j| | d S Nrp   Fr  )	r  r   get_indexer_forr[  r#   r$   algostake_ndr]  )r!   rZ  
new_labelsrq   r   r  r^  r   r   r   assert_reindex_axis_is_ok  s   zATestIndexing.test_reindex_axis.<locals>.assert_reindex_axis_is_okr  r   r  r  r   r   r  rb   r  ri   )r   r-   ra   r   r-   ra   )r  r\   r	   r   r/   )r   rq   r!   r  r  r   r   r   test_reindex_axis  s"   zTestIndexing.test_reindex_axisc              	   C   s  dd }t |jD ]}|||tg tjg tjd| ||||j| t|j| | |||tdg|j|  t|j| | ||||j| d d d t|j| | ||||j| t|j| d d d | |||tg dtg d| |||tg dtg d| |||td|j| d	 d
gtg d| |j| dkr|||tg dtg d| q	d S )Nc                 S   sV   t | }tj||||d}| j||||d}tj|t |dd t|j| | d S r  )r  r  r  reindex_indexerr#   r$   r]  r   )r!   rZ  r  r  rq   r   reindexed_matr^  r   r   r   assert_reindex_indexer_is_ok  s   
zGTestIndexing.test_reindex_indexer.<locals>.assert_reindex_indexer_is_okrW   r   ri   r  r  )ri   r   ri   r   r  )ri   ri   ri   rb   r  )	r  r\   r	   r1   r   r   r   r2   r/   )r   rq   r!   r  r  r   r   r   test_reindex_indexer   sX   &&
z!TestIndexing.test_reindex_indexer)r   r   r   r   ru   r    MANAGERSr   r   r   r  r  r1   r   r  r  r   r   r   r   r  ~  s$    


;
r  c                   @   s  e Zd Zejdedddfeddddfeddddfeddddfeddddfgdd	 Zejd
edddedddgdd Zdd Z	ejd
eddeddedddedddeddeddeddedddedddedddg
dd Z
ejd
eddeddeddedddedddgdd Zejddgedddfdgedddfg dedddfg dedddfddgedddfddgedddfgdd Zejdg dgg d d!gdgg d"g d#g d$g d%g	d&d' Zejdeddg dfeddg feddg fgd(d) Zejd*eddg dfeddg feddg fedddg d+fgd,d- Zd.d/ Zejd0edddg fedddg d1feddddg d+fg d2dg d2fedddg fedddg d3feddddg d4fg d2dg d5fedddg fedddg dfg d2dg d6fgd7d8 Zejd9eddg d2gd:d; ZdS )<TestBlockPlacementzslc, expectedr   rc   ra   rb   r-   ri   c                 C      t t||ks
J d S r"   )r7   r   r   slcr   r   r   r   test_slice_len;  s   z!TestBlockPlacement.test_slice_lenr  c                 C   @   d}t jt|d t| W d    d S 1 sw   Y  d S )Nzslice step cannot be zeror   r   r   r   r   r   r  r   r   r   r   test_zero_step_raisesH  s   
"z(TestBlockPlacement.test_zero_step_raisesc                 C   s.   t ddd}t|}|jt dd dksJ d S )Nrb   ri   r  )r   r   r  )r   r  bpr   r   r   !test_slice_canonize_negative_stopN  s   z4TestBlockPlacement.test_slice_canonize_negative_stopNr;   c                 C   r  )Nzunbounded slicer   r  r  r   r   r   test_unbounded_slice_raisesU  s   
"z.TestBlockPlacement.test_unbounded_slice_raisesr  c                 C      t |jrJ d S r"   r   is_slice_like)r   r  r   r   r   test_not_slice_like_slicesk  s   z-TestBlockPlacement.test_not_slice_like_sliceszarr, slce   r  )r   rn   r;      rn      c                 C   s   t |j|ks	J d S r"   )r   as_slice)r   r9   r  r   r   r   test_array_to_slice_conversionx  s   z1TestBlockPlacement.test_array_to_slice_conversionr9   r  )ri   r   r-   ra   )r  r   ra   rc   )r-   r   ri   )r-   r-   r-   c                 C   r  r"   r  )r   r9   r   r   r   test_not_slice_like_arrays  s   z-TestBlockPlacement.test_not_slice_like_arraysc                 C   r  r"   )r   r   r  r   r   r   test_slice_iter  s   z"TestBlockPlacement.test_slice_iterzslc, arr)rb   ra   r-   c                 C   s"   t t|jtj|tjd d S )NrW   )r#   r$   r   r)   r1   asarrayr   )r   r  r9   r   r   r   test_slice_to_array_conversion  s   
z1TestBlockPlacement.test_slice_to_array_conversionc                 C   st   t tdd}|djtdddksJ |tdjtdddks&J t|tdddg dks8J d S )	Nr   rn   r-   ro   r;   ra   ri   )rn   rn   rn   rn   rn   )r   r   addr  r1   r2   r   )r   bplr   r   r   test_blockplacement_add  s   "(z*TestBlockPlacement.test_blockplacement_addzval, inc, expectedra  )r-   ra   rc   )         )r  r  r  )r  r     )r   r-   rb   c                 C   s   t t|||ksJ d S r"   )r   r   r  )r   valincr   r   r   r   test_blockplacement_add_int  s   z.TestBlockPlacement.test_blockplacement_add_intr  c                 C   sF   d}t jt|d t|d W d    d S 1 sw   Y  d S )Nziadd causes length changer   r  )r   r   r   r   r  )r   r  r   r   r   r   "test_blockplacement_add_int_raises  s   "z5TestBlockPlacement.test_blockplacement_add_int_raises)r   r   r   r   r   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ejdd dd dd dd dd dd dd d	d gd
dd Zdd Zejde	j
e	je	jgdd Zejde	j
e	je	jgdd Zdd Zdd ZdedefddZdefddZdedefddZdedefd d!Zd"S )#TestCanHoldElementc                 C   s   | S r"   r   r.   r   r   r   r     s    zTestCanHoldElement.<lambda>c                 C   s   |   S r"   )	to_seriesr  r   r   r   r         c                 C   r   r"   )r   r  r   r   r   r     s    c                 C   s   t | S r"   )r   r  r   r   r   r     r  c                 C   s
   |  tS r"   )rv   rM   r  r   r   r   r     r   c                 C   s
   t | S r"   )r1   r  r  r   r   r   r     r   c                 C   s   | d S r   r   r  r   r   r   r     r  c                 C   s   | d d S r   r   r  r   r   r   r     s    r   c                 C   s   |j S )z
        Functions that take an Index and return an element that should have
        blk._can_hold_element(element) for a Block with this index's dtype.
        r   )r   r   r   r   r   element  s   zTestCanHoldElement.elementc                 C   s   t ddg}|g sJ t|j }|d sJ d |d< |d tju s)J tdt	dddg}|D ]}||s?J ||d< q6t
ddd}||rQJ d}tjt|d ||d< W d    d S 1 sjw   Y  d S )Nr   r   z
2010-10-10i  r;   zLvalue should be a 'Timestamp', 'NaT', or array of those. Got 'date' instead.r   )r   _can_hold_elementpdr   r%   rx   NaTr1   r.  r   r   r   r   	TypeError)r   r   r9   valsr  r   r   r   r   $test_datetime_block_can_hold_element  s"   

"z7TestCanHoldElement.test_datetime_block_can_hold_elementr&   c                 C   s@   t jg d|d}t|}t|jdgdd}|g sJ d S )N)r-   rb   rc   rW   r-   ra   r[   )r1   r   r
   from_breaksr   r   r  )r   r&   r  r9   iir   r   r   r   (test_interval_can_hold_element_emptylist  s   
z;TestCanHoldElement.test_interval_can_hold_element_emptylistc           
      C   s  t jg d|d}t|}t|jdgdd}||}| ||d ||s)J tj|d d dd	}||}| ||d
 ||rFJ ttdtdtdg}||}| ||d
 ||rfJ tt	dt	dt	dg}	||	}| ||d
 ||rJ d S )N)r-   rb   rc   	   rW   r-   ra   r[   Tri   neither)closedFrb   rc   )
r1   r   r
   r  r   r   check_series_setitemr  r   r   )
r   r&   r  r9   r  r   elemii2ii3ii4r   r   r   test_interval_can_hold_element  s$   
z1TestCanHoldElement.test_interval_can_hold_elementc                 C   s:   t dddd}t|jdddgdd}|g sJ d S )N2016rb   rP   periodsfreqr-   ra   r[   )r   r   r   rw   r  )r   pir   r   r   r   &test_period_can_hold_element_emptylist!  s   z9TestCanHoldElement.test_period_can_hold_element_emptylistc                 C   sx   t dddd}||}| ||d |dd d }||}| ||d |d	d d }||}| ||d d S )
Nr  rb   rP   r  TDri   FS)r   r  asfreqto_timestamp)r   r  r  r  pi2dtir   r   r   test_period_can_hold_element'  s   z/TestCanHoldElement.test_period_can_hold_elementindexrd  c                 C   s    |  ||| | ||| d S r"   )r  check_frame_setitem)r   r  r  rd  r   r   r   check_setting7  s   z TestCanHoldElement.check_settingc                 C   s4   |j jd }|r||sJ d S ||rJ d S r   )r   r   r  )r   objr  rd  r   r   r   r   check_can_hold_element;  s   z)TestCanHoldElement.check_can_hold_elementc                 C   sj   |j  }t|}| ||| t|r||d< n||d t|< |r,|j|u s*J d S |jtks3J d S r   )	r   r8   r   r  r   r7   r   r&   rM   )r   r  r  rd  r9   serr   r   r   r  B  s   

z'TestCanHoldElement.check_series_setitemc                 C   s|   |j  }t|}| ||| t|r||jd< n||jd t|df< |r3|jjd |u s1J d S |j	d t
ks<J d S )N)r   r   r   )r   r8   r   r  r   ilocr7   r   arraysdtypesrM   )r   r  r  rd  r9   r   r   r   r   r  R  s   
z&TestCanHoldElement.check_frame_setitemN)r   r   r   r   fixturer  r  r   r   r1   r*  uint64r  r  r  r  r  r	   rV   r  r  r  r  r   r   r   r   r    s0    


r  c                   @   s   e Zd Zdd ZdS )TestShouldStorec                 C   sn   t g d}t|}|jjd }||sJ ||d d s"J || r+J |t|r5J d S )N)rP   BCr   ri   )r   r   r   r   should_store
as_orderedr1   r  )r   catr   r   r   r   r   test_should_store_categoricale  s   z-TestShouldStore.test_should_store_categoricalN)r   r   r   r  r   r   r   r   r  d  s    r  c                 C   s\   t ddg}td}d}tjt|d | ||dd W d    d S 1 s'w   Y  d S )Nre  r}  ra   z:Wrong number of dimensions. values.ndim != ndim \[1 != 2\]r   r[   )r1   r   r   r   r   r   )r   r%   rt   r   r   r   r   test_validate_ndimu  s   "r  c                  C   s\   t g d} tg d| }ttg d| }|jjd jj|jjd jjks,J d S )N)r   r-   ra   rb   rc   ra  r   )r	   r   reindexr   r   r   r(   r  )r  re   rU   r   r   r   test_block_shape~  s   (r
  c                 C   s   t jtddg}| |tt||jd}|jj	dv sJ | t
u rf|jdu s*J | |tt||j|jd}|jj	dv s@J |jdu sGJ | | tt||j|jd}|jj	dv s_J |jdu shJ d S d S )Nr-   ra   r[   )rS   uF)r&   r\   )r  r  PandasArrayr1   r   r   r7   r\   r&   kindr   is_extensionto_numpy)r   r9   r   r   r   r   test_make_block_no_pandas_array  s   r  c                  C   sX   t td} | jjd }tt t|| jdd W d    d S 1 s%w   Y  d S )Nrb   r   T)fastpath)	r   r  r   r   r#   r   rj  r   r  )r  r   r   r   r   -test_single_block_manager_fastpath_deprecated  s
   "r  r"   )Cr   r   rv  r|   numpyr1   r   pandas._libs.internalsr   pandas.util._test_decoratorsutil_test_decoratorsr^   pandas.core.dtypes.commonr   pandasr  r   r   r   r	   r
   r   r   r   r   pandas._testing_testingr#   pandas.core.algorithmscore
algorithmsr  pandas.core.arraysr   r   r   pandas.core.internalsr   r   r   pandas.core.internals.blocksr   r   skip_array_manager_invalid_test
pytestmarkr  r   r!   r,   r:   ru   r   r   r    r   r   r   r  r  r  r  r  r  r
  r  r  r   r   r   r   <module>   s\    ,


X

?
s     =  	