
    hhP                       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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l0Z1d dl2Z3d dl	m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA d dlmBZB d dlCmDZD d dlmEZE d dlFmGZG d dlHmIZI d dlJmKZL d dlMmNZNmOZOmPZP  G d ded          e          ZQdS )!    )annotations)reduce)and_)TYPE_CHECKINGAnyN)StarExpression)	DeferredTimeZoneFcatch_duckdb_exceptioncolevaluate_exprsjoin_column_nameslitnative_to_narwhals_dtypewindow_expression)SQLLazyFrame)	ImplementationValidateBackendVersionVersionextend_boolgenerate_temporary_column_namenot_implemented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d|dZed}d            Ze	d~d            Z
edd            ZddZddZdd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Z1 e2j3        dz          Z4 e2j3        d{          Z5d: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       Q/var/www/histauto/venv/lib/python3.11/site-packages/narwhals/_duckdb/dataframe.py__init__zDuckDBLazyFrame.__init__G   sM     79SW"15# 	-**,,,,,	- 	-    tuple[int, ...]c                4    | j                                         S rE   )_implementation_backend_versionrK   s    rL   rR   z DuckDBLazyFrame._backend_versionU   s    #44666rN   objduckdb.DuckDBPyRelation | AnyTypeIs[duckdb.DuckDBPyRelation]c                6    t          | t          j                  S rE   )
isinstanceduckdbDuckDBPyRelation)rT   s    rL   
_is_nativezDuckDBLazyFrame._is_nativeY   s    #v6777rN   datacontextr3   r'   c              &     | ||j                   S Nr@   )rG   )clsr\   r]   s      rL   from_nativezDuckDBLazyFrame.from_native]   s     s4!12222rN   argsr   kwdsILazyFrame[duckdb.DuckDBPyRelation] | DataFrameV1[duckdb.DuckDBPyRelation]c                    | j         t          j        u rddlm}  || d          S | j                             | d          S )Nr   r6   interchange)levellazy)rG   r   V1narwhals.stable.v1r7   	lazyframe)rK   rc   rd   DataFrameV1s       rL   to_narwhalszDuckDBLazyFrame.to_narwhalsc   sU     =GJ&&CCCCCC;t=9999}&&t6&:::rN   c                N    | j         t          j        urd}t          |          | S )Nz=__narwhals_dataframe__ is not implemented for DuckDBLazyFrame)rG   r   rj   AttributeError)rK   msgs     rL   __narwhals_dataframe__z&DuckDBLazyFrame.__narwhals_dataframe__l   s)    =
**QC %%%rN   c                    | S rE    rS   s    rL   __narwhals_lazyframe__z&DuckDBLazyFrame.__narwhals_lazyframe__s   s    rN   r%   c                    t                      S rE   r   rS   s    rL   __native_namespace__z$DuckDBLazyFrame.__native_namespace__v   s    ||rN   r.   c                0    ddl m}  || j                  S )Nr   r-   r`   )narwhals._duckdb.namespacer.   rG   )rK   r.   s     rL   __narwhals_namespace__z&DuckDBLazyFrame.__narwhals_namespace__y   s)    >>>>>>t}5555rN   namestrr0   c                b    ddl m}  || j                            |          | j                  S )Nr   r/   r`   )narwhals._duckdb.seriesr0   nativeselectrG   )rK   r{   r0   s      rL   
get_columnzDuckDBLazyFrame.get_column~   s<    CCCCCC&&t{'9'9$'?'?WWWWrN   Iterator[Expression]c              #  @   K   | j         D ]}t          |          V  d S rE   )columnsr   )rK   r{   s     rL   _iter_columnszDuckDBLazyFrame._iter_columns   s2      L 	 	Dd))OOOO	 	rN   backend_EagerAllowedImpl | Nonekwargsr)   c                
   ||t           j        u rXd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   rR   r   arrowfetch_arrow_tablerG   PANDASnarwhals._pandas_like.dataframer   r>   POLARSnarwhals._polars.dataframer   pl
ValueError)rK   r   r   r   retr   r   rq   s           rL   collectzDuckDBLazyFrame.collect   sL    ?g)???@@@@@@$v--k''))k3355!>)-&*	    n+++KKKKKK&&  -4)-&*    n+++BBBBBB"?  4    8g77oorN   nintc                \    |                      | j                            |                    S rE   )_with_nativer   limit)rK   r   s     rL   headzDuckDBLazyFrame.head   s&      !2!21!5!5666rN   column_namesc                F    |                       | j        j        |           S rE   )r   r   r   )rK   r   s     rL   simple_selectzDuckDBLazyFrame.simple_select   s#      !3!3\!BCCCrN   exprsr*   c                    d t          | g|R  D             }	 |                     | j                            |                    S # t          $ r}t          ||           d d }~ww xY w)Nc                >    g | ]\  }}|                     |          S rt   alias.0r{   vals      rL   
<listcomp>z-DuckDBLazyFrame.aggregate.<locals>.<listcomp>   s&    SSSsSYYt__SSSrN   )r   r   r   	aggregate	Exceptionr   rK   r   	selectiones       rL   r   zDuckDBLazyFrame.aggregate   s    SSnT6RE6R6R6RSSS		<$$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 rE   r   r   s      rL   	<genexpr>z)DuckDBLazyFrame.select.<locals>.<genexpr>   s0      SSsSYYt__SSSSSSrN   )r   r   r   r   r   r   r   s       rL   r   zDuckDBLazyFrame.select   s|    SSnT6RE6R6R6RSSS		<$$%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 rt   r   )r   r{   columns_to_drops     rL   r   z(DuckDBLazyFrame.drop.<locals>.<listcomp>   s)    WWW44;V;VSYY;V;V;VrN   )r   r   r   r   r   )rK   r   r   r   r   s       @rL   dropzDuckDBLazyFrame.drop   sS    /gfMMMWWWW4<WWW	  !3!3Y!?@@@rN   N_c                ,    |d}t          |          | S )Nz.`backend` argument is not supported for DuckDB)r   )rK   r   r   rq   s       rL   ri   zDuckDBLazyFrame.lazy   s     
 BCS//!rN   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 rt   )popr   r   )r   r{   new_columns_maps     rL   r   z0DuckDBLazyFrame.with_columns.<locals>.<listcomp>   s`     
 
 
  && %%++D111T
 
 
