B
    Y0dU                 @   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Z4d/ddZ5d0ddZ6G dd dZ7G dd dZ8dd Z9G 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, Z@d-d. ZAdS )1    )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   s   | j S )zS
    Fixture to test both the internal new_block and pseudo-public make_block.
    )param)request r   W/var/www/html/venv/lib/python3.7/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 tt| jts0tt|jts@tt | jj|jj d S )N)	tmassert_numpy_array_equalvaluesdtypeAssertionError
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libZstride_tricksZ
as_strideditemsizelencopy)r,   arrr   r   r   get_numeric_matK   s    r5   
   c             C   sX  t |}t|}|dkrtf}|f| }t|}| dkrJ|| | }n| dkrhd|| |  }n| dkrtdd | | D |}n| dkrtj|tj	d	}n| d
kr|d d}n~| 
dr@td| }	|	dk	std|  |	 d }
|dkstdtttd |
dj}t|t|d}n| dkrZ|d d}n| dkrtddddddddddg
}n| dkrtddddddddddg
}n| d kr6|d! d"ksttd#d$ |dd! D st| 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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>   s    z create_block.<locals>.<listcomp>)bbool)r"   )r   dtzM8[ns]g    eAzM8[ns]zM8[nszM8\[ns,\s*(\w+\/?\w*)\]zincompatible typestr -> r   r*   z)must have only 1 num items for a tz-aware)tz)ndim)	timedeltatdzm8[ns]zm8[ns])category         )Z	category2arK   crG   )sparseZ	sparse_nar6   c             s   s   | ]}|d kV  qdS )r*   Nr   )rH   sr   r   r   	<genexpr>   s    zcreate_block.<locals>.<genexpr>Z_nag              )
fill_valuezUnsupported typestr: "")	placementrO   )r   r2   Nr5   astyper.   reshaperavelonesbool_
startswithresearchr#   groupsr   r/   _datar   r   allendswithnanr   Z	sp_valuesview
ValueError)typestrr`   
item_shape
num_offsetmaker	num_itemsr,   matr!   mrN   r^   r4   r   r   r   create_blockU   sV    
"



 
rx   c             C   s0   |d krt }tt| td|ddtt|S )Nr   r   )r`   rr   )ra   r   rx   slicer	   r.   r/   )rq   num_rowsr   r   r   create_single_mgr   s
    r{   c          	   C   sN  |dkrt f}d}g }i }x| dD ]}| }t|s<q&|dddd \}}| }| d}|| ttt|| }y|| | W n t	k
