Ejemplo n.º 1
0
        public static QuaternionFilter2D Reference(QuaternionMap2D x, QuaternionMap2D gy, int kwidth, int kheight, int stride)
        {
            int inchannels = x.Channels, outchannels = gy.Channels, batch = x.Batch;
            int inw = x.Width, inh = x.Height, outw = gy.Width, outh = gy.Height;

            if (outw != (inw - kwidth) / stride + 1 || outh != (inh - kheight) / stride + 1)
            {
                throw new ArgumentException("mismatch shape");
            }

            QuaternionFilter2D w = new QuaternionFilter2D(inchannels, outchannels, kwidth, kheight);

            for (int kx, ky = 0; ky < kheight; ky++)
            {
                for (kx = 0; kx < kwidth; kx++)
                {
                    for (int th = 0; th < batch; th++)
                    {
                        for (int inch, outch = 0; outch < outchannels; outch++)
                        {
                            for (inch = 0; inch < inchannels; inch++)
                            {
                                Quaternion sum = 0;

                                for (int ix, iy = ky, ox, oy = 0; oy < outh; iy += stride, oy++)
                                {
                                    for (ix = kx, ox = 0; ox < outw; ix += stride, ox++)
                                    {
                                        sum += Quaternion.MulGrad(gy[outch, ox, oy, th], x[inch, ix, iy, th]);
                                    }
                                }

                                w[inch, outch, kx, ky] += sum;
                            }
                        }
                    }
                }
            }

            return(w);
        }
        public static QuaternionMap2D Reference(QuaternionMap2D x, QuaternionFilter2D w, int kwidth, int kheight, int stride)
        {
            int inchannels = x.Channels, outchannels = w.OutChannels, batch = x.Batch;
            int inw = x.Width, inh = x.Height, outw = (inw - kwidth) / stride + 1, outh = (inh - kheight) / stride + 1;

            QuaternionMap2D y = new QuaternionMap2D(outchannels, outw, outh, batch);

            for (int kx, ky = 0; ky < kheight; ky++)
            {
                for (kx = 0; kx < kwidth; kx++)
                {
                    for (int th = 0; th < batch; th++)
                    {
                        for (int ox, oy = 0; oy < outh; oy++)
                        {
                            for (ox = 0; ox < outw; ox++)
                            {
                                for (int outch = 0; outch < outchannels; outch++)
                                {
                                    Quaternion sum = y[outch, ox, oy, th];

                                    for (int inch = 0; inch < inchannels; inch++)
                                    {
                                        sum += x[inch, kx + ox * stride, ky + oy * stride, th] * w[inch, outch, kx, ky];
                                    }

                                    y[outch, ox, oy, th] = sum;
                                }
                            }
                        }
                    }
                }
            }

            return(y);
        }
