code: def test_outcome_feasibility_probability(self):
      for dtype in (torch.float, torch.double):
          samples = torch.zeros(
              1, 1, 1, device=self.device, dtype=dtype
          )
          mm = MockModel(MockPosterior(samples=samples))
          X = torch.zeros(1, 1, device=self.device, dtype=torch.double)
  
          for outcome_constraints in [
              [lambda y: y[..., 0] - 0.5],
              [lambda y: y[..., 0] + 1.0],
          ]:
              p_outcome = get_outcome_feasibility_probability(
                  model=mm,
                  X=X,
                  outcome_constraints=outcome_constraints,
                  nsample_outcome=2,
              )
              feasible = outcome_constraints[0](samples) <= 0
              self.assertEqual(p_outcome, feasible)
  
file_path: botorch/test/utils/test_feasible_volume.py
imports: import torch
  from botorch.utils.feasible_volume import estimate_feasible_volume, get_feasible_samples, get_outcome_feasibility_probability
  from botorch.utils.testing import BotorchTestCase, MockModel, MockPosterior
label_desc: Use image node_id 2 for calling the TestFeasibleVolumeEstimates obj's underlying member method code with example usage: obj.test_outcome_feasibility_probability() without return types