Ë
    *�£jLM  ã            
      ó  — U d dl mZ d dlZd dlZd dlmZmZ d dlZd dlZ	d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZd d	lmZmZmZmZmZ d d
lmZmZ ej@                  e	jB                  e	jD                  e	jF                  e	jH                  dœejJ                  e	jL                  e	jN                  e	jP                  e	jR                  dœejT                  e	jV                  e	jX                  dœejZ                  e.e.dœiZ/de0d<    ed«      dd d„«       Z1dd!d„Z2d"d„Z3d#d„Z4d$d„Z5d#d„Z6d%d„Z7d&d„Z8d dœ	 	 	 	 	 	 	 	 	 d'd„Z9e	 d(	 	 	 	 	 	 	 	 	 d)d„«       Z:e	 d(	 	 	 	 	 	 	 	 	 d*d„«       Z:e	 d(	 	 	 	 	 	 	 	 	 d+d„«       Z:	 d	 	 	 	 	 	 	 	 	 d+d„Z:y),é    )ÚannotationsN)ÚAnyÚoverload)Úusing_string_dtype)Úimport_optional_dependency)ÚPandas4Warning)Ú
set_module)Úfind_stack_level)ÚBufferÚColumnÚColumnNullTypeÚ	DataFrameÚ	DtypeKind)ÚArrowCTypesÚ
Endianness)é   é   é    é@   )r   r   )é   r   zdict[DtypeKind, dict[int, Any]]Ú
_NP_DTYPESzpandas.api.interchangec                ó  — t        | t        j                  «      r| S t        | d«      r1	 t	        dd¬«      }	 |j                  | «      j                  | ¬«      S t        | d	«      st        d
«      ‚t        j                  dt        t        «       ¬«       t!        | j#                  |¬«      |¬«      S # |j                  $ r}t        |«      |‚d}~ww xY w# t        $ r' t        j                  dt        t        «       ¬«       Y Œªw xY w)aÑ  
    Build a ``pd.DataFrame`` from any DataFrame supporting the interchange protocol.

    .. note::

       For new development, we highly recommend using the Arrow C Data Interface
       alongside the Arrow PyCapsule Interface instead of the interchange protocol.
       From pandas 3.0 onwards, `from_dataframe` uses the PyCapsule Interface,
       only falling back to the interchange protocol if that fails.

       From pandas 4.0 onwards, that fallback will no longer be available and only
       the PyCapsule Interface will be used.

    .. warning::

        Due to severe implementation issues, we recommend only considering using the
        interchange protocol in the following cases:

        - converting to pandas: for pandas >= 2.0.3
        - converting from pandas: for pandas >= 3.0.0

    Parameters
    ----------
    df : DataFrameXchg
        Object supporting the interchange protocol, i.e. `__dataframe__` method.
    allow_copy : bool, default: True
        Whether to allow copying the memory to perform the conversion
        (if false then zero-copy approach is requested).

    Returns
    -------
    pd.DataFrame
        A pandas DataFrame built from the provided interchange
        protocol object.

    See Also
    --------
    pd.DataFrame : DataFrame class which can be created from various input data
        formats, including objects that support the interchange protocol.

    Examples
    --------
    >>> df_not_necessarily_pandas = pd.DataFrame({"A": [1, 2], "B": [3, 4]})
    >>> interchange_object = df_not_necessarily_pandas.__dataframe__()
    >>> interchange_object.column_names()
    Index(['A', 'B'], dtype='str')
    >>> df_pandas = pd.api.interchange.from_dataframe(
    ...     interchange_object.select_columns_by_name(["A"])
    ... )
    >>> df_pandas
         A
    0    1
    1    2

    These methods (``column_names``, ``select_columns_by_name``) should work
    for any dataframe library which implements the interchange protocol.
    Ú__arrow_c_stream__Úpyarrowz14.0.0)Úmin_version)Úzero_copy_onlyNzºConversion using Arrow PyCapsule Interface failed due to missing PyArrow>=14 dependency, falling back to (deprecated) interchange protocol. We recommend that you install PyArrow>=14.0.0.)Ú
