コード例 #1
0
ファイル: NodeGrid.cs プロジェクト: tp-nscan/NodePad
        public NodeGrid(Sz2 <int> strides, IEnumerable <P1V <int, float> > tuples, int generation, int seed)
        {
            Strides = strides;
            Values  = new float[Strides.Count()];
            foreach (var tup in tuples)
            {
                Values[tup.X] = tup.V;
            }

            Generation = generation;

            Seed = seed;
            var randy = GenV.Twist(Seed);

            Noise    = GenS.NormalSF32(randy, 0.0f, 1.0f).Take(Strides.Count()).ToArray();
            NextSeed = randy.Next();

            var Offhi = new P2 <int>(0, -1);
            var Offlo = new P2 <int>(0, 1);
            var Offlf = new P2 <int>(-1, 0);
            var Offrt = new P2 <int>(1, 0);

            Top    = GridUtil.OffsetIndexes(Strides, Offhi);
            Bottom = GridUtil.OffsetIndexes(Strides, Offlo);
            Left   = GridUtil.OffsetIndexes(Strides, Offlf);
            Right  = GridUtil.OffsetIndexes(Strides, Offrt);
        }
コード例 #2
0
ファイル: GraphLatticeVm.cs プロジェクト: tp-nscan/CudaClr
        public void Update(object data)
        {
            var results  = new List <RV <float, Color> >();
            var cellSize = new Sz2 <double>
                           (
                x: ImageSize.X / (MaxX.CurVal - MinX.CurVal),
                y: ImageSize.X / (MaxY.CurVal - MinY.CurVal)
                           );

            for (var i = MinX.CurVal; i < MaxX.CurVal; i++)
            {
                for (var j = MinY.CurVal; j < MaxY.CurVal; j++)
                {
                    results.Add((RV <float, Color>)
                                _cellUpdater(new P2 <int>(x: i, y: j),
                                             new R <double>(
                                                 minX: i * cellSize.X,
                                                 maxX: (i + 1) * cellSize.X,
                                                 minY: j * cellSize.Y,
                                                 maxY: (j + 1) * cellSize.Y
                                                 ),
                                             data));
                }
            }

            WbImageVm.ImageData = Id.MakeImageData(
                plotPoints: Enumerable.Empty <P2V <float, Color> >(),
                plotLines: Enumerable.Empty <LS2V <float, Color> >(),
                filledRects: results,
                openRects: Enumerable.Empty <RV <float, Color> >()
                );
        }
コード例 #3
0
ファイル: Grid2DVm.cs プロジェクト: tp-nscan/Mite
 public Grid2DVm(Sz2 <int> strides, ColorLeg <T> colorLeg, string title = "")
 {
     Strides   = strides;
     ColorLeg  = colorLeg;
     WbImageVm = new WbImageVm();
     Title     = title;
 }
コード例 #4
0
ファイル: GraphTilesVm.cs プロジェクト: tp-nscan/Mite
        void Update()
        {
            if (ImageSize is null)
            {
                return;
            }

            var cellSize = new Sz2 <double>
                           (
                x: ImageSize.X / (MaxX.CurVal - MinX.CurVal),
                y: ImageSize.Y / (MaxY.CurVal - MinY.CurVal)
                           );

            TileVms.Clear();

            for (var i = MinX.CurVal; i < MaxX.CurVal; i++)
            {
                for (var j = MinY.CurVal; j < MaxY.CurVal; j++)
                {
                    TileVms.Add(_cellUpdater(
                                    new P2 <int>(x: i, y: j),
                                    new R <double>(
                                        minX: (i - MinX.CurVal) * cellSize.X,
                                        maxX: (i + 1 - MinX.CurVal) * cellSize.X,
                                        minY: (j - MinY.CurVal) * cellSize.Y,
                                        maxY: (j + 1 - MinY.CurVal) * cellSize.Y)
                                    ));
                }
            }
        }
コード例 #5
0
 public Sz2IntVm(Sz2 <int> sz2Int, int maxVal)
 {
     Sz2Int = sz2Int;
     MaxVal = maxVal;
     _x     = Sz2Int.X.ToString();
     _y     = Sz2Int.Y.ToString();
 }
