
    O3j                        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	m
Z
 er"d dlZd dlZd dlmZmZ d dlmZ d dlmZ d dlmZ  G d	 d
ej0                        Z	 	 	 	 ddZ G d d      ZddZy)    )annotationsN)TYPE_CHECKINGAnyNoReturn)Version_hasattr_staticparse_version)SelfTypeIsInterchangeSeries)DType)DataFrameLikec                  (    e Zd ZdZdZdZdZdZdZdZ	y)		DtypeKindr                     N)
__name__
__module____qualname__INTUINTFLOATBOOLSTRINGDATETIMECATEGORICAL     L/DATA/.local/lib/python3.12/site-packages/narwhals/_interchange/dataframe.pyr   r      s%    
CDEDFHKr#   r   c                8   t         j                  j                  }| d   t        j                  k(  rm| d   dk(  r|j                         S | d   dk(  r|j                         S | d   dk(  r|j                         S | d   dk(  r|j                         S d}t        |      | d   t        j                  k(  rm| d   dk(  r|j                         S | d   dk(  r|j                         S | d   dk(  r|j                         S | d   dk(  r|j                         S d}t        |      | d   t        j                  k(  r=| d   dk(  r|j!                         S | d   dk(  r|j#                         S d	}t        |      | d   t        j$                  k(  r|j'                         S | d   t        j(                  k(  r|j+                         S | d   t        j,                  k(  r|j/                         S | d   t        j0                  k(  r|j3                         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)interchange_dtyper+   msgs      r$   'map_interchange_dtype_to_narwhals_dtyper=      s
    ZZ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!!## !2 3
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y)InterchangeFramec                .    |j                         | _        y N)__dataframe___interchange_frame)selfdfs     r$   __init__zInterchangeFrame.__init__N   s    "$"2"2"4r#   c                    | S rA   r"   rD   s    r$   __narwhals_dataframe__z'InterchangeFrame.__narwhals_dataframe__Q   s    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)rD   r<   s     r$   __native_namespace__z%InterchangeFrame.__native_namespace__T   s    Y 	
 "#&&r#   c                P    ddl m}  || j                  j                  |            S )Nr   r   )narwhals._interchange.seriesr   rC   get_column_by_name)rD   namer   s      r$   
get_columnzInterchangeFrame.get_column\   s!    B !8!8!K!KD!QRRr#   c                    dd l }t        |      dk  rd|j                   }t        |      |j                  j
                  j                  | j                        S )Nr   )r      r   zpConversion to pandas is achieved via interchange protocol which requires 'pandas>=1.5.0' to be installed, found )pandasr	   __version__rL   apiinterchangefrom_dataframerC   )rD   pdr<   s      r$   	to_pandaszInterchangeFrame.to_pandasa   sZ    y(;;=>>:JL  &c**vv!!001H1HIIr#   c                2    ddl m}  || j                        S )Nr   )rY   )"pyarrow.interchange.from_dataframerY   rC   )rD   rY   s     r$   to_arrowzInterchangeFrame.to_arrowl   s    	
 d5566r#   c           	         | j                   j                         D ci c]1  }|t        | j                   j                  |      j                        3 c}S c c}w rA   )rC   column_namesr=   rP   dtype)rD   column_names     r$   schemazInterchangeFrame.schemas   se      $66CCE	
  F @''::;GMM   F	
 	
 
s   6Ac                H    t        | j                  j                               S rA   )listrC   r`   rH   s    r$   columnszInterchangeFrame.columns|   s    D++88:;;r#   c                $    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.rK   )rD   attrr<   s      r$   __getattr__zInterchangeFrame.__getattr__   s'     B B 	 "#&&r#   c                    | j                   j                  t        |            }t        |d      sd}t	        |      | j                  |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.)rC   select_columns_by_namere   hasattrrL   	__class__rk   )rD   r`   framer<   s       r$   simple_selectzInterchangeFrame.simple_select   sR    ''>>tL?QRue$M  &c**~~eii((r#   c                    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.rK   )rD   exprsr<   s      r$   selectzInterchangeFrame.select   s    B 	 "#&&r#   N)rE   r   returnNone)rt   r
   )rt   r   )rQ   strrt   r   )rt   zpd.DataFrame)rt   zpa.Table)rt   zdict[str, DType])rt   z	list[str])rh   rv   rt   r   )r`   rv   rt   r
   )rr   rv   rt   r
   )r   r   r   r   r*   _versionrF   rI   rM   rR   r[   r^   propertyrc   rf   ri   rp   rs   r"   r#   r$   r?   r?   K   sb    zzH5'S
	J7 
 
 < <')'r#   r?   c                    t        | d      S )NrB   )r   )objs    r$   supports_dataframe_interchanger{      s    300r#   )r;   ztuple[DtypeKind, int, Any, Any]rt   r   )rz   r   rt   zTypeIs[DataFrameLike])
__future__r   enumtypingr   r   r   narwhals._utilsr   r   r	   rU   rZ   pyarrowpatyping_extensionsr
   r   rO   r   narwhals.dtypesr   narwhals.stable.v1.typingr   IntEnumr   r=   r?   r{   r"   r#   r$   <module>r      sd    "  / / C C.>%7 +6+
+\P' P'f1r#   