
    hh                        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dS )    )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	dS )		DtypeKindr                     N)
__name__
__module____qualname__INTUINTFLOATBOOLSTRINGDATETIMECATEGORICAL     V/var/www/histauto/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)selfrA   s     r#   __init__zInterchangeFrame.__init__N   s    "$"2"2"4"4r"   r	   c                    | S rD   r!   rG   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)rG   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   rF   get_column_by_name)rG   rP   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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__rN   apiinterchangefrom_dataframerF   )rG   pdr=   s      r#   	to_pandaszInterchangeFrame.to_pandasa   si    y((L;=>L L  &c***v!001HIIIr"   pa.Tablec                .    ddl m}  || j                  S )Nr   )r]   )"pyarrow.interchange.from_dataframer]   rF   )rG   r]   s     r#   to_arrowzInterchangeFrame.to_arrowl   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>   rF   rT   dtype).0column_namerG   s     r#   
<dictcomp>z+InterchangeFrame.schema.<locals>.<dictcomp>u   sO     
 
 
  @'::;GGM 
 
 
r"   )rF   column_namesrJ   s   `r#   schemazInterchangeFrame.schemas   s?    
 
 
 
  $6CCEE	
 
 
 	
r"   	list[str]c                N    t          | j                                                  S rD   )listrF   rk   rJ   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.rM   )rG   rq   r=   s      r#   __getattr__zInterchangeFrame.__getattr__   s1    B B B B 	 "#&&&r"   rk   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.)rF   select_columns_by_namero   hasattrrN   	__class__ru   )rG   rk   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.rM   )rG   r{   r=   s      r#   selectzInterchangeFrame.select   s    B 	 "#&&&r"   N)rA   r   r&   rB   )r&   r	   )r&   r   )rP   rQ   r&   r   )r&   rV   )r&   r`   )r&   rd   )r&   rm   )rq   rQ   r&   r   )rk   rQ   r&   r	   )r{   rQ   r&   r	   )r   r   r   r   r,   _versionrH   rK   rO   rU   r_   rc   propertyrl   rp   rs   rz   r}   r!   r"   r#   r@   r@   K   s       zH5 5 5 5   ' ' ' 'S S S S
	J 	J 	J 	J7 7 7 7 
 
 
 X
 < < < X<' ' ' ') ) ) )' ' ' ' ' 'r"   r@   objr   TypeIs[DataFrameLike]c                "    t          | d          S )NrE   )rw   )r   s    r#   supports_dataframe_interchanger      s    3(((r"   )r$   r%   r&   r   )r   r   r&   r   )
__future__r   enumtypingr   r   r   narwhals._utilsr   r   rY   r^   pyarrowpatyping_extensionsr	   r
   rS   r   narwhals.dtypesr   narwhals.stable.v1.typingr   IntEnumr   r>   r@   r   r!   r"   r#   <module>r      sT   " " " " " "  / / / / / / / / / / 2 2 2 2 2 2 2 2 8........>>>>>>%%%%%%777777       + + + +\P' P' P' P' P' P' P' P'f) ) ) ) ) )r"   