Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions src/pyrecest/distributions/circle/wrapped_laplace_distribution.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# pylint: disable=no-name-in-module,no-member
from numbers import Integral

from pyrecest.backend import all, asarray, exp, isfinite, mod, ndim, pi
import numpy as np
from pyrecest.backend import all, asarray, exp, isfinite, mod, ndim, pi, to_numpy

from .abstract_circular_distribution import AbstractCircularDistribution

Expand All @@ -10,9 +11,14 @@


def _validate_positive_scalar(value, name):
value = asarray(value)
if value.shape not in ((), (1,)):
raise ValueError(f"{name} must be a positive scalar.")
message = f"{name} must be a positive real scalar."
try:
value = asarray(value)
numpy_value = np.asarray(to_numpy(value))
except (TypeError, ValueError, RuntimeError, OverflowError) as exc:
raise ValueError(message) from exc
if numpy_value.shape not in ((), (1,)) or numpy_value.dtype.kind not in "iuf":
raise ValueError(message)
if not bool(all(isfinite(value))):
raise ValueError(f"{name} must be finite.")
if not bool(all(value > 0.0)):
Expand Down
17 changes: 17 additions & 0 deletions tests/distributions/test_wrapped_laplace_real_parameters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import pytest

from pyrecest.distributions.circle.wrapped_laplace_distribution import (
WrappedLaplaceDistribution,
)


@pytest.mark.parametrize("parameter_name", ["lambda_", "kappa_"])
@pytest.mark.parametrize("invalid_value", [True, 1.0 + 1.0j])
def test_wrapped_laplace_rejects_non_real_rate_parameters(
parameter_name, invalid_value
):
parameters = {"lambda_": 2.0, "kappa_": 1.3}
parameters[parameter_name] = invalid_value

with pytest.raises(ValueError, match=parameter_name):
WrappedLaplaceDistribution(**parameters)
Loading