a
    Pf                     @   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
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-m.Z. ej/Z0ej1e.e*gd
dd Z2ej1dd Z3dd Z4dd Z5dZ6dd e.fddZ7d0ddZ8d1ddZ9ej1dd Z:G dd dZ;G dd dZ<d d! Z=G d"d# d#Z>G d$d% d%Z?G d&d' d'Z@G d(d) d)ZAd*d+ ZBd,d- ZCd.d/ ZDdS )2    )datedatetimeN)BlockPlacement)IS64)	is_scalar)	Categorical	DataFrameDatetimeIndexIndexIntervalIndexSeries	Timedelta	Timestampperiod_range)DatetimeArraySparseArrayTimedeltaArray)BlockManagerSingleBlockManager
make_block)ensure_block_shapemaybe_coerce_values	new_blockparamsc                 C   s   | j S )zS
    Fixture to test both the internal new_block and pseudo-public make_block.
    param)request r   ^/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/internals/test_internals.pyblock_maker4   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s0J 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_equalE   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libZstride_tricksZ
as_strideditemsizelencopy)r0   arrr   r   r   get_numeric_matM   s    r9   
   c                 C   s>  t |}t|}|du rtf}|f| }t|}| dv rJ|| | }n| dv rhd|| |  }n| dv rtdd | | D |}n| dv rtj|tj	d	}nv| d
v r|d d}n\| 
dr>td| }	|	dusJ d|  |	 d }
|dksJ dtttd |
dj}t|t|d}n| dv rX|d d}n| dv rptg d}n| dv rtg d}n| 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|}|||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f8Zf4f2inti8i4i2i1Zuintu8Zu4u2u1)complexZc16Zc8y              ?)objectstringOc                 S   s   g | ]}d |dqS )Adr   ).0ir   r   r   
<listcomp>       z create_block.<locals>.<listcomp>)bboolr'   )r   dtM8[ns]g    eArT   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]rZ   )category)
r.   r.      r\      r]   r]   r]      r^   )Z	category2)
ar_   r_   r_   rP   rP   cr`   r`   rK   )sparseZ	sparse_nar:   c                 s   s   | ]}|d kV  qdS )r.   Nr   )rL   sr   r   r   	<genexpr>   rO   zcreate_block.<locals>.<genexpr>Z_na        r\   r]   r^         
fill_valuezUnsupported typestr: ""	placementrW   )r   r6   Nr9   astyper2   reshaperavelonesbool_
startswithresearchgroupsr	   r3   _datar   r   NotImplementedErrorallendswithnanr   Z	sp_valuesview
ValueErrorr   )typestrrl   
item_shape
num_offsetmaker	num_itemsr0   matr&   mrU   ri   r8   r   r   r   create_blockW   sZ    
"



 
r   c                 C   s0   |d u rt }tt| td|ddtt|S )Nr   r   )rl   r   )rm   r   r   slicer
   r2   r3   )r~   num_rowsr   r   r   create_single_mgr   s    r   c              	   C   sD  |du rt f}d}g }i }| dD ]}| }t|s:q$|dddd \}}| }| d}|| ttt|| }z|| | W n t	y   |||< Y n0 |t|7 }q$t
|}g }	d}
| D ]8\}}|dd }|	t||||
d |
t|7 }
qt|	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   ;:r\   ,-)r   r   c                 S   s
   | j d S Nr   )r)   )rP   r   r   r   <lambda>   rO   zcreate_mgr.<locals>.<lambda>)keyc                 S   s   g | ]}t t|qS r   )r
   r2   r3   )rL   nr   r   r   rN      rO   zcreate_mgr.<locals>.<listcomp>)rm   splitstripr6   	partitionextendlistr2   r3   KeyErrorr
   itemsappendr   sortedr   tuple)descrr   offsetZ	mgr_itemsZblock_placementsrK   namesZblockstrrl   blocksr   r~   Zsblocksr   r   r   r!      sF    
