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

1import numpy as np 

2import pytest 

3import torch 

4 

5from robustML.advertrain.dependencies.cleverhans.projected_gradient_descent import \ 

6 projected_gradient_descent 

7 

8torch.manual_seed(0) 

9 

10 

11def mock_model_fn(x): 

12 return x 

13 

14 

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 

21 

22 adv_x = projected_gradient_descent(mock_model_fn, x, eps, eps_iter, nb_iter, norm) 

23 

24 assert adv_x.shape == x.shape 

25 

26 

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 

33 

34 with pytest.raises(ValueError): 

35 projected_gradient_descent(mock_model_fn, x, eps, eps_iter, nb_iter, norm) 

36 

37 

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 

44 

45 with pytest.raises(ValueError): 

46 projected_gradient_descent(mock_model_fn, x, eps, eps_iter, nb_iter, norm) 

47 

48 

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 

57 

58 with pytest.raises(ValueError): 

59 projected_gradient_descent(mock_model_fn, x, eps, eps_iter, nb_iter, norm, clip_min, clip_max)