sign

compression_safeguards.safeguards.pointwise.sign

Sign-preserving safeguard.

Classes:

SignPreservingSafeguard

SignPreservingSafeguard(
    *, offset: int | float | str | Parameter = 0
)

Bases: PointwiseSafeguard

flowchart LR compression_safeguards.safeguards.pointwise.sign.SignPreservingSafeguard[SignPreservingSafeguard] compression_safeguards.safeguards.pointwise.abc.PointwiseSafeguard[PointwiseSafeguard] compression_safeguards.safeguards.abc.Safeguard[Safeguard] compression_safeguards.safeguards.pointwise.abc.PointwiseSafeguard --> compression_safeguards.safeguards.pointwise.sign.SignPreservingSafeguard compression_safeguards.safeguards.abc.Safeguard --> compression_safeguards.safeguards.pointwise.abc.PointwiseSafeguard click compression_safeguards.safeguards.pointwise.sign.SignPreservingSafeguard href "" "compression_safeguards.safeguards.pointwise.sign.SignPreservingSafeguard" click compression_safeguards.safeguards.pointwise.abc.PointwiseSafeguard href "" "compression_safeguards.safeguards.pointwise.abc.PointwiseSafeguard" click compression_safeguards.safeguards.abc.Safeguard href "" "compression_safeguards.safeguards.abc.Safeguard"

The SignPreservingSafeguard guarantees that values have the same sign (-1, 0, +1) in the decompressed output as they have in the input data.

NaN values are preserved as NaN values with the same sign bit.

This safeguard can be configured to preserve the sign relative to a custom offset, e.g. to preserve global minima and maxima. The sign is then defined based on arithmetic comparison, i.e.

\[ \text{sign}(x, offset) = \begin{cases} -\text{NaN} \quad &\text{if } x \text{ is} -\text{NaN} \\ -1 \quad &\text{if } x < offset \\ 0 \quad &\text{if } x = offset \\ +1 \quad &\text{if } x > offset \\ +\text{NaN} \quad &\text{if } x \text{ is} +\text{NaN} \end{cases} \]

This safeguard should be combined with e.g. an error bound, as it by itself accepts any value with the same sign.

Parameters:
  • offset (int | float | str | Parameter, default: 0 ) –

    The non-NaN value of or the late-bound parameter name for the offset compared to which the sign is computed. By default, the offset is zero. Values that are above / below / equal to the offset are guaranteed to stay above / below / equal to the offset, respectively. Literal values are (unsafely) cast to the data dtype before comparison.

Raises:

Methods:

kind class-attribute

kind: str = 'sign'

late_bound property

late_bound: Set[Parameter]

The set of late-bound parameters that this safeguard has.

Late-bound parameters are only bound when checking and applying the safeguard, in contrast to the normal early-bound parameters that are configured during safeguard initialisation.

Late-bound parameters can be used for parameters that depend on the specific data that is to be safeguarded.

check_pointwise

check_pointwise(
    data: ndarray[S, dtype[T]],
    approximation: ndarray[S, dtype[T]],
    *,
    late_bound: Bindings,
    where: Literal[True] | ndarray[S, dtype[bool]] = True,
) -> ndarray[S, dtype[bool]]

Check for which elements in the approximation array the signs match the signs of the data array elements'.

Parameters:
  • data (ndarray[S, dtype[T]]) –

    Original data array, relative to which the approximation is checked.

  • approximation (ndarray[S, dtype[T]]) –

    Approximation of the data array.

  • late_bound (Bindings) –

    Bindings for late-bound parameters, including for this safeguard.

  • where (Literal[True] | ndarray[S, dtype[bool]], default: True ) –

    Only check at data points where the condition is True.

Returns:
  • ok( ndarray[S, dtype[bool]] ) –

    Pointwise, True if the check succeeded for this element.

Raises:
  • LateBoundParameterResolutionError

    if the offset is late-bound but its late-bound parameter is not in late_bound.

  • ValueError

    if the late-bound offset could not be broadcast to the data's shape.

  • ValueError

    if the late-bound offset contains NaN values.

  • TypeError

    if the offset is floating-point but the data is integer.

  • ValueError

    if not all offsets could not be losslessly converted to the data's type.

compute_safe_intervals

compute_safe_intervals(
    data: ndarray[S, dtype[T]],
    *,
    late_bound: Bindings,
    where: Literal[True] | ndarray[S, dtype[bool]] = True,
) -> IntervalUnion[T, int, int]

Compute the intervals in which the data's sign is preserved.

Parameters:
  • data (ndarray[S, dtype[T]]) –

    Data for which the safe intervals should be computed.

  • late_bound (Bindings) –

    Bindings for late-bound parameters, including for this safeguard.

  • where (Literal[True] | ndarray[S, dtype[bool]], default: True ) –

    Only compute the safe intervals at pointwise checks where the condition is True.

Returns:
  • intervals( IntervalUnion[T, int, int] ) –

    Union of intervals in which the data's sign is preserved.

Raises:
  • LateBoundParameterResolutionError

    if the offset is late-bound but its late-bound parameter is not in late_bound.

  • ValueError

    if the late-bound offset could not be broadcast to the data's shape.

  • ValueError

    if the late-bound offset contains NaN values.

  • TypeError

    if the offset is floating-point but the data is integer.

  • ValueError

    if not all offsets could not be losslessly converted to the data's type.

compute_footprint

compute_footprint(
    foot: ndarray[S, dtype[bool]],
    *,
    late_bound: Bindings,
    where: Literal[True] | ndarray[S, dtype[bool]] = True,
) -> ndarray[S, dtype[bool]]

Compute the footprint of the foot array, e.g. for expanding data points into the pointwise checks that they contribute to.

The footprint is equivalent to foot & where.

Parameters:
  • foot (ndarray[S, dtype[bool]]) –

    Array for which the footprint is computed.

  • late_bound (Bindings) –

    Bindings for late-bound parameters, including for this safeguard.

  • where (Literal[True] | ndarray[S, dtype[bool]], default: True ) –

    Only compute the footprint at pointwise checks where the condition is True.

Returns:

compute_inverse_footprint

compute_inverse_footprint(
    foot: ndarray[S, dtype[bool]],
    *,
    late_bound: Bindings,
    where: Literal[True] | ndarray[S, dtype[bool]] = True,
) -> ndarray[S, dtype[bool]]

Compute the inverse footprint of the foot array, e.g. for expanding pointwise check fails into the points that could have contributed to the failures.

The inverse footprint is equivalent to foot & where.

Parameters:
  • foot (ndarray[S, dtype[bool]]) –

    Array for which the inverse footprint is computed.

  • late_bound (Bindings) –

    Bindings for late-bound parameters, including for this safeguard.

  • where (Literal[True] | ndarray[S, dtype[bool]], default: True ) –

    Only compute the inverse footprint at pointwise checks where the condition is True.

Returns:

get_config

get_config() -> dict[str, JSON]

Returns the configuration of the safeguard.

Returns:
  • config( dict[str, JSON] ) –

    Configuration of the safeguard.