
    hK                       S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	  S SKJ
r
  S SKJr  S S	KJr  S SKrS S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ r   S SKJ!r!  S SKJ"r"  S SKJ#r#  S SKJ$r$  S SKJ%r%  S SKJ&r&  \(       aP  S SK'J(r(  S SK)r*S SK+r,S SK-J.r.  S S K-J/r/  S S!K0J1r1  S S"K2J3r3  S S#K4J5r5  S S$K6J7r7  S S%K8J9r9  S S&KJ:r:  S S'KJ;r;  S S(KJ<r<  S S)KJ=r=  \R|                  " \?5         S S*KJ@r@  SSS5         " S+ S,\S-   5      rAg! , (       d  f       N= f).    )annotationsN)reduce)and_)TYPE_CHECKING)Any)Iterator)Mapping)Sequence)FunctionExpression)StarExpressioncol)evaluate_exprs)generate_partition_by_sql)lit)native_to_narwhals_dtype
get_duckdb)ColumnNotFoundError)InvalidOperationError)CompliantDataFrame)CompliantLazyFrame)Implementation)Version)generate_temporary_column_name)import_dtypes_module)not_implemented)parse_columns_to_drop)parse_version)validate_backend_version)
ModuleType)Self)TypeIs)
DuckDBExprDuckDBGroupByDuckDBNamespaceDuckDBInterchangeSeries)DType)AsofJoinStrategy)JoinStrategy)LazyUniqueKeepStrategy)_FullContext)SQLExpressionc                     \ rS rSr\R
                  r        S)S jr\S*S j5       r	\
      S+S j5       rS,S jrS,S jrS-S jrS.S jrS/S	 jrS0S
 jr      S1S jrS2S jrS3S jrS4S jr    S4S jrS5S jrSS.S6S jjrS4S jrS7S jr\S8S j5       r\S9S j5       rS:S jrS;S jrS<S jr S=S jr!S>S jr"S?S jr#            S@S jr$                SAS jr%S8S  jr&      SBS! jr'SCS" jr(SDS# jr)SES$ jr*          SFS% jr+\,RZ                  " S&5      r.\,RZ                  " S'5      r/\," 5       r0S(r1g)GDuckDBLazyFrame9   c                   Xl         X0l        X l        S U l        S U l        [        U R                  U R                  5        g N)_native_frame_version_backend_version_cached_schema_cached_columnsr    _implementation)selfdfbackend_versionversions       L/var/www/html/env/lib/python3.13/site-packages/narwhals/_duckdb/dataframe.py__init__DuckDBLazyFrame.__init__<   s;     79 /7;15 !5!5t7L7LM    c                6    [        U [        R                  5      $ r5   )
isinstanceduckdbDuckDBPyRelation)objs    r@   
_is_nativeDuckDBLazyFrame._is_nativeJ   s    #v6677rC   c              8    U " XR                   UR                  S9$ Nr>   r?   )r8   r7   )clsdatacontexts      r@   from_nativeDuckDBLazyFrame.from_nativeN   s"     ":":GDTDT
 	
rC   c                Z    U R                   [        R                  La  Sn[        U5      eU $ )Nz=__narwhals_dataframe__ is not implemented for DuckDBLazyFrame)r7   r   V1AttributeError)r<   msgs     r@   __narwhals_dataframe__&DuckDBLazyFrame.__narwhals_dataframe__V   s'    ==

