L i: UddlmZddlmZddlmZddlZddlmZ ddlm Z ddl mZmZmZmZddlmZer.ddlmZmZdd lmZdd lmZdd lmZdd lmZdd lmZddl m!Z!m"Z"ddddddddddd Z#dddZ$dddZ%ejLZ' ejPZ) ejTZ+ ejXZ- dd#Z0Gd$d%Z1 d?d&Z2d@d'Z3ed()dAd*Z4ejjjlZ6ie6jne jpe6jre jte6jve jxe6jze j|e6j~e je6je je6je je6je je6je je6je je6je je6je je6je je6je je6je je6je je6je jZYd+eZd,<e je je je jd-Z_d.eZd/<e6je6jfZb dBd0ZcdCd1ZddDd2ZedEd3Zf dFd4Zg dGddd5d6 dHd7Zh dId8ZidJd9ZjdKd:Zkgd;Zly#e $r ddl mZ Y*wxYw)L) annotations) lru_cache) TYPE_CHECKINGN) Expression)Version extend_boolisinstance_or_issubclass zip_strict)ColumnNotFoundError)MappingSequence)DuckDBPyRelation)CompliantLazyFrameAny)DuckDBLazyFrame) DuckDBExpr)DType) IntoDTypeTimeUnityearquartermonthdayhourminutesecond millisecond microsecond nanosecond) yqmodhmsmsusnsdescasc)TFz nulls lastz nulls firstc ddlm}t |t r|fn|}|||S#t$r$}dtj}t ||d}~wwxYw)z}Wraps [`duckdb.LambdaExpression`]. [`duckdb.LambdaExpression`]: https://duckdb.org/docs/stable/sql/functions/lambda r)LambdaExpressionz=1.2.0 is required for this operation. Found: DuckDB N)duckdbr,ModuleNotFoundError __version__NotImplementedError isinstancer)paramsexprr,excmsgargss \/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/narwhals/_duckdb/utils.py lambda_exprr8:s]0+#6:6F9FD D$ '' 0LVM_M_L`a!#&C/0s& AAA) separatorcJ|rtdt|g|Stdg|S)aConcatenate many strings, NULL inputs are skipped. Wraps [concat] and [concat_ws] `FunctionExpression`(s). Arguments: exprs: Native columns. separator: String that will be used to separate the values of each column. [concat]: https://duckdb.org/docs/stable/sql/functions/char.html#concatstring- [concat_ws]: https://duckdb.org/docs/stable/sql/functions/char.html#concat_wsseparator-string- concat_wsconcat)Flit)r:exprss r7 concat_strrAJs,6?1[#i. 15 1WAhDWQVDWWc"g}|D]}||}|j|}|j|j|}t|t|k7rd|dt|d}t||j t |||S)Nz!Internal error: got output names z, but only got z results)_evaluate_output_names_alias_output_nameslenAssertionErrorextendzip)dfr@native_resultsr3native_series_list output_namesr5s r7evaluate_exprs_and_aliasesrNZs46NE!"X2226  # # /33LAL | $6 7 75l^?SVWiSjRkkstC % %c,0BCDE rBc:eZdZUdZdZded<ddZeddZy) DeferredTimeZoneaObject which gets passed between `native_to_narwhals_dtype` calls. DuckDB stores the time zone in the connection, rather than in the dtypes, so this ensures that when calculating the schema of a dataframe with multiple timezone-aware columns, that the connection's time zone is only fetched once. Note: we cannot make the time zone a cached `DuckDBLazyFrame` property because the time zone can be modified after `DuckDBLazyFrame` creation: ```python df = nw.from_native(rel) print(df.collect_schema()) rel.query("set timezone = 'Asia/Kolkata'") print(df.collect_schema()) # should change to reflect new time zone ``` Nz str | None_cached_time_zonec||_yN)_rel)selfrels r7__init__zDeferredTimeZone.__init__~s  rBcf|jt|j|_|jS)z;Fetch relation time zone (if it wasn't calculated already).)rQfetch_rel_time_zonerT)rUs r7 time_zonezDeferredTimeZone.time_zones-  ! ! )%8%CD "%%%rB)rVrreturnNone)r[str) __name__ __module__ __qualname____doc__rQ__annotations__rWpropertyrZrBr7rPrPjs-"%)z(&&rBrPc J|j}|j}|dk(r&|jt|j||S|dk(rM|j }|j |Dcgc]&}|j|dt|d||(c}S|dk(r|j \}}|dg}|djdk(r:|dj \}}|jd|d|djdk(r:t|d||} |j| t|S|dk(rF|tjur|jS|j dd} |j| S|d k(r|j|j St!||Scc}w) Nliststructr)namedtypearray)innershapeenum) categoriesztimestamp with time zone)rZ)iddtypesListnative_to_narwhals_dtypechildchildrenStructFieldinsertArraytuplerV1EnumDatetimerZ$_non_nested_native_to_narwhals_dtype) duckdb_dtypeversiondeferred_time_zoneduckdb_dtype_idrqrurtsizermrlros r7rsrss #ooO ^^F& {{ $\%7%7BT U  ("((}} &     q258WFXY   '!"++ t G9AhkkW$(++KE4 LLDG $AhkkW$)q7  FLLN   6;;=   FNN$   6==?  FMMO  V]]_  FLLN  &.."  !  6==?     vs+  -! " V__&# $->>#OO%>>#  / 0 c/6>>+,1-rBz0Mapping[type[DType], duckdb_dtypes.DuckDBPyType]NW_TO_DUCKDB_DTYPES)r%r&r'r(z-Mapping[TimeUnit, duckdb_dtypes.DuckDBPyType]TIME_UNIT_TO_TIMESTAMPc |j}|j}tj|x}r|St ||j rd|t jur d}t|t||j r"tjd|jSd}t|t ||jrn|j}|j }|s t"|S|dk7rd|d}t|||j x} k7rd| d|d }t|tj$St ||j&r'|jx}dk7rd |d}tj(St ||j*r,t-|j.||} t1j2| St ||j4rN|j6D cic]$} | j8t-| j:||&} } t1j<| St||j>r|} t| |j>r#| j.} t| |j>r#t-| ||}d jAd |jBD}tj||StE|tFrd |jHd}t|d|}tK|cc} w)Nz9Converting to Enum is not supported in narwhals.stable.v1ENUMz9Can not cast / initialize Enum without categories presentr'zUOnly microsecond precision is supported for timezone-aware `Datetime` in DuckDB, got z precisionzOnly the connection time zone z is supported, got: .z6Only microsecond-precision Duration is supported, got r9c3(K|] }d|d yw)[]Nrd).0items r7 z+narwhals_to_native_dtype..+s"G4QtfA;"GszConverting to z# dtype is not supported for DuckDB.zUnknown dtype: )&rq base_typerrr r|rr{r0r1 duckdb_dtypes DuckDBPyTypero ValueErrorr} time_unitrZr TIMESTAMP_TZrINTERVALrrnarwhals_to_native_dtyperlr- list_typervfieldsrirj struct_typeryjoinrm issubclassUNSUPPORTED_DTYPESr^rG)rjrrrqr duckdb_typer5tutzrel_tzrlfieldrnw_inner duckdb_innerduckdb_shape_fmts r7rrs^^F!I)--i88{8v{{3 gjj MC%c* * eV[[ ) --U5E5E4H.IJ JIov7 __ __)"- - :ijlimmwxCS/ ! .888& 926(:NrdRSTCS/ !)))v7// !Bd *J2$jYC%%%v{{3(g?QR&&v}}5  JJ0gGYZ Z  !!&))%&#6<<0~~H6<<0/'CUV 77"G5;;"GG))\N;K:L*MNN)/0y1122UV!#&& E7 #C  ! s)K+c<t|tr t|S|SrS)r1r]col)into_expressions r7parse_into_expressionr4s#-os#C3 XXrBcn|sydj|Dcgc]}t|c}}d|Scc}w)Nr9, z partition by )rr) partition_byxby_sqls r7generate_partition_by_sqlr8s@  YY|L!0345L MF 6( ##Ms2c2djd|DS)Nrc3DK|]}tt|ywrS)r]r)rris r7rz$join_column_names..@s6ST^6s )r)namess r7join_column_namesr?s 9966 66rBcX|sydjdt|||D}d|S)Nr9,c3fK|])\}}}t|dt|dt|+yw) N)rDESCENDING_TO_ORDERNULLS_LAST_TO_NULLS_POS)rr _descending _nulls_lasts r7rz(generate_order_by_sql..HsD 'A{K ! # $A&9+&F%GqI`alImHnos/1z order by )rr ) descending nulls_lastorder_byrs r7generate_order_by_sqlrCs=  XX+5h J+WFvh rBF)rr ignore_nullsc 6t|}tdt|} |xs| }|xs| }t|||d} | | d| d|d} n|d|d} n |d| d} nd} |rt |j d d n t |} t | d |d | d | d S) NF)rrz rows between z preceding and z followingz%rows between unbounded preceding and z" preceding and unbounded followingr9)z ignore nulls)z over (r)rrrFrr] removesuffixsql_expression) r3rr rows_startrows_endrrrpbflagsobrowsfuncs r7window_expressionrOs #L 1B s8} -E$uJ$uJ ZJ WB("6 {m?8*JO  6xj K   {m+MN=Ic$i$$S) *. 9sSWyD TF'"Qrd!D6; <.rs"=  s9~=s)znot found in FROM clausez5this column cannot be referenced before it is defined)available_columns)r1r-BinderExceptionanyr from_available_column_namescolumns)rframes` r7catch_duckdb_exceptionrosO)V334= =:#>>#mm   rBcx|dk(r|djS|dk(rtd|ddSt|g|S)Nisnullrcount_distinctzcount(distinct r)r rr>)rir6s r7functionr sJ xAw~~ Qy:;; T>D>rBc ddlm}||S#t$r$}dtj}t ||d}~wwxYw)Nr) SQLExpressionz=1.3.0 is required for this operation. Found: DuckDB )r-r ImportErrorr/r0)r3rr4r5s r7rrsI0(   0LVM_M_L`a!#&C/0s =8=) UNITS_DICTrPr>rrrArrYr rrrr8r?rrsrrwhenr)r2z)str | Expression | tuple[Expression, ...]r3rr[r)r@rr:r]r[r)rJrr@rr[zlist[tuple[str, Expression]])rduckdb_dtypes.DuckDBPyTyperrrrPr[r)rVzduckdb.DuckDBPyRelationr[r])rr]rrr[r)rjrrrrrPr[r)rstr | Expressionr[r)rrr[r])rr]r[r])rrrSequence[bool]rrr[r])rdrdNN)r3rrSequence[str | Expression]rrr int | NonerrrSequence[bool] | Nonerrrboolr[r)r Exceptionrrr[zColumnNotFoundError | Exception)rir]r6rr[r)r3r]r[r)m __future__r functoolsrtypingrr-rduckdb.sqltypessqltypesrr. duckdb.typingnarwhals._utilsrrr r narwhals.exceptionsr collections.abcr r rnarwhals._compliant.typingrnarwhals._duckdb.dataframernarwhals._duckdb.exprrnarwhals.dtypesrnarwhals.typingrrrrrColumnExpressionrConstantExpressionr?CaseExpressionrFunctionExpressionr>r8rArNrPrsrYr~MAINrqrDOUBLErFLOATrBLOBrVARCHARrBOOLEANrDATErTIMErTINYINTrSMALLINTrINTEGERrBIGINTrHUGEINTrUTINYINTr USMALLINTrUINTEGERrUBIGINTrUHUGEINTrrb TIMESTAMP_S TIMESTAMP_MS TIMESTAMP TIMESTAMP_NSrr Categoricalrrrrrrrrr r__all__rdrBr7rDsa" *+ WV31'@:0%3            $E2!-mD * , ( , ( 5 (=G ( ( 57 X  $. !  &&>.J,.J .J).J .Jb 2--:   I NNM((I NNM''I MM=%%I MM=(( I  NNM)) I  KK## I KK##I KK&&I LL-((I LL-''I LL-&&I MM=((I LL-((I MM=**I MM=))I  MM=((!I" NNM**#IE(  " "  $ $  ! !  $ $ IE nnf&8&894 4&4