
    .i              	      h   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%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/m0Z0m1Z1m2Z2 ejf                  Z3 G d de"eedef         Z4y)    )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
zip_strict)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     W/opt/house_gps_flutter/.venv/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    r0   	selectorszDuckDBNamespace.selectors5   s    &55d;;r2   c                    t         S r,   r   r5   s    r0   _exprzDuckDBNamespace._expr9   s    r2   c                    t         S r,   r
   r5   s    r0   
_lazyframezDuckDBNamespace._lazyframe=   s    r2   c                    t        |g| S r,   )r   )r.   nameargss      r0   	_functionzDuckDBNamespace._functionA   s    $t$$r2   c                    t        |      S r,   )r   )r.   values     r0   _litzDuckDBNamespace._litD   s    5zr2   Nc                T    |t        ||      S t        ||      j                  |      S r,   )r   	otherwise)r.   	conditionr@   rC   s       r0   _whenzDuckDBNamespace._whenG   s/     	5))Iu%//	::r2   c                    t        | S r,   )r   )r.   exprss     r0   	_coalescezDuckDBNamespace._coalesceQ   s    ''r2   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xrL   s     r0   	<genexpr>z)DuckDBNamespace.concat.<locals>.<genexpr>[   s     (OV);(Os      z&inputs should all have the same schemadiagonalz]
                    from res select * union all by name from _item select *
                c                $    | j                  |      S r,   )union)rN   ys     r0   <lambda>z(DuckDBNamespace.concat.<locals>.<lambda>f   s    !''!* r2   )
_native_framelistrL   all	TypeErrornativeduckdbsql_with_nativer   )
r.   itemshowitemnative_itemsfirstmsgres_itemrL   s
            @r0   concatzDuckDBNamespace.concatT   s     8==t**==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,    )rM   edfs     r0   rO   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>m   s     <RqQrU<Rs   	separatorc              3  <   K   | ]  }|j                           y wr,   )isnull)rM   ss     r0   rO   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>q   s     -GQahhj-Gs   c              3  F   K   | ]  }|j                  t                y wr,   )castVARCHAR)rM   cs     r0   rO   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>r   s     6Aw6   !)r   from_iterabler   tupler   operatoror_r   )rl   cols	null_maskcols_strrG   ignore_nullsrm   s   `   r0   funcz(DuckDBNamespace.concat_str.<locals>.funcl   st    ).)<)<<RE<R)RD"D>I>??;Dx||-G$-GHI66H)Z%OY%OPQQr2   callevaluate_output_namesalias_output_namesr/   rl   r   returnlist[Expression])r8   r   r   r-   )r.   rm   r}   rG   r~   s    ``` r0   r   zDuckDBNamespace.concat_stri   s;    	R zz"?"G95AMM	  
 	
r2   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   rM   cols     r0   rO   z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s     )XC*:3A*G)Xru   c              3  v   K   | ]1  }|j                         j                  t        j                         3 y wr,   )	isnotnullrr   r   BIGINTr   s     r0   rO   z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s'     Zcs}}33M4H4HIZs   79)rw   r   rx   add)rz   totalcounts      r0   r~   z-DuckDBNamespace.mean_horizontal.<locals>.func}   sH    ;D8<<)XSW)XYEZUYZE 5= r2   )rz   zIterable[Expression]r   r	   )r8   _from_elementwise_horizontal_op)r.   rG   r~   s      r0   mean_horizontalzDuckDBNamespace.mean_horizontal|   s%    	! :tzz99$GGGr2   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   rZ   r   r-   r   rr   )rl   rc   tztargetdtyper.   r@   s       r0   r~   z!DuckDBNamespace.lit.<locals>.func   sg    %&uM)#..!")),B 1%KE
/00J<r2   c                     |       S r,   rj   )rl   _window_inputsr~   s     r0   window_funcz(DuckDBNamespace.lit.<locals>.window_func   s     8Or2   c                    dgS )Nliteralrj   _dfs    r0   rU   z%DuckDBNamespace.lit.<locals>.<lambda>   s    yk r2   )r   r   r/   r   )rl   r   r   zWindowInputs[Expression]r   r   r8   r-   )r.   r@   r   r   r~   s   ``` @r0   r   zDuckDBNamespace.lit   sP    		 		1I		
 zz"9#MM  
 	
r2   c                J    dd}| j                  |d d | j                        S )Nc                    t        d      gS )Nr   )r   r   s    r0   r~   z!DuckDBNamespace.len.<locals>.func   s    gJ<r2   c                    dgS )Nlenrj   r   s    r0   rU   z%DuckDBNamespace.len.<locals>.<lambda>   s    ug r2   r   )r   r   r   r   r   )r.   r~   s     r0   r   zDuckDBNamespace.len   s/    	  zz"5#MM	  
 	
r2   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   )rl   a_b_abs      r0   r~   z"DuckDBNamespace.corr.<locals>.func   s5    003B003Bfb"%&&r2   r   r   )r   r8   r   r   r-   )r.   r   r   methodrc   r~   s    ``   r0   r   zDuckDBNamespace.corr   sX     YGC%c**	'
 zz"?1"E9!Q?MM	  
 	
r2   )rP      c                j    | j                   }dfd}| j                  |t         t         |      S )Nc                    D ci c]+  }t         ||       gt        || g        D ]	  \  }}}|| - }}}}}dj                  d |j                         D              }t	        d| d      gS c c}}}}w )Nz, c              3  2   K   | ]  \  }}d | d|   yw)"z" := Nrj   )rM   r<   r   s      r0   rO   z7DuckDBNamespace.struct.<locals>.func.<locals>.<genexpr>   s&      #)2s!D6se$#s   zstruct_pack())r   r   joinr^   r   )rl   exprnative_expr_aliasnames_to_cols
field_argsrG   s          r0   r~   z$DuckDBNamespace.struct.<locals>.func   s     "7 7-7H.@r2N.7 *KE {"77M 7  #6C6I6I6K# J #\*Q#?@AA7s   0A4
r   r   )r-   r8   r   r   )r.   rG   r/   r~   s    `  r0   structzDuckDBNamespace.struct   s@    --	B zz"?"G95A	  
 	
r2   )r/   r#   r   None)r   r   )r   ztype[DuckDBExpr])r   ztype[DuckDBLazyFrame])r<   strr=   r	   r   r	   )r@   r   r   r	   r,   )rD   r	   r@   r	   rC   zExpression | Noner   r	   )rG   r	   r   r	   )r^   zIterable[DuckDBLazyFrame]r_   r$   r   r   )rG   r   rm   r   r}   boolr   r   )rG   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__r1   propertyr6   r8   r:   r>   rA   rE   rH   rf   r   r   r   r   r   r   backend_versionr   rj   r2   r0   r)   r)   -   s,    '5&;&;O^;  < <    % (,	;; ; %	;
 
;('.'8D'	'*
 
-0
@D
	
&	H
2	


 *
7H
	
& Xf%
 &
r2   r)   r!   )5
__future__r   rx   	functoolsr   	itertoolsr   typingr   r   r[   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   r   collections.abcr   r    r!   narwhals._compliant.windowr"   r#   narwhals.typingr$   r%   r&   r'   rs   r)   rj   r2   r0   <module>r      s    "    %  / 6 , >
 
 
 
 1 @ @1'7'YY


g
*.@*LMg
r2   