def __init__(self, rho, sigma=None, tau=None, constant=False, init=None, *args, **kwargs): super().__init__(*args, **kwargs) tau, sigma = get_tau_sigma(tau=tau, sigma=sigma) self.sigma = at.as_tensor_variable(sigma) self.tau = at.as_tensor_variable(tau) self.mean = at.as_tensor_variable(0.0) if isinstance(rho, list): p = len(rho) else: try: shape_ = rho.shape.tag.test_value except AttributeError: shape_ = rho.shape if hasattr(shape_, "size") and shape_.size == 0: p = 1 else: p = shape_[0] if constant: self.p = p - 1 else: self.p = p self.constant = constant self.rho = rho = at.as_tensor_variable(rho) self.init = init or Flat.dist()
def __init__(self, w, mu, sigma=None, tau=None, sd=None, comp_shape=(), *args, **kwargs): if sd is not None: sigma = sd _, sigma = get_tau_sigma(tau=tau, sigma=sigma) self.mu = mu = at.as_tensor_variable(mu) self.sigma = self.sd = sigma = at.as_tensor_variable(sigma) super().__init__(w, Normal.dist(mu, sigma=sigma, shape=comp_shape), *args, **kwargs)
def dist( cls, rho, sigma=None, tau=None, *, init_dist=None, steps=None, constant=False, ar_order=None, **kwargs, ): _, sigma = get_tau_sigma(tau=tau, sigma=sigma) sigma = at.as_tensor_variable(floatX(sigma)) rhos = at.atleast_1d(at.as_tensor_variable(floatX(rho))) if "init" in kwargs: warnings.warn( "init parameter is now called init_dist. Using init will raise an error in a future release.", FutureWarning, ) init_dist = kwargs.pop("init") ar_order = cls._get_ar_order(rhos=rhos, constant=constant, ar_order=ar_order) steps = get_steps(steps=steps, shape=kwargs.get("shape", None), step_shape_offset=ar_order) if steps is None: raise ValueError("Must specify steps or shape parameter") steps = at.as_tensor_variable(intX(steps), ndim=0) if init_dist is not None: if not isinstance(init_dist, TensorVariable) or not isinstance( init_dist.owner.op, RandomVariable ): raise ValueError( f"Init dist must be a distribution created via the `.dist()` API, " f"got {type(init_dist)}" ) check_dist_not_registered(init_dist) if init_dist.owner.op.ndim_supp > 1: raise ValueError( "Init distribution must have a scalar or vector support dimension, ", f"got ndim_supp={init_dist.owner.op.ndim_supp}.", ) else: warnings.warn( "Initial distribution not specified, defaulting to " "`Normal.dist(0, 100, shape=...)`. You can specify an init_dist " "manually to suppress this warning.", UserWarning, ) init_dist = Normal.dist(0, 100, shape=(*sigma.shape, ar_order)) # Tell Aeppl to ignore init_dist, as it will be accounted for in the logp term init_dist = ignore_logprob(init_dist) return super().dist([rhos, sigma, init_dist, steps, ar_order, constant], **kwargs)
def __new__(cls, name, w, mu, sigma=None, tau=None, comp_shape=(), **kwargs): _, sigma = get_tau_sigma(tau=tau, sigma=sigma) return Mixture(name, w, Normal.dist(mu, sigma=sigma, size=comp_shape), **kwargs)
def __init__(self, tau=None, init=None, sigma=None, mu=0.0, *args, **kwargs): kwargs.setdefault("shape", 1) super().__init__(*args, **kwargs) if sum(self.shape) == 0: raise TypeError("GaussianRandomWalk must be supplied a non-zero shape argument!") tau, sigma = get_tau_sigma(tau=tau, sigma=sigma) self.tau = at.as_tensor_variable(tau) sigma = at.as_tensor_variable(sigma) self.sigma = sigma self.mu = at.as_tensor_variable(mu) self.init = init or Flat.dist() self.mean = at.as_tensor_variable(0.0)