コード例 #6
0
 public Hist2DVm(Sz2 <int> binCounts,
                 Func <int[], ColorLeg <int> > colorLegger,
                 string title = "")
 {
     _enforceBounds = false;
     BinCounts      = new Sz2IntVm(binCounts);
     ColorLegger    = colorLegger;
     GraphVm        = new GraphVm();
 }
コード例 #7
0
        public void TestSparseF32MatrixToBase64()
        {
            var bounds = new Sz2 <int>(3, 5);
            var aIn    = GenMatrix.RandSparseF32(bounds, 8, 123);
            var base64 = MathNetConv.SparseF32MatrixToBase64(aIn);
            var aOut   = MathNetConv.Base64ToSparseF32Matrix(bounds, base64.Item1, base64.Item2, base64.Item3);

            Assert.IsTrue(aIn.IsSameAs(aOut));
        }
コード例 #8
0
        public void TestDenseF32MatrixToBase64()
        {
            var bounds = new Sz2 <int>(3, 5);
            var aIn    = GenMatrix.DenseUF32(bounds, 123);
            var base64 = MathNetConv.DenseF32MatrixtoBase64(aIn);
            var aOut   = MathNetConv.Base64ToDenseF32Matrix(bounds, base64);

            Assert.IsTrue(aIn.IsSameAs(aOut));
        }
コード例 #9
0
        public void TestFloatA2ToBase64()
        {
            var bounds = new Sz2 <int>(3, 5);
            var aIn    = GenA2.RandUF32(bounds, 123);
            var base64 = BTconv.F32A2toBase64(aIn);
            var aOut   = BTconv.Base64ToF32A2(bounds, base64);

            Assert.IsTrue(aIn.IsSameAs(aOut));
        }
コード例 #10
0
 public Hist2DVm(Sz2 <int> binCounts, R <float> bounds,
                 Func <int[], ColorLeg <int> > colorLegger,
                 string title = "")
 {
     _enforceBounds = true;
     BinCounts      = new Sz2IntVm(binCounts, 800);
     Bounds         = bounds;
     ColorLegger    = colorLegger;
     GraphVm        = new GraphVm();
 }
コード例 #11
0
 public static IEnumerable <P2 <int> > Raster(this Sz2 <int> bounds)
 {
     for (var x = 0; x < bounds.X; x++)
     {
         for (var y = 0; y < bounds.Y; y++)
         {
             yield return(new P2 <int>(x, y));
         }
     }
 }
コード例 #12
0
ファイル: NodeProcs.cs プロジェクト: tp-nscan/NodePad
        public static NodeGrid RandNodeGrid(Sz2 <int> bounds, int initSeed, int updateSeed)
        {
            var nodeVals = GenS.SeqOfRandUF32(GenV.Twist(initSeed)).Take(bounds.Count()).ToArray();
            var tuples   = Enumerable.Range(0, bounds.Count()).Select(i => new P1V <int, float>(i, nodeVals[i]));

            return(new NodeGrid(
                       strides: bounds,
                       tuples: tuples,
                       generation: 0,
                       seed: updateSeed
                       ));
        }
コード例 #13
0
        public void TestOffsetIndexes()
        {
            var rowCount = 5;
            var colCount = 7;
            var gridSz   = new Sz2 <int>(colCount, rowCount);

            var Offp  = new P2 <int>(0, 0);
            var Offpp = new P2 <int>(1, 1);

            var a1 = GridUtil.OffsetIndexes(gridSz, Offp);
            var a2 = GridUtil.OffsetIndexes(gridSz, Offpp);
        }
コード例 #14
0
        void InitLogicStuff()
        {
            var dataSz = new Sz2 <int>(25, 25);
            var dilly  = System.IO.Path.GetFullPath("../../../../Debug/Mite.Cpp.dll");

            //Logic.InitializeLibrary(@"C:\Users\tpnsc\source\repos\Mite\Debug\Mite.Cpp.dll");
            Logic.InitializeLibrary(dilly);

            using (var wrapper = new Logic())
            {
                _backSlashArray = wrapper.BackSlashArray(dataSz.X, 0, 1).ToArray();
            }
        }