r   |||< Y nX |t|7 }q&W t
|}g }	d}
xD| D ]8\}}|dd }|	t||||
d |
t|7 }
qW t|	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   ;:rS   ,-)rr   rs   c             S   s
   | j d S )Nr   )r%   )rK   r   r   r   <lambda>       zcreate_mgr.<locals>.<lambda>)keyc             S   s   g | ]}t t|qS r   )r	   r.   r/   )rH   nr   r   r   rJ      s    zcreate_mgr.<locals>.<listcomp>)ra   splitstripr2   	partitionextendlistr.   r/   KeyErrorr	   itemsappendrx   sortedr   tuple)descrrr   offsetZ	mgr_itemsZblock_placementsrG   namesZblockstrr`   blocksrs   rq   Zsblocksr   r   r   r      s@    
r   c               @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )	TestBlockc             C   sB   t ddddg| _t ddg| _t ddd	g| _t d
dg| _d S )Nr7   r   rS   rU   rB      rC   r*   rT   rL   r\   )rx   fblockcblockoblock
bool_block)selfmethodr   r   r   setup_method   s    zTestBlock.setup_methodc             C   s    t ddg}|jtjkstd S )Nr<   r   )rx   r"   r.   int32r#   )r   Z
int32blockr   r   r   test_constructor   s    zTestBlock.test_constructorc             C   s4   dd }|| j  || j || j || j d S )Nc             S   s   t t| |  d S )N)r)   r   round_trip_pickle)blkr   r   r   _check   s    z%TestBlock.test_pickle.<locals>._check)r   r   r   r   )r   r   r   r   r   test_pickle   s
    


zTestBlock.test_picklec             C   s:   t | jjtstt| jjjtj	dddgtj
d d S )Nr   rS   rU   )r"   )r$   r   r%   r   r#   r   r    r&   r.   arrayintp)r   r   r   r   test_mgr_locs  s    zTestBlock.test_mgr_locsc             C   sJ   | j j| j jjkst| j j| j jjks,tt| j t| j jksFtd S )N)r   r,   r!   r#   r"   r2   )r   r   r   r   
test_attrs  s    zTestBlock.test_attrsc             C   s(   | j  }|| j k	stt| j | d S )N)r   r3   r#   r)   )r   copr   r   r   	test_copy  s    
zTestBlock.test_copyc          	   C   s0  | j  }|d t|jts$tt|jj	t
jddgt
jd |jd dk sZt| j  }|d t|jts~tt|jj	t
jddgt
jd |jd dk st| j  }|d t|jj	t
jddgt
jd |jd dk st| j  }tjtd d |d W d Q R X d S )Nr   rS   rU   )r"   r*   )matchrT   )r   r3   deleter$   r%   r   r#   r   r    r&   r.   r   r   r!   rl   pytestraises
IndexError)r   Znewbr   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@t
|d t|jt	sZt
t|d	}|jjd }t|jtst
|dd
g t|jtst
d S )N   r;   )r"   r\   rU   zm8[ns]r   r*   zM8[ns]rT   )r.   r/   rc   ro   r   _mgrr   r$   r!   r   r#   r   r   )r   r4   dfr   r   r   r   test_delete_datetimelike5  s    
z"TestBlock.test_delete_datetimelikec             C   s   t jdd}t|dddgdd}| }d|d d < |jdk sHtt|dksXtt|dg dgddt|dg dgddt|dg dgddg}x t	||D ]\}}t
|| qW d S )	NrT   rU   r*   r]   rS   )r`   rO   ir   )r.   randomrandnr   _splitr!   rl   r#   r2   zipr)   )r   r!   r   resultexpectedresexpr   r   r   
test_splitF  s    zTestBlock.test_splitc          	   C   s&   | j }tt |j W d Q R X d S )N)r   r   assert_produces_warningDeprecationWarningZis_categorical)r   r   r   r   r   test_is_categorical_deprecatedY  s    z(TestBlock.test_is_categorical_deprecatedN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s   	r   c               @   s  e Zd Zdd Zdd Zdd Z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(d)d*d+d,d-gd.d/ Zd0d1 Zd2d3 Zd4d5 Zejdd6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGgdHdI ZdJdK Z dLdM Z!dNdO Z"dPdQ Z#dRdS Z$ejddTdUgdVdW Z%ejddXdYdZd[d\gd]d^ Z&d_d` Z'ejdadbdcdbdddegdfgdgdh Z(diS )jTestBlockManagerc             C   s*   t d}|jdkstt|dks&td S )Nza,b,c: f8-1; d,e,f: f8-2rS   r]   )r   nblocksr#   r2   )r   r   r   r   r   r   a  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 Q R X 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_locs)r   )r   axesr   r   r.   r   r%   r   r   r#   r   Z_rebuild_blknos_and_blklocsiget)r   Ztmp_mgrr   r   msgr   r   r   r   test_duplicate_ref_loc_failuref  s    

z/TestBlockManager.test_duplicate_ref_loc_failurec             C   sR   t |}t t|t| t|ds,tt|ds:t|jrDt|jrNtd S )N_is_consolidated_known_consolidated)r   r   assert_frame_equalr   hasattrr#   r   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 )N)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 )Nza: categoryrR   )r   r   r   r   r   r{   Zassert_series_equalr   )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d|jd}t	|f|t tdgd}t
|d |d  t
|d |d  t
|d |d  d S )NabcrT   )r!   r`   rO   )r   r   r   r*   rS   )r	   r   r.   r   Zrandr   r3   r/   rO   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)rT   )rr   rG   foorT   r*   barr   )r"   rS   )r   insertr2   r   r.   r   isetr   r    r   r   object_)r   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\t| }||jdt	dt |jd}|
|jtjkst| t|jdtjtt |jd}|
|jtjkst||jdtjt |
|jtjkstd S )Nbaz)r"   r   Zquux)r   r2   r   r.   zerosra   rL   r   get_locrepeatr   r"   r   r#   consolidater   r   rb   r:   int_Zfloat_)r   r   idxr   r   r   r   test_set_change_dtype  s    "z&TestBlockManager.test_set_change_dtypec       	      C   sN  |j dd}xft|j|jD ]T\}}t|j|j t|jtjrX|jj	|jj	kspt
q|jjj	|jjj	kst
qW |  |j dd}xt|j|jD ]\}}|j}|j}t|| t|tjr|j	}|j	}n|jj	}|jj	}t|tr|d kr|d ksF||k	sFt
qt|tjs0||k	sFt
q|d krB|d kst
qW d S )NF)deepT)r3   r   r   r   Zassert_equalr!   r$   r.   ndarraybaser#   rk   Z_consolidate_inplaceZ_ndarrayr   )	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td S )Nza: sparse-1; b: sparse-2)r   r&   r"   r.   float64r#   )r   r   r   r   r   test_sparse  s    zTestBlockManager.test_sparsec             C   s,   t d}t|jdkstt|ts(td S )Nza: sparse-1; b: sparse-2; c: f8rT   )r   r2   r   r#   r$   r   )r   r   r   r   r   test_sparse_mixed  s    z"TestBlockManager.test_sparse_mixedzmgr_string, dtypezc: f4; d: f2zc: f4; d: f2; e: f8c             C   s   t |}| j|kstd S )N)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td S )N)r   r&   r"   r#   )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td S )Nzh: datetime-1; g: datetime-2zM8[ns])r   r&   r"   r#   )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t|djdks0t| jdksBtd S )Nz%h: M8[ns, US/Eastern]; g: M8[ns, CET]r   zdatetime64[ns, US/Eastern]r*   zdatetime64[ns, CET]rC   )r   r   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   st  t d}|dkrtnd }t|}||}|djj|ksBt|djj|ksXt|djj|ksntt d}t|}t	| |j|dd}W d Q R X |djj|kst|d	jj|kst|d
jj|kst|djj|kst|djjtj
kst|djjtj
ks0t|tjkrX|djjtjksptn|djj|ksptd S )Nzc: f4; d: f2; e: f8r   r   r*   rS   z6a,b: object; c: bool; d: datetime; e: f4; f: f2; g: f8ignore)errorsrU   r\   r]   rT   )r   FutureWarningr.   r"   rb   r   typer#   r   r   r   r   
datetime64)r   r   r   warnZtmgrr   r   r   test_astype  s(    


zTestBlockManager.test_astypec             C   sJ  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st
|djtjkst
|d
jtjkst
|djtj	kst
|djtjkst
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st
|djtjkst
|d
jtjkst
|djtjkst
|djtjkst
|djjst
tj|djtj	kst
|djtjks.t
|djtjksFt
d S )Nc             S   s   t | j}t |j}t|t|ks(tx<|D ]4}d}x"|D ]}|j|jk r<d}P q<W |s.tq.W x<|D ]4}d}x"|D ]}|j|jk rzd}P qzW |sltqlW dS )z4compare the blocks, numeric compare ==, object don'tFTN)setr   r2   r#   r!   rl   )Zold_mgrnew_mgrZ
old_blocksZ
new_blocksrK   foundnbobr   r   r   _compare6  s"    





z/TestBlockManager.test_convert.<locals>._comparezf: i8; g: f8za,b,foo: object; f: i8; g: f8r   1)r"   r*   z2.rS   zfoo.T)numericrT   rU   zEa,b,foo: object; f: i4; bool: bool; dt: datetime; i: i8; g: f8; h: f2r\   r]   r      )r   convertr   r.   r   ra   r   r   r"   r   r#   r   r   rf   r   r   r   )r   r   r   r   r   r   r   test_convert5  s:    
zTestBlockManager.test_convertc          	   C   sH   t jtdd td W d Q R X t jtdd td W d Q R X d S )Nzneed to split)r   za: category; b: categoryza: category2; b: category2)r   r   rp   r   )r   r   r   r   test_invalid_ea_blocko  s    z&TestBlockManager.test_invalid_ea_blockc             C   sX   xRdD ]J}t d| }| j|ks*tt d| d| }| j|kstqW d S )N)r8   r;   rC   rL   rB   zM8[ns]zm8[ns]za: z; b: )r   r&   r"   r#   )r   r"   r   r   r   r   test_interleavev  s
    
z TestBlockManager.test_interleave)za: categoryr;   )za: category; b: categoryr;   )za: category; b: category2rC   )za: category2rC   )za: category2; b: category2rC   )za: f8r8   )za: f8; b: i8r8   )za: f4; b: i8r8   )za: f4; b: i8; d: objectrC   )za: bool; b: i8rC   )z
a: complexrB   )za: f8; b: categoryrC   )za: M8[ns]; b: categoryrC   )za: M8[ns]; b: boolrC   )za: M8[ns]; b: i8rC   )za: m8[ns]; b: boolrC   )za: m8[ns]; b: i8rC   )za: M8[ns]; b: m8[ns]rC   c             C   s  t d}| jdkstt d}| jdks4tt d}| jdksNtt d}| jdkshtt d}| jdkstt d	}| jdkstt d
}| jdkstt d}| jdkstt d}| jdkstt d}| jdkstt d}| jdks"tt d}| jdks>tt d}| jdksZtt d}| jdksvtt d}| jdkstt d}| jdkstd S )Nza: categoryr;   za: category; b: category2rC   za: category2za: f8r8   za: f8; b: i8za: f4; b: i8za: f4; b: i8; d: objectza: bool; b: i8z
a: complexrB   za: f8; b: categoryza: M8[ns]; b: categoryza: M8[ns]; b: boolza: M8[ns]; b: i8za: m8[ns]; b: boolza: m8[ns]; b: i8za: M8[ns]; b: m8[ns])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t | |jdtjt | |jdtjt | |jdtjt | |jdtjt | }|jdkst	| 
 }|jdkst	t|jd jtst	t|jd jjtjt|jtjd	 d S )
NfrG   rK   ghrU   r*   r   )r"   )r   r   r   r.   r   r   ra   r   r   r#   get_numeric_datar$   r   r%   r   r   r    r&   r/   r2   r   )r   r   Zconsr   r   r    test_consolidate_ordering_issues  s    z1TestBlockManager.test_consolidate_ordering_issuesc             C   s   t d}|jddddgdd}|jdks,tt|jtddddg 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-2r  rW   rV   rG   r   )axisrS   r]   r*   rT   )r   reindex_axisr   r#   r   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dddgtjd | }t|jt	d	d
ddg t
||jd
 ||jd
  ||jd
tdddg t
||jd
 tdddg |jdd}t|jt	d	d
ddg ||jd
tdddg t
||jd
 tdddg d S )Nz[int: int; float: float; complex: complex;str: object; bool: bool; obj: object; dt: datetime)rT   )rr   r\   r*   rS   rT   )r"   r:   r7   rB   rL   g      Y@g      i@g     r@T)r3   g     @@g     @@g     p@)r   r   r.   r   r   r	  r   r  r   r	   r   r   r   r   )r   r   r   Znumeric2r   r   r   test_get_numeric_data  s(     z&TestBlockManager.test_get_numeric_datac             C   s  t ddd}|dtjdddgtjd | }t|jt	dd	g t
||jd ||jd  |d
tdddg t||jd tdddg |jdd}|d
tdddg t||jd tdddg d S )Nz[int: int; float: float; complex: complex;str: object; bool: bool; obj: object; dt: datetime)rT   )rr   r]   TF)r"   rL   rM   r   )r3   )r   r   r.   r   r   Zget_bool_datar   r  r   r	   r   r   r   r   r    )r   r   ZboolsZbools2r   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_raise  s    z/TestBlockManager.test_unicode_repr_doesnt_raisez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.td S )NrY   )r   r   r   r   equalsr#   )r   r   bm1Zbm2r   r   r   test_equals  s    zTestBlockManager.test_equalsz	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   sR   t |}t|j}x8|D ]0}tt||j}||s<t||stqW d S )N)	r   	itertoolspermutationsr   r   r   r   r  r#   )r   r   Z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}|  dddddgks*td S )	Nr8   r\   )rz   g        g      ?g       @g      @g      @)r{   external_valuestolistr#   )r   r   r   r   r   test_single_mgr_ctor;  s    z%TestBlockManager.test_single_mgr_ctorvaluer*   TruerS   rT   g      @c          	   C   sL   t d}dt|j d}tjt|d |jdgdg|d W d Q R X d S )Nza,b,c: i8-1; d,e,f: i8-2z9For argument "inplace" expected type bool, received type .)r   r*   rS   )inplace)r   r   r   r   r   rp   Zreplace_list)r   r  r  r   r   r   r   test_validate_bool_args?  s    z(TestBlockManager.test_validate_bool_argsN))r   r   r   r   r   r   r   markparametrizer   r   r   r   r   r   r   r   r.   r   r   r   rf   r   r   r   r   r   r   r  r  r  r  r
  r  r  r  r  r  r  r  r!  r   r   r   r   r   `  sz   	'  :( r   c             C   s   | j dkr|  S |  S )Nr*   )rO   r  r&   )r   r   r   r   	_as_arrayK  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 )TestIndexingr8   r;   za,b,c,d,e,f: f8)rr   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t|j xnt|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r2|||t