stacklevelÚ__dataframe__z#`df` does not support __dataframe__a  The Dataframe Interchange Protocol is deprecated.
For dataframe-agnostic code, you may want to look into:
- Arrow PyCapsule Interface: https://arrow.apache.org/docs/format/CDataInterface/PyCapsuleInterface.html
- Narwhals: https://github.com/narwhals-dev/narwhals
)Ú
allow_copy)Ú
isinstanceÚpdr   Úhasattrr   ÚtableÚ	to_pandasÚArrowInvalidÚRuntimeErrorÚImportErrorÚwarningsÚwarnÚUserWarningr
   Ú
ValueErrorr   Ú_from_dataframer   )Údfr   ÚpaÚes       úHC:\FundamentalWorkbench\vendor\pandas\core\interchange\from_dataframe.pyÚfrom_dataframer1   )   sü   € ôv �"”b—l‘lÔ#Øˆ	äˆrÐ'Ô(ð	-Ü+¨IÀ8ÔLˆBð-Ø—x‘x “|×-Ñ-À¸^Ð-ÓLÐLô �2�Ô'ÜÐ>Ó?Ð?ä‡M�Mð	Aô 	Ü#Ó%õô Ø
×Ñ JÐÓ/¸Jôð øð —?‘?ò -Ü" 1“o¨1Ð,ûð-ûô ò 		ä�M‰Mð#ô Ü+Ó-÷ð		ús(   ªC ¸!B2 Â2CÃCÃCÃ-DÄDc                ób  — g }| j                  «       D ]  }t        |«      }|j                  |«       Œ  |st        |«      dkD  rt	        d«      ‚|st        | «      }n-t        |«      dk(  r|d   }nt        j                  |ddd¬«      }| j                  j                  dd«      }|�||_	        |S )	až  
    Build a ``pd.DataFrame`` from the DataFrame interchange object.

    Parameters
    ----------
    df : DataFrameXchg
        Object supporting the interchange protocol, i.e. `__dataframe__` method.
    allow_copy : bool, default: True
        Whether to allow copying the memory to perform the conversion
        (if false then zero-copy approach is requested).

    Returns
    -------
    pd.DataFrame
    r   zHTo join chunks a copy is required which is forbidden by allow_copy=Falser   TF)ÚaxisÚignore_indexÚcopyzpandas.indexN)
