Ejemplo n.º 1
0
 private static void DefaultNotSupportedException(CSCodeFormatter c)
 {
     c.Writeln("default:");
     c.IncIndent();
     c.Writeln("throw new NotSupportedException();");
     c.DecIndent();
 }
Ejemplo n.º 2
0
        private void Add_Map(string tIn, string tOut)
        {
            var oType = $"NdArray{_dimension}D{tOut.FirstUpper()}";
            var cf    = new CSCodeFormatter();

            cf.Writeln("var q = InternalData.PyMap(map);");
            cf.Writeln("return new " + oType + "(q, ShapeInfo);");
            var m = _class
                    .AddMethod("Map", oType)
                    .WithBody(cf);

            m.AddParam("map", $"Func<{tIn}, {tOut}>");
        }
Ejemplo n.º 3
0
        private void Add_Map()
        {
            /*public NdArray2D<TOut> Map<TOut>(Func<T, TOut> map)
             * {
             * var q = InternalData.PyMap(map);
             * return new NdArray2D<TOut>
             * {
             *  InternalData = q
             * };
             * }*/
            var oType = $"NdArray{_dimension}D<TOut>";
            var cf    = new CSCodeFormatter();

            cf.Writeln("var q = InternalData.PyMap(map);");
            cf.Writeln("return new " + oType + "(q, ShapeInfo);");
            var m = _class
                    .AddMethod("Map<TOut>", oType)
                    .WithBody(cf);

            m.AddParam("map", "Func<T, TOut>");
        }
Ejemplo n.º 4
0
 private static void TwoArgs(CsClass cl, string dotnetName, string pyName, string firstVar,
                             string secondVar,
                             Action <CSCodeFormatter, string, string> code)
 {
     if (pyName == null)
     {
         pyName = dotnetName.ToLower();
     }
     foreach (var typeX in GetListTypes(cl))
     {
         foreach (var typeY in GetListTypes(cl))
         {
             var cf = new CSCodeFormatter();
             code(cf, typeY, typeX);
             var m = cl.AddMethod(dotnetName, "PyList<double>")
                     .WithBody(cf)
                     .WithStatic()
                     .WithBodyComment($"Generated by {nameof(NumpyGenerator)}.{nameof(TwoArgs)}")
                     .WithDirectCall(pyName);
             m.AddParam(firstVar, typeY);
             m.AddParam(secondVar, typeX);
         }
     }
 }
Ejemplo n.º 5
0
        private void GenerateValueHelper()
        {
            var file   = CreateFile();
            var subDir = "Helpers";
            var cl     = file.GetOrCreateClass(Namespace + "." + subDir, "ValueHelper");

            cl.IsStatic = true;

            List <string> GetTypes(bool withString)
            {
                var types = "int,long,short,sbyte,uint,ulong,ushort,byte,double,float,decimal".Split(',').ToList();

                if (withString)
                {
                    types.Add("string");
                }
                return(types);
            }

            void MakeBinaryOperator(string name, string op)
            {
                var types = GetTypes(op == "+");

                var c = new CSCodeFormatter();

                c.Open("switch (left)");
                {
                    foreach (var left in types)
                    {
                        var ln = "left" + FirstUpper(left);
                        c.Writeln($"case {left} {ln}:");
                        c.IncIndent();
                        {
                            c.Open("switch (right)");
                            {
                                foreach (var right in types)
                                {
                                    if (!IsAllowedPair(left, right))
                                    {
                                        continue;
                                    }
                                    var rn = "right" + FirstUpper(right);
                                    c.Writeln($"case {right} {rn}: return {ln} {op} {rn};");
                                }

                                DefaultNotSupportedException(c);
                            }
                            c.Close();
                        }
                        c.DecIndent();
                    }

                    DefaultNotSupportedException(c);
                }
                c.Close();

                var m = cl.AddMethod(name, "object")
                        .WithBody(c)
                        .WithStatic();

                m.AddParam("left", "object");
                m.AddParam("right", "object");
            }

            void MakeIsNumericZero(string name, Func <string, string, string> f)
            {
                var types = GetTypes(false);
                var c     = new CSCodeFormatter();

                c.Open("switch (value)");
                {
                    foreach (var type in types)
                    {
                        var ln     = "value" + FirstUpper(type);
                        var result = f(type, ln);
                        c.Writeln($"case {type} {ln}: return {result};");
                    }
                }
                c.Close();
                c.Writeln("return null;");

                var m = cl.AddMethod(name, "bool?")
                        .WithBody(c)
                        .WithStatic();

                m.AddParam("value", "object");
            }

            void MakeIsNumericMinus()
            {
                var types = GetTypes(false);
                var c     = new CSCodeFormatter();

                c.Open("switch (value)");
                {
                    foreach (var type in types)
                    {
                        var ln     = "value" + FirstUpper(type);
                        var result = IsUnsigned(type) ? "null" : $"-{ln}";
                        c.Writeln($"case {type} {ln}: return {result};");
                    }
                }
                c.Close();
                c.Writeln("return null;");

                var m = cl.AddMethod("Minus", "object")
                        .WithBody(c)
                        .WithStatic();

                m.AddParam("value", "object");
            }

            MakeBinaryOperator("Add", "+");
            MakeBinaryOperator("Sub", "-");
            MakeBinaryOperator("Mul", "*");
            MakeBinaryOperator("Div", "/");
            MakeIsNumericMinus();
            MakeIsNumericZero("EqualsNumericZero", (type, ln) => $"{ln}.Equals({Zero(type)})");
            MakeIsNumericZero("EqualsNumericOne", (type, ln) => $"{ln}.Equals({Number(type, "1")})");
            MakeIsNumericZero("EqualsNumericMinusOne", (type, ln) =>
            {
                if (IsUnsigned(type))
                {
                    return("false");
                }
                return($"{ln}.Equals({Number(type, "-1")})");
            });

            MakeIsNumericZero("IsLowerThanZero", (type, ln) =>
            {
                if (IsUnsigned(type))
                {
                    return("false");
                }
                return($"{ln} < {Zero(type)}");
            });
            MakeIsNumericZero("IsLowerThanZeroOrEqual", (type, ln) => $"{ln} <={Zero(type)}");
            MakeIsNumericZero("IsGreaterThanZero", (type, ln) => $"{ln} >{Zero(type)}");
            MakeIsNumericZero("IsGreaterThanZeroOrEqual", (type, ln) =>
            {
                if (IsUnsigned(type))
                {
                    return("true");
                }
                return($"{ln} >= {Zero(type)}");
            });
            // is Zero

            Save(file, cl, "Cs2Py", "Features", subDir);
        }