a
    Of'                     @  s   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mZ erld dlmZmZ d dlm	Z	mZ G d	d
 d
e
ZdS )    )annotations)abc)TYPE_CHECKING)PandasColumn)	DataFrame)maybe_rechunk)IterableSequence)r   Indexc                   @  s   e Zd ZdZd4ddddddZd5d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(d)Zd*d d+d,d-Zd6d/d0d1d2d3Zd.S )7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.
    Tr   boolNone)df
allow_copyreturnc                 C  sb   |j tdd| _|| _t| jjD ]:\}}t| jjdd|f |d}|dur"| j|| q"dS )zz
        Constructor - an instance of this (private) class is returned from
        `pd.DataFrame.__dataframe__`.
        F)columnscopyNr   )	renamestr_df_allow_copy	enumerater   r   ilocZisetitem)selfr   r   iZ_colZ	rechunked r   Z/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/core/interchange/dataframe.py__init__   s    zPandasDataFrameXchg.__init__F)nan_as_nullr   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   metadata2   s    zPandasDataFrameXchg.metadataintc                 C  s   t | jjS r    )lenr   r   r#   r   r   r   num_columns8   s    zPandasDataFrameXchg.num_columnsc                 C  s
   t | jS r    )r&   r   r#   r   r   r   num_rows;   s    zPandasDataFrameXchg.num_rowsc                 C  s   dS )N   r   r#   r   r   r   
num_chunks>   s    zPandasDataFrameXchg.num_chunksr
   c                 C  s   | j jS r    r   r   r#   r   r   r   column_namesA   s    z PandasDataFrameXchg.column_namesr   )r   r   c                 C  s   t | jjd d |f | jdS Nr   )r   r   r   r   )r   r   r   r   r   
get_columnD   s    zPandasDataFrameXchg.get_columnr   )namer   c                 C  s   t | j| | jdS r-   r   r   r   )r   r/   r   r   r   get_column_by_nameG   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   r0   ).0r/   r#   r   r   
<listcomp>K   s   z3PandasDataFrameXchg.get_columns.<locals>.<listcomp>r+   r#   r   r#   r   get_columnsJ   s    
zPandasDataFrameXchg.get_columnszSequence[int])indicesr   c                 C  sD   t |tjstdt |ts&t|}t| jjd d |f | jdS )Nz`indices` is not a sequencer   )	
isinstancer   r	   
ValueErrorlistr   r   r   r   )r   r5   r   r   r   select_columnsP   s    
z"PandasDataFrameXchg.select_columnsz	list[str])namesr   c                 C  sD   t |tjstdt |ts&t|}t| jjd d |f | jdS )Nz`names` is not a sequencer   )	r6   r   r	   r7   r8   r   r   locr   )r   r:   r   r   r   select_columns_by_nameZ   s
    
z*PandasDataFrameXchg.select_columns_by_nameNz
int | NonezIterable[PandasDataFrameXchg])n_chunksr   c                 c  s|   |rr|dkrrt | j}|| }|| dkr2|d7 }td|| |D ],}t| jj||| ddf | jdV  qBn| V  dS )z9
        Return an iterator yielding the chunks.
        r)   r   Nr   )r&   r   ranger   r   r   )r   r=   sizestepstartr   r   r   
get_chunksb   s    
zPandasDataFrameXchg.get_chunks)T)FT)N)__name__
__module____qualname____doc__r   r!   propertyr$   r'   r(   r*   r,   r.   r1   r4   r9   r<   rB   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pandas.core.interchange.utilsr   collections.abcr   r	   Zpandasr
   r   r   r   r   r   <module>   s   