
    }iO                       d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	Z	d dl	m
Z
 d dlmZmZmZmZmZmZmZmZmZ d dlmZ d d	lmZmZmZmZmZmZmZmZ d d
l m!Z! d dl"m#Z# erd dl$m%Z%m&Z&m'Z'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/Z0d dl1Z2d dl	m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlmAZA d dlBmCZC d dlmDZD d dlEmFZF d dlGmHZH d dlImJZK d dlLmMZMmNZNmOZO  G d ded          e          ZPdS )!    )annotations)reduce)and_)TYPE_CHECKINGAnyN)StarExpression)	DeferredTimeZoneFcatch_duckdb_exceptioncolevaluate_exprs_and_aliasesjoin_column_nameslitnative_to_narwhals_dtypewindow_expression)SQLLazyFrame)ImplementationValidateBackendVersionVersionextend_boolgenerate_temporary_column_nameparse_columns_to_droprequires
zip_strict
get_duckdb)InvalidOperationError)IterableIteratorMappingSequence)BytesIO)Path)
ModuleType)
Expression)SelfTypeIs)CompliantDataFrameAny)
DuckDBExprDuckDBGroupByDuckDBNamespaceDuckDBInterchangeSeries)duckdb_dtypes)_EagerAllowedImpl)_LimitedContext)	LazyFrame)DType	DataFrame)AsofJoinStrategyJoinStrategyUniqueKeepStrategyc                     e Zd Zej        ZdddzdZed{d            Ze	d|d            Z
ed}d            Zd~dZddZddZddZdd!Zdd%Zdd'Zdd,Zdd/Zdd1Zdd4Zdd5Zdd9Zddd<Zdd=Zdd?ZeddA            ZeddC            ZddEZddGZ ddHZ!ddIZ"ddNZ#ddQZ$ddYZ%dd^Z&dd_Z'dddZ(ddiZ)ddmZ*ddnZ+ddoZ,ddtZ- e.j/        du          ddv            Z0ddyZ1d:S )DuckDBLazyFrameF)validate_backend_versiondfduckdb.DuckDBPyRelationversionr   r<   boolreturnNonec               n    || _         || _        d | _        d | _        |r|                                  d S d S N)_native_frame_version_cached_native_schema_cached_columns_validate_backend_version)selfr=   r?   r<   s       N/home/jrussi/.local/lib/python3.11/site-packages/narwhals/_duckdb/dataframe.py__init__zDuckDBLazyFrame.__init__F   sM     79SW"15# 	-**,,,,,	- 	-    tuple[int, ...]c                4    | j                                         S rD   )_implementation_backend_versionrJ   s    rK   rQ   z DuckDBLazyFrame._backend_versionT   s    #44666rM   objduckdb.DuckDBPyRelation | AnyTypeIs[duckdb.DuckDBPyRelation]c                6    t          | t          j                  S rD   )
isinstanceduckdbDuckDBPyRelation)rS   s    rK   
_is_nativezDuckDBLazyFrame._is_nativeX   s    #v6777rM   datacontextr2   r&   c              &     | ||j                   S Nr?   )rF   )clsr[   r\   s      rK   from_nativezDuckDBLazyFrame.from_native\   s     s4!12222rM   argsr   kwdsILazyFrame[duckdb.DuckDBPyRelation] | DataFrameV1[duckdb.DuckDBPyRelation]c                    | j         t          j        u rddlm}  || d          S | j                             | d          S )Nr   r5   interchange)levellazy)rF   r   V1narwhals.stable.v1r6   	lazyframe)rJ   rb   rc   DataFrameV1s       rK   to_narwhalszDuckDBLazyFrame.to_narwhalsb   sU     =GJ&&CCCCCC;t=9999}&&t6&:::rM   c                N    | j         t          j        urd}t          |          | S )Nz=__narwhals_dataframe__ is not implemented for DuckDBLazyFrame)rF   r   ri   AttributeError)rJ   msgs     rK   __narwhals_dataframe__z&DuckDBLazyFrame.__narwhals_dataframe__k   s)    =
**QC %%%rM   c                    | S rD    rR   s    rK   __narwhals_lazyframe__z&DuckDBLazyFrame.__narwhals_lazyframe__r   s    rM   r$   c                    t                      S rD   r   rR   s    rK   __native_namespace__z$DuckDBLazyFrame.__native_namespace__u   s    ||rM   r-   c                0    ddl m}  || j                  S )Nr   r,   r_   )narwhals._duckdb.namespacer-   rF   )rJ   r-   s     rK   __narwhals_namespace__z&DuckDBLazyFrame.__narwhals_namespace__x   s)    >>>>>>t}5555rM   namestrr/   c                b    ddl m}  || j                            |          | j                  S )Nr   r.   r_   )narwhals._duckdb.seriesr/   nativeselectrF   )rJ   rz   r/   s      rK   
get_columnzDuckDBLazyFrame.get_column}   s<    CCCCCC&&t{'9'9$'?'?WWWWrM   Iterator[Expression]c              #  @   K   | j         D ]}t          |          V  d S rD   )columnsr   )rJ   rz   s     rK   _iter_columnszDuckDBLazyFrame._iter_columns   s2      L 	 	Dd))OOOO	 	rM   backend_EagerAllowedImpl | Nonekwargsr(   c                   ||t           j        u rWddlm} | j        dk    r| j                                        n| j                                        } ||d| j        d          S |t           j	        u r<ddl
m}  || j                                        t           j	        d| j        d          S |t           j        u r0ddlm}  || j                                        d| j        	          S d
| }t#          |          )Nr   )ArrowDataFrame)      T)r<   r?   validate_column_names)PandasLikeDataFrame)implementationr<   r?   r   )PolarsDataFrame)r<   r?   zUnsupported `backend` value: )r   PYARROWnarwhals._arrow.dataframer   rQ   r~   to_arrow_tablefetch_arrow_tablerF   PANDASnarwhals._pandas_like.dataframer   r=   POLARSnarwhals._polars.dataframer   pl
ValueError)rJ   r   r   r   
res_nativer   r   rp   s           rK   collectzDuckDBLazyFrame.collect   sT    ?g)???@@@@@@ (F22 **,,,[2244 
 ">)-&*	    n+++KKKKKK&&  -4)-&*    n+++BBBBBB"?  4    8g77oorM   nintc                \    |                      | j                            |                    S rD   )_with_nativer~   limit)rJ   r   s     rK   headzDuckDBLazyFrame.head   s&      !2!21!5!5666rM   column_namesc                F    |                       | j        j        |           S rD   )r   r~   r   )rJ   r   s     rK   simple_selectzDuckDBLazyFrame.simple_select   s#      !3!3\!BCCCrM   exprsr)   c                    d t          | g|R  D             }	 |                     | j                            |                    S # t          $ r}t          ||           d d }~ww xY w)Nc                >    g | ]\  }}|                     |          S rs   alias.0rz   vals      rK   
