@pipcook/boa-cloud
Version:
Use Python modules seamlessly in Node.js
110 lines (96 loc) • 2.85 kB
JavaScript
const test = require('ava');
const boa = require('../../');
const np = boa.import('numpy');
const { tuple, type } = boa.builtins();
// load the numpy.matlib
boa.import('numpy.matlib');
test('numpy.mat: interpret the input as a matrix.', t => {
const x = np.array([[1, 2], [3, 4]]);
const m = np.asmatrix(x);
t.is(JSON.stringify(m.tolist()), '[[1,2],[3,4]]');
t.is(type(m).__name__, 'matrix');
});
test('numpy.matlib.empty: return a new matrix without initializing entries', t => {
const m = np.matlib.empty(tuple([2, 2]));
t.is(type(m).__name__, 'matrix');
});
test('numpy.matlib.zeros: return a matrix filled with zeros.', t => {
const m1 = np.matlib.zeros(tuple([2, 3]));
t.is(type(m1).__name__, 'matrix');
const m2 = np.matlib.zeros(2);
t.is(type(m2).__name__, 'matrix');
});
test('numpy.matlib.ones: return a matrix filled with ones.', t => {
const m1 = np.matlib.ones(tuple([2, 3]));
t.is(type(m1).__name__, 'matrix');
const m2 = np.matlib.ones(2);
t.is(type(m2).__name__, 'matrix');
});
test('numpy.matlib.eye: return a matrix with ones on the diagonal and zeros elsewhere.', t => {
const m = np.matlib.eye(3, boa.kwargs({
k: 1,
dtype: np.float,
}));
t.is(type(m).__name__, 'matrix');
});
test('numpy.matlib.identity: return the square identity matrix of given size.', t => {
const m = np.matlib.identity(3, boa.kwargs({
dtype: np.int,
}));
t.is(type(m).__name__, 'matrix');
});
test('numpy.matlib.repmat: repeat a 0-D to 2-D array or matrix MxN times.', t => {
{
const a0 = np.array(1);
const m0 = np.matlib.repmat(a0, 2, 3);
console.log(`${m0}`);
}
{
const a1 = np.arange(4);
const m1 = np.matlib.repmat(a1, 2, 2);
console.log(`${m1}`);
}
{
const a2 = np.asmatrix(np.arange(6).reshape(2, 3));
const m2 = np.matlib.repmat(a2, 2, 3);
console.log(`${m2}`);
}
t.pass();
});
test('numpy.matlib.rand: return a matrix of random values with given shape.', t => {
{
const n0 = np.matlib.rand(2, 3);
console.log(`${n0}`);
}
{
const n1 = np.matlib.rand(tuple([2, 3]));
console.log(`${n1}`);
}
t.pass();
});
test('numpy.matlib.randn: return a random matrix with data from the “standard normal” distribution.', t => {
{
const n0 = np.matlib.randn(1);
console.log(`${n0}`);
}
{
const n1 = np.matlib.randn(1, 2, 3);
console.log(`${n1}`);
}
// TODO: matrix doesn't support operators like +/-/*.
t.pass();
});
test('numpy.matrix: operator functions', t => {
const x = np.array([[1, 2], [3, 4]]);
const mb = np.asmatrix(x);
const m1 = mb.add(20);
t.is(`${m1.A1}`, '[21 22 23 24]');
// simple test
console.log(m1.sub(10));
console.log(m1.mul(10));
console.log(m1.rmul(3));
console.log(m1.imul(3));
console.log(m1.pow(2));
console.log(m1.ipow(3));
t.pass();
});