|j| d dk |||tjdddgtjd
 |||g  |||tt|j|  |j| dkr*|||dddg |||dd	dg q*W 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r| |}nd S t	d f| |f }tj|| t |dd t| j| | |j|  d S )N)r"   )r  r*   r   F)check_dtype)r$  r$   r.   r   r   r2   Zconcatenater   rL   ry   Z	get_slicerO   Zgetitem_mgrr   r    r  )r   r  Zslobjrv   axZslicedZ	mat_slobjr   r   r   assert_slice_okf  s    
  
z4TestIndexing.test_get_slice.<locals>.assert_slice_okrS   rT   d   r*   rU   r   )r"   TFrY   )rO   r#   rangery   r.   r   rf   re   r,   r   r/   r   )r   r   r(  r'  r   r   r   test_get_sliced  s*    
 zTestIndexing.test_get_slicec             C   s   dd }xt |jD ]x}|||g d |||dddgd |||tt |j| d |j| dkr|||dddgd |||dd	d
gd qW d S )Nc             S   sT   t | }| ||}tjt|||t |dd t| j| ||j|  d S )NF)r&  )r$  Ztaker   r    r.   r  r   )r   r  indexerrv   Ztakenr   r   r   assert_take_ok  s
    z.TestIndexing.test_take.<locals>.assert_take_ok)r.  r   rT   r*   rS   rY   r*  r+  )r,  rO   r   r,   )r   r   r/  r'  r   r   r   	test_take  s    zTestIndexing.test_taker^   Ng      Y@c             C   s
  dd }xt |jD ]}|||tg | ||||j| | ||||j| dddg | |||tdddg| |||td|j| d dg| |j| dkr||||j| d d | ||||j| dd d	 | ||||j| dd
