Coverage for tests/tests_advertrain/test_dependencies/test_cleverhans/test_projected_gradient_descent.py: 100%
41 statements
« prev ^ index » next coverage.py v7.9.2, created at 2025-09-10 08:11 +0000
« prev ^ index » next coverage.py v7.9.2, created at 2025-09-10 08:11 +0000
1import numpy as np
2import pytest
3import torch
5from robustML.advertrain.dependencies.cleverhans.projected_gradient_descent import \
6 projected_gradient_descent
8torch.manual_seed(0)
11def mock_model_fn(x):
12 return x
15def test_adversarial_example_generation():
16 x = torch.randn(3, 3)
17 eps = 0.1
18 eps_iter = 0.01
19 nb_iter = 10
20 norm = np.inf
22 adv_x = projected_gradient_descent(mock_model_fn, x, eps, eps_iter, nb_iter, norm)
24 assert adv_x.shape == x.shape
27def test_error_on_invalid_eps():
28 x = torch.randn(3, 3)
29 eps = -0.1
30 eps_iter = 0.01
31 nb_iter = 10
32 norm = np.inf
34 with pytest.raises(ValueError):
35 projected_gradient_descent(mock_model_fn, x, eps, eps_iter, nb_iter, norm)
38def test_error_on_invalid_eps_iter():
39 x = torch.randn(3, 3)
40 eps = 0.1
41 eps_iter = 0.2
42 nb_iter = 10
43 norm = np.inf
45 with pytest.raises(ValueError):
46 projected_gradient_descent(mock_model_fn, x, eps, eps_iter, nb_iter, norm)
49def test_error_on_invalid_clip_values():
50 x = torch.randn(3, 3)
51 eps = 0.1
52 eps_iter = 0.01
53 nb_iter = 10
54 norm = np.inf
55 clip_min = 1
56 clip_max = 0
58 with pytest.raises(ValueError):
59 projected_gradient_descent(mock_model_fn, x, eps, eps_iter, nb_iter, norm, clip_min, clip_max)