Source code for scml.scml2019.helpers

from random import gauss

import numpy as np

__all__ = ["pos_gauss", "_safe_max", "zero_runs"]


[docs]def pos_gauss(mu, sigma): """Returns a sample from a rectified gaussian""" x = gauss(mu, sigma) return abs(x)
[docs]def _safe_max(a, b): if a is None: return b if b is None: return a return max(a, b)
[docs]def zero_runs(a: np.array) -> np.array: """ Finds all runs of zero in an array Args: a: Input array (assumed to be 1D) Returns: np.array: A 2D array giving beginning and end (exclusive) of zero stretches in the input array. """ if len(a) == 0: return [] if np.all(np.equal(a, 0).view(np.int8)): return np.array([[0, len(a)]]) iszero = np.concatenate(([0], np.equal(a, 0).view(np.int8), [0])) absdiff = np.abs(np.diff(iszero)) # Runs start and end where absdiff is 1. ranges = np.where(absdiff == 1)[0].reshape(-1, 2) if len(ranges) == 0 and a[0] == 0: return np.array([[0, len(a)]]) return ranges