
    -Ph!                        d dl mZ d dlZd dlmZmZmZ d dlmZm	Z	 er d dl
Zd dlZd dlmZ d dlmZ d dlmZ d dlmZ  G d	 d
ej                  ZddZ G d d          ZdS )    )annotationsN)TYPE_CHECKINGAnyNoReturn)Versionparse_version)SelfInterchangeSeries)DType)DataFrameLikec                  *    e Zd ZdZdZdZdZdZdZdZ	dS )		DtypeKindr                     N)
__name__
__module____qualname__INTUINTFLOATBOOLSTRINGDATETIMECATEGORICAL     _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/_interchange/dataframe.pyr   r      s1        
CDEDFHKKKr!   r   interchange_dtypetuple[DtypeKind, int, Any, Any]returnr   c                   t           j        j        }| d         t          j        k    r| d         dk    r|                                S | d         dk    r|                                S | d         dk    r|                                S | d         dk    r|                                S d}t          |          | d         t          j
        k    r| d         dk    r|                                S | d         dk    r|                                S | d         dk    r|                                S | d         dk    r|                                S d}t          |          | d         t          j        k    rQ| d         dk    r|                                S | d         dk    r|                                S d	}t          |          | d         t          j        k    r|                                S | d         t          j        k    r|                                S | d         t          j        k    r|                                S | d         t          j        k    r|                                S d
|  }t          |          )Nr   r   @             zInvalid bit width for INTzInvalid bit width for UINTzInvalid bit width for FLOATzInvalid dtype, got: )r   V1dtypesr   r   Int64Int32Int16Int8AssertionErrorr   UInt64UInt32UInt16UInt8r   Float64Float32r   Booleanr   Stringr   Datetimer   Categorical)r#   r,   msgs      r"   'map_interchange_dtype_to_narwhals_dtyper=      sT    ZFy},,Q2%%<<>>!Q2%%<<>>!Q2%%<<>>!Q1$$;;== )S!!!y~--Q2%%==??"Q2%%==??"Q2%%==??"Q1$$<<>>!*S!!!y..Q2%%>>###Q2%%>>###+S!!!y~--~~y///}}y111   y444!!###
4!2
4
4C


r!   c                      e Zd Zej        ZddZddZdd	Zd dZ	d!dZ
d"dZed#d            Zed$d            Zd%dZd&dZd'dZdS )(InterchangeFramedfr   r%   Nonec                8    |                                 | _        d S N)__dataframe___interchange_frame)selfr@   s     r"   __init__zInterchangeFrame.__init__N   s    "$"2"2"4"4r!   r	   c                    | S rC   r    rF   s    r"   __narwhals_dataframe__z'InterchangeFrame.__narwhals_dataframe__Q   s    r!   r   c                $    d}t          |          )NzCannot access native namespace for interchange-level dataframes with unknown backend.If you would like to see this kind of object supported in Narwhals, please open a feature request at https://github.com/narwhals-dev/narwhals/issues.NotImplementedError)rF   r<   s     r"   __native_namespace__z%InterchangeFrame.__native_namespace__T   s    Y 	
 "#&&&r!   namestrr   c                T    ddl m}  || j                            |                    S )Nr   r
   )narwhals._interchange.seriesr   rE   get_column_by_name)rF   rO   r   s      r"   
get_columnzInterchangeFrame.get_column\   s6    BBBBBB  !8!K!KD!Q!QRRRr!   pd.DataFramec                    dd l }t          |          dk    r$|j        j                            | j                  S d|j         }t          |          )Nr   )r      r   zpConversion to pandas is achieved via interchange protocol which requires 'pandas>=1.5.0' to be installed, found )pandasr   apiinterchangefrom_dataframerE   __version__rM   )rF   pdr<   s      r"   	to_pandaszInterchangeFrame.to_pandasa   si    	))6%44T5LMMML;=>L L  &c***r!   pa.Tablec                .    ddl m}  || j                  S )Nr   )r[   )"pyarrow.interchange.from_dataframer[   rE   )rF   r[   s     r"   to_arrowzInterchangeFrame.to_arrowm   s5    	
 	
 	
 	
 	
 	
 ~d5666r!   dict[str, DType]c                N      fd j                                         D             S )Nc                j    i | ]/}|t          j                            |          j                  0S r    )r=   rE   rS   dtype).0column_namerF   s     r"   
<dictcomp>z+InterchangeFrame.schema.<locals>.<dictcomp>v   sO     
 
 
  @'::;GGM 
 
 
r!   )rE   column_namesrI   s   `r"   schemazInterchangeFrame.schemat   s?    
 
 
 
  $6CCEE	
 
 
 	
r!   	list[str]c                N    t          | j                                                  S rC   )listrE   rj   rI   s    r"   columnszInterchangeFrame.columns}   s    D+88::;;;r!   attrc                ,    d| d}t          |          )Nz
Attribute aK   is not supported for interchange-level dataframes.

Hint: you probably called `nw.from_native` on an object which isn't fully supported by Narwhals, yet implements `__dataframe__`. If you would like to see this kind of object supported in Narwhals, please open a feature request at https://github.com/narwhals-dev/narwhals/issues.rL   )rF   rp   r<   s      r"   __getattr__zInterchangeFrame.__getattr__   s1    B B B B 	 "#&&&r!   rj   c                    | j                             t          |                    }t          |d          sd}t	          |          |                     |j                  S )N_dfzExpected interchange object to implement `_df` property to allow for recovering original object.
See https://github.com/data-apis/dataframe-api/issues/360.)rE   select_columns_by_namern   hasattrrM   	__class__rt   )rF   rj   framer<   s       r"   simple_selectzInterchangeFrame.simple_select   sa    '>>tL?Q?QRRue$$ 	+M  &c***~~ei(((r!   exprsc                $    d}t          |          )Nz`select`-ing not by name is not supported for interchange-only level.

If you would like to see this kind of object better supported in Narwhals, please open a feature request at https://github.com/narwhals-dev/narwhals/issues.rL   )rF   rz   r<   s      r"   selectzInterchangeFrame.select   s    B 	 "#&&&r!   N)r@   r   r%   rA   )r%   r	   )r%   r   )rO   rP   r%   r   )r%   rU   )r%   r_   )r%   rc   )r%   rl   )rp   rP   r%   r   )rj   rP   r%   r	   )rz   rP   r%   r	   )r   r   r   r   r+   _versionrG   rJ   rN   rT   r^   rb   propertyrk   ro   rr   ry   r|   r    r!   r"   r?   r?   K   s       zH5 5 5 5   ' ' ' 'S S S S

+ 
+ 
+ 
+7 7 7 7 
 
 
 X
 < < < X<' ' ' ') ) ) )' ' ' ' ' 'r!   r?   )r#   r$   r%   r   )
__future__r   enumtypingr   r   r   narwhals._utilsr   r   rX   r]   pyarrowpatyping_extensionsr	   rR   r   narwhals.dtypesr   narwhals.typingr   IntEnumr   r=   r?   r    r!   r"   <module>r      s;   " " " " " "  / / / / / / / / / / 2 2 2 2 2 2 2 2 .&&&&&&>>>>>>%%%%%%------       + + + +\Q' Q' Q' Q' Q' Q' Q' Q' Q' Q'r!   