Ejemplo n.º 3
0
        public void ReferenceTest()
        {
            int inchannels = 8, outchannels = 12, kwidth = 3, kheight = 5, stride = 2, inwidth = 13, inheight = 17;
            int outwidth = (inwidth - kwidth) / stride + 1, outheight = (inheight - kheight) / stride + 1, batch = 1;

            float[] xval = (new float[inwidth * inheight * inchannels * batch]).Select((_, idx) => idx * 1e-3f).ToArray();
            float[] yval = (new float[outwidth * outheight * outchannels * batch]).Select((_, idx) => idx * 1e-3f).Reverse().ToArray();

            Quaternion[] xcval = (new Quaternion[xval.Length / 4])
                                 .Select((_, idx) => new Quaternion(xval[idx * 4], xval[idx * 4 + 1], xval[idx * 4 + 2], xval[idx * 4 + 3])).ToArray();

            Quaternion[] ycval = (new Quaternion[yval.Length / 4])
                                 .Select((_, idx) => new Quaternion(yval[idx * 4], yval[idx * 4 + 1], yval[idx * 4 + 2], yval[idx * 4 + 3])).ToArray();

            QuaternionMap2D x = new QuaternionMap2D(inchannels / 4, inwidth, inheight, batch, xcval);
            QuaternionMap2D y = new QuaternionMap2D(outchannels / 4, outwidth, outheight, batch, ycval);

            QuaternionFilter2D gw = Reference(x, y, kwidth, kheight, stride);

            float[] gw_expect =
            {
                1.840776000e+01f,  -0.000000000e+00f, -1.547280000e-01f, -7.736400000e-02f,  1.857945600e+01f,  2.664535259e-15f,
                -1.554000000e-01f, -7.770000000e-02f,  1.796054400e+01f, -0.000000000e+00f, -1.540560000e-01f, -7.702800000e-02f,
                1.812955200e+01f,  -1.776356839e-15f, -1.547280000e-01f, -7.736400000e-02f,  1.751332800e+01f,  8.881784197e-16f,
                -1.533840000e-01f, -7.669200000e-02f,  1.767964800e+01f, -0.000000000e+00f, -1.540560000e-01f, -7.702800000e-02f,
                1.875115200e+01f,   4.440892099e-15f, -1.560720000e-01f, -7.803600000e-02f,  1.892284800e+01f, -1.776356839e-15f,
                -1.567440000e-01f, -7.837200000e-02f,  1.829856000e+01f,  8.881784197e-16f, -1.554000000e-01f, -7.770000000e-02f,
                1.846756800e+01f,   8.881784197e-16f, -1.560720000e-01f, -7.803600000e-02f,  1.784596800e+01f, -8.881784197e-16f,
                -1.547280000e-01f, -7.736400000e-02f,  1.801228800e+01f, -0.000000000e+00f, -1.554000000e-01f, -7.770000000e-02f,
                1.909454400e+01f,  -8.881784197e-16f, -1.574160000e-01f, -7.870800000e-02f,  1.926624000e+01f, -0.000000000e+00f,
                -1.580880000e-01f, -7.904400000e-02f,  1.863657600e+01f, -8.881784197e-16f, -1.567440000e-01f, -7.837200000e-02f,
                1.880558400e+01f,   8.881784197e-16f, -1.574160000e-01f, -7.870800000e-02f,  1.817860800e+01f, -8.881784197e-16f,
                -1.560720000e-01f, -7.803600000e-02f,  1.834492800e+01f, -0.000000000e+00f, -1.567440000e-01f, -7.837200000e-02f,
                2.287185600e+01f,  -5.329070518e-15f, -1.722000000e-01f, -8.610000000e-02f,  2.304355200e+01f,  8.881784197e-16f,
                -1.728720000e-01f, -8.643600000e-02f,  2.235475200e+01f,  7.105427358e-15f, -1.715280000e-01f, -8.576400000e-02f,
                2.252376000e+01f,   1.776356839e-15f, -1.722000000e-01f, -8.610000000e-02f,  2.183764800e+01f, -0.000000000e+00f,
                -1.708560000e-01f, -8.542800000e-02f,  2.200396800e+01f, -0.000000000e+00f, -1.715280000e-01f, -8.576400000e-02f,
                2.321524800e+01f,   2.664535259e-15f, -1.735440000e-01f, -8.677200000e-02f,  2.338694400e+01f, -0.000000000e+00f,
                -1.742160000e-01f, -8.710800000e-02f,  2.269276800e+01f, -1.776356839e-15f, -1.728720000e-01f, -8.643600000e-02f,
                2.286177600e+01f,  -1.776356839e-15f, -1.735440000e-01f, -8.677200000e-02f,  2.217028800e+01f, -0.000000000e+00f,
                -1.722000000e-01f, -8.610000000e-02f,  2.233660800e+01f, -8.881784197e-16f, -1.728720000e-01f, -8.643600000e-02f,
                2.355864000e+01f,   2.664535259e-15f, -1.748880000e-01f, -8.744400000e-02f,  2.373033600e+01f, -2.664535259e-15f,
                -1.755600000e-01f, -8.778000000e-02f,  2.303078400e+01f, -3.552713679e-15f, -1.742160000e-01f, -8.710800000e-02f,
                2.319979200e+01f,   1.776356839e-15f, -1.748880000e-01f, -8.744400000e-02f,  2.250292800e+01f, -0.000000000e+00f,
                -1.735440000e-01f, -8.677200000e-02f,  2.266924800e+01f, -0.000000000e+00f, -1.742160000e-01f, -8.710800000e-02f,
                2.733595200e+01f,  -8.881784197e-16f, -1.896720000e-01f, -9.483600000e-02f,  2.750764800e+01f, -2.664535259e-15f,
                -1.903440000e-01f, -9.517200000e-02f,  2.674896000e+01f, -0.000000000e+00f, -1.890000000e-01f, -9.450000000e-02f,
                2.691796800e+01f,  -2.664535259e-15f, -1.896720000e-01f, -9.483600000e-02f,  2.616196800e+01f,  8.881784197e-16f,
                -1.883280000e-01f, -9.416400000e-02f,  2.632828800e+01f, -8.881784197e-16f, -1.890000000e-01f, -9.450000000e-02f,
                2.767934400e+01f,   3.552713679e-15f, -1.910160000e-01f, -9.550800000e-02f,  2.785104000e+01f, -1.776356839e-15f,
                -1.916880000e-01f, -9.584400000e-02f,  2.708697600e+01f, -8.881784197e-16f, -1.903440000e-01f, -9.517200000e-02f,
                2.725598400e+01f,   1.776356839e-15f, -1.910160000e-01f, -9.550800000e-02f,  2.649460800e+01f, -0.000000000e+00f,
                -1.896720000e-01f, -9.483600000e-02f,  2.666092800e+01f, -1.776356839e-15f, -1.903440000e-01f, -9.517200000e-02f,
                2.802273600e+01f,   8.881784197e-16f, -1.923600000e-01f, -9.618000000e-02f,  2.819443200e+01f,  2.664535259e-15f,
                -1.930320000e-01f, -9.651600000e-02f,  2.742499200e+01f, -0.000000000e+00f, -1.916880000e-01f, -9.584400000e-02f,
                2.759400000e+01f,   4.440892099e-15f, -1.923600000e-01f, -9.618000000e-02f,  2.682724800e+01f, -0.000000000e+00f,
                -1.910160000e-01f, -9.550800000e-02f,  2.699356800e+01f, -1.776356839e-15f, -1.916880000e-01f, -9.584400000e-02f,
                3.180004800e+01f,   3.552713679e-15f, -2.071440000e-01f, -1.035720000e-01f,  3.197174400e+01f, -4.440892099e-15f,
                -2.078160000e-01f, -1.039080000e-01f,  3.114316800e+01f, -0.000000000e+00f, -2.064720000e-01f, -1.032360000e-01f,
                3.131217600e+01f,  -3.552713679e-15f, -2.071440000e-01f, -1.035720000e-01f,  3.048628800e+01f, -8.881784197e-16f,
                -2.058000000e-01f, -1.029000000e-01f,  3.065260800e+01f, -0.000000000e+00f, -2.064720000e-01f, -1.032360000e-01f,
                3.214344000e+01f,  -1.776356839e-15f, -2.084880000e-01f, -1.042440000e-01f,  3.231513600e+01f, -7.105427358e-15f,
                -2.091600000e-01f, -1.045800000e-01f,  3.148118400e+01f,  2.664535259e-15f, -2.078160000e-01f, -1.039080000e-01f,
                3.165019200e+01f,  -8.881784197e-16f, -2.084880000e-01f, -1.042440000e-01f,  3.081892800e+01f, -0.000000000e+00f,
                -2.071440000e-01f, -1.035720000e-01f,  3.098524800e+01f, -0.000000000e+00f, -2.078160000e-01f, -1.039080000e-01f,
                3.248683200e+01f,   3.552713679e-15f, -2.098320000e-01f, -1.049160000e-01f,  3.265852800e+01f, -1.776356839e-15f,
                -2.105040000e-01f, -1.052520000e-01f,  3.181920000e+01f,  8.881784197e-16f, -2.091600000e-01f, -1.045800000e-01f,
                3.198820800e+01f,  -2.664535259e-15f, -2.098320000e-01f, -1.049160000e-01f,  3.115156800e+01f, -0.000000000e+00f,
                -2.084880000e-01f, -1.042440000e-01f,  3.131788800e+01f,  8.881784197e-16f, -2.091600000e-01f, -1.045800000e-01f,
                3.626414400e+01f,  -0.000000000e+00f, -2.246160000e-01f, -1.123080000e-01f,  3.643584000e+01f, -1.776356839e-15f,
                -2.252880000e-01f, -1.126440000e-01f,  3.553737600e+01f,  1.776356839e-15f, -2.239440000e-01f, -1.119720000e-01f,
                3.570638400e+01f,   7.105427358e-15f, -2.246160000e-01f, -1.123080000e-01f,  3.481060800e+01f,  3.552713679e-15f,
                -2.232720000e-01f, -1.116360000e-01f,  3.497692800e+01f,  1.776356839e-15f, -2.239440000e-01f, -1.119720000e-01f,
                3.660753600e+01f,  -7.105427358e-15f, -2.259600000e-01f, -1.129800000e-01f,  3.677923200e+01f, -3.552713679e-15f,
                -2.266320000e-01f, -1.133160000e-01f,  3.587539200e+01f, -1.776356839e-15f, -2.252880000e-01f, -1.126440000e-01f,
                3.604440000e+01f,  -8.881784197e-15f, -2.259600000e-01f, -1.129800000e-01f,  3.514324800e+01f, -0.000000000e+00f,
                -2.246160000e-01f, -1.123080000e-01f,  3.530956800e+01f, -8.881784197e-15f, -2.252880000e-01f, -1.126440000e-01f,
                3.695092800e+01f,  -3.552713679e-15f, -2.273040000e-01f, -1.136520000e-01f,  3.712262400e+01f,  1.776356839e-15f,
                -2.279760000e-01f, -1.139880000e-01f,  3.621340800e+01f, -3.552713679e-15f, -2.266320000e-01f, -1.133160000e-01f,
                3.638241600e+01f,  -5.329070518e-15f, -2.273040000e-01f, -1.136520000e-01f,  3.547588800e+01f, -0.000000000e+00f,
                -2.259600000e-01f, -1.129800000e-01f,  3.564220800e+01f, -3.552713679e-15f, -2.266320000e-01f, -1.133160000e-01f,
            };

            float[] gw_actual = gw.ToArray();

            AssertError.Tolerance(gw_expect, gw_actual, 1e-6f, 1e-4f, $"mismatch value {inchannels},{outchannels},{kwidth},{kheight},{stride},{inwidth},{inheight},{batch}"); /*many fma tolerance*/
        }