<listcomp>z-DuckDBLazyFrame.aggregate.<locals>.<listcomp>   s3     
 
 
 )cCIIdOO
 
 
rM   )r   r   r~   	aggregate	Exceptionr   rJ   r   	selectiones       rK   r   zDuckDBLazyFrame.aggregate   s    
 
-G-Uu-U-U-U
 
 
		<$$T[%:%:9%E%EFFF 	< 	< 	<(D11t;	<s   ,A 
A&A!!A&c                    d t          | g|R  D             }	 |                      | j        j        |           S # t          $ r}t          ||           d d }~ww xY w)Nc              3  F   K   | ]\  }}|                     |          V  d S rD   r   r   s      rK   	<genexpr>z)DuckDBLazyFrame.select.<locals>.<genexpr>   sA       
 
 )cCIIdOO
 
 
 
 
 
rM   )r   r   r~   r   r   r   r   s       rK   r   zDuckDBLazyFrame.select   s    
 
-G-Uu-U-U-U
 
 
		<$$%7T[%7%CDDD 	< 	< 	<(D11t;	<s   !; 
AAAr   Sequence[str]strictc                   t          | ||          fd| j        D             }|                      | j        j        |           S )Nr   c                6    g | ]}|vt          |          S rs   r   )r   rz   columns_to_drops     rK   r   z(DuckDBLazyFrame.drop.<locals>.<listcomp>   s)    WWW44;V;VSYY;V;V;VrM   )r   r   r   r~   r   )rJ   r   r   r   r   s       @rK   dropzDuckDBLazyFrame.drop   sS    /gfMMMWWWW4<WWW	  !3!3Y!?@@@rM   N_c                ,    |d}t          |          | S )Nz.`backend` argument is not supported for DuckDB)r   )rJ   r   r   rp   s       rK   rh   zDuckDBLazyFrame.lazy   s     
 BCS//!rM   c                L   t          t          | g|R            fd| j        D             }|                    d                                 D                        	 |                      | j        j        |           S # t          $ r}t          ||           d d }~ww xY w)Nc                    g | ]=}|v r(                     |                              |          nt          |          >S rs   )popr   r   )r   rz   new_columns_maps     rK   r   z0DuckDBLazyFrame.with_columns.<locals>.<listcomp>   s`     
 
 
  && %%++D111T
 
 
