
    WhP                       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l5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlmFZF d dlGmHZH d dlImJZJ d dlKmLZM d dlNmOZOmPZPmQZQ  G d ded    e      ZRy)!    )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generate_temporary_column_namenot_implementedparse_columns_to_droprequiresto_pyarrow_table
zip_strict
get_duckdb)InvalidOperationError)IterableIteratorMappingSequence)BytesIO)Path)
ModuleType)
Expression)DuckDBPyType)SelfTypeIs)CompliantDataFrameAny)
DuckDBExprDuckDBGroupByDuckDBNamespaceDuckDBInterchangeSeries)_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	d0d       Z
e	 	 	 	 	 	 d1d       Z	 	 	 	 	 	 d2dZd3dZd3d	Zd4d
Zd5dZd6dZd7dZ	 	 	 	 	 	 d8dZd9dZd:dZd;dZd;dZd<dZd=d>dZd;dZd?dZed@d       ZedAd       ZdBdZdCdZ dDdZ!dEdZ"	 	 	 	 	 	 dFdZ#dGdZ$	 	 	 	 	 	 	 	 	 	 	 	 dHd Z%	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dId!Z&d@d"Z'	 	 	 	 	 	 	 	 dJd#Z(dKd$Z)dLd%Z*dMd&Z+dNd'Z,	 	 	 	 	 	 	 	 	 	 dOd(Z- e.j^                  d)      dPd*       Z0dQd+Z1 e2jf                  d,      Z4 e2jf                  d-      Z5y)RDuckDBLazyFrameF)validate_backend_versionc               b    || _         || _        d | _        d | _        |r| j	                          y y N)_native_frame_version_cached_native_schema_cached_columns_validate_backend_version)selfdfversionr=   s       T/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_duckdb/dataframe.py__init__zDuckDBLazyFrame.__init__G   s7     79EI"15#**, $    c                6    | j                   j                         S r?   )_implementation_backend_versionrE   s    rH   rM   z DuckDBLazyFrame._backend_versionU   s    ##4466rJ   c                6    t        | t        j                        S r?   )
isinstanceduckdbDuckDBPyRelation)objs    rH   
_is_nativezDuckDBLazyFrame._is_nativeY   s    #v6677rJ   c              *     | ||j                         S NrG   )rA   )clsdatacontexts      rH   from_nativezDuckDBLazyFrame.from_native]   s     4!1!122rJ   c                    | j                   t        j                  u rddlm}  || d      S | j                   j                  | d      S )Nr   r6   interchange)levellazy)rA   r   V1narwhals.stable.v1r7   	lazyframe)rE   argskwdsDataFrameV1s       rH   to_narwhalszDuckDBLazyFrame.to_narwhalsc   s>     ==GJJ&Ct=99}}&&t6&::rJ   c                X    | j                   t        j                  urd}t        |      | S )Nz=__narwhals_dataframe__ is not implemented for DuckDBLazyFrame)rA   r   r`   AttributeError)rE   msgs     rH   __narwhals_dataframe__z&DuckDBLazyFrame.__narwhals_dataframe__l   s'    ==

*QC %%rJ   c                    | S r?    rN   s    rH   __narwhals_lazyframe__z&DuckDBLazyFrame.__narwhals_lazyframe__s   s    rJ   c                    t               S r?   r   rN   s    rH   __native_namespace__z$DuckDBLazyFrame.__native_namespace__v   s
    |rJ   c                4    ddl m}  || j                        S )Nr   r.   rW   )narwhals._duckdb.namespacer/   rA   )rE   r/   s     rH   __narwhals_namespace__z&DuckDBLazyFrame.__narwhals_namespace__y   s    >t}}55rJ   c                h    ddl m}  || j                  j                  |      | j                        S )Nr   r0   rW   )narwhals._duckdb.seriesr1   nativeselectrA   )rE   namer1   s      rH   