r!   c                   C   s   t dg dS )Nr;   r   r\   r^   )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S )	TestBlockc                 C   s    t ddg}|jtjksJ d S )Nr@   r   )r   r'   r2   int32)selfZ
int32blockr   r   r   test_constructor   s    zTestBlock.test_constructorz	typ, datar;   r   rF      rG   r.   r]   rQ   rf   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   rR   )	r(   r)   r   r$   r%   r*   r2   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#   )r0   r&   r'   r6   r   r   r   r   
test_attrs  s    zTestBlock.test_attrsc                 C   s"   |  }||usJ t|| d S r#   )r7   r-   )r   r   copr   r   r   	test_copy  s    zTestBlock.test_copyc                 C   s  |  }|j}|dd }|j|u s*J ||us6J t|jjtjddgtjd |j	d dk
 rlJ |j	d dk
 sJ |  }|j}|d}t|dksJ |j|u sJ t|d jjtjdgtjd t|d jjtjdgtjd |j	d dk
 rJ |d j	d dk
 s0J |  }|d}t|dksTJ t|d jjtjddgtjd |d j	d dk
 sJ |  }tjtd d |d W d    n1 s0    Y  d S )Nr   r\   r^   rR   r.   matchr]   )r7   r)   deleter$   r%   r*   r2   r   r   r&   ry   r6   pytestraises
IndexError)r   r   ZnewbZlocsnbr   r   r   test_delete   sB    

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|d	ksZJ t|d jt	snJ t|d jt	sJ t|d
}|jjd }t|jtsJ |
ddg}t|d	ksJ t|d jtsJ t|d jtsJ d S )N   r?   rR   rf   r^   rZ   r   r.   r\   rT   r]   )r2   r3   ro   r|   r   _mgrr   r(   r&   r   r   r6   r   )r   r8   dfr   r   r   r   r   test_delete_datetimelikeJ  s    
z"TestBlock.test_delete_datetimelikec                 C   s   t jdd}t|tg ddd}| }d|d d < |jdk sNJ t	|dks^J t|dg tdgddt|dg tdgddt|dg td	gddg}t
||D ]\}}t|| qd S )
Nr\   )r]   r^   )r]   r.   rg   rk   ir]   r   r.   rg   )r2   randomdefault_rngstandard_normalr   r   _splitr&   ry   r6   zipr-   )r   r&   r   resultexpectedresexpr   r   r   
test_split_  s    zTestBlock.test_splitN)__name__
__module____qualname__r   r   markparametrizer   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ejdg d0d1d2 Zd3d4 Zd5d6 Z d7d8 Z!d9d: Z"d;d< Z#ejdd=d>gd?d@ Z$ejdg dAdBdC Z%dDdE Z&ejdFdGdHg dIdJgdKdL Z'dMdN Z(dOdP Z)dQS )R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-2r\   rg   )r!   nblocksr6   r   r"   r   r   r   r   t  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|0    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   r2   r   r)   r   r   AssertionErrorr   Z_rebuild_blknos_and_blklocsiget)r   Ztmp_mgrr   r   msgr"   r   r   r   test_duplicate_ref_loc_failurey  s    
&
z/TestBlockManager.test_duplicate_ref_loc_failurec                 C   sb   t |}t tj||jdtj||jd t|ds<J t|dsJJ |jrTJ |jr^J d S )Nr   _is_consolidated_known_consolidated)	r$   r   assert_frame_equalr   	_from_mgrr   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j||jdtj||jd d S )Nr   )r!   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   st   t d}t|}ttj||jdtj||jd td}t|}tt	 j
||jdt	 j
||jd d S )Na: categoryr   r[   )r!   r$   r   r   r   r   r   r   Zassert_series_equalr   Z_constructor_from_mgr)r   r"   r   ZsmgrZ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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abcr\   )r]   r]   r]   rR   )r&   rl   rW   )r   r   r   r.   )r
   r   r2   r   r   r   r7   r   r3   r   rW   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r]   r   rK   foor]   r.   barr   rR   r\   )r!   insertr6   r   r2   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sJ | t|jdtjdtt |jd}|
