
    7^j&              	      l   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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)m*Z* d dl
m+Z+ d dl,m-Z- d dl$m.Z. d dl/m0Z0m1Z1m2Z2m3Z3 ejh                  Z4 G d de#eedef         Z5y)    )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window_expression)combine_alias_output_namescombine_evaluate_output_names!evaluate_output_names_and_aliases)SQLNamespace)Implementationrequires)Callable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d%dZ ej0                  d      d!d       Zd!dZy	)&DuckDBNamespacer   _implementationc                   || _         y N)_version)selfversions     e/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/narwhals/_duckdb/namespace.py__init__zDuckDBNamespace.__init__3   s	        c                ,    t        j                  |       S r-   )r   from_namespacer/   s    r1   	selectorszDuckDBNamespace.selectors6   s    &55d;;r3   c                    t         S r-   r   r6   s    r1   _exprzDuckDBNamespace._expr:   s    r3   c                    t         S r-   r
   r6   s    r1   
_lazyframezDuckDBNamespace._lazyframe>   s    r3   c                    t        |g| S r-   )r   )r/   nameargss      r1   	_functionzDuckDBNamespace._functionB   s    $t$$r3   c                    t        |      S r-   )r   )r/   values     r1   _litzDuckDBNamespace._litE   s    5zr3   Nc                T    |t        ||      S t        ||      j                  |      S r-   )r   	otherwise)r/   	conditionrA   rD   s       r1   _whenzDuckDBNamespace._whenH   s/     	5))Iu%//	::r3   c                    t        | S r-   )r   )r/   exprss     r1   	_coalescezDuckDBNamespace._coalesceR   s    ''r3   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xrM   s     r1   	<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)rO   ys     r1   <lambda>z(DuckDBNamespace.concat.<locals>.<lambda>g   s    !''!* r3   )
_native_framelistrM   all	TypeErrornativeduckdbsql_with_nativer   )
r/   itemshowitemnative_itemsfirstmsgres_itemrM   s
            @r1   concatzDuckDBNamespace.concatU   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-    )rN   edfs     r1   rP   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>n   s     <RqQrU<Rs   	separatorc              3  <   K   | ]  }|j                           y wr-   )isnull)rN   ss     r1   rP   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>r   s     -GQahhj-Gs   c              3  F   K   | ]  }|j                  t                y wr-   )castVARCHAR)rN   cs     r1   rP   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>s   s     6Aw6   !)r   from_iterabler   tupler   operatoror_r   )rm   cols	null_maskcols_strrH   ignore_nullsrn   s   `   r1   funcz(DuckDBNamespace.concat_str.<locals>.funcm   st    ).)<)<<RE<R)RD"D>I>??;Dx||-G$-GHI66H)Z%OY%OPQQr3   callevaluate_output_namesalias_output_namesr0   rm   r   returnlist[Expression]r9   r   r   r.   )r/   rn   r~   rH   r   s    ``` r1   r   zDuckDBNamespace.concat_strj   s;    	R zz"?"G95AMM	  
 	