コード例 #15
0
 public Grid2DVm(Sz2 <int> strides, ColorLeg <T> colorLeg, string title = "")
 {
     Strides   = strides;
     ColorLeg  = colorLeg;
     WbImageVm = new WbImageVm();
     Title     = title;
     LegendVm  = new LegendVm(
         minVal: "<" + colorLeg.range.Min,
         midVal: ColorSets.GetLegMidVal(colorLeg).ToString(),
         maxVal: ">" + colorLeg.range.Max,
         minCol: colorLeg.minC,
         midColors: colorLeg.spanC,
         maxColor: colorLeg.maxC
         );
 }
コード例 #16
0
        public Grid2D2IVm(Sz2 <int> strides, ColorLeg2I <float> colorLeg, string title = "")
        {
            Strides    = strides;
            ColorLeg2I = colorLeg;
            WbImageVm  = new WbImageVm();
            Title      = title;
            var sp = A2dUt.GetColumn(colorLeg.spanC, colorLeg.spanC.GetLength(1) - 1);

            LegendVm = new LegendVm(
                minVal: "<" + colorLeg.rangeV.MinY,
                midVal: ColorSets2I.GetLegMidVal(colorLeg).ToString(),
                maxVal: ">" + colorLeg.rangeV.MaxY,
                minCol: colorLeg.exteriorC,
                midColors: sp,
                maxColor: colorLeg.exteriorC
                );
        }
コード例 #17
0
ファイル: GraphLatticeVm.cs プロジェクト: tp-nscan/CudaClr
        public GraphLatticeVm(R <uint> latticeBounds, string title = "Title", string titleX = "TitleX", string titleY = "TitleY")
        {
            _wbImageVm           = new WbImageVm();
            _imageSize           = new Sz2 <double>(1.0, 1.0);
            _wbImageVm.ImageData = Id.InitImageData();
            LatticeBounds        = latticeBounds;
            MinX = new IntRangeVm(min: (int)LatticeBounds.MinX, max: (int)LatticeBounds.MaxX, cur: (int)LatticeBounds.MinX);
            MinX.OnCurValChanged.Subscribe(v => CurvalChanged());
            MaxX = new IntRangeVm(min: (int)LatticeBounds.MinX, max: (int)LatticeBounds.MaxX, cur: (int)LatticeBounds.MaxX);
            MaxX.OnCurValChanged.Subscribe(v => CurvalChanged());
            MinY = new IntRangeVm(min: (int)LatticeBounds.MinY, max: (int)LatticeBounds.MaxY, cur: (int)LatticeBounds.MinY);
            MinY.OnCurValChanged.Subscribe(v => CurvalChanged());
            MaxY = new IntRangeVm(min: (int)LatticeBounds.MinY, max: (int)LatticeBounds.MaxY, cur: (int)LatticeBounds.MaxY);
            MaxY.OnCurValChanged.Subscribe(v => CurvalChanged());

            Title  = title;
            TitleX = titleX;
            TitleY = titleY;
        }
コード例 #18
0
        async void RunBatch()
        {
            int Stride      = 32;
            var jobs        = 4;
            var GridStrides = new Sz2 <int>(Stride, Stride);
            var nodeGrid    = NodeProcs.RandNodeGrid(GridStrides, 123, 456);
            var localOrders = ColUtils.SubSeqs(jobs, GridStrides.Count() / jobs)
                              .Select(t => t.ToList())
                              .ToList();
            var trackedTasks = new List <Task <int> >();

            for (var i = 0; i < jobs; i++)
            {
                var i1 = i;
                trackedTasks.Add(Task.Run(() =>
                {
                    Thread.Sleep(2000);
                    return(i1);
                }));
            }
            await Task.WhenAll(trackedTasks);

            var tot = trackedTasks.Sum(tt => tt.Result);
        }
