class_docstr: The Env base class, loosely-inspired by the analogous ``env`` class of the OpenAIGym framework. 
  
  A typical workflow is as follows:
  
  >>> my_env = MyCustomEnv(<some_params>)
  >>> initial_observation = my_env.reset(initial_state)
  >>> my_agent.infer_states(initial_observation)
  >>> my_agent.infer_policies()
  >>> next_action = my_agent.sample_action()
  >>> next_observation = my_env.step(next_action)
  
  This would be the first step of an active inference process, where a sub-class of ``Env``, ``MyCustomEnv`` is initialized, 
  an initial observation is produced, and these observations are fed into an instance of ``Agent`` in order to produce an action,
  that can then be fed back into the the ``Env`` instance.
code: def get_transition_dist(self):
      raise ValueError(
          "<{}> does not provide a model specification".format(
              type(self).__name__
          )
      )
  
file_path: pymdp/pymdp/envs/env.py
label_desc: Use image node_id 6 for calling the Env obj's underlying member method code with example usage: obj.get_transition_dist() without return types