class_docstr: Close implementation based on description in Nelson
  'Behavior of Machine Learning Algorithms in Adversarial Environments' Ch. 4.4
  
  | Textbook link: https://people.eecs.berkeley.edu/~adj/publications/paper-files/EECS-2010-140.pdf
class_docstr_tok: ["Close","implementation","based","on","description","in","Nelson","'Behavior","of","Machine","Learning","Algorithms","in","Adversarial","Environments","'","Ch",".","4.4","|","Textbook","link",":","https",":","\/\/people.eecs.berkeley.edu\/~adj\/publications\/paper-files\/EECS-2010-140.pdf"]
docstr: Calculate the median and standard deviation of the accuracy shifts caused
  by the calibration set.
  
  :param before_classifier: The classifier trained without suspicious point.
  :return: A tuple consisting of `(median, std_dev)`.
docstr_tok: ["Calculate","the","median","and","standard","deviation","of","the","accuracy","shifts","caused","by","the","calibration","set",".",":","param","before_classifier",":","The","classifier","trained","without","suspicious","point",".",":","return",":","A","tuple","consisting","of","`","(","median",",","std_dev",")","`","."]
code: def get_calibration_info(
      self, before_classifier: "CLASSIFIER_TYPE"
  ) -> Tuple[float, float]:
      """
      Calculate the median and standard deviation of the accuracy shifts caused
      by the calibration set.
  
      :param before_classifier: The classifier trained without suspicious point.
      :return: A tuple consisting of `(median, std_dev)`.
      """
      accs = []
  
      for x_c, y_c in zip(self.x_cal, self.y_cal):
          after_classifier = deepcopy(before_classifier)
          after_classifier.fit(
              x=np.vstack([self.x_val, x_c]),
              y=np.vstack([self.y_val, y_c]),
          )
          accs.append(
              performance_diff(
                  before_classifier,
                  after_classifier,
                  self.x_quiz,
                  self.y_quiz,
                  perf_function=self.perf_func,
              )
          )
  
      return float(np.median(accs)), float(np.std(accs))
  
file_path: adversarial-robustness-toolbox/art/defences/detector/poison/roni.py
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import logging
  from copy import deepcopy
  from typing import Callable, List, Tuple, Union, TYPE_CHECKING
  import numpy
  from sklearn.model_selection import train_test_split
  from art.defences.detector.poison.ground_truth_evaluator import GroundTruthEvaluator
  from art.defences.detector.poison.poison_filtering_defence import PoisonFilteringDefence
  from art.utils import performance_diff
label_desc: Use image node_id 5 for calling the RONIDefense obj's underlying member method code with example usage: obj.get_calibration_info(before_classifier) and returns: float,  float