コード例 #19
0
        public void TestIndexForGrid()
        {
            var rowCount = 5;
            var colCount = 7;
            var gridSz   = new Sz2 <int>(colCount, rowCount);
            var Offpp    = new P2 <int>(colCount, rowCount);
            var Offmm    = new P2 <int>(-colCount, -rowCount);
            var Off2pp   = new P2 <int>(2 * colCount, 2 * rowCount);
            var Off2mm   = new P2 <int>(-2 * colCount, -2 * rowCount);

            var row = 1;
            var col = 2;
            var dex = row * colCount + col;

            Assert.AreEqual(dex, GridUtil.IndexForGrid(gridSz, Offpp));
            Assert.AreEqual(dex, GridUtil.IndexForGrid(gridSz, Offmm));
            Assert.AreEqual(dex, GridUtil.IndexForGrid(gridSz, Off2pp));
            Assert.AreEqual(dex, GridUtil.IndexForGrid(gridSz, Off2mm));


            row = 4;
            col = 6;
            dex = row * colCount + col;
            Assert.AreEqual(dex, GridUtil.IndexForGrid(gridSz, Offpp));
            Assert.AreEqual(dex, GridUtil.IndexForGrid(gridSz, Offmm));
            Assert.AreEqual(dex, GridUtil.IndexForGrid(gridSz, Off2pp));
            Assert.AreEqual(dex, GridUtil.IndexForGrid(gridSz, Off2mm));

            row = 2;
            col = 6;
            dex = row * colCount + col;
            Assert.AreEqual(dex, GridUtil.IndexForGrid(gridSz, Offpp));
            Assert.AreEqual(dex, GridUtil.IndexForGrid(gridSz, Offmm));
            Assert.AreEqual(dex, GridUtil.IndexForGrid(gridSz, Off2pp));
            Assert.AreEqual(dex, GridUtil.IndexForGrid(gridSz, Off2mm));
        }
コード例 #20
0
 public static Star2Grid RandStarGrid(Sz2 <int> bounds, int seed)
 {
     return(new Star2Grid(GenA2.RandUF32(bounds, seed), seed));
 }
コード例 #21
0
 public static Star5Grid RandStarGrid(Sz2 <int> bounds, float[,] fixedVals, int seed)
 {
     return(new Star5Grid(GenA2.RandUF32(bounds, seed), fixedVals, seed));
 }
コード例 #22
0
 public static StarGrid RandStarGrid(Sz2 <int> bounds, int initSeed, int updateSeed)
 {
     return(new StarGrid(GenA2.RandUF32(bounds, initSeed), updateSeed));
 }
コード例 #23
0
 public static int Count(this Sz2 <int> bounds)
 {
     return(bounds.X * bounds.Y);
 }
コード例 #24
0
ファイル: Sz2IntVm.cs プロジェクト: tp-nscan/Mite
 public Sz2IntVm(Sz2 <int> sz2Int)
 {
     Sz2Int = sz2Int;
     _x     = Sz2Int.X.ToString();
     _y     = Sz2Int.Y.ToString();
 }
コード例 #25
0
ファイル: NodeProcs.cs プロジェクト: tp-nscan/NodePad
        public static IEnumerable <P2V <int, float> > DataToP2Vs(this NodeArray nodeArray, Sz2 <int> bounds)
        {
            var index = 0;

            for (var x = 0; x < bounds.X; x++)
            {
                for (var y = 0; y < bounds.X; y++)
                {
                    yield return(new P2V <int, float>(x, y, (float)nodeArray.Current[index++]));
                }
            }
        }
コード例 #26
0
ファイル: NodeProcs.cs プロジェクト: tp-nscan/NodePad
 public static NodeArray RandNodeArray(Sz2 <int> bounds, Random randy)
 {
     return(new NodeArray(Enumerable.Range(0, bounds.Count())
                          .Select(i => randy.NextDouble() * 2 - 1.0)
                          .ToArray()));
 }
コード例 #27
0
ファイル: Sz2IntVm.cs プロジェクト: tp-nscan/Mite
 private void DoUpdate()
 {
     Sz2Int = new Sz2 <int>(x: int.Parse(_x), y: int.Parse(_y));
     _sizeChanged.OnNext(Sz2Int);
 }