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","."]
code: def __init__(self, maze_env: MazeEnv):
      Wrapper.__init__(self, maze_env)
  
      # define sub-step action spaces
      self._action_spaces_dict = {
          0: gym.spaces.Dict(
              {"piece_idx": maze_env.action_space["piece_idx"]}
          ),
          1: gym.spaces.Dict(
              {
                  "cut_rotation": maze_env.action_space["cut_rotation"],
                  "cut_order": maze_env.action_space["cut_order"],
              }
          ),
      }
  
      # define sub-step observation spaces
      flat_space = maze_env.observation_space
      self._observation_spaces_dict = {
          0: flat_space,
          1: gym.spaces.Dict(
              {
                  "selected_piece": flat_space["ordered_piece"],
                  "ordered_piece": flat_space["ordered_piece"],
              }
          ),
      }
  
      self._flat_obs = None
      self._action_0 = None
      self._sub_step_key = 0
      self._last_reward = None
  
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 1 to create a new StructuredCutting2DEnvironment object from inherited base classes: Wrapper, StructuredEnv, StructuredEnvSpacesMixin with example: obj = StructuredCutting2DEnvironment(maze_env)