code: def from_known_inputs(cls, logs=None, metric_names=None, label_names=None):
          
          if not metric_names:
              metric_names = ()
          if not label_names:
              label_names = ()
          known_labels = []
          known_metrics = []
          # pylint: disable=no-member
          # pylint is not aware of the __members__ attributes
          for l in label_descriptor.KnownLabels.__members__.values():
              if l.update_label_func and l.label_name in label_names:
                  known_labels.append(l)
          for m in metric_descriptor.KnownMetrics.__members__.values():
              if m.update_op_func and m.metric_name in metric_names:
                  known_metrics.append(m)
          return cls(logs=logs, metrics=known_metrics, labels=known_labels)
docs: An alternate constructor that assumes known metrics and labels.
  
          This differs from the default constructor in that the metrics and labels
          are iterables of names of 'known' metrics and labels respectively. The
          names are used to obtain the metrics and labels from
          :class:`endpoints_management.control.metric_descriptor.KnownMetrics` and
          :class:`endpoints_management.control.label_descriptor.KnownLabels` respectively.
  
          names that don't correspond to a known metric or label are ignored; as
          are metrics or labels that don't yet have a way of updating the
          `ReportRequest` operation.
  
          Args:
            logs (iterable[string]): the name of logs to be included in the
              `ReportRequest`
            metric_names (iterable[string]): the name of a known metric to be
              added to the `ReportRequest`
            label_names (iterable[string]): the name of a known label to be added
              to the `ReportRequest`