Skip to content

Reducer

coola.reducer

Contain the reducer implementations.

coola.reducer.BaseBasicReducer

Bases: BaseReducer[T]

Extension of BaseReducer that validates the input sequence is not empty before calling the reduction methods.

This class provides concrete implementations of all BaseReducer abstract methods by first checking for empty sequences (raising EmptySequenceError) and then delegating to private _max, _mean, etc. methods that subclasses must implement.

coola.reducer.BaseReducer

Bases: ABC, Generic[T]

Define the base class to implement a reducer.

Example
>>> from coola.reducer import NumpyReducer
>>> reducer = NumpyReducer()
>>> reducer.max([-2, -1, 0, 1, 2])
2
>>> reducer.median([-2, -1, 0, 1, 2])
0.0
>>> reducer.sort([2, 1, -2, 3, 0])
[-2, 0, 1, 2, 3]

coola.reducer.BaseReducer.max abstractmethod

max(values: T) -> int | float

Compute the maximum value.

Parameters:

Name Type Description Default
values T

The values.

required

Returns:

Type Description
int | float

The maximum value.

Raises:

Type Description
EmptySequenceError

if the input sequence is empty.

Example
>>> from coola.reducer import TorchReducer
>>> reducer = TorchReducer()
>>> reducer.max([-2, -1, 0, 1, 2])
2

coola.reducer.BaseReducer.mean abstractmethod

mean(values: T) -> float

Compute the mean value.

Parameters:

Name Type Description Default
values T

The values.

required

Returns:

Type Description
float

The mean value.

Raises:

Type Description
EmptySequenceError

if the input sequence is empty.

Example
>>> from coola.reducer import TorchReducer
>>> reducer = TorchReducer()
>>> reducer.mean([-2, -1, 0, 1, 2])
0.0

coola.reducer.BaseReducer.median abstractmethod

median(values: T) -> int | float

Compute the median value.

Parameters:

Name Type Description Default
values T

The values.

required

Returns:

Type Description
int | float

The median value.

Raises:

Type Description
EmptySequenceError

if the input sequence is empty.

Example
>>> from coola.reducer import TorchReducer
>>> reducer = TorchReducer()
>>> reducer.median([-2, -1, 0, 1, 2])
0

coola.reducer.BaseReducer.min abstractmethod

min(values: T) -> int | float

Compute the minimum value.

Parameters:

Name Type Description Default
values T

The values.

required

Returns:

Type Description
int | float

The minimum value.

Raises:

Type Description
EmptySequenceError

if the input sequence is empty.

Example
>>> from coola.reducer import TorchReducer
>>> reducer = TorchReducer()
>>> reducer.min([-2, -1, 0, 1, 2])
-2

coola.reducer.BaseReducer.quantile abstractmethod

quantile(
    values: T, quantiles: Sequence[float]
) -> list[float]

Compute the quantiles.

Parameters:

Name Type Description Default
values T

The values.

required
quantiles sequence of float

The quantile values in the range [0, 1].

required

Returns:

Type Description
list[float]

The quantiles.

Raises:

Type Description
EmptySequenceError

if the input sequence is empty.

Example
>>> from coola.reducer import TorchReducer
>>> reducer = TorchReducer()
>>> reducer.quantile([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], (0.2, 0.5, 0.9))
[2.0, 5.0, 9.0]

coola.reducer.BaseReducer.sort abstractmethod

sort(
    values: T, descending: bool = False
) -> list[int | float]

Sort the values.

Parameters:

Name Type Description Default
values T

The values.

required
descending bool

If True, sorts in descending order. Defaults to False (ascending order).

False

Returns:

Type Description
list[int | float]

The sorted values.

Example
>>> from coola.reducer import TorchReducer
>>> reducer = TorchReducer()
>>> reducer.sort([2, 1, -2, 3, 0])
[-2, 0, 1, 2, 3]
>>> reducer.sort([2, 1, -2, 3, 0], descending=True)
[3, 2, 1, 0, -2]

coola.reducer.BaseReducer.std abstractmethod

std(values: T) -> float

Compute the standard deviation.

Parameters:

Name Type Description Default
values T

The values.

required

Returns:

Type Description
float

The standard deviation.

Raises:

Type Description
EmptySequenceError

if the input sequence is empty.

Example
>>> from coola.reducer import TorchReducer
>>> reducer = TorchReducer()
>>> reducer.std([-2, -1, 0, 1, 2])
1.581138...

coola.reducer.EmptySequenceError

Bases: Exception

Raise when the sequence is empty because it is not possible to reduce an empty sequence.

coola.reducer.NativeReducer

Bases: BaseBasicReducer[T]

Implement a native reducer.

Example
>>> from coola.reducer import NativeReducer
>>> reducer = NativeReducer()
>>> reducer.max([-2, -1, 0, 1, 2])
2
>>> reducer.median([-2, -1, 0, 1, 2])
0
>>> reducer.sort([2, 1, -2, 3, 0])
[-2, 0, 1, 2, 3]

coola.reducer.NumpyReducer

Bases: BaseBasicReducer[T]

Implement a reducer based on NumPy functions.

Raises:

Type Description
RuntimeError

if numpy is not installed.

Example
>>> from coola.reducer import NumpyReducer
>>> reducer = NumpyReducer()
>>> reducer.max([-2, -1, 0, 1, 2])
2
>>> reducer.median([-2, -1, 0, 1, 2])
0.0
>>> reducer.sort([2, 1, -2, 3, 0])
[-2, 0, 1, 2, 3]

coola.reducer.TorchReducer

Bases: BaseBasicReducer[T]

Implement a reducer based on torch functions.

Raises:

Type Description
RuntimeError

if torch is not installed.

Example
>>> from coola.reducer import TorchReducer
>>> reducer = TorchReducer()
>>> reducer.max([-2, -1, 0, 1, 2])
2
>>> reducer.median([-2, -1, 0, 1, 2])
0
>>> reducer.sort([2, 1, -2, 3, 0])
[-2, 0, 1, 2, 3]

coola.reducer.auto_reducer

auto_reducer() -> BaseReducer[Sequence[float]]

Find the "best" reducer to used based on the installed packages.

The "best" reducer is found by using the following rules: - If torch is available, use TorchReducer - If numpy is available, use NumpyReducer - Otherwise, use BasicReducer

Returns:

Type Description
BaseReducer[Sequence[float]]

The "best" reducer.

Example
>>> from coola.reducer import auto_reducer
>>> reducer = auto_reducer()