
    Owg'                        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        d      | _        || _        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__`.
        F)columnscopyN
allow_copy)	renamestr_df_allow_copy	enumerater   r   ilocisetitem)selfdfr   i_col	rechunkeds         X/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/core/interchange/dataframe.py__init__zPandasDataFrameXchg.__init__   sy    
 99Su95% !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 r6   )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 r6   )r   r   r   r   r9   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@   rA   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.
        r0   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$   rO   r   rO   rP   r   )rP   zdict[str, Index])rP   int)rP   r   )r   rR   rP   r   )r:   r   rP   r   )rP   zlist[PandasColumn])rB   zSequence[int]rP   r   )rF   z	list[str]rP   r   r#   )rJ   z
int | NonerP   zIterable[PandasDataFrameXchg])__name__
__module____qualname____doc__r    r%   propertyr)   r,   r.   r2   r4   r7   r;   r=   rC   rG   rN   r1   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   r1   r!   r   <module>ra      s2    "    7 Q 7
[- [r!   