class_docstr: Class to evaluate the performance of the poison detection method.
docstr: Computes and prints the rates based on the denominator provided.
  
  :param numerator: number used to compute the rate.
  :param denominator: number used to compute the rate.
  :param name: Rate name being computed e.g., false-positive rate.
  :return: Computed rate
code: def calculate_and_print(
      numerator: int, denominator: int, name: str
  ) -> float:
      """
      Computes and prints the rates based on the denominator provided.
  
      :param numerator: number used to compute the rate.
      :param denominator: number used to compute the rate.
      :param name: Rate name being computed e.g., false-positive rate.
      :return: Computed rate
      """
      try:
          res = 100 * (numerator / float(denominator))
          logger.debug(
              "%s: %d/%d=%.3g", name, numerator, denominator, res
          )
          return res
      except ZeroDivisionError:
          logger.debug(
              "%s: couldn't calculate %d/%d",
              name,
              numerator,
              denominator,
          )
          return 0.0
  
file_path: adversarial-robustness-toolbox/art/defences/detector/poison/ground_truth_evaluator.py
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import json
  import logging
  from typing import Tuple, Union, List
  import numpy
label_desc: Use image node_id 4 for calling the GroundTruthEvaluator obj's underlying member method code with example usage: obj.calculate_and_print(numerator, denominator, name) and returns: res, int