in python/datafusion/udf.py [0:0]
def udwf(*args: Any, **kwargs: Any): # noqa: D417
"""Create a new User-Defined Window Function (UDWF).
This class can be used both as a **function** and as a **decorator**.
Usage:
- **As a function**: Call `udwf(func, input_types, return_type, volatility,
name)`.
- **As a decorator**: Use `@udwf(input_types, return_type, volatility,
name)`. When using `udwf` as a decorator, **do not pass `func`
explicitly**.
**Function example:**
```
import pyarrow as pa
class BiasedNumbers(WindowEvaluator):
def __init__(self, start: int = 0) -> None:
self.start = start
def evaluate_all(self, values: list[pa.Array],
num_rows: int) -> pa.Array:
return pa.array([self.start + i for i in range(num_rows)])
def bias_10() -> BiasedNumbers:
return BiasedNumbers(10)
udwf1 = udwf(BiasedNumbers, pa.int64(), pa.int64(), "immutable")
udwf2 = udwf(bias_10, pa.int64(), pa.int64(), "immutable")
udwf3 = udwf(lambda: BiasedNumbers(20), pa.int64(), pa.int64(), "immutable")
```
**Decorator example:**
```
@udwf(pa.int64(), pa.int64(), "immutable")
def biased_numbers() -> BiasedNumbers:
return BiasedNumbers(10)
```
Args:
func: **Only needed when calling as a function. Skip this argument when
using `udwf` as a decorator.**
input_types: The data types of the arguments.
return_type: The data type of the return value.
volatility: See :py:class:`Volatility` for allowed values.
name: A descriptive name for the function.
Returns:
A user-defined window function that can be used in window function calls.
"""
if args and callable(args[0]):
# Case 1: Used as a function, require the first parameter to be callable
return WindowUDF._create_window_udf(*args, **kwargs)
# Case 2: Used as a decorator with parameters
return WindowUDF._create_window_udf_decorator(*args, **kwargs)