rM   c              3  F   K   | ]\  }}|                     |          V  d S rD   r   )r   rz   values      rK   r   z/DuckDBLazyFrame.with_columns.<locals>.<genexpr>   s2      SSKD%ekk$''SSSSSSrM   )
dictr   r   extenditemsr   r~   r   r   r   )rJ   r   resultr   r   s       @rK   with_columnszDuckDBLazyFrame.with_columns   s    9$GGGGHH
 
 
 
 	
 
 
 	SS?;P;P;R;RSSSSSS	<$$%7T[%7%@AAA 	< 	< 	<(D11t;	<s   !!B 
B#BB#	predicatec                     ||           d         }	 |                      | j                            |                    S # t          $ r}t	          ||           |d }~ww xY w)Nr   )r   r~   filterr   r   )rJ   r   maskr   s       rK   _filterzDuckDBLazyFrame._filter   sn    yq!	9$$T[%7%7%=%=>>> 	9 	9 	9(D11q8	9s   ,A   
A 
AA dict[str, DType]c                      j         1t          t           j         j        j                             _         t           j                   fdt           j        j         j        j                  D             S )Nc                D    i | ]\  }}|t          |j                  S rs   )r   rF   )r   column_nameduckdb_dtypedeferred_time_zonerJ   s      rK   
<dictcomp>z*DuckDBLazyFrame.schema.<locals>.<dictcomp>   sF     
 
 
 *\ 1dm-? 
 
 
