
    O3j              	      d   d dl mZ d dl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mZ d dlmZ d dl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mZm Z  d dl!m"Z" d dl#m$Z$m%Z% er&d dl&m'Z'm(Z( d dl
m)Z) d dl*m+Z+ d dl#m,Z, d dl-m.Z.m/Z/m0Z0m1Z1 ejd                  Z2 G d de"eedef         Z3y)    )annotationsN)reduce)chain)TYPE_CHECKINGAny)CoalesceOperator
ExpressionDuckDBLazyFrame
DuckDBExpr)DuckDBSelectorNamespace)	DeferredTimeZoneF
concat_strduckdb_dtypesfunctionlitnarwhals_to_native_dtypesql_expressionwhen)combine_alias_output_namescombine_evaluate_output_names!evaluate_output_names_and_aliases)SQLNamespace)Implementationrequires)IterableMapping)DuckDBPyRelation)WindowInputs)Version)ConcatMethodCorrelationMethod	IntoDTypePythonLiteralc                  .   e Zd ZU ej                  Zded<   ddZedd       Z	edd       Z
edd       ZddZddZ	 d	 	 	 	 	 	 	 dd
ZddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZddZd dZd!dZ	 	 	 	 	 	 	 	 d"dZ ej.                  d      dd       Zy	)#DuckDBNamespacer   _implementationc                   || _         y N)_version)selfversions     G/DATA/.local/lib/python3.12/site-packages/narwhals/_duckdb/namespace.py__init__zDuckDBNamespace.__init__2   s	        c                ,    t        j                  |       S r+   )r   from_namespacer-   s    r/   	selectorszDuckDBNamespace.selectors5   s    &55d;;r1   c                    t         S r+   r   r4   s    r/   _exprzDuckDBNamespace._expr9   s    r1   c                    t         S r+   r
   r4   s    r/   
_lazyframezDuckDBNamespace._lazyframe=   s    r1   c                    t        |g| S r+   )r   )r-   nameargss      r/   	_functionzDuckDBNamespace._functionA   s    $t$$r1   c                    t        |      S r+   )r   )r-   values     r/   _litzDuckDBNamespace._litD   s    5zr1   Nc                T    |t        ||      S t        ||      j                  |      S r+   )r   	otherwise)r-   	conditionr?   rB   s       r/   _whenzDuckDBNamespace._whenG   s/     	5))Iu%//	::r1   c                    t        | S r+   )r   )r-   exprss     r/   	_coalescezDuckDBNamespace._coalesceQ   s    ''r1   c                 	 |D cg c]  }|j                    }}t        |      }|d   }|j                  	|dk(  r$t        	fd|dd  D              sd}t	        |      |dk(  r<|j
                  }|dd  D ]  }t        j                  d      } |j                  |      S t        d |      }|j                  |      S c c}w )	Nr   verticalc              3  <   K   | ]  }|j                   k(    y wr+   )schema).0xrK   s     r/   	<genexpr>z)DuckDBNamespace.concat.<locals>.<genexpr>[   s     (OYV);Ys      z&inputs should all have the same schemadiagonalz]
                    from res select * union all by name from _item select *
                c                $    | j                  |      S r+   )union)rM   ys     r/   <lambda>z(DuckDBNamespace.concat.<locals>.<lambda>f   s    !''!*r1   )
_native_framelistrK   all	TypeErrornativeduckdbsql_with_nativer   )
r-   itemshowitemnative_itemsfirstmsgres_itemrK   s
            @r/   concatzDuckDBNamespace.concatT   s     8==ut**u=Ua*S(OU12Y(O%O:CC. *,,C%ab)jj "  *
 %%c**,l;!!#&&! >s   B?c               n    dfd}| j                  |t         t         | j                        S )Nc                     t        j                   fdD              }rt        |digS t        |      }t	        t
        j                  d |D              }d |D        }t        | t        |di      gS )Nc              3  .   K   | ]  } |        y wr+    )rL   edfs     r/   rN   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>m   s     <REqQrUEs   	separatorc              3  <   K   | ]  }|j                           y wr+   )isnull)rL   ss     r/   rN   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>q   s     -G$Qahhj$s   c              3  F   K   | ]  }|j                  t                y wr+   )castVARCHAR)rL   cs     r/   rN   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>r   s     6Aw   !)r   from_iterabler   tupler   operatoror_r   )rk   cols	null_maskcols_strrF   ignore_nullsrl   s   `   r/   funcz(DuckDBNamespace.concat_str.<locals>.funcl   st    ).)<)<<RE<R)RD"D>I>??;Dx||-G$-GHI66H)Z%OY%OPQQr1   callevaluate_output_namesalias_output_namesr.   rk   r   returnlist[Expression])r7   r   r   r,   )r-   rl   r|   rF   r}   s    ``` r/   r   zDuckDBNamespace.concat_stri   s;    	R zz"?"G95AMM	  
 	