|jttksJ ||jdtjdt |
|jtjks*J d S )NbazrR   r   Zquuxr\   )r   r6   r   r2   zerosrm   rQ   r   get_locrepeatr   r'   r   consolidater   r   r   rn   r>   float64)r   r"   idxr   r   r   r   test_set_change_dtype  s&    z&TestBlockManager.test_set_change_dtypec           	      C   sD  |j dd}t|j|jD ]T\}}t|j|j t|jtjrV|jj	|jj	u snJ q|jj
j	|jj
j	u sJ q|  |j dd}t|j|jD ]\}}|j}|j}t|| t|tjr|j	}|j	}n|j
j	}|j
j	}t|tr
|d u r|d u s>||us>J qt|tjs(||us>J q|d u r:|d u sJ qd S )NF)deepT)r7   r   r   r$   Zassert_equalr&   r(   r2   ndarraybaseZ_ndarrayZ_consolidate_inplacer   )	r   r"   cpr   Zcp_blkZbvalsZcpvalsZlbaseZrbaser   r   r   r     s,    "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'   r2   r   r   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: f8r]   )r!   r6   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   s   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   s   t |}| j|ksJ d S 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-2rT   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s0J | jdksBJ d S )Nz%h: M8[ns, US/Eastern]; g: M8[ns, CET]r   zdatetime64[ns, US/Eastern]r.   zdatetime64[ns, CET]rG   )r!   r   r'   r*   r   r   r   r   test_as_array_datetime_tz0  s    z*TestBlockManager.test_as_array_datetime_tzt)float16float32r   r   int64c                 C   sL  t d}t|}||}|djj|ks2J |djj|ksHJ |djj|ks^J t d}t|}|j|dd}|djj|ksJ |djj|ksJ |d	jj|ksJ |d
jj|ksJ |djjtjksJ |djjtjksJ |tjkr0|djjtjksHJ n|djj|ksHJ d S )Nr   r   r.   r\   z6a,b: object; c: bool; d: datetime; e: f4; f: f2; g: f8ignore)errorsr^   rf   rg   r]   )	r!   r2   r'   rn   r   typer   r  
datetime64)r   r  r"   Ztmgrr   r   r   test_astype6  s$    


zTestBlockManager.test_astypec                 C   sR  dd }t d}|jd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}|rdntj}|dj|ksJ |d
j|ksJ |dj|ksJ |djtj	ksJ |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|ksJ |d
j|ksJ |dj|ksJ |djtjksJ |djtjksJ |djjsJ tj|djtj	ksJ |djtj
ks6J |djtjksNJ d S )Nc                 S   s   t | j}t |j}t|t|ks(J |D ]2}d}|D ]}|j|jk r8d} qVq8|s,J q,|D ]2}d}|D ]}|j|jk rpd} qqp|sdJ qddS )z4compare the blocks, numeric compare ==, object don'tFTN)setr   r6   r&   ry   )Zold_mgrnew_mgrZ
old_blocksZ
new_blocksrP   foundr   obr   r   r   _compareS  s"    


z/TestBlockManager.test_convert.<locals>._comparezf: i8; g: f8Tr7   za,b,foo: object; f: i8; g: f8r   1rR   r.   z2.r\   zfoo.zstring[pyarrow_numpy]r]   r^   zEa,b,foo: object; f: i4; bool: bool; dt: datetime; i: i8; g: f8; h: f2rf   rg   r      )r!   convertr   r2   r   rm   r   r   r'   r  r   r   rr   r	  r
  r  )r   Zusing_infer_stringr  r"   r  r'   r   r   r   test_convertR  s>    
zTestBlockManager.test_convertc                 C   sT   dD ]J}t d| }| j|ks(J t d| d| }| j|ksJ qd S )N)r<   r?   rG   rQ   rF   rT   rZ   za: z; b: r   )r   r'   r"   r   r   r   test_interleave  s
    z TestBlockManager.test_interleave))r   r?   )za: category; b: categoryr?   )a: category; b: category2rG   )a: category2rG   )za: category2; b: category2rG   )a: f8r<   )a: f8; b: i8r<   )a: f4; b: i8r<   )a: f4; b: i8; d: objectrG   )a: bool; b: i8rG   )
