HOME


sh-3ll 1.0
DIR:/usr/local/lib64/python3.6/site-packages/pandas/core/internals/__pycache__/
Upload File :
Current File : //usr/local/lib64/python3.6/site-packages/pandas/core/internals/__pycache__/concat.cpython-36.pyc
3

���h5O�@s6ddlmZddlZddlmZddlZddlmZm	Z
ddlmZddl
mZddlmZmZmZmZmZmZmZmZmZddlmZdd	lmZddljjZ dd
l!m"Z"m#Z#ddl$m%Z%ddl&m'Z'e(e)e'd
�dd�Z*dd�Z+Gdd�d�Z,dd�Z-dd�Z.ee,e)d�dd�Z/e)d�dd�Z0dd�Z1d d!�Z2dS)"�)�defaultdictN)�List)�NaT�	internals)�cache_readonly)�
maybe_promote)	�
_get_dtype�is_categorical_dtype�is_datetime64_dtype�is_datetime64tz_dtype�is_extension_array_dtype�is_float_dtype�is_numeric_dtype�	is_sparse�is_timedelta64_dtype)�
concat_compat)�isna)�
DatetimeArray�ExtensionArray)�
make_block)�BlockManager)�concat_axis�copy�returnc
Csdd�|D�}t||�}g}x�|D]�\}}t|�dkrx|djrx|dj}	|	j}
|r`|
j�}
n|
j�}
|	j|
|d�}	n�t|�r�|dj}dd�|D�}|j	s�t
||jdd�}
n"t
|�}
t|
t
�s�|
jdt|
��}
t|
||jd�}	ntt|||d	�|d�}	|j|	�q"Wt||�S)
z�
    Concatenate block managers into one.

    Parameters
    ----------
    mgrs_indexers : list of (BlockManager, {axis: indexer,...}) tuples
    axes : list of Index
    concat_axis : int
    copy : bool

    Returns
    -------
    BlockManager
    cSsg|]\}}t||��qS�)�_get_mgr_concatenation_plan)�.0�mgr�indexersrr�>/tmp/pip-build-5_djhm0z/pandas/pandas/core/internals/concat.py�
<listcomp>1sz.concatenate_block_managers.<locals>.<listcomp>�r)�	placementcSsg|]}|jj�qSr)�block�values)r�jurrrr Bs)�axis)r"�ndim)r)�_combine_concat_plans�lenrr#r$r�viewZmake_block_same_class�_is_uniform_join_units�is_extensionrr'�
isinstancerZreshaper�_concatenate_join_units�appendr)
Z
mgrs_indexersZaxesrrZconcat_plansZconcat_plan�blocksr"�
join_units�br$�blk�valsrrr�concatenate_block_managerss2




r5cCs�t|j�}x |j�D]\}}t|�||<qWt|�}d|krl|jd�}tj|j|dd�}tj|j	|dd�}n4|j
r�|jd}|jt
|||�fgSd}|j}|j	}g}	x�tj|dd�D]�\}
}|js�t�|j�}t|�}
t|�|
d<t|
�}
|
d	k�rt
d|
�}n�|j|
}||j}t|�t|j�k�o\|dk�rL|jj�rL|jjjdk�p\tj|�dkj�}|�rr|jdd�n||d<t
||
|�}|	j||f�q�W|	S)
z�
    Construct concatenation plan for given block manager and indexers.

    Parameters
    ----------
    mgr : BlockManager
    indexers : dict of {axis: indexer}

    Returns
    -------
    plan : list of (BlockPlacement, JoinUnit) tuples

    rr!)�
fill_valueNF)�group���r8r8)�list�shape�itemsr)�tuple�pop�algosZtake_1d�blknos�blklocsZ_is_single_blockr0Zmgr_locs�JoinUnit�libinternalsZget_blkno_placementsZ
is_slice_like�AssertionErrorr�indexer�as_slice�step�npZdiff�allr/)rrZ	mgr_shape�axrDZax0_indexerr?r@r3�planZblkno�
placementsZjoin_unit_indexersr:�unitZax0_blk_indexerZunit_no_ax0_reindexingrrrrWsH








rc@sPeZdZddd�Zed�dd�Zedd��Zed	d
��Zedd��Z	d
d�Z
dS)rANcCs"|dkri}||_||_||_dS)N)r#rr:)�selfr#r:rrrr�__init__�s
zJoinUnit.__init__)rcCs$t|�j�dt|j��d|j�d�S)N�(z, �))�type�__name__�reprr#r)rMrrr�__repr__�szJoinUnit.__repr__cCs(x"|jj�D]}|dkj�rdSqWdS)Nr!TFr8)rr$�any)rMrDrrr�
needs_filling�szJoinUnit.needs_fillingcCs>|jdkrtd��|js |jjStt|jj|jj�d�SdS)NzBlock is None, no dtyper)r#rCrV�dtyperrr6)rMrrrrW�s

zJoinUnit.dtypecCs�|jdkrdS|jjsdS|jj}|jjr2|j}n,t|jjj�rDdS|jjrR|}n|jdd�}|j	d}t
|dd�}x0td||�D] }t||||��j
�s�dSq�WdS)NTF�K)�orderr�(i�)r#Z_can_hold_nar$�is_categorical�
categoriesrrWr,�ravelr:�max�rangerrH)rMr$Zvalues_flatZ	total_lenZ	chunk_len�irrr�is_na�s$

zJoinUnit.is_nacCs�|dkr|jj}|jj�}�n�|}|j�r@t|jdd�r`|jjjdd�}t|�r`|ddkr`d}t|jdd�svt|�r�|jdkr�|j	�}|t
j|jd|j
�|d�Sn�t|jd	d�r�n�t|jd
d�r�nzt|��r"|j	�jg|d�}|j\}}|dks�t|��dt
j|ft
jd�}	|j|	d|d�St
j|j|d�}|j|�|S|j�r^|jj�r^|jjS|jj�r�|jj�r�|jjt
j�j}n|jj�r�|jj}n|jj}|j�s�|j�}n,x*|jj�D]\}
}tj |||
|d
�}�q�W|S)NZ	is_objectFrX)rYrZ
is_datetimetzr!)rWr[r,T)Z
allow_fillr6)r&r6r8)!r#r6Z
get_valuesra�getattrr$r]r)rZconstruct_array_typerG�fullr:�valuerZ_from_sequencerCZonesZintpZtake�empty�fillrZ_can_consolidateZis_boolr[Zastype�object_r,r*r;r>Ztake_nd)rM�empty_dtype�upcasted_nar6r$�arrayZmissing_arrZncolsZnrowsZ	empty_arrrIrDrrr�get_reindexed_values�sT







