3
���h� � - @ s� U d Z ddlZddlmZ ddlmZmZmZmZm Z ddl
mZmZm
Z
ddlZddlmZmZmZmZmZ ddlmZmZmZ ddlmZ dd lmZmZm Z dd
l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB ddlCmDZDmEZE dd
lFmGZGmHZH ddlImJZJ e�rpddlKmLZL i ZMeeNeNf Mdxee eejOef d�dd�ZPeeeed�dd�ZQdd� ZRejSejTejUejVejWd�ZXdd� ZYdd� ZZdd� Z[eNd�d d!�Z\d"d#� Z]e]Z^eeejOd$�d%d&�Z_dze`eejOejOf d(�d)d*�Zaeed+�ed,�ed-�d.�d|ebee` ee` eejOe ejOe>f f d0�d1d2��Zcd}ebebebebd4d5�d6d7�Zdebd8�d9d:�Zed~ejOd�d<d=�Zfdebd4d>�d?d@�Zgd�e`eNeNebebdC�dDdE�Zhd�dFdG�Zid�dIdJ�ZjG dKdL� dL�ZkG dMdN� dNek�ZlG dOdP� dPek�Zmd�dQdR�ZndSdT� ZodUdV� Zpe`dW�dXdY�Zqd�ejrd�ejsd�ejtd�ejud�ejvd�ejwd�ejxd�ejyd�ejzd�ej{d�ej|d�ej}d�ej~d�ejd�ej�d�ej�d�ej�d�enej�ej�ej��d�enej�ej�d�d�enej}ej�ej�ej��iZ�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�enej�ej�ej��d�enej�ej�d�d�enej�ej�ej�ej�dc�iZ�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�enej�ej�ej��d�enej�ej�d�d�enej�ej�ej�ej�dc�iZ�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�enej�ej�ej��d�enej�ej�d�d�enej�ej�ej�ej�dc�iZ�d�e`e`dd�dedf�Z�d�e`ebdg�dhdi�Z�ddej�d3fe`ebdg�djdk�Z�e�Z�ej�fdldm�Z�d�dodp�Z�d]d_d\d[d^dZhZ�d�e`e`dr�dsdt�Z�d�e`ebebe ejOeejOejOf f du�dvdw�Z�dS )�zl
Generic data algorithms. This module is experimental at the moment and not
intended for public consumption
� N)�dedent)�
TYPE_CHECKING�Dict�Optional�Tuple�Union)�catch_warnings�simplefilter�warn)� Timestamp�algos� hashtable�iNaT�lib)�AnyArrayLike� ArrayLike�DtypeObj)�doc)�'construct_1d_object_array_from_listlike�infer_dtype_from_array�
maybe_promote)�ensure_float64�ensure_int64�
ensure_object�ensure_platform_int�
ensure_uint64�
is_array_like�
is_bool_dtype�is_categorical_dtype�is_complex_dtype�is_datetime64_dtype�is_datetime64_ns_dtype�is_extension_array_dtype�is_float_dtype�
is_integer�is_integer_dtype�is_list_like�is_numeric_dtype�is_object_dtype�is_period_dtype� is_scalar�is_signed_integer_dtype�is_timedelta64_dtype�is_unsigned_integer_dtype�needs_i8_conversion�pandas_dtype)�ABCDatetimeArray�ABCExtensionArray�ABCIndex�
ABCIndexClass�
ABCMultiIndex� ABCSeries�ABCTimedeltaArray)�isna�na_value_for_dtype)�array�
extract_array)�validate_indices)�Series)�dtype�returnc C s� t | t�st| dd�} t|�r6ttj| ��tjd�fS t| �r^|dkr^ttj| ��tjd�fS y�t| �spt|�r�tj| �j d�tjd�fS t
| �s�t
|�r�t| �tjd�fS t| �s�t|�r�t
| �tjd�fS t| �s�t|�r�t| �tjd�fS t| ��st|��r8t� � td tj� t| �} W dQ R X | tjd�fS W n* tttfk
�rd t| �tjd�fS X t| d
d�}t|��s�t|��r8t|��s�t|��r�ddlm} || �} | j}nxt|��s�t|��r�dd
lm} || �} | j}nH| jdk�rt|��r| j d�}| j}||fS ddlm!} || �} | j}| j"|fS t#|��rtt#|��sV|dk�rt| j$} t%d�}t| �} | |fS tj| t&d�} t| �tjd�fS )a
routine to ensure that our data is of the correct
input dtype for lower-level routines
This will coerce:
- ints -> int64
- uint -> uint64
- bool -> uint64 (TODO this should be uint8)
- datetimelike -> i8
- datetime64tz -> i8 (in local tz)
- categorical -> codes
Parameters
----------
values : array-like
dtype : pandas_dtype, optional
coerce to this dtype
Returns
-------
values : ndarray
pandas_dtype : np.dtype or ExtensionDtype
T)�
extract_numpy�objectN�uint64�bool�int64�float64�ignorer= r )�PeriodIndex)�TimedeltaIndex� �i8)�
DatetimeIndex�category)r= )'�
isinstancer4 r: r( r �np�asarrayr= r �astyper+ r r- r r# r r r r ZComplexWarning� TypeError�
ValueError�
OverflowError�getattrr. r) �pandasrF r, rG �ndimr! �viewrJ �asi8r �codesr/ r@ )�valuesr= Z
vals_dtyperF rG rW rJ � rZ �8/tmp/pip-build-5_djhm0z/pandas/pandas/core/algorithms.py�_ensure_dataG s`
r\ )rY r= �originalr> |