class_docstr: View of statistics for a dataset (slice).
class_docstr_tok: ["View","of","statistics","for","a","dataset","(","slice",")","."]
docstr: Retrieve a derived feature based on a deriver name and its inputs.
  
  Args:
    deriver_name: The name of a deriver. Matches validation_derived_source
      deriver_name.
    source_paths: Source paths for derived features. Matches
      validation_derived_source.source_path.
  
  Returns:
    FeatureView of derived feature.
  
  Raises:
    ValueError if multiple derived features match.
docstr_tok: ["Retrieve","a","derived","feature","based","on","a","deriver","name","and","its","inputs",".","Args",":","deriver_name",":","The","name","of","a","deriver",".","Matches","validation_derived_source","deriver_name",".","source_paths",":","Source","paths","for","derived","features",".","Matches","validation_derived_source.source_path",".","Returns",":","FeatureView","of","derived","feature",".","Raises",":","ValueError","if","multiple","derived","features","match","."]
code: def get_derived_feature(
      self, deriver_name: str, source_paths: Sequence[types.FeaturePath]
  ) -> Optional["FeatureView"]:
      """Retrieve a derived feature based on a deriver name and its inputs.
  
      Args:
        deriver_name: The name of a deriver. Matches validation_derived_source
          deriver_name.
        source_paths: Source paths for derived features. Matches
          validation_derived_source.source_path.
  
      Returns:
        FeatureView of derived feature.
  
      Raises:
        ValueError if multiple derived features match.
      """
      # TODO(b/221453427): Consider indexing if performance becomes an issue.
      results = []
      for feature in self.proto().features:
          if feature.validation_derived_source is None:
              continue
          if (
              feature.validation_derived_source.deriver_name
              != deriver_name
          ):
              continue
          if len(source_paths) != len(
              feature.validation_derived_source.source_path
          ):
              continue
          all_match = True
          for i in range(len(source_paths)):
              if source_paths[i] != types.FeaturePath.from_proto(
                  feature.validation_derived_source.source_path[i]
              ):
                  all_match = False
                  break
          if all_match:
              results.append(FeatureView(feature))
          if len(results) > 1:
              raise ValueError(
                  "Ambiguous result, %d features matched" % len(results)
              )
      if len(results) == 1:
          return results.pop()
      return None
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import logging
  from typing import Dict, Iterable, Optional, Sequence, Text, Tuple, Union
  import numpy
  import pyarrow
  import tensorflow
  from tensorflow_data_validation import constants
  from tensorflow_data_validation import types
  from tensorflow_data_validation.arrow import arrow_util
  from tensorflow_data_validation.utils import artifacts_io_impl
  from tensorflow_data_validation.utils import io_util
  from tfx_bsl import statistics
  from tfx_bsl.arrow import array_util
  from google.protobuf import text_format
  from tensorflow_metadata.proto.v0 import statistics_pb2
label_desc: Use image node_id 8 for calling the DatasetView obj's underlying member method code with example usage: obj.get_derived_feature(deriver_name, source_paths) and returns: None, results