parameters: (values)
docstring: Static assert that values is a "proper" iterable.
  
    `Ops` that expect iterables of `Tensor` can call this to validate input.
    Useful since `Tensor`, `ndarray`, byte/text type are all iterables themselves.
  
    Args:
      values:  Object to be checked.
  
    Raises:
      TypeError:  If `values` is not iterable or is one of
        `Tensor`, `SparseTensor`, `np.array`, `tf.compat.bytes_or_text_types`.
docstring_summary: Static assert that values is a "proper" iterable.
docstring_tokens: Static assert that values is a proper iterable .
function: def assert_proper_iterable(values):
    """Static assert that values is a "proper" iterable.
  
    `Ops` that expect iterables of `Tensor` can call this to validate input.
    Useful since `Tensor`, `ndarray`, byte/text type are all iterables themselves.
  
    Args:
      values:  Object to be checked.
  
    Raises:
      TypeError:  If `values` is not iterable or is one of
        `Tensor`, `SparseTensor`, `np.array`, `tf.compat.bytes_or_text_types`.
    """
    unintentional_iterables = (
        (ops.Tensor, sparse_tensor.SparseTensor, np.ndarray)
        + compat.bytes_or_text_types
    )
    if isinstance(values, unintentional_iterables):
      raise TypeError(
          'Expected argument "values" to be a "proper" iterable.  Found: %s' %
          type(values))
  
    if not hasattr(values, '__iter__'):
      raise TypeError(
          'Expected argument "values" to be iterable.  Found: %s' % type(values))
function_tokens: def assert_proper_iterable ( values ) : unintentional_iterables = ( ( ops . Tensor , sparse_tensor . SparseTensor , np . ndarray ) + compat . bytes_or_text_types ) if isinstance ( values , unintentional_iterables ) : raise TypeError ( 'Expected argument "values" to be a "proper" iterable.  Found: %s' % type ( values ) ) if not hasattr ( values , '__iter__' ) : raise TypeError ( 'Expected argument "values" to be iterable.  Found: %s' % type ( values ) )