private static void GetArgs(PyClass cls) { for (int i = 0; i < cls.Args.Length; i++) { if (cls.Args[i].Trim() == "self" || cls.Args[i].Trim() == "prefix" || cls.Args[i].Trim() == "params") { continue; } PyFuncArg parameter = new PyFuncArg() { Name = cls.Args[i] }; if (cls.Defaults != null) { if (cls.Defaults.Length > i) { parameter.HaveDefault = true; parameter.DefaultValue = cls.Defaults[i].Trim().Replace("'", ""); parameter.DefaultValue = parameter.DefaultValue.ToString() == "None" ? "null" : parameter.DefaultValue; } } cls.Parameters.Add(parameter); } ProcessComments(cls); }
private static void GetArgs(PyFunction func) { for (int j = func.Args.Length - 1; j >= 0; j--) { if (func.Args[j] == "self" || func.Args[j] == "prefix" || func.Args[j] == "params") { continue; } PyFuncArg parameter = new PyFuncArg() { Name = func.Args[j] }; if (func.Defaults != null) { if (func.Defaults.Length > j) { parameter.HaveDefault = true; parameter.DefaultValue = func.Defaults[j].Trim().Replace("'", ""); parameter.DefaultValue = parameter.DefaultValue.ToString() == "None" ? "null" : parameter.DefaultValue; } } func.Parameters.Add(parameter); } ProcessComments(func); }
private static void ProcessDefaults(PyFuncArg parameter, string defaultVal) { defaultVal = defaultVal.Replace("'", "").Replace("`", "").Trim(); if (defaultVal == "") { return; } if (defaultVal == "_Null") { defaultVal = "None"; } if (parameter.DataType == "float") { if (defaultVal == "None") { parameter.DataType = "float?"; parameter.DefaultValue = "null"; } else { parameter.DefaultValue = Convert.ToSingle(defaultVal); } } else if (parameter.DataType == "double") { if (defaultVal == "None") { parameter.DataType = "double?"; parameter.DefaultValue = "null"; } else { parameter.DefaultValue = Convert.ToDouble(defaultVal); } } else if (parameter.DataType == "int") { if (defaultVal == "None") { parameter.DataType = "int?"; parameter.DefaultValue = "null"; } else { parameter.DefaultValue = Convert.ToInt32(defaultVal); } } else if (parameter.DataType == "uint") { if (defaultVal == "None") { parameter.DataType = "uint?"; parameter.DefaultValue = "null"; } else { parameter.DefaultValue = Convert.ToUInt32(defaultVal); } } else if (parameter.DataType == "long") { if (defaultVal == "None") { parameter.DataType = "long?"; parameter.DefaultValue = "null"; } else { parameter.DefaultValue = Convert.ToInt64(defaultVal); } } else if (parameter.DataType == "ulong") { if (defaultVal == "None") { parameter.DataType = "ulong?"; parameter.DefaultValue = "null"; } else { parameter.DefaultValue = Convert.ToUInt64(defaultVal); } } else if (parameter.DataType == "bool") { if (defaultVal == "None") { parameter.DataType = "bool?"; parameter.DefaultValue = "null"; } else { parameter.DefaultValue = defaultVal == "True" ? true : false; } } else if (parameter.DataType == "string") { parameter.DefaultValue = defaultVal == "" ? "\"\"" : "\"" + defaultVal + "\""; } else if (parameter.DataType == "Dictionary<string, object>") { parameter.DefaultValue = "null"; } else if (parameter.DataType == "DType") { parameter.DefaultValue = "null"; } else if (parameter.DataType == "Initializer") { parameter.DefaultValue = "null"; } else if (parameter.DataType == "StringOrInitializer") { parameter.DefaultValue = "null"; } else if (parameter.DataType == "NDArray") { parameter.DefaultValue = "null"; } else if (parameter.DataType == "Symbol") { parameter.DefaultValue = "null"; } else if (parameter.DataType == "Context") { parameter.DefaultValue = "null"; } else if (parameter.DataType == "bool?") { if (defaultVal != "None") { parameter.DefaultValue = (defaultVal == "True" ? true : false); } } else if (parameter.DataType == "int?") { if (defaultVal != "None") { parameter.DefaultValue = defaultVal != "" ? Convert.ToInt32(defaultVal) : 0; } } else if (parameter.DataType == "int[]") { parameter.DefaultValue = "null"; if (defaultVal != "None") { parameter.DefaultValue = defaultVal.Split("~").Select(x => (Convert.ToInt32(x))).ToArray(); } } else if (parameter.DataType == "float[]") { parameter.DefaultValue = "null"; if (defaultVal != "None") { parameter.DefaultValue = defaultVal.Split("~").Select(x => (Convert.ToSingle(x))).ToArray(); } } else if (parameter.DataType == "float?") { if (defaultVal != "None") { parameter.DefaultValue = Convert.ToSingle(defaultVal); } } else if (parameter.DataType == "double?") { if (!defaultVal.Contains("None")) { parameter.DefaultValue = Convert.ToDouble(defaultVal); } } else if (parameter.DataType == "Shape") { parameter.DefaultValue = "null"; } else if (parameter.DataType.StartsWith("enum$")) { parameter.DefaultValue = defaultVal; } else { throw new Exception("Not implemented"); } }
private static List <PyFuncArg> ProcessArgs(string objname, string comment) { List <PyFuncArg> result = new List <PyFuncArg>(); if (comment.Contains("Inputs:")) { comment = comment.Split("Inputs:")[0]; } string argSeperator = " : "; if (objname.Contains("AvgPool") || objname.Contains("MaxPool") || objname.Contains("ReflectionPad") || objname == "cond" || objname == "foreach" || objname == "isfinite" || objname == "isinf" || objname == "isnan" || objname == "rand_zipfian") { argSeperator = ": "; } string[] argsComments = comment.Split(new string[] { "\n", " " }, StringSplitOptions.RemoveEmptyEntries); int counter = -1; PyFuncArg parameter = null; foreach (var item in argsComments) { if (item.Contains(argSeperator)) { counter++; parameter = new PyFuncArg(); string name = item.Split(argSeperator)[0].Trim(); parameter.Name = name; if (parameter.Name == "self" || parameter.Name == "prefix" || parameter.Name == "params") { continue; } string argTypeInfo = item.Split(argSeperator)[1]; if (name == "out" || name == "name") { continue; } if (argTypeInfo.Contains("{")) { parameter.DataType = ("enum$" + objname + name).Replace("_", ""); parameter.Enums = argTypeInfo.Replace("{", "").Split("}")[0].Split(",").Select(x => (x.Replace("'", "").Trim())).ToArray(); } else { string[] argInfo = argTypeInfo.Split(argSeperator)[0].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); switch (argInfo[0].Trim().Replace("`", "")) { case "bool": parameter.DataType = "bool"; break; case "boolean": parameter.DataType = "bool"; break; case "boolean or None": parameter.DataType = "bool?"; break; case "float": parameter.DataType = "float"; break; case "int": parameter.DataType = "int"; break; case "int or None": parameter.DataType = "int?"; parameter.HaveDefault = true; break; case "int (non-negative)": parameter.DataType = "uint"; break; case "int or tuple of int": parameter.DataType = "int[]"; break; case "tuple of int": parameter.DataType = "int[]"; break; case "int or tuple/list of 1 int": case "int or list/tuple of 1 ints": case "int or a tuple/list of 1 int": parameter.DataType = "int[]"; break; case "int or tuple/list of 2 int": case "int or list/tuple of 2 ints": case "int or a tuple/list of 2 int": parameter.DataType = "int[]"; break; case "int or tuple/list of 3 int": case "int or list/tuple of 3 ints": case "int or a tuple/list of 3 int": parameter.DataType = "int[]"; break; case "long": parameter.DataType = "long"; break; case "long (non-negative)": parameter.DataType = "ulong"; break; case "double": parameter.DataType = "double"; break; case "double or None": parameter.DataType = "double?"; parameter.HaveDefault = true; break; case "float or None": parameter.DataType = "float?"; parameter.HaveDefault = true; break; case "tuple of floats": parameter.DataType = "float[]"; break; case "NDArray": case "a MXNet NDArray representing a scalar.": case "an NDArray or a list of NDArrays.": case "an NDArray or nested lists of NDArrays.": parameter.DataType = "NDArray"; break; case "NDArray[]": parameter.DataType = "NDArray[]"; break; case "Symbol": case "Symbol or list of Symbol": parameter.DataType = "Symbol"; break; case "Shape(tuple)": parameter.DataType = "Shape"; break; case "Shape or None": parameter.DataType = "Shape"; parameter.HaveDefault = true; parameter.DefaultValue = "null"; break; case "string": parameter.DataType = "string"; break; case "str": parameter.DataType = "string"; break; case "str or None": parameter.DataType = "string"; parameter.HaveDefault = true; parameter.DefaultValue = ""; break; case "ParameterDict": parameter.DataType = "Dictionary<string, object>"; break; case "ParameterDict or None": parameter.DataType = "Dictionary<string, object>"; parameter.HaveDefault = true; parameter.DefaultValue = "null"; break; case "required": parameter.DataType = "float"; break; case "numpy.dtype or str": parameter.DataType = "DType"; break; case "str or np.dtype": parameter.DataType = "DType"; parameter.HaveDefault = true; parameter.DefaultValue = "null"; break; case "Initializer": parameter.DataType = "Initializer"; parameter.HaveDefault = true; parameter.DefaultValue = "null"; break; case "callable": case "a Python function.": parameter.DataType = "object"; parameter.HaveDefault = true; parameter.DefaultValue = "null"; break; case "str or Initializer": parameter.DataType = "StringOrInitializer"; parameter.HaveDefault = true; parameter.DefaultValue = "null"; break; case "np.ndarray or None": parameter.DataType = "Numpy.NDarray"; parameter.HaveDefault = true; parameter.DefaultValue = "null"; break; case "str or function": parameter.DataType = "object"; break; case "Context": parameter.DataType = "Context"; break; case "np": parameter.DataType = "Context"; break; case "optional": if (parameter.Name == "variances") { parameter.DataType = "float[]"; } else if (parameter.Name == "sizes" || parameter.Name == "steps" || parameter.Name == "offsets") { parameter.DataType = "int"; } else if (parameter.Name == "ratios" || parameter.Name == "scales" || parameter.Name == "low" || parameter.Name == "high") { parameter.DataType = "float"; } else { throw new Exception("Not implemented: " + argInfo[0].Trim()); } break; default: throw new Exception("Not implemented: " + argInfo[0].Trim()); } } result.Add(parameter); } else { parameter.ArgComment += "\n" + item.Trim(); } } return(result); }