class TestCase::R::OP::Matrix::Float {
use R::OP::Float as FOP;
use R::OP::FloatComplex as FCOP;
use R::OP::Matrix::Float as MFOP;
static method matrix : int () {
{
{
my $seq_ndarray = FOP->seq(1, 6);
my $nrow = 3;
my $ncol = 2;
my $ret_ndarray = MFOP->matrix($seq_ndarray, $nrow, $ncol);
unless ($ret_ndarray is_type R::NDArray::Float) {
return 0;
}
unless ($ret_ndarray->data == $seq_ndarray->data) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [$nrow, $ncol])) {
return 0;
}
}
{
my $data = [(float)1, 2, 3, 4, 5, 6];
my $nrow = 3;
my $ncol = 2;
my $ret_ndarray = MFOP->matrix($data, $nrow, $ncol);
unless ($ret_ndarray is_type R::NDArray::Float) {
return 0;
}
unless ($ret_ndarray->data == $data) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [$nrow, $ncol])) {
return 0;
}
}
}
return 1;
}
static method matrix_byrow : int () {
{
my $seq_ndarray = FOP->seq(1, 6);
my $nrow = 3;
my $ncol = 2;
my $ret_ndarray = MFOP->matrix_byrow($seq_ndarray, $nrow, $ncol);
unless ($ret_ndarray is_type R::NDArray::Float) {
return 0;
}
unless (Array->equals_float($ret_ndarray->data, [(float)1, 3, 5, 2, 4, 6])) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [$nrow, $ncol])) {
return 0;
}
}
return 1;
}
static method cbind : int () {
{
my $x_ndarray = MFOP->matrix(FOP->seq(1, 6), 2, 3);
my $y_ndarray = MFOP->matrix(FOP->seq(11, 16), 2, 3);
my $ret_ndarray = MFOP->cbind($x_ndarray, $y_ndarray);
unless ($ret_ndarray is_type R::NDArray::Float) {
return 0;
}
unless (Array->equals_float($ret_ndarray->data, [(float)1, 2, 3, 4, 5, 6, 11, 12, 13, 14, 15, 16])) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [2, 6])) {
return 0;
}
}
{
my $x_ndarray = MFOP->matrix(FOP->seq(1, 6), 2, 3)->to_string_ndarray;
my $y_ndarray = MFOP->matrix(FOP->seq(11, 16), 2, 3)->to_string_ndarray;
my $ret_ndarray = (R::NDArray::String)R::OP::Matrix->cbind($x_ndarray, $y_ndarray);
unless ($ret_ndarray is_type R::NDArray::String) {
return 0;
}
unless (Array->equals_string($ret_ndarray->data, [(string)1, 2, 3, 4, 5, 6, 11, 12, 13, 14, 15, 16])) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [2, 6])) {
return 0;
}
}
return 1;
}
static method rbind : int () {
{
my $x_ndarray = MFOP->matrix(FOP->seq(1, 6), 2, 3);
my $y_ndarray = MFOP->matrix(FOP->seq(11, 16), 2, 3);
my $ret_ndarray = MFOP->rbind($x_ndarray, $y_ndarray);
unless ($ret_ndarray is_type R::NDArray::Float) {
return 0;
}
unless (Array->equals_float($ret_ndarray->data, [(float)1, 2, 11, 12, 3, 4, 13, 14, 5, 6, 15, 16])) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [4, 3])) {
return 0;
}
}
{
my $x_ndarray = MFOP->matrix(FOP->seq(1, 6), 2, 3)->to_string_ndarray;
my $y_ndarray = MFOP->matrix(FOP->seq(11, 16), 2, 3)->to_string_ndarray;
my $ret_ndarray = (R::NDArray::String)R::OP::Matrix->rbind($x_ndarray, $y_ndarray);
unless ($ret_ndarray is_type R::NDArray::String) {
return 0;
}
unless (Array->equals_string($ret_ndarray->data, [(string)1, 2, 11, 12, 3, 4, 13, 14, 5, 6, 15, 16])) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [4, 3])) {
return 0;
}
}
return 1;
}
static method diag : int () {
{
my $seq_ndarray = FOP->seq(1, 3);
my $ret_ndarray = MFOP->diag($seq_ndarray);
unless ($ret_ndarray is_type R::NDArray::Float) {
return 0;
}
unless (Array->equals_float($ret_ndarray->data, [(float)1, 0, 0, 0, 2, 0, 0, 0, 3])) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [3, 3])) {
return 0;
}
}
# Exceptions
{
{
my $seq_ndarray = FOP->seq(1, 3);
eval { MFOP->diag(undef); }
unless ($@) {
return 0;
}
}
{
my $seq_ndarray = FOP->c(FOP->seq(1, 4), [2, 2]);
eval { MFOP->diag($seq_ndarray); }
unless ($@) {
return 0;
}
}
}
return 1;
}
static method slice_diag : int () {
{
my $seq_ndarray = FOP->seq(1, 9);
my $x_ndarray = MFOP->matrix($seq_ndarray, 3, 3);
my $ret_ndarray = MFOP->slice_diag($x_ndarray);
unless ($ret_ndarray is_type R::NDArray::Float) {
return 0;
}
unless (Array->equals_float($ret_ndarray->data, [(float)1, 5, 9])) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [3])) {
return 0;
}
}
# Exceptions
{
{
my $seq_ndarray = FOP->seq(1, 9);
my $x_ndarray = MFOP->matrix($seq_ndarray, 3, 3);
eval { MFOP->slice_diag(undef); }
unless ($@) {
return 0;
}
}
{
my $seq_ndarray = FOP->seq(1, 6);
my $x_ndarray = MFOP->matrix($seq_ndarray, 3, 2);
eval { MFOP->slice_diag($x_ndarray); }
unless ($@) {
return 0;
}
}
}
return 1;
}
static method identity : int () {
{
my $nrow = 3;
my $ret_ndarray = MFOP->identity($nrow);
unless ($ret_ndarray is_type R::NDArray::Float) {
return 0;
}
unless (Array->equals_float($ret_ndarray->data, [(float)1, 0, 0, 0, 1, 0, 0, 0, 1])) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [3, 3])) {
return 0;
}
}
# Exceptions
{
{
my $nrow = 0;
eval { MFOP->identity($nrow); }
unless ($@) {
return 0;
}
}
}
return 1;
}
static method mul : int () {
{
my $seq_ndarray = FOP->seq(1, 6);
my $x_ndarray = MFOP->matrix(FOP->seq(1, 6), 2, 3);
my $y_ndarray = MFOP->matrix(FOP->seq(1, 6), 3, 2);
my $ret_ndarray = MFOP->mul($x_ndarray, $y_ndarray);
unless ($ret_ndarray is_type R::NDArray::Float) {
return 0;
}
unless (Array->equals_float($ret_ndarray->data, [(float)22, 28, 49, 64])) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [2, 2])) {
return 0;
}
}
{
my $x_ndarray = MFOP->matrix(FOP->seq(1, 6), 2, 3);
my $y_ndarray = FOP->seq(1, 3);
my $ret_ndarray = MFOP->mul($x_ndarray, $y_ndarray);
unless ($ret_ndarray is_type R::NDArray::Float) {
return 0;
}
unless (Array->equals_float($ret_ndarray->data, [(float)22, 28])) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [2, 1])) {
return 0;
}
}
# Exceptions
{
{
my $x_ndarray = MFOP->matrix(FOP->seq(1, 6), 2, 3);
my $y_ndarray = MFOP->matrix(FOP->seq(1, 6), 3, 2);
eval { MFOP->mul(undef, $y_ndarray); }
unless ($@) {
return 0;
}
}
{
my $x_ndarray = FOP->c(FOP->seq(1, 24), [2, 3, 4]);
my $y_ndarray = MFOP->matrix(FOP->seq(1, 6), 3, 2);
eval { MFOP->mul($x_ndarray, $y_ndarray); }
unless ($@) {
return 0;
}
}
{
my $x_ndarray = MFOP->matrix(FOP->seq(1, 6), 2, 3);
my $y_ndarray = MFOP->matrix(FOP->seq(1, 6), 3, 2);
eval { MFOP->mul($x_ndarray, undef); }
unless ($@) {
return 0;
}
}
{
my $x_ndarray = MFOP->matrix(FOP->seq(1, 6), 2, 3);
my $y_ndarray = FOP->c(FOP->seq(1, 24), [3, 2, 4]);
eval { MFOP->mul($x_ndarray, $y_ndarray); }
unless ($@) {
return 0;
}
}
{
my $x_ndarray = MFOP->matrix(FOP->seq(1, 4), 2, 2);
my $y_ndarray = MFOP->matrix(FOP->seq(1, 6), 3, 2);
eval { MFOP->mul($x_ndarray, $y_ndarray); }
unless ($@) {
return 0;
}
}
}
return 1;
}
static method t : int () {
{
my $seq_ndarray = FOP->seq(1, 6);
my $x_ndarray = MFOP->matrix(FOP->seq(1, 6), 2, 3);
my $ret_ndarray = MFOP->t($x_ndarray);
unless ($ret_ndarray is_type R::NDArray::Float) {
return 0;
}
unless (Array->equals_float($ret_ndarray->data, [(float)1, 3, 5, 2, 4, 6])) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [3, 2])) {
return 0;
}
}
# Exceptions
{
{
my $x_ndarray = MFOP->matrix(FOP->seq(1, 6), 2, 3);
eval { MFOP->t(undef); }
unless ($@) {
return 0;
}
}
{
my $x_ndarray = FOP->c(FOP->seq(1, 24), [2, 3, 4]);
eval { MFOP->t($x_ndarray); }
unless ($@) {
return 0;
}
}
}
return 1;
}
static method det : int () {
{
my $seq_ndarray = FOP->seq(1, 4);
my $x_ndarray = MFOP->matrix(FOP->seq(1, 4), 2, 2);
my $ret_ndarray = MFOP->det($x_ndarray);
unless ($ret_ndarray is_type R::NDArray::Float) {
return 0;
}
unless (Array->equals_float($ret_ndarray->data, [(float)-2])) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [1])) {
return 0;
}
}
# Exceptions
{
{
my $x_ndarray = MFOP->matrix(FOP->seq(1, 4), 2, 2);
eval { MFOP->det(undef); }
unless ($@) {
return 0;
}
}
{
my $x_ndarray = MFOP->matrix(FOP->seq(1, 2), 2, 1);
eval { MFOP->det($x_ndarray); }
unless ($@) {
return 0;
}
}
}
return 1;
}
static method solve : int () {
{
my $x_ndarray = MFOP->matrix([(float)1, 2, 1, 3], 2, 2);
my $ret_ndarray = MFOP->solve($x_ndarray);
unless ($ret_ndarray is_type R::NDArray::Float) {
return 0;
}
unless (Array->equals_float($ret_ndarray->data, [(float)3, -2, -1, 1])) {
return 0;
}
unless (Array->equals_int($ret_ndarray->dim, [2, 2])) {
return 0;
}
}
# Exceptions
{
{
my $x_ndarray = MFOP->matrix([(float)1, 2, 1, 3], 2, 2);
eval { MFOP->solve(undef); }
unless ($@) {
return 0;
}
}
{
my $x_ndarray = MFOP->matrix([(float)1, 2], 2, 1);
eval { MFOP->solve($x_ndarray); }
unless ($@) {
return 0;
}
}
{
my $x_ndarray = MFOP->matrix([(float)1, 2, 1, 2], 2, 2);
eval { MFOP->solve($x_ndarray); }
unless ($@) {
return 0;
}
}
}
return 1;
}
static method eigen : int () {
{
my $x_ndarray = MFOP->matrix([(float)3, 2, 1, 2], 2, 2);
my $ret_ndarray_h = MFOP->eigen($x_ndarray);
my $ret_ndarray_eigen_vectors = $ret_ndarray_h->get_float_complex("vectors");
my $ret_ndarray_eigen_values = $ret_ndarray_h->get_float_complex("values");
unless ($ret_ndarray_eigen_values is_type R::NDArray::FloatComplex) {
return 0;
}
unless ($ret_ndarray_eigen_values->data->[0]{re} < 4 + 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_values->data->[0]{re} > 4 - 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_values->data->[0]{im} < 0 + 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_values->data->[0]{im} > 0 - 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_values->data->[1]{re} < 1 + 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_values->data->[1]{re} > 1 - 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_values->data->[1]{im} < 0 + 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_values->data->[1]{im} > 0 - 1e-5) {
return 0;
}
unless (Array->equals_int($ret_ndarray_eigen_values->dim, [2])) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[0]{re} < 0.7071068 + 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[0]{re} > 0.7071068 - 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[0]{im} < 0 + 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[0]{im} > 0 - 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[1]{re} < 0.7071068 + 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[1]{re} > 0.7071068 - 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[1]{im} < 0 + 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[1]{im} > 0 - 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[2]{re} < -0.4472136 + 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[2]{re} > -0.4472136 - 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[2]{im} < 0 + 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[2]{im} > 0 - 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[3]{re} < 0.8944272 + 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[3]{re} > 0.8944272 - 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[3]{im} < 0 + 1e-5) {
return 0;
}
unless ($ret_ndarray_eigen_vectors->data->[3]{im} > 0 - 1e-5) {
return 0;
}
unless (Array->equals_int($ret_ndarray_eigen_vectors->dim, [2, 2])) {
return 0;
}
}
# Exceptions
{
{
my $x_ndarray = MFOP->matrix([(float)3, 2, 1, 2], 2, 2);
eval { MFOP->eigen(undef); }
unless ($@) {
return 0;
}
}
{
my $x_ndarray = MFOP->matrix([(float)3, 2], 2, 1);
eval { MFOP->eigen($x_ndarray); }
unless ($@) {
return 0;
}
}
}
return 1;
}
}