rN   c              3  F   K   | ]\  }}|                     |          V  d S rE   r   )r   r{   values      rL   r   z/DuckDBLazyFrame.with_columns.<locals>.<genexpr>   s2      SSKD%ekk$''SSSSSSrN   )
dictr   r   extenditemsr   r   r   r   r   )rK   r   resultr   r   s       @rL   with_columnszDuckDBLazyFrame.with_columns   s    ~d;U;;;<<
 
 
 
 	
 
 
 	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 d }~ww xY w)Nr   )r   r   filterr   r   )rK   r   maskr   s       rL   r   zDuckDBLazyFrame.filter   sn    yq!	<$$T[%7%7%=%=>>> 	< 	< 	<(D11t;	<s   ,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 rt   )r   rG   )r   column_nameduckdb_dtypedeferred_time_zonerK   s      rL   
<dictcomp>z*DuckDBLazyFrame.schema.<locals>.<dictcomp>   sF     
 
 
 *\ 1dm-? 
 
 
rN   )rH   r   zipr   r   typesr	   r   )rK   r   s   `@rL   schemazDuckDBLazyFrame.schema   s    %- *.c$,@Q.R.R)S)SD&-dk::
 
 
 
 
 .8#T[%6. .	
 
 
 	
rN   	list[str]c                v    | j         ,| j        t          | j                  n| j        j        | _         | j         S rE   )rI   rH   listr   r   r   rS   s    rL   r   zDuckDBLazyFrame.columns   sC    ' -9 T[!!![(  
 ##rN   pd.DataFramec                4    | j                                         S rE   )r   r>   rS   s    rL   	to_pandaszDuckDBLazyFrame.to_pandas  s    {~~rN   pa.Tablec                n    |                                                      t          j                  j        S rE   )ri   r   r   r   r   rS   s    rL   to_arrowzDuckDBLazyFrame.to_arrow  s$    yy{{"">#9::AArN   c                :    |                      | j        |          S r_   )	__class__r   )rK   r@   s     rL   _with_versionzDuckDBLazyFrame._with_version	  s    ~~dk7~;;;rN   c                :    |                      || j                  S r_   )r   rG   )rK   r>   s     rL   r   zDuckDBLazyFrame._with_native  s    ~~b$-~888rN   keys$Sequence[str] | Sequence[DuckDBExpr]drop_null_keysr,   c               *    ddl m}  || ||          S )Nr   r+   )r   )narwhals._duckdb.group_byr,   )rK   r   r   r,   s       rL   group_byzDuckDBLazyFrame.group_by  s-     	<;;;;;}T4GGGGrN   mappingMapping[str, str]c                |    | j         }fd|j        D             }|                      | j         j        |           S )Nc              3     K   | ]?}|v r(t          |                              |                   nt          |          V  @d S rE   )r   r   )r   r{   r   s     rL   r   z)DuckDBLazyFrame.rename.<locals>.<genexpr>  s`       
 
 /3gooCIIOOGDM***3t99
 
 
 
 
 
