class_docstr: This class keeps track of services that can be employed by all objects of the agent-environment loop.
  
  Currently the context is populated by
  
  - Event service: Acts as backend of the PubSub service, collects all events from the env.
    The event service can also be directly facilitated by components outside the environment (e.g. agent, heuristics,
    state/observation mapping)
  - Episode ID: Generates and keeps track of the current episode ID
    Episode IDs are used for connecting logged statistics, events and recorded trajectory data together, making
    analysis and drill-down across these different levels possible.
  - Step ID: Tracks ID of the core env step we are currently in. Helps wrappers recognize core env steps in multi-step
    scenarios.
  - Post-step callbacks: Handles registration of post-step callbacks and provides a utility to run them (usually
                         triggered from the outer-most wrapper)
  - Step lifecycle flags: Flags partially managed from the wrapper stack, helping the wrappers to determine
                          where we are in the step lifecycle and which one is the outer-most one
docstr: Register a function to be called after every single step, just before the events of the
  previous step are cleared.
  
  In case multiple env steps are initiated from a wrapper's step function (e.g. during step skipping),
  these callbacks will be called in between these individual steps as well.
docstr_tok: ["Register","a","function","to","be","called","after","every","single","step",",","just","before","the","events","of","the","previous","step","are","cleared",".","In","case","multiple","env","steps","are","initiated","from","a","wrapper","'s","step","function","(","e.g",".","during","step","skipping",")",",","these","callbacks","will","be","called","in","between","these","individual","steps","as","well","."]
code: def register_post_step(self, callback: Callable) -> None:
      """
      Register a function to be called after every single step, just before the events of the
      previous step are cleared.
  
      In case multiple env steps are initiated from a wrapper's step function (e.g. during step skipping),
      these callbacks will be called in between these individual steps as well.
      """
      self._post_step_callbacks.append(callback)
  
file_path: maze/maze/core/env/environment_context.py
imports: import uuid
  from typing import Callable
label_desc: Use image node_id 5 for calling the EnvironmentContext obj's underlying member method code with example usage: obj.register_post_step(callback) without return types