docstr: Add metric, validating presence of required measures.
docstr_tok: ["Add","metric",",","validating","presence","of","required","measures","."]
code: def add_metric(self, metric: Metric) -> None:
      """Add metric, validating presence of required measures."""
      metric_reference = MetricReference(element_name=metric.name)
      if metric_reference in self._metrics:
          raise DuplicateMetricError(
              f"Metric `{metric.name}` has already been registered"
          )
      for measure_reference in metric.measure_references:
          if (
              measure_reference
              not in self._semantic_model_lookup.measure_references
          ):
              raise NonExistentMeasureError(
                  f"Metric `{metric.name}` references measure `{measure_reference}` which has not been registered"
              )
      self._metrics[metric_reference] = metric
  
imports: from __future__ import annotations
  import logging
  from typing import Dict, FrozenSet, Optional, Sequence, Set
  from dbt_semantic_interfaces.enum_extension import assert_values_exhausted
  from dbt_semantic_interfaces.protocols.metric import Metric, MetricInputMeasure, MetricType
  from dbt_semantic_interfaces.protocols.semantic_manifest import SemanticManifest
  from dbt_semantic_interfaces.references import MeasureReference, MetricReference
  from metricflow.errors.errors import DuplicateMetricError, MetricNotFoundError, NonExistentMeasureError
  from metricflow.model.semantics.linkable_element_properties import LinkableElementProperties
  from metricflow.model.semantics.linkable_spec_resolver import LinkableElementSet, ValidLinkableSpecResolver
  from metricflow.model.semantics.semantic_model_join_evaluator import MAX_JOIN_HOPS
  from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup
  from metricflow.protocols.semantics import MetricAccessor
  from metricflow.specs.specs import LinkableInstanceSpec
label_desc: Use image node_id 9 for calling the MetricLookup obj's underlying member method code with example usage: obj.add_metric(metric) without return types