def test_targeted_attack(bn_model, bn_targeted_criterion, bn_images, bn_labels): attack = Attack(bn_model, bn_targeted_criterion) advs = attack(bn_images, bn_labels, unpack=False) for adv in advs: assert adv.perturbed is not None assert adv.distance.value < np.inf
def test_attack_impossible(bn_model, bn_impossible_criterion, bn_images, bn_labels): attack = Attack(bn_model, bn_impossible_criterion) advs = attack(bn_images, bn_labels, unpack=False) for adv in advs: assert adv.perturbed is None assert adv.distance.value == np.inf
def test_run_sequential(bn_model, bn_criterion, bn_images, bn_labels): attack = Attack(bn_model, bn_criterion) advs1 = attack(bn_images, bn_labels) advs2 = run_sequential(Attack, bn_model, bn_criterion, bn_images, bn_labels) advs2 = np.stack([a.perturbed for a in advs2]) assert np.all(advs1 == advs2)
def test_attack_eps(bn_model, bn_criterion, bn_images, bn_labels): attack = Attack(bn_model, bn_criterion) advs = attack(bn_images, bn_labels, unpack=False, epsilons=np.linspace(0., 1., 100)[1:]) for adv in advs: assert adv.perturbed is not None assert adv.distance.value < np.inf
def test_attack_eg(request, bn_model, bn_criterion, bn_images, bn_labels): GradientEstimator = request.param gradient_estimator = GradientEstimator(epsilon=0.01) model = ModelWithEstimatedGradients(bn_model, gradient_estimator) attack = Attack(model, bn_criterion) advs = attack(bn_images, bn_labels, unpack=False) for adv in advs: assert adv.perturbed is not None assert adv.distance.value < np.inf
def test_attack_startingpoint(bn_model, bn_criterion, bn_images, bn_labels): attack = Attack(bn_model, bn_criterion) np.random.seed(2) starting_point = np.random.uniform( 0, 1, size=bn_images[0].shape).astype(bn_images.dtype) advs = attack(bn_images, bn_labels, unpack=False, starting_point=starting_point) for adv in advs: assert adv.perturbed is not None assert adv.distance.value < np.inf
def test_attack_notrans_norot(bn_model, bn_criterion, bn_images, bn_labels): attack = Attack(bn_model, bn_criterion) advs = attack(bn_images, bn_labels, unpack=False, do_translations=False, do_rotations=False) for adv in advs: assert adv.perturbed is None assert adv.distance.value == np.inf
def test_attack_impossible(bn_model, bn_impossible_criterion, bn_images, bn_labels): attack = Attack(bn_model, bn_impossible_criterion) advs = attack(bn_images, bn_labels, unpack=False, max_iterations=100, binary_search_steps=20) for adv in advs: assert adv.perturbed is None assert adv.distance.value == np.inf
def test_targeted_attack(bn_model, bn_targeted_criterion, bn_images, bn_labels): attack = Attack(bn_model, bn_targeted_criterion) advs = attack(bn_images, bn_labels, unpack=False, max_iterations=100, binary_search_steps=20) for adv in advs: assert adv.perturbed is not None assert adv.distance.value < np.inf
def test_unknown_image(bn_model, bn_criterion, bn_images, bn_labels): input_images = np.zeros_like(bn_images) output_images = np.zeros_like(input_images) attack = Attack(bn_model, bn_criterion) with pytest.raises(ValueError): attack(bn_images, bn_labels, unpack=False, candidate_inputs=input_images, candidate_outputs=output_images)
def test_attack(bn_model, bn_criterion, bn_images, bn_labels): input_images = bn_images output_images = np.zeros_like(input_images) attack = Attack(bn_model, bn_criterion) advs = attack(bn_images, bn_labels, unpack=False, candidate_inputs=input_images, candidate_outputs=output_images) for adv in advs: assert adv.perturbed is not None assert adv.distance.value < np.inf
def test_attack_rnd(bn_model, bn_criterion, bn_images, bn_labels): attack = Attack(bn_model, bn_criterion) advs = attack(bn_images, bn_labels, unpack=False, random_sampling=True) for adv in advs: assert adv.perturbed is not None assert adv.distance.value < np.inf
def test_attack(bn_model, bn_criterion, bn_images, bn_labels): attack = Attack(bn_model, bn_criterion) advs = attack(bn_images, bn_labels, unpack=False, epsilons=10, steps=5) for adv in advs: assert adv.perturbed is not None assert adv.distance.value < np.inf
def test_attack_gl(gl_bn_model, bn_criterion, bn_images, bn_labels): attack = Attack(gl_bn_model, bn_criterion) advs = attack(bn_images, bn_labels, unpack=False, max_iterations=100) for adv in advs: assert adv.perturbed is None assert adv.distance.value == np.inf
def test_targeted_attack(bn_model, bn_targeted_criterion, bn_images, bn_labels): attack = Attack(bn_model, bn_targeted_criterion) with pytest.raises(AssertionError): attack(bn_images, bn_labels, unpack=False)