Skip to content

Commit

Permalink
Remove helpers from tests, skip GPU tests. (#1105)
Browse files Browse the repository at this point in the history
* fix 1098: remove unneccesary helper functions.

* fix 1093: add hook to skip GPU tests without device.
  • Loading branch information
janfb authored Mar 25, 2024
1 parent eeaf891 commit 32e365d
Show file tree
Hide file tree
Showing 13 changed files with 71 additions and 218 deletions.
13 changes: 13 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,16 @@ def set_seed():
@pytest.fixture(scope="session", autouse=True)
def set_default_tensor_type():
torch.set_default_tensor_type("torch.FloatTensor")


# Pytest hook to skip GPU tests if no devices are available.
def pytest_collection_modifyitems(config, items):
"""Skip GPU tests if no devices are available."""
gpu_device_available = (
torch.cuda.is_available() or torch.backends.mps.is_available()
)
if not gpu_device_available:
skip_gpu = pytest.mark.skip(reason="No devices available")
for item in items:
if "gpu" in item.keywords:
item.add_marker(skip_gpu)
23 changes: 4 additions & 19 deletions tests/ensemble_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,6 @@
linear_gaussian,
true_posterior_linear_gaussian_mvn_prior,
)
from sbi.utils.user_input_checks import (
check_sbi_inputs,
process_prior,
process_simulator,
)
from tests.test_utils import check_c2st, get_dkl_gaussian_prior


Expand All @@ -34,13 +29,8 @@ def test_import_before_deprecation():
prior_cov = eye(2)
prior = MultivariateNormal(loc=prior_mean, covariance_matrix=prior_cov)

prior, _, prior_returns_numpy = process_prior(prior)
simulator = process_simulator(
lambda theta: linear_gaussian(theta, likelihood_shift, likelihood_cov),
prior,
prior_returns_numpy,
)
check_sbi_inputs(simulator, prior)
def simulator(theta):
return linear_gaussian(theta, likelihood_shift, likelihood_cov)

theta = prior.sample((num_simulations,))
x = simulator(theta)
Expand Down Expand Up @@ -87,13 +77,8 @@ def test_c2st_posterior_ensemble_on_linearGaussian(inference_method, num_trials)
)
target_samples = gt_posterior.sample((num_samples,))

prior, _, prior_returns_numpy = process_prior(prior)
simulator = process_simulator(
lambda theta: linear_gaussian(theta, likelihood_shift, likelihood_cov),
prior,
prior_returns_numpy,
)
check_sbi_inputs(simulator, prior)
def simulator(theta):
return linear_gaussian(theta, likelihood_shift, likelihood_cov)

# train ensemble components
posteriors = []
Expand Down
22 changes: 8 additions & 14 deletions tests/inference_on_device_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,6 @@
from sbi.utils.torchutils import BoxUniform, gpu_available, process_device
from sbi.utils.user_input_checks import (
check_embedding_net_device,
check_sbi_inputs,
process_prior,
process_simulator,
validate_theta_and_x,
)