ddd
dg | qW d S )Nc             S   s`   t | }| j| |}| j|||d}tjtj||||dt |dd t|j| | d S )N)r^   F)r&  )	r$  r   Zget_indexer_forr  r   r    algostake_ndr  )r   r  
new_labelsr^   rv   r.  r  r   r   r   assert_reindex_axis_is_ok  s    zATestIndexing.test_reindex_axis.<locals>.assert_reindex_axis_is_okr   r   r   r   rT   r+  rY   r*   rS   )r,  rO   r	   r   r,   )r   r^   r   r4  r'  r   r   r   test_reindex_axis  s     zTestIndexing.test_reindex_axisc          
   C   s  dd }xt |jD ]z}|||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dddgtdddg| |||tdddgtdddg| |||td|j| d dgtdddg| |j| d	kr|||tdddgtdd
dg| qW d S )Nc             S   sV   t | }tj||||d}| j||||d}tj|t |dd t|j| | d S )N)r^   F)r&  )r$  r1  r2  Zreindex_indexerr   r    r  r   )r   r  r3  r.  r^   rv   Zreindexed_matr  r   r   r   assert_reindex_indexer_is_ok  s    zGTestIndexing.test_reindex_indexer.<locals>.assert_reindex_indexer_is_ok)r"   r   rY   r   r   r   rT   r*   rS   )	r,  rO   r	   r.   r   r   r   r/   r,   )r   r^   r   r6  r'  r   r   r   test_reindex_indexer  sB     **$$z!TestIndexing.test_reindex_indexer)r   r   r   r{   ra   r   ZMANAGERSr   r"  r#  r-  r0  r.   rn   r5  r7  r   r   r   r   r%  Q  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dddgedddfdddg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dddgd gdgddddgddddgdddgdddgg	d!d" Zejdedddddgfeddg feddg fgd#d$ Zejd%edddddgfeddg feddg feddddddgfgd&d' Zd(d) Zejd*edddg feddddddgfedddddddgfdddgddddgfedddg fedddd+d,d-gfeddddd-d,d+gfdddgdd+d,d.gfedddg feddddddgfdddgddddgfgd/d0 Zejd1edddddggd2d3 ZdS )4TestBlockPlacementzslc, expectedr   rU   rS   rT   r*   rY   c             C   s   t t||kstd S )N)r2   r   r#   )r   slcr   r   r   r   test_slice_len  s    z!TestBlockPlacement.test_slice_lenr9  c          	   C   s*   d}t jt|d t| W d Q R X d S )Nzslice step cannot be zero)r   )r   r   rp   r   )r   r9  r   r   r   r   test_zero_step_raises  s    z(TestBlockPlacement.test_zero_step_raisesc             C   s.   t ddd}t|}|jt dd dks*td S )NrT   rY   r*  )ry   r   r.  r#   )r   r9  bpr   r   r   !test_slice_canonize_negative_stop!  s    z4TestBlockPlacement.test_slice_canonize_negative_stopNr6   c          	   C   s*   d}t jt|d t| W d Q R X d S )Nzunbounded slice)r   )r   r   rp   r   )r   r9  r   r   r   r   test_unbounded_slice_raises(  s    z.TestBlockPlacement.test_unbounded_slice_raisesr)  c             C   s   t |jrtd S )N)r   is_slice_liker#   )r   r9  r   r   r   test_not_slice_like_slices>  s    z-TestBlockPlacement.test_not_slice_like_sliceszarr, slce   r\         c             C   s   t |j|kstd S )N)r   as_slicer#   )r   r4   r9  r   r   r   test_array_to_slice_conversionK  s    z1TestBlockPlacement.test_array_to_slice_conversionr4   r*  r+  ic             C   s   t |jrtd S )N)r   r?  r#   )r   r4   r   r   r   test_not_slice_like_arraysY  s    z-TestBlockPlacement.test_not_slice_like_arraysc             C   s   t t||kstd S )N)r   r   r#   )r   r9  r   r   r   r   test_slice_iterj  s    z"TestBlockPlacement.test_slice_iterzslc, arrc             C   s"   t t|jtj|tjd d S )N)r"   )r   r    r   r&   r.   asarrayr   )r   r9  r4   r   r   r   test_slice_to_array_conversionq  s    
z1TestBlockPlacement.test_slice_to_array_conversionc             C   sz   t tdd}|djtdddks*t|tdjtdddksLtt|tddddddddgksvtd S )Nr   r\   r*   r]   r6   rS   rY   )r   ry   addrD  r#   r.   r/   r   )r   Zbplr   r   r   test_blockplacement_add  s    "z*TestBlockPlacement.test_blockplacement_addzval, inc, expected            c             C   s   t t|||kstd S )N)r   r   rJ  r#   )r   valincr   r   r   r   test_blockplacement_add_int  s    z.TestBlockPlacement.test_blockplacement_add_intrP  c          	   C   s0   d}t jt|d t|d W d Q R X d S )Nziadd causes length change)r   i)r   r   rp   r   rJ  )r   rP  r   r   r   r   "test_blockplacement_add_int_raises  s    z5TestBlockPlacement.test_blockplacement_add_int_raises)r   r   r   r   r"  r#  ry   r:  r;  r=  r>  r@  rE  rF  rG  rI  rK  rR  rS  r   r   r   r   r8    s   *




 

8""r8  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edddZedddZeedddZeedd d!Zd"S )#TestCanHoldElementc             C   s   | S )Nr   )r+   r   r   r   r     r   zTestCanHoldElement.<lambda>c             C   s   |   S )N)Z	to_series)r+   r   r   r   r     r   c             C   s   | j S )N)rk   )r+   r   r   r   r     r   c             C   s   t | S )N)r   )r+   r   r   r   r     r   c             C   s
   |  tS )N)rb   rC   )r+   r   r   r   r     r   c             C   s
   t | S )N)r.   rH  )r+   r   r   r   r     r   c             C   s   | d S )Nr   r   )r+   r   r   r   r     r   c             C   s   | d d S )Nr   r   )r+   r   r   r   r     r   )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tt|j }|d s8td |d< |d tjksRtt	dt
dddg}x"|D ]}||st||d< qnW tddd}||rtd}tjt|d ||d< W d Q R X d S )Nr   r   z
2010-10-10i  r6   zLvalue should be a 'Timestamp', 'NaT', or array of those. Got 'date' instead.)r   )rx   _can_hold_elementr#   pdr   r!   rd   ZNaTr.   r   r   r   r   r   	TypeError)r   r   r4   valsrP  r   r   r   r   $test_datetime_block_can_hold_element  s    
z7TestCanHoldElement.test_datetime_block_can_hold_elementr"   c             C   sB   t jdddg|d}t|}t|jdgdd}|g s>td S )Nr*   rT   rU   )r"   rS   )rO   )r.   r   r
   from_breaksr   rk   rV  r#   )r   r"   rU  r4   iir   r   r   r   (test_interval_can_hold_element_emptylist  s    
z;TestCanHoldElement.test_interval_can_hold_element_emptylistc       
      C   s  t jddddg|d}t|}t|jdgdd}||}| ||d ||sVttj|d d	 d
d}||}| ||d ||rttt	dt	dt	dg}||}| ||d ||rttt
dt
dt
dg}	||	}| ||d ||rtd S )Nr*   rT   rU   	   )r"   rS   )rO   TrY   Zneither)closedF)r.   r   r
   r[  r   rk   check_series_setitemrV  r#   r   r   )
r   r"   rU  r4   r\  r   elemZii2Zii3Zii4r   r   r   test_interval_can_hold_element  s$    
z1TestCanHoldElement.test_interval_can_hold_elementc             C   s2   t dddd}t|jdgdd}|g s.td S )N2016rT   rF   )periodsfreqr*   rS   )rO   )r   r   rk   rV  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 )
Nrc  rT   rF   )rd  re  TDrY   FS)r   r`  ZasfreqZto_timestamp)r   rU  rf  ra  Zpi2Zdtir   r   r   test_period_can_hold_element  s    z/TestCanHoldElement.test_period_can_hold_element)indexr   c             C   s    |  ||| | ||| d S )N)r`  check_frame_setitem)r   ra  rk  r   r   r   r   check_setting
  s    z TestCanHoldElement.check_setting)r   c             C   s2   |j jd }|r ||s.tn||r.td S )Nr   )r   r   rV  r#   )r   objra  r   r   r   r   r   check_can_hold_element  s    z)TestCanHoldElement.check_can_hold_elementc             C   sh   |j  }t|}| ||| t|r2||d< n||d t|< |rV|j|ksdtn|jt	ksdtd S )Nr   )
rk   r3   r   ro  r   r2   r   r#   r"   rC   )r   ra  rk  r   r4   serr   r   r   r`    s    

