Source code for anesthetic.boundary

"""Boundary correction utilities."""

import numpy as np
from scipy.special import erf


[docs] def cut_and_normalise_gaussian(x, p, bw, xmin=None, xmax=None): """Cut and normalise boundary correction for a Gaussian kernel. Parameters ---------- x : array-like locations for normalisation correction p : array-like probability densities for normalisation correction bw : float bandwidth of KDE xmin, xmax : float lower/upper prior bound optional, default None Returns ------- p : np.array corrected probabilities """ correction = np.ones_like(x) if xmin is not None: correction *= 0.5 * (1 + erf((x-xmin)/bw/np.sqrt(2))) correction[x < xmin] = np.inf if xmax is not None: correction *= 0.5 * (1 + erf((xmax-x)/bw/np.sqrt(2))) correction[x > xmax] = np.inf return p/correction