class_docstr: Base class for Contextual Bandit Offline Evaluation algorithms. All algorihtms support evaluation of non-stationary
      policies, as required for exploration-exploitation.
class_docstr_tok: ["Base","class","for","Contextual","Bandit","Offline","Evaluation","algorithms",".","All","algorihtms","support","evaluation","of","non-stationary","policies",",","as","required","for","exploration-exploitation","."]
docstr: Attach a logger to the evaluator. This method is useful in cases where logger is
      not yet available at initialization.
docstr_tok: ["Attach","a","logger","to","the","evaluator",".","This","method","is","useful","in","cases","where","logger","is","not","yet","available","at","initialization","."]
code: def attach_logger(self, logger: LightningLoggerBase) -> None:
      """
      Attach a logger to the evaluator. This method is useful in cases where logger is
          not yet available at initialization.
      """
      self.logger = logger
  
imports: import copy
  import logging
  from abc import ABC, abstractmethod
  from typing import Optional
  import torch
  from pytorch_lightning.loggers import LightningLoggerBase
  from reagent.core.types import CBInput
  from reagent.core.utils import get_rank
  from reagent.evaluation.cb.utils import add_importance_weights
label_desc: Use image node_id 8 for calling the BaseOfflineEval obj's underlying member method code with example usage: obj.attach_logger(logger) without return types