def test_posterior_predictive_statistic(): N, D = 10, 4 # D needs to be even defn = model_definition(N, [bb] * D) Y = toy_dataset(defn) prng = rng() view = numpy_dataview(Y) latents = [model.initialize(defn, view, prng) for _ in xrange(10)] q = ma.masked_array( np.array([(False,) * D], dtype=[('', bool)] * D), mask=[(False,) * (D / 2) + (True,) * (D / 2)]) statistic = query.posterior_predictive_statistic(q, latents, prng) assert_equals(statistic.shape, (1,)) assert_equals(len(statistic.dtype), D) statistic = query.posterior_predictive_statistic( q, latents, prng, merge='mode') assert_equals(statistic.shape, (1,)) assert_equals(len(statistic.dtype), D) statistic = query.posterior_predictive_statistic( q, latents, prng, merge=['mode', 'mode', 'avg', 'avg']) assert_equals(statistic.shape, (1,)) assert_equals(len(statistic.dtype), D) q = ma.masked_array( np.array([(False,) * D] * 3, dtype=[('', bool)] * D), mask=[(False,) * (D / 2) + (True,) * (D / 2)] * 3) statistic = query.posterior_predictive_statistic(q, latents, prng) assert_equals(statistic.shape, (3,)) assert_equals(len(statistic.dtype), D)
def test_zmatrix(): N, D = 10, 4 defn = model_definition(N, [bb] * D) Y = toy_dataset(defn) prng = rng() view = numpy_dataview(Y) latents = [model.initialize(defn, view, prng) for _ in xrange(10)] zmat = query.zmatrix(latents) assert_equals(zmat.shape, (N, N))
def _test_copy_state(defn, initialize_fn, bind_fn): Y = toy_dataset(defn) view = cxx_numpy_dataview(Y) r = rng() state = initialize_fn(defn, view, r) state_shallow = copy.copy(state) state_deep = copy.deepcopy(state) assert_is_not(state, state_shallow) assert_is_not(state, state_deep) _assert_copy(state, state_shallow, bind_fn, view, r) _assert_copy(state, state_deep, bind_fn, view, r)
def _test_copy_state(defn, initialize_fn, bind_fn): Y = toy_dataset(defn) view = cxx_numpy_dataview(Y) r = rng() state = initialize_fn(defn, view, r) state_shallow = copy.copy(state) state_deep = copy.deepcopy(state) assert_is_not(state, state_shallow) assert_is_not(state, state_deep) _assert_copy(state, state_shallow, bind_fn, view, r) _assert_copy(state, state_deep, bind_fn, view, r)
def test_runner_multyvac(): defn = model_definition(10, [bb, nich, niw(3)]) Y = toy_dataset(defn) view = numpy_dataview(Y) kc = runner.default_kernel_config(defn) prng = rng() latents = [model.initialize(defn, view, prng) for _ in xrange(2)] runners = [runner.runner(defn, view, latent, kc) for latent in latents] r = parallel.runner(runners, backend='multyvac', layer='perf', core='f2') r.run(r=prng, niters=1000) r.run(r=prng, niters=1000)
def test_runner_multiprocessing(): defn = model_definition(10, [bb, nich, niw(3)]) Y = toy_dataset(defn) view = numpy_dataview(Y) kc = runner.default_kernel_config(defn) prng = rng() latents = [model.initialize(defn, view, prng) for _ in xrange(mp.cpu_count())] runners = [runner.runner(defn, view, latent, kc) for latent in latents] r = parallel.runner(runners) # check it is restartable r.run(r=prng, niters=10) r.run(r=prng, niters=10)
def test_posterior_predictive(): N, D = 10, 4 # D needs to be even defn = model_definition(N, [bb] * D) Y = toy_dataset(defn) prng = rng() view = numpy_dataview(Y) latents = [model.initialize(defn, view, prng) for _ in xrange(10)] q = ma.masked_array( np.array([(False,) * D], dtype=[('', bool)] * D), mask=[(False,) * (D / 2) + (True,) * (D / 2)]) samples = query.posterior_predictive(q, latents, prng) assert_equals(samples.shape, (1, len(latents))) q = ma.masked_array( np.array([(False,) * D] * 3, dtype=[('', bool)] * D), mask=[(False,) * (D / 2) + (True,) * (D / 2)] * 3) samples = query.posterior_predictive(q, latents, prng) assert_equals(samples.shape, (3, len(latents)))
def _test_runner_kernel_config(kc_fn, models): defn = model_definition(10, models) Y = toy_dataset(defn) view = numpy_dataview(Y) kc = kc_fn(defn) prng = rng() ntries = 5 while ntries: latent = model.initialize(defn, view, prng) assignments = latent.assignments() r = runner.runner(defn, view, latent, kc) r.run(r=prng, niters=10) assignments1 = r.get_latent().assignments() # XXX: it should be very unlikely the assignments are all equal if assignments == assignments1: ntries -= 1 else: return # success assert_true(False) # exceeded ntries