o
    Lh                     @  s   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
 d
ejZdddZG dd dZdddZdS )    )annotationsN)TYPE_CHECKINGAnyNoReturn)Versionparse_version)SelfTypeIsInterchangeSeries)DType)DataFrameLikec                   @  s(   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 r   r   `/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/narwhals/_interchange/dataframe.pyr      s    r   interchange_dtypetuple[DtypeKind, int, Any, Any]returnr   c                 C  s  t jj}| d tjkr9| d dkr| S | d dkr| S | d dkr)| S | d dkr3| S d}t	|| d tj
krn| d dkrJ| S | d dkrT| S | d dkr^| S | d dkrh| S d}t	|| d tjkr| 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)   msgr   r   r    'map_interchange_dtype_to_narwhals_dtype   sP   
r:   c                   @  s   e Zd ZejZd(ddZd)dd	Zd*ddZd+ddZ	d,ddZ
d-ddZed.ddZed/ddZd0dd Zd1d"d#Zd2d%d&Zd'S )3InterchangeFramedfr   r#   Nonec                 C  s   |  | _d S N)__dataframe___interchange_frame)selfr<   r   r   r    __init__N   s   zInterchangeFrame.__init__r   c                 C  s   | S r>   r   rA   r   r   r    __narwhals_dataframe__Q   s   z'InterchangeFrame.__narwhals_dataframe__r   c                 C  s   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)rA   r9   r   r   r    __native_namespace__T   s   z%InterchangeFrame.__native_namespace__namestrr   c                 C  s   ddl m} || j|S )Nr   r
   )narwhals._interchange.seriesr   r@   get_column_by_name)rA   rH   r   r   r   r    
get_column\   s   zInterchangeFrame.get_columnpd.DataFramec                 C  s8   dd l }t|dk rd|j }t||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__rF   apiinterchangefrom_dataframer@   )rA   pdr9   r   r   r    	to_pandasa   s   zInterchangeFrame.to_pandaspa.Tablec                 C  s   ddl m} || jS )Nr   )rS   )"pyarrow.interchange.from_dataframerS   r@   )rA   rS   r   r   r    to_arrowl   s   
zInterchangeFrame.to_arrowdict[str, DType]c                   s    fdd j  D S )Nc                   s    i | ]}|t  j|jqS r   )r:   r@   rK   dtype).0column_namerC   r   r    
<dictcomp>u   s    z+InterchangeFrame.schema.<locals>.<dictcomp>)r@   column_namesrC   r   rC   r    schemas   s   
zInterchangeFrame.schema	list[str]c                 C  s   t | j S r>   )listr@   r^   rC   r   r   r    columns|   s   zInterchangeFrame.columnsattrc                 C  s   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.rE   )rA   rc   r9   r   r   r    __getattr__   s   
zInterchangeFrame.__getattr__r^   c                 G  s2   | 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.)r@   select_columns_by_namera   hasattrrF   	__class__re   )rA   r^   framer9   r   r   r    simple_select   s   
zInterchangeFrame.simple_selectexprsc                 G  s   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.rE   )rA   rk   r9   r   r   r    select   s   zInterchangeFrame.selectN)r<   r   r#   r=   )r#   r   )r#   r   )rH   rI   r#   r   )r#   rM   )r#   rV   )r#   rY   )r#   r`   )rc   rI   r#   r   )r^   rI   r#   r   )rk   rI   r#   r   )r   r   r   r   r(   _versionrB   rD   rG   rL   rU   rX   propertyr_   rb   rd   rj   rl   r   r   r   r    r;   K   s    









r;   objr   TypeIs[DataFrameLike]c                 C  s
   t | dS )Nr?   )rg   )ro   r   r   r    supports_dataframe_interchange   s   
rq   )r!   r"   r#   r   )ro   r   r#   rp   )
__future__r   enumtypingr   r   r   narwhals._utilsr   r   rO   rT   pyarrowpatyping_extensionsr   r	   rJ   r   narwhals.dtypesr   narwhals.stable.v1.typingr   IntEnumr   r:   r;   rq   r   r   r   r    <module>   s    
.S