def test_sub_parser(self):
        parser = PAIArgumentParser()
        sub_parser = parser.add_subparsers(dest="sub", required=True)

        sub_parser1: PAIArgumentParser = sub_parser.add_parser("sub1")
        sub_parser1.add_root_argument("root", Sub1)
        sub_parser2: PAIArgumentParser = sub_parser.add_parser("sub2")
        sub_parser2.add_root_argument("root", Sub2)

        root = parser.parse_args(args=["sub2"]).root

        self.assertIsInstance(root, Sub2)
        self.assertEqual(root.q, 5)
    def test_sub_parser_flat(self):
        parser = PAIArgumentParser()
        sub_parser = parser.add_subparsers(dest="sub", required=True)

        sub_parser1: PAIArgumentParser = sub_parser.add_parser("sub1")
        sub_parser1.add_root_argument("root", Parent)
        sub_parser2: PAIArgumentParser = sub_parser.add_parser("sub2")
        sub_parser2.add_root_argument("root", Parent)

        root = parser.parse_args(args=[
            "sub2",
            "--root.c1.p",
            "10",
        ]).root

        self.assertIsInstance(root.c1, Sub1)
        self.assertIsInstance(root.c2, Sub2)
        self.assertEqual(root.c1.p, 10)