code: def test_feasible_samples(self):
      # -X[0]+X[1]>=1
      inequality_constraints = [
          (torch.tensor([0, 1]), torch.tensor([-1.0, 1.0]), 1)
      ]
      box_samples = torch.tensor(
          [[1.1, 2.0], [0.9, 2.1], [1.5, 2], [1.8, 2.2]]
      )
  
      feasible_samples, p_linear = get_feasible_samples(
          samples=box_samples,
          inequality_constraints=inequality_constraints,
      )
  
      feasible = box_samples[:, 1] - box_samples[:, 0] >= 1
  
      self.assertTrue(
          torch.all(
              torch.eq(feasible_samples, box_samples[feasible])
          ).item()
      )
      self.assertEqual(
          p_linear, feasible.sum(0).float().item() / feasible.size(0)
      )
  
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 1 for calling the TestFeasibleVolumeEstimates obj's underlying member method code with example usage: obj.test_feasible_samples() without return types