def test_can_get_acceptance_rates(net: BayesNet) -> None: acceptance_rate_tracker = AcceptanceRateTracker() latents = list(net.get_latent_vertices()) algo = MetropolisHastingsSampler(proposal_distribution='prior', proposal_listeners=[acceptance_rate_tracker]) samples = sample(net=net, sample_from=latents, sampling_algorithm=algo, drop=3) for latent in latents: rate = acceptance_rate_tracker.get_acceptance_rate(latent) assert 0 <= rate <= 1
def test_can_track_acceptance_rate_when_iterating(net: BayesNet) -> None: acceptance_rate_tracker = AcceptanceRateTracker() latents = list(net.get_latent_vertices()) samples = generate_samples(net=net, sample_from=latents, proposal_distribution='prior', proposal_listeners=[acceptance_rate_tracker], drop=3) draws = 100 for _ in islice(samples, draws): for latent in latents: rate = acceptance_rate_tracker.get_acceptance_rate(latent) assert 0 <= rate <= 1