def test_uniform(self, lower, upper, shape): interval = tr.Interval(lower, upper) model = self.build_model(pm.Uniform, { 'lower': lower, 'upper': upper }, shape=shape, transform=interval) self.check_transform_elementwise_logp(model)
def test_uniform_ordered(self, lower, upper, shape): interval = tr.Interval(lower, upper) testval = np.sort(np.abs(np.random.rand(*shape))) model = self.build_model(pm.Uniform, { 'lower': lower, 'upper': upper }, shape=shape, testval=testval, transform=tr.Chain([interval, tr.ordered])) self.check_vectortransform_elementwise_logp(model, vect_opt=0)
def test_uniform(self, lower, upper, size): def transform_params(rv_var): _, _, _, lower, upper = rv_var.owner.inputs lower = at.as_tensor_variable(lower) if lower is not None else None upper = at.as_tensor_variable(upper) if upper is not None else None return lower, upper interval = tr.Interval(transform_params) model = self.build_model(pm.Uniform, { "lower": lower, "upper": upper }, size=size, transform=interval) self.check_transform_elementwise_logp(model)
def test_uniform_ordered(self, lower, upper, size): def transform_params(rv_var): _, _, _, lower, upper = rv_var.owner.inputs lower = at.as_tensor_variable(lower) if lower is not None else None upper = at.as_tensor_variable(upper) if upper is not None else None return lower, upper interval = tr.Interval(transform_params) initval = np.sort(np.abs(np.random.rand(*size))) model = self.build_model( pm.Uniform, { "lower": lower, "upper": upper }, size=size, initval=initval, transform=tr.Chain([interval, tr.ordered]), ) self.check_vectortransform_elementwise_logp(model, vect_opt=1)
name = "unitdisk" def backward(self, y): return tt.stack([y[0], y[1] * tt.sqrt(1 - y[0]**2)]) def forward(self, x): return tt.stack([x[0], x[1] / tt.sqrt(1 - x[0]**2)]) def forward_val(self, x, point=None): return np.array([x[0], x[1] / np.sqrt(1 - x[0]**2)]) def jacobian_det(self, y): return tt.stack((tt.zeros_like(y[0]), 0.5 * tt.log(1 - y[0]**2))) unit_disk = tr.Chain([UnitDiskTransform(), tr.Interval(-1, 1)]) class AngleTransform(tr.Transform): """An angle transformation The variable is augmented to sample an isotropic 2D normal and the angle is given by the arctan of the ratio of the two coordinates. This will have a uniform distribution between -pi and pi. Args: regularized: The amplitude of the regularization term. If ``None``, no regularization is applied. This has no effect on the distribution over the transformed parameter, but it can make sampling more efficient in some cases.