U
    c                     @  sh   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rTd dlZd dlmZ G dd	 d	e
ZdS )
    )annotations)abc)TYPE_CHECKING)PandasColumn)	DataFrameN)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.
    FTzpd.DataFrame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-g7fro6k3/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_columns1   s    zPandasDataFrameXchg.num_columnsc                 C  s
   t | jS r   )r   r   r   r   r   r   num_rows4   s    zPandasDataFrameXchg.num_rowsc                 C  s   dS )N   r   r   r   r   r   
num_chunks7   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_name@   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>D   s   z3PandasDataFrameXchg.get_columns.<locals>.<listcomp>r"   r   r   r   r   get_columnsC   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_columnsI   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_nameS   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   )
__future__r   collectionsr   typingr   Zpandas.core.interchange.columnr   Z*pandas.core.interchange.dataframe_protocolr   ZDataFrameXchgZpandaspdr   r   r   r   r   r   <module>   s   