
    7^j                        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     j/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/narwhals/_interchange/dataframe.pyr   r      s%    
CDEDFHKr#   r   c                h   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(  rU| 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|j)                         S | d   t        j*                  k(  r|j-                         S | d   t        j.                  k(  r|j1                         S | d   t        j2                  k(  r|j5                         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Float32Float16r   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%>>##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__P   s    "$"2"2"4r#   c                    | S rB   r"   rE   s    r$   __narwhals_dataframe__z'InterchangeFrame.__narwhals_dataframe__S   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)rE   r=   s     r$   __native_namespace__z%InterchangeFrame.__native_namespace__V   s    Y 	
 "#&&r#   c                P    ddl m}  || j                  j                  |            S )Nr   r   )narwhals._interchange.seriesr   rD   get_column_by_name)rE   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__rM   apiinterchangefrom_dataframerD   )rE   pdr=   s      r$   	to_pandaszInterchangeFrame.to_pandasc   sZ    y(;;=>>:JL  &c**vv!!001H1HIIr#   c                2    ddl m}  || j                        S )Nr   )rZ   )"pyarrow.interchange.from_dataframerZ   rD   )rE   rZ   s     r$   to_arrowzInterchangeFrame.to_arrown   s    	
 d5566r#   c           	         | j                   j                         D ci c]1  }|t        | j                   j                  |      j                        3 c}S c c}w rB   )rD   column_namesr>   rQ   dtype)rE   column_names     r$   schemazInterchangeFrame.schemau   s\      $66CCE	
  @''::;GMM 
 	
 
s   6Ac                H    t        | j                  j                               S rB   )listrD   ra   rI   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.rL   )rE   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.)rD   select_columns_by_namerf   hasattrrM   	__class__rl   )rE   ra   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.rL   )rE   exprsr=   s      r$   selectzInterchangeFrame.select   s    B 	 "#&&r#   N)rF   r   returnNone)ru   r
   )ru   r   )rR   strru   r   )ru   zpd.DataFrame)ru   zpa.Table)ru   zdict[str, DType])ru   z	list[str])ri   rw   ru   r   )ra   rw   ru   r
   )rs   rw   ru   r
   )r   r   r   r   r*   _versionrG   rJ   rN   rS   r\   r_   propertyrd   rg   rj   rq   rt   r"   r#   r$   r@   r@   M   sb    zzH5'S
	J7 
 
 < <')'r#   r@   c                    t        | d      S )NrC   )r   )objs    r$   supports_dataframe_interchanger|      s    300r#   )r<   ztuple[DtypeKind, int, Any, Any]ru   r   )r{   r   ru   zTypeIs[DataFrameLike])
__future__r   enumtypingr   r   r   narwhals._utilsr   r   r	   rV   r[   pyarrowpatyping_extensionsr
   r   rP   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#   