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); }
public static dynamic CallFunction(PyFunction pythonFunction, IEnumerable <object> arguments = null, EscapeFlags flags = EscapeFlags.Quotes) { List <string> textArguments = null; if (arguments != null) { textArguments = EscapeArguments(arguments, flags); } return(CallFunction( pythonFunction.ToString(), textArguments )); }
private string BuildFunction(PyFunction func) { if (func.Name.StartsWith("_")) { return(""); } string result = templateMethod; func.Parameters.Reverse(); result = result.Replace("[METHODNAME]", func.Name); StringBuilder args = new StringBuilder(); StringBuilder parameters = new StringBuilder(); foreach (var item in func.Parameters) { string type = item.DataType != null ? item.DataType : "object"; string defaulValue = item.HaveDefault ? " = " + item.DefaultValue : ""; args.AppendFormat("{0} {1}{2},", type, item.Name, defaulValue); parameters.AppendLine(string.Format("parameters[\"{0}\"] = {0};", item.Name)); } if (args.ToString().LastIndexOf(',') > 0) { result = result.Replace("[ARGS]", args.ToString().Remove(args.ToString().LastIndexOf(','))); } else { result = result.Replace("[ARGS]", ""); } result = result.Replace("[PARAMETERS]", parameters.ToString()); result = result.Replace("[COMMENTS]", func.DocStr); return(result); }
public static dynamic CallFunction(PyFunction pythonFunction, params object[] arguments) { return(CallFunction(pythonFunction, arguments.ToList())); }
private static void ProcessComments(PyFunction func) { if (func.Name.StartsWith("_")) { return; } if (func.DocStr == null) { return; } func.Parameters.Clear(); if (func.Name == "foreach") { string str = ""; } Regex regex = new Regex(@"(\(.*?,.*?\))"); if (func.Defaults != null && func.Defaults.Length == 1) { string defaultRaw = func.Defaults[0].Remove(func.Defaults[0].LastIndexOf(')')).Remove(0, 1); var matches = regex.Matches(defaultRaw); foreach (Match item in matches) { defaultRaw = defaultRaw.Replace(item.Value, item.Value.Replace("(", "").Replace(")", "").Replace(", ", "~")); } func.Defaults = defaultRaw.Split(","); func.Defaults.Reverse(); } if (func.DocStr.Contains("deprecated")) { func.Deprecated = true; return; } string argSeperator = " : "; if (func.Name.Contains("AvgPool") || func.Name.Contains("MaxPool") || func.Name.Contains("ReflectionPad") || func.Name == "cond" || func.Name == "foreach" || func.Name == "isfinite" || func.Name == "isinf" || func.Name == "isnan" || func.Name == "rand_zipfian") { argSeperator = ": "; } string docString = func.DocStr.Replace("References\n----------", ""); string[] splitStr = docString.Split(new string[] { "----------", "-------", "Inputs:" }, StringSplitOptions.RemoveEmptyEntries); func.DocStr = splitStr.Length > 0 ? splitStr[0].Replace("\n", "").Replace("Parameters", "") : ""; if (splitStr.Length == 1) { return; } if (docString.Contains("Parameters\n----------")) { func.Parameters = ProcessArgs(func.Name, splitStr[1]); } else { func.Parameters = new List <PyFuncArg>(); } for (int i = 0; i < func.Parameters.Count; i++) { if (func.Defaults == null) { continue; } if (func.Defaults.Length == 0) { continue; } int index = func.Defaults.Length - i; string defaultVal = func.Defaults.Length > i ? func.Defaults[index] : ""; ProcessDefaults(func.Parameters[i], defaultVal); } if (splitStr.Length > 2) { string ret_name = splitStr[2].Split(argSeperator)[0]; string[] retTypeInfo = splitStr[2].Split(argSeperator)[1].Split("\n"); switch (retTypeInfo[0].Trim()) { case "boolean": func.ReturnType = "bool"; break; case "float": func.ReturnType = "float"; break; case "double": func.ReturnType = "double"; break; case "int": func.ReturnType = "int"; break; case "Context": func.ReturnType = "Context"; break; case "NDArray": case "NDArray or list of NDArrays": case "an NDArray or nested lists of NDArrays, representing the result of computation.": case "an NDArray or nested lists of NDArrays.": func.ReturnType = "NDArray"; break; default: throw new Exception("Not implemented"); //func.ReturnType = retTypeInfo[0].Trim(); //break; } if (retTypeInfo.Length > 1) { func.ReturnArg = retTypeInfo[1].Trim(); } } }