code: def test_run_multilabel_attack_threshold_calculates_correct_ppv(self):
      result = mia._run_attack(
          AttackInputData(
              loss_train=np.array(
                  [[0.1, 0.2], [1.3, 0.4], [0.5, 0.6], [0.9, 0.6]]
              ),
              loss_test=np.array([[1.1, 1.2], [1.3, 0.4], [1.5, 1.6]]),
              force_multilabel_data=True,
          ),
          AttackType.THRESHOLD_ATTACK,
      )
  
      np.testing.assert_almost_equal(
          result.roc_curve.get_ppv(), 1.0, decimal=2
      )
  
imports: from unittest import mock
  from absl.testing import absltest
  from absl.testing import parameterized
  import numpy
  from tensorflow_privacy.privacy.privacy_tests import epsilon_lower_bound
  from tensorflow_privacy.privacy.privacy_tests.membership_inference_attack import membership_inference_attack
  from tensorflow_privacy.privacy.privacy_tests.membership_inference_attack import models
  from tensorflow_privacy.privacy.privacy_tests.membership_inference_attack.data_structures import AttackInputData
  from tensorflow_privacy.privacy.privacy_tests.membership_inference_attack.data_structures import AttackType
  from tensorflow_privacy.privacy.privacy_tests.membership_inference_attack.data_structures import DataSize
  from tensorflow_privacy.privacy.privacy_tests.membership_inference_attack.data_structures import SingleSliceSpec
  from tensorflow_privacy.privacy.privacy_tests.membership_inference_attack.data_structures import SlicingFeature
  from tensorflow_privacy.privacy.privacy_tests.membership_inference_attack.data_structures import SlicingSpec
label_desc: Use image node_id 10 for calling the RunAttacksTestOnMultilabelData obj's underlying member method code with example usage: obj.test_run_multilabel_attack_threshold_calculates_correct_ppv() without return types