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","."]
code: def get_formatted_result_string(self) -> str:
      return f"Avg reward {self.get_avg_reward():0.3f} based on {int(self.sum_weight_accepted.item())} processed observations (out of {int(self.sum_weight_all_data.item())} observations). The eval model has been updated {self.num_eval_model_updates.item()} times"
  
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 10 for calling the BaseOfflineEval obj's underlying member method code with example usage: obj.get_formatted_result_string() and returns: str, self, str, int, str, int, str, self, str