r3   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   rN   cols     r1   rP   z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s     )XC*:3A*G)Xrv   c              3  v   K   | ]1  }|j                         j                  t        j                         3 y wr-   )	isnotnullrs   r   BIGINTr   s     r1   rP   z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s'     Zcs}}33M4H4HIZs   79)rx   r   ry   add)r{   totalcounts      r1   r   z-DuckDBNamespace.mean_horizontal.<locals>.func~   sH    ;D8<<)XSW)XYEZUYZE 5= r3   )r{   zIterable[Expression]r   r	   )r9   _from_elementwise_horizontal_op)r/   rH   r   s      r1   mean_horizontalzDuckDBNamespace.mean_horizontal}   s%    	! :tzz99$GGGr3   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   r[   r   r.   r   rs   )rm   rd   tztargetdtyper/   rA   s       r1   r   z!DuckDBNamespace.lit.<locals>.func   sg    %&uM)#..!")),B 1%KE
/00J<r3   c                     |       S r-   rk   )rm   _window_inputsr   s     r1   window_funcz(DuckDBNamespace.lit.<locals>.window_func   s     8Or3   c                    dgS )Nliteralrk   _dfs    r1   rV   z%DuckDBNamespace.lit.<locals>.<lambda>   s    yk r3   )r   r   r0   r   )rm   r   r   WindowInputs[Expression]r   r   r9   r.   )r/   rA   r   r   r   s   ``` @r1   r   zDuckDBNamespace.lit   sP    		 		1I		
 zz"9#MM  
 	
r3   c                J    dd}| j                  |d d | j                        S )Nc                    t        d      gS )Nr   r   r   s    r1   r   z!DuckDBNamespace.len.<locals>.func   s    gJ<r3   c                    dgS )Nlenrk   r   s    r1   rV   z%DuckDBNamespace.len.<locals>.<lambda>   s    ug r3   r   )r   r   r   r   r   )r/   r   s     r1   r   zDuckDBNamespace.len   s/    	  zz"5#MM	  
 	
r3   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   )rm   a_b_abs      r1   r   z"DuckDBNamespace.corr.<locals>.func   s5    003B003Bfb"%&&r3   r   r   )r   r9   r   r   r.   )r/   r   r   methodrd   r   s    ``   r1   r   zDuckDBNamespace.corr   sX     YGC%c**	'
 zz"?1"E9!Q?MM	  
 	
r3   c          	         	 	 	 	 	 	 	 	 dfddfd}	 	 	 	 	 	 dfd}| j                  ||t              t              | j                        S )Nc                   dk(  r |t        d| |            gS dk(  r |t        d| |            gS | j                         |j                         z  j                  t        j                        } |t        d|            }|t              z
  } |t        d| |            |t        d      z
  |z  z  }t        |t        d      k  t        d             j                  |      gS )Nr   	covar_poprQ   
covar_sampsum)r   r   rs   r   r   r   r   rD   )r   r   wrapis_valid	n_samplesdenominatorrescaledddofs          r1   _covz!DuckDBNamespace.cov.<locals>._cov   s     qyQ{B3455qyQ|R45667==m>R>RSHQuh/0I#c$i/KAlB34SV#{2H A.D	:DDXNOOr3   c                ^    | j                        }| j                        } ||d       S )Nc                    | S r-   rk   )rl   s    r1   rV   z3DuckDBNamespace.cov.<locals>.func.<locals>.<lambda>   s    ! r3   r   )rm   r   r   r   r   r   s      r1   r   z!DuckDBNamespace.cov.<locals>.func   s2    003B003BB,,r3   c                d    | j                        }| j                        } ||fd      S )Nc                0    t        | j                        S r-   )r   partition_by)rl   inputss    r1   rV   z7DuckDBNamespace.cov.<locals>.window_f.<locals>.<lambda>   s    *;Av?R?R*S r3   r   )rm   r   r   r   r   r   r   s    `  r1   window_fz%DuckDBNamespace.cov.<locals>.window_f   s5     003B003BB STTr3   )r   window_functionr   r   r0   )r   r	   r   r	   r   z"Callable[[Expression], Expression]r   r   r   )rm   r   r   r   r   r   r   )r/   r   r   r   r   r   r   s    ```  @r1   covzDuckDBNamespace.cov   s    	P	P *	P2T	P	P$	-
	U	U)A	U	U zz$"?1"E9!Q?MM  
 	
r3   )rQ      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" := Nrk   )rN   r=   r   s      r1   rP   z7DuckDBNamespace.struct.<locals>.func.<locals>.<genexpr>   s&      #)2s!D6se$#s   zstruct_pack())zipr   joinr_   r   )rm   exprnative_expr_aliasnames_to_cols
field_argsrH   s          r1   r   z$DuckDBNamespace.struct.<locals>.func   s     "7 7-0H.6tRD.  .7 *KE {"77M 7  #6C6I6I6K# J #\*Q#?@AA7s   3A7
r   r   r.   r9   r   r   r/   rH   r0   r   s    `  r1   structzDuckDBNamespace.struct   s@    --	B zz"?"G95A	  
 	
r3   c                j    | j                   }dfd}| j                  |t         t         |      S )Nc                f    D cg c]  } ||       D ]  }|  }}}t        dg| gS c c}}w )N	list_packr   )rm   r   r   r{   rH   s       r1   r   z"DuckDBNamespace.list.<locals>.func  s?    ,1NDT"XNkKNKNDNk)D)** Os   -r   r   r   r   s    `  r1   rX   zDuckDBNamespace.list   s?    --	+ zz"?"G95A	  
 	
r3   )r0   r$   r   None)r   r   )r   ztype[DuckDBExpr])r   ztype[DuckDBLazyFrame])r=   strr>   r	   r   r	   )rA   r   r   r	   r-   )rE   r	   rA   r	   rD   zExpression | Noner   r	   )rH   r	   r   r	   )r_   zIterable[DuckDBLazyFrame]r`   r%   r   r   )rH   r   rn   r   r~   boolr   r   )rH   r   r   r   )rA   r(   r   zIntoDType | Noner   r   )r   r   )r   r   r   r   r   r&   r   r   )r   r   r   r   r   intr   r   )__name__
__module____qualname__r   DUCKDBr+   __annotations__r2   propertyr7   r9   r;   r?   rB   rF   rI   rg   r   r   r   r   r   r   r   backend_versionr   rX   rk   r3   r1   r*   r*   .   s7    '5&;&;O^;  < <    % (,	;; ; %	;
 
;('.'8D'	'*
 
-0
@D
	
&	H
2	


 *
7H
	
&%
N Xf%
 &
2
r3   r*   r"   )6
__future__r   ry   	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   r   narwhals._expression_parsingr   r   r   narwhals._sql.namespacer   narwhals._utilsr   r   collections.abcr   r    r!   r"   narwhals._compliant.windowr#   r$   narwhals.typingr%   r&   r'   r(   rt   r*   rk   r3   r1   <module>r      s    "    %  / 6 , >   
 1 4;;'7'YY


^
*.@*LM^
r3   