
    Wh                        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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dZy)    )annotationsN)TYPE_CHECKINGAnyNoReturn)Version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     Y/var/www/html/jupyter_env/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 r@   r!   rC   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)rC   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   rB   get_column_by_name)rC   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__rK   apiinterchangefrom_dataframerB   )rC   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   )rX   )"pyarrow.interchange.from_dataframerX   rB   )rC   rX   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 r@   )rB   column_namesr<   rO   dtype)rC   column_names     r#   schemazInterchangeFrame.schemas   s\      $66CCE	
  @''::;GMM 
 	
 
s   6Ac                H    t        | j                  j                               S r@   )listrB   r_   rG   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.rJ   )rC   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.)rB   select_columns_by_namerd   hasattrrK   	__class__rj   )rC   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.rJ   )rC   exprsr;   s      r#   selectzInterchangeFrame.select   s    B 	 "#&&r"   N)rD   r   returnNone)rs   r	   )rs   r   )rP   strrs   r   )rs   zpd.DataFrame)rs   zpa.Table)rs   zdict[str, DType])rs   z	list[str])rg   ru   rs   r   )r_   ru   rs   r	   )rq   ru   rs   r	   )r   r   r   r   r)   _versionrE   rH   rL   rQ   rZ   r]   propertyrb   re   rh   ro   rr   r!   r"   r#   r>   r>   K   sb    zzH5'S
	J7 
 
 < <')'r"   r>   c                    t        | d      S )NrA   )rl   )objs    r#   supports_dataframe_interchangerz      s    3((r"   )r:   ztuple[DtypeKind, int, Any, Any]rs   r   )ry   r   rs   zTypeIs[DataFrameLike])
__future__r   enumtypingr   r   r   narwhals._utilsr   r   rT   rY   pyarrowpatyping_extensionsr	   r
   rN   r   narwhals.dtypesr   narwhals.stable.v1.typingr   IntEnumr   r<   r>   rz   r!   r"   r#   <module>r      sa    "  / / 2.>%7 +6+
+\P' P'f)r"   