class_docstr: Multinomial distribution.
  
  This Multinomial distribution is parameterized by `probs`, a (batch of)
  length-`K` `prob` (probability) vectors (`K > 1`) such that
  `tf.reduce_sum(probs, -1) = 1`, and a `total_count` number of trials, i.e.,
  the number of trials per draw from the Multinomial. It is defined over a
  (batch of) length-`K` vector `counts` such that
  `tf.reduce_sum(counts, -1) = total_count`. The Multinomial is identically the
  Binomial distribution when `K = 2`.
  
  #### Mathematical Details
  
  The Multinomial is a distribution over `K`-class counts, i.e., a length-`K`
  vector of non-negative integer `counts = n = [n_0, ..., n_{K-1}]`.
  
  The probability mass function (pmf) is,
  
  ```none
  pmf(n; pi, N) = prod_j (pi_j)**n_j / Z
  Z = (prod_j n_j!) / N!
  ```
  
  where:
  * `probs = pi = [pi_0, ..., pi_{K-1}]`, `pi_j > 0`, `sum_j pi_j = 1`,
  * `total_count = N`, `N` a positive integer,
  * `Z` is the normalization constant, and,
  * `N!` denotes `N` factorial.
  
  Distribution parameters are automatically broadcast in all functions; see
  examples for details.
  
  #### Pitfalls
  
  The number of classes, `K`, must not exceed:
  - the largest integer representable by `self.dtype`, i.e.,
    `2**(mantissa_bits+1)` (IEE754),
  - the maximum `Tensor` index, i.e., `2**31-1`.
  
  In other words,
  
  ```python
  K <= min(2**31-1, {
    tf.float16: 2**11,
    tf.float32: 2**24,
    tf.float64: 2**53 }[param.dtype])
  ```
  
  Note: This condition is validated only when `self.validate_args = True`.
  
  #### Examples
  
  Create a 3-class distribution, with the 3rd class is most likely to be drawn,
  using logits.
  
  ```python
  logits = [-50., -43, 0]
  dist = Multinomial(total_count=4., logits=logits)
  ```
  
  Create a 3-class distribution, with the 3rd class is most likely to be drawn.
  
  ```python
  p = [.2, .3, .5]
  dist = Multinomial(total_count=4., probs=p)
  ```
  
  The distribution functions can be evaluated on counts.
  
  ```python
  # counts same shape as p.
  counts = [1., 0, 3]
  dist.prob(counts)  # Shape []
  
  # p will be broadcast to [[.2, .3, .5], [.2, .3, .5]] to match counts.
  counts = [[1., 2, 1], [2, 2, 0]]
  dist.prob(counts)  # Shape [2]
  
  # p will be broadcast to shape [5, 7, 3] to match counts.
  counts = [[...]]  # Shape [5, 7, 3]
  dist.prob(counts)  # Shape [5, 7]
  ```
  
  Create a 2-batch of 3-class distributions.
  
  ```python
  p = [[.1, .2, .7], [.3, .3, .4]]  # Shape [2, 3]
  dist = Multinomial(total_count=[4., 5], probs=p)
  
  counts = [[2., 1, 1], [3, 1, 1]]
  dist.prob(counts)  # Shape [2]
  
  dist.sample(5) # Shape [5, 2, 3]
  ```
docstr: Initialize a batch of Multinomial distributions.
  
  Args:
    total_count: Non-negative floating point tensor with shape broadcastable
      to `[N1,..., Nm]` with `m >= 0`. Defines this as a batch of
      `N1 x ... x Nm` different Multinomial distributions. Its components
      should be equal to integer values.
    logits: Floating point tensor representing unnormalized log-probabilities
      of a positive event with shape broadcastable to
      `[N1,..., Nm, K]` `m >= 0`, and the same dtype as `total_count`. Defines
      this as a batch of `N1 x ... x Nm` different `K` class Multinomial
      distributions. Only one of `logits` or `probs` should be passed in.
    probs: Positive floating point tensor with shape broadcastable to
      `[N1,..., Nm, K]` `m >= 0` and same dtype as `total_count`. Defines
      this as a batch of `N1 x ... x Nm` different `K` class Multinomial
      distributions. `probs`'s components in the last portion of its shape
      should sum to `1`. Only one of `logits` or `probs` should be passed in.
    validate_args: Python `bool`, default `False`. When `True` distribution
      parameters are checked for validity despite possibly degrading runtime
      performance. When `False` invalid inputs may silently render incorrect
      outputs.
    allow_nan_stats: Python `bool`, default `True`. When `True`, statistics
      (e.g., mean, mode, variance) use the value "`NaN`" to indicate the
      result is undefined. When `False`, an exception is raised if one or
      more of the statistic's batch members are undefined.
    name: Python `str` name prefixed to Ops created by this class.
