コード例 #1
0
ファイル: test_transforms.py プロジェクト: yzh211/pymc3
 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)
コード例 #2
0
ファイル: test_transforms.py プロジェクト: yzh211/pymc3
 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)
コード例 #3
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)
コード例 #4
0
    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)
コード例 #5
0
    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.