2222
2323from __future__ import annotations
2424
25- import typing as _typing
26- from typing import TYPE_CHECKING , Any , ClassVar , Iterable , Optional , Sequence
25+ from typing import TYPE_CHECKING , Any , ClassVar , Iterable , Sequence
2726
2827try :
2928 from warnings import deprecated # Python 3.13+
230229]
231230
232231
233- def ensure_expr (value : _typing . Union [ Expr , Any ] ) -> expr_internal .Expr :
232+ def ensure_expr (value : Expr | Any ) -> expr_internal .Expr :
234233 """Return the internal expression from ``Expr`` or raise ``TypeError``.
235234
236235 This helper rejects plain strings and other non-:class:`Expr` values so
@@ -252,7 +251,7 @@ def ensure_expr(value: _typing.Union[Expr, Any]) -> expr_internal.Expr:
252251
253252
254253def ensure_expr_list (
255- exprs : Iterable [_typing . Union [ Expr , Iterable [Expr ] ]],
254+ exprs : Iterable [Expr | Iterable [Expr ]],
256255) -> list [expr_internal .Expr ]:
257256 """Flatten an iterable of expressions, validating each via ``ensure_expr``.
258257
@@ -267,7 +266,7 @@ def ensure_expr_list(
267266 """
268267
269268 def _iter (
270- items : Iterable [_typing . Union [ Expr , Iterable [Expr ] ]],
269+ items : Iterable [Expr | Iterable [Expr ]],
271270 ) -> Iterable [expr_internal .Expr ]:
272271 for expr in items :
273272 if isinstance (expr , Iterable ) and not isinstance (
@@ -281,7 +280,7 @@ def _iter(
281280 return list (_iter (exprs ))
282281
283282
284- def _to_raw_expr (value : _typing . Union [ Expr , str ] ) -> expr_internal .Expr :
283+ def _to_raw_expr (value : Expr | str ) -> expr_internal .Expr :
285284 """Convert a Python expression or column name to its raw variant.
286285
287286 Args:
@@ -305,8 +304,8 @@ def _to_raw_expr(value: _typing.Union[Expr, str]) -> expr_internal.Expr:
305304
306305
307306def expr_list_to_raw_expr_list (
308- expr_list : Optional [ list [Expr ] | Expr ] ,
309- ) -> Optional [ list [expr_internal .Expr ]] :
307+ expr_list : list [Expr ] | Expr | None ,
308+ ) -> list [expr_internal .Expr ] | None :
310309 """Convert a sequence of expressions or column names to raw expressions."""
311310 if isinstance (expr_list , Expr | str ):
312311 expr_list = [expr_list ]
@@ -315,16 +314,16 @@ def expr_list_to_raw_expr_list(
315314 return [_to_raw_expr (e ) for e in expr_list ]
316315
317316
318- def sort_or_default (e : _typing . Union [ Expr , SortExpr ] ) -> expr_internal .SortExpr :
317+ def sort_or_default (e : Expr | SortExpr ) -> expr_internal .SortExpr :
319318 """Helper function to return a default Sort if an Expr is provided."""
320319 if isinstance (e , SortExpr ):
321320 return e .raw_sort
322321 return SortExpr (e , ascending = True , nulls_first = True ).raw_sort
323322
324323
325324def sort_list_to_raw_sort_list (
326- sort_list : Optional [ _typing . Union [ Sequence [SortKey ], SortKey ]] ,
327- ) -> Optional [ list [expr_internal .SortExpr ]] :
325+ sort_list : Sequence [SortKey ] | SortKey | None ,
326+ ) -> list [expr_internal .SortExpr ] | None :
328327 """Helper function to return an optional sort list to raw variant."""
329328 if isinstance (sort_list , Expr | SortExpr | str ):
330329 sort_list = [sort_list ]
@@ -601,7 +600,7 @@ def column(value: str) -> Expr:
601600 """Creates a new expression representing a column."""
602601 return Expr (expr_internal .RawExpr .column (value ))
603602
604- def alias (self , name : str , metadata : Optional [ dict [str , str ]] = None ) -> Expr :
603+ def alias (self , name : str , metadata : dict [str , str ] | None = None ) -> Expr :
605604 """Assign a name to the expression.
606605
607606 Args:
@@ -630,13 +629,13 @@ def is_not_null(self) -> Expr:
630629 """Returns ``True`` if this expression is not null."""
631630 return Expr (self .expr .is_not_null ())
632631
633- def fill_nan (self , value : Optional [ _typing . Union [ Any , Expr ]] = None ) -> Expr :
632+ def fill_nan (self , value : Any | Expr | None = None ) -> Expr :
634633 """Fill NaN values with a provided value."""
635634 if not isinstance (value , Expr ):
636635 value = Expr .literal (value )
637636 return Expr (functions_internal .nanvl (self .expr , value .expr ))
638637
639- def fill_null (self , value : Optional [ _typing . Union [ Any , Expr ]] = None ) -> Expr :
638+ def fill_null (self , value : Any | Expr | None = None ) -> Expr :
640639 """Fill NULL values with a provided value."""
641640 if not isinstance (value , Expr ):
642641 value = Expr .literal (value )
@@ -649,7 +648,7 @@ def fill_null(self, value: Optional[_typing.Union[Any, Expr]] = None) -> Expr:
649648 bool : pa .bool_ (),
650649 }
651650
652- def cast (self , to : _typing . Union [ pa .DataType [Any ], type ] ) -> Expr :
651+ def cast (self , to : pa .DataType [Any ] | type ) -> Expr :
653652 """Cast to a new data type."""
654653 if not isinstance (to , pa .DataType ):
655654 try :
@@ -722,7 +721,7 @@ def column_name(self, plan: LogicalPlan) -> str:
722721 """Compute the output column name based on the provided logical plan."""
723722 return self .expr .column_name (plan ._raw_plan )
724723
725- def order_by (self , * exprs : _typing . Union [ Expr , SortExpr ] ) -> ExprFuncBuilder :
724+ def order_by (self , * exprs : Expr | SortExpr ) -> ExprFuncBuilder :
726725 """Set the ordering for a window or aggregate function.
727726
728727 This function will create an :py:class:`ExprFuncBuilder` that can be used to
@@ -1271,17 +1270,10 @@ class Window:
12711270
12721271 def __init__ (
12731272 self ,
1274- partition_by : Optional [_typing .Union [list [Expr ], Expr ]] = None ,
1275- window_frame : Optional [WindowFrame ] = None ,
1276- order_by : Optional [
1277- _typing .Union [
1278- list [_typing .Union [SortExpr , Expr , str ]],
1279- Expr ,
1280- SortExpr ,
1281- str ,
1282- ]
1283- ] = None ,
1284- null_treatment : Optional [NullTreatment ] = None ,
1273+ partition_by : list [Expr ] | Expr | None = None ,
1274+ window_frame : WindowFrame | None = None ,
1275+ order_by : list [SortExpr | Expr | str ] | Expr | SortExpr | str | None = None ,
1276+ null_treatment : NullTreatment | None = None ,
12851277 ) -> None :
12861278 """Construct a window definition.
12871279
@@ -1301,7 +1293,7 @@ class WindowFrame:
13011293 """Defines a window frame for performing window operations."""
13021294
13031295 def __init__ (
1304- self , units : str , start_bound : Optional [ Any ] , end_bound : Optional [ Any ]
1296+ self , units : str , start_bound : Any | None , end_bound : Any | None
13051297 ) -> None :
13061298 """Construct a window frame using the given parameters.
13071299
@@ -1351,7 +1343,7 @@ def __init__(self, frame_bound: expr_internal.WindowFrameBound) -> None:
13511343 """Constructs a window frame bound."""
13521344 self .frame_bound = frame_bound
13531345
1354- def get_offset (self ) -> Optional [ int ] :
1346+ def get_offset (self ) -> int | None :
13551347 """Returns the offset of the window frame."""
13561348 return self .frame_bound .get_offset ()
13571349
@@ -1435,4 +1427,4 @@ def __repr__(self) -> str:
14351427 return self .raw_sort .__repr__ ()
14361428
14371429
1438- SortKey = _typing . Union [ Expr , SortExpr , str ]
1430+ SortKey = Expr | SortExpr | str
0 commit comments