rM   )rG   r   zipr   r~   typesr	   r   )rJ   r   s   `@rK   schemazDuckDBLazyFrame.schema   s    %- *.c$,@Q.R.R)S)SD&-dk::
 
 
 
 
 .8#T[%6. .	
 
 
 	
rM   	list[str]c                v    | j         ,| j        t          | j                  n| j        j        | _         | j         S rD   )rH   rG   listr   r~   r   rR   s    rK   r   zDuckDBLazyFrame.columns   sC    ' -9 T[!!![(  
 ##rM   pd.DataFramec                4    | j                                         S rD   )r~   r=   rR   s    rK   	to_pandaszDuckDBLazyFrame.to_pandas  s    {~~rM   pa.Tablec                n    |                                                      t          j                  j        S rD   )rh   r   r   r   r~   rR   s    rK   to_arrowzDuckDBLazyFrame.to_arrow	  s$    yy{{"">#9::AArM   c                :    |                      | j        |          S r^   )	__class__r~   )rJ   r?   s     rK   _with_versionzDuckDBLazyFrame._with_version  s    ~~dk7~;;;rM   c                :    |                      || j                  S r^   )r   rF   )rJ   r=   s     rK   r   zDuckDBLazyFrame._with_native  s    ~~b$-~888rM   keys$Sequence[str] | Sequence[DuckDBExpr]drop_null_keysr+   c               *    ddl m}  || ||          S )Nr   r*   )r   )narwhals._duckdb.group_byr+   )rJ   r   r   r+   s       rK   group_byzDuckDBLazyFrame.group_by  s-     	<;;;;;}T4GGGGrM   mappingMapping[str, str]c                |    | j         }fd|j        D             }|                      | j         j        |           S )Nc              3     K   | ]?}|v r(t          |                              |                   nt          |          V  @d S rD   )r   r   )r   rz   r   s     rK   r   z)DuckDBLazyFrame.rename.<locals>.<genexpr>  s`       
 
 /3gooCIIOOGDM***3t99
 
 
 
 
 
