
    g                        d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 er d dl
Zd dlZd dl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 G d d      Zy)    )annotationsN)TYPE_CHECKING)Any)NoReturn)import_dtypes_module)parse_version)SelfInterchangeSeries)DType)Versionc                  (    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     T/var/www/openai/venv/lib/python3.12/site-packages/narwhals/_interchange/dataframe.pyr   r      s%    
CDEDFHKr!   r   c                   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(  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        j,                  k(  r|j/                         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   r   r   Int64Int32Int16Int8AssertionErrorr   UInt64UInt32UInt16UInt8r   Float64Float32r   Booleanr   Stringr   Datetimer   Categorical)interchange_dtypeversiondtypesmsgs       r"   'map_interchange_dtype_to_narwhals_dtyper;       s    "'*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ddZddZy)WrapInterchangeFramec                    || _         y N_interchange_frame)selfinterchange_frames     r"   __init__zWrapInterchangeFrame.__init__O   s
    "3r!   c                    | j                   S r?   r@   rB   s    r"   __dataframe__z"WrapInterchangeFrame.__dataframe__R   s    &&&r!   N)rC   InterchangeFramereturnNone)rI   rH   )r   r   r   rD   rG   r    r!   r"   r=   r=   N   s    4'r!   r=   c                  d    e Zd ZddZddZddZddZddZddZddZ	ddZ
	 	 	 	 	 	 	 	 dd	Zy
)rH   c                <    |j                         | _        || _        y r?   )rG   rA   _version)rB   dfr8   s      r"   rD   zInterchangeFrame.__init__W   s    "$"2"2"4r!   c                N    | j                  t        | j                        |      S )Nr8   )	__class__r=   rA   )rB   r8   s     r"   _change_versionz InterchangeFrame._change_version[   s(    ~~ !8!897  
 	
r!   c                    | S r?   r    rF   s    r"   __narwhals_dataframe__z'InterchangeFrame.__narwhals_dataframe__`   s    r!   c                    d}t        |      )NzCannot access native namespace for metadata-only 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)rB   r:   s     r"   __native_namespace__z%InterchangeFrame.__native_namespace__c   s    Y 	
 "#&&r!   c                h    ddl m}  || j                  j                  |      | j                        S )Nr   r
   rP   )narwhals._interchange.seriesr   rA   get_column_by_namerM   )rB   itemr   s      r"   __getitem__zInterchangeFrame.__getitem__k   s,    B ##66t<dmm
 	
r!   c                    dd l }t        |j                        t        d      k\  r/|j                  j                  j                  | j                        S d|j                   }t        |      )Nr   z1.5.0znConversion to pandas is achieved via interchange protocol which requires pandas>=1.5.0 to be installed, found )pandasr   __version__apiinterchangefrom_dataframerA   rV   )rB   pdr:   s      r"   	to_pandaszInterchangeFrame.to_pandasr   sc    (M',BB66%%44T5L5LMM99;8HJ  &c**r!   c                2    ddl m}  || j                        S )Nr   )rb   )pyarrow.interchangerb   rA   )rB   rb   s     r"   to_arrowzInterchangeFrame.to_arrow~   s    6d5566r!   c           	     H   |dk(  r`| j                   j                         D ci c]<  }|t        | j                   j                  |      j                  | j
                        > c}S |dk(  r#t        | j                   j                               S d| d}t        |      c c}w )Nschemacolumnsz
Attribute aG   is not supported for metadata-only 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.)rA   column_namesr;   rZ   dtyperM   listrV   )rB   attrcolumn_namer:   s       r"   __getattr__zInterchangeFrame.__getattr__   s    8 $(#:#:#G#G#I
 $JK	 D++>>{KQQMM  $J  Y//<<>?? B B 	 "#&&!s   ABc                    |st        d |D              sd}t        |      | j                  j                  |      }t	        |d      sd}t        |      | j                  |j                  | j                        S )Nc              3  <   K   | ]  }t        |t                y wr?   )
isinstancestr).0xs     r"   	<genexpr>z*InterchangeFrame.select.<locals>.<genexpr>   s     !De*Q"4es   z`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._dfzExpected interchange object to implement `_df` property to allow for recovering original object.
See https://github.com/data-apis/dataframe-api/issues/360.rP   )allrV   rA   select_columns_by_namehasattrrQ   rx   rM   )rB   exprsnamed_exprsr:   frames        r"   selectzInterchangeFrame.select   s    
 c!De!DDF  &c**''>>uEue$M  &e,,~~eii~??r!   N)rN   r   r8   r   rI   rJ   )rB   r	   r8   r   rI   r	   )rI   r   )rB   r	   rI   r   )r[   rt   rI   r   )rB   r	   rI   zpd.DataFrame)rB   r	   rI   zpa.Table)rn   rt   rI   r   )rB   r	   r|   r   r}   r   rI   r	   )r   r   r   rD   rR   rT   rW   r\   rd   rg   rp   r   r    r!   r"   rH   rH   V   sX     

'

+7
'(@@@ @ 
	@r!   rH   )r7   ztuple[DtypeKind, int, Any, Any]r8   r   rI   r   )
__future__r   enumtypingr   r   r   narwhals.utilsr   r   r^   rc   pyarrowpatyping_extensionsr	   rY   r   narwhals.dtypesr   r   IntEnumr   r;   r=   rH   r    r!   r"   <module>r      su    "      / (&>%& +6+AH+
+\' 'V@ V@r!   