*QC %%rC   c                    U $ r5    r<   s    r@   __narwhals_lazyframe__&DuckDBLazyFrame.__narwhals_lazyframe__]   s    rC   c                    [        5       $ r5   r   r[   s    r@   __native_namespace__$DuckDBLazyFrame.__native_namespace__`   s
    |rC   c                D    SSK Jn  U" U R                  U R                  S9$ )Nr   r'   rM   )narwhals._duckdb.namespacer(   r8   r7   )r<   r(   s     r@   __narwhals_namespace__&DuckDBLazyFrame.__narwhals_namespace__c   s!    > 114==
 	
rC   c                b    SSK Jn  U" U R                  R                  U5      U R                  S9$ )Nr   r)   )r?   )narwhals._duckdb.seriesr*   nativeselectr7   )r<   namer*   s      r@   
get_columnDuckDBLazyFrame.get_columnj   s%    C&t{{'9'9$'?WWrC   c              #  L   #    U R                    H  n[        U5      v   M     g 7fr5   )columnsr   )r<   ri   s     r@   _iter_columnsDuckDBLazyFrame._iter_columnso   s     LLDd)O !s   "$c                *   Ub  U[         R                  L a>  SS KnSSKJn  U" U R
                  R                  5       [        U5      U R                  SS9$ U[         R                  L aM  SS K
nSSKJn  U" U R
                  R                  5       [         R                  [        U5      U R                  SS9$ U[         R                  L a=  SS KnSSKJn  U" U R
                  R%                  5       [        U5      U R                  S9$ S	U 3n	['        U	5      e)
Nr   )ArrowDataFrameT)r>   r?   validate_column_names)PandasLikeDataFrame)implementationr>   r?   rr   )PolarsDataFramerM   zUnsupported `backend` value: )r   PYARROWpyarrownarwhals._arrow.dataframerq   rg   arrowr   r7   PANDASpandasnarwhals._pandas_like.dataframers   r=   POLARSpolarsnarwhals._polars.dataframeru   pl
ValueError)
r<   backendkwargsparq   pdrs   r   ru   rV   s
             r@   collectDuckDBLazyFrame.collects   s    
 ?g)?)?? @!!!# -b 1&*	  n+++K& -44 -b 1&*  n+++B" -2CT]]  .gY7orC   c                V    U R                  U R                  R                  U5      5      $ r5   )_with_nativerg   limit)r<   ns     r@   headDuckDBLazyFrame.head   s"      !2!21!566rC   c                R    U R                  U R                  R                  " U6 5      $ r5   )r   rg   rh   )r<   column_namess     r@   simple_selectDuckDBLazyFrame.simple_select   s"      !3!3\!BCCrC   c                    [        U /UQ76  VVs/ s H  u  p#UR                  U5      PM     nnnU R                  U R                  R	                  U5      5      $ s  snnf r5   )r   aliasr   rg   	aggregate)r<   exprsri   val	selections        r@   r   DuckDBLazyFrame.aggregate   sR    6DT6RE6RS6RSYYt_6R	S  !6!6y!ABB Ts   Ac                x    S [        U /UQ76  5       nU R                  U R                  R                  " U6 5      $ )Nc              3  H   #    U  H  u  pUR                  U5      v   M     g 7fr5   r   ).0ri   r   s      r@   	<genexpr>)DuckDBLazyFrame.select.<locals>.<genexpr>   s     S6RSYYt__6R    ")r   r   rg   rh   )r<   r   r   s      r@   rh   DuckDBLazyFrame.select   s9     TnT6RE6RS	  !3!3Y!?@@rC   c                  ^ [        XUS9mU4S jU R                   5       nU R                  U R                  R                  " U6 5      $ )N)rm   strictc              3  6   >#    U  H  oT;  d  M
  Uv   M     g 7fr5   rZ   )r   ri   columns_to_drops     r@   r   'DuckDBLazyFrame.drop.<locals>.<genexpr>   s     Rld/6QTTls   		)r   rm   r   rg   rh   )r<   rm   r   r   r   s       @r@   dropDuckDBLazyFrame.drop   s=    /fURdllR	  !3!3Y!?@@rC   N)r   c               &    Ub  Sn[        U5      eU $ )Nz.`backend` argument is not supported for DuckDB)r   )r<   r   rV   s      r@   lazyDuckDBLazyFrame.lazy   s    
 BCS/!rC   c                f   [        [        U /UQ76 5      nU R                   Vs/ s H3  nX2;   a   UR                  U5      R	                  U5      O
[        U5      PM5     nnUR                  S UR                  5        5       5        U R                  U R                  R                  " U6 5      $ s  snf )Nc              3  H   #    U  H  u  pUR                  U5      v   M     g 7fr5   r   )r   ri   values      r@   r   /DuckDBLazyFrame.with_columns.<locals>.<genexpr>   s      S;RKDekk$'';Rr   )dictr   rm   popr   r   extenditemsr   rg   rh   )r<   r   new_columns_mapri   results        r@   with_columnsDuckDBLazyFrame.with_columns   s    ~d;U;<
 	
 % & %++D1T %	 	 
 	S?;P;P;RSS  !3!3V!<==
s   :B.c                l    U" U 5      S   nU R                  U R                  R                  U5      5      $ )Nr   )r   rg   filter)r<   	predicatemasks      r@   r   DuckDBLazyFrame.filter   s0    q!  !3!3D!9::rC   c           	        U R                   cb  [        U R                  R                  U R                  R                  5       VVs0 s H  u  pU[        X R                  5      _M     snnU l         U R                   $ s  snnf r5   )r9   ziprg   rm   typesr   r7   )r<   column_nameduckdb_dtypes      r@   schemaDuckDBLazyFrame.schema   sw    &
 25KK''):):2#2-K 5lMMRR2#D """#s   "A<c                    U R                   c=  U R                  b  [        U R                  5      OU R                  R
                  U l         U R                   $ r5   )r:   r9   listr   rg   rm   r[   s    r@   rm   DuckDBLazyFrame.columns   sM    ' &&2 T[[![[((  
 ###rC   c                    SS K n[        U5      S:  a  U R                  R                  5       $ SUR                   3n[        U5      e)Nr   )   r   r   z3Conversion to pandas requires pandas>=1.0.0, found )r{   r   rg   r=   __version__NotImplementedError)r<   r   rV   s      r@   	to_pandasDuckDBLazyFrame.to_pandas   s?    	);;>>##GGWXC%c**rC   c                6    U R                   R                  5       $ r5   )rg   ry   r[   s    r@   to_arrowDuckDBLazyFrame.to_arrow   s    {{  ""rC   c                J    U R                  U R                  XR                  S9$ )N)r?   r>   )	__class__rg   r8   )r<   r?   s     r@   _with_versionDuckDBLazyFrame._with_version   s'    ~~KK:O:O  
 	
rC   c                J    U R                  XR                  U R                  S9$ rL   )r   r8   r7   )r<   r=   s     r@   r   DuckDBLazyFrame._with_native   s'    ~~ 5 5t}}  
 	
rC   c                   SSK Jn  U" XUS9$ )Nr   r%   )drop_null_keys)narwhals._duckdb.group_byr&   )r<   r   keysr&   s       r@   group_byDuckDBLazyFrame.group_by   s    ;TGGrC   c                   ^ U R                   nU4S jUR                   5       nU R                  U R                   R                  " U6 5      $ )Nc              3     >#    U  H3  nUT;   a  [        U5      R                  TU   5      O
[        U5      v   M5     g 7fr5   )r   r   )r   ri   mappings     r@   r   )DuckDBLazyFrame.rename.<locals>.<genexpr>  s8      
" /3goCIOOGDM*3t9L"s   ;>)rg   rm   r   rh   )r<   r   r=   r   s    `  r@   renameDuckDBLazyFrame.rename  sA    [[



	   !3!3Y!?@@rC   c                  US:X  a  SOUnUS:X  an  U R                   S:  a  SU R                    3n[        U5      eU R                  R                  S5      R	                  UR                  R                  S5      5      nOoUc   eUc   eS [        X45       5       n	[        [        U	5      n
U R                  R                  S5      R                  UR                  R                  S5      U
US	9nUS
;   Ga  U R                   Vs/ s H  n[        SU S35      PM     nnUR                   H  nXR                  ;   nUS:X  a'  U(       d   UR                  [        SU S35      5        M>  US:X  d  U(       a;  Ub  X;  a3  UR                  [        SU S35      R                  U U 35      5        M  Ub  X;  d  M  UR                  [        U5      5        M     UR                  " U6 R                  U R                  R                  5      nO4UR                  S5      R                  U R                  R                  5      nU R                  U5      $ s  snf )Nfulloutercross)r   r      z9DuckDB>=1.1.4 is required for cross-join, found version: lhsrhsc              3  d   #    U  H&  u  p[        S U S35      [        SU S35      :H  v   M(     g7flhs.""rhs."Nr   r   leftrights      r@   r   'DuckDBLazyFrame.join.<locals>.<genexpr>  s9      #9KD eD6O$eE7!,<(==#9   .0)	conditionhow>   r   r   innerr   r   r   r   lhs.*)r8   r   rg   	set_aliasr   r   r   r   joinrm   r   appendr   rh   r   )r<   otherr   left_onright_onsuffix
native_howrV   relitr   xrh   ri   
col_in_lhsress                   r@   r   DuckDBLazyFrame.join	  s    !$vW3
 $$y0QRVRgRgQhi)#..++''.44U\\5K5KE5RSC &&&'''#&w#9B ,2$+;I++''.33&&u-#	 4 C <<15>AcE!A,'F>#'<<#7
(MM#dV1o"67 G+H$48LMM#dV1o"6"<"<vfX=N"OP%)=MM#d), & **f%//0A0ABC**W%//0A0ABC  %% ?s   Ic          	        U R                   nUR                   n	/ n
Ub%  Ub"  U
R                  S [        XE5       5       5        O/ =pEUS:X  a/  U
R                  [	        SU S35      [	        SU S35      :  5        OBUS:X  a/  U
R                  [	        SU S35      [	        SU S35      :*  5        OSn[        U5      e[        [        U
5      nS/nU	R                   Hi  nXR                  ;   a'  Ub  X1Uk;  a  UR                  SU S	U U S35        M9  Ub
  X1Uk;  d  MF  UR                  [        [	        U5      5      5        Mk     S
SR                  U5       SU S3nU R                  [        R                  " U5      5      $ )Nc              3  d   #    U  H&  u  p[        S U S35      [        SU S35      :H  v   M(     g7fr   r   r   s      r@   r   ,DuckDBLazyFrame.join_asof.<locals>.<genexpr>J  s9      #9KD eD6O$eE7!,<(==#9r   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 z
            )rg   r   r   r   r   r   r   r   rm   strr   r   rF   sql)r<   r   r   r   by_leftby_rightstrategyr   r   r   
conditionsrV   r   rh   ri   querys                   r@   	join_asofDuckDBLazyFrame.join_asof;  s    kkll.0
8#7 #&w#9 
 "$#Gz!cE'!"45uXJa=P9QQR"cE'!"45uXJa=P9QQR_C%c**'-dJ'?	KKD{{" D0EH0E$EdV6$xqAB!T1FX1F%Fc#d)n-  HHV$% & { 	   E!233rC   c                    U R                   $ r5   )r   r[   s    r@   collect_schemaDuckDBLazyFrame.collect_schemaj  s    {{rC   c                 ^  US:X  a  UOU=(       d    T R                   =n(       Ga  T R                  S:  a  Sn[        U5      e[        U 4S jU 5       5      (       a@  S[	        U5      R                  T R                   5       ST R                    S3n[        U5      e[        ST R                   5      n[        S/ T R                   QUP5      n[        U6 nUS	:X  a  UOUn[        [        S
5       SU S35      R                  U5      n	[        [        S[        5       5       SU S35      R                  U5      n
T R                  T R                  R                  [        5       X5      R!                  [#        U5      [%        S5      :H  5      R                  [        Xe/S95      5      $ T R                  T R                  R'                  SR)                  T R                   5      5      5      $ )Nany)r      zZAt least version 1.3 of DuckDB is required for `unique` operation
with `subset` specified.c              3  @   >#    U  H  oTR                   ;  v   M     g 7fr5   )rm   )r   r   r<   s     r@   r   )DuckDBLazyFrame.unique.<locals>.<genexpr>x  s     :'QDLL('s   zColumns z not found in .   none
row_numberz over ()countr   )exclude, )rm   r8   r   r  set
differencer   r   r   r0   r   r   r   r   rg   rh   r   r   r   uniquer   )r<   subsetkeepsubset_rV   idx_name
count_namepartition_by_sqlri   idx_expr
count_exprs   `          r@   r%  DuckDBLazyFrame.uniquem  s    !%fF4JdllK7K$$v-/  *#..:'::: W!8!8!F G~VZVbVbUccde)#..5aFH7;TT\\;T8;TUJ87D!%:XD$%l34G<L;MQOeHo  '%g~/?@AIYHZZ[\eJ  $$"">#3XJD	SV+,
/EFG 
   !3!3DIIdll4K!LMMrC   c                   [        U[        5      (       a  U/[        U5      -  nU(       a  S [        X15       5       nOS [        X15       5       nU R	                  U R
                  R                  " U6 5      $ )Nc              3     #    U  HN  u  pU(       d  [        U5      R                  5       O&[        U5      R                  5       R                  5       v   MP     g 7fr5   )r   
nulls_lastdescr   ri   r2  s      r@   r   'DuckDBLazyFrame.sort.<locals>.<genexpr>  sA      "5JD /3D	$$&D	8H8S8S8UU"5   AAc              3     #    U  HN  u  pU(       d  [        U5      R                  5       O&[        U5      R                  5       R                  5       v   MP     g 7fr5   )r   nulls_firstr2  r3  s      r@   r   r4    sA      "5JD 04D	%%'T9I9U9U9WW"5r5  )rE   boollenr   r   rg   sort)r<   
descendingr1  byr   s        r@   r:  DuckDBLazyFrame.sort  sl    j$''$B/J"%b"5B
"%b"5B   !1!12!677rC   c                    Ub  UOU R                   n[        [        S U 5       5      nU R                  U R                  R                  U5      5      $ )Nc              3  T   #    U  H  n[        U5      R                  5       v   M      g 7fr5   )r   	isnotnullr   ri   s     r@   r   -DuckDBLazyFrame.drop_nulls.<locals>.<genexpr>  s      &Qs4y':':'<'<s   &()rm   r   r   r   rg   r   )r<   r&  r(  keep_conditions       r@   
drop_nullsDuckDBLazyFrame.drop_nulls  sD    ".&DLL&Q&QR  !3!3N!CDDrC   c                d  ^^ [        U R                  5      nU R                  5       nT H'  nX4   nXRR                  :w  d  M  SU S3n[	        U5      e   [        T5      S:w  a  Sn[        U5      e[        TS   5      mU R                  nU R                  nTR                  5       [        ST5      -  [        S5      :  n	UR                  U	5      R                  " UU4S jU 5       6 n
UR                  U	) 5      R                  " U4S jU 5       6 nU R                  U
R!                  U5      5      $ )	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   r9  c              3  j   >#    U  H(  nUT;   a  [        S T5      R                  U5      OUv   M*     g7f)unnestN)r   r   )r   ri   col_to_exploderm   s     r@   r   *DuckDBLazyFrame.explode.<locals>.<genexpr>  s?       -D 7? #8^<BB4H -s   03c              3  h   >#    U  H'  nUT;   a  [        S 5      R                  U5      OUv   M)     g 7fr5   )r   r   )r   ri   rm   s     r@   r   rJ    s0      ,D *.D	%dB,s   /2)r   r7   r  Listr   r9  r   r   rg   rm   r@  r   r   r   rh   r   union)r<   rm   dtypesr   ri   dtyperV   r   original_columnsnot_null_conditionnon_null_relnull_relrI  s    `          @r@   explodeDuckDBLazyFrame.explode  sF   %dmm4$$&DLE#CE7 K) )  ,C00  w<1^  &c**WQZkk<<+557:L>;
 
F zz"45<< -	
 ::11299,
   !3!3H!=>>rC   c                   Uc  / OUnUc$  U R                    Vs/ s H  ofU;  d  M
  UPM     snOUnUS:X  a  Sn[        U5      eUS:X  a  Sn[        U5      eSR                  S U 5       5      n	U R                  n
SU	 SU SU S	3nU R	                  [
        R                  " U5      R                  " / UQUPUP6 5      $ s  snf )
N z:`variable_name` cannot be empty string for duckdb backend.z7`value_name` cannot be empty string for duckdb backend.r"  c              3  J   #    U  H  n[        [        U5      5      v   M     g 7fr5   )r
  r   rA  s     r@   r   *DuckDBLazyFrame.unpivot.<locals>.<genexpr>  s     >#$s3t9~~#s   !#z(
            unpivot rel
            on z(
            into
                name "z"
                value "z"
            )rm   r   r   rg   r   rF   r  rh   )r<   onindexvariable_name
value_nameindex_con_rV   
unpivot_onr   r  s               r@   unpivotDuckDBLazyFrame.unpivot  s     }%>@j$,,:,Q6/q,:bBNC%c**KC%c**YY>#>>
kk| $o &"| $   JJu$$&J&J&Jz&JK
 	
+ ;s
   	B?B?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.)r8   r:   r9   r6   r7   )r=   duckdb.DuckDBPyRelationr>   ztuple[int, ...]r?   r   returnNone)rH   zduckdb.DuckDBPyRelation | Anyre  zTypeIs[duckdb.DuckDBPyRelation])rO   rd  rP   r/   re  r"   )re  r"   )re  r!   )re  r(   )ri   r
  re  r*   )re  zIterator[duckdb.Expression])r   z(ModuleType | Implementation | str | Noner   r   re  z!CompliantDataFrame[Any, Any, Any])r   intre  r"   )r   r
  re  r"   )r   r$   re  r"   )rm   Sequence[str]r   r8  re  r"   )r   zImplementation | Nonere  r"   )r   r$   re  r"   )re  zdict[str, DType])re  z	list[str])re  zpd.DataFrame)re  zpa.Table)r?   r   re  r"   )r=   rd  re  r"   )r   r
  r   r8  re  r&   )r   zMapping[str, str]re  r"   )r   r"   r   r-   r   Sequence[str] | Noner   ri  r   r
  re  r"   )r   r"   r   
str | Noner   rj  r  ri  r  ri  r  r,   r   r
  re  r"   )r&  ri  r'  r.   re  r"   )r<  r
  r;  zbool | Sequence[bool]r1  r8  re  r"   )r&  ri  re  r"   )rm   rh  re  r"   )
rZ  ri  r[  ri  r\  r
  r]  r
  re  r"   )2__name__
__module____qualname____firstlineno__r   DUCKDBr;   rA   staticmethodrI   classmethodrQ   rW   r\   r_   rc   rj   rn   r   r   r   r   rh   r   r   r   r   propertyr   rm   r   r   r   r   r   r   r   r  r  r%  r:  rD  rT  rb  r   
deprecatedgather_everytailwith_row_index__static_attributes__rZ   rC   r@   r2   r2   9   s   $++ON#N )	N
 N 
N 8 8 
*
;G
	
 

X
(9( ( 
+	(T7DCAA 
AA
 8< 	>;
 
# 
# $ $+#



H
A0&0& 	0&
 &0& '0& 0& 
0&d-4-4 	-4
 -4 &-4 '-4 #-4 -4 
-4^N*N5KN	N>8E
*?X
 
 $
 	

 
 

B #--YL %%QD %&NrC   r2   )r$   rd  )B
__future__r   
contextlib	functoolsr   operatorr   typingr   r   r   r	   r
   rF   r   r   narwhals._duckdb.utilsr   r   r   r   r   narwhals.dependenciesr   narwhals.exceptionsr   r   narwhals.typingr   r   narwhals.utilsr   r   r   r   r   r   r   r    r   r!   r{   r   rw   r   typing_extensionsr"   r#   narwhals._duckdb.exprr$   r   r&   rb   r(   rf   r*   narwhals.dtypesr+   r,   r-   r.   r/   suppressImportErrorr0   r2   rZ   rC   r@   <module>r     s    "           % ! & 1 < & ; , 3 5 . . ) " 9 / * 0 ( 3 &(07:?%0,6+%$ &z'()PQ z'	 &%s   D88
E