class_docstr: Structured environment version of the cutting 2D environment.
  The environment alternates between the two sub-steps:
  
  - Select cutting piece
  - Select cutting configuration (cutting order and cutting orientation)
  
  :param maze_env: The "flat" cutting 2D environment to wrap.
class_docstr_tok: ["Structured","environment","version","of","the","cutting","2D","environment",".","The","environment","alternates","between","the","two","sub-steps",":","-","Select","cutting","piece","-","Select","cutting","configuration","(","cutting","order","and","cutting","orientation",")",":","param","maze_env",":","The","``","flat","''","cutting","2D","environment","to","wrap","."]
docstr: Returns rewards attributed to individual actors after the step has been done. This is necessary,
  as after the first sub-step (i.e., piece selection), the full reward is not yet available, so zero
  reward is returned instead. The second (= last) sub-step then returns joint reward for all (both) actors.
  
  With this method, we can attribute parts of the reward to the individual actors, which is useful for example
  if each has its own separate critic.
  
  In this case, we attribute half of the reward to each actor.
docstr_tok: ["Returns","rewards","attributed","to","individual","actors","after","the","step","has","been","done",".","This","is","necessary",",","as","after","the","first","sub-step","(","i.e.",",","piece","selection",")",",","the","full","reward","is","not","yet","available",",","so","zero","reward","is","returned","instead",".","The","second","(","=","last",")","sub-step","then","returns","joint","reward","for","all","(","both",")","actors",".","With","this","method",",","we","can","attribute","parts","of","the","reward","to","the","individual","actors",",","which","is","useful","for","example","if","each","has","its","own","separate","critic",".","In","this","case",",","we","attribute","half","of","the","reward","to","each","actor","."]
code: def get_actor_rewards(self) -> Optional[np.ndarray]:
      """Returns rewards attributed to individual actors after the step has been done. This is necessary,
      as after the first sub-step (i.e., piece selection), the full reward is not yet available, so zero
      reward is returned instead. The second (= last) sub-step then returns joint reward for all (both) actors.
  
      With this method, we can attribute parts of the reward to the individual actors, which is useful for example
      if each has its own separate critic.
  
      In this case, we attribute half of the reward to each actor.
      """
      return np.array([self._last_reward / 2.0] * 2)
  
imports: from copy import deepcopy
  from typing import Dict, Any, Union, Tuple, Optional, List
  import gym
  import numpy
  from maze.core.env.maze_action import MazeActionType
  from maze.core.env.maze_env import MazeEnv
  from maze.core.env.maze_state import MazeStateType
  from maze.core.env.structured_env import StructuredEnv, ActorID
  from maze.core.env.structured_env_spaces_mixin import StructuredEnvSpacesMixin
  from maze.core.wrappers.wrapper import Wrapper
  from .maze_env import maze_env_factory
label_desc: Use image node_id 9 for calling the StructuredCutting2DEnvironment obj's underlying member method code with example usage: obj.get_actor_rewards() and returns: np