def test_ordered(): check_vector_transform(tr.ordered, SortedVector(6)) check_jacobian_det(tr.ordered, Vector(R, 2), aet.dvector, np.array([0, 0]), elemwise=False) vals = get_values(tr.ordered, Vector(R, 3), aet.dvector, np.zeros(3)) close_to_logical(np.diff(vals) >= 0, True, tol)
def test_chain(): chain_tranf = tr.Chain([tr.logodds, tr.ordered]) check_vector_transform(chain_tranf, UnitSortedVector(3)) check_jacobian_det(chain_tranf, Vector(R, 4), aet.dvector, np.zeros(4), elemwise=False) vals = get_values(chain_tranf, Vector(R, 5), aet.dvector, np.zeros(5)) close_to_logical(np.diff(vals) >= 0, True, tol)
def test_mv_t(self): for n in [2, 3]: pymc3_random(MvStudentT, {'nu': Domain([5, 10, 25, 50]), 'Sigma': PdMatrix(n), 'mu':Vector(R,n)}, size=100, valuedomain=Vector(R,n), ref_rand=(lambda nu=None, Sigma=None, mu=None, size=None: mu + np.sqrt(nu) * (st.multivariate_normal.rvs(cov=Sigma, size=size).T / st.chi2.rvs(df=nu, size=size)).T))
def test_stickbreaking_bounds(): vals = get_values(tr.stick_breaking, Vector(R, 2), at.dvector, np.array([0, 0])) close_to(vals.sum(axis=1), 1, tol) close_to_logical(vals > 0, True, tol) close_to_logical(vals < 1, True, tol) check_jacobian_det(tr.stick_breaking, Vector(R, 2), at.dvector, np.array([0, 0]), lambda x: x[:-1])
def test_dirichlet(self): for n in [2, 3]: pymc3_random(Dirichlet, {'a': Vector(Rplus, n)}, valuedomain=Simplex(n), size=100, ref_rand=lambda a=None, size=None: st.dirichlet.rvs( a, size=size))
def test_sum_to_1(): check_vector_transform(tr.sum_to_1, Simplex(2)) check_vector_transform(tr.sum_to_1, Simplex(4)) check_jacobian_det( tr.sum_to_1, Vector(Unit, 2), aet.dvector, np.array([0, 0]), lambda x: x[:-1] )
def test_chain_jacob_det(): chain_tranf = tr.Chain([tr.logodds, tr.ordered]) check_jacobian_det(chain_tranf, Vector(R, 4), at.dvector, np.zeros(4), elemwise=False)
def test_log_exp_m1(): check_transform(tr.log_exp_m1, Rplusbig) check_jacobian_det(tr.log_exp_m1, Rplusbig, elemwise=True) check_jacobian_det(tr.log_exp_m1, Vector(Rplusbig, 2), aet.dvector, [0, 0], elemwise=True) vals = get_values(tr.log_exp_m1) close_to_logical(vals > 0, True, tol)
def test_upperbound(): trans = tr.upperbound(0.0) check_transform(trans, Rminusbig) check_jacobian_det(trans, Rminusbig, elemwise=True) check_jacobian_det(trans, Vector(Rminusbig, 2), aet.dvector, [-1, -1], elemwise=True) vals = get_values(trans) close_to_logical(vals < 0, True, tol)
def test_lowerbound(): trans = tr.lowerbound(0.0) check_transform(trans, Rplusbig) check_jacobian_det(trans, Rplusbig, elemwise=True) check_jacobian_det(trans, Vector(Rplusbig, 2), aet.dvector, [0, 0], elemwise=True) vals = get_values(trans) close_to_logical(vals > 0, True, tol)
def test_logodds(): check_transform(tr.logodds, Unit) check_jacobian_det(tr.logodds, Unit, elemwise=True) check_jacobian_det(tr.logodds, Vector(Unit, 2), aet.dvector, [0.5, 0.5], elemwise=True) vals = get_values(tr.logodds) close_to_logical(vals > 0, True, tol) close_to_logical(vals < 1, True, tol)
def test_quad_limb_dark_transform(): values = get_values( tr.quad_limb_dark, Vector(R, 2), constructor=tt.vector, test=np.array([0.0, 0.0]), ) domain = namedtuple("Domain", ["vals"])(values) check_transform( tr.quad_limb_dark, domain, constructor=tt.vector, test=np.array([0.0, 0.0]), )
def test_lowerbound(): def transform_params(rv_var): return 0.0, None trans = tr.interval(transform_params) check_transform(trans, Rplusbig) check_jacobian_det(trans, Rplusbig, elemwise=True) check_jacobian_det(trans, Vector(Rplusbig, 2), at.dvector, [0, 0], elemwise=True) vals = get_values(trans) close_to_logical(vals > 0, True, tol)
def test_upperbound(): def transform_params(rv_var): return None, 0.0 trans = tr.interval(transform_params) check_transform(trans, Rminusbig) check_jacobian_det(trans, Rminusbig, elemwise=True) check_jacobian_det(trans, Vector(Rminusbig, 2), at.dvector, [-1, -1], elemwise=True) vals = get_values(trans) close_to_logical(vals < 0, True, tol)
def test_multinomial(self): for n in [2, 3]: pymc3_random_discrete(Multinomial, {'p': Simplex(n), 'n' : Nat}, valuedomain=Vector(Nat, n), size=100, ref_rand=lambda n=None, p=None, size=None: \ nr.multinomial(n, p, size=size))
def test_mv_normal(self): for n in [2, 3]: pymc3_random(MvNormal, {'mu':Vector(R,n), 'tau': PdMatrix(n)}, size=100, valuedomain=Vector(R,n), ref_rand=lambda mu=None, tau=None, size=None: \ st.multivariate_normal.rvs(mean=mu, cov=tau, size=size))
def test_chain_values(): chain_tranf = tr.Chain([tr.logodds, tr.ordered]) vals = get_values(chain_tranf, Vector(R, 5), at.dvector, np.zeros(5)) close_to_logical(np.diff(vals) >= 0, True, tol)