using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tensorflow;
using Tensorflow.NumPy;
namespace TensorFlowNET.UnitTest.NumPy
{
///
/// https://numpy.org/doc/stable/reference/generated/numpy.prod.html
///
[TestClass]
public class MathTest : EagerModeTestBase
{
[TestMethod]
public void prod()
{
var p = np.prod(1.0, 2.0);
Assert.AreEqual(p, 2.0);
p = np.prod(new[,] { { 1.0, 2.0 }, { 3.0, 4.0 } });
Assert.AreEqual(p, 24.0);
p = np.prod(new[,] { { 1.0, 2.0 }, { 3.0, 4.0 } }, axis: 1);
Assert.AreEqual(p.shape, 2);
Assert.IsTrue(Equal(p.ToArray(), new[] { 2.0, 12.0 }));
}
[TestMethod]
public void astype()
{
var x = np.array(new byte[] { 1, 100, 200 });
var x1 = x.astype(np.float32);
Assert.AreEqual(x1[2], 200f);
}
[TestMethod]
public void divide()
{
var x = np.array(new float[] { 1, 100, 200 });
var y = x / 2;
Assert.AreEqual(y.dtype, np.float32);
}
[TestMethod]
public void sin()
{
var x = np.sin(np.pi / 2);
Assert.AreEqual(x, 1d);
}
[TestMethod]
public void cos()
{
var x = np.cos(np.pi / 2);
Assert.AreEqual(x, 6.123233995736766e-17);
}
[TestMethod]
public void power()
{
var x = np.arange(6);
var y = np.power(x, 3);
Assert.AreEqual(y, new[] { 0, 1, 8, 27, 64, 125 });
}
[TestMethod]
public void square()
{
var x = np.arange(6);
var y = np.square(x);
Assert.AreEqual(y, new[] { 0, 1, 4, 9, 16, 25 });
}
[TestMethod]
public void dotproduct()
{
var x1 = new NDArray(new[] { 1, 2, 3 });
var x2 = new NDArray(new[] { 4, 5, 6 });
double result1 = np.dot(x1, x2);
NDArray y1 = new float[,] {
{ 1.0f, 2.0f, 3.0f },
{ 4.0f, 5.1f,6.0f },
{ 4.0f, 5.1f,6.0f }
};
NDArray y2 = new float[,] {
{ 3.0f, 2.0f, 1.0f },
{ 6.0f, 5.1f, 4.0f },
{ 6.0f, 5.1f, 4.0f }
};
double result2 = np.dot(y1, y2);
Assert.AreEqual(result1, 32);
Assert.AreEqual(Math.Round(result2, 2), 158.02);
}
[TestMethod]
public void maximum()
{
var x1 = new NDArray(new[,] { { 1, 2, 3 }, { 4, 5.1, 6 } });
var x2 = new NDArray(new[,] { { 3, 2, 1 }, { 6, 5.1, 4 } });
var y0 = np.maximum(x1,x2);
var y1 = np.maximum(x1, x2, axis: 0);
var y2 = np.maximum(x1, x2, axis: 1);
var y3 = new NDArray(new[,] { { 3, 2, 3 }, { 6, 5.1, 6 } });
var y4 = new NDArray(new[] { 6, 5.1, 6 });
var y5 = new NDArray(new[] { 3.0, 6 });
Assert.AreEqual(y0, y3);
Assert.AreEqual(y1, y4);
Assert.AreEqual(y2, y5);
}
}
}