zJoinUnit.get_reindexed_values)N)rR�
__module__�__qualname__rN�strrTrrVrWrarkrrrrrA�s
	
rAcs�|dkrt|�dkrtd��t|�\����fdd�|D�}t|�dkr~|d}|r�t|tj�rt|jdk	r||j�}q�|j�}ndtdd�|D��r�d	d�|D�}t	|dd
�}t|t
�s�t|t�r�|jdkr�tj
|�}nt	||d
�}|S)zI
    Concatenate values from several join units along selected axis.
    rr!z$Concatenating join units along axis0csg|]}|j��d��qS))rhri)rk)rr%)rhrirrr =sz+_concatenate_join_units.<locals>.<listcomp>Ncss|]}t|t�VqdS)N)r-r)r�trrr�	<genexpr>Lsz*_concatenate_join_units.<locals>.<genexpr>cSs*g|]"}t|t�r|n|ddd�f�qS)rN)r-r)rrorrrr Os)r&)r)rC�_get_empty_dtype_and_nar-rGZndarray�baserrUrrr�tzZ
atleast_2d)r1rrZ	to_concatZ
concat_valuesr)rhrirr.2s(


r.cCs>t|�dkr0|dj}|dkr0tjtj�tjfSt|�rX|djj}|djj}||fSd}dgt|�}x.t|�D]"\}}|jdkr�d}qt|j||<qtWt	t
�}t	t
�}	x�t||�D]�\}
}|
dkr�q�t|
�r�d}n�t
|
�r�d}n�t|
�r�d}n�t|
jtj��rd	}njt|
jtj��rd
}nTt|
��r.d}nDt|
��r>d}n4t|
��rR|
jj}n t|
��sft|
��rn|
j}nd
}|j�r�|	|j|
�q�||j|
�q�W|�s�|	}d|k�r�t|�dk�r�|dd}||jfStjd
�tjfS�nFd
|k�rtjtj�tjfSd	|k�r:|�r&tjtj�tjfStjtj�dfS�n�d|k�rVtjtj�tjfSd|k�rt|d}
|
dtfSd|k�r�tjd�tjdd�fSd|k�r�tjd�tjdd�fSytj |g�}
Wn$t!k
�r�tjtj�tjfSXt|
��r|
|
jtj�fSt|
��r.|�r&tjtj�tjfS|
dfSd}t"|��dS)z�
    Return dtype and N/A values to use when concatenating specified units.

    Returned N/A value may be None which means there was no casting involved.

    Returns
    -------
    dtype
    na
    r!rNFT�categoryZ