Ú
get_chunksÚprotocol_df_chunk_to_pandasÚappendÚlenr&   r!   ÚconcatÚmetadataÚgetÚindex)r-   r   Ú
pandas_dfsÚchunkÚ	pandas_dfÚ	index_objs         r0   r,   r,   ‹   s°   € ð  €JØ—‘–ˆÜ/°Ó6ˆ	Ø×Ñ˜)Õ$ð !ñ œ#˜j›/¨AÒ-ÜØVó
ð 	
ñ Ü/°Ó3‰	Ü	ˆZ‹˜AÒ	Ø˜q‘M‰	ä—I‘I˜j¨q¸tÈ%ÔPˆ	à—‘—‘ °Ó5€IØÐØ#ˆ	ŒàÐó    c                óê  — i }g }| j                  «       D �]6  }t        |t        «      st        d|› d�«      ‚||v rt        d|› d�«      ‚| j	                  |«      }|j
                  d   }|t        j                  t        j                  t        j                  t        j                  fv rt        |«      \  ||<   }n~|t        j                  k(  rt        |«      \  ||<   }nY|t        j                  k(  rt        |«      \  ||<   }n4|t        j                   k(  rt#        |«      \  ||<   }nt%        d|› d�«      ‚|j'                  |«       �Œ9 t)        j*                  |«      }||j,                  d<   |S )z¡
    Convert interchange protocol chunk to ``pd.DataFrame``.

    Parameters
    ----------
    df : DataFrameXchg

    Returns
    -------
    pd.DataFrame
    zColumn z is not a stringz is not uniquer   z
Data type z not handled yetÚ_INTERCHANGE_PROTOCOL_BUFFERS)Úcolumn_namesr    Ústrr+   Úget_column_by_nameÚdtyper   ÚINTÚUINTÚFLOATÚBOOLÚprimitive_column_to_ndarrayÚCATEGORICALÚcategorical_column_to_seriesÚSTRINGÚstring_column_to_ndarrayÚDATETIMEÚdatetime_column_to_ndarrayÚNotImplementedErrorr8   r!   r   Úattrs)r-   ÚcolumnsÚbuffersÚnameÚcolrH   Úbufr@   s           r0   r7   r7   ²   s]  € ð !€GØ€GØ—‘×!ˆÜ˜$¤Ô$Ü˜w t fÐ,<Ð=Ó>Ð>Ø�7‰?Ü˜w t f¨NÐ;Ó<Ð<Ø×#Ñ# DÓ)ˆØ—	‘	˜!‘ˆØÜ�M‰MÜ�N‰NÜ�O‰OÜ�N‰Nð	
ñ 
ô "=¸SÓ!AÑˆG�D‰M™3Ø”i×+Ñ+Ò+Ü!=¸cÓ!BÑˆG�D‰M™3Ø”i×&Ñ&Ò&Ü!9¸#Ó!>ÑˆG�D‰M™3Ø”i×(Ñ(Ò(Ü!;¸CÓ!@ÑˆG�D‰M™3ä%¨
°5°'Ð9IÐ&JÓKÐKà�‰�sÖð/ "ô2 —‘˜WÓ%€IØ7>€I‡O�OÐ3Ñ4ØÐrB   c                ó¨   — | j                  «       }|d   \  }}t        ||| j                  | j                  «       ¬«      }t	        || |d   «      }||fS )aJ  
    Convert a column holding one of the primitive dtypes to a NumPy array.

    A primitive type is one of: int, uint, float, bool.

    Parameters
    ----------
    col : Column

    Returns
    -------
    tuple
        Tuple of np.ndarray holding the data and the memory owner object
        that keeps the memory alive.
    Údata©ÚoffsetÚlengthÚvalidity)Úget_buffersÚbuffer_to_ndarrayr^   ÚsizeÚ	set_nulls)rY   rW   Ú	data_buffÚ
data_dtyper\   s        r0   rM   rM   Þ   sZ   € ð  �o‰oÓ€Gà# F™OÑ€IˆzÜØ�: c§j¡j¸¿¹»ô€Dô �T˜3 ¨
Ñ 3Ó4€DØ�ˆ=ÐrB   c                óü  — | j                   }|d   st        d«      ‚|d   }t        |d«      r t        j                  |j
                  «      }nt        d«      ‚| j                  «       }|d   \  }}t        ||| j                  | j                  «       ¬«      }t        |«      dkD  r||t        |«      z     }n|}t        j                  |||d	   ¬
«      }	t        j                  |	«      }
t        |
| |d   «      }
|
|fS )a  
    Convert a column holding categorical data to a pandas Series.

    Parameters
    ----------
    col : Column

    Returns
    -------
    tuple
        Tuple of pd.Series holding the data and the memory owner object
        that keeps the memory alive.
    Úis_dictionaryz-Non-dictionary categoricals not supported yetÚ
