class_docstr: Testing the best point utilities functionality that is not tested in
  main `AxClient` testing suite (`TestServiceAPI`).
class_docstr_tok: ["Testing","the","best","point","utilities","functionality","that","is","not","tested","in","main","`","AxClient","`","testing","suite","(","`","TestServiceAPI","`",")","."]
code: def test_is_row_feasible(self) -> None:
      exp = get_experiment_with_observations(
          observations=[
              [-1, 1, 1],
              [1, 2, 1],
              [3, 3, -1],
              [2, 4, 1],
              [2, 0, 1],
          ],
          constrained=True,
      )
      feasible_series = _is_row_feasible(
          df=exp.lookup_data().df,
          optimization_config=not_none(exp.optimization_config),
      )
      expected_per_arm = [False, True, False, True, True]
      expected_series = _repeat_elements(
          list_to_replicate=expected_per_arm, n_repeats=3
      )
      pd.testing.assert_series_equal(
          feasible_series, expected_series, check_names=False
      )
  
      exp.optimization_config.outcome_constraints[0].relative = True
      relative_constraint_warning = (
          "WARNING:ax.service.utils.best_point:Ignoring relative constraint "
          "OutcomeConstraint(m3 >= 0.0%). Derelativize OptimizationConfig "
          "before passing to `_is_row_feasible`."
      )
      with self.assertLogs(
          logger=best_point_logger, level="WARN"
      ) as lg:
          # with lookout for warnings(" OutcomeConstraint(m3 >= 0.0%) ignored."):
          feasible_series = _is_row_feasible(
              df=exp.lookup_data().df,
              optimization_config=not_none(exp.optimization_config),
          )
          self.assertTrue(
              any(
                  relative_constraint_warning in warning
                  for warning in lg.output
              ),
              msg=lg.output,
          )
      expected_per_arm = [False, True, True, True, True]
      expected_series = _repeat_elements(
          list_to_replicate=expected_per_arm, n_repeats=3
      )
      pd.testing.assert_series_equal(
          feasible_series, expected_series, check_names=False
      )
      exp._status_quo = exp.trials[0].arms[0]
      for constraint in not_none(
          exp.optimization_config
      ).all_constraints:
          constraint.relative = True
      optimization_config = _derel_opt_config_wrapper(
          optimization_config=not_none(exp.optimization_config),
          experiment=exp,
      )
      with self.assertLogs(
          logger=best_point_logger, level="WARN"
      ) as lg:
          # `assertNoLogs` coming in 3.10 - until then we log a dummy warning and
          # continue.
          best_point_logger.warning("Dummy warning")
          feasible_series = _is_row_feasible(
              df=exp.lookup_data().df,
              optimization_config=optimization_config,
          )
          self.assertFalse(
              any(
                  relative_constraint_warning in warning
                  for warning in lg.output
              ),
              msg=lg.output,
          )
      expected_per_arm = [True, True, False, True, False]
      expected_series = _repeat_elements(
          list_to_replicate=expected_per_arm, n_repeats=3
      )
      pd.testing.assert_series_equal(
          feasible_series, expected_series, check_names=False
      )
  
      # Check that index is carried over for interfacing appropriately
      # with related dataframes.
      exp = get_experiment_with_observations(
          observations=[
              [-1, 1, 1],
              [1, 2, 1],
              [3, 3, -1],
              [2, 4, 1],
              [2, 0, 1],
          ],
          constrained=False,
      )
      df = exp.lookup_data().df
      # Artificially redact some data.
      df = df[df["mean"] > 1]
      feasible_series = _is_row_feasible(
          df=df, optimization_config=optimization_config
      )
      pd.testing.assert_index_equal(
          df.index, feasible_series.index, check_names=False
      )
  
imports: import random
  from typing import List
  from unittest.mock import MagicMock, patch
  import pandas
  import torch
  from ax.core.arm import Arm
  from ax.core.batch_trial import BatchTrial
  from ax.core.data import Data
  from ax.core.generator_run import GeneratorRun
  from ax.core.objective import ScalarizedObjective
  from ax.core.optimization_config import OptimizationConfig
  from ax.core.outcome_constraint import OutcomeConstraint
  from ax.core.types import ComparisonOp
  from ax.exceptions.core import UserInputError
  from ax.modelbridge.cross_validation import AssessModelFitResult
  from ax.modelbridge.registry import Models
  from ax.modelbridge.torch import TorchModelBridge
  from ax.plot.pareto_utils import get_tensor_converter_model
  from ax.service.utils.best_point import _derel_opt_config_wrapper, _is_row_feasible, extract_Y_from_data, get_best_parameters, get_best_raw_objective_point, logger
  from ax.utils.common.testutils import TestCase
  from ax.utils.common.typeutils import not_none
  from ax.utils.testing.core_stubs import get_branin_experiment, get_branin_metric, get_experiment_with_observations, get_sobol
  from ax.utils.testing.mock import fast_botorch_optimize
label_desc: Use image node_id 9 for calling the TestBestPointUtils obj's underlying member method code with example usage: obj.test_is_row_feasible() without return types