def __mul__(self, other): if isinstance(other, CovarianceFunction): return CovarianceFunction(covariance=lambda x, y: self.covariance(x, y)*other.covariance(x, y)) if isinstance(other, (Variable, PartialLink)): other = var2link(other) return CovarianceFunction(covariance=lambda x, y: self.covariance(x, y) * other) elif isinstance(other, (int, float)): return CovarianceFunction(covariance=lambda x, y: self.covariance(x, y) * other) else: raise ValueError("Only covarianceFunctions and numbers can be multiplied with CovarianceFunctions")
def __init__(self, scale, jitter=0.): self.scale = var2link(scale) covariance = lambda x, y: BF.exp(-BF.abs(x - y) / (scale)) + BF.delta(x, y) * jitter super().__init__(covariance=covariance)
def __init__(self, frequency, scale, jitter=0.): self.frequency = var2link(frequency) self.scale = var2link(scale) covariance = lambda x, y: BF.exp(-2 * BF.sin(np.pi * self.frequency * ( x - y))**2 / scale**2) + BF.delta(x, y) * jitter super().__init__(covariance=covariance)
def __init__(self, frequency, jitter=0.): self.frequency = var2link(frequency) covariance = lambda x, y: BF.cos(2 * np.pi * self.frequency * (x - y)) + BF.delta(x, y) * jitter super().__init__(covariance=covariance)
def __init__(self, magnitude, jitter=0.): self.magnitude = var2link(magnitude) covariance = lambda x, y: magnitude * BF.delta(x, y) + BF.delta( x, y) * jitter super().__init__(covariance=covariance)
def get_joint_instance(self, query_points): x = var2link(query_points) return MultivariateNormalVariable( loc=self.mean_function(x), covariance_matrix=self.covariance_function(x), name=self.name + "(" + query_points.name + ")")