U
    -e                     @   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- ej.Z/ej0e-e*gd
dd Z1ej0dd Z2dd Z3dd Z4dZ5dd e-fddZ6d0ddZ7d1ddZ8ej0dd Z9G 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)Z@d*d+ ZAd,d- ZBd.d/ ZCd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	new_blockparamsc                 C   s   | j S )zS
    Fixture to test both the internal new_block and pseudo-public make_block.
    param)request r   f/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/pandas/tests/internals/test_internals.pyblock_maker3   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_equalD   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_matL   s      r9   
   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rt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   dtM8[ns]g    eArS   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]rY   )category         )Z	category2arO   crK   )sparseZ	sparse_nar:   c                 s   s   | ]}|d kV  qdS )r.   Nr   )rL   sr   r   r   	<genexpr>   s     zcreate_block.<locals>.<genexpr>_na              
fill_valuezUnsupported typestr: ""	placementrV   )r   r6   Nr9   astyper2   reshaperavelonesbool_
startswithresearchr'   groupsr	   r3   _datar   r   NotImplementedErrorallendswithnanr   Z	sp_valuesview
ValueError)typestrrl   
item_shape
num_offsetmaker	num_itemsr0   matr%   mrT   ri   r8   r   r   r   create_blockV   sX    
"



 
r   c                 C   s0   |d k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   sF  |dkrt f}d}g }i }| dD ]}| }t|s:q$|dddd \}}| }| d}|| ttt|| }z|| | W n t	k
r   |||< Y nX |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)   )rO   r   r   r   <lambda>       zcreate_mgr.<locals>.<lambda>)keyc                 S   s   g | ]}t t|qS r   )r
   r2   r3   )rL   nr   r   r   rN      s     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       sL    
   r    c                   C   s   t ddddg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dddg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td S )Nr@   r   )r   r&   r2   int32r'   )selfZ
int32blockr   r   r   test_constructor   s    zTestBlock.test_constructorz	typ, datar;   r   r[   r]   rF      rG   r.   r\   rP   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   s6   t |jtstt|jjtjdddgtj	d d S )Nr   r[   r]   rQ   )
r(   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t|j|jjks$tt|t|jks:td S r"   )r0   r%   r'   r&   r6   r   r   r   r   
test_attrs  s    zTestBlock.test_attrsc                 C   s"   |  }||k	stt|| d S r"   )r7   r'   r-   )r   r   copr   r   r   	test_copy  s    zTestBlock.test_copyc              	   C   s  |  }|j}|dd }|j|ks*t||k	s6tt|jjtjddgtj	d |j
d dk rlt|j
d dk st|  }|j}|d}t|dkst|j|kst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t|d j
d dk s0t|  }|d}t|dksTtt|d jjtjddgtj	d |d j
d dk st|  }tjtd d |d W 5 Q R X d S )Nr   r[   r]   rQ   r.   matchr\   )r7   r)   deleter'   r#   r$   r*   r2   r   r   r%   ry   r6   pytestraises
IndexError)r   r   ZnewbZlocsnbr   r   r   test_delete  sJ     

 
 

 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|d	ksZt
t|d jt	snt
t|d jt	st
t|d
}|jjd }t|jtst
|ddg}t|d	kst
t|d jtst
t|d jtst
d S )N   r?   rQ   rf   r]   rY   r   r.   r[   rS   r\   )r2   r3   ro   r|   r   _mgrr   r(   r%   r   r'   r   r6   r   )r   r8   dfr   r   r   r   r   test_delete_datetimelikeH  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}t	||D ]\}}t
|| qd S )	Nr\   r]   r.   rg   r[   rk   ir   )r2   randomrandnr   _splitr%   ry   r'   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(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(didj Z)dkdl Z*dmS )n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-2r[   rg   )r    nblocksr'   r6   r   r!   r   r   r   r   r  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 5 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_locsr   )r    axesr   r   r2   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_failurew  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 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: categoryrZ   )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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\   rQ   )r%   rl   rV   )r   r   r   r.   r[   )r
   r   r2   r   Zrandr   r7   r3   r   rV   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   rQ   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\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bazrQ   r   Zquux)r   r6   r   r2   zerosrm   rP   r   get_locrepeatr   r&   r   r'   consolidater   r   rn   r>   int_Zfloat_)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	ksnt
