U
    MZßf±  ã                   @  sd   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
 erPd dlm	Z	mZ G dd„ de
ƒZd	S )
é    )Úannotations)Úabc)ÚTYPE_CHECKING)ÚPandasColumn)Ú	DataFrame)r   ÚIndexc                   @  sØ   e Zd ZdZd-dddddœdd	„Zd.ddd d
œdd„Zeddœdd„ƒZddœdd„Zddœdd„Z	ddœdd„Z
ddœdd„Zdddœdd„Zddd œd!d"„Zd#dœd$d%„Zd dœd&d'„Zd dœd(d)„Zd/d+d,„Zd*S )0ÚPandasDataFrameXchga  
    A data frame class, with only the methods required by the interchange
    protocol defined.
    Instances of this (private) class are returned from
    ``pd.DataFrame.__dataframe__`` as objects with the methods and
    attributes defined on this class.
    FTr   ÚboolÚNone)ÚdfÚnan_as_nullÚ
allow_copyÚreturnc                 C  s   || _ || _|| _dS )zz
        Constructor - an instance of this (private) class is returned from
        `pd.DataFrame.__dataframe__`.
        N)Ú_dfÚ_nan_as_nullÚ_allow_copy)Úselfr   r   r   © r   úE/tmp/pip-unpacked-wheel-nbcvw55c/pandas/core/interchange/dataframe.pyÚ__init__   s    zPandasDataFrameXchg.__init__)r   r   r   c                 C  s   t | j||ƒS ©N)r   r   )r   r   r   r   r   r   Ú__dataframe__(   s    z!PandasDataFrameXchg.__dataframe__zdict[str, Index])r   c                 C  s   d| j jiS )Nzpandas.index)r   Úindex©r   r   r   r   Úmetadata-   s    zPandasDataFrameXchg.metadataÚintc                 C  s   t | jjƒS r   )Úlenr   Úcolumnsr   r   r   r   Únum_columns3   s    zPandasDataFrameXchg.num_columnsc                 C  s
   t | jƒS r   )r   r   r   r   r   r   Únum_rows6   s    zPandasDataFrameXchg.num_rowsc                 C  s   dS )Né   r   r   r   r   r   Ú
num_chunks9   s    zPandasDataFrameXchg.num_chunksr   c                 C  s   | j jS r   ©r   r   r   r   r   r   Úcolumn_names<   s    z PandasDataFrameXchg.column_namesr   )Úir   c                 C  s   t | jjd d …|f | jdS ©N©r   )r   r   Úilocr   )r   r$   r   r   r   Ú
get_column?   s    zPandasDataFrameXchg.get_columnÚstr)Únamer   c                 C  s   t | j| | jdS r%   ©r   r   r   )r   r*   r   r   r   Úget_column_by_nameB   s    z&PandasDataFrameXchg.get_column_by_namezlist[PandasColumn]c                   s   ‡ fdd„ˆ j jD ƒS )Nc                   s    g | ]}t ˆ j| ˆ jd ‘qS )r&   r+   )Ú.0r*   r   r   r   Ú
<listcomp>F   s   ÿz3PandasDataFrameXchg.get_columns.<locals>.<listcomp>r"   r   r   r   r   Úget_columnsE   s    
þzPandasDataFrameXchg.get_columnsc                 C  sF   t |tjƒstdƒ‚t |tƒs&t|ƒ}t| jjd d …|f | j| j	ƒS )Nz`indices` is not a sequence)
Ú
isinstancer   ÚSequenceÚ
ValueErrorÚlistr   r   r'   r   r   )r   Úindicesr   r   r   Úselect_columnsK   s    
  ÿz"PandasDataFrameXchg.select_columnsc                 C  sF   t |tjƒstdƒ‚t |tƒs&t|ƒ}t| jjd d …|f | j| j	ƒS )Nz`names` is not a sequence)
r0   r   r1   r2   r3   r   r   Úlocr   r   )r   Únamesr   r   r   Úselect_columns_by_nameU   s    
  ÿz*PandasDataFrameXchg.select_columns_by_nameNc                 c  s~   |rt|dkrtt | jƒ}|| }|| dkr2|d7 }td|| |ƒD ].}t| jj||| …dd…f | j| jƒV  qBn| V  dS )z9
        Return an iterator yielding the chunks.
        r    r   N)r   r   Úranger   r'   r   r   )r   Zn_chunksÚsizeÚstepÚstartr   r   r   Ú
get_chunks_   s    
ý
zPandasDataFrameXchg.get_chunks)FT)FT)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úpropertyr   r   r   r!   r#   r(   r,   r/   r5   r8   r=   r   r   r   r   r      s&   	   ÿ   ÿ

r   N)Ú
__future__r   Úcollectionsr   Útypingr   Zpandas.core.interchange.columnr   Z*pandas.core.interchange.dataframe_protocolr   ZDataFrameXchgZpandasr   r   r   r   r   r   Ú<module>   s   