rN   )r   r   r   r   )rK   r   r>   r   s    `  rL   renamezDuckDBLazyFrame.rename  sW    [
 
 
 


 
 
	   !3!3Y!?@@@rN   otherhowr9   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   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      rL   r   z'DuckDBLazyFrame.join.<locals>.<genexpr>2  sc        D% ODOOO$$,<E,<,<,<(=(==     rN   )	conditionr   >   r  r   innerr   c                4    g | ]}t          d | d          S )r   r  r   )r   xs     rL   r   z(DuckDBLazyFrame.join.<locals>.<listcomp>?  s(    >>>Ac,!,,,''>>>rN   r  r  lhs.*)rR   NotImplementedErrorr   	set_aliasr   r   r   r   joinr   appendr   r   r   r   )rK   r   r   r   r   r   
native_howrq   relitr  r   r{   
col_in_lhsress                  rL   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  %%%rN   by_leftby_rightstrategyr8   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      rL   r   z,DuckDBLazyFrame.join_asof.<locals>.<genexpr>_  sc        D% ODOOO$$,<E,<,<,<(=(==     rN   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   rY   sql)rK   r   r   r   r  r  r  r   r   r   
conditionsrq   r  r   r{   querys                   rL   	join_asofzDuckDBLazyFrame.join_asofP  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3rN   c                    | j         S rE   )r   rS   s    rL   collect_schemazDuckDBLazyFrame.collect_schema  s
    {rN   subsetkeepr:   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countrt   )
descending
nulls_last
row_numberr   Fr   )r   _check_columns_existr   r   lenr   r
   r   r   r   r   r   r   r   r   r   )	rK   r#  r$  r%  subset_errortmp_nameflagsexprs	            rL   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%$
(
(		)rN   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 rE   )r   r.  descr   r{   r<  s      rL   r   z'DuckDBLazyFrame.sort.<locals>.<genexpr>  sr        D$ /3UD		$$&&&D		8H8H8S8S8U8U     rN   c              3     K   | ]]\  }}|s!t          |                                          n2t          |                                                                          V  ^d S rE   )r   nulls_firstr<  r=  s      rL   r   z'DuckDBLazyFrame.sort.<locals>.<genexpr>  sr        D$ 04WD		%%'''T9I9I9U9U9W9W     rN   )r   r1  r   r   r   sort)rK   r-  r.  r8  r  s        rL   r@  zDuckDBLazyFrame.sort  s     SWW55
 		 ",R"<"<  BB
 ",R"<"<  B   !1!12!6777rN   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 rE   rt   )r   revs     rL   r   z(DuckDBLazyFrame.top_k.<locals>.<genexpr>  s$      ::33w::::::rN   r/  T)r%  r-  r.  z@
            SELECT *
            FROM _rel
            QUALIFY z	
        )r   r   rX   rA   r   r1  tupler   r
   r   r   rY   r  )	rK   rA  r8  rC  _relr-  r6  r  r  s	            rL   top_kzDuckDBLazyFrame.top_k  s    {"XXgt$$ 	;$[#b''::JJ::':::::J lOO!"4R11	
 
 
 CFFN	   
   E!2!2333rN   c                    ||n| j         }t          t          d |D                       }|                     | j                            |                    S )Nc              3  X   K   | ]%}t          |                                          V  &d S rE   )r   	isnotnull)r   r{   s     rL   r   z-DuckDBLazyFrame.drop_nulls.<locals>.<genexpr>  s4      &Q&Qs4yy':':'<'<&Q&Q&Q&Q&Q&QrN   )r   r   r   r   r   r   )rK   r#  r2  keep_conditions       rL   
drop_nullszDuckDBLazyFrame.drop_nulls  sT    ".&&DL&Q&Q&Q&Q&QRR  !3!3N!C!CDDDrN   c                   | j         j        }|                                 }D ]*}||         }||j        k    rd| d}t	          |          +t                    dk    rd}t          |          t          d                   | j        }| j	        }
                                t          d          z  t          d          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   r1  c              3  j   K   | ]-}|v r#t          d                               |          n|V  .dS )unnestN)r
   r   )r   r{   col_to_exploder   s     rL   r   z*DuckDBLazyFrame.explode.<locals>.<genexpr>  s^         <@7??(N++11$777PT     rN   c              3  h   K   | ],}|v r"t          d                               |          n|V  -d S rE   )r   r   )r   r{   r   s     rL   r   z*DuckDBLazyFrame.explode.<locals>.<genexpr>  sV         *.D		%%%d     rN   )rG   dtypesr"  Listr   r1  r  r   r   r   rL  r
   r   r   r   r   union)rK   r   rT  r   r{   dtyperq   r  original_columnsnot_null_conditionnon_null_relnull_relrR  s    `          @rL   explodezDuckDBLazyFrame.explode  s   %$$&& 	1 	1D4LE##)E ) ) )  ,C000 $ w<<1^  &c***WQZk<+5577!E>:R:RRUXV
 V
 
 =szz"455<    ,  
 :3::11229   ,  
   !3!3H!=!=>>>rN   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 rt   rt   )r   cindex_s     rL   r   z+DuckDBLazyFrame.unpivot.<locals>.<listcomp>  s    :::Q!6//q///rN    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   rY   r  r   )rK   r]  r^  r_  r`  on_rq   