q|jjj	|jjj	kst
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 kr|d ks>||k	s>t
qt|tjs(||k	s>t
q|d kr:|d kst
qd S )NF)deepT)r7   r   r   r#   Zassert_equalr%   r(   r2   ndarraybaser'   Z_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td S )Nza: sparse-1; b: sparse-2)r    r*   r&   r2   float64r'   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: f8r\   )r    r6   r   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td S r"   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 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-2rS   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]rG   )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   sL  t d}t|}||}|djj|ks2t|djj|ksHt|djj|ks^tt d}t|}|j|dd}|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st|djjtjkst|tjkr0|djjtj	ksHtn|djj|ksHt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   r  
datetime64)r   r   r!   Ztmgrr   r   r   test_astype"  s$    


zTestBlockManager.test_astypec                 C   sP  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}|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st	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st	tj|djtj
kst	|djtjks4t	|djtjksLt	d S )Nc                 S   s   t | j}t |j}t|t|ks(t|D ]2}d}|D ]}|j|jk r8d} qVq8|s,tq,|D ]2}d}|D ]}|j|jk rpd} qqp|sdtqddS )z4compare the blocks, numeric compare ==, object don'tFTN)setr   r6   r'   r%   ry   )Zold_mgrnew_mgrZ
old_blocksZ
new_blocksrO   foundr   obr   r   r   _compare?  s"    


z/TestBlockManager.test_convert.<locals>._comparezf: i8; g: f8Tr7   za,b,foo: object; f: i8; g: f8r   1rQ   r.   z2.r[   zfoo.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   r   rr   r  r  r  )r   r  r!   r
  r   r   r   test_convert>  s<    
zTestBlockManager.test_convertc              	   C   sH   t jtdd td W 5 Q R X t jtdd td W 5 Q R X 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 ]J}t d| }| j|ks(tt d| d| }| j|kstqd S )N)r<   r?   rG   rP   rF   rS   rY   za: z; b: r   )r   r&   r!   r   r   r   test_interleave  s
    z TestBlockManager.test_interleave)r   r?   )r  r?   )a: category; b: category2rG   )a: category2rG   )r  rG   )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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 )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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frK   rO   ghr]   r.   r   rQ   )r   r   r   r2   r   r   rm   r   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ddddgdd}| r*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)  r_   r^   rK   r   axisrg   r[   r.   r\   )r    reindex_axisZis_consolidatedr'   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|jd
tdddgdd |rt
||jd
 tdddg n*t
||jd
 tdddg |jdd}t|jt	d	d
ddg |j|jd
tdddgdd |rvt
||jd
 tdddg n*t
||jd
 tdddg d S )N[int: int; float: float; complex: complex;str: object; bool: bool; obj: object; dt: datetimer   r   rf   r.   r[   r\   rQ   r>   r;   rF   rP         Y@g      i@g     r@Tinplace      ?r  g     @@g     @@g     p@)r    r   r2   r   r   r+  r#   r0  r   r
   r   r   r   r   )r   using_copy_on_writer!   numericZnumeric2r   r   r   test_get_numeric_data  sR    

z&TestBlockManager.test_get_numeric_datac                 C   sp  t ddd}|dtjdddgtjd | }t|jt	dg t
||jd ||jd  |jd	tdddgdd
 |rt||jd tdddg n*t||jd tdddg |jdd}|d	tdddg |rBt||jd tdddg n*t||jd tdddg d S )Nr3  r   r   rg   TFrQ   rP   r   r5  r  )r    r   r2   r   r   Zget_bool_datar#   r0  r   r
   r   r   r   r   r$   )r   r8  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_raiseF  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.td S )Nra   )r    r   r   r   equalsr'   )r   r   bm1Zbm2r   r   r   test_equalsI  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   sN   t |}t|j}|D ]0}tt||j}||s:t||stqd S r"   )	r    	itertoolspermutationsr   r   r   r   r?  r'   )r   r   bmZblock_permsZbm_permZbm_thisr   r   r   (test_equals_block_order_different_dtypesR  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 )	Nr<   rf   )r   re   r7         @g      @g      @)r   external_valuestolistr'   r   r   r   r   test_single_mgr_ctore  s    z%TestBlockManager.test_single_mgr_ctorvaluer.   Truer[   r\   g      @c              	   C   sL   t d}dt|j d}tjt|d |jdgdg|d W 5 Q R X 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_argsi  s
    z(TestBlockManager.test_validate_bool_argsc                 C   s   t d}|dtdg t|jtjddddgtr:dndd t|jtjddddgtrbdndd t	|j
dks~td S )Na,b,c: i8; d: f8r   r.   r  r   rQ   r[   )r    _iset_split_blockr2   r   r#   r$   blklocsr   blknosr6   r   r'   r   rD  r   r   r   test_iset_split_blockt  s      z&TestBlockManager.test_iset_split_blockc              	   C   s   t d}|dtdgtttdg t|jtjddddgt	rLdndd t|j
tjddddgt	rtdndd t|jd	kstd S )
NrN  r   r:   r.   r  r   rQ   r[   r\   )r    rO  r2   r   r   ranger#   r$   rP  r   rQ  r6   r   r'   rR  r   r   r   test_iset_split_block_values  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'  r,  r2  r:  r;  r=  rA  rE  rI  rM  rS  rU  r   r   r   r   r   q  s   
	%


