1 m4_include(`SQLCommon.m4
')
3 CREATE TYPE MADLIB_SCHEMA.matrix_result AS(
7 CREATE OR REPLACE FUNCTION
8 MADLIB_SCHEMA.matrix_mult
22 RETURNS MADLIB_SCHEMA.matrix_result AS $$
23 PythonFunctionBodyOnly(`linalg', `matrix_op
')
24 matrix_op.matrix_mult(schema_madlib,
25 matrix_a, a_row, a_col, a_val, a_trans,
26 matrix_b, b_row, b_col, b_val, b_trans,
29 $$ LANGUAGE plpythonu;
31 CREATE OR REPLACE FUNCTION
32 MADLIB_SCHEMA.matrix_mult
40 RETURNS MADLIB_SCHEMA.matrix_result AS $$
42 MADLIB_SCHEMA.matrix_mult(
43 $1, NULL, NULL, NULL, $2,
44 $3, NULL, NULL, NULL, $4,
48 CREATE OR REPLACE FUNCTION
49 MADLIB_SCHEMA.matrix_block_mult
55 RETURNS MADLIB_SCHEMA.matrix_result AS $$
56 PythonFunctionBodyOnly(`linalg', `matrix_op
')
57 matrix_op.matrix_block_mult(schema_madlib,
58 matrix_a, matrix_b, matrix_r)
60 $$ LANGUAGE plpythonu;
62 CREATE OR REPLACE FUNCTION
63 MADLIB_SCHEMA.matrix_block_square
68 RETURNS MADLIB_SCHEMA.matrix_result AS $$
69 PythonFunctionBodyOnly(`linalg', `matrix_op
')
70 matrix_op.matrix_block_square(schema_madlib, matrix_in, matrix_out)
72 $$ LANGUAGE plpythonu;
74 CREATE OR REPLACE FUNCTION
75 MADLIB_SCHEMA.matrix_block_trans
79 use_temp_table BOOLEAN
81 RETURNS MADLIB_SCHEMA.matrix_result AS $$
82 PythonFunctionBodyOnly(`linalg', `matrix_op
')
83 matrix_op.matrix_block_trans(schema_madlib, matrix_in, matrix_out, use_temp_table)
85 $$ LANGUAGE plpythonu;
87 CREATE OR REPLACE FUNCTION
88 MADLIB_SCHEMA.matrix_block_trans
93 RETURNS MADLIB_SCHEMA.matrix_result AS $$
94 select MADLIB_SCHEMA.matrix_block_trans($1, $2, FALSE)
97 CREATE OR REPLACE FUNCTION
98 MADLIB_SCHEMA.matrix_square
103 RETURNS MADLIB_SCHEMA.matrix_result AS $$
104 PythonFunctionBodyOnly(`linalg', `matrix_op
')
105 matrix_op.matrix_square(schema_madlib,
106 matrix_in, matrix_out)
108 $$ LANGUAGE plpythonu;
110 CREATE OR REPLACE FUNCTION
111 MADLIB_SCHEMA.matrix_trans
118 use_temp_table BOOLEAN
120 RETURNS MADLIB_SCHEMA.matrix_result AS $$
121 PythonFunctionBodyOnly(`linalg', `matrix_op
')
122 matrix_op.matrix_trans(schema_madlib,
123 matrix_in, in_row, in_col, in_val, matrix_out, use_temp_table)
125 $$ LANGUAGE plpythonu;
127 CREATE OR REPLACE FUNCTION
128 MADLIB_SCHEMA.matrix_trans
132 use_temp_table BOOLEAN
134 RETURNS MADLIB_SCHEMA.matrix_result AS $$
136 MADLIB_SCHEMA.matrix_trans(
137 $1, NULL, NULL, NULL, $2, $3);
140 CREATE OR REPLACE FUNCTION
141 MADLIB_SCHEMA.matrix_sparsify
145 use_temp_table BOOLEAN
147 RETURNS MADLIB_SCHEMA.matrix_result AS $$
148 PythonFunctionBodyOnly(`linalg', `matrix_op
')
149 matrix_op.matrix_sparsify(matrix_in, matrix_out, use_temp_table)
151 $$ LANGUAGE plpythonu;
153 CREATE OR REPLACE FUNCTION
154 MADLIB_SCHEMA.matrix_densify
161 use_temp_table BOOLEAN
163 RETURNS MADLIB_SCHEMA.matrix_result AS $$
164 PythonFunctionBodyOnly(`linalg', `matrix_op
')
165 matrix_op.matrix_densify(schema_madlib,
166 matrix_in, in_row, in_col, in_val, matrix_out, use_temp_table)
168 $$ LANGUAGE plpythonu;
170 CREATE OR REPLACE FUNCTION
171 MADLIB_SCHEMA.__matrix_densify_sfunc
179 AS 'MODULE_PATHNAME
', 'matrix_densify_sfunc
'
182 CREATE OR REPLACE FUNCTION
183 MADLIB_SCHEMA.__rand_vector
188 AS 'MODULE_PATHNAME
', 'rand_vector
'
191 CREATE OR REPLACE FUNCTION
192 MADLIB_SCHEMA.__rand_block
198 AS 'MODULE_PATHNAME
', 'rand_block
'
201 CREATE OR REPLACE FUNCTION
202 MADLIB_SCHEMA.__rand_block
207 SELECT MADLIB_SCHEMA.__rand_block($1, $1);
208 $$ LANGUAGE sql STRICT;
210 CREATE OR REPLACE FUNCTION
211 MADLIB_SCHEMA.__matrix_row_split
216 RETURNS SETOF FLOAT8[]
217 AS 'MODULE_PATHNAME
', 'row_split
'
220 CREATE OR REPLACE FUNCTION
221 MADLIB_SCHEMA.__matrix_blockize_sfunc
229 AS 'MODULE_PATHNAME
', 'matrix_blockize_sfunc
'
232 CREATE OR REPLACE FUNCTION
233 MADLIB_SCHEMA.__matrix_unblockize_sfunc
241 AS 'MODULE_PATHNAME
', 'matrix_unblockize_sfunc
'
244 DROP AGGREGATE IF EXISTS
245 MADLIB_SCHEMA.__matrix_densify_agg
253 MADLIB_SCHEMA.__matrix_densify_agg
261 sfunc = MADLIB_SCHEMA.__matrix_densify_sfunc
264 DROP AGGREGATE IF EXISTS
265 MADLIB_SCHEMA.__matrix_blockize_agg
273 MADLIB_SCHEMA.__matrix_blockize_agg
281 sfunc = MADLIB_SCHEMA.__matrix_blockize_sfunc
284 DROP AGGREGATE IF EXISTS
285 MADLIB_SCHEMA.__matrix_unblockize_agg
293 MADLIB_SCHEMA.__matrix_unblockize_agg
301 sfunc = MADLIB_SCHEMA.__matrix_unblockize_sfunc
304 CREATE OR REPLACE FUNCTION
305 MADLIB_SCHEMA.matrix_mem_mult
312 AS 'MODULE_PATHNAME
', 'matrix_mem_mult
'
315 CREATE OR REPLACE FUNCTION
316 MADLIB_SCHEMA.matrix_mem_mult
321 RETURNS FLOAT8[] AS $$
322 SELECT MADLIB_SCHEMA.matrix_mem_mult($1, $2, false);
325 CREATE OR REPLACE FUNCTION
326 MADLIB_SCHEMA.matrix_mem_trans
331 AS 'MODULE_PATHNAME
', 'matrix_mem_trans
'
334 CREATE OR REPLACE FUNCTION
335 MADLIB_SCHEMA.__matrix_mem_sum_sfunc
341 AS 'MODULE_PATHNAME
', 'matrix_mem_sum_sfunc
'
344 DROP AGGREGATE IF EXISTS
345 MADLIB_SCHEMA.__matrix_mem_sum
351 MADLIB_SCHEMA.__matrix_mem_sum
357 sfunc = MADLIB_SCHEMA.__matrix_mem_sum_sfunc
360 CREATE OR REPLACE FUNCTION
361 MADLIB_SCHEMA.__matrix_column_to_array_format
368 RETURNS MADLIB_SCHEMA.matrix_result AS $$
369 PythonFunctionBodyOnly(`linalg', `matrix_op
')
370 matrix_op.__matrix_column_to_array_format(matrix_in, row_id, matrix_out, istemp)
372 $$ LANGUAGE plpythonu STRICT;
374 CREATE OR REPLACE FUNCTION
375 MADLIB_SCHEMA.matrix_blockize
382 RETURNS MADLIB_SCHEMA.matrix_result AS $$
383 PythonFunctionBodyOnly(`linalg', `matrix_op
')
384 matrix_op.matrix_blockize(schema_madlib, matrix_in, rsize, csize, matrix_out)
386 $$ LANGUAGE plpythonu;
388 CREATE OR REPLACE FUNCTION
389 MADLIB_SCHEMA.matrix_unblockize
394 RETURNS MADLIB_SCHEMA.matrix_result AS $$
395 PythonFunctionBodyOnly(`linalg', `matrix_op
')
396 matrix_op.matrix_unblockize(schema_madlib, matrix_in, matrix_out)
398 $$ LANGUAGE plpythonu;
400 CREATE OR REPLACE FUNCTION
401 MADLIB_SCHEMA.__matrix_unnest_block
405 RETURNS SETOF FLOAT8[]
406 AS 'MODULE_PATHNAME
', 'unnest_block
'
407 LANGUAGE C IMMUTABLE STRICT;
409 ------------------ Scale and add matrices ------------------------------
429 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.matrix_scale_and_add(
432 scale DOUBLE PRECISION,
436 PythonFunction(linalg, matrix_op, matrix_scale_and_add)
437 $$ LANGUAGE plpythonu;
440 ------------------ Matrix Norms ------------------------------
458 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.matrix_norm(
462 RETURNS DOUBLE PRECISION AS $$
463 PythonFunction(linalg, matrix_op, matrix_norm)
464 $$ LANGUAGE plpythonu;
466 CREATE OR REPLACE FUNCTION
467 MADLIB_SCHEMA.matrix_norm(
470 RETURNS DOUBLE PRECISION AS $$
471 SELECT MADLIB_SCHEMA.matrix_norm($1, NULL)