unpivot_onrH  r  rd  s             @rL   unpivotzDuckDBLazyFrame.unpivot  s
    }%>@j::::$,::::bBNC%c***KC%c***&,
{  -((	 
 :     $FJu$&J&J&Jz&JK
 
 	
rN   )r      c                   |d}t          |          t          t          d          |          t          d          z
                      |          }|                     | j                            |t                                          S )Nz5Cannot pass `order_by` to `with_row_index` for DuckDBr/  )r%  r   )		TypeErrorr   r
   r   r   r   r   r   r   )rK   r{   r%  rq   r6  s        rL   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LrN   filestr | Path | BytesIOc                H    | j         }d| d}t          j        |           d S )Nz7
            COPY (SELECT * FROM _rel)
            TO 'z+'
            (FORMAT parquet)
            )r   rY   r  )rK   rm  rH  r  s       rL   sink_parquetzDuckDBLazyFrame.sink_parquet!  s:    {  
 	
5rN   zO`LazyFrame.gather_every` is deprecated and will be removed in a future version.zG`LazyFrame.tail` is deprecated and will be removed in a future version.)r>   r?   r@   r   r=   rA   rB   rC   )rB   rO   )rT   rU   rB   rV   )r\   r?   r]   r3   rB   r'   )rc   r   rd   r   rB   re   )rB   r'   )rB   r%   )rB   r.   )r{   r|   rB   r0   )rB   r   )r   r   r   r   rB   r)   )r   r   rB   r'   )r   r|   rB   r'   )r   r*   rB   r'   )r   r   r   rA   rB   r'   rE   )r   rC   r   rC   rB   r'   )r   r*   rB   r'   )rB   r   )rB   r   )rB   r   )rB   r   )r@   r   rB   r'   )r>   r?   rB   r'   )r   r   r   rA   rB   r,   )r   r   rB   r'   )r   r'   r   r9   r   r   r   r   r   r|   rB   r'   )r   r'   r   r|   r   r|   r  r   r  r   r  r8   r   r|   rB   r'   )r#  r   r$  r:   r%  r   rB   r'   )r8  r|   r-  r9  r.  rA   rB   r'   )rA  r   r8  rB  rC  r9  rB   r'   )r#  r   rB   r'   )r   r   rB   r'   )
r]  r   r^  r   r_  r|   r`  r|   rB   r'   )r{   r|   r%  r   rB   r'   )rm  rn  rB   rC   )6__name__
__module____qualname__r   DUCKDBrQ   rM   propertyrR   staticmethodr[   classmethodrb   rn   rr   ru   rw   rz   r   r   r   r   r   r   r   r   ri   r   r   r   r   r   r   r   r   r   r   r  r   r"  r7  r@  rI  rN  r\  rh  r   backend_versionrl  rp  r   
deprecatedgather_everytailrt   rN   rL   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
   $ $ $ $L7 7 7 7D D D D< < < << < < <A A A A
    < < < << < < < 
 
 
 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
(? (? (? (?T
 
 
 
B Xf%%M M M &%M    .?-Y L &?%Q DDDrN   r<   )r*   r?   re   )R
__future__r   	functoolsr   operatorr   typingr   r   rY   r   narwhals._duckdb.utilsr	   r
   r   r   r   r   r   r   r   narwhals._sql.dataframer   narwhals._utilsr   r   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,   ry   r.   r~   r0   r1   narwhals._typingr2   r3   narwhals.dataframer4   narwhals.dtypesr5   rk   r7   rm   narwhals.typingr8   r9   r:   r<   rt   rN   rL   <module>r     s\   " " " " " "             % % % % % % % %  ! ! ! ! ! !
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 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r r r r r	U
 r r r r rrN   