categoriesÚ_colz}Interchanging categorical columns isn't supported yet, and our fallback of using the `col._col` attribute (a ndarray) failed.r\   r]   r   Ú
is_ordered)ri   Úorderedr`   )Údescribe_categoricalrT   r"   ÚnpÚarrayrj   ra   rb   r^   rc   r9   r!   ÚCategoricalÚSeriesrd   )rY   ÚcategoricalÚ
cat_columnri   rW   Ú
codes_buffÚcodes_dtypeÚcodesÚvaluesÚcatr\   s              r0   rO   rO   ù   s  € ð ×*Ñ*€Kà�Ò'Ü!Ð"QÓRÐRà˜\Ñ*€JÜˆz˜6Ô"ô —X‘X˜jŸo™oÓ.‰
ä!ðMó
ð 	
ð �o‰oÓ€Gà% f™oÑ€J�ÜØ�K¨¯
©
¸3¿8¹8»:ô€Eô ˆ:ƒ˜ÒØ˜E¤C¨
£OÑ3Ñ4‰àˆä
�.‰.Ø˜:¨{¸<Ñ/Hô€Cô �9‰9�S‹>€Dä�T˜3 ¨
Ñ 3Ó4€DØ�ˆ=ÐrB   c                óv  — | j                   \  }}|t        j                  t        j                  t        j                  fvrt        |› d�«      ‚| j                  «       }|d   sJ d«       ‚|d   \  }}| j                  d   t        j                  t        j                  fv sJ ‚t        j                  dt        j                  t        j                  f}t!        ||d|j"                  ¬«      }|d   \  }}	t!        ||	| j$                  | j'                  «       d	z   ¬«      }
d
}|t        j                  t        j                  fv r;|d   }|�4|\  }}t!        ||| j$                  | j'                  «       ¬«      }|dk(  r| }d
g| j'                  «       z  }t)        | j'                  «       «      D ]M  }|�||   rt*        j,                  ||<   Œ||
|   |
|d	z       }t/        |«      }|j1                  d¬«      }|||<   ŒO t3        «       rt5        j6                  |d¬«      }||fS t+        j8                  |d¬«      }||fS )a  
    Convert a column holding string data to a NumPy array.

    Parameters
    ----------
    col : Column

    Returns
    -------
    tuple
        Tuple of np.ndarray holding the data and the memory owner object
        that keeps the memory alive.
    z3 null kind is not yet supported for string columns.Úoffsetsz#String buffers must contain offsetsr\   é   r   r   r]   r   Nr`   zutf-8)ÚencodingrF   ©rH   Úobject)Údescribe_nullr   ÚNON_NULLABLEÚUSE_BITMASKÚUSE_BYTEMASKrT   ra   rH   r   rP   ÚLARGE_STRINGr   rJ   ÚUINT8r   ÚNATIVErb   Úbufsizer^   rc   Úrangern   ÚnanÚbytesÚdecoder   r!   rq   Úasarray)rY   Ú	null_kindÚsentinel_valrW   re   Ú_rf   r\   Úoffset_buffÚoffset_dtyperz   Únull_posr`   Ú
valid_buffÚvalid_dtypeÚstr_listÚiÚunitsÚ	str_bytesÚstringÚress                        r0   rQ   rQ   -  sY  € ð "×/Ñ/Ñ€Iˆ|àÜ×#Ñ#Ü×"Ñ"Ü×#Ñ#ðñ ô
 "ØˆkÐLÐMó
ð 	
ð �o‰oÓ€Gà�9ÒÐDÐDÓDÐà˜6‘?�L€Iˆqà�9‰9�Q‰<Ü×ÑÜ× Ñ ðñ ð ð ô 	�‰Ø	Ü×ÑÜ×Ñð	€Jô ˜Y¨
¸1ÀY×EVÑEVÔW€Dð !(¨	Ñ 2Ñ€K�ô  Ø�\¨#¯*©*¸S¿X¹X»ZÈ!¹^ô€Gð €HØ”^×/Ñ/´×1LÑ1LÐMÑMØ˜:Ñ&ˆØÐØ&.Ñ#ˆJ˜Ü(Ø˜K°·
±
À3Ç8Á8Ã:ôˆHð ˜qÒ Ø$˜9�ð +/¨°#·(±(³*Ñ)<€HÜ�3—8‘8“:ÖˆàÐ H¨Q¢KÜŸ&™&ˆH�Q‰KØð �W˜Q‘Z '¨!¨a©%¡.Ð1ˆô ˜%“Lˆ	ð ×!Ñ!¨7Ð!Ó3ˆð ˆ�Šð! ô$ ÔÜ�i‰i˜¨Ô.ˆð �ˆ<Ðô �j‰j˜¨Ô2ˆà�ˆ<ÐrB   c                óz  — t        j                  d| «      }|r�|j                  d«      |j                  d«      }}|dk7  r|dz  }|j                  d|› d�«      }|dk7  rGt	        j
                  |«      j                  j                  d«      j                  j                  |«      }|S t        j                  d	| «      }|ro|j                  d«      }|d
k(  r3|j                  t        j                  «      dz  j                  d«      }|S |dk(  r|j                  d«      }|S t        d|› �«      ‚t        d| › �«      ‚)z4Parse datetime `format_str` to interpret the `data`.zts([smun]):(.*)r   r{   Úszdatetime64[Ú]Ú ÚUTCztd([Dm])ÚDi€Q zdatetime64[s]Úmzdatetime64[ms]zDate unit is not supported: z DateTime kind is not supported: )ÚreÚmatchÚgroupÚastyper!   rq   ÚdtÚtz_localizeÚ
tz_convertrn   Úuint64rT   )Ú
format_strr\   Útimestamp_metaÚunitÚtzÚ	date_metas         r0   Úparse_datetime_format_strr®   Œ  s9  € ô —X‘XÐ0°*Ó=€NÙØ!×'Ñ'¨Ó*¨N×,@Ñ,@ÀÓ,CˆbˆØ�3Š;ð �C‰KˆDØ�{‰{˜[¨¨¨aÐ0Ó1ˆØ�Š8Ü—9‘9˜T“?×%Ñ%×1Ñ1°%Ó8×;Ñ;×FÑFÀrÓJˆDØˆô —‘˜ jÓ1€IÙØ�‰˜qÓ!ˆØ�3Š;ð —K‘K¤§	¡	Ó*¨lÑ;×CÑCÀOÓTˆDð
 ˆð	 �SŠ[Ø—;‘;Ð/Ó0ˆDð ˆô &Ð(DÀTÀFÐ&KÓLÐLô Ð @ÀÀÐMÓ
NÐNrB   c           
     óD  — | j                  «       }| j                  \  }}}}|d   \  }}t        |t        j                  |t        t        d|› �«      t        j                  f| j                  | j                  «       ¬«      }t        ||«      }t        || |d   «      }||fS )a  
    Convert a column holding DateTime data to a NumPy array.

    Parameters
    ----------
    col : Column

    Returns
    -------
    tuple
        Tuple of np.ndarray holding the data and the memory owner object
        that keeps the memory alive.
    r\   rI   r]   r`   )ra   rH   rb   r   rI   Úgetattrr   r   r…   r^   rc   r®   rd   )rY   rW   rŽ   Úcol_bit_widthr©   Údbufr\   s          r0   rS   rS   ­  s¤   € ð �o‰oÓ€Gà&)§i¡iÑ#€A€}�j !Ø�f‰o�G€Dˆ!ô Øä�M‰MØÜ”K 3 } oÐ!6Ó7Ü×Ñð		
