code: def log(self):
      self.check_estimates_exist()
  
      logger.info(
          "Reward Inverse Propensity Score : normalized {0:.3f} +/- {0:.3f} raw {1:.3f} +/- {1:.3f}".format(
              self.inverse_propensity.normalized,
              self.inverse_propensity.normalized_std_error,
              self.inverse_propensity.raw,
              self.inverse_propensity.raw_std_error,
          )
      )
  
      logger.info(
          "Reward Direct Method : normalized {0:.3f} +/- {0:.3f} raw {1:.3f} +/- {1:.3f}".format(
              self.direct_method.normalized,
              self.direct_method.normalized_std_error,
              self.direct_method.raw,
              self.direct_method.raw_std_error,
          )
      )
  
      logger.info(
          "Reward Doubly Robust P.E. : normalized {0:.3f} +/- {0:.3f} raw {1:.3f} +/- {1:.3f}".format(
              self.doubly_robust.normalized,
              self.doubly_robust.normalized_std_error,
              self.doubly_robust.raw,
              self.doubly_robust.raw_std_error,
          )
      )
  
      logger.info(
          "Value Weighted Doubly Robust P.E. : normalized {0:.3f} +/- {0:.3f} raw {1:.3f} +/- {1:.3f}".format(
              self.weighted_doubly_robust.normalized,
              self.weighted_doubly_robust.normalized_std_error,
              self.weighted_doubly_robust.raw,
              self.weighted_doubly_robust.raw_std_error,
          )
      )
      logger.info(
          "Value Sequential Doubly Robust P.E. : normalized {0:.3f} +/- {0:.3f} raw {1:.3f} +/- {1:.3f}".format(
              self.sequential_doubly_robust.normalized,
              self.sequential_doubly_robust.normalized_std_error,
              self.sequential_doubly_robust.raw,
              self.sequential_doubly_robust.raw_std_error,
          )
      )
      logger.info(
          "Value Magic Doubly Robust P.E. : normalized {0:.3f} +/- {0:.3f} raw {1:.3f} +/- {1:.3f}".format(
              self.magic.normalized,
              self.magic.normalized_std_error,
              self.magic.raw,
              self.magic.raw_std_error,
          )
      )
  
file_path: ReAgent/reagent/evaluation/cpe.py
imports: import logging
  import math
  from typing import Dict, NamedTuple, Optional
  import numpy
  import torch
  from reagent.core.tensorboardX import SummaryWriterContext
label_desc: Use image node_id 2 for calling the CpeEstimateSet obj's underlying member method code with example usage: obj.log() without return types