
    Lpj>                    `   % S SK Jr  S SKrS SKJr  S SKJrJr  S SKrS SKJ	r	  S SK
JrJrJrJr  S SKJr  \(       a4  S SKJr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J r   \r!S\"S'    \RF                  RI                  5       r% \(       d  \%S:  a  S SKJ&r'  OS SKJr'  SSSSSSSSSSS.
r(S S!S".r)S#S$S".r*\RV                  r, \RZ                  r. \R^                  r0 \Rb                  r2       SCS% jr3S&S'.SDS( jjr4      SES) jr5 " S* S+5      r6        SFS, jr7SGS- jr8\" S.S/9SHS0 j5       r9\Rt                  Rv                  r;0 \;Rx                  \'Rz                  _\;R|                  \'R~                  _\;R                  \'R                  _\;R                  \'R                  _\;R                  \'R                  _\;R                  \'R                  _\;R                  \'R                  _\;R                  \'R                  _\;R                  \'R                  _\;R                  \'R                  _\;R                  \'R                  _\;R                  \'R                  _\;R                  \'R                  _\;R                  \'R                  _\;R                  \'R                  _\;R                  \'R                  _\;R                  \'R                  _r^S1\"S2'   \'R                  \'R                  \'R                  \'R                  S3.rcS4\"S5'   \;R                  \;R                  4rf        SIS6 jrgSJS7 jrhSKS8 jriSLS9 jrj        SMS: jrk    SNSSS;S<.                 SOS= jjjrl      SPS> jrm\R                  \R                  S?.rpSQS@ jrqSRSA jrr/ SBQrsg)S    )annotationsN)	lru_cache)TYPE_CHECKINGAny)
Expression)ImplementationVersionextend_boolisinstance_or_issubclass)ColumnNotFoundError)MappingSequence)	TypeAlias)DuckDBPyRelation)CompliantLazyFrameAny)DuckDBLazyFrame)
DuckDBExpr)DType)	IntoDTypeTimeUnitr   
Incomplete)      )sqltypes)typingyearquartermonthdayhourminutesecondmillisecondmicrosecond
nanosecond)
yqmodhmsmsusnsdescasc)TFz
nulls lastznulls firstc                    SSK Jn  [        U [        5      (       a  U 4OU nU" XQ5      $ ! [         a$  nS[         R                   3n[	        U5      UeSnAff = f)zuWraps [`duckdb.LambdaExpression`].

[`duckdb.LambdaExpression`]: https://duckdb.org/docs/stable/sql/functions/lambda
r   )LambdaExpressionz<DuckDB>=1.2.0 is required for this operation. Found: DuckDB N)duckdbr3   ModuleNotFoundError__version__NotImplementedError
isinstancer   )paramsexprr3   excmsgargss         R/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/narwhals/_duckdb/utils.pylambda_exprr?   B   s^    0+ #6:66F9FDD''	  0LVM_M_L`a!#&C/0s   * 
AAA )	separatorc                T    U (       a  [        S[        U 5      /UQ76 $ [        S/UQ76 $ )a  Concatenate 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_wsconcat)Flit)rA   exprss     r>   
concat_strrH   R   s,     6?1[#i.151WAhDWQVDWW    c          	     &   / nU H  nU" U 5      nUR                  U 5      nUR                  b  UR                  U5      n[        U5      [        U5      :w  a  SU S[        U5       S3n[        U5      eUR	                  [        XTSS95        M     U$ )Nz!Internal error: got output names z, but only got z resultsFstrict)_evaluate_output_names_alias_output_nameslenAssertionErrorextendzip)dfrG   native_resultsr:   native_series_listoutput_namesr<   s          r>   evaluate_exprs_and_aliasesrW   b   s     46N!"X2226##/33LAL|$6 775l^?SVWiSjRkkstC %%c,5QR  rI   c                  F    \ rS rSr% SrSrS\S'   S	S jr\S
S j5       r	Sr
g)DeferredTimeZoner   am  Object 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                    Xl         g N)_rel)selfrels     r>   __init__DeferredTimeZone.__init__   s    	rI   c                h    U R                   c  [        U R                  5      U l         U R                   $ )z;Fetch relation time zone (if it wasn't calculated already).)r[   fetch_rel_time_zoner^   )r_   s    r>   	time_zoneDeferredTimeZone.time_zone   s-     !!)%8%CD"%%%rI   )r[   r^   )r`   r   returnNone)rg   str)__name__
__module____qualname____firstlineno____doc__r[   __annotations__ra   propertyre   __static_attributes__ rI   r>   rY   rY   r   s-    " %)z( & &rI   rY   c                   U R                   nUR                  nUS:X  a%  UR                  [        U R                  X5      5      $ US:X  aL  U R
                  nUR                  U Vs/ s H#  nUR                  US   [        US   X5      S9PM%     sn5      $ US:X  a  U R
                  u  pgUS   /nUS   R                   S:X  a;  US   R
                  u  pgUR                  SUS   5        US   R                   S:X  a  M;  [        US   X5      n	UR                  U	[        U5      S9$ US:X  aF  U[        R                  L a  UR                  5       $ U R
                  S   S   n
UR                  U
5      $ US	:X  a  UR                  UR                  S
9$ US:X  a$  U R
                  u  u  pu  pUR!                  X5      $ [#        X15      $ s  snf )Nliststructr   r   )namedtypearray)innershapeenumztimestamp with time zone)re   decimal)iddtypesListnative_to_narwhals_dtypechildchildrenStructFieldinsertArraytupler	   V1EnumDatetimere   Decimal$_non_nested_native_to_narwhals_dtype)duckdb_dtypeversiondeferred_time_zoneduckdb_dtype_idr~   r   r   sizerz   ry   
categories_	precisionscales                 r>   r   r      s   
 (??O^^F & {{$\%7%7U
 	
 ("8D8M8M}} &
 &E	 q258WY   &
 	
 '! #++a	AhkkW$(++KELLDG$ AhkkW$ )q7O||%uU||<<& gjj ;;= !-!6!6q!9!!<
{{:&&44);)E)EFF)# &2%:%:"
~~i///IIKs   %*Gc                V    U R                  SS5      R                  5       nUc   eUS   $ )Nzduckdb_settings()z;select value from duckdb_settings() where name = 'TimeZone'r   )queryfetchone)r`   results     r>   rd   rd      s8    YYZhj  !9rI      )maxsizec                <   UR                   n0 SUR                  5       _SUR                  5       _SUR                  5       _SUR	                  5       _SUR                  5       _SUR                  5       _SUR                  5       _SUR                  5       _S	UR                  5       _S
UR                  5       _SUR                  5       _SUR                  5       _SUR                  5       _SUR                  5       _SUR                  S5      _SUR                  S5      _SUR                  5       _UR                  S5      UR!                  5       UR#                  5       UR%                  5       UR'                  5       S.ER)                  XR+                  5       5      $ )Nhugeintbigintintegersmallinttinyintuhugeintubigintuinteger	usmallintutinyintdoublefloatvarchardatetimestamp_sr,   timestamp_msr-   	timestampr/   )timestamp_nsbooleanintervaltimeblob)r~   Int128Int64Int32Int16Int8UInt128UInt64UInt32UInt16UInt8Float64Float32StringDater   BooleanDurationTimeBinarygetUnknown)r   r   r~   s      r>   r   r      s   ^^F6==?&,,. 	6<<> 	FLLN	
 	6;;= 	FNN$ 	6==? 	FMMO 	V]]_ 	FLLN 	&.." 	! 	6==? 	 	vs+  	-!" 	V__&#$ ->>#OO%-. 
c/>>+,/-rI   z0Mapping[type[DType], duckdb_dtypes.DuckDBPyType]NW_TO_DUCKDB_DTYPES)r,   r-   r.   r/   z-Mapping[TimeUnit, duckdb_dtypes.DuckDBPyType]TIME_UNIT_TO_TIMESTAMPc           	        UR                   nU R                  5       n[        R                  U5      =n(       a  U$ [	        XR
                  5      (       ak  U[        R                  L a  Sn[        U5      e[        XR
                  5      (       a$  [        R                  " SU R                  < 35      $ Sn[        U5      e[	        XR                  5      (       at  U R                  nU R                   nU(       d	  ["        U   $ US:w  a  SU S3n[        U5      eXR                   =n	:w  a  SU	 SU S	3n[        U5      e[        R$                  $ [	        XR&                  5      (       a(  U R                  =nS:w  a  S
U S3n[        R(                  $ [	        XR*                  5      (       a,  [-        U R.                  X5      n
[0        R2                  " U
5      $ [	        XR4                  5      (       aQ  U R6                   Vs0 s H$  nUR8                  [-        UR:                  X5      _M&     nn[0        R<                  " U5      $ [        XR>                  5      (       a  U n[        XR>                  5      (       a(  UR.                  n[        XR>                  5      (       a  M(  [-        XU5      nSRA                  S U RB                   5       5      n[        R                  " U U 35      $ [        XRD                  5      (       a1  [        R                  " SU RF                   SU RH                   S35      $ [K        U[L        5      (       a  SURN                   S3n[        U5      eSU  3n[Q        U5      es  snf )Nz9Converting to Enum is not supported in narwhals.stable.v1ENUMz9Can not cast / initialize Enum without categories presentr.   zUOnly microsecond precision is supported for timezone-aware `Datetime` in DuckDB, got z
 precisionzOnly the connection time zone z is supported, got: .z6Only microsecond-precision Duration is supported, got r@   c              3  .   #    U  H  nS U S3v   M     g7f)[]Nrr   ).0items     r>   	<genexpr>+narwhals_to_native_dtype.<locals>.<genexpr>:  s     "G;4QtfA;;s   zDECIMAL(, )zConverting to z# dtype is not supported for DuckDB.zUnknown dtype: ))r~   	base_typer   r   r   r   r	   r   r7   r8   duckdb_dtypesDuckDBPyTyper   
ValueErrorr   	time_unitre   r   TIMESTAMP_TZr   INTERVALr   narwhals_to_native_dtypery   r4   	list_typer   fieldsrv   rw   struct_typer   joinrz   r   r   r   
issubclassUNSUPPORTED_DTYPESrj   rP   )rw   r   r   r~   r   duckdb_typer<   tutzrel_tzry   fieldr   nw_innerduckdb_innerduckdb_shape_fmts                   r>   r   r     s    ^^F!I)--i88{8{{33gjj MC%c**e[[)) --U5E5E4H.IJJIo77____)"--:ijlimmwxCS/!888&926(:NrdRSTCS/!)))77//!Bd*J2$jYC%%%{{33(gR&&}}55 
% JJ0gZZ% 	 
 !!&))%&&#<<00~~H <<00/CUV77"G5;;"GG))\N;K:L*MNN%(())HU__4ER}TU*VWW)/00y1122UV!#&&E7
#C

%
s   >+M2c                F    [        U [        5      (       a  [        U 5      $ U $ r]   )r8   ri   col)into_expressions    r>   parse_into_expressionr   E  s    #-os#C#C3XXrI   c                 ~    U (       d  gSR                  U  Vs/ s H  n[        U5       PM     sn5      nSU 3$ s  snf )Nr@   r   zpartition by )r   r   )partition_byxby_sqls      r>   generate_partition_by_sqlr   I  sD    YY|L|!0345|LMF6(## Ms   :c                 2    SR                  S U  5       5      $ )Nr   c              3  J   #    U  H  n[        [        U5      5      v   M     g 7fr]   )ri   r   )r   rv   s     r>   r   $join_column_names.<locals>.<genexpr>Q  s     6ST^^s   !#)r   )namess    r>   join_column_namesr   P  s    996666rI   c           
     ^    U(       d  gSR                  S [        X USS9 5       5      nSU 3$ )Nr@   ,c              3  j   #    U  H)  u  pn[        U5       S [        U    S [        U    3v   M+     g7f) N)r   DESCENDING_TO_ORDERNULLS_LAST_TO_NULLS_POS)r   r   _descending_nulls_lasts       r>   r   (generate_order_by_sql.<locals>.<genexpr>Y  sF      ,
'AK !#
$A&9+&F%GqI`alImHno,
s   13TrK   z	order by )r   rR   )
descending
nulls_lastorder_byr   s       r>   generate_order_by_sqlr  T  s@     XX +.*T,
 F vhrI   F)r  r  ignore_nullsc          
     Z   [        U6 n[        S[        U5      5      n	U=(       d    U	nU=(       d    U	n[        X%US.6n
Ub  Ub  SU*  SU S3nOUb  SU S3nOUb  SU*  S3nOSnU(       a  [	        U 5      R                  S	5       S
3O
[	        U 5      n[        U SU SU
 SU S	35      $ )NF)r  r  zrows between z preceding and z
 followingz%rows between unbounded preceding and z" preceding and unbounded followingr@   r   z ignore nulls)z over (r   )r   r
   rO   r  ri   removesuffixsql_expression)r:   r   r  
rows_startrows_endr  r  r  pbflagsobrowsfuncs                r>   window_expressionr  b  s     
#L	1Bs8}-E$uJ$uJ	J	WB("6
{m?8*JO		6xj
K		
{m+MN=Ic$i$$S)*.9sSWyDTF'"Qrd!D6;<<rI   c                  ^  [        T [        R                  5      (       a8  [        U 4S jS 5       5      (       a  [        R
                  " UR                  S9$ T $ )Nc              3  @   >#    U  H  nU[        T5      ;   v   M     g 7fr]   )ri   )r   r<   	exceptions     r>   r   )catch_duckdb_exception.<locals>.<genexpr>  s%      =
C 	s9~
s   )znot found in FROM clausez5this column cannot be referenced before it is defined)available_columns)r8   r4   BinderExceptionanyr   from_available_column_namescolumns)r  frames   ` r>   catch_duckdb_exceptionr    sW     )V3344 =
= : : #>>#mm
 	
 rI   )floordivandc                    U [         ;   a  [         U    " U6 $ U S;   a  [        US   U 5      " 5       $ U S:X  a  [        SUS    S35      $ [        U /UQ76 $ )N>   isnull	isnotnullr   count_distinctzcount(distinct r   )_BINARY_OPSgetattrr	  rE   )rv   r=   s     r>   functionr%    sf    {4 $''&&tAw%''Qy:;;T>D>rI   c                     SSK Jn  U" U 5      $ ! [         a$  nS[         R                   3n[	        U5      UeS nAff = f)Nr   )SQLExpressionz<DuckDB>=1.3.0 is required for this operation. Found: DuckDB )r4   r'  ImportErrorr6   r7   )r:   r'  r;   r<   s       r>   r	  r	    sI    0(   0LVM_M_L`a!#&C/0s    
>9>)
UNITS_DICTrY   rE   r  r   rH   r   rd   r%  r  r   r   r?   rF   r   r   r   r	  whenr  )r9   z)str | Expression | tuple[Expression, ...]r:   r   rg   r   )rG   r   rA   ri   rg   r   )rS   r   rG   r   rg   zlist[tuple[str, Expression]])r   duckdb_dtypes.DuckDBPyTyper   r	   r   rY   rg   r   )r`   zduckdb.DuckDBPyRelationrg   ri   )r   ri   r   r	   rg   r   )rw   r   r   r	   r   rY   rg   r+  )r   str | Expressionrg   r   )r   r,  rg   ri   )r   ri   rg   ri   )r  r,  r  Sequence[bool]r  r-  rg   ri   )rr   rr   NN)r:   r   r   Sequence[str | Expression]r  r.  r
  
int | Noner  r/  r  Sequence[bool] | Noner  r0  r  boolrg   r   )r  	Exceptionr  r   rg   zColumnNotFoundError | Exception)rv   ri   r=   r   rg   r   )r:   ri   rg   r   )t
__future__r   operator	functoolsr   r   r   r   r4   r   narwhals._utilsr   r	   r
   r   narwhals.exceptionsr   collections.abcr   r   r   r   narwhals._compliant.typingr   narwhals._duckdb.dataframer   narwhals._duckdb.exprr   narwhals.dtypesr   narwhals.typingr   r   r   ro   DUCKDB_backend_versionBACKEND_VERSIONr   r   r)  r   r   ColumnExpressionr   ConstantExpressionrF   CaseExpressionr*  FunctionExpressionrE   r?   rH   rW   rY   r   rd   r   MAINr~   r   DOUBLEr   FLOATr   BLOBr   VARCHARr   BOOLEANr   DATEr   TIMEr   TINYINTr   SMALLINTr   INTEGERr   BIGINTr   HUGEINTr   UTINYINTr   	USMALLINTr   UINTEGERr   UBIGINTr   UHUGEINTr   TIMESTAMP_STIMESTAMP_MS	TIMESTAMPTIMESTAMP_NSr   CategoricalFloat16r   r   r   r   r   r  r  r  r  and_r#  r%  r	  __all__rr   rI   r>   <module>r_     s   "   %   Z Z 31 '@:0%3
I > !''88: *Ov-0. 
	
				



 $E2 !-mD  * , (
 ,(5(=G((  57 X $.! & &>6J,6J6J )6J 	6Jr 2- -8 
		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**#I E ( 
	"	"

$
$

!
!

$
$	I E  ((&..9 66&6<L66rY$7  -; IW    02+-!= )-(,=
=,= )= 	=
 = &= &= = =@!6$" $,,X]]CrI   