class_docstr: NDCG (normalized discounted cumulative gain) metric.
  
  Calculates NDCG@k for a given set of top_k values calculated from a list of
  gains (relevance scores) that are sorted based on the associated predictions.
  The top_k_list can be passed as part of the NDCG metric config or using
  tfma.MetricsSpec.binarize.top_k_list if configuring multiple top_k metrics.
  The gain (relevance score) is determined from the value stored in the
  'gain_key' feature. The value of NDCG@k returned is a weighted average of
  NDCG@k over the set of queries using the example weights.
  
  NDCG@k = (DCG@k for the given rank)/(DCG@k
  DCG@k = sum_{i=1}^k gain_i/log_2(i+1), where gain_i is the gain (relevance
          score) of the i^th ranked response, indexed from 1.
  
  This is a query/ranking based metric so a query_key must also be provided in
  the associated tfma.MetricsSpec.
class_docstr_tok: ["NDCG","(","normalized","discounted","cumulative","gain",")","metric",".","Calculates","NDCG","@","k","for","a","given","set","of","top_k","values","calculated","from","a","list","of","gains","(","relevance","scores",")","that","are","sorted","based","on","the","associated","predictions",".","The","top_k_list","can","be","passed","as","part","of","the","NDCG","metric","config","or","using","tfma.MetricsSpec.binarize.top_k_list","if","configuring","multiple","top_k","metrics",".","The","gain","(","relevance","score",")","is","determined","from","the","value","stored","in","the","'gain_key","'","feature",".","The","value","of","NDCG","@","k","returned","is","a","weighted","average","of","NDCG","@","k","over","the","set","of","queries","using","the","example","weights",".","NDCG","@","k","=","(","DCG","@","k","for","the","given","rank",")","\/","(","DCG","@","k","DCG","@","k","=","sum_","{","i=1","}","^k","gain_i\/log_2","(","i+1",")",",","where","gain_i","is","the","gain","(","relevance","score",")","of","the","i^th","ranked","response",",","indexed","from","1",".","This","is","a","query\/ranking","based","metric","so","a","query_key","must","also","be","provided","in","the","associated","tfma.MetricsSpec","."]
docstr: Initializes NDCG.
  
  Args:
    gain_key: Key of feature in features dictionary that holds gain values.
    top_k_list: Values for top k. This can also be set using the
      tfma.MetricsSpec.binarize.top_k_list associated with the metric.
    name: Metric name.
docstr_tok: ["Initializes","NDCG",".","Args",":","gain_key",":","Key","of","feature","in","features","dictionary","that","holds","gain","values",".","top_k_list",":","Values","for","top","k.","This","can","also","be","set","using","the","tfma.MetricsSpec.binarize.top_k_list","associated","with","the","metric",".","name",":","Metric","name","."]
code: def __init__(
      self,
      gain_key: str,
      top_k_list: Optional[List[int]] = None,
      name: str = NDCG_NAME,
  ):
      """Initializes NDCG.
  
      Args:
        gain_key: Key of feature in features dictionary that holds gain values.
        top_k_list: Values for top k. This can also be set using the
          tfma.MetricsSpec.binarize.top_k_list associated with the metric.
        name: Metric name.
      """
      super().__init__(
          _ndcg, gain_key=gain_key, top_k_list=top_k_list, name=name
      )
  
imports: from typing import Dict, Iterable, List, Optional, Tuple, Union
  import apache_beam
  import numpy
  from tensorflow_model_analysis.metrics import metric_types
  from tensorflow_model_analysis.metrics import metric_util
  from tensorflow_model_analysis.proto import config_pb2
  from tensorflow_model_analysis.utils import util
label_desc: Use image node_id 1 to create a new NDCG object from inherited base classes: metric_types with example: obj = NDCG(gain_key, top_k_list, name)