o
    hT                     @  s   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	 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mZ d dlZd dlZd dlmZ d dlmZ d dlmZ edddddZG dd dZdS )    )annotations)	lru_cache)TYPE_CHECKING)AnyNget_ibis)Implementation)Version)import_dtypes_module)validate_backend_version)
ModuleType)SelfIbisInterchangeSeries)DType   )maxsize
ibis_dtyper   versionr	   returnr   c                   s`  t  |  r  S |  r  S |  r  S |  r$  S | 	 r, 
 S |  r4  S |  r<  S |  rD  S |  rL  S |  rT  S |  r\  S |  rd  S |  rl  S |  rt  S |  r t| j S | ! r " fdd| # D S | $ r % S | & r ' S | ( r ) S  * S )Nc                   s"   g | ]\}}  |t|qS  )Fieldnative_to_narwhals_dtype).0ibis_dtype_nameibis_dtype_fielddtypesr   r   L/var/www/vscode/kcb/lib/python3.10/site-packages/narwhals/_ibis/dataframe.py
<listcomp>=   s    z,native_to_narwhals_dtype.<locals>.<listcomp>)+r
   is_int64Int64is_int32Int32is_int16Int16is_int8Int8	is_uint64UInt64	is_uint32UInt32	is_uint16UInt16is_uint8UInt8
is_booleanBoolean
is_float64Float64
is_float32Float32	is_stringStringis_dateDateis_timestampDatetimeis_arrayListr   
value_type	is_structStructitems
is_decimalDecimalis_timeTime	is_binaryBinaryUnknown)r   r   r   r   r   r      sX   	r   c                   @  s   e Zd ZejZd1d	d
Zd2ddZd2ddZd3ddZ	d4ddZ
d5ddZd6ddZd7dd Zd8d"d#Zd8d$d%Zd9d'd(Zd:d)d*Zd;d+d,Zd<d.d/Zd0S )=IbisLazyFramedfr   backend_versiontuple[int, ...]r   r	   r   Nonec                C  s$   || _ || _|| _t| j| j d S N)_native_frame_version_backend_versionr   _implementation)selfrJ   rK   r   r   r   r   __init__R   s   zIbisLazyFrame.__init__c                 C  s   | j tjurd}t|| S )Nz;__narwhals_dataframe__ is not implemented for IbisLazyFrame)rP   r	   V1AttributeError)rS   msgr   r   r   __narwhals_dataframe__Z   s   z$IbisLazyFrame.__narwhals_dataframe__c                 C  s   | S rN   r   rS   r   r   r   __narwhals_lazyframe__a      z$IbisLazyFrame.__narwhals_lazyframe__r   c                 C  s   t  S rN   r   rY   r   r   r   __native_namespace__d   s   z"IbisLazyFrame.__native_namespace__namestrr   c                 C  s    ddl m} || j| | jdS )Nr   r   )r   )narwhals._ibis.seriesr   rO   rP   )rS   r]   r   r   r   r   
get_columng   s   zIbisLazyFrame.get_columnpd.DataFramec                 C  
   | j  S rN   )rO   	to_pandasrY   r   r   r   rc   l      
zIbisLazyFrame.to_pandaspa.Tablec                 C  rb   rN   )rO   
to_pyarrowrY   r   r   r   to_arrowo   rd   zIbisLazyFrame.to_arrowcolumn_namesr   c                 G  s   |  | jtj| S rN   )_with_nativerO   selectscols)rS   rh   r   r   r   simple_selectr   s   zIbisLazyFrame.simple_selectexprsc                 G  s   t rN   NotImplementedError)rS   rn   r   r   r   	aggregateu   r[   zIbisLazyFrame.aggregatec                 G  s   d}t |)Nz`select`-ing not by name is not supported for Ibis backend.

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.ro   )rS   rn   rW   r   r   r   rj   x   s   zIbisLazyFrame.selectattrc                   sL   |dkr fdd j   D S |dkrt j jS d| d}t|)Nschemac                      i | ]\}}|t | jqS r   r   rP   r   column_namer   rY   r   r   
<dictcomp>       z-IbisLazyFrame.__getattr__.<locals>.<dictcomp>columnsz
Attribute z is not supported for metadata-only dataframes.

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.)rO   rs   rA   listrz   rp   )rS   rr   rW   r   rY   r   __getattr__   s   

zIbisLazyFrame.__getattr__c                 C  s   | j | j|| jdS N)r   rK   )	__class__rO   rQ   )rS   r   r   r   r   _with_version      
zIbisLazyFrame._with_versionc                 C  s   | j || j| jdS r}   )r~   rP   rQ   )rS   rJ   r   r   r   ri      r   zIbisLazyFrame._with_nativedict[str, DType]c                   s    fdd j   D S )Nc                   rt   r   ru   rv   rY   r   r   rx      ry   z0IbisLazyFrame.collect_schema.<locals>.<dictcomp>)rO   rs   rA   rY   r   rY   r   collect_schema   s   
zIbisLazyFrame.collect_schemaN)rJ   r   rK   rL   r   r	   r   rM   )r   r   )r   r   )r]   r^   r   r   )r   ra   )r   re   )rh   r^   r   r   )rn   r   r   r   )rr   r^   r   r   )r   r	   r   r   )rJ   r   r   r   )r   r   )__name__
__module____qualname__r   IBISrR   rT   rX   rZ   r\   r`   rc   rg   rm   rq   rj   r|   r   ri   r   r   r   r   r   rI   O   s     












rI   )r   r   r   r	   r   r   )
__future__r   	functoolsr   typingr   r   ibis.selectors	selectorsrk   narwhals.dependenciesr   narwhals.utilsr   r	   r
   r   typesr   pandaspdpyarrowpatyping_extensionsr   r_   r   narwhals.dtypesr   r   rI   r   r   r   r   <module>   s(    4