code: def configured_input_measure_for_metric(  # noqa: D
      self, metric_reference: MetricReference
  ) -> Optional[MetricInputMeasure]:
      metric = self.get_metric(metric_reference=metric_reference)
      if (
          metric.type is MetricType.CUMULATIVE
          or metric.type is MetricType.SIMPLE
      ):
          assert (
              len(metric.input_measures) == 1
          ), "Simple and cumulative metrics should have one input measure."
          return metric.input_measures[0]
      elif (
          metric.type is MetricType.RATIO
          or metric.type is MetricType.DERIVED
          or metric.type is MetricType.CONVERSION
      ):
          return None
      else:
          assert_values_exhausted(metric.type)
  
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 10 for calling the MetricLookup obj's underlying member method code with example usage: obj.configured_input_measure_for_metric(metric_reference) and returns: metric, None