a: complexrF   )a: f8; b: categoryrG   )a: M8[ns]; b: categoryrG   )a: M8[ns]; b: boolrG   )a: M8[ns]; b: i8rG   )a: m8[ns]; b: boolrG   )a: m8[ns]; b: i8rG   )a: M8[ns]; b: m8[ns]rG   c                 C   s  t d}| jdksJ t d}| jdks4J t d}| jdksNJ t d}| jdkshJ 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sJ t d}| jdks"J t d}| jdks>J t d}| jdksZJ t d}| jdksvJ t d}| jdksJ t d}| jdksJ d S )Nr   r?   r  rG   r  r  r<   r  r  r  r  r  rF   r  r   r!  r"  r#  r$  r%  r   r   r   r   r   test_interleave_dtype  s@    z&TestBlockManager.test_interleave_dtypec                 C   s  | |jdtjdt | |jdtjdt | |jdtjdt | |jdtjdt | |jdtjdt | }|j	dksJ | 
 }|j	dksJ t|jd	 jtsJ t|jd	 jjtjt|jtjd
 d S )Nfr\   rK   rP   ghr^   r.   r   rR   )r   r   r   r2   r   r   r   rm   r   r   get_numeric_datar(   r   r)   r   r$   r%   r*   r3   r6   r   )r   r"   Z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)r(  r`   r_   rK   r   axisrg   r\   r.   r]   )
r!   reindex_axisZ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 |rt
||jd tg d n(t
||jd tg d	 d S )N[int: int; float: float; complex: complex;str: object; bool: bool; obj: object; dt: datetimer   r   rf   r.   r\   r]   rR   )r>   r;   rF   rQ   r;   )      Y@g      i@g     r@Tinplace)      ?r7  r7  )r!   r   r2   r   r   r*  r$   r/  r   r
   r   r   r   r   )r   using_copy_on_writer"   numericr   r   r   test_get_numeric_data  s2    
z&TestBlockManager.test_get_numeric_datac                 C   s   t ddd}|dtjg dtjd | }t|jt	dg t
||jd ||jd  |jdtg dd	d
 |rt||jd tg d n(t||jd tg d d S )Nr2  r   r   rg   )TFTrR   rQ   r   Tr5  )TTT)r!   r   r2   r   r   Zget_bool_datar$   r/  r   r
   r   r   r   r   r%   )r   r8  r"   Zboolsr   r   r   test_get_bool_data  s*    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_raise4  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 )Nrb   )r!   r   r   r   equals)r   r   bm1Zbm2r   r   r   test_equals7  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 ]0}tt||j}||s:J ||sJ qd S r#   )r!   	itertoolspermutationsr   r   r   r   r?  )r   r   bmZblock_permsZbm_permZbm_thisr   r   r   (test_equals_block_order_different_dtypes@  s    z9TestBlockManager.test_equals_block_order_different_dtypesc                 C   s(   t ddd}|  g dks$J d S )Nr<   rf   )r   )re   r7         @g      @g      @)r   external_valuestolistr   r   r   r   test_single_mgr_ctorS  s    z%TestBlockManager.test_single_mgr_ctorvaluer.   Truer3  g      @c                 C   s`   t d}dt|j d}tjt|d$ |jdgdg|d W d    n1 sR0    Y  d S )Nr>  z9For argument "inplace" expected type bool, received type .r   r.   r\   r5  )r!   r	  r   r   r   r}   Zreplace_list)r   rJ  r@  r   r   r   r   test_validate_bool_argsW  s    z(TestBlockManager.test_validate_bool_argsc                 C   sz   t d}|dtdg t|jtjg dtr6dndd t|jtjg dtrZdndd t	|j
dksvJ d S )	Na,b,c: i8; d: f8r   r   r   r.   r   r  r   rR   )r   r   r   r.   r\   )r!   _iset_split_blockr2   r   r$   r%   blklocsr   blknosr6   r   r   rD  r   r   r   test_iset_split_blockb  s    z&TestBlockManager.test_iset_split_blockc              	   C   s   t d}|dtdgtttdg t|jtjg dt	rHdndd t|j
tjg dt	rldndd t|jd	ksJ d S )
NrN  r   r:   rO  r  r   rR   )r   r\   r\   r.   r]   )r!   rP  r2   r   r   ranger$   r%   rQ  r   rR  r6   r   rS  r   r   r   test_iset_split_block_valuesn  s    &z-TestBlockManager.test_iset_split_block_valuesN)*r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r  r   r   rr   r  r   r   r  r  r  r  r  r&  r+  r1  r:  r;  r=  rA  rE  rI  rM  rT  rV  r   r   r   r   r   s  sn   
%