get_columnzDuckDBLazyFrame.get_column~   s%    C&t{{'9'9$'?WWrJ   c              #  H   K   | j                   D ]  }t        |        y wr?   )columnsr   )rE   rw   s     rH   _iter_columnszDuckDBLazyFrame._iter_columns   s"     LL 	Dd)O	s    "c                   ||t         j                  u r=ddlm}  |t	        | j
                  j                               d| j                  d      S |t         j                  u rCddl	m
}  || j
                  j                         t         j                  d| j                  d      S |t         j                  u r3ddlm}  || j
                  j                         d| j                        S d	| }t!        |      )
Nr   )ArrowDataFrameT)r=   rG   validate_column_names)PandasLikeDataFrame)implementationr=   rG   r~   )PolarsDataFrame)r=   rG   zUnsupported `backend` value: )r   PYARROWnarwhals._arrow.dataframer}   r   ru   arrowrA   PANDASnarwhals._pandas_like.dataframer   rF   POLARSnarwhals._polars.dataframer   pl
ValueError)rE   backendkwargsr}   r   r   ri   s          rH   collectzDuckDBLazyFrame.collect   s     ?g)?)??@! !2!2!45)-&*	  n+++K& -44)-&*  n+++B" 4  .gY7orJ   c                V    | j                  | j                  j                  |            S r?   )_with_nativeru   limit)rE   ns     rH   headzDuckDBLazyFrame.head   s"      !2!21!566rJ   c                R    | j                   | j                  j                  |       S r?   )r   ru   rv   )rE   column_namess     rH   simple_selectzDuckDBLazyFrame.simple_select   s%      !3!3!3\!BCCrJ   c                    t        | g| D cg c]  \  }}|j                  |       }}}	 | j                  | j                  j	                  |            S c c}}w # t
        $ r}t        ||       d d }~ww xY wr?   )r   aliasr   ru   	aggregate	Exceptionr   )rE   exprsrw   val	selectiones         rH   r   zDuckDBLazyFrame.aggregate   sw    6DT6RE6RSsSYYt_S	S	<$$T[[%:%:9%EFF T  	<(D1t;	<s   A)A 	A:(A55A:c                    d t        | g| D        }	 | j                   | j                  j                  |       S # t        $ r}t        ||       d d }~ww xY w)Nc              3  D   K   | ]  \  }}|j                  |        y wr?   r   ).0rw   r   s      rH   	<genexpr>z)DuckDBLazyFrame.select.<locals>.<genexpr>   s     SsSYYt_S    )r   r   ru   rv   r   r   )rE   r   r   r   s       rH   rv   zDuckDBLazyFrame.select   s]    SnT6RE6RS		<$$%7T[[%7%7%CDD 	<(D1t;	<s   '= 	AAAc                   t        | ||      }| j                  D cg c]  }||vst        |       }}| j                   | j                  j
                  |       S c c}w )Nstrict)r   rz   r   r   ru   rv   )rE   rz   r   columns_to_droprw   r   s         rH   dropzDuckDBLazyFrame.drop   s[    /gfM+/<<W44;VSYW	W  !3!3!3Y!?@@ Xs
   	AANc                $    |d}t        |      | S )Nz.`backend` argument is not supported for DuckDB)r   )rE   r   _ri   s       rH   r_   zDuckDBLazyFrame.lazy   s    
 BCS/!rJ   c                   t        t        | g|       }| j                  D cg c]1  }||v r |j                  |      j	                  |      n
