Exemple #1
0
        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);
        }
Exemple #2
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);
        }
Exemple #3
0
        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");
            }
        }
Exemple #4
0
        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);
        }