public void CheckChangeTensorLayout2D() { var strg2DCpy = (TypedArrayStorage)strg2D.Clone(); Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.Shape.Dimensions, new int[] { 3, 3 })); Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.GetData <long>(), new long[] { 0, 3, 6, 1, 4, 7, 2, 5, 8 })); Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.Shape.Dimensions, new int[] { 3, 3 })); Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.GetData <long>(), strg2D.GetData <long>())); strg2DCpy = (TypedArrayStorage)strg2DNonFull.Clone(); Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.Shape.Dimensions, new int[] { 5, 2 })); Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.GetData <long>(), new long[] { 0, 5, 1, 6, 2, 7, 3, 8, 4, 9 })); Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.Shape.Dimensions, new int[] { 5, 2 })); Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.GetData <long>(), strg2DNonFull.GetData <long>())); strg2DCpy = new TypedArrayStorage(typeof(long)); strg2DCpy.Allocate(new Shape(5, 2)); strg2DCpy.ReplaceData(strg2DNonFull.GetData()); Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.GetData <long>(), new long[] { 0, 2, 4, 6, 8, 1, 3, 5, 7, 9 })); }
public void NestedView_2D() { var data = new TypedArrayStorage(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); data.Reshape(2, 10); //>>> x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) //>>> x = x.reshape(2, 10) //>>> x //array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]) // return identical view var identical = new ViewStorage(data, ":"); Assert.AreEqual(new Shape(2, 10), identical.Shape); //>>> x[:, 1:9] //array([[1, 2, 3, 4, 5, 6, 7, 8], // [1, 2, 3, 4, 5, 6, 7, 8]]) var view1 = new ViewStorage(identical, ":,1:9"); Assert.AreEqual(new Shape(2, 8), view1.Shape); AssertAreEqual(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8 }, view1.GetData()); //>>> x[:, 1:9][:,::- 2] //array([[8, 6, 4, 2], // [8, 6, 4, 2]]) var view2 = new ViewStorage(view1, ":,::-2"); Assert.AreEqual(new Shape(2, 4), view2.Shape); AssertAreEqual(new int[] { 8, 6, 4, 2, 8, 6, 4, 2 }, view2.GetData()); //>>> x[:, 1:9][:,::- 2][:,::- 3] //array([[2, 8], // [2, 8]]) var view3 = new ViewStorage(view2, ":,::-3"); Assert.AreEqual(new Shape(2, 2), view3.Shape); AssertAreEqual(new int[] { 2, 8, 2, 8 }, view3.GetData()); // all must see the same modifications, no matter if original or any view is modified // modify original data.ReplaceData(new int[] { 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9 }); AssertAreEqual(new int[] { -1, -2, -3, -4, -5, -6, -7, -8, -1, -2, -3, -4, -5, -6, -7, -8 }, view1.GetData()); AssertAreEqual(new int[] { -8, -6, -4, -2, -8, -6, -4, -2 }, view2.GetData()); AssertAreEqual(new int[] { -2, -8, -2, -8 }, view3.GetData()); // modify views view1.SetData(88, 0, 7); view1.SetData(888, 1, 7); AssertAreEqual(new int[] { 0, -1, -2, -3, -4, -5, -6, -7, 88, -9, 0, -1, -2, -3, -4, -5, -6, -7, 888, -9 }, data.GetData()); AssertAreEqual(new int[] { -1, -2, -3, -4, -5, -6, -7, 88, -1, -2, -3, -4, -5, -6, -7, 888 }, view1.GetData()); AssertAreEqual(new int[] { 88, -6, -4, -2, 888, -6, -4, -2 }, view2.GetData()); AssertAreEqual(new int[] { -2, 88, -2, 888 }, view3.GetData()); view3.SetData(22, 0, 0); view3.SetData(222, 1, 0); AssertAreEqual(new int[] { 0, -1, 22, -3, -4, -5, -6, -7, 88, -9, 0, -1, 222, -3, -4, -5, -6, -7, 888, -9 }, data.GetData()); AssertAreEqual(new int[] { -1, 22, -3, -4, -5, -6, -7, 88, -1, 222, -3, -4, -5, -6, -7, 888 }, view1.GetData()); AssertAreEqual(new int[] { 88, -6, -4, 22, 888, -6, -4, 222 }, view2.GetData()); AssertAreEqual(new int[] { 22, 88, 222, 888 }, view3.GetData()); }
public StorageTester() { strg1D = new TypedArrayStorage(np.float64) { Engine = BackendFactory.GetEngine() }; strg1D.Allocate(new Shape(10)); strg1D.ReplaceData(new double[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); strg2D = new TypedArrayStorage(np.int64) { Engine = BackendFactory.GetEngine() }; strg2D.Allocate(new Shape(3, 3)); strg2D.ReplaceData(new long[] { 0, 1, 2, 3, 4, 5, 6, 7, 8 }); strg2DNonFull = new TypedArrayStorage(np.float32) { Engine = BackendFactory.GetEngine() }; strg2DNonFull.Allocate(new Shape(5, 2)); strg2DNonFull.ReplaceData(new float[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); }
public void NestedView_1D() { var data = new TypedArrayStorage(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); // return identical view var identical = new ViewStorage(data, ":"); Assert.AreEqual(new Shape(10), identical.Shape); var view1 = new ViewStorage(identical, "1:9"); Assert.AreEqual(new Shape(8), view1.Shape); AssertAreEqual(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, }, view1.GetData()); var view2 = new ViewStorage(view1, "::-2"); Assert.AreEqual(new Shape(4), view2.Shape); AssertAreEqual(new int[] { 8, 6, 4, 2, }, view2.GetData()); var view3 = new ViewStorage(view2, "::-3"); Assert.AreEqual(new Shape(2), view3.Shape); AssertAreEqual(new int[] { 2, 8 }, view3.GetData()); // all must see the same modifications, no matter if original or any view is modified // modify original data.ReplaceData(new int[] { 0, -1, -2, -3, -4, -5, -6, -7, -8, -9 }); AssertAreEqual(new int[] { -1, -2, -3, -4, -5, -6, -7, -8, }, view1.GetData()); AssertAreEqual(new int[] { -8, -6, -4, -2, }, view2.GetData()); AssertAreEqual(new int[] { -2, -8 }, view3.GetData()); // modify views view1.SetData(88, 7); AssertAreEqual(new int[] { 0, -1, -2, -3, -4, -5, -6, -7, 88, -9 }, data.GetData()); AssertAreEqual(new int[] { -1, -2, -3, -4, -5, -6, -7, 88, }, view1.GetData()); AssertAreEqual(new int[] { 88, -6, -4, -2, }, view2.GetData()); AssertAreEqual(new int[] { -2, 88 }, view3.GetData()); view3.SetData(22, 0); AssertAreEqual(new int[] { 0, -1, 22, -3, -4, -5, -6, -7, 88, -9 }, data.GetData()); AssertAreEqual(new int[] { -1, 22, -3, -4, -5, -6, -7, 88, }, view1.GetData()); AssertAreEqual(new int[] { 88, -6, -4, 22, }, view2.GetData()); AssertAreEqual(new int[] { 22, 88 }, view3.GetData()); }