docstr_tok: ["Initialize","a","batch","of","Multinomial","distributions",".","Args",":","total_count",":","Non-negative","floating","point","tensor","with","shape","broadcastable","to","`","[","N1",",","...",",","Nm","]","`","with","`","m",">","=","0","`",".","Defines","this","as","a","batch","of","`","N1","x","...","x","Nm","`","different","Multinomial","distributions",".","Its","components","should","be","equal","to","integer","values",".","logits",":","Floating","point","tensor","representing","unnormalized","log-probabilities","of","a","positive","event","with","shape","broadcastable","to","`","[","N1",",","...",",","Nm",",","K","]","`","`","m",">","=","0","`",",","and","the","same","dtype","as","`","total_count","`",".","Defines","this","as","a","batch","of","`","N1","x","...","x","Nm","`","different","`","K","`","class","Multinomial","distributions",".","Only","one","of","`","logits","`","or","`","probs","`","should","be","passed","in",".","probs",":","Positive","floating","point","tensor","with","shape","broadcastable","to","`","[","N1",",","...",",","Nm",",","K","]","`","`","m",">","=","0","`","and","same","dtype","as","`","total_count","`",".","Defines","this","as","a","batch","of","`","N1","x","...","x","Nm","`","different","`","K","`","class","Multinomial","distributions",".","`","probs","`","'s","components","in","the","last","portion","of","its","shape","should","sum","to","`","1","`",".","Only","one","of","`","logits","`","or","`","probs","`","should","be","passed","in",".","validate_args",":","Python","`","bool","`",",","default","`","False","`",".","When","`","True","`","distribution","parameters","are","checked","for","validity","despite","possibly","degrading","runtime","performance",".","When","`","False","`","invalid","inputs","may","silently","render","incorrect","outputs",".","allow_nan_stats",":","Python","`","bool","`",",","default","`","True","`",".","When","`","True","`",",","statistics","(","e.g.",",","mean",",","mode",",","variance",")","use","the","value","``","`","NaN","`","``","to","indicate","the","result","is","undefined",".","When","`","False","`",",","an","exception","is","raised","if","one","or","more","of","the","statistic","'s","batch","members","are","undefined",".","name",":","Python","`","str","`","name","prefixed","to","Ops","created","by","this","class","."]
code: def __init__(
      self,
      total_count,
      logits=None,
      probs=None,
      validate_args=False,
      allow_nan_stats=True,
      name="Multinomial",
  ):
      """Initialize a batch of Multinomial distributions.
  
      Args:
        total_count: Non-negative floating point tensor with shape broadcastable
          to `[N1,..., Nm]` with `m >= 0`. Defines this as a batch of
          `N1 x ... x Nm` different Multinomial distributions. Its components
          should be equal to integer values.
        logits: Floating point tensor representing unnormalized log-probabilities
          of a positive event with shape broadcastable to
          `[N1,..., Nm, K]` `m >= 0`, and the same dtype as `total_count`. Defines
          this as a batch of `N1 x ... x Nm` different `K` class Multinomial
          distributions. Only one of `logits` or `probs` should be passed in.
        probs: Positive floating point tensor with shape broadcastable to
          `[N1,..., Nm, K]` `m >= 0` and same dtype as `total_count`. Defines
          this as a batch of `N1 x ... x Nm` different `K` class Multinomial
          distributions. `probs`'s components in the last portion of its shape
          should sum to `1`. Only one of `logits` or `probs` should be passed in.
        validate_args: Python `bool`, default `False`. When `True` distribution
          parameters are checked for validity despite possibly degrading runtime
          performance. When `False` invalid inputs may silently render incorrect
          outputs.
        allow_nan_stats: Python `bool`, default `True`. When `True`, statistics
          (e.g., mean, mode, variance) use the value "`NaN`" to indicate the
          result is undefined. When `False`, an exception is raised if one or
          more of the statistic's batch members are undefined.
        name: Python `str` name prefixed to Ops created by this class.
      """
      parameters = dict(locals())
      with ops.name_scope(
          name, values=[total_count, logits, probs]
      ) as name:
          self._total_count = ops.convert_to_tensor(
              total_count, name="total_count"
          )
          if validate_args:
              self._total_count = distribution_util.embed_check_nonnegative_integer_form(
                  self._total_count
              )
          (
              self._logits,
              self._probs,
          ) = distribution_util.get_logits_and_probs(
              logits=logits,
              probs=probs,
              multidimensional=True,
              validate_args=validate_args,
              name=name,
          )
          self._mean_val = (
              self._total_count[..., array_ops.newaxis] * self._probs
          )
      super(Multinomial, self).__init__(
          dtype=self._probs.dtype,
          reparameterization_type=distribution.NOT_REPARAMETERIZED,
          validate_args=validate_args,
          allow_nan_stats=allow_nan_stats,
          parameters=parameters,
          graph_parents=[self._total_count, self._logits, self._probs],
          name=name,
      )
  
imports: from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import ops
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import check_ops
  from tensorflow.python.ops import control_flow_ops
  from tensorflow.python.ops import map_fn
  from tensorflow.python.ops import math_ops
  from tensorflow.python.ops import nn_ops
  from tensorflow.python.ops import random_ops
  from tensorflow.python.ops.distributions import distribution
  from tensorflow.python.ops.distributions import util
  from tensorflow.python.util import deprecation
  from tensorflow.python.util.tf_export import tf_export
label_desc: Use image node_id 1 to create a new Multinomial object from inherited base classes: distribution with example: obj = Multinomial(total_count, logits, probs, validate_args, allow_nan_stats, name)