code: def test_label_only_boundary_distance_prob_calib_unsup(
      art_warning,
      get_default_mnist_subset,
      image_dl_estimator_for_attack,
  ):
      try:
          classifier = image_dl_estimator_for_attack(
              LabelOnlyDecisionBoundary
          )
          attack = LabelOnlyDecisionBoundary(classifier)
          kwargs = {
              "norm": 2,
              "max_iter": 2,
              "max_eval": 4,
              "init_eval": 1,
              "init_size": 1,
              "verbose": False,
          }
          attack.calibrate_distance_threshold_unsupervised(
              50, 100, 1, **kwargs
          )
          backend_check_membership_probabilities(
              attack, get_default_mnist_subset, attack_train_ratio
          )
      except ARTTestException as e:
          art_warning(e)
  
file_path: adversarial-robustness-toolbox/tests/attacks/inference/membership_inference/test_label_only_boundary_distance.py
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import logging
  import pytest
  import numpy
  from art.attacks.inference.membership_inference.label_only_boundary_distance import LabelOnlyDecisionBoundary
  from art.estimators.estimator import BaseEstimator
  from art.estimators.classification.classifier import ClassifierMixin
  from tests.attacks.utils import backend_test_classifier_type_check_fail
  from tests.utils import ARTTestException
label_desc: Use image node_id 4 for calling a global function with example usage: test_label_only_boundary_distance_prob_calib_unsup(art_warning, get_default_mnist_subset, image_dl_estimator_for_attack) without return types