Ejemplo n.º 4
0
        public void ExecuteTest()
        {
            float max_err = 0;

            foreach (int batch in new int[] { 1, 2, 3 })
            {
                foreach (int inchannels in new int[] { 4, 8, 12 })
                {
                    foreach (int outchannels in new int[] { 4, 8, 12 })
                    {
                        foreach (int kheight in new int[] { 1, 3, 5 })
                        {
                            foreach (int kwidth in new int[] { 1, 3, 5 })
                            {
                                foreach (int stride in new int[] { 1, 2, 3 })
                                {
                                    foreach (int inwidth in new int[] { 8, 9, 13, 17 })
                                    {
                                        foreach (int inheight in new int[] { 8, 9, 19, 23 })
                                        {
                                            int outwidth = (inwidth - kwidth) / stride + 1, outheight = (inheight - kheight) / stride + 1;

                                            float[] xval = (new float[inwidth * inheight * inchannels * batch]).Select((_, idx) => idx * 1e-3f).ToArray();
                                            float[] yval = (new float[outwidth * outheight * outchannels * batch]).Select((_, idx) => idx * 1e-3f).Reverse().ToArray();

                                            Quaternion[] xcval = (new Quaternion[xval.Length / 4])
                                                                 .Select((_, idx) => new Quaternion(xval[idx * 4], xval[idx * 4 + 1], xval[idx * 4 + 2], xval[idx * 4 + 3])).ToArray();

                                            Quaternion[] ycval = (new Quaternion[yval.Length / 4])
                                                                 .Select((_, idx) => new Quaternion(yval[idx * 4], yval[idx * 4 + 1], yval[idx * 4 + 2], yval[idx * 4 + 3])).ToArray();

                                            QuaternionMap2D x = new QuaternionMap2D(inchannels / 4, inwidth, inheight, batch, xcval);
                                            QuaternionMap2D y = new QuaternionMap2D(outchannels / 4, outwidth, outheight, batch, ycval);

                                            QuaternionFilter2D gw = Reference(x, y, kwidth, kheight, stride);

                                            OverflowCheckedTensor x_tensor = new OverflowCheckedTensor(Shape.Map2D(inchannels, inwidth, inheight, batch), xval);
                                            OverflowCheckedTensor y_tensor = new OverflowCheckedTensor(Shape.Map2D(outchannels, outwidth, outheight, batch), yval);

                                            OverflowCheckedTensor gw_tensor = new OverflowCheckedTensor(Shape.Kernel2D(inchannels, outchannels / 4, kwidth, kheight));

                                            QuaternionKernelProduct2D ope = new QuaternionKernelProduct2D(inwidth, inheight, inchannels, outchannels, kwidth, kheight, stride, transpose: false, batch);

                                            ope.Execute(x_tensor, y_tensor, gw_tensor);

                                            float[] gw_expect = gw.ToArray();
                                            float[] gw_actual = gw_tensor.State;

                                            CollectionAssert.AreEqual(xval, x_tensor.State);
                                            CollectionAssert.AreEqual(yval, y_tensor.State);

                                            AssertError.Tolerance(gw_expect, gw_actual, 1e-7f, 1e-5f, ref max_err, $"mismatch value {inchannels},{outchannels},{kwidth},{kheight},{stride},{inwidth},{inheight},{batch}");

                                            Console.WriteLine($"pass: {inchannels},{outchannels},{kwidth},{kheight},{stride},{inwidth},{inheight},{batch}");
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            Console.WriteLine($"maxerr:{max_err}");
        }
        public void ReferenceTest()
        {
            int inchannels = 8, outchannels = 12, kwidth = 3, kheight = 5, stride = 2, inwidth = 13, inheight = 17, batch = 3;
            int outwidth = (inwidth - kwidth) / stride + 1, outheight = (inheight - kheight) / stride + 1;

            float[] xval = (new float[batch * inwidth * inheight * inchannels]).Select((_, idx) => idx * 1e-3f).ToArray();
            float[] wval = (new float[kwidth * kheight * outchannels * inchannels / 4]).Select((_, idx) => idx * 1e-3f).Reverse().ToArray();

            Quaternion[] xcval = (new Quaternion[xval.Length / 4])
                                 .Select((_, idx) => new Quaternion(xval[idx * 4], xval[idx * 4 + 1], xval[idx * 4 + 2], xval[idx * 4 + 3])).ToArray();

            Quaternion[] wcval = (new Quaternion[wval.Length / 4])
                                 .Select((_, idx) => new Quaternion(wval[idx * 4], wval[idx * 4 + 1], wval[idx * 4 + 2], wval[idx * 4 + 3])).ToArray();

            QuaternionMap2D    x = new QuaternionMap2D(inchannels / 4, inwidth, inheight, batch, xcval);
            QuaternionFilter2D w = new QuaternionFilter2D(inchannels / 4, outchannels / 4, kwidth, kheight, wcval);

            QuaternionMap2D y = Reference(x, w, kwidth, kheight, stride);

            float[] y_expect =
            {
                -1.560000000e+00f, 1.552560000e+00f,  1.588320000e+00f, 1.550820000e+00f, -1.453920000e+00f, 1.447920000e+00f,
                1.482720000e+00f,  1.445700000e+00f, -1.347840000e+00f, 1.343280000e+00f,  1.377120000e+00f, 1.340580000e+00f,
                -1.738560000e+00f, 1.733040000e+00f,  1.769760000e+00f, 1.730340000e+00f, -1.624800000e+00f, 1.620720000e+00f,
                1.656480000e+00f,  1.617540000e+00f, -1.511040000e+00f, 1.508400000e+00f,  1.543200000e+00f, 1.504740000e+00f,
                -1.917120000e+00f, 1.913520000e+00f,  1.951200000e+00f, 1.909860000e+00f, -1.795680000e+00f, 1.793520000e+00f,
                1.830240000e+00f,  1.789380000e+00f, -1.674240000e+00f, 1.673520000e+00f,  1.709280000e+00f, 1.668900000e+00f,
                -2.095680000e+00f, 2.094000000e+00f,  2.132640000e+00f, 2.089380000e+00f, -1.966560000e+00f, 1.966320000e+00f,
                2.004000000e+00f,  1.961220000e+00f, -1.837440000e+00f, 1.838640000e+00f,  1.875360000e+00f, 1.833060000e+00f,
                -2.274240000e+00f, 2.274480000e+00f,  2.314080000e+00f, 2.268900000e+00f, -2.137440000e+00f, 2.139120000e+00f,
                2.177760000e+00f,  2.133060000e+00f, -2.000640000e+00f, 2.003760000e+00f,  2.041440000e+00f, 1.997220000e+00f,
                -2.452800000e+00f, 2.454960000e+00f,  2.495520000e+00f, 2.448420000e+00f, -2.308320000e+00f, 2.311920000e+00f,
                2.351520000e+00f,  2.304900000e+00f, -2.163840000e+00f, 2.168880000e+00f,  2.207520000e+00f, 2.161380000e+00f,
                -3.881280000e+00f, 3.898800000e+00f,  3.947040000e+00f, 3.884580000e+00f, -3.675360000e+00f, 3.694320000e+00f,
                3.741600000e+00f,  3.679620000e+00f, -3.469440000e+00f, 3.489840000e+00f,  3.536160000e+00f, 3.474660000e+00f,
                -4.059840000e+00f, 4.079280000e+00f,  4.128480000e+00f, 4.064100000e+00f, -3.846240000e+00f, 3.867120000e+00f,
                3.915360000e+00f,  3.851460000e+00f, -3.632640000e+00f, 3.654960000e+00f,  3.702240000e+00f, 3.638820000e+00f,
                -4.238400000e+00f, 4.259760000e+00f,  4.309920000e+00f, 4.243620000e+00f, -4.017120000e+00f, 4.039920000e+00f,
                4.089120000e+00f,  4.023300000e+00f, -3.795840000e+00f, 3.820080000e+00f,  3.868320000e+00f, 3.802980000e+00f,
                -4.416960000e+00f, 4.440240000e+00f,  4.491360000e+00f, 4.423140000e+00f, -4.188000000e+00f, 4.212720000e+00f,
                4.262880000e+00f,  4.195140000e+00f, -3.959040000e+00f, 3.985200000e+00f,  4.034400000e+00f, 3.967140000e+00f,
                -4.595520000e+00f, 4.620720000e+00f,  4.672800000e+00f, 4.602660000e+00f, -4.358880000e+00f, 4.385520000e+00f,
                4.436640000e+00f,  4.366980000e+00f, -4.122240000e+00f, 4.150320000e+00f,  4.200480000e+00f, 4.131300000e+00f,
                -4.774080000e+00f, 4.801200000e+00f,  4.854240000e+00f, 4.782180000e+00f, -4.529760000e+00f, 4.558320000e+00f,
                4.610400000e+00f,  4.538820000e+00f, -4.285440000e+00f, 4.315440000e+00f,  4.366560000e+00f, 4.295460000e+00f,
                -6.202560000e+00f, 6.245040000e+00f,  6.305760000e+00f, 6.218340000e+00f, -5.896800000e+00f, 5.940720000e+00f,
                6.000480000e+00f,  5.913540000e+00f, -5.591040000e+00f, 5.636400000e+00f,  5.695200000e+00f, 5.608740000e+00f,
                -6.381120000e+00f, 6.425520000e+00f,  6.487200000e+00f, 6.397860000e+00f, -6.067680000e+00f, 6.113520000e+00f,
                6.174240000e+00f,  6.085380000e+00f, -5.754240000e+00f, 5.801520000e+00f,  5.861280000e+00f, 5.772900000e+00f,
                -6.559680000e+00f, 6.606000000e+00f,  6.668640000e+00f, 6.577380000e+00f, -6.238560000e+00f, 6.286320000e+00f,
                6.348000000e+00f,  6.257220000e+00f, -5.917440000e+00f, 5.966640000e+00f,  6.027360000e+00f, 5.937060000e+00f,
                -6.738240000e+00f, 6.786480000e+00f,  6.850080000e+00f, 6.756900000e+00f, -6.409440000e+00f, 6.459120000e+00f,
                6.521760000e+00f,  6.429060000e+00f, -6.080640000e+00f, 6.131760000e+00f,  6.193440000e+00f, 6.101220000e+00f,
                -6.916800000e+00f, 6.966960000e+00f,  7.031520000e+00f, 6.936420000e+00f, -6.580320000e+00f, 6.631920000e+00f,
                6.695520000e+00f,  6.600900000e+00f, -6.243840000e+00f, 6.296880000e+00f,  6.359520000e+00f, 6.265380000e+00f,
                -7.095360000e+00f, 7.147440000e+00f,  7.212960000e+00f, 7.115940000e+00f, -6.751200000e+00f, 6.804720000e+00f,
                6.869280000e+00f,  6.772740000e+00f, -6.407040000e+00f, 6.462000000e+00f,  6.525600000e+00f, 6.429540000e+00f,
                -8.523840000e+00f, 8.591280000e+00f,  8.664480000e+00f, 8.552100000e+00f, -8.118240000e+00f, 8.187120000e+00f,
                8.259360000e+00f,  8.147460000e+00f, -7.712640000e+00f, 7.782960000e+00f,  7.854240000e+00f, 7.742820000e+00f,
                -8.702400000e+00f, 8.771760000e+00f,  8.845920000e+00f, 8.731620000e+00f, -8.289120000e+00f, 8.359920000e+00f,
                8.433120000e+00f,  8.319300000e+00f, -7.875840000e+00f, 7.948080000e+00f,  8.020320000e+00f, 7.906980000e+00f,
                -8.880960000e+00f, 8.952240000e+00f,  9.027360000e+00f, 8.911140000e+00f, -8.460000000e+00f, 8.532720000e+00f,
                8.606880000e+00f,  8.491140000e+00f, -8.039040000e+00f, 8.113200000e+00f,  8.186400000e+00f, 8.071140000e+00f,
                -9.059520000e+00f, 9.132720000e+00f,  9.208800000e+00f, 9.090660000e+00f, -8.630880000e+00f, 8.705520000e+00f,
                8.780640000e+00f,  8.662980000e+00f, -8.202240000e+00f, 8.278320000e+00f,  8.352480000e+00f, 8.235300000e+00f,
                -9.238080000e+00f, 9.313200000e+00f,  9.390240000e+00f, 9.270180000e+00f, -8.801760000e+00f, 8.878320000e+00f,
                8.954400000e+00f,  8.834820000e+00f, -8.365440000e+00f, 8.443440000e+00f,  8.518560000e+00f, 8.399460000e+00f,
                -9.416640000e+00f, 9.493680000e+00f,  9.571680000e+00f, 9.449700000e+00f, -8.972640000e+00f, 9.051120000e+00f,
                9.128160000e+00f,  9.006660000e+00f, -8.528640000e+00f, 8.608560000e+00f,  8.684640000e+00f, 8.563620000e+00f,
                -1.084512000e+01f, 1.093752000e+01f,  1.102320000e+01f, 1.088586000e+01f, -1.033968000e+01f, 1.043352000e+01f,
                1.051824000e+01f,  1.038138000e+01f, -9.834240000e+00f, 9.929520000e+00f,  1.001328000e+01f, 9.876900000e+00f,
                -1.102368000e+01f, 1.111800000e+01f,  1.120464000e+01f, 1.106538000e+01f, -1.051056000e+01f, 1.060632000e+01f,
                1.069200000e+01f,  1.055322000e+01f, -9.997440000e+00f, 1.009464000e+01f,  1.017936000e+01f, 1.004106000e+01f,
                -1.120224000e+01f, 1.129848000e+01f,  1.138608000e+01f, 1.124490000e+01f, -1.068144000e+01f, 1.077912000e+01f,
                1.086576000e+01f,  1.072506000e+01f, -1.016064000e+01f, 1.025976000e+01f,  1.034544000e+01f, 1.020522000e+01f,
                -1.138080000e+01f, 1.147896000e+01f,  1.156752000e+01f, 1.142442000e+01f, -1.085232000e+01f, 1.095192000e+01f,
                1.103952000e+01f,  1.089690000e+01f, -1.032384000e+01f, 1.042488000e+01f,  1.051152000e+01f, 1.036938000e+01f,
                -1.155936000e+01f, 1.165944000e+01f,  1.174896000e+01f, 1.160394000e+01f, -1.102320000e+01f, 1.112472000e+01f,
                1.121328000e+01f,  1.106874000e+01f, -1.048704000e+01f, 1.059000000e+01f,  1.067760000e+01f, 1.053354000e+01f,
                -1.173792000e+01f, 1.183992000e+01f,  1.193040000e+01f, 1.178346000e+01f, -1.119408000e+01f, 1.129752000e+01f,
                1.138704000e+01f,  1.124058000e+01f, -1.065024000e+01f, 1.075512000e+01f,  1.084368000e+01f, 1.069770000e+01f,
                -1.316640000e+01f, 1.328376000e+01f,  1.338192000e+01f, 1.321962000e+01f, -1.256112000e+01f, 1.267992000e+01f,
                1.277712000e+01f,  1.261530000e+01f, -1.195584000e+01f, 1.207608000e+01f,  1.217232000e+01f, 1.201098000e+01f,
                -1.334496000e+01f, 1.346424000e+01f,  1.356336000e+01f, 1.339914000e+01f, -1.273200000e+01f, 1.285272000e+01f,
                1.295088000e+01f,  1.278714000e+01f, -1.211904000e+01f, 1.224120000e+01f,  1.233840000e+01f, 1.217514000e+01f,
                -1.352352000e+01f, 1.364472000e+01f,  1.374480000e+01f, 1.357866000e+01f, -1.290288000e+01f, 1.302552000e+01f,
                1.312464000e+01f,  1.295898000e+01f, -1.228224000e+01f, 1.240632000e+01f,  1.250448000e+01f, 1.233930000e+01f,
                -1.370208000e+01f, 1.382520000e+01f,  1.392624000e+01f, 1.375818000e+01f, -1.307376000e+01f, 1.319832000e+01f,
                1.329840000e+01f,  1.313082000e+01f, -1.244544000e+01f, 1.257144000e+01f,  1.267056000e+01f, 1.250346000e+01f,
                -1.388064000e+01f, 1.400568000e+01f,  1.410768000e+01f, 1.393770000e+01f, -1.324464000e+01f, 1.337112000e+01f,
                1.347216000e+01f,  1.330266000e+01f, -1.260864000e+01f, 1.273656000e+01f,  1.283664000e+01f, 1.266762000e+01f,
                -1.405920000e+01f, 1.418616000e+01f,  1.428912000e+01f, 1.411722000e+01f, -1.341552000e+01f, 1.354392000e+01f,
                1.364592000e+01f,  1.347450000e+01f, -1.277184000e+01f, 1.290168000e+01f,  1.300272000e+01f, 1.283178000e+01f,
                -1.548768000e+01f, 1.563000000e+01f,  1.574064000e+01f, 1.555338000e+01f, -1.478256000e+01f, 1.492632000e+01f,
                1.503600000e+01f,  1.484922000e+01f, -1.407744000e+01f, 1.422264000e+01f,  1.433136000e+01f, 1.414506000e+01f,
                -1.566624000e+01f, 1.581048000e+01f,  1.592208000e+01f, 1.573290000e+01f, -1.495344000e+01f, 1.509912000e+01f,
                1.520976000e+01f,  1.502106000e+01f, -1.424064000e+01f, 1.438776000e+01f,  1.449744000e+01f, 1.430922000e+01f,
                -1.584480000e+01f, 1.599096000e+01f,  1.610352000e+01f, 1.591242000e+01f, -1.512432000e+01f, 1.527192000e+01f,
                1.538352000e+01f,  1.519290000e+01f, -1.440384000e+01f, 1.455288000e+01f,  1.466352000e+01f, 1.447338000e+01f,
                -1.602336000e+01f, 1.617144000e+01f,  1.628496000e+01f, 1.609194000e+01f, -1.529520000e+01f, 1.544472000e+01f,
                1.555728000e+01f,  1.536474000e+01f, -1.456704000e+01f, 1.471800000e+01f,  1.482960000e+01f, 1.463754000e+01f,
                -1.620192000e+01f, 1.635192000e+01f,  1.646640000e+01f, 1.627146000e+01f, -1.546608000e+01f, 1.561752000e+01f,
                1.573104000e+01f,  1.553658000e+01f, -1.473024000e+01f, 1.488312000e+01f,  1.499568000e+01f, 1.480170000e+01f,
                -1.638048000e+01f, 1.653240000e+01f,  1.664784000e+01f, 1.645098000e+01f, -1.563696000e+01f, 1.579032000e+01f,
                1.590480000e+01f,  1.570842000e+01f, -1.489344000e+01f, 1.504824000e+01f,  1.516176000e+01f, 1.496586000e+01f,
                -2.129088000e+01f, 2.149560000e+01f,  2.163744000e+01f, 2.138778000e+01f, -2.033616000e+01f, 2.054232000e+01f,
                2.068320000e+01f,  2.043402000e+01f, -1.938144000e+01f, 1.958904000e+01f,  1.972896000e+01f, 1.948026000e+01f,
                -2.146944000e+01f, 2.167608000e+01f,  2.181888000e+01f, 2.156730000e+01f, -2.050704000e+01f, 2.071512000e+01f,
                2.085696000e+01f,  2.060586000e+01f, -1.954464000e+01f, 1.975416000e+01f,  1.989504000e+01f, 1.964442000e+01f,
                -2.164800000e+01f, 2.185656000e+01f,  2.200032000e+01f, 2.174682000e+01f, -2.067792000e+01f, 2.088792000e+01f,
                2.103072000e+01f,  2.077770000e+01f, -1.970784000e+01f, 1.991928000e+01f,  2.006112000e+01f, 1.980858000e+01f,
                -2.182656000e+01f, 2.203704000e+01f,  2.218176000e+01f, 2.192634000e+01f, -2.084880000e+01f, 2.106072000e+01f,
                2.120448000e+01f,  2.094954000e+01f, -1.987104000e+01f, 2.008440000e+01f,  2.022720000e+01f, 1.997274000e+01f,
                -2.200512000e+01f, 2.221752000e+01f,  2.236320000e+01f, 2.210586000e+01f, -2.101968000e+01f, 2.123352000e+01f,
                2.137824000e+01f,  2.112138000e+01f, -2.003424000e+01f, 2.024952000e+01f,  2.039328000e+01f, 2.013690000e+01f,
                -2.218368000e+01f, 2.239800000e+01f,  2.254464000e+01f, 2.228538000e+01f, -2.119056000e+01f, 2.140632000e+01f,
                2.155200000e+01f,  2.129322000e+01f, -2.019744000e+01f, 2.041464000e+01f,  2.055936000e+01f, 2.030106000e+01f,
                -2.361216000e+01f, 2.384184000e+01f,  2.399616000e+01f, 2.372154000e+01f, -2.255760000e+01f, 2.278872000e+01f,
                2.294208000e+01f,  2.266794000e+01f, -2.150304000e+01f, 2.173560000e+01f,  2.188800000e+01f, 2.161434000e+01f,
                -2.379072000e+01f, 2.402232000e+01f,  2.417760000e+01f, 2.390106000e+01f, -2.272848000e+01f, 2.296152000e+01f,
                2.311584000e+01f,  2.283978000e+01f, -2.166624000e+01f, 2.190072000e+01f,  2.205408000e+01f, 2.177850000e+01f,
                -2.396928000e+01f, 2.420280000e+01f,  2.435904000e+01f, 2.408058000e+01f, -2.289936000e+01f, 2.313432000e+01f,
                2.328960000e+01f,  2.301162000e+01f, -2.182944000e+01f, 2.206584000e+01f,  2.222016000e+01f, 2.194266000e+01f,
                -2.414784000e+01f, 2.438328000e+01f,  2.454048000e+01f, 2.426010000e+01f, -2.307024000e+01f, 2.330712000e+01f,
                2.346336000e+01f,  2.318346000e+01f, -2.199264000e+01f, 2.223096000e+01f,  2.238624000e+01f, 2.210682000e+01f,
                -2.432640000e+01f, 2.456376000e+01f,  2.472192000e+01f, 2.443962000e+01f, -2.324112000e+01f, 2.347992000e+01f,
                2.363712000e+01f,  2.335530000e+01f, -2.215584000e+01f, 2.239608000e+01f,  2.255232000e+01f, 2.227098000e+01f,
                -2.450496000e+01f, 2.474424000e+01f,  2.490336000e+01f, 2.461914000e+01f, -2.341200000e+01f, 2.365272000e+01f,
                2.381088000e+01f,  2.352714000e+01f, -2.231904000e+01f, 2.256120000e+01f,  2.271840000e+01f, 2.243514000e+01f,
                -2.593344000e+01f, 2.618808000e+01f,  2.635488000e+01f, 2.605530000e+01f, -2.477904000e+01f, 2.503512000e+01f,
                2.520096000e+01f,  2.490186000e+01f, -2.362464000e+01f, 2.388216000e+01f,  2.404704000e+01f, 2.374842000e+01f,
                -2.611200000e+01f, 2.636856000e+01f,  2.653632000e+01f, 2.623482000e+01f, -2.494992000e+01f, 2.520792000e+01f,
                2.537472000e+01f,  2.507370000e+01f, -2.378784000e+01f, 2.404728000e+01f,  2.421312000e+01f, 2.391258000e+01f,
                -2.629056000e+01f, 2.654904000e+01f,  2.671776000e+01f, 2.641434000e+01f, -2.512080000e+01f, 2.538072000e+01f,
                2.554848000e+01f,  2.524554000e+01f, -2.395104000e+01f, 2.421240000e+01f,  2.437920000e+01f, 2.407674000e+01f,
                -2.646912000e+01f, 2.672952000e+01f,  2.689920000e+01f, 2.659386000e+01f, -2.529168000e+01f, 2.555352000e+01f,
                2.572224000e+01f,  2.541738000e+01f, -2.411424000e+01f, 2.437752000e+01f,  2.454528000e+01f, 2.424090000e+01f,
                -2.664768000e+01f, 2.691000000e+01f,  2.708064000e+01f, 2.677338000e+01f, -2.546256000e+01f, 2.572632000e+01f,
                2.589600000e+01f,  2.558922000e+01f, -2.427744000e+01f, 2.454264000e+01f,  2.471136000e+01f, 2.440506000e+01f,
                -2.682624000e+01f, 2.709048000e+01f,  2.726208000e+01f, 2.695290000e+01f, -2.563344000e+01f, 2.589912000e+01f,
                2.606976000e+01f,  2.576106000e+01f, -2.444064000e+01f, 2.470776000e+01f,  2.487744000e+01f, 2.456922000e+01f,
                -2.825472000e+01f, 2.853432000e+01f,  2.871360000e+01f, 2.838906000e+01f, -2.700048000e+01f, 2.728152000e+01f,
                2.745984000e+01f,  2.713578000e+01f, -2.574624000e+01f, 2.602872000e+01f,  2.620608000e+01f, 2.588250000e+01f,
                -2.843328000e+01f, 2.871480000e+01f,  2.889504000e+01f, 2.856858000e+01f, -2.717136000e+01f, 2.745432000e+01f,
                2.763360000e+01f,  2.730762000e+01f, -2.590944000e+01f, 2.619384000e+01f,  2.637216000e+01f, 2.604666000e+01f,
                -2.861184000e+01f, 2.889528000e+01f,  2.907648000e+01f, 2.874810000e+01f, -2.734224000e+01f, 2.762712000e+01f,
                2.780736000e+01f,  2.747946000e+01f, -2.607264000e+01f, 2.635896000e+01f,  2.653824000e+01f, 2.621082000e+01f,
                -2.879040000e+01f, 2.907576000e+01f,  2.925792000e+01f, 2.892762000e+01f, -2.751312000e+01f, 2.779992000e+01f,
                2.798112000e+01f,  2.765130000e+01f, -2.623584000e+01f, 2.652408000e+01f,  2.670432000e+01f, 2.637498000e+01f,
                -2.896896000e+01f, 2.925624000e+01f,  2.943936000e+01f, 2.910714000e+01f, -2.768400000e+01f, 2.797272000e+01f,
                2.815488000e+01f,  2.782314000e+01f, -2.639904000e+01f, 2.668920000e+01f,  2.687040000e+01f, 2.653914000e+01f,
                -2.914752000e+01f, 2.943672000e+01f,  2.962080000e+01f, 2.928666000e+01f, -2.785488000e+01f, 2.814552000e+01f,
                2.832864000e+01f,  2.799498000e+01f, -2.656224000e+01f, 2.685432000e+01f,  2.703648000e+01f, 2.670330000e+01f,
                -3.057600000e+01f, 3.088056000e+01f,  3.107232000e+01f, 3.072282000e+01f, -2.922192000e+01f, 2.952792000e+01f,
                2.971872000e+01f,  2.936970000e+01f, -2.786784000e+01f, 2.817528000e+01f,  2.836512000e+01f, 2.801658000e+01f,
                -3.075456000e+01f, 3.106104000e+01f,  3.125376000e+01f, 3.090234000e+01f, -2.939280000e+01f, 2.970072000e+01f,
                2.989248000e+01f,  2.954154000e+01f, -2.803104000e+01f, 2.834040000e+01f,  2.853120000e+01f, 2.818074000e+01f,
                -3.093312000e+01f, 3.124152000e+01f,  3.143520000e+01f, 3.108186000e+01f, -2.956368000e+01f, 2.987352000e+01f,
                3.006624000e+01f,  2.971338000e+01f, -2.819424000e+01f, 2.850552000e+01f,  2.869728000e+01f, 2.834490000e+01f,
                -3.111168000e+01f, 3.142200000e+01f,  3.161664000e+01f, 3.126138000e+01f, -2.973456000e+01f, 3.004632000e+01f,
                3.024000000e+01f,  2.988522000e+01f, -2.835744000e+01f, 2.867064000e+01f,  2.886336000e+01f, 2.850906000e+01f,
                -3.129024000e+01f, 3.160248000e+01f,  3.179808000e+01f, 3.144090000e+01f, -2.990544000e+01f, 3.021912000e+01f,
                3.041376000e+01f,  3.005706000e+01f, -2.852064000e+01f, 2.883576000e+01f,  2.902944000e+01f, 2.867322000e+01f,
                -3.146880000e+01f, 3.178296000e+01f,  3.197952000e+01f, 3.162042000e+01f, -3.007632000e+01f, 3.039192000e+01f,
                3.058752000e+01f,  3.022890000e+01f, -2.868384000e+01f, 2.900088000e+01f,  2.919552000e+01f, 2.883738000e+01f,
                -3.289728000e+01f, 3.322680000e+01f,  3.343104000e+01f, 3.305658000e+01f, -3.144336000e+01f, 3.177432000e+01f,
                3.197760000e+01f,  3.160362000e+01f, -2.998944000e+01f, 3.032184000e+01f,  3.052416000e+01f, 3.015066000e+01f,
                -3.307584000e+01f, 3.340728000e+01f,  3.361248000e+01f, 3.323610000e+01f, -3.161424000e+01f, 3.194712000e+01f,
                3.215136000e+01f,  3.177546000e+01f, -3.015264000e+01f, 3.048696000e+01f,  3.069024000e+01f, 3.031482000e+01f,
                -3.325440000e+01f, 3.358776000e+01f,  3.379392000e+01f, 3.341562000e+01f, -3.178512000e+01f, 3.211992000e+01f,
                3.232512000e+01f,  3.194730000e+01f, -3.031584000e+01f, 3.065208000e+01f,  3.085632000e+01f, 3.047898000e+01f,
                -3.343296000e+01f, 3.376824000e+01f,  3.397536000e+01f, 3.359514000e+01f, -3.195600000e+01f, 3.229272000e+01f,
                3.249888000e+01f,  3.211914000e+01f, -3.047904000e+01f, 3.081720000e+01f,  3.102240000e+01f, 3.064314000e+01f,
                -3.361152000e+01f, 3.394872000e+01f,  3.415680000e+01f, 3.377466000e+01f, -3.212688000e+01f, 3.246552000e+01f,
                3.267264000e+01f,  3.229098000e+01f, -3.064224000e+01f, 3.098232000e+01f,  3.118848000e+01f, 3.080730000e+01f,
                -3.379008000e+01f, 3.412920000e+01f,  3.433824000e+01f, 3.395418000e+01f, -3.229776000e+01f, 3.263832000e+01f,
                3.284640000e+01f,  3.246282000e+01f, -3.080544000e+01f, 3.114744000e+01f,  3.135456000e+01f, 3.097146000e+01f,
                -3.521856000e+01f, 3.557304000e+01f,  3.578976000e+01f, 3.539034000e+01f, -3.366480000e+01f, 3.402072000e+01f,
                3.423648000e+01f,  3.383754000e+01f, -3.211104000e+01f, 3.246840000e+01f,  3.268320000e+01f, 3.228474000e+01f,
                -3.539712000e+01f, 3.575352000e+01f,  3.597120000e+01f, 3.556986000e+01f, -3.383568000e+01f, 3.419352000e+01f,
                3.441024000e+01f,  3.400938000e+01f, -3.227424000e+01f, 3.263352000e+01f,  3.284928000e+01f, 3.244890000e+01f,
                -3.557568000e+01f, 3.593400000e+01f,  3.615264000e+01f, 3.574938000e+01f, -3.400656000e+01f, 3.436632000e+01f,
                3.458400000e+01f,  3.418122000e+01f, -3.243744000e+01f, 3.279864000e+01f,  3.301536000e+01f, 3.261306000e+01f,
                -3.575424000e+01f, 3.611448000e+01f,  3.633408000e+01f, 3.592890000e+01f, -3.417744000e+01f, 3.453912000e+01f,
                3.475776000e+01f,  3.435306000e+01f, -3.260064000e+01f, 3.296376000e+01f,  3.318144000e+01f, 3.277722000e+01f,
                -3.593280000e+01f, 3.629496000e+01f,  3.651552000e+01f, 3.610842000e+01f, -3.434832000e+01f, 3.471192000e+01f,
                3.493152000e+01f,  3.452490000e+01f, -3.276384000e+01f, 3.312888000e+01f,  3.334752000e+01f, 3.294138000e+01f,
                -3.611136000e+01f, 3.647544000e+01f,  3.669696000e+01f, 3.628794000e+01f, -3.451920000e+01f, 3.488472000e+01f,
                3.510528000e+01f,  3.469674000e+01f, -3.292704000e+01f, 3.329400000e+01f,  3.351360000e+01f, 3.310554000e+01f,
                -4.102176000e+01f, 4.143864000e+01f,  4.168656000e+01f, 4.122474000e+01f, -3.921840000e+01f, 3.963672000e+01f,
                3.988368000e+01f,  3.942234000e+01f, -3.741504000e+01f, 3.783480000e+01f,  3.808080000e+01f, 3.761994000e+01f,
                -4.120032000e+01f, 4.161912000e+01f,  4.186800000e+01f, 4.140426000e+01f, -3.938928000e+01f, 3.980952000e+01f,
                4.005744000e+01f,  3.959418000e+01f, -3.757824000e+01f, 3.799992000e+01f,  3.824688000e+01f, 3.778410000e+01f,
                -4.137888000e+01f, 4.179960000e+01f,  4.204944000e+01f, 4.158378000e+01f, -3.956016000e+01f, 3.998232000e+01f,
                4.023120000e+01f,  3.976602000e+01f, -3.774144000e+01f, 3.816504000e+01f,  3.841296000e+01f, 3.794826000e+01f,
                -4.155744000e+01f, 4.198008000e+01f,  4.223088000e+01f, 4.176330000e+01f, -3.973104000e+01f, 4.015512000e+01f,
                4.040496000e+01f,  3.993786000e+01f, -3.790464000e+01f, 3.833016000e+01f,  3.857904000e+01f, 3.811242000e+01f,
                -4.173600000e+01f, 4.216056000e+01f,  4.241232000e+01f, 4.194282000e+01f, -3.990192000e+01f, 4.032792000e+01f,
                4.057872000e+01f,  4.010970000e+01f, -3.806784000e+01f, 3.849528000e+01f,  3.874512000e+01f, 3.827658000e+01f,
                -4.191456000e+01f, 4.234104000e+01f,  4.259376000e+01f, 4.212234000e+01f, -4.007280000e+01f, 4.050072000e+01f,
                4.075248000e+01f,  4.028154000e+01f, -3.823104000e+01f, 3.866040000e+01f,  3.891120000e+01f, 3.844074000e+01f,
                -4.334304000e+01f, 4.378488000e+01f,  4.404528000e+01f, 4.355850000e+01f, -4.143984000e+01f, 4.188312000e+01f,
                4.214256000e+01f,  4.165626000e+01f, -3.953664000e+01f, 3.998136000e+01f,  4.023984000e+01f, 3.975402000e+01f,
                -4.352160000e+01f, 4.396536000e+01f,  4.422672000e+01f, 4.373802000e+01f, -4.161072000e+01f, 4.205592000e+01f,
                4.231632000e+01f,  4.182810000e+01f, -3.969984000e+01f, 4.014648000e+01f,  4.040592000e+01f, 3.991818000e+01f,
                -4.370016000e+01f, 4.414584000e+01f,  4.440816000e+01f, 4.391754000e+01f, -4.178160000e+01f, 4.222872000e+01f,
                4.249008000e+01f,  4.199994000e+01f, -3.986304000e+01f, 4.031160000e+01f,  4.057200000e+01f, 4.008234000e+01f,
                -4.387872000e+01f, 4.432632000e+01f,  4.458960000e+01f, 4.409706000e+01f, -4.195248000e+01f, 4.240152000e+01f,
                4.266384000e+01f,  4.217178000e+01f, -4.002624000e+01f, 4.047672000e+01f,  4.073808000e+01f, 4.024650000e+01f,
                -4.405728000e+01f, 4.450680000e+01f,  4.477104000e+01f, 4.427658000e+01f, -4.212336000e+01f, 4.257432000e+01f,
                4.283760000e+01f,  4.234362000e+01f, -4.018944000e+01f, 4.064184000e+01f,  4.090416000e+01f, 4.041066000e+01f,
                -4.423584000e+01f, 4.468728000e+01f,  4.495248000e+01f, 4.445610000e+01f, -4.229424000e+01f, 4.274712000e+01f,
                4.301136000e+01f,  4.251546000e+01f, -4.035264000e+01f, 4.080696000e+01f,  4.107024000e+01f, 4.057482000e+01f,
                -4.566432000e+01f, 4.613112000e+01f,  4.640400000e+01f, 4.589226000e+01f, -4.366128000e+01f, 4.412952000e+01f,
                4.440144000e+01f,  4.389018000e+01f, -4.165824000e+01f, 4.212792000e+01f,  4.239888000e+01f, 4.188810000e+01f,
                -4.584288000e+01f, 4.631160000e+01f,  4.658544000e+01f, 4.607178000e+01f, -4.383216000e+01f, 4.430232000e+01f,
                4.457520000e+01f,  4.406202000e+01f, -4.182144000e+01f, 4.229304000e+01f,  4.256496000e+01f, 4.205226000e+01f,
                -4.602144000e+01f, 4.649208000e+01f,  4.676688000e+01f, 4.625130000e+01f, -4.400304000e+01f, 4.447512000e+01f,
                4.474896000e+01f,  4.423386000e+01f, -4.198464000e+01f, 4.245816000e+01f,  4.273104000e+01f, 4.221642000e+01f,
                -4.620000000e+01f, 4.667256000e+01f,  4.694832000e+01f, 4.643082000e+01f, -4.417392000e+01f, 4.464792000e+01f,
                4.492272000e+01f,  4.440570000e+01f, -4.214784000e+01f, 4.262328000e+01f,  4.289712000e+01f, 4.238058000e+01f,
                -4.637856000e+01f, 4.685304000e+01f,  4.712976000e+01f, 4.661034000e+01f, -4.434480000e+01f, 4.482072000e+01f,
                4.509648000e+01f,  4.457754000e+01f, -4.231104000e+01f, 4.278840000e+01f,  4.306320000e+01f, 4.254474000e+01f,
                -4.655712000e+01f, 4.703352000e+01f,  4.731120000e+01f, 4.678986000e+01f, -4.451568000e+01f, 4.499352000e+01f,
                4.527024000e+01f,  4.474938000e+01f, -4.247424000e+01f, 4.295352000e+01f,  4.322928000e+01f, 4.270890000e+01f,
                -4.798560000e+01f, 4.847736000e+01f,  4.876272000e+01f, 4.822602000e+01f, -4.588272000e+01f, 4.637592000e+01f,
                4.666032000e+01f,  4.612410000e+01f, -4.377984000e+01f, 4.427448000e+01f,  4.455792000e+01f, 4.402218000e+01f,
                -4.816416000e+01f, 4.865784000e+01f,  4.894416000e+01f, 4.840554000e+01f, -4.605360000e+01f, 4.654872000e+01f,
                4.683408000e+01f,  4.629594000e+01f, -4.394304000e+01f, 4.443960000e+01f,  4.472400000e+01f, 4.418634000e+01f,
                -4.834272000e+01f, 4.883832000e+01f,  4.912560000e+01f, 4.858506000e+01f, -4.622448000e+01f, 4.672152000e+01f,
                4.700784000e+01f,  4.646778000e+01f, -4.410624000e+01f, 4.460472000e+01f,  4.489008000e+01f, 4.435050000e+01f,
                -4.852128000e+01f, 4.901880000e+01f,  4.930704000e+01f, 4.876458000e+01f, -4.639536000e+01f, 4.689432000e+01f,
                4.718160000e+01f,  4.663962000e+01f, -4.426944000e+01f, 4.476984000e+01f,  4.505616000e+01f, 4.451466000e+01f,
                -4.869984000e+01f, 4.919928000e+01f,  4.948848000e+01f, 4.894410000e+01f, -4.656624000e+01f, 4.706712000e+01f,
                4.735536000e+01f,  4.681146000e+01f, -4.443264000e+01f, 4.493496000e+01f,  4.522224000e+01f, 4.467882000e+01f,
                -4.887840000e+01f, 4.937976000e+01f,  4.966992000e+01f, 4.912362000e+01f, -4.673712000e+01f, 4.723992000e+01f,
                4.752912000e+01f,  4.698330000e+01f, -4.459584000e+01f, 4.510008000e+01f,  4.538832000e+01f, 4.484298000e+01f,
                -5.030688000e+01f, 5.082360000e+01f,  5.112144000e+01f, 5.055978000e+01f, -4.810416000e+01f, 4.862232000e+01f,
                4.891920000e+01f,  4.835802000e+01f, -4.590144000e+01f, 4.642104000e+01f,  4.671696000e+01f, 4.615626000e+01f,
                -5.048544000e+01f, 5.100408000e+01f,  5.130288000e+01f, 5.073930000e+01f, -4.827504000e+01f, 4.879512000e+01f,
                4.909296000e+01f,  4.852986000e+01f, -4.606464000e+01f, 4.658616000e+01f,  4.688304000e+01f, 4.632042000e+01f,
                -5.066400000e+01f, 5.118456000e+01f,  5.148432000e+01f, 5.091882000e+01f, -4.844592000e+01f, 4.896792000e+01f,
                4.926672000e+01f,  4.870170000e+01f, -4.622784000e+01f, 4.675128000e+01f,  4.704912000e+01f, 4.648458000e+01f,
                -5.084256000e+01f, 5.136504000e+01f,  5.166576000e+01f, 5.109834000e+01f, -4.861680000e+01f, 4.914072000e+01f,
                4.944048000e+01f,  4.887354000e+01f, -4.639104000e+01f, 4.691640000e+01f,  4.721520000e+01f, 4.664874000e+01f,
                -5.102112000e+01f, 5.154552000e+01f,  5.184720000e+01f, 5.127786000e+01f, -4.878768000e+01f, 4.931352000e+01f,
                4.961424000e+01f,  4.904538000e+01f, -4.655424000e+01f, 4.708152000e+01f,  4.738128000e+01f, 4.681290000e+01f,
                -5.119968000e+01f, 5.172600000e+01f,  5.202864000e+01f, 5.145738000e+01f, -4.895856000e+01f, 4.948632000e+01f,
                4.978800000e+01f,  4.921722000e+01f, -4.671744000e+01f, 4.724664000e+01f,  4.754736000e+01f, 4.697706000e+01f,
                -5.262816000e+01f, 5.316984000e+01f,  5.348016000e+01f, 5.289354000e+01f, -5.032560000e+01f, 5.086872000e+01f,
                5.117808000e+01f,  5.059194000e+01f, -4.802304000e+01f, 4.856760000e+01f,  4.887600000e+01f, 4.829034000e+01f,
                -5.280672000e+01f, 5.335032000e+01f,  5.366160000e+01f, 5.307306000e+01f, -5.049648000e+01f, 5.104152000e+01f,
                5.135184000e+01f,  5.076378000e+01f, -4.818624000e+01f, 4.873272000e+01f,  4.904208000e+01f, 4.845450000e+01f,
                -5.298528000e+01f, 5.353080000e+01f,  5.384304000e+01f, 5.325258000e+01f, -5.066736000e+01f, 5.121432000e+01f,
                5.152560000e+01f,  5.093562000e+01f, -4.834944000e+01f, 4.889784000e+01f,  4.920816000e+01f, 4.861866000e+01f,
                -5.316384000e+01f, 5.371128000e+01f,  5.402448000e+01f, 5.343210000e+01f, -5.083824000e+01f, 5.138712000e+01f,
                5.169936000e+01f,  5.110746000e+01f, -4.851264000e+01f, 4.906296000e+01f,  4.937424000e+01f, 4.878282000e+01f,
                -5.334240000e+01f, 5.389176000e+01f,  5.420592000e+01f, 5.361162000e+01f, -5.100912000e+01f, 5.155992000e+01f,
                5.187312000e+01f,  5.127930000e+01f, -4.867584000e+01f, 4.922808000e+01f,  4.954032000e+01f, 4.894698000e+01f,
                -5.352096000e+01f, 5.407224000e+01f,  5.438736000e+01f, 5.379114000e+01f, -5.118000000e+01f, 5.173272000e+01f,
                5.204688000e+01f,  5.145114000e+01f, -4.883904000e+01f, 4.939320000e+01f,  4.970640000e+01f, 4.911114000e+01f,
                -5.494944000e+01f, 5.551608000e+01f,  5.583888000e+01f, 5.522730000e+01f, -5.254704000e+01f, 5.311512000e+01f,
                5.343696000e+01f,  5.282586000e+01f, -5.014464000e+01f, 5.071416000e+01f,  5.103504000e+01f, 5.042442000e+01f,
                -5.512800000e+01f, 5.569656000e+01f,  5.602032000e+01f, 5.540682000e+01f, -5.271792000e+01f, 5.328792000e+01f,
                5.361072000e+01f,  5.299770000e+01f, -5.030784000e+01f, 5.087928000e+01f,  5.120112000e+01f, 5.058858000e+01f,
                -5.530656000e+01f, 5.587704000e+01f,  5.620176000e+01f, 5.558634000e+01f, -5.288880000e+01f, 5.346072000e+01f,
                5.378448000e+01f,  5.316954000e+01f, -5.047104000e+01f, 5.104440000e+01f,  5.136720000e+01f, 5.075274000e+01f,
                -5.548512000e+01f, 5.605752000e+01f,  5.638320000e+01f, 5.576586000e+01f, -5.305968000e+01f, 5.363352000e+01f,
                5.395824000e+01f,  5.334138000e+01f, -5.063424000e+01f, 5.120952000e+01f,  5.153328000e+01f, 5.091690000e+01f,
                -5.566368000e+01f, 5.623800000e+01f,  5.656464000e+01f, 5.594538000e+01f, -5.323056000e+01f, 5.380632000e+01f,
                5.413200000e+01f,  5.351322000e+01f, -5.079744000e+01f, 5.137464000e+01f,  5.169936000e+01f, 5.108106000e+01f,
                -5.584224000e+01f, 5.641848000e+01f,  5.674608000e+01f, 5.612490000e+01f, -5.340144000e+01f, 5.397912000e+01f,
                5.430576000e+01f,  5.368506000e+01f, -5.096064000e+01f, 5.153976000e+01f,  5.186544000e+01f, 5.124522000e+01f,
            };

            float[] y_actual = y.ToArray();

            AssertError.Tolerance(y_expect, y_actual, 1e-7f, 1e-5f, $"mismatch value {inchannels},{outchannels},{kwidth},{kheight},{stride},{inwidth},{inheight},{batch}");
        }