@tf_export('math.bincount', v1=[])
def bincount(arr, weights=None, minlength=None, maxlength=None, dtype=dtypes.int32, name=None):
    'Counts the number of occurrences of each value in an integer array.\n\n  If `minlength` and `maxlength` are not given, returns a vector with length\n  `tf.reduce_max(arr) + 1` if `arr` is non-empty, and length 0 otherwise.\n  If `weights` are non-None, then index `i` of the output stores the sum of the\n  value in `weights` at each index where the corresponding value in `arr` is\n  `i`.\n\n  Args:\n    arr: An int32 tensor of non-negative values.\n    weights: If non-None, must be the same shape as arr. For each value in\n      `arr`, the bin will be incremented by the corresponding weight instead of\n      1.\n    minlength: If given, ensures the output has length at least `minlength`,\n      padding with zeros at the end if necessary.\n    maxlength: If given, skips values in `arr` that are equal or greater than\n      `maxlength`, ensuring that the output has length at most `maxlength`.\n    dtype: If `weights` is None, determines the type of the output bins.\n    name: A name scope for the associated operations (optional).\n\n  Returns:\n    A vector with the same dtype as `weights` or the given `dtype`. The bin\n    values.\n  '
    name = ('bincount' if (name is None) else name)
    with ops.name_scope(name):
        arr = ops.convert_to_tensor(arr, name='arr', dtype=dtypes.int32)
        array_is_nonempty = (reduce_prod(array_ops.shape(arr)) > 0)
        output_size = (cast(array_is_nonempty, dtypes.int32) * (reduce_max(arr) + 1))
        if (minlength is not None):
            minlength = ops.convert_to_tensor(minlength, name='minlength', dtype=dtypes.int32)
            output_size = gen_math_ops.maximum(minlength, output_size)
        if (maxlength is not None):
            maxlength = ops.convert_to_tensor(maxlength, name='maxlength', dtype=dtypes.int32)
            output_size = gen_math_ops.minimum(maxlength, output_size)
        if (weights is not None):
            weights = ops.convert_to_tensor(weights, name='weights')
            return gen_math_ops.unsorted_segment_sum(weights, arr, output_size)
        weights = constant_op.constant([], dtype)
        return gen_math_ops.bincount(arr, output_size, weights)
Counts the number of occurrences of each value in an integer array.

If `minlength` and `maxlength` are not given, returns a vector with length
`tf.reduce_max(arr) + 1` if `arr` is non-empty, and length 0 otherwise.
If `weights` are non-None, then index `i` of the output stores the sum of the
value in `weights` at each index where the corresponding value in `arr` is
`i`.

Args:
  arr: An int32 tensor of non-negative values.
  weights: If non-None, must be the same shape as arr. For each value in
    `arr`, the bin will be incremented by the corresponding weight instead of
    1.
  minlength: If given, ensures the output has length at least `minlength`,
    padding with zeros at the end if necessary.
  maxlength: If given, skips values in `arr` that are equal or greater than
    `maxlength`, ensuring that the output has length at most `maxlength`.
  dtype: If `weights` is None, determines the type of the output bins.
  name: A name scope for the associated operations (optional).

Returns:
  A vector with the same dtype as `weights` or the given `dtype`. The bin
  values.
@tf_export('math.bincount', v1=[])
def bincount(arr, weights=None, minlength=None, maxlength=None, dtype=dtypes.int32, name=None):
    'Counts the number of occurrences of each value in an integer array.\n\n  If `minlength` and `maxlength` are not given, returns a vector with length\n  `tf.reduce_max(arr) + 1` if `arr` is non-empty, and length 0 otherwise.\n  If `weights` are non-None, then index `i` of the output stores the sum of the\n  value in `weights` at each index where the corresponding value in `arr` is\n  `i`.\n\n  Args:\n    arr: An int32 tensor of non-negative values.\n    weights: If non-None, must be the same shape as arr. For each value in\n      `arr`, the bin will be incremented by the corresponding weight instead of\n      1.\n    minlength: If given, ensures the output has length at least `minlength`,\n      padding with zeros at the end if necessary.\n    maxlength: If given, skips values in `arr` that are equal or greater than\n      `maxlength`, ensuring that the output has length at most `maxlength`.\n    dtype: If `weights` is None, determines the type of the output bins.\n    name: A name scope for the associated operations (optional).\n\n  Returns:\n    A vector with the same dtype as `weights` or the given `dtype`. The bin\n    values.\n  '
    name = ('bincount' if (name is None) else name)
    with ops.name_scope(name):
        arr = ops.convert_to_tensor(arr, name='arr', dtype=dtypes.int32)
        array_is_nonempty = (reduce_prod(array_ops.shape(arr)) > 0)
        output_size = (cast(array_is_nonempty, dtypes.int32) * (reduce_max(arr) + 1))
        if (minlength is not None):
            minlength = ops.convert_to_tensor(minlength, name='minlength', dtype=dtypes.int32)
            output_size = gen_math_ops.maximum(minlength, output_size)
        if (maxlength is not None):
            maxlength = ops.convert_to_tensor(maxlength, name='maxlength', dtype=dtypes.int32)
            output_size = gen_math_ops.minimum(maxlength, output_size)
        if (weights is not None):
            weights = ops.convert_to_tensor(weights, name='weights')
            return gen_math_ops.unsorted_segment_sum(weights, arr, output_size)
        weights = constant_op.constant([], dtype)
        return gen_math_ops.bincount(arr, output_size, weights)