:
%2) 


	

r   c                 C   s   | j dkr|  S |  jS )Nr.   )rV   rG  r*   T)r!   r   r   r   	_as_array  s    
rW  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t|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dddgtjd
 |||g  |||tt|j|  |j| dkr&|||dddg |||dd	dg 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r| |}nd S t	d f| |f }tj|| t |dd t| j| | |j|  d S )NrQ   r-  r.   r   FZcheck_dtype)rW  r(   r2   r   r   r6   Zconcatenater   rP   r   Z	get_slicerV   Zgetitem_mgrr#   r$   r0  )r!   r.  Zslobjr   axZslicedZ	mat_slobjr   r   r   assert_slice_ok  s&    
 
  z4TestIndexing.test_get_slice.<locals>.assert_slice_okr[   r\   d   r.   r]   r   rQ   TFra   )rV   r'   rT  r   r2   r   rr   rq   r0   r   r3   r   )r   r!   r[  rZ  r   r   r   test_get_slice  s0    
   zTestIndexing.test_get_slicec                 C   s   dd }t |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d S )Nc                 S   sT   t | }| ||}tjt|||t |dd t| j| ||j|  d S )NFrY  )rW  Ztaker#   r$   r2   r0  r   )r!   r.  indexerr   Ztakenr   r   r   assert_take_ok  s      z.TestIndexing.test_take.<locals>.assert_take_ok)r`  r   r\   r.   r[   ra   r]  r^  )rT  rV   r   r0   )r   r!   ra  rZ  r   r   r   	test_take  s    zTestIndexing.test_takeri   Nr4  c                 C   s  dd }t |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d S )Nc                 S   s`   t | }| j| |}| j|||d}tjtj||||dt |dd t|j| | d S Nrh   FrY  )	rW  r   Zget_indexer_forr/  r#   r$   algostake_ndr0  )r!   r.  
new_labelsri   r   r`  r1  r   r   r   assert_reindex_axis_is_ok  s    zATestIndexing.test_reindex_axis.<locals>.assert_reindex_axis_is_okr   r   r   r   r\   r^  ra   r.   r[   )rT  rV   r
   r   r0   )r   ri   r!   rg  rZ  r   r   r   test_reindex_axis  s*          zTestIndexing.test_reindex_axisc              
   C   s  dd }t |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d S )Nc                 S   sV   t | }tj||||d}| j||||d}tj|t |dd t|j| | d S rc  )rW  rd  re  Zreindex_indexerr#   r$   r0  r   )r!   r.  rf  r`  ri   r   Zreindexed_matr1  r   r   r   assert_reindex_indexer_is_ok  s         zGTestIndexing.test_reindex_indexer.<locals>.assert_reindex_indexer_is_okrQ   r   ra   r   r   r   r\   r.   r[   )	rT  rV   r
   r2   r   r   r   r3   r0   )r   ri   r!   ri  rZ  r   r   r   test_reindex_indexer  s                            z!TestIndexing.test_reindex_indexer)r   r   r   r   rm   r    ZMANAGERSr   r   r   r_  rb  r2   r{   rh  rj  r   r   r   r   rX    s"   


;
rX  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   r]   r[   r\   r.   ra   c                 C   s   t t||kstd S r"   )r6   r   r'   r   slcr   r   r   r   test_slice_lenP  s    z!TestBlockPlacement.test_slice_lenrm  c              	   C   s*   d}t jt|d t| W 5 Q R X d S )Nzslice step cannot be zeror   r   r   r}   r   r   rm  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 )Nr\   ra   r]  )r   r   r`  r'   )r   rm  bpr   r   r   !test_slice_canonize_negative_stopc  s    z4TestBlockPlacement.test_slice_canonize_negative_stopNr:   c              	   C   s*   d}t jt|d t| W 5 Q R X d S )Nzunbounded slicer   ro  rp  r   r   r   test_unbounded_slice_raisesj  s    z.TestBlockPlacement.test_unbounded_slice_raisesr\  c                 C   s   t |jrtd S r"   r   Zis_slice_liker'   )r   rm  r   r   r   test_not_slice_like_slices  s    z-TestBlockPlacement.test_not_slice_like_sliceszarr, slce   rf         c                 C   s   t |j|kstd S r"   )r   as_slicer'   )r   r8   rm  r   r   r   test_array_to_slice_conversion  s    z1TestBlockPlacement.test_array_to_slice_conversionr8   r]  r^  c                 C   s   t |jrtd S r"   ru  )r   r8   r   r   r   test_not_slice_like_arrays  s    z-TestBlockPlacement.test_not_slice_like_arraysc                 C   s   t t||kstd S r"   )r   r   r'   rl  r   r   r   test_slice_iter  s    z"TestBlockPlacement.test_slice_iterzslc, arrc                 C   s"   t t|jtj|tjd d S )NrQ   )r#   r$   r   r*   r2   asarrayr   )r   rm  r8   r   r   r   test_slice_to_array_conversion  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   rf   r.   rg   r:   r[   ra   )r   r   addrz  r'   r2   r3   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 r"   )r   r   r  r'   )r   valincr   r   r   r   test_blockplacement_add_int  s    z.TestBlockPlacement.test_blockplacement_add_intr  c              	   C   s0   d}t jt|d t|d W 5 Q R X 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   rn  rq  rs  rt  rv  r{  r}  r~  r  r  r  r  r   r   r   r   rk  O  s   

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





