blob: 8a7eb9569605bec6afb5216ffdcf108e0de466e1 [file] [log] [blame]
m4_include(`SQLCommon.m4')
CREATE TABLE s(
row_id INT8,
col_id INT8,
val INT4
)
m4_ifdef(`__GREENPLUM__',
`WITH (APPENDONLY=TRUE) DISTRIBUTED BY (row_id)');
INSERT INTO s VALUES(1, 1, 1) , (1, 2, 3) , (2, 1, 4) , (2, 2, 5) , (3, 1, 7) ,
(3, 2, 8), (3, 3, 0);
SELECT * FROM s order by row_id;
DROP TABLE IF EXISTS s_t;
SELECT matrix_trans('s', 'row=row_id, col=col_id, val=val', 's_t', 'row=row_num, col=col_num, val=val');
SELECT * from s_t order by row_num;
DROP TABLE IF EXISTS d;
SELECT matrix_densify('s', 'row=row_id, col=col_id, val=val', 'd');
SELECT * FROM d order by row_id;
DROP TABLE IF EXISTS d_t;
SELECT matrix_trans('d', 'row=row_id', 'd_t');
SELECT * FROM d_t order by row_id;
DROP TABLE IF EXISTS s;
SELECT matrix_sparsify('d', 'row=row_id', 's', 'row=row_id, col=col_id, val=val');
SELECT * from s order by row_id;
DROP TABLE IF EXISTS s2;
SELECT matrix_mult('s', 'row=row_id, col=col_id, val=val, trans=false',
's_t', 'row=row_num, col=col_num, val=val, trans=false', 's2');
SELECT * FROM s2;
DROP TABLE IF EXISTS d2;
SELECT matrix_mult('d', 'row=row_id', 'd_t', 'row=row_id', 'd2');
SELECT * FROM d2;
DROP TABLE IF EXISTS sd;
SELECT matrix_mult('s', 'row=row_id, col=col_id, val=val, trans=false',
'd', 'row=row_id, trans=true', 'sd');
SELECT * FROM sd;
DROP TABLE IF EXISTS ds;
SELECT matrix_mult('d', 'row=row_id', 's', 'row=row_id, col=col_id, val=val', 'ds');
SELECT * FROM ds;
DROP TABLE IF EXISTS dd;
SELECT matrix_max('d', 'row=row_id', 1, 'dd', true);
SELECT * from dd;
DROP TABLE IF EXISTS ss;
SELECT matrix_max('s', 'row=row_id, col=col_id, val=val', 1, 'ss', true);
SELECT * from ss;
DROP TABLE IF EXISTS dd;
SELECT matrix_max('d', 'row=row_id', 2, 'dd', true);
SELECT * from dd;
DROP TABLE IF EXISTS ss;
SELECT matrix_max('s', 'row=row_id, col=col_id, val=val', 2, 'ss', true);
SELECT * from ss;
DROP TABLE IF EXISTS dd;
SELECT matrix_min('d', 'row=row_id', 2, 'dd', true);
SELECT * from dd;
DROP TABLE IF EXISTS ss;
SELECT matrix_min('s', 'row=row_id, col=col_id, val=val', 2, 'ss', true);
SELECT * from ss;
DROP TABLE IF EXISTS dd;
SELECT matrix_min('d', 'row=row_id', 1, 'dd', true);
SELECT * from dd;
DROP TABLE IF EXISTS ss;
SELECT matrix_min('s', 'row=row_id, col=col_id, val=val', 1, 'ss', true);
SELECT * from ss;
SELECT matrix_extract_row('d', 'row=row_id', 3);
SELECT matrix_extract_col('d', 'row=row_id', 3);
SELECT matrix_extract_row('s', 'row=row_id, col=col_id, val=val', 1);
SELECT matrix_extract_col('s', 'row=row_id, col=col_id, val=val', 1);
DROP TABLE IF EXISTS d_d;
SELECT matrix_square('d', 'row=row_id', 'd_d');
SELECT * FROM d_d;
DROP TABLE IF EXISTS s3;
SELECT matrix_add('s', 'row=row_id, col=col_id, val=val',
's', 'row=row_id, col=col_id, val=val',
's3');
SELECT * FROM s3;
DROP TABLE IF EXISTS d3;
SELECT matrix_add('d', 'row=row_id', 'd', 'row=row_id', 'd3');
SELECT * FROM d3;
DROP TABLE IF EXISTS sd;
SELECT matrix_add('s', 'row=row_id, col=col_id, val=val', 'd', 'row=row_id', 'sd1');
SELECT * FROM sd1;
DROP TABLE IF EXISTS s3;
SELECT matrix_sub('s', 'row=row_id, col=col_id, val=val',
's', 'row=row_id, col=col_id, val=val',
's3');
SELECT * FROM s3;
DROP TABLE IF EXISTS d3;
SELECT matrix_sub('d', 'row=row_id', 'd', 'row=row_id', 'd3');
SELECT * FROM d3;
DROP TABLE IF EXISTS sd1;
SELECT matrix_sub('s', 'row=row_id, col=col_id, val=val', 'd', 'row=row_id', 'sd1');
SELECT * FROM sd1;
DROP TABLE IF EXISTS s3;
SELECT matrix_elem_mult('s', 'row=row_id, col=col_id, val=val',
's', 'row=row_id, col=col_id, val=val',
's3');
SELECT * FROM s3;
DROP TABLE IF EXISTS d3;
SELECT matrix_elem_mult('d', 'row=row_id', 'd', 'row=row_id', 'd3');
SELECT * FROM d3;
DROP TABLE IF EXISTS sd1;
SELECT matrix_elem_mult('s', 'row=row_id, col=col_id, val=val', 'd', 'row=row_id', 'sd1');
SELECT * FROM sd1;
-- sd1 should contain same number of rows as s
SELECT assert(n_rows = 7, 'bad matrix element-wise mult dense')
from (select count(*) as n_rows from sd1) t;
SELECT assert(n_rows = 3, 'bad matrix element-wise add dense')
from (select count(*) as n_rows from d3) t;
CREATE TABLE b(
row_id INT4,
col_id INT4,
block INT4[]
)
m4_ifdef(`__GREENPLUM__',
`WITH (APPENDONLY=TRUE) DISTRIBUTED BY (row_id)');
INSERT INTO b VALUES(1, 1, array[[1,2], [3,4]]);
INSERT INTO b VALUES(2, 1, array[[5,6], [7,8]]);
INSERT INTO b VALUES(3, 1, array[[9,10]]);
SELECT matrix_mem_trans(array[[1,2,3], [4,5,6]]);
SELECT matrix_mem_mult(array[[1,2,3], [4,5,6]], array[[1,4],[2,5],[3,6]]);
SELECT matrix_mem_mult(array[[1,2,3], [4,5,6]], array[[1,2,3], [4,5,6]], true);
DROP TABLE if exists b_t;
SELECT matrix_block_trans('b', 'row=row_id, col=col_id, val=block', 'b_t', NULL);
SELECT * FROM b_t;
DROP TABLE if exists b2;
SELECT matrix_block_square('b', 'row=row_id, col=col_id, val=block', 'b2', NULL);
SELECT * FROM b2;
DROP TABLE if exists b2;
SELECT matrix_block_mult('b', 'row=row_id, col=col_id, val=block',
'b_t', 'row=row_id, col=col_id, val=block',
'b2', NULL);
SELECT * FROM b2;
DROP TABLE if exists d_b;
SELECT matrix_blockize('d', 'row=row_id', 2, 2, 'd_b');
SELECT * FROM d order by row_id;
SELECT * FROM d_b;
DROP TABLE if exists d_r;
SELECT matrix_unblockize('d_b', 'row=row_id', 'd_r', NULL);
SELECT * FROM d_r;
DROP TABLE IF EXISTS identity;
CREATE TABLE identity(row_id INTEGER, row_vec DOUBLE PRECISION[]);
INSERT INTO identity VALUES
(1, array[1, 0, 0]), (2, array[0, 1, 0]), (3, array[0, 0, 1]);
SELECT assert(relative_error(result,
ARRAY[3, 3, 1,0,0, 0,1,0, 0,0,1]) < 1e-6,
'incorrect result for inverse')
FROM (
SELECT array_to_1d(__matrix_dense_inverse(3, row_id - 1, row_vec)) as result
FROM identity
) q;
CREATE TABLE random_matrix(row_id INTEGER, row_vec DOUBLE PRECISION[]);
INSERT INTO random_matrix VALUES
(1, array[2, 2, 0]), (2, array[15, 2, 0]), (3, array[0, 5, 2]);
SELECT assert(relative_error(result,
ARRAY[3, 3, -0.07692308,0.07692308,0,
0.57692308, -0.07692308,0,
-1.44230769,0.19230769,0.5]) < 1e-6,
'incorrect result for inverse')
FROM (
SELECT array_to_1d(__matrix_dense_inverse(3, row_id - 1, row_vec)) as result
FROM random_matrix
) q;
CREATE TABLE random_sparse_matrix(row_id INTEGER, col_id INTEGER, val DOUBLE PRECISION);
INSERT INTO random_sparse_matrix VALUES
(1, 1, 2), (1, 2, 2), (2, 1, 15), (2, 2, 2), (3, 2, 5), (3, 3, 2);
SELECT assert(relative_error(result,
ARRAY[3, 3, -0.07692308,0.07692308,0, 0.57692308,-0.07692308,0, -1.44230769,0.19230769,0.5]) < 1e-6,
'incorrect result for inverse')
FROM (
SELECT array_to_1d(__matrix_sparse_inverse(3, 3, row_id - 1, col_id - 1, val)) as result
FROM random_sparse_matrix
) q;