;
% 


	

r   c                 C   s   | j dkr|  S |  jS )Nr.   )rW   rG  r*   T)r"   r   r   r   	_as_array{  s    
rX  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<   r?   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|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
 q&d S )Nc                 S   s  t | }t|tjrb| j| }t|rbt|rbt|t|krbt|tjt|t| tdg}t|t	r|| j
||d}n<| jdkr|dkrt|tjr|jtkr| |}nt|t	d f| |f }tj|| t |dd t| j| | |j|  d S )NrR   r,  r.   r   FZcheck_dtype)rX  r(   r2   r   r   r6   Zconcatenater   rQ   r   Z	get_slicerW   r'   Zget_rows_with_mask	TypeErrorr$   r%   r/  )r"   r-  Zslobjr   axZslicedZ	mat_slobjr   r   r   assert_slice_ok  s0    
 

z4TestIndexing.test_get_slice.<locals>.assert_slice_okr\   r]   d   r.   r^   r   rR   )TTF)
rW   rU  r   r2   rq   r0   rr   r   r3   r   )r   r"   r]  r\  r   r   r   test_get_slice  s      
 zTestIndexing.test_get_slicec              	   C   s   dd }t |jD ]}|||tjg tjdd |||tjg dtjdd |||tjtt |j| tjdd |j| dkr|||tjg dtjdd |||tjg dtjdd qd S )	Nc                 S   sT   t | }| ||}tjt|||t |dd t| j| ||j|  d S )NFrZ  )rX  Ztaker$   r%   r2   r/  r   )r"   r-  indexerr   Ztakenr   r   r   assert_take_ok  s    z.TestIndexing.test_take.<locals>.assert_take_okrR   )ra  r   r   r   r]   r   r.   r\   rb   r_  )rU  rW   r2   r   r   r   r0   )r   r"   rb  r\  r   r   r   	test_take  s     zTestIndexing.test_takeri   Nr4  c                 C   s   dd }t |jD ]}|||tg | ||||j| | ||||j| g d | |||tg d| |||td|j| d dg| |j| dkr||||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 Nrh   FrZ  )	rX  r   Zget_indexer_forr.  r$   r%   algostake_ndr/  )r"   r-  
new_labelsri   r   ra  r0  r   r   r   assert_reindex_axis_is_ok  s    zATestIndexing.test_reindex_axis.<locals>.assert_reindex_axis_is_okrc  r   r   r   r   r   r   r]   rf  rb   )r   r.   r\   r   r.   r\   )rU  rW   r
   r   r0   )r   ri   r"   rl  r\  r   r   r   test_reindex_axis  s    zTestIndexing.test_reindex_axisc              	   C   s  dd }t |jD ]l}|||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 rh  )rX  ri  rj  Zreindex_indexerr$   r%   r/  r   )r"   r-  rk  ra  ri   r   Zreindexed_matr0  r   r   r   assert_reindex_indexer_is_ok  s    
zGTestIndexing.test_reindex_indexer.<locals>.assert_reindex_indexer_is_okrR   r   rb   rm  rc  )rb   r   rb   r   r   )rb   rb   rb   r]   rd  )	rU  rW   r
   r2   r   r   r   r3   r0   )r   ri   r"   ro  r\  r   r   r   test_reindex_indexer  sT    &&
