class_docstr: These unit tests verify basic properties of the Switch estimators, in that
  when the threshold is low, the model-based DM estimator is used and when the
  threshold is high, the propensity score estimator is used.
code: def setUp(self) -> None:
      random.seed(0)
      torch.random.manual_seed(0)
      np.random.seed(0)
      self.action_space = ActionSpace(TestSwitchEstimators.NUM_ACTIONS)
      self.sample1 = LogSample(
          context=0,
          log_action=Action(0),
          log_reward=1.0,
          log_action_probabilities=ActionDistribution(
              torch.tensor([0.7, 0.3])
          ),
          tgt_action_probabilities=ActionDistribution([0.6, 0.4]),
          tgt_action=Action(1),
          model_outputs=ModelOutputs(0.5, [0.4, 0.5]),
      )
      self.sample2 = LogSample(
          context=0,
          log_action=Action(1),
          log_reward=0.0,
          log_action_probabilities=ActionDistribution([0.5, 0.5]),
          tgt_action_probabilities=ActionDistribution([0.7, 0.3]),
          tgt_action=Action(0),
          model_outputs=ModelOutputs(0.0, [0.0, 0.0]),
      )
      self.bandit_input = BanditsEstimatorInput(
          self.action_space, [self.sample1, self.sample2], True
      )
      SwitchEstimator.EXP_BASE = 1.5
      SwitchEstimator.CANDIDATES = 21
  
file_path: ReAgent/reagent/ope/test/unit_tests/test_contextual_bandit_estimators.py
imports: import random
  import unittest
  import numpy
  import torch
  from reagent.ope.estimators.contextual_bandits_estimators import Action, ActionDistribution, ActionSpace, BanditsEstimatorInput, DMEstimator, DoublyRobustEstimator, IPSEstimator, LogSample, ModelOutputs, SwitchDREstimator, SwitchEstimator
label_desc: Use image node_id 1 for calling the TestSwitchEstimators obj's underlying member method code with example usage: obj.setUp() without return types