class_docstr: A metric defined by a generic deterministic function, with normal noise
  with mean 0 and mean_sd scale added to the result.
docstr: Metric is computed by evaluating a deterministic function, implemented
  in the `f` method defined on this class.
  
  f will expect an array x, which is constructed from the arm
  parameters by extracting the values of the parameter names given in
  param_names, in that order.
  
  Args:
      name: Name of the metric
      param_names: An ordered list of names of parameters to be passed
          to the deterministic function.
      noise_sd: Scale of normal noise added to the function result. If
          None, interpret the function as noisy with unknown noise level.
      lower_is_better: Flag for metrics which should be minimized.
docstr_tok: ["Metric","is","computed","by","evaluating","a","deterministic","function",",","implemented","in","the","`","f","`","method","defined","on","this","class",".","f","will","expect","an","array","x",",","which","is","constructed","from","the","arm","parameters","by","extracting","the","values","of","the","parameter","names","given","in","param_names",",","in","that","order",".","Args",":","name",":","Name","of","the","metric","param_names",":","An","ordered","list","of","names","of","parameters","to","be","passed","to","the","deterministic","function",".","noise_sd",":","Scale","of","normal","noise","added","to","the","function","result",".","If","None",",","interpret","the","function","as","noisy","with","unknown","noise","level",".","lower_is_better",":","Flag","for","metrics","which","should","be","minimized","."]
code: def __init__(
      self,
      name: str,
      param_names: List[str],
      noise_sd: Optional[float] = 0.0,
      lower_is_better: Optional[bool] = None,
  ) -> None:
      """
      Metric is computed by evaluating a deterministic function, implemented
      in the `f` method defined on this class.
  
      f will expect an array x, which is constructed from the arm
      parameters by extracting the values of the parameter names given in
      param_names, in that order.
  
      Args:
          name: Name of the metric
          param_names: An ordered list of names of parameters to be passed
              to the deterministic function.
          noise_sd: Scale of normal noise added to the function result. If
              None, interpret the function as noisy with unknown noise level.
          lower_is_better: Flag for metrics which should be minimized.
      """
      self.param_names = param_names
      self.noise_sd = noise_sd
      super().__init__(name=name, lower_is_better=lower_is_better)
  
imports: from __future__ import annotations
  from typing import Any, Callable, List, Optional
  import numpy
  import pandas
  from ax.core.base_trial import BaseTrial
  from ax.core.data import Data
  from ax.core.metric import Metric, MetricFetchE, MetricFetchResult
  from ax.core.types import TParameterization
  from ax.utils.common.result import Err, Ok
label_desc: Use image node_id 1 to create a new NoisyFunctionMetric object from inherited base classes: Metric with example: obj = NoisyFunctionMetric(name, param_names, noise_sd, lower_is_better)