Example #1
0
        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);
        }
Example #2
0
        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
                       ));
        }
Example #3
0
        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);
        }
Example #4
0
 public static dynamic CallFunction(PyFunction pythonFunction, params object[] arguments)
 {
     return(CallFunction(pythonFunction, arguments.ToList()));
 }
Example #5
0
        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();
                }
            }
        }