3
���h�� � @ s� d dl mZ d dlZd dlZd dlZd dlmZmZmZm Z m
Z
mZmZm
Z
mZ d dlZd dlZd dlmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZm Z d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d d l)m*Z* d d
l+m,Z, d dl-m.Z.m/Z/ d dl0m1Z1m2Z2 d dl3j4j5Z6d d
l7m8Z8 d dl9m:Z: d dl;m<Z< d dl=j4j>Z?d dl@mAZA d dlBmCZC d dlDmEZEmFZF d dlGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP d dlQmRZR e
ddd�ZSG dd� de<�ZTG dd� deT�ZUeeE eTd�dd�ZVeEeeE eTd�dd �ZWd?d!d"�ZXeEeeH d#�d$d%�ZYeeH d&�d'd(�ZZd@d)d*�Z[d+d,� Z\eeH e e d-�d.d/�Z]d0d1� Z^eeH ee_eeH d2�d3d4�Z`dAeeee
f e_e e eee_f d6�d7d8�Zaejbejbd9�d:d;�Zcede_d<�d=d>�ZedS )B� )�defaultdictN) �DefaultDict�Dict�List�Optional�Pattern�Sequence�Tuple�TypeVar�Union)� internals�lib)� ArrayLike�DtypeObj�Label�Scalar)�validate_bool_kwarg)�find_common_type�infer_dtype_from_scalar�
maybe_promote)�DT64NS_DTYPE�is_datetimelike_v_numeric�is_dtype_equal�is_extension_array_dtype�is_list_like�is_numeric_v_string_like� is_scalar)�
concat_compat)�ExtensionDtype)�ABCDataFrame� ABCSeries)�array_equivalent�isna)�ExtensionArray)�SparseDtype)�PandasObject)�
extract_array)�maybe_convert_indices)�Index�ensure_index) �Block�CategoricalBlock�DatetimeTZBlock�ExtensionBlock�ObjectValuesExtensionBlock�_extend_blocks�
_safe_reshape�get_block_type�
make_block)�operate_blockwise�T�BlockManager)Zboundc @ s� e Zd ZU dZddddddgZejejd�e e
e e ed �d
d�Z
eee
ee d�d
d��Zedd� �Zedd� �Zd�eed�dd�Zed�dd�ZeZeeedf d�dd��Zeed�dd��Zeedd�d d!�Zeed�d"d#��Zdd�d$d%�Zeed�d&d'��Zd(d)� Z d*d+� Z!d,d-� Z"dd�d.d/�Z#ed�d0d1�Z$e%d�d2d3�Z&dd�d4d5�Z'd6d7� Z(d d d8�d9d:�Z)d�eed�d;d<�Z*d�eeed d@�dAdB�Z+d d�dCdD�Z,ee%eed dE�dFdG�Z-d d�dHdI�Z.d�eedJ�dKdL�Z/eed dM�dNdO�Z0d d�dPdQ�Z1eed dR�dSdT�Z2ed dU�dVdW�Z3d d�dXdY�Z4d�ee%d d[�d\d]�Z5d�eeeeed d^�d_d`�Z6d d�dadb�Z7d�eed dc�ddde�Z8ed�dfdg�Z9dd�dhdi�Z:eed�djdk��Z;eed�dldm��Z<eed�dndo��Z=eed�dpdq��Z>d�ed dr�dsdt�Z?d�ed dr�dudv�Z@d�ee
ed dw�dxdy�ZAd�eBed dz�d{d|�ZCeed�d}d~��ZDd�eed�dd��ZEd>dd>eFjGfeeejd��d�d��ZHdeFjGfejd�d�d��ZId�ed��d�d��ZJeeKd��d�d��ZLd d�d�d��ZMdd�d�d��ZNed�d��d�d��ZOeeKd��d�d��ZPd�d�� ZQeReeBejf d��d�d��ZSd�eeTed��d�d��ZUd�eed��d�d��ZVd�eeeeeed��d�d��ZWeFjGd>fed��d�d��ZXd�d�d��ZYd�eeed��d�d��ZZd ed8�d�d��Z[d d�d�d��Z\dS )�r5 a�
Core internal data structure to implement DataFrame, Series, etc.
Manage a bunch of labeled 2D mixed-type ndarrays. Essentially it's a
lightweight blocked set of labeled data to be manipulated by the DataFrame
public API class
Attributes
----------
shape
ndim
axes
values
items
Methods
-------
set_axis(axis, new_labels)
copy(deep=True)
get_dtypes
apply(func, axes, block_filter_fn)
get_bool_data
get_numeric_data
get_slice(slice_like, axis)
get(label)
iget(loc)
take(indexer, axis)
reindex_axis(new_labels, axis)
reindex_indexer(new_labels, indexer, axis)
delete(label)
insert(loc, label, value)
set(label, value)
Parameters
----------
blocks: Sequence of Block
axes: Sequence of Index
do_integrity_check: bool, default True
Notes
-----
This is *not* a public API class
�axes�blocks�_known_consolidated�_is_consolidated�_blknos�_blklocsT)r7 r6 �do_integrity_checkc C sp dd� |D �| _ t|�| _x2|D ]*}| j|jkr td|j� d| j� d���q W |rZ| j� d| _d | _d | _d S )Nc S s g | ]}t |��qS � )r) )�.0�axr= r= �@/tmp/pip-build-5_djhm0z/pandas/pandas/core/internals/managers.py�
<listcomp>� s z)BlockManager.__init__.<locals>.<listcomp>zNumber of Block dimensions (z) must equal number of axes (�)F) r6 �tupler7 �ndim�AssertionError�_verify_integrityr8 r: r; )�selfr7 r6 r< |