class_docstr: Base class of an env which generates data like a problem class.
  
  EnvProblem is both a gym Env and a Problem, since it subclasses both.
  
  Conceptually it contains `batch_size` environments on which step (and reset)
  are called. The data that is generated by the repeated application of step and
  reset is stored within this class and is persisted on disk when we call
  `generate_data` on it.
  
  Subclasses *should* override the following functions:
  - initialize_environments
  - observation_space
  - action_space
  - reward_range
  - _reset
  - _step
  - _render
  
  In addition, they should ovveride the following functions, which are used in
  the `hparams` function to return modalities and vocab_sizes.
  - input_modality
  - input_vocab_size
  - target_modality
  - target_vocab_size
  - action_modality
  - reward_modality
  
  NON NATIVELY BATCHED ENVS:
  
  The implementation for cases where the env is not batched by default is
  `gym_env_problem.GymEnvProblem`.
  
  NATIVELY BATCHED ENVS:
  
  If however, our env is a neural network, which can be batched by default, we
  should:
  
  # 1 - Give it a gym style interface, by overriding observation_space and
  action_space.
  
  # 2 - Override `_reset` and `_step` to do the reset and step in a natively
  batched manner.
  
  # 3 - More generally any function that iterates over the self._env list will
  need to be overridden, ex: `_verify_same_spaces` and `initialize_environments`
  
  KNOWN LIMITATIONS:
  
  - observation_space and action_space should be subclasses of gym.spaces
  - not all subclasses of gym.spaces are supported
class_docstr_tok: ["Base","class","of","an","env","which","generates","data","like","a","problem","class",".","EnvProblem","is","both","a","gym","Env","and","a","Problem",",","since","it","subclasses","both",".","Conceptually","it","contains","`","batch_size","`","environments","on","which","step","(","and","reset",")","are","called",".","The","data","that","is","generated","by","the","repeated","application","of","step","and","reset","is","stored","within","this","class","and","is","persisted","on","disk","when","we","call","`","generate_data","`","on","it",".","Subclasses","*","should","*","override","the","following","functions",":","-","initialize_environments","-","observation_space","-","action_space","-","reward_range","-","_reset","-","_step","-","_render","In","addition",",","they","should","ovveride","the","following","functions",",","which","are","used","in","the","`","hparams","`","function","to","return","modalities","and","vocab_sizes",".","-","input_modality","-","input_vocab_size","-","target_modality","-","target_vocab_size","-","action_modality","-","reward_modality","NON","NATIVELY","BATCHED","ENVS",":","The","implementation","for","cases","where","the","env","is","not","batched","by","default","is","`","gym_env_problem.GymEnvProblem","`",".","NATIVELY","BATCHED","ENVS",":","If","however",",","our","env","is","a","neural","network",",","which","can","be","batched","by","default",",","we","should",":","#","1","-","Give","it","a","gym","style","interface",",","by","overriding","observation_space","and","action_space",".","#","2","-","Override","`","_reset","`","and","`","_step","`","to","do","the","reset","and","step","in","a","natively","batched","manner",".","#","3","-","More","generally","any","function","that","iterates","over","the","self._env","list","will","need","to","be","overridden",",","ex",":","`","_verify_same_spaces","`","and","`","initialize_environments","`","KNOWN","LIMITATIONS",":","-","observation_space","and","action_space","should","be","subclasses","of","gym.spaces","-","not","all","subclasses","of","gym.spaces","are","supported"]
docstr: Returns true if `self.process_rewards` returns discrete rewards.
code: def is_processed_rewards_discrete(self):
      """Returns true if `self.process_rewards` returns discrete rewards."""
  
      # Subclasses can override, but it should match their self.process_rewards.
  
      # This check is a little hackily.
      return self.process_rewards(0.0).dtype == np.int64
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from absl import logging
  from gym.core import Env
  import numpy
  import six
  from tensor2tensor.data_generators import generator_utils
  from tensor2tensor.data_generators import problem
  from tensor2tensor.envs import gym_spaces_utils
  from tensor2tensor.envs import trajectory
  from tensor2tensor.layers import modalities
  from tensor2tensor.utils import contrib
  import tensorflow.compat.v1
label_desc: Use image node_id 19 for calling the EnvProblem obj's underlying member method code with example usage: obj.is_processed_rewards_discrete() and returns: unknown