code: def evaluate(ope_shared_stats: "OpeSharedStats") -> tuple:
      """
      Run the off-policy evaluator to get a score for the goodness of the new policy, based on the dataset,
      which was collected using other policy(ies).
  
      Papers:
      https://arxiv.org/abs/1103.4601
      https://arxiv.org/pdf/1612.01205 (some more clearer explanations)
  
      :return: the evaluation score
      """
  
      ips = np.mean(
          ope_shared_stats.rho_all_dataset
          * ope_shared_stats.all_rewards
      )
      dm = np.mean(ope_shared_stats.all_v_values_reward_model_based)
      dr = (
          np.mean(
              ope_shared_stats.rho_all_dataset
              * (
                  ope_shared_stats.all_rewards
                  - ope_shared_stats.all_reward_model_rewards[
                      range(len(ope_shared_stats.all_actions)),
                      ope_shared_stats.all_actions,
                  ]
              )
          )
          + dm
      )
  
      return ips, dm, dr
  
label_desc: Use image node_id 1 for calling the DoublyRobust obj's underlying member method code with example usage: obj.evaluate(ope_shared_stats) and returns: ips,  dm,  dr