r1   c                D    dd} | j                   j                  |g| S )Nc                    t        |       } t        t        j                  d | D              }t        t        j                  d | D              }||z  S )Nc              3  F   K   | ]  }t        |t        d               yw)r   N)r   r   rL   cols     r/   rN   z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s     )XSWC*:3A*GSWrt   c              3  v   K   | ]1  }|j                         j                  t        j                         3 y wr+   )	isnotnullrq   r   BIGINTr   s     r/   rN   z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s*     ZUYcs}}33M4H4HIUYs   79)rv   r   rw   add)ry   totalcounts      r/   r}   z-DuckDBNamespace.mean_horizontal.<locals>.func}   sH    ;D8<<)XSW)XYEZUYZE 5= r1   )ry   zIterable[Expression]r   r	   )r7   _from_elementwise_horizontal_op)r-   rF   r}   s      r/   mean_horizontalzDuckDBNamespace.mean_horizontal|   s%    	! :tzz99$GGGr1   c                t     d fd	 	 	 	 	 	 dfd} j                  |d d  j                        S )Nc                    t        t              rsd}t        |      t        | j                        }2t        j                  |      }t              j                  |      gS t              gS )Nz5Cannot create an empty struct type for DuckDB backend)	
isinstancedictNotImplementedErrorr   rY   r   r,   r   rq   )rk   rb   tztargetdtyper-   r?   s       r/   r}   z!DuckDBNamespace.lit.<locals>.func   sg    %&uM)#..!")),B 1%KE
/00J<r1   c                     |       S r+   ri   )rk   _window_inputsr}   s     r/   window_funcz(DuckDBNamespace.lit.<locals>.window_func   s     8Or1   c                    dgS )Nliteralri   _dfs    r/   rT   z%DuckDBNamespace.lit.<locals>.<lambda>   s    ykr1   )r   r   r.   r   )rk   r   r   zWindowInputs[Expression]r   r   r7   r,   )r-   r?   r   r   r}   s   ``` @r/   r   zDuckDBNamespace.lit   sP    		 		1I		
 zz"9#MM  
 	
r1   c                J    dd}| j                  |d d | j                        S )Nc                    t        d      gS )Nr   )r   r   s    r/   r}   z!DuckDBNamespace.len.<locals>.func   s    gJ<r1   c                    dgS )Nlenri   r   s    r/   rT   z%DuckDBNamespace.len.<locals>.<lambda>   s    ugr1   r~   )r   r   r   r   r   )r-   r}   s     r/   r   zDuckDBNamespace.len   s/    	  zz"5#MM	  
 	
r1   c                   |dk7  rd}t        |      dfd}| j                  |t              t              | j                        S )Npearsonz3Only 'pearson' correlation is supported for DuckDB.c                d    | j                        }| j                        }t        d||      gS )Ncorr)_evaluate_single_output_exprr   )rk   a_b_abs      r/   r}   z"DuckDBNamespace.corr.<locals>.func   s5    003B003Bfb"%&&r1   r~   r   )r   r7   r   r   r,   )r-   r   r   methodrb   r}   s    ``   r/   r   zDuckDBNamespace.corr   sX     YGC%c**	'
 zz"?1"E9!Q?MM	  
 	
r1   )rO      c                j    | j                   }dfd}| j                  |t         t         |      S )Nc                    D ci c].  }t         ||       gt        || g       ddiD ]	  \  }}}|| 0 }}}}}dj                  d |j                         D              }t	        d| d      gS c c}}}}w )NstrictTz, c              3  2   K   | ]  \  }}d | d|   yw)"z" := Nri   )rL   r;   r   s      r/   rN   z7DuckDBNamespace.struct.<locals>.func.<locals>.<genexpr>   s&      #6Ks!D6se$6Ks   zstruct_pack())zipr   joinr]   r   )rk   exprnative_expr_aliasnames_to_cols
field_argsrF   s          r/   r}   z$DuckDBNamespace.struct.<locals>.func   s     "7!D-0H.6tRD.  .)KE {". !  7  #6C6I6I6K# J #\*Q#?@AA7s   3A7
r~   r   )r,   r7   r   r   )r-   rF   r.   r}   s    `  r/   structzDuckDBNamespace.struct   s@    --	B zz"?"G95A	  
 	
r1   )r.   r"   r   None)r   r   )r   ztype[DuckDBExpr])r   ztype[DuckDBLazyFrame])r;   strr<   r	   r   r	   )r?   r   r   r	   r+   )rC   r	   r?   r	   rB   zExpression | Noner   r	   )rF   r	   r   r	   )r]   zIterable[DuckDBLazyFrame]r^   r#   r   r   )rF   r   rl   r   r|   boolr   r   )rF   r   r   r   )r?   r&   r   zIntoDType | Noner   r   )r   r   )r   r   r   r   r   r$   r   r   )__name__
__module____qualname__r   DUCKDBr)   __annotations__r0   propertyr5   r7   r9   r=   r@   rD   rG   re   r   r   r   r   r   r   backend_versionr   ri   r1   r/   r(   r(   -   s,    '5&;&;O^;  < <    % (,	;; ; %	;
 
;('.'8D'	'*
 
-0
@D
	
&	H
2	


 *
7H
	
& Xf%
 &
r1   r(   r    )4
__future__r   rw   	functoolsr   	itertoolsr   typingr   r   rZ   r   r	   narwhals._duckdb.dataframer   narwhals._duckdb.exprr   narwhals._duckdb.selectorsr   narwhals._duckdb.utilsr   r   r   r   r   r   r   r   r   narwhals._expression_parsingr   r   r   narwhals._sql.namespacer   narwhals._utilsr   r   collections.abcr   r   r    narwhals._compliant.windowr!   r"   narwhals.typingr#   r$   r%   r&   rr   r(   ri   r1   r/   <module>r      s    "    %  / 6 , >
 
 
 
 1 41'7'YY


i
*.@*LMi
r1   