t        |      3 }}|j                  d |j                         D               	 | j                   | j                  j                  |       S c c}w # t        $ r}t        ||       d d }~ww xY w)Nc              3  D   K   | ]  \  }}|j                  |        y wr?   r   )r   rw   values      rH   r   z/DuckDBLazyFrame.with_columns.<locals>.<genexpr>   s     SKD%ekk$'Sr   )dictr   rz   popr   r   extenditemsr   ru   rv   r   r   )rE   r   new_columns_maprw   resultr   s         rH   with_columnszDuckDBLazyFrame.with_columns   s    ~d;U;<
 	
  & %++D1T
 
 	S?;P;P;RSS	<$$%7T[[%7%7%@AA
  	<(D1t;	<s   6B+'B0 0	C9CCc                     ||       d   }	 | j                  | j                  j                  |            S # t        $ r}t	        ||       d d }~ww xY w)Nr   )r   ru   filterr   r   )rE   	predicatemaskr   s       rH   r   zDuckDBLazyFrame.filter   sT    q!	<$$T[[%7%7%=>> 	<(D1t;	<s   )7 	A AAc           
     z   | j                   8t        t        | j                  | j                  j
                              | _         t        | j                        }t        | j                  j                  | j                  j
                        D ci c]  \  }}|t        || j                  |       c}}S c c}}w r?   )
rB   r   ziprz   ru   typesr	   r   r   rA   )rE   deferred_time_zonecolumn_nameduckdb_dtypes       rH   schemazDuckDBLazyFrame.schema   s    %%- *.c$,,@Q@Q.R)SD&-dkk:
 .8##T[[%6%6.	
 *\ 1dmm-? 
 	
 
s   "B7c                    | j                   <| j                  t        | j                        n| j                  j
                  | _         | j                   S r?   )rC   rB   listr   ru   rz   rN   s    rH   rz   zDuckDBLazyFrame.columns   sM    ' --9 T[[![[((  
 ###rJ   c                6    | j                   j                         S r?   )ru   rF   rN   s    rH   	to_pandaszDuckDBLazyFrame.to_pandas   s    {{~~rJ   c                p    | j                         j                  t        j                        j                  S r?   )r_   r   r   r   ru   rN   s    rH   to_arrowzDuckDBLazyFrame.to_arrow  s%    yy{"">#9#9:AAArJ   c                <    | j                  | j                  |      S rV   )	__class__ru   )rE   rG   s     rH   _with_versionzDuckDBLazyFrame._with_version  s    ~~dkk7~;;rJ   c                <    | j                  || j                        S rV   )r   rA   )rE   rF   s     rH   r   zDuckDBLazyFrame._with_native  s    ~~b$--~88rJ   c               $    ddl m}  || ||      S )Nr   r,   )drop_null_keys)narwhals._duckdb.group_byr-   )rE   keysr   r-   s       rH   group_byzDuckDBLazyFrame.group_by  s     	<T4GGrJ   c                    | j                   }fd|j                  D        }| j                   | j                   j                  |       S )Nc              3  v   K   | ]0  }|v rt        |      j                  |         n
t        |       2 y wr?   )r   r   )r   rw   mappings     rH   r   z)DuckDBLazyFrame.rename.<locals>.<genexpr>  s9      
 /3goCIOOGDM*3t9L