ð �z‰zØ�x‰x‹zô
€Dô % Z°Ó6€DÜ�T˜3 ¨
Ñ 3Ó4€DØ�ˆ=ÐrB   ©r^   c          	     óž  — |\  }}}}t         j                  |i «      j                  |d«      }|€t        d|› d�«      ‚t        j                  j                  |«      }|dk(  rr|€J d«       ‚t        d«      }	|	j                  j                  |	j                  «       |d|	j                  | j                  |«      g|¬«      }
t        j                  |
«      S t        j                  | j                  ||z  dz  z   t        j                  |«      «      }|d	kD  r"t        j                  j!                  ||f¬
«      S t        j"                  g |¬«      S )aÚ  
    Build a NumPy array from the passed buffer.

    Parameters
    ----------
    buffer : Buffer
        Buffer to build a NumPy array from.
    dtype : tuple
        Data type of the buffer conforming protocol dtypes format.
    offset : int, default: 0
        Number of elements to offset from the start of the buffer.
    length : int, optional
        If the buffer is a bit-mask, specifies a number of bits to read
        from the buffer. Has no effect otherwise.

    Returns
    -------
    np.ndarray

    Notes
    -----
    The returned array doesn't own the memory. The caller of this function is
    responsible for keeping the memory owner object alive as long as
    the returned NumPy array is being used.
    NzConversion for ú is not yet supported.r   z1`length` must be specified for a bit-mask buffer.r   r³   r   r   )Úshaper}   )r   r<   rT   rn   Ú	ctypeslibÚas_ctypes_typer   ÚBooleanArrayÚfrom_buffersÚbool_Úforeign_bufferÚptrr‹   ÚctypesÚcastÚPOINTERÚas_arrayro   )ÚbufferrH   r_   r^   ÚkindÚ	bit_widthrŽ   Úcolumn_dtypeÚctypes_typer.   ÚarrÚdata_pointers               r0   rb   rb   Ò  s:  € ð@ "Ñ€Dˆ)�Q˜ä—>‘> $¨Ó+×/Ñ/°	¸4Ó@€LØÐÜ! O°E°7Ð:PÐ"QÓRÐRô
 —,‘,×-Ñ-¨lÓ;€Kà�A‚~ØÐ!ÐVÐ#VÓVÐ!Ü'¨	Ó2ˆØ�o‰o×*Ñ*Ø�H‰H‹JØØ�2×$Ñ$ V§Z¡Z°Ó8Ð9Øð	 +ó 
