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: Formats observation available for the second sub-step.
docstr_tok: ["Formats","observation","available","for","the","second","sub-step","."]
code: def _obs_cutting_step(
      flat_obs: Dict[str, np.array], selected_piece_idx: int
  ) -> Dict[str, np.array]:
      """Formats observation available for the second sub-step."""
      return {
          "selected_piece": flat_obs["inventory"][selected_piece_idx],
          "ordered_piece": flat_obs["ordered_piece"],
      }
  
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 5 for calling the StructuredCutting2DEnvironment obj's underlying member method code with example usage: obj._obs_cutting_step(flat_obs, selected_piece_idx) and returns: dict