z'TestCanHoldElement.check_series_setitemc             C   s|   |j  }t|}| ||| t|r4||jd< n||jd t|df< |rf|jjd j	|ksxt
n|jd tksxt
d S )N)r   r   r   )rk   r3   r   ro  r   Zilocr2   r   r   r!   r#   ZdtypesrC   )r   ra  rk  r   r4   r   r   r   r   rl  %  s    
z&TestCanHoldElement.check_frame_setitemN)r   r   r   r   fixturerU  rZ  r"  r#  r.   r   Zuint64r   r]  rb  rg  rj  r	   rL   rm  ro  r`  rl  r   r   r   r   rT    s$   
"	"rT  c               @   s   e Zd Zdd ZdS )TestShouldStorec             C   sp   t dddg}t|}|jjd }||s0t||d d sFt|| rXt|t|rltd S )NrF   BCr   rY   )	r   r   r   r   Zshould_storer#   Z
as_orderedr.   rH  )r   catr   r   r   r   r   test_should_store_categorical;  s    z-TestShouldStore.test_should_store_categoricalN)r   r   r   rv  r   r   r   r   rr  :  s   rr  c          	   C   sF   t ddg}td}d}tjt|d | ||dd W d Q R X d S )Ng      ?g       @rS   z:Wrong number of dimensions. values.ndim != ndim \[1 != 2\])r   )rO   )r.   r   ry   r   r   rp   )r   r!   r`   r   r   r   r   test_validate_ndimK  s
    rw  c              C   sf   t dddddg} tdddg| }ttdddg| }|jjd jj|jjd jjksbtd S )Nr   r*   rS   rT   rU   )	r	   r   Zreindexr   r   r   r%   r.  r#   )r   rV   rK   r   r   r   test_block_shapeT  s    rx  c             C   s   t jtddg}| |tt||jd}|jj	dks>t
|jdksLt
| tkr| |tt||j|jd}|jj	dkst
|jdkst
| | tt||j|jd}|jj	dkst
|jdkst
d S )Nr*   rS   )rO   )rI   uF)r"   rO   )rW  ZarraysZPandasArrayr.   r   ry   r2   rO   r"   kindr#   Zis_extensionr   Zto_numpy)r   r4   r   r   r   r   test_make_block_no_pandas_array\  s    r{  c           	   C   sB   t td} | jjd }tt t|| jdd W d Q R X d S )NrT   r   T)Zfastpath)	r   r,  rk   r   r   r   r   r   rk  )rp  r   r   r   r   -test_single_block_manager_fastpath_deprecatedt  s    r|  )N)N)Br   r   r  rh   numpyr.   r   Zpandas._libs.internalsr   Zpandas.util._test_decoratorsutilZ_test_decoratorsrQ   Zpandas.core.dtypes.commonr   ZpandasrW  r   r   r   r	   r
   r   r   r   r   Zpandas._testingZ_testingr   Zpandas.core.algorithmscoreZ
algorithmsr1  Zpandas.core.arraysr   r   r   Zpandas.core.internalsr   r   r   Zpandas.core.internals.blocksr   r   Zskip_array_manager_invalid_testZ
pytestmarkrq  r   r   r)   r5   ra   rx   r{   r   r   r   r$  r%  r8  rT  rr  rw  rx  r{  r|  r   r   r   r   <module>   sP   ,	V


?l   n =  	