o
    ҷh                     @  s  U d dl mZ d dlZd dlmZ d dlmZ d dlm	Z	m
Z
 G dd de
ZG dd	 d	e	Zd
ZeG dd deZeG dd deZeG dd deZeG dd deZeG dd deZeG dd deZeG dd deZeG dd deZeeje eeje eeje eeje eeje eeje eeje eeje iZde d< dS )    )annotationsN)register_extension_dtype)is_integer_dtype)NumericArrayNumericDtypec                   @  sJ   e Zd ZdZeejZeZ	e
dddZe
dddZe
dddZdS )IntegerDtypea'  
    An ExtensionDtype to hold a single size & kind of integer dtype.

    These specific implementations are subclasses of the non-public
    IntegerDtype. For example, we have Int8Dtype to represent signed int 8s.

    The attributes name & type are set when these subclasses are created.
    returntype[IntegerArray]c                 C     t S )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )IntegerArraycls r   M/var/www/html/venv/lib/python3.10/site-packages/pandas/core/arrays/integer.pyconstruct_array_type   s   	z!IntegerDtype.construct_array_typedict[np.dtype, IntegerDtype]c                 C  r
   )N)NUMPY_INT_TO_DTYPEr   r   r   r   _get_dtype_mapping&   s   zIntegerDtype._get_dtype_mappingvalues
np.ndarraydtypenp.dtypecopyboolc              
   C  st   z	|j |d|dW S  ty9 } z$|j ||d}||k r&|W  Y d}~S td|j dt| |d}~ww )z
        Safely cast the values to the given dtype.

        "safe" in this context means the casting is lossless. e.g. if 'values'
        has a floating dtype, each value must be an integer.
        safe)castingr   )r   Nz"cannot safely cast non-equivalent z to )astype	TypeErrorallr   np)r   r   r   r   errcastedr   r   r   
_safe_cast*   s   zIntegerDtype._safe_castN)r   r	   )r   r   )r   r   r   r   r   r   r   r   )__name__
__module____qualname____doc__r   r   int64_default_np_dtyper   _checkerclassmethodr   r   r"   r   r   r   r   r      s    	
r   c                   @  s    e Zd ZdZeZdZdZdZdS )r   a  
    Array of integer (optional missing) values.

    Uses :attr:`pandas.NA` as the missing value.

    .. warning::

       IntegerArray is currently experimental, and its API or internal
       implementation may change without warning.

    We represent an IntegerArray with 2 numpy arrays:

    - data: contains a numpy integer array of the appropriate dtype
    - mask: a boolean array holding a mask on the data, True is missing

    To construct an IntegerArray from generic array-like input, use
    :func:`pandas.array` with one of the integer dtypes (see examples).

    See :ref:`integer_na` for more.

    Parameters
    ----------
    values : numpy.ndarray
        A 1-d integer-dtype array.
    mask : numpy.ndarray
        A 1-d boolean-dtype array indicating missing values.
    copy : bool, default False
        Whether to copy the `values` and `mask`.

    Attributes
    ----------
    None

    Methods
    -------
    None

    Returns
    -------
    IntegerArray

    Examples
    --------
    Create an IntegerArray with :func:`pandas.array`.

    >>> int_array = pd.array([1, None, 3], dtype=pd.Int32Dtype())
    >>> int_array
    <IntegerArray>
    [1, <NA>, 3]
    Length: 3, dtype: Int32

    String aliases for the dtypes are also available. They are capitalized.

    >>> pd.array([1, None, 3], dtype='Int32')
    <IntegerArray>
    [1, <NA>, 3]
    Length: 3, dtype: Int32

    >>> pd.array([1, None, 3], dtype='UInt16')
    <IntegerArray>
    [1, <NA>, 3]
    Length: 3, dtype: UInt16
       r   N)	r#   r$   r%   r&   r   
_dtype_cls_internal_fill_value_truthy_value_falsey_valuer   r   r   r   r   >   s    @r   a  
An ExtensionDtype for {dtype} integer data.

Uses :attr:`pandas.NA` as its missing value, rather than :attr:`numpy.nan`.

Attributes
----------
None

Methods
-------
None

Examples
--------
For Int8Dtype:

>>> ser = pd.Series([2, pd.NA], dtype=pd.Int8Dtype())
>>> ser.dtype
Int8Dtype()

For Int16Dtype:

>>> ser = pd.Series([2, pd.NA], dtype=pd.Int16Dtype())
>>> ser.dtype
Int16Dtype()

For Int32Dtype:

>>> ser = pd.Series([2, pd.NA], dtype=pd.Int32Dtype())
>>> ser.dtype
Int32Dtype()

For Int64Dtype:

>>> ser = pd.Series([2, pd.NA], dtype=pd.Int64Dtype())
>>> ser.dtype
Int64Dtype()

For UInt8Dtype:

>>> ser = pd.Series([2, pd.NA], dtype=pd.UInt8Dtype())
>>> ser.dtype
UInt8Dtype()

For UInt16Dtype:

>>> ser = pd.Series([2, pd.NA], dtype=pd.UInt16Dtype())
>>> ser.dtype
UInt16Dtype()

For UInt32Dtype:

>>> ser = pd.Series([2, pd.NA], dtype=pd.UInt32Dtype())
>>> ser.dtype
UInt32Dtype()

For UInt64Dtype:

>>> ser = pd.Series([2, pd.NA], dtype=pd.UInt64Dtype())
>>> ser.dtype
UInt64Dtype()
c                   @  "   e Zd ZejZdZejddZ	dS )	Int8DtypeInt8int8r   N)
r#   r$   r%   r   r3   typename_dtype_docstringformatr&   r   r   r   r   r1          r1   c                   @  r0   )
Int16DtypeInt16int16r4   N)
r#   r$   r%   r   r<   r5   r6   r7   r8   r&   r   r   r   r   r:      r9   r:   c                   @  r0   )
Int32DtypeInt32int32r4   N)
r#   r$   r%   r   r?   r5   r6   r7   r8   r&   r   r   r   r   r=      r9   r=   c                   @  r0   )
Int64DtypeInt64r'   r4   N)
r#   r$   r%   r   r'   r5   r6   r7   r8   r&   r   r   r   r   r@      r9   r@   c                   @  r0   )
UInt8DtypeUInt8uint8r4   N)
r#   r$   r%   r   rD   r5   r6   r7   r8   r&   r   r   r   r   rB      r9   rB   c                   @  r0   )UInt16DtypeUInt16uint16r4   N)
r#   r$   r%   r   rG   r5   r6   r7   r8   r&   r   r   r   r   rE      r9   rE   c                   @  r0   )UInt32DtypeUInt32uint32r4   N)
r#   r$   r%   r   rJ   r5   r6   r7   r8   r&   r   r   r   r   rH      r9   rH   c                   @  r0   )UInt64DtypeUInt64uint64r4   N)
r#   r$   r%   r   rM   r5   r6   r7   r8   r&   r   r   r   r   rK      r9   rK   r   r   )!
__future__r   numpyr   pandas.core.dtypes.baser   pandas.core.dtypes.commonr   pandas.core.arrays.numericr   r   r   r   r7   r1   r:   r=   r@   rB   rE   rH   rK   r   r3   r<   r?   r'   rD   rG   rJ   rM   r   __annotations__r   r   r   r   <module>   sB    0LC