def __init__(self, loc, covariance_matrix=None, precision_matrix=None, scale_tril=None, name="Multivariate Normal", learnable=False, has_bias=False, is_observed=False, is_policy=False, is_reward=False): self._type = "Multivariate Normal" if scale_tril is not None and covariance_matrix is None and precision_matrix is None: ranges = {"loc": geometric_ranges.UnboundedRange(), "scale_tril": geometric_ranges.UnboundedRange()} super().__init__(name, loc=loc, scale_tril=scale_tril, learnable=learnable, has_bias=has_bias, ranges=ranges, is_observed=is_observed, is_policy=is_policy, is_reward=is_reward) self.distribution = distributions.MultivariateNormalDistribution() elif scale_tril is None and covariance_matrix is not None and precision_matrix is None: ranges = {"loc": geometric_ranges.UnboundedRange(), "covariance_matrix": geometric_ranges.PositiveDefiniteMatrix()} super().__init__(name, loc=loc, covariance_matrix=covariance_matrix, learnable=learnable, has_bias=has_bias, ranges=ranges, is_observed=is_observed, is_policy=is_policy, is_reward=is_reward) self.distribution = distributions.MultivariateNormalDistribution() elif scale_tril is None and covariance_matrix is None and precision_matrix is not None: ranges = {"loc": geometric_ranges.UnboundedRange(), "precision_matrix": geometric_ranges.PositiveDefiniteMatrix()} super().__init__(name, loc=loc, precision_matrix=precision_matrix, learnable=learnable, has_bias=has_bias, ranges=ranges, is_observed=is_observed, is_policy=is_policy, is_reward=is_reward) self.distribution = distributions.MultivariateNormalDistribution() else: raise ValueError("Either covariance_matrix or precision_matrix or"+ "scale_tril needs to be provided as input")
def __init__(self, loc, covariance_matrix=None, precision_matrix=None, cholesky_factor=None, name="Multivariate Normal", learnable=False): self._type = "Multivariate Normal" if cholesky_factor is not None and covariance_matrix is None and precision_matrix is None: ranges = { "loc": geometric_ranges.UnboundedRange(), "cholesky_factor": geometric_ranges.UnboundedRange() } super().__init__(name, loc=loc, cholesky_factor=cholesky_factor, learnable=learnable, ranges=ranges) self.distribution = distributions.MultivariateNormalDistribution() elif cholesky_factor is None and covariance_matrix is not None and precision_matrix is None: ranges = { "loc": geometric_ranges.UnboundedRange(), "covariance_matrix": geometric_ranges.PositiveDefiniteMatrix() } super().__init__(name, loc=loc, covariance_matrix=covariance_matrix, learnable=learnable, ranges=ranges) self.distribution = distributions.MultivariateNormalDistribution() elif cholesky_factor is None and covariance_matrix is None and precision_matrix is not None: ranges = { "loc": geometric_ranges.UnboundedRange(), "precision_matrix": geometric_ranges.UnboundedRange() } super().__init__(name, loc=loc, precision_matrix=precision_matrix, learnable=learnable, ranges=ranges) self.distribution = distributions.MultivariateNormalDistribution() else: raise ValueError( "Either covariance_matrix or precision_matrix or" + "cholesky_factor needs to be provided as input")