Expand Down Expand Up @@ -282,13 +279,11 @@ def test_train_with_different_data_and_training_device(
training_device = process_device(training_device)

num_dim = 2
prior_ = BoxUniform(
num_simulations = 32
prior = BoxUniform(
-torch.ones(num_dim), torch.ones(num_dim), device=training_device
)

prior, _, prior_returns_numpy = process_prior(prior_)
simulator = process_simulator(diagonal_linear_gaussian, prior, prior_returns_numpy)
check_sbi_inputs(simulator, prior)
simulator = diagonal_linear_gaussian

inference = inference_method(
prior,
Expand All @@ -305,8 +300,9 @@ def test_train_with_different_data_and_training_device(
device=training_device,
)

theta, x = simulate_for_sbi(simulator, prior, 32)
theta, x = theta.to(data_device), x.to(data_device)
theta = prior.sample((num_simulations,))
x = simulator(theta).to(data_device)
theta = theta.to(data_device)
x_o = torch.zeros(x.shape[1])
inference = inference.append_simulations(theta, x, data_device=data_device)

Expand Down Expand Up @@ -453,10 +449,8 @@ def test_embedding_nets_integration_training_device(
def test_nograd_after_inference_train(inference_method) -> None:
"""Test that no gradients are present after training."""
num_dim = 2
prior_ = BoxUniform(-torch.ones(num_dim), torch.ones(num_dim))
prior, _, prior_returns_numpy = process_prior(prior_)
simulator = process_simulator(diagonal_linear_gaussian, prior, prior_returns_numpy)
check_sbi_inputs(simulator, prior)
prior = BoxUniform(-torch.ones(num_dim), torch.ones(num_dim))
simulator = diagonal_linear_gaussian

inference = inference_method(
prior,
Expand Down
7 changes: 2 additions & 5 deletions tests/inference_with_NaN_simulator_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
from sbi.utils.sbiutils import handle_invalid_x
from sbi.utils.user_input_checks import (
check_sbi_inputs,
process_prior,
process_simulator,
)

Expand Down Expand Up @@ -100,8 +99,7 @@ def linear_gaussian_nan(
prior=prior,
)

prior, _, prior_returns_numpy = process_prior(prior)
simulator = process_simulator(linear_gaussian_nan, prior, prior_returns_numpy)
simulator = process_simulator(linear_gaussian_nan, prior, False)
check_sbi_inputs(simulator, prior)
inference = method(prior=prior)

Expand Down Expand Up @@ -143,8 +141,7 @@ def linear_gaussian_nan(
prior=prior,
)

prior, _, prior_returns_numpy = process_prior(prior)
simulator = process_simulator(linear_gaussian_nan, prior, prior_returns_numpy)
simulator = process_simulator(linear_gaussian_nan, prior, False)
check_sbi_inputs(simulator, prior)
restriction_estimator = RestrictionEstimator(prior=prior)
proposal = prior
Expand Down
11 changes: 0 additions & 11 deletions tests/linearGaussian_mdn_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,6 @@
linear_gaussian,
true_posterior_linear_gaussian_mvn_prior,
)
from sbi.utils.user_input_checks import (
check_sbi_inputs,
process_prior,
process_simulator,
)
from tests.test_utils import check_c2st


Expand Down Expand Up @@ -58,9 +53,6 @@ def mdn_inference_with_different_methods(method):
def simulator(theta: Tensor) -> Tensor:
return linear_gaussian(theta, likelihood_shift, likelihood_cov)

prior, _, prior_returns_numpy = process_prior(prior)
simulator = process_simulator(simulator, prior, prior_returns_numpy)
check_sbi_inputs(simulator, prior)
inference = method(density_estimator="mdn")

theta, x = simulate_for_sbi(simulator, prior, num_simulations)
Expand Down Expand Up @@ -108,9 +100,6 @@ def test_mdn_with_1D_uniform_prior():
def simulator(theta: Tensor) -> Tensor:
return linear_gaussian(theta, likelihood_shift, likelihood_cov)

prior, _, prior_returns_numpy = process_prior(prior)
simulator = process_simulator(simulator, prior, prior_returns_numpy)
check_sbi_inputs(simulator, prior)
inference = SNPE(density_estimator="mdn")

theta, x = simulate_for_sbi(simulator, prior, 100)
Expand Down
51 changes: 12 additions & 39 deletions tests/linearGaussian_snle_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,7 @@
)
from sbi.utils import BoxUniform
from sbi.utils.user_input_checks import (
check_sbi_inputs,
process_prior,
process_simulator,
)

from .test_utils import check_c2st, get_prob_outside_uniform_prior
Expand Down Expand Up @@ -58,9 +56,7 @@ def test_api_snle_multiple_trials_and_rounds_map(num_dim: int, prior_str: str):
else:
prior = BoxUniform(-2.0 * ones(num_dim), 2.0 * ones(num_dim))

prior, _, prior_returns_numpy = process_prior(prior)
simulator = process_simulator(diagonal_linear_gaussian, prior, prior_returns_numpy)
check_sbi_inputs(simulator, prior)
simulator = diagonal_linear_gaussian
inference = SNLE(prior=prior, density_estimator="mdn", show_progress_bars=False)

proposals = [prior]
Expand Down Expand Up @@ -112,18 +108,14 @@ def test_c2st_snl_on_linear_gaussian_different_dims(model_str="maf"):
num_discarded_dims=discard_dims,
num_samples=num_samples,
)
prior, _, prior_returns_numpy = process_prior(prior)
simulator = process_simulator(
lambda theta: linear_gaussian(

def simulator(theta):
return linear_gaussian(
theta,
likelihood_shift,
likelihood_cov,
num_discarded_dims=discard_dims,
),
prior,
prior_returns_numpy,
)
check_sbi_inputs(simulator, prior)
)

density_estimator = likelihood_nn(model=model_str, num_transforms=3)
inference = SNLE(density_estimator=density_estimator, show_progress_bars=False)
Expand Down Expand Up @@ -177,13 +169,8 @@ def test_c2st_and_map_snl_on_linearGaussian_different(
else:
prior = BoxUniform(-2.0 * ones(num_dim), 2.0 * ones(num_dim))

prior, _, prior_returns_numpy = process_prior(prior)
simulator = process_simulator(
lambda theta: linear_gaussian(theta, likelihood_shift, likelihood_cov),
prior,
prior_returns_numpy,
)
check_sbi_inputs(simulator, prior)
def simulator(theta):
return linear_gaussian(theta, likelihood_shift, likelihood_cov)

density_estimator = likelihood_nn(model_str, num_transforms=3)
inference = SNLE(density_estimator=density_estimator, show_progress_bars=False)
Expand Down Expand Up @@ -306,13 +293,8 @@ def test_c2st_multi_round_snl_on_linearGaussian(num_trials: int):
)
target_samples = gt_posterior.sample((num_samples,))

prior, _, prior_returns_numpy = process_prior(prior)
simulator = process_simulator(
lambda theta: linear_gaussian(theta, likelihood_shift, likelihood_cov),
prior,
prior_returns_numpy,
)
check_sbi_inputs(simulator, prior)
def simulator(theta):
return linear_gaussian(theta, likelihood_shift, likelihood_cov)

inference = SNLE(show_progress_bars=False)

Expand Down Expand Up @@ -375,13 +357,8 @@ def test_c2st_multi_round_snl_on_linearGaussian_vi(num_trials: int):
)
target_samples = gt_posterior.sample((num_samples,))

prior, _, prior_returns_numpy = process_prior(prior)
simulator = process_simulator(
lambda theta: linear_gaussian(theta, likelihood_shift, likelihood_cov),
prior,
prior_returns_numpy,
)
check_sbi_inputs(simulator, prior)
def simulator(theta):
return linear_gaussian(theta, likelihood_shift, likelihood_cov)

inference = SNLE(show_progress_bars=False)

Expand Down Expand Up @@ -487,11 +464,7 @@ def test_api_snl_sampling_methods(
# Thus, we would not like to run, e.g., VI with all init_strategies, but only once
# (namely with `init_strategy=proposal`).
if sample_with == "mcmc" or init_strategy == "proposal":
prior, _, prior_returns_numpy = process_prior(prior)
simulator = process_simulator(
diagonal_linear_gaussian, prior, prior_returns_numpy
)
check_sbi_inputs(simulator, prior)
simulator = diagonal_linear_gaussian

inference = SNLE(show_progress_bars=False)

Expand Down
Loading

0 comments on commit 32e365d

Please sign in to comment.