z!TestIndexing.test_reindex_indexer)r   r   r   r   rm   r!   ZMANAGERSr   r   r   r`  rg  r2   r{   rn  rp  r   r   r   r   rY    s"   


7
rY  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   r^   r\   r]   r.   rb   c                 C   s   t t||ksJ d S r#   )r6   r   r   slcr   r   r   r   test_slice_len<  s    z!TestBlockPlacement.test_slice_lenrs  c                 C   s>   d}t jt|d t| W d    n1 s00    Y  d S )Nzslice step cannot be zeror   r   r   r}   r   r   rs  r   r   r   r   test_zero_step_raisesI  s    z(TestBlockPlacement.test_zero_step_raisesc                 C   s.   t ddd}t|}|jt dd dks*J d S )Nr]   rb   r_  )r   r   ra  )r   rs  bpr   r   r   !test_slice_canonize_negative_stopO  s    z4TestBlockPlacement.test_slice_canonize_negative_stopNr:   c                 C   s>   d}t jt|d t| W d    n1 s00    Y  d S )Nzunbounded slicer   ru  rv  r   r   r   test_unbounded_slice_raisesV  s    z.TestBlockPlacement.test_unbounded_slice_raisesr^  c                 C   s   t |jrJ d S r#   r   Zis_slice_like)r   rs  r   r   r   test_not_slice_like_slicesl  s    z-TestBlockPlacement.test_not_slice_like_sliceszarr, slce   rd  )r   rf   r:      rf      c                 C   s   t |j|ksJ d S r#   )r   as_slice)r   r8   rs  r   r   r   test_array_to_slice_conversiony  s    z1TestBlockPlacement.test_array_to_slice_conversionr8   re  )rb   r   r.   r\   )r_  r   r\   r^   )r.   r   rb   )r.   r.   r.   c                 C   s   t |jrJ d S r#   r{  )r   r8   r   r   r   test_not_slice_like_arrays  s    z-TestBlockPlacement.test_not_slice_like_arraysc                 C   s   t t||ksJ d S r#   )r   r   rr  r   r   r   test_slice_iter  s    z"TestBlockPlacement.test_slice_iterzslc, arr)r]   r\   r.   c                 C   s"   t t|jtj|tjd d S )NrR   )r$   r%   r   r*   r2   asarrayr   )r   rs  r8   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sLJ t|tdddg dkspJ d S )	Nr   rf   r.   rg   r:   r\   rb   )rf   rf   rf   rf   rf   )r   r   addr  r2   r3   r   )r   Zbplr   r   r   test_blockplacement_add  s    "z*TestBlockPlacement.test_blockplacement_addzval, inc, expectedr3  )r.   r\   r^   )         )r  r  r  )r  r     )r   r.   r]   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   sD   d}t jt|d t|d W d    n1 s60    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   rt  rw  ry  rz  r|  r  r  r  r  r  r  r  r   r   r   r   rq  ;  s   

 












*
	

rq  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edddZeedddZdS )TestCanHoldElementc                 C   s   | S r#   r   r/   r   r   r   r     rO   zTestCanHoldElement.<lambda>c                 C   s   |   S r#   )Z	to_seriesr  r   r   r   r     rO   c                 C   s   | j S r#   )rw   r  r   r   r   r     rO   c                 C   s   t | S r#   )r   r  r   r   r   r     rO   c                 C   s
   |  tS r#   )rn   rG   r  r   r   r   r     rO   c                 C   s
   t | S r#   )r2   r  r  r   r   r   r     rO   c                 C   s   | d S r   r   r  r   r   r   r     rO   c                 C   s   | d d S r   r   r  r   r   r   r     rO   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 s8J d |d< |d tju sRJ tdt	dddg}|D ]}||s~J ||d< qlt
ddd}||rJ d}tjt|d ||d< W d    n1 s0    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&   rp   ZNaTr2   r
  r   r   r   r   r[  )r   r   r8   valsr  r   r   r   r   $test_datetime_block_can_hold_element  s     
z7TestCanHoldElement.test_datetime_block_can_hold_elementr'   c                 C   sD   t jg d|d}t|}t|jtdgdd}|g s@J d S )N)r.   r]   r^   rR   r.   r\   rV   )r2   r   r   from_breaksr   rw   r   r  )r   r'   r  r8   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tdgdd}||}| ||d ||sVJ tj|d d dd	}||}t	
t | ||d
 W d    n1 s0    Y  ||rJ ttdtdtdg}||}t	
t | ||d
 W d    n1 s0    Y  ||r(J ttdtdtdg}	||	}t	
t | ||d
 W d    n1 s|0    Y  ||rJ d S )N)r.   r]   r^   	   rR   r.   r\   rV   Trb   Zneither)closedFr]   r^   )r2   r   r   r  r   rw   r   check_series_setitemr  r$   assert_produces_warningFutureWarningr   r   )
r   r'   r  r8   r  r   elemZii2Zii3Z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tdgdd}|g s:J d S )N2016r]   YZperiodsfreqr.   r\   rV   )r   r   rw   ro   r   r  )r   pir   r   r   r   &test_period_can_hold_element_emptylist%  s    z9TestCanHoldElement.test_period_can_hold_element_emptylistc                 C   s   t dddd}||}| ||d |dd d }||}tt | ||d W d    n1 sl0    Y  |d	d d }||}tt | ||d W d    n1 s0    Y  d S )
Nr  r]   r  r  TDrb   Frc   )r   r  Zasfreqr$   r  r  Zto_timestamp)r   r  r  r  Zpi2Zdtir   r   r   test_period_can_hold_element+  s    ,z/TestCanHoldElement.test_period_can_hold_elementr5  c                 C   s2   |j jd }|r ||s.J n||r.J d S r   )r   r   r  )r   objr  r6  r   r   r   r   check_can_hold_element=  s    z)TestCanHoldElement.check_can_hold_element)indexr6  c                 C   sl   |j  }t|dd}| ||| t|r6||d< n||d t|< |rZ|j|u shJ n|jtkshJ d S )NFr  r   )	rw   r7   r   r  r   r6   r   r'   rG   )r   r  r  r6  r8   Zserr   r   r   r  D  s    

z'TestCanHoldElement.check_series_setitemN)r   r   r   r   fixturer  r  r   r   r2   r  Zuint64r   r  r  r  r  rQ   r  r
   r  r   r   r   r   r    s*   


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 sDJ || rVJ |t|rjJ d S )N)rJ   BCr   rb   )r   r   r   r   Zshould_storeZ
as_orderedr2   r  )r   catr   r   r   r   r   test_should_store_categoricalV  s    z-TestShouldStore.test_should_store_categoricalN)r   r   r   r  r   r   r   r   r  U  s   r  c                  C   s^   t ddg} ttd}d}tjt|d t| |dd W d    n1 sP0    Y  d S )Nr7  rF  r\   z:Wrong number of dimensions. values.ndim != ndim \[1 != 2\]r   rV   )r2   r   r   r   r   r   r}   r   )r&   rl   r   r   r   r   test_validate_ndimf  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sXJ d S )N)r   r.   r\   r]   r^   r3  r   )r
   r   Zreindexr   r   r   r)   ra  )r   r_   rP   r   r   r   test_block_shapeo  s    r  c                 C   s   t jtddg}| |ttt||jd}|j	j
dv sBJ | tu r|jdu sXJ | |tt||j	|jd}|j	j
dv sJ |jdu sJ | | tt||j	|jd}|j	j
dv sJ |jdu sJ d S )Nr.   r\   rV   )rM   uF)r'   rW   )r  ZarraysZNumpyExtensionArrayr2   r   r   r   r6   rW   r'   kindr   Zis_extensionZto_numpy)r    r8   r   r   r   r   test_make_block_no_pandas_arrayw  s    r  )N)N)Er   r   rB  rt   numpyr2   r   Zpandas._libs.internalsr   Zpandas.compatr   Zpandas.util._test_decoratorsutilZ_test_decoratorsrY   Zpandas.core.dtypes.commonr   Zpandasr  r   r   r	   r
   r   r   r   r   r   Zpandas._testingZ_testingr$   Zpandas.core.algorithmscoreZ
algorithmsri  Zpandas.core.arraysr   r   r   Zpandas.core.internalsr   r   r   Zpandas.core.internals.blocksr   r   r   Zskip_array_manager_invalid_testZ
pytestmarkr  r    r"   r-   r9   rm   r   r   r!   r   r   r   rX  rY  rq  r  r  r  r  r  r   r   r   r   <module>   sZ   ,

Y


?
u     ;  		