s   69)ru   rz   r   rv   )rE   r   rF   r   s    `  rH   renamezDuckDBLazyFrame.rename  sD    [[



	   !3!3!3Y!?@@rJ   c               r   |dk(  rdn|}|dk(  rm| j                   dk  rd| j                    }t        |      | j                  j                  d      j	                  |j                  j                  d            }nq|J |J d t        ||      D        }	t        t        |	      }
| j                  j                  d      j                  |j                  j                  d      |
|	      }|d
v r| j                  D cg c]  }t        d| d       }}|j                  D ]  }|| j                  v }|dk(  r!|s|j                  t        d| d             7|dk(  s|r8|||vr2|j                  t        d| d      j                  | |              v|||vs}|j                  t        |               |j                  | j                  | j                  j                        }n4|j                  d      j                  | j                  j                        }| j                  |      S c c}w )Nfulloutercross)   r      z;'duckdb>=1.1.4' is required for cross-join, found version: lhsrhsc              3  `   K   | ]&  \  }}t        d | d      t        d| d      k(   ( ywlhs.""rhs."Nr   r   leftrights      rH   r   z'DuckDBLazyFrame.join.<locals>.<genexpr>.  s<      D% eD6O$eE7!,<(==   ,.)	conditionhow>   r   r   innerr   r   r   r   lhs.*)rM   NotImplementedErrorru   	set_aliasr   r   r   r   joinrz   r   appendr   rv   r   )rE   otherr   left_onright_onsuffix
native_howri   relitr   xrv   rw   
col_in_lhsress                   rH   r   zDuckDBLazyFrame.join  s"    !$vW3
 $$y0STXTiTiSjk)#..++''.44U\\5K5KE5RSC &&&'''#-gx#@B %+4$4I++''.33&&u-#	 4 C <<15>AcE!A,'>F> 	-#'4<<#7
(MM#dV1o"67 G+H$4H8LMM#dV1o"6"<"<vfX=N"OP%X)=MM#d),	- #**f%//0A0ABC**W%//0A0ABC  %% ?s   ?H4c          	        | j                   }|j                   }	g }
|%|#|
j                  d t        ||      D               ng x}}|dk(  r/|
j                  t	        d| d      t	        d| d      k\         nA|dk(  r/|
j                  t	        d| d      t	        d| d      k         nd}t        |      t        t        |
      }dg}|	j                  D ]a  }||j                  v r$|||h|vr|j                  d| d	| | d       5|||h|vs?|j                  t        t	        |                   c d