ˆô �z‰z˜#‹Ðä—{‘{Ø�J‰J˜& 9Ñ,°Ñ1Ñ2´F·N±NÀ;Ó4Oó
ˆð �AŠ:Ü—<‘<×(Ñ(¨¸f¸YÐ(ÓGÐGÜ�x‰x˜ +Ô.Ð.rB   c                 ó   — y ©N© ©r\   rY   r`   Úallow_modify_inplaces       r0   rd   rd     s   € ð rB   c                 ó   — y rÊ   rË   rÌ   s       r0   rd   rd     s   € ð rB   c                 ó   — y rÊ   rË   rÌ   s       r0   rd   rd   "  s   € ð !rB   c                óP  — |€| S |j                   \  }}d}|t        j                  k(  rt        j                  | «      |k(  }n‰|t        j
                  t        j                  fv r5|\  }}t        |||j                  |j                  «       ¬«      }|dk(  r6| }n2|t        j                  t        j                  fv rnt        d|› d�«      ‚|�/t        j                  |«      r|s| j                  «       } 	 d| |<   | S | S # t         $ r | j#                  t$        «      } d| |<   Y | S w xY w)aÆ  
    Set null values for the data according to the column null kind.

    Parameters
    ----------
    data : np.ndarray or pd.Series
        Data to set nulls in.
    col : Column
        Column object that describes the `data`.
    validity : tuple(Buffer, dtype) or None
        The return value of ``col.buffers()``. We do not access the ``col.buffers()``
        here to not take the ownership of the memory of buffer objects.
    allow_modify_inplace : bool, default: True
        Whether to modify the `data` inplace when zero-copy is possible (True) or always
        modify a copy of the `data` (False).

    Returns
    -------
    np.ndarray or pd.Series
        Data with the nulls being set.
    Nr]   r   z
Null kind rµ   )r   r   ÚUSE_SENTINELr!   rq   r�   r‚   rb   r^   rc   r€   ÚUSE_NANrT   rn   Úanyr5   Ú	TypeErrorr¤   Úfloat)	r\   rY   r`   rÍ   rŒ   r�   r‘   r’   r“   s	            r0   rd   rd   +  s-  € ð6 ÐØˆØ!×/Ñ/Ñ€Iˆ|Ø€Hà”N×/Ñ/Ò/Ü—9‘9˜T“? lÑ2‰Ø	”~×1Ñ1´>×3NÑ3NÐOÑ	OØ"*Ñˆ
�KÜ$Ø˜¨C¯J©J¸s¿x¹x»zô
ˆð ˜1ÒØ �y‰HØ	”~×2Ñ2´N×4JÑ4JÐKÑ	KØä! J¨y¨kÐ9OÐ"PÓQÐQàÐ¤§¡ xÔ 0Ù#Ø—9‘9“;ˆDð	"Ø!ˆD�‰Nð €Kˆ4€Køô ò 	"ð —;‘;œuÓ%ˆDØ!ˆD�ŠNà€Kð	"ús   Ã5C> Ã>#D%Ä$D%)T)r   ÚboolÚreturnúpd.DataFrame)r-   ÚDataFrameXchgr   rÖ   r×   rØ   )r-   rÙ   r×   rØ   )rY   r   r×   ztuple[np.ndarray, Any])rY   r   r×   ztuple[pd.Series, Any])r×   zpd.Series | np.ndarray)rY   r   r×   z"tuple[np.ndarray | pd.Series, Any])
rÂ   r   rH   ztuple[DtypeKind, int, str, str]r_   Úintr^   rÚ   r×   ú
np.ndarray).)
r\   rÛ   rY   r   r`   ú5tuple[Buffer, tuple[DtypeKind, int, str, str]] | NonerÍ   rÖ   r×   rÛ   )
r\   ú	pd.SeriesrY   r   r`   rÜ   rÍ   rÖ   r×   rÝ   )
r\   únp.ndarray | pd.SeriesrY   r   r`   rÜ   rÍ   rÖ   r×   rÞ   );Ú
__future__r   r¾   r¡   Útypingr   r   r(   Únumpyrn   Úpandas._configr   Úpandas.compat._optionalr   Úpandas.errorsr   Úpandas.util._decoratorsr	   Úpandas.util._exceptionsr
   Úpandasr!   Ú*pandas.core.interchange.dataframe_protocolr   r   r   r   rÙ   r   Úpandas.core.interchange.utilsr   r   rI   Úint8Úint16Úint32Úint64rJ   Úuint8Úuint16Úuint32r¨   rK   Úfloat32Úfloat64rL   rÖ   r   Ú__annotations__r1   r,   r7   rM   rO   rQ   r®   rS   rb   rd   rË   rB   r0   Ú<module>rô      sG  ðÞ "ã Û 	÷ó ã å -å >Ý (Ý .Ý 4ã ÷õ ÷ð ‡M�M�r—w‘w B§H¡H°"·(±(ÀÇÁÑIØ‡N�N˜Ÿ™ b§i¡i°R·Y±YÀBÇIÁIÑNØ‡O�O˜"Ÿ*™*¨"¯*©*Ñ5Ø‡N�N˜ Ñ&ð	/€
Ð+ó ñ Ð$Ó%ó^ó &ð^ôB$óN)óXó61óh\ó~OóB"ðT ñ;/Øð;/à*ð;/ð ð	;/ð
 ð;/ð ó;/ð| 
ð
 "%ð	Ø
ðà	ðð Dðð ð	ð
 òó 
ðð 
ð
 "%ð	Ø
ðà	ðð Dðð ð	ð
 òó 
ðð 
ð
 "%ð	!Ø
 ð!à	ð!ð Dð!ð ð	!ð
 ò!ó 
ð!ð "&ð	:Ø
 ð:à	ð:ð Dð:ð ð	:ð
 ô:rB   