class_docstr: Encapsulates tensor normalization and owns normalization variables.
  
  Example usage:
  
  ```
  tensor_normalizer = StreamingTensorNormalizer(
      tf.TensorSpec([], tf.float32))
  observation_list = [list of float32 scalars or batches]
  normalized_list = []
  
  for o in observation_list:
    normalized_list.append(tensor_normalizer.normalize(o))
    tensor_normalizer.update(o)
  ```
  
  For float64 inputs do:
  ```
  tensor_normalizer = StreamingTensorNormalizer(
      tf.TensorSpec([], tf.float64), dtype=tf.float64)
  observation_list = [list of float64 scalars or batches]
  
  for o in observation_list:
    normalized_list.append(tensor_normalizer.normalize(o))
    tensor_normalizer.update(o)
docstr: Returns a tuple of tf variables owned by this normalizer.
docstr_tok: ["Returns","a","tuple","of","tf","variables","owned","by","this","normalizer","."]
code: def variables(self):
      """Returns a tuple of tf variables owned by this normalizer."""
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import abc
  from typing import Tuple
  import six
  import tensorflow
  from tf_agents.specs import tensor_spec
  from tf_agents.typing import types
  from tf_agents.utils import common
  from tf_agents.utils import nest_utils
label_desc: Use image node_id 5 for calling the TensorNormalizer obj's underlying member method code with example usage: obj.variables() without return types