class_docstr: Check functionality of optimization loop.
code: def test_with_evaluation_function_propagates_parameter_constraints(
      self,
  ) -> None:
      kwargs = {
          "parameters": [
              {
                  "name": "x1",
                  "type": "range",
                  "bounds": [-5.0, 10.0],
                  "value_type": "float",
                  "log_scale": False,
              },
              {"name": "x2", "type": "range", "bounds": [0.0, 10.0]},
          ],
          "experiment_name": "test",
          "objective_name": "branin",
          "minimize": True,
          "evaluation_function": _branin_evaluation_function,
          "outcome_constraints": ["constrained_metric <= 10"],
          "total_trials": 6,
      }
  
      with self.subTest("With parameter_constraints"):
          loop = OptimizationLoop.with_evaluation_function(
              parameter_constraints=["x1 + x2 <= 20"],
              **kwargs,
          )
          self.assertNotEqual(
              loop.experiment.search_space.parameter_constraints, []
          )
          self.assertTrue(
              len(loop.experiment.search_space.parameter_constraints)
              > 0
          )
  
      with self.subTest("Without parameter_constraints"):
          loop = OptimizationLoop.with_evaluation_function(
              **kwargs,
          )
          self.assertEqual(
              loop.experiment.search_space.parameter_constraints, []
          )
          self.assertTrue(
              len(loop.experiment.search_space.parameter_constraints)
              == 0
          )
  
imports: from typing import Dict, Tuple, Union
  from unittest.mock import Mock, patch
  import numpy
  from ax.exceptions.core import UserInputError
  from ax.metrics.branin import branin
  from ax.modelbridge.generation_strategy import GenerationStep, GenerationStrategy
  from ax.modelbridge.registry import Models
  from ax.service.managed_loop import OptimizationLoop, optimize
  from ax.utils.common.testutils import TestCase
  from ax.utils.testing.mock import fast_botorch_optimize
  from numpy import ndarray
label_desc: Use image node_id 1 for calling the TestManagedLoop obj's underlying member method code with example usage: obj.test_with_evaluation_function_propagates_parameter_constraints() without return types