datetimetz�	extension�bool�object�datetime�	timedelta�floatzM8[ns]r�nszm8[ns]z/invalid dtype determination in get_concat_dtype)#r)r#rGrWZfloat64�nan�_is_uniform_reindexr6�	enumeraterr9�zipr	rr�
issubclassrQZbool_rgr
rr�subtype�namer
rrar/Zna_valuerZ
datetime64Ztimedelta64Zfind_common_type�	TypeErrorrC)r1r3rhriZhas_none_blocksZdtypesr`rLZupcast_classesZnull_upcast_classesrWZ
upcast_cls�cls�g�msgrrrrq_s�















rq)r1rcsFt�fdd��D��oDtdd��D��oDtdd��D��oDt��dkS)z�
    Check if the join units consist of blocks of uniform type that can
    be concatenated using Block.concat_same_type instead of the generic
    _concatenate_join_units (which uses `concat_compat`).

    c3s&|]}t|j�t�dj�kVqdS)rN)rQr#)rr%)r1rrrp�sz)_is_uniform_join_units.<locals>.<genexpr>css|]}|jp|jjVqdS)N)rar#r,)rr%rrrrp�scss|]}|jVqdS)N)r)rr%rrrrp�sr!)rHr))r1r)r1rr+�sr+)rcCs(tdd�|D��o&tdd�|D��dkS)Ncss|]}|jo|jjVqdS)N)r#r,)rr%rrrrp�sz&_is_uniform_reindex.<locals>.<genexpr>cSsh|]}|jjj�qSr)r#rWr�)rr%rrr�	<setcomp>�sz&_is_uniform_reindex.<locals>.<setcomp>r!)rHr))r1rrrr}�sr}cCs�d|jkrF|j}|jdkr d}q�|jjt|d��}|jjt|��|_n>|j}tj|j�}|d|d�|d<|jdd|�|jd<|jd|f|jdd�}|f|jdd�|_t|||d�S)z�
    Reduce join_unit's shape along item axis to length.

    Extra items that didn't fit are returned as a separate block.
    rNr!)r#rr:)rr#Z
getitem_block�slicerr:rA)Z	join_unit�lengthZextra_indexersZextra_blockZextra_shaperrr�_trim_join_unit�s

r�c#s�t|�dkr6x$|dD]}|d|dgfVqW�n�|dkr�d}xL|D]D}d}x&|D]\}}|j|�|gfV|}qVW|dk	rH||jj7}qHW�n2dg��fdd�}ttt|��}tt||��}	�x�dt|	�k�rĈddkr�td��t|	�\}
}ttt|
��}t	|�t
|�}
}|
|k�rD|
d|fVt||�|	dd�<q�d}dgt|	�}x`t|	�D]T\}\}}|||<t|�|
k�r�||
d�t||
�f|	|<n|}|||�|	|<�q`W||fVq�WdS)z`
    Combine multiple concatenation plans into one.

    existing_plan is updated in-place.
    r!rNcs&t|d�}|dkr"�dd7<|S)Nrr!)�next)�seq�retval)�	num_endedrr�
_next_or_none&s
z,_combine_concat_plans.<locals>._next_or_nonezPlan shapes are not aligned)
r)�addrE�stopr9�map�iter�
ValueErrorr�minr^r~r�)Zplansr�p�offsetrJZlast_plcZplcrLr�Z
next_itemsrKZunits�lengthsZmin_len�max_lenZyielded_placementZ
yielded_unitsr`r)r�rr(
sD

r()3�collectionsrrZtypingrZnumpyrGZpandas._libsrrrBZpandas.util._decoratorsrZpandas.core.dtypes.castrZpandas.core.dtypes.commonrr	r
rrr
rrrZpandas.core.dtypes.concatrZpandas.core.dtypes.missingrZpandas.core.algorithms�coreZ
algorithmsr>Zpandas.core.arraysrrZpandas.core.internals.blocksrZpandas.core.internals.managersr�intrvr5rrAr.rqr+r}r�r(rrrr�<module>s0,6V-r