Example #1
0
 def test_name_type(self):
     # naive
     ca = Argument("key1", int)
     ca.check({"key1": 10})
     # accept multiple types
     ca = Argument("key1", [int, list, str])
     ca.check({"key1": 10})
     ca.check({"key1": [10, 20]})
     ca.check({"key1": "hello"})
     # possible error
     with self.assertRaises(ArgumentKeyError):
         ca.check({"key2": 1})
     with self.assertRaises(ArgumentKeyError):
         ca.check({"key1": 1, "key2": 1}, strict=True)
     with self.assertRaises(ArgumentTypeError):
         ca.check({"key1": 1.0})
     # special handle of None
     ca = Argument("key1", [int, None])
     ca.check({"key1": None})
     # optional case
     ca = Argument("key1", int, optional=True)
     ca.check({})
     # extra checker
     ca = Argument("key1", int, extra_check=lambda v: v > 0)
     ca.check({"key1": 1})
     with self.assertRaises(ArgumentValueError):
         ca.check({"key1": 0})
     # check any keywords
     ca = Argument("kwargs", dict)
     anydict = {"this": 1, "that": 2, "any": 3}
     ca.check({"kwargs": anydict}, strict=True)
     ca.check_value(anydict)
Example #2
0
def check(data):
    ma = model_args()
    lra = learning_rate_args()
    la = loss_args()
    ta = training_args()

    base = Argument("base", dict, [ma, lra, la, ta])
    base.check_value(data)
Example #3
0
 def test_sub_fields(self):
     ca = Argument("base", dict, [
         Argument("sub1", int),
         Argument("sub2", [str, dict], [
             Argument("subsub1", int),
             Argument("subsub2", dict, [Argument("subsubsub1", int)])
         ])
     ])
     # short one
     test_dict1 = {"base": {"sub1": 1, "sub2": "hello"}}
     self.assertSetEqual(set(ca.flatten_sub(test_dict1["base"]).keys()),
                         set(test_dict1["base"].keys()))
     ca.check(test_dict1)
     ca.check_value(test_dict1["base"])
     # long one
     test_dict2 = {
         "base": {
             "sub1": 1,
             "sub2": {
                 "subsub1": 11,
                 "subsub2": {
                     "subsubsub1": 111
                 }
             }
         }
     }
     ca.check(test_dict2)
     ca.check_value(test_dict2["base"])
     # expect error
     err_dict1 = {
         "base": {
             "sub1": 1,
             "sub2": {
                 "subsub1": 11,
                 "subsub2": {
                     "subsubsub2": 111
                 }
             }
         }
     }  # different name here
     with self.assertRaises(ArgumentKeyError):
         ca.check(err_dict1)
     err_dict1["base"]["sub2"]["subsub2"]["subsubsub1"] = 111
     ca.check(err_dict1)  # now should pass
     with self.assertRaises(ArgumentKeyError):
         ca.check(err_dict1, strict=True)  # but should fail when strict
     err_dict1["base"]["sub2"] = None
     with self.assertRaises(ArgumentTypeError):
         ca.check(err_dict1)
     # make sure no dup keys is allowed
     with self.assertRaises(ValueError):
         Argument("base", dict,
                  [Argument("sub1", int),
                   Argument("sub1", int)])
Example #4
0
def normalize(data):
    ma = model_args()
    lra = learning_rate_args()
    la = loss_args()
    ta = training_args()

    base = Argument("base", dict, [ma, lra, la, ta])
    data = base.normalize_value(data, trim_pattern="_*")
    base.check_value(data)

    return data
Example #5
0
 def test_sub_repeat(self):
     ca = Argument("base",
                   dict, [Argument("sub1", int),
                          Argument("sub2", str)],
                   repeat=True)
     test_dict1 = {
         "base": [{
             "sub1": 10,
             "sub2": "hello"
         }, {
             "sub1": 11,
             "sub2": "world"
         }]
     }
     ca.check(test_dict1)
     ca.check_value(test_dict1["base"])
     err_dict1 = {
         "base": [{
             "sub1": 10,
             "sub2": "hello"
         }, {
             "sub1": 11,
             "sub3": "world"
         }]
     }
     with self.assertRaises(ArgumentKeyError):
         ca.check(err_dict1)
     err_dict1["base"][1]["sub2"] = "world too"
     ca.check(err_dict1)  # now should pass
     with self.assertRaises(ArgumentKeyError):
         ca.check(err_dict1, strict=True)  # but should fail when strict
     err_dict2 = {
         "base": [{
             "sub1": 10,
             "sub2": "hello"
         }, {
             "sub1": 11,
             "sub2": None
         }]
     }
     with self.assertRaises(ArgumentTypeError):
         ca.check(err_dict2)