dj                  |       d| d}| j                  t        j                  |            S )Nc              3  `   K   | ]&  \  }}t        d | d      t        d| d      k(   ( ywr   r   r   s      rH   r   z,DuckDBLazyFrame.join_asof.<locals>.<genexpr>[  s<      D% eD6O$eE7!,<(==r   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 
            )ru   r   r   r   r   r   r   r   rz   strr   r   rQ   sql)rE   r   r   r   by_leftby_rightstrategyr   r   r   
conditionsri   r   rv   rw   querys                   rH   	join_asofzDuckDBLazyFrame.join_asofL  s    kkll')
8#7 #-gx#@ 
 "$#Ghz!cE'!"45uXJa=P9QQR"cE'!"45uXJa=P9QQR_C%c** &tZ 8	KK 	.Ds{{" D0EH0E$EdV6$xqAB!T(1FX1F%Fc#d)n-	.HHV$% & { 	   E!233rJ   c                    | j                   S r?   )r   rN   s    rH   collect_schemazDuckDBLazyFrame.collect_schema{  s    {{rJ   c               N   |xs | j                   }| j                  |      x}r|t        d| j                         }|r$|dk(  rdgt        |      z  }dgt        |      z  }nd }d }|dk(  r't	        t        dt                     ||xs d||      }	nt	        t        d      ||xs d||      }	| j                  | j                  j                  t               |	j                  |            j                  t        |      t        d	      k(              j                  |gd
      S )N   lastTnonecountrl   )
descending
nulls_last
row_numberr   Fr   )rz   _check_columns_existr   lenr   r
   r   r   ru   rv   r   r   r   r   r   )
rE   subsetkeeporder_bysubset_errortmp_namer  r  exprs
             rH   uniquezDuckDBLazyFrame.unique~  s#    (DLL--g6656K1!T\\B#h-/J#h-/JJJ6>$'>+,B%%D %,B%%D   KK~/H1EFMMHQ'
 $z%$
(		)rJ   c                   t        |t              r|gt        |      z  }|rd t        ||      D        }nd t        ||      D        }| j	                   | j
                  j                  |       S )Nc              3     K   | ]I  \  }}|st        |      j                         n&t        |      j                         j                          K y wr?   )r   r  descr   rw   r  s      rH   r   z'DuckDBLazyFrame.sort.<locals>.<genexpr>  sD      D$ /3D	$$&D	8H8S8S8UU   AAc              3     K   | ]I  \  }}|st        |      j                         n&t        |      j                         j                          K y wr?   )r   nulls_firstr  r  s      rH   r   z'DuckDBLazyFrame.sort.<locals>.<genexpr>  sD      D$ 04D	%%'T9I9U9U9WWr  )rP   boolr  r   r   ru   sort)rE   r  r  byr   s        rH   r!  zDuckDBLazyFrame.sort  sp    j$'$B/J",R"<B
",R"<B   !1!1!12!677rJ   c          	     V   | j                   }t        |      }t        |t              r| gt	        |      z  }n|D cg c]  }|  }}t        t        d      ||dgt	        |      z        }|t        |      k  }d| d}	| j                  t        j                  |	            S c c}w )Nr  T)r  r  r  z3
        SELECT *
        FROM _df
        QUALIFY z	
        )ru   r   rP   r   r  r   r
   r   r   rQ   r   )
rE   kr"  reverse_dfr  revr  r   r  s
             rH   top_kzDuckDBLazyFrame.top_k  s    kk"Xgt$%+R0J-45cc'5J5 lO!vB'	
 CFN	  	
   E!233 6s   
B&c                    ||n| j                   }t        t        d |D              }| j                  | j                  j                  |            S )Nc              3  N   K   | ]  }t        |      j                           y wr?   )r   	isnotnull)r   rw   s     rH   r   z-DuckDBLazyFrame.drop_nulls.<locals>.<genexpr>  s     &Qs4y':':'<&Qs   #%)rz   r   r   r   ru   r   )rE   r  r  keep_conditions       rH   
drop_nullszDuckDBLazyFrame.drop_nulls  sD    ".&DLL&Q&QR  !3!3N!CDDrJ   c                ^   | j                   j                  }| j                         }D ]'  }||   }||j                  k7  sd| d}t	        |       t              dk7  rd}t        |      t        d         | j                  }| j                  }j                         t        d      z  t        d      kD  }	 |j                  |	      j                  fd|D         }
 |j                  |	       j                  fd|D         }| j                  |
j!                  |            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   r  c              3  `   K   | ]%  }|v rt        d       j                  |      n| ' yw)unnestN)r
   r   )r   rw   col_to_exploderz   s     rH   r   z*DuckDBLazyFrame.explode.<locals>.<genexpr>  s8       <@7?(N+11$7PTTs   +.c              3  ^   K   | ]$  }|v rt        d       j                  |      n| & y wr?   )r   r   )r   rw   rz   s     rH   r   z*DuckDBLazyFrame.explode.<locals>.<genexpr>  s1       *.D	%dBs   *-)rA   dtypesr  Listr   r  r   r   ru   rz   r+  r
   r   r   rv   r   union)rE   rz   r3  r   rw   dtyperi   r   original_columnsnot_null_conditionnon_null_relnull_relr1  s    `          @rH   explodezDuckDBLazyFrame.explode  sQ   %%$$& 	1D4LE#CE7 K) )  ,C00	1 w<1^  &c**WQZkk<<+557!E>:RRUXV
 
 =szz"45<<,
 :3::11299,
   !3!3H!=>>rJ   c                x   |g n|}|| j                   D cg c]	  }||vs| c}n|}|dk(  rd}t        |      |dk(  rd}t        |      t        | }	| j                  }
d|	 dt	        |       dt	        |       d}| j                   t        j                  |      j                  g |||       S c c}w )N 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   )	rz   r   r   ru   r   r   rQ   r   rv   )rE   onindexvariable_name
value_nameindex_con_ri   
unpivot_onr   r  s               rH   unpivotzDuckDBLazyFrame.unpivot  s     }%>@j$,,:Q!6/q:bBNC%c**KC%c**&,
kk| -() *:' (   $FJJu$$&J&J&Jz&JK
 	
+ ;s
   	B7B7)r      c                    |d}t        |      t        t        d      |      t        d      z
  j	                  |      }| j                  | j                  j                  |t                           S )Nz5Cannot pass `order_by` to `with_row_index` for DuckDBr  )r  r   )		TypeErrorr   r
   r   r   r   ru   rv   r   )rE   rw   r  ri   r  s        rH   with_row_indexzDuckDBLazyFrame.with_row_index  se    ICC. !!L/HEANUU
   !3!3D.:J!KLLrJ   c                R    | j                   }d| d}t        j                  |       y )Nz5
            COPY (SELECT * FROM df)
            TO 'z+'
            (FORMAT parquet)
            )ru   rQ   r   )rE   filerF   r  s       rH   sink_parquetzDuckDBLazyFrame.sink_parquet#  s/    [[ 
 	

5rJ   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.)rF   duckdb.DuckDBPyRelationrG   r   r=   r   returnNone)rO  ztuple[int, ...])rS   zduckdb.DuckDBPyRelation | AnyrO  zTypeIs[duckdb.DuckDBPyRelation])rY   rN  rZ   r3   rO  r(   )rc   r   rd   r   rO  ILazyFrame[duckdb.DuckDBPyRelation] | DataFrameV1[duckdb.DuckDBPyRelation])rO  r(   )rO  r%   )rO  r/   )rw   r   rO  r1   )rO  zIterator[Expression])r   z_EagerAllowedImpl | Noner   r   rO  r*   )r   intrO  r(   )r   r   rO  r(   )r   r+   rO  r(   )rz   Sequence[str]r   r   rO  r(   r?   )r   rP  r   rP  rO  r(   )r   r+   rO  r(   )rO  zdict[str, DType])rO  z	list[str])rO  zpd.DataFrame)rO  zpa.Table)rG   r   rO  r(   )rF   rN  rO  r(   )r   z$Sequence[str] | Sequence[DuckDBExpr]r   r   rO  r-   )r   zMapping[str, str]rO  r(   )r   r(   r   r9   r   Sequence[str] | Noner   rT  r   r   rO  r(   )r   r(   r   r   r   r   r   rT  r   rT  r  r8   r   r   rO  r(   )r  rT  r  r:   r  rT  rO  r(   )r"  r   r  bool | Sequence[bool]r  r   rO  r(   )r$  rR  r"  zIterable[str]r%  rU  rO  r(   )r  rT  rO  r(   )rz   rS  rO  r(   )
r>  rT  r?  rT  r@  r   rA  r   rO  r(   )rw   r   r  rS  rO  r(   )rL  zstr | Path | BytesIOrO  rP  )6__name__
__module____qualname__r   DUCKDBrL   rI   propertyrM   staticmethodrT   classmethodr[   rf   rj   rm   ro   rr   rx   r{   r   r   r   r   rv   r   r_   r   r   r   rz   r   r   r   r   r   r   r   r  r  r  r!  r(  r-  r;  rF  r   backend_versionrJ  rM  r   
deprecatedgather_everytailrl   rJ   rH   r<   r<   =   s    %++O */-#- 	-
 #'- 
- 7 7 8 8 3*3;J3	3 3
;;"%;	R;6
X
 / ;> 	 D7D<<A
<< 
 
  $ $ B<9H8HMQH	HA0&0& 	0&
 &0& '0& 0& 
0&d-4-4 	-4
 -4 &-4 '-4 #-4 -4 
-4^%)$%) !	%)
 '%) 
%)N84*E
(?T
 
 $
 	

 
 

B Xf%M &M .?--YL &?%%QDrJ   r<   )r+   rN  rQ  )S
__future__r   	functoolsr   operatorr   typingr   r   rQ   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&   duckdb.typingr'   typing_extensionsr(   r)   narwhals._compliant.typingr*   narwhals._duckdb.exprr+   r   r-   rq   r/   rt   r1   narwhals._typingr2   r3   narwhals.dataframer4   narwhals.dtypesr5   ra   r7   re   narwhals.typingr8   r9   r:   r<   rl   rJ   rH   <module>ry     s    "   %  !
 
 
 1
 
 
 - 5EE !*.@07:?2/,%;RRt	U
 trJ   