,
	

rk  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     r   zTestCanHoldElement.<lambda>c                 C   s   |   S r"   )Z	to_seriesr  r   r   r   r     r   c                 C   s   | j S r"   )rw   r  r   r   r   r     r   c                 C   s   t | S r"   )r   r  r   r   r   r     r   c                 C   s
   |  tS r"   )rn   rG   r  r   r   r   r     r   c                 C   s
   t | S r"   )r2   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     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}|D ]}||s~t||d< qltddd}||rtd}tjt|d ||d< W 5 Q R X 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_elementr'   pdr   r%   rp   ZNaTr2   r  r   r   r   r   	TypeError)r   r   r8   valsr  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.   r\   r]   rQ   r[   rU   )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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.   r\   r]   	   rQ   r[   rU   Tra   Zneither)closedF)r2   r   r   r  r   rw   check_series_setitemr  r'   r   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dgdd}|g s6td S )N2016r\   rJ   Zperiodsfreqr.   r[   rU   )r   r   rw   ro   r  r'   )r   pir   r   r   r   &test_period_can_hold_element_emptylist6  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  r\   rJ   r  TDra   FS)r   r  ZasfreqZ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.tn||r.td S r   )r   r   r  r'   )r   objr  r6  r   r   r   r   check_can_hold_elementL  s    z)TestCanHoldElement.check_can_hold_element)indexr6  c                 C   sl   |j  }t|dd}| ||| t|r6||d< n||d t|< |rZ|j|kshtn|jt	kshtd S )NFr  r   )
rw   r7   r   r  r   r6   r   r'   r&   rG   )r   r  r  r6  r8   Zserr   r   r   r  S  s    

z'TestCanHoldElement.check_series_setitemN)r   r   r   r   fixturer  r  r   r   r2   r  Zuint64r   r  r  r  r  rP   r  r
   r  r   r   r   r   r    s*   


r  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 )NrJ   BCr   ra   )	r   r   r   r   Zshould_storer'   Z
as_orderedr2   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   sF   t ddg}td}d}tjt|d | ||dd W 5 Q R X d S )Nr7  rF  r[   z:Wrong number of dimensions. values.ndim != ndim \[1 != 2\]r   rU   )r2   r   r   r   r   r}   )r   r%   rl   r   r   r   r   test_validate_ndimu  s
    r  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.   r[   r\   r]   )	r
   r   Zreindexr   r   r   r)   r`  r'   )r   r^   rO   r   r   r   test_block_shape~  s    r  c                 C   s   t jtddg}| |tt||jd}|jj	dks>t
| tkr|jdksTt
| |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.   r[   rU   )rM   uF)r&   rV   )r  ZarraysZPandasArrayr2   r   r   r6   rV   r&   kindr'   r   Zis_extensionZto_numpy)r   r8   r   r   r   r   test_make_block_no_pandas_array  s      
  r  )N)N)Dr   r   rB  rt   numpyr2   r   Zpandas._libs.internalsr   Zpandas.compatr   Zpandas.util._test_decoratorsutilZ_test_decoratorsrX   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
algorithmsrd  Zpandas.core.arraysr   r   r   Zpandas.core.internalsr   r   r   Zpandas.core.internals.blocksr   r   Zskip_array_manager_invalid_testZ
pytestmarkr  r   r!   r-   r9   rm   r   r   r    r   r   r   rW  rX  rk  r  r  r  r  r  r   r   r   r   <module>   sZ   ,

X


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