code: def add_cmdline_args(
      cls, parser: ParlaiParser, partial_opt: Optional[Opt] = None
  ) -> ParlaiParser:
      super().add_cmdline_args(parser, partial_opt)
      group = parser.add_argument_group("Proof Writer args")
      group.add_argument(
          "--proofwriter-world",
          type=str,
          choices=["OWA", "CWA"],
          default="OWA",
          help="Closed world assumption vs open world assumption",
      )
      group.add_argument(
          "--proofwriter-dataset",
          type=str,
          choices=[
              "depth-0",
              "depth-1",
              "depth-2",
              "depth-3",
              "depth-5",
              "birds-electricity",
              "NatLang",
              "depth-3ext",
              "depth-3ext-NatLang",
          ],
          help="""The different proofwriter datasets. Descriptions:
              * depth-N (N=0, 1, 2, 3, 5): Questions with rulebases in synthetic language reasoning paths up to depth N, as
              defined in the paper.
              * birds-electricity: Questions with "birds" and "electricity" rulebases.
              * NatLang: Questions with rulebases in crowdsourced natural language.
              * depth-3ext: The Depth3 dataset augmented with 10% each of the depth=0, depth=1, and depth-2 datasets.
              * depth-3ext-NatLang: The Depth3Ext dataset augmented with the NatLang one.""",
          default="depth-0",
      )
      group.add_argument(
          "--proofwriter-version",
          type=str,
          choices=["base", "stage", "abduct"],
          default="base",
          help="""Version of the dataset to use
              * base: Main dataset for each split, with theories and associated questions and proofs
              * stage: "Staged" version of each theory, with depth-1 implications derived one at a
              time while adding to the theory.
              * abduct: "Missing fact" data for each theory. Only exists for OWA""",
      )
      group.add_argument(
          "--proofwriter-shuffle-context",
          type=bool,
          default=False,
          help="Use default theory as context or used a shuffled version based off of component facts + rules.",
      )
      group.add_argument(
          "--proofwriter-data-verbose",
          type=bool,
          default=False,
          help="Copy *all* the metadata for facts, rules, and questions into the Message. Useful for enabling some"
          + "mutators. Kept also to keep track of which relevant fields out of ProofWriter that we might want to use"
          + "have or have not been used.",
      )
      return parser
  
imports: import json
  import os
  import copy
  import random
  import re
  from typing import Optional, List, Tuple
  from tasks.reasoning.agents import StepByStepReasoningTeacher
  from .build import build
  from parlai.core.message import Message
  from parlai.core.mutators import ManyEpisodeMutator, register_mutator
  from parlai.core.params import ParlaiParser
  from parlai.core.opt import Opt
  from parlai.core.teachers import DialogTeacher
  from parlai.utils.data import DatatypeHelper
  from parlai.utils.io import PathManager
label_desc: Use image node_id 1 for calling the ProofWriterTeacher obj's underlying member method code with example usage: obj.add_cmdline_args(cls, parser, partial_opt) and returns: parser