
    i                        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rd dlmZmZ d dlm	Z	mZ  G d	 d
e
      Zy)    )annotations)abc)TYPE_CHECKING)PandasColumn)	DataFrame)maybe_rechunk)IterableSequence)r   Indexc                      e Zd ZdZdddZ	 d	 	 	 	 	 ddZedd       ZddZddZ	ddZ
ddZdd	Zdd
ZddZddZddZdddZy)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.
    c                $   |j                  t              | _        || _        t	        | j                  j
                        D ]L  \  }}t        | j                  j                  dd|f   |      }|1| j                  j                  ||       N y)zz
        Constructor - an instance of this (private) class is returned from
        `pd.DataFrame.__dataframe__`.
        )columnsN
allow_copy)	renamestr_df_allow_copy	enumerater   r   ilocisetitem)selfdfr   i_col	rechunkeds         ^/app/cer_product_mecsu/.venv/lib/python3.12/site-packages/pandas/core/interchange/dataframe.py__init__zPandasDataFrameXchg.__init__   sw    
 99S9)% !1!12 	0GAt%dhhmmAqD&9jQI$!!!Y/	0    c                .    t        | j                  |      S N)r   r   )r   nan_as_nullr   s      r   __dataframe__z!PandasDataFrameXchg.__dataframe__+   s    
 #488Z88r    c                2    d| j                   j                  iS )Nzpandas.index)r   indexr   s    r   metadatazPandasDataFrameXchg.metadata2   s     //r    c                @    t        | j                  j                        S r"   )lenr   r   r'   s    r   num_columnszPandasDataFrameXchg.num_columns8   s    488##$$r    c                ,    t        | j                        S r"   )r*   r   r'   s    r   num_rowszPandasDataFrameXchg.num_rows;   s    488}r    c                     y)N    r'   s    r   
num_chunkszPandasDataFrameXchg.num_chunks>   s    r    c                .    | j                   j                  S r"   )r   r   r'   s    r   column_namesz PandasDataFrameXchg.column_namesA   s    xxr    c                f    t        | j                  j                  d d |f   | j                        S Nr   )r   r   r   r   )r   r   s     r   
get_columnzPandasDataFrameXchg.get_columnD   s&    DHHMM!Q$/D<L<LMMr    c                J    t        | j                  |   | j                        S r5   )r   r   r   r   names     r   get_column_by_namez&PandasDataFrameXchg.get_column_by_nameG   s    DHHTNt7G7GHHr    c                    | j                   j                  D cg c]&  }t        | j                   |   | j                        ( c}S c c}w r5   )r   r   r   r   r8   s     r   get_columnszPandasDataFrameXchg.get_columnsJ   sC     ((
 $D4D4DE
 	
 
s   +Ac                    t        |t        j                        st        d      t        |t              st	        |      }t        | j                  j                  d d |f   | j                        S )Nz`indices` is not a sequencer   )	
isinstancer   r
   
ValueErrorlistr   r   r   r   )r   indicess     r   select_columnsz"PandasDataFrameXchg.select_columnsP   sX    '3<<0:;;'4(7mG"HHMM!W*%$2B2B
 	
r    c                    t        |t        j                        st        d      t        |t              st	        |      }t        | j                  j                  d d |f   | j                        S )Nz`names` is not a sequencer   )	r>   r   r
   r?   r@   r   r   locr   )r   namess     r   select_columns_by_namez*PandasDataFrameXchg.select_columns_by_nameZ   sS    %.899%&KE"488<<5#9dFVFVWWr    Nc              #    K   |r{|dkD  rvt        | j                        }||z  }||z  dk7  r|dz  }t        d||z  |      D ];  }t        | j                  j                  |||z   ddf   | j
                         = y|  yw)z9
        Return an iterator yielding the chunks.
        r/   r   Nr   )r*   r   ranger   r   r   )r   n_chunkssizestepstarts        r   
get_chunkszPandasDataFrameXchg.get_chunksb   s      1txx=D8#Dh!#	q$/48 )HHMM%%$,"6"9:#//  Js   BB)T)r   r   r   boolreturnNone)FT)r#   rN   r   rN   rO   r   )rO   zdict[str, Index])rO   int)rO   r   )r   rQ   rO   r   )r9   r   rO   r   )rO   zlist[PandasColumn])rA   zSequence[int]rO   r   )rE   z	list[str]rO   r   r"   )rI   z
int | NonerO   zIterable[PandasDataFrameXchg])__name__
__module____qualname____doc__r   r$   propertyr(   r+   r-   r1   r3   r6   r:   r<   rB   rF   rM   r0   r    r   r   r      sx    
0 =A99599	9 0 0
% NI

Xr    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   r0   r    r   <module>r`      s2    "    7 Q 7
[- [r    