rM   )r~   r   r   r   )rJ   r   r=   r   s    `  rK   renamezDuckDBLazyFrame.rename  sW    [
 
 
 


 
 
	   !3!3Y!?@@@rM   otherhowr8   left_onSequence[str] | Noneright_onsuffixc               h   |dk    rdn|}|dk    rj| j         dk     rd| j          }t          |          | j                            d                              |j                            d                    }n|J |J d t          ||          D             }	t          t          |	          }
| j                            d                              |j                            d          |
|	          }|d
v rd | j	        D             }|j	        D ]}|| j	        v }|dk    r)|s'|
                    t          d| d                     :|dk    s|rD|||vr>|
                    t          d| d                              | |                      |||vr"|
                    t          |                      |j        |                     | j        j                  }n2|                    d                              | j        j                  }|                     |          S )Nfulloutercross)r   r      z;'duckdb>=1.1.4' is required for cross-join, found version: lhsrhsc              3  l   K   | ]/\  }}t          d | d          t          d| d          k    V  0dS lhs.""rhs."Nr   r   leftrights      rK   r   z'DuckDBLazyFrame.join.<locals>.<genexpr>6  sc        D% ODOOO$$,<E,<,<,<(=(==     rM   )	conditionr   >   r  r   innerr   c                4    g | ]}t          d | d          S )r  r  r   )r   xs     rK   r   z(DuckDBLazyFrame.join.<locals>.<listcomp>C  s(    >>>Ac,!,,,''>>>rM   r  r  lhs.*)rQ   NotImplementedErrorr~   	set_aliasr   r   r   r   joinr   appendr   r   r   r   )rJ   r   r   r   r   r   
native_howrp   relitr  r   rz   
col_in_lhsress                  rK   r  zDuckDBLazyFrame.join"  sr    !$vWW3
  $y00kTXTikk)#...+''..44U\5K5KE5R5RSSCC &&&''' #-gx#@#@  B %+4$4$4I+''..33&&u--#	 4  C <<<>>>>>F 	- 	-#'4<#7
(((MM#odooo"6"67777 G++ ,$,$4H8L8LMM#odooo"6"6"<"<=Nf=N=N"O"OPPPP%X)=)=MM#d)),,,#*f%//0ABBCC**W%%//0ABBC  %%%rM   by_leftby_rightstrategyr7   c          	     T   | j         }|j         }	g }
|0|.|
                    d t          ||          D                        ng x}}|dk    r<|
                    t	          d| d          t	          d| d          k               nS|dk    r<|
                    t	          d| d          t	          d| d          k               nd}t          |          t          t          |
          }dg}|	j        D ]k}||j        v r(|||h|vr|                    d| d	| | d           3|||h|vr/|                    t          t	          |                               ld
d
                    |           d| d}|                     t          j        |                    S )Nc              3  l   K   | ]/\  }}t          d | d          t          d| d          k    V  0dS r   r   r  s      rK   r   z,DuckDBLazyFrame.join_asof.<locals>.<genexpr>c  sc        D% ODOOO$$,<E,<,<,<(=(==     rM   backwardr  r  r  forwardzKOnly 'backward' and 'forward' strategies are currently supported for DuckDBr  z" as "z
            SELECT ,zD
            FROM lhs
            ASOF LEFT JOIN rhs
            ON 
            )r~   r   r   r  r   r  r   r   r   r{   r  r   rX   sql)rJ   r   r   r   r  r  r  r   r   r   
conditionsrp   r  r   rz   querys                   rK   	join_asofzDuckDBLazyFrame.join_asofT  s'    kl')
8#7  #-gx#@#@      
 "$#Ghz!!c"4'"4"4"455=PX=P=P=P9Q9QQRRRR""c"4'"4"4"455=PX=P=P=P9Q9QQRRRR_C%c*** &tZ 8 8	K 	. 	.Ds{"" D0EH0E$E$EAdAA$AAAABBBB!T(1FX1F%F%Fc#d))nn---HHV$$  	     E!2!2333rM   c                    | j         S rD   )r   rR   s    rK   collect_schemazDuckDBLazyFrame.collect_schema  s
    {rM   subsetkeepr9   order_byc                  |p| j         }|                     |          x}r|t          d| j         d          }|r#|dk    rt          dt	          |                    nd }|dk    r1t          t          dt                                ||pd||	          }n#t          t          d
          ||pd||	          }|                     | j	        
                    t                      |                    |                                        t          |          t          d          k                                            |gd          S )N   
row_index_)prefixlastTnonecountrs   )
descending
nulls_last
row_numberr   Fr   )r   _check_columns_existr   r   lenr   r
   r   r   r~   r   r   r   r   r   r   )	rJ   r$  r%  r&  subset_errortmp_nameflagsexprs	            rK   uniquezDuckDBLazyFrame.unique  sY    (DL--g6665 	K1!T\,WWW4<YD#h--000UY6>>$'>++,,B    DD %,B    D   K~//H1E1EFFMMHQ' 
 
 $z%$
(
(		)rM   byr.  bool | Sequence[bool]r/  c                   t          |t          |                    }|rd t          ||          D             }nd t          ||          D             }|                      | j        j        |           S )Nc              3     K   | ]]\  }}|s!t          |                                          n2t          |                                                                          V  ^d S rD   )r   r/  descr   rz   r=  s      rK   r   z'DuckDBLazyFrame.sort.<locals>.<genexpr>  sr        D$ /3UD		$$&&&D		8H8H8S8S8U8U     rM   c              3     K   | ]]\  }}|s!t          |                                          n2t          |                                                                          V  ^d S rD   )r   nulls_firstr=  r>  s      rK   r   z'DuckDBLazyFrame.sort.<locals>.<genexpr>  sr        D$ 04WD		%%'''T9I9I9U9U9W9W     rM   )r   r2  r   r   r~   sort)rJ   r.  r/  r9  r  s        rK   rA  zDuckDBLazyFrame.sort  s     SWW55
 		 ",R"<"<  BB
 ",R"<"<  B   !1!12!6777rM   kIterable[str]reversec                  | j         }t          |          }t          |t                    rt	          | t          |                    }nt          d |D                       }t          t          d          ||t	          dt          |                              }|t          |          k    }d| d}| 
                    t          j        |                    S )Nc              3     K   | ]}| V  d S rD   rs   )r   revs     rK   r   z(DuckDBLazyFrame.top_k.<locals>.<genexpr>  s$      ::33w::::::rM   r0  T)r&  r.  r/  z@
            SELECT *
            FROM _rel
            QUALIFY z	
        )r~   r   rW   r@   r   r2  tupler   r
   r   r   rX   r  )	rJ   rB  r9  rD  _relr.  r7  r  r   s	            rK   top_kzDuckDBLazyFrame.top_k  s    {"XXgt$$ 	;$[#b''::JJ::':::::J lOO!"4R11	
 
 
 CFFN	   
   E!2!2333rM   c                    ||n| j         }t          t          d |D                       }|                     | j                            |                    S )Nc              3  X   K   | ]%}t          |                                          V  &d S rD   )r   	isnotnull)r   rz   s     rK   r   z-DuckDBLazyFrame.drop_nulls.<locals>.<genexpr>  s4      &Q&Qs4yy':':'<'<&Q&Q&Q&Q&Q&QrM   )r   r   r   r   r~   r   )rJ   r$  r3  keep_conditions       rK   
drop_nullszDuckDBLazyFrame.drop_nulls  sT    ".&&DL&Q&Q&Q&Q&QRR  !3!3N!C!CDDDrM   c                   | j         j        }|                                 }D ]*}||         }||j        k    rd| d}t	          |          +t                    dk    rd}t          |          t          d                   | j        }| j	        }t          d          }	                                t          d          z  |	k    }
 |                    |
          j        fd|D              } |                    |
           j        fd|D              }|                     |                    |                    S )	Nz-`explode` operation not supported for dtype `z`, expected List typer   zExploding on multiple columns is not supported with DuckDB backend since we cannot guarantee that the exploded columns have matching element counts.r   r2  c              3  j   K   | ]-}|v r#t          d                               |          n|V  .dS )unnestN)r
   r   )r   rz   col_to_exploder   s     rK   r   z*DuckDBLazyFrame.explode.<locals>.<genexpr>  s^         <@7??(N++11$777PT     rM   c              3  h   K   | ],}|v r"t          d                               |          n|V  -d S rD   )r   r   )r   rz   r   s     rK   r   z*DuckDBLazyFrame.explode.<locals>.<genexpr>  sV         *.D		%%%d     rM   )rF   dtypesr#  Listr   r2  r  r   r~   r   r   rM  r
   r   r   r   union)rJ   r   rU  r   rz   dtyperp   r  original_columnszeronot_null_conditionnon_null_relnull_relrS  s    `           @rK   explodezDuckDBLazyFrame.explode  s   %$$&& 	1 	1D4LE##)E ) ) )  ,C000 $ w<<1^  &c***WQZk<1vv+5577!E>:R:RRUYY<szz"455<    ,  
 :3::11229   ,  
   !3!3H!=!=>>>rM   onindexvariable_name
value_namec                p  
 |g n|
|
fd| j         D             n|}|dk    rd}t          |          |dk    rd}t          |          t          | }| j        }d| dt	          |           dt	          |           d}	|                      t          j        |	          j        g 
||           S )	Nc                    g | ]}|v|	S rs   rs   )r   cindex_s     rK   r   z+DuckDBLazyFrame.unpivot.<locals>.<listcomp>  s    :::Q!6//q///rM    z:`variable_name` cannot be empty string for duckdb backend.z7`value_name` cannot be empty string for duckdb backend.z)
            unpivot _rel
            on z'
            into
                name z
                value r  )	r   r  r   r~   r   r   rX   r  r   )rJ   r_  r`  ra  rb  on_rp   
unpivot_onrI  r   rf  s             @rK   unpivotzDuckDBLazyFrame.unpivot  s
    }%>@j::::$,::::bBNC%c***KC%c***&,
{  -((	 
 :     $FJu$&J&J&Jz&JK
 
 	
rM   )r      c                   |d}t          |          t          t          d          |          t          d          z
                      |          }|                     | j                            |t                                          S )Nz5Cannot pass `order_by` to `with_row_index` for DuckDBr0  )r&  r   )		TypeErrorr   r
   r   r   r   r~   r   r   )rJ   rz   r&  rp   r7  s        rK   with_row_indexzDuckDBLazyFrame.with_row_index  s}    ICC.. !!L//HEEEANUU
 
   !3!3D.:J:J!K!KLLLrM   filestr | Path | BytesIOc                H    | j         }d| d}t          j        |           d S )Nz7
            COPY (SELECT * FROM _rel)
            TO 'z+'
            (FORMAT parquet)
            )r~   rX   r  )rJ   ro  rI  r   s       rK   sink_parquetzDuckDBLazyFrame.sink_parquet$  s:    {  
 	
5rM   )r=   r>   r?   r   r<   r@   rA   rB   )rA   rN   )rS   rT   rA   rU   )r[   r>   r\   r2   rA   r&   )rb   r   rc   r   rA   rd   )rA   r&   )rA   r$   )rA   r-   )rz   r{   rA   r/   )rA   r   )r   r   r   r   rA   r(   )r   r   rA   r&   )r   r{   rA   r&   )r   r)   rA   r&   )r   r   r   r@   rA   r&   rD   )r   rB   r   rB   rA   r&   )r   r)   rA   r&   )rA   r   )rA   r   )rA   r   )rA   r   )r?   r   rA   r&   )r=   r>   rA   r&   )r   r   r   r@   rA   r+   )r   r   rA   r&   )r   r&   r   r8   r   r   r   r   r   r{   rA   r&   )r   r&   r   r{   r   r{   r  r   r  r   r  r7   r   r{   rA   r&   )r$  r   r%  r9   r&  r   rA   r&   )r9  r{   r.  r:  r/  r@   rA   r&   )rB  r   r9  rC  rD  r:  rA   r&   )r$  r   rA   r&   )r   r   rA   r&   )
r_  r   r`  r   ra  r{   rb  r{   rA   r&   )rz   r{   r&  r   rA   r&   )ro  rp  rA   rB   )2__name__
__module____qualname__r   DUCKDBrP   rL   propertyrQ   staticmethodrZ   classmethodra   rm   rq   rt   rv   ry   r   r   r   r   r   r   r   r   rh   r   r   r   r   r   r   r   r   r   r   r  r!  r#  r8  rA  rJ  rO  r^  rj  r   backend_versionrn  rr  rs   rM   rK   r;   r;   <   s        %+O */- - - - - - 7 7 7 X7 8 8 8 \8 3 3 3 [3
; ; ; ;         6 6 6 6
X X X X
   % % % %N7 7 7 7D D D D< < < << < < <A A A A
    < < < <9 9 9 9 
 
 
 X
  $ $ $ X$       B B B B< < < <9 9 9 9H H H HA A A A0& 0& 0& 0&d-4 -4 -4 -4^    )  )  )  )D8 8 8 84 4 4 4*E E E E
'? '? '? '?R
 
 
 
B Xf%%M M M &%M     rM   r;   )r)   r>   rd   )Q
__future__r   	functoolsr   operatorr   typingr   r   rX   r   narwhals._duckdb.utilsr	   r
   r   r   r   r   r   r   r   narwhals._sql.dataframer   narwhals._utilsr   r   r   r   r   r   r   r   narwhals.dependenciesr   narwhals.exceptionsr   collections.abcr   r   r    r!   ior"   pathlibr#   r   r$   pandaspdpyarrowpar%   typing_extensionsr&   r'   narwhals._compliant.typingr(   narwhals._duckdb.exprr)   r   r+   rx   r-   r}   r/   r0   narwhals._typingr1   r2   narwhals.dataframer3   narwhals.dtypesr4   rj   r6   rl   narwhals.typingr7   r8   r9   r;   rs   rM   rK   <module>r     sR   " " " " " "             % % % % % % % %  ! ! ! ! ! !
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 1 0 0 0 0 0	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 - , , , , , 5 5 5 5 5 5 SEEEEEEEEEEEE      !!!!!!........@@@@@@000000777777::::::??????444444222222//////,,,,,,%%%%%%;;;;;;RRRRRRRRRRo o o o o	U
 o o o o orM   