o
    ŀg'                     @  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r6d 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d5d6d	d
Z	d7d8ddZed9ddZd:ddZd:ddZ	d:ddZ
d;ddZd<ddZd=d"d#Zd>d%d&Zd?d)d*Zd@d-d.ZdAdBd3d4Zd/S )C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.
    Tdfr   
allow_copyboolreturnNonec                 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   ilocisetitem)selfr   r   i_col	rechunked r   U/var/www/html/myenv/lib/python3.10/site-packages/pandas/core/interchange/dataframe.py__init__   s   zPandasDataFrameXchg.__init__Fnan_as_nullc                 C  s   t | j|S N)r   r   )r   r"   r   r   r   r    __dataframe__+   s   z!PandasDataFrameXchg.__dataframe__dict[str, Index]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   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_columnnamer   c                 C  s   t | j| | jdS r1   r   r   r   )r   r3   r   r   r    get_column_by_nameG   s   z&PandasDataFrameXchg.get_column_by_namelist[PandasColumn]c                   s    fdd j jD S )Nc                   s    g | ]}t  j|  jd qS )r   r4   ).0r3   r'   r   r    
<listcomp>K   s    z3PandasDataFrameXchg.get_columns.<locals>.<listcomp>r/   r'   r   r'   r    get_columnsJ   s   
zPandasDataFrameXchg.get_columnsindicesSequence[int]c                 C  D   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   r:   r   r   r    select_columnsP   s   
z"PandasDataFrameXchg.select_columnsnames	list[str]c                 C  r<   )Nz`names` is not a sequencer   )	r=   r   r	   r>   r?   r   r   locr   )r   rA   r   r   r    select_columns_by_nameZ   s
   
z*PandasDataFrameXchg.select_columns_by_nameNn_chunks
int | NoneIterable[PandasDataFrameXchg]c                 c  s    |r;|dkr;t | j}|| }|| dkr|d7 }td|| |D ]}t| jj||| ddf | jdV  q"dS | V  dS )z9
        Return an iterator yielding the chunks.
        r-   r   Nr   )r*   r   ranger   r   r   )r   rE   sizestepstartr   r   r    
get_chunksb   s   


zPandasDataFrameXchg.get_chunks)T)r   r   r   r   r   r   )FT)r"   r   r   r   r   r   )r   r%   )r   r)   )r   r
   )r   r)   r   r   )r3   r   r   r   )r   r6   )r:   r;   r   r   )rA   rB   r   r   r#   )rE   rF   r   rG   )__name__
__module____qualname____doc__r!   r$   propertyr(   r+   r,   r.   r0   r2   r5   r9   r@   rD   rL   r   r   r   r    r      s"    









r   N)
__future__r   collectionsr   typingr   pandas.core.interchange.columnr   *pandas.core.interchange.dataframe_protocolr   DataFrameXchgpandas.core.interchange.utilsr   collections.abcr   r	   pandasr
   r   r   r   r   r    <module>   s    