User Documentation
 All Files Functions Groups
matrix_op.sql_in
1 m4_include(`SQLCommon.m4')
2 
3 CREATE TYPE MADLIB_SCHEMA.matrix_result AS(
4  output_table TEXT
5 );
6 
7 CREATE OR REPLACE FUNCTION
8 MADLIB_SCHEMA.matrix_mult
9 (
10  matrix_a TEXT,
11  a_row TEXT,
12  a_col TEXT,
13  a_val TEXT,
14  a_trans BOOLEAN,
15  matrix_b TEXT,
16  b_row TEXT,
17  b_col TEXT,
18  b_val TEXT,
19  b_trans BOOLEAN,
20  matrix_r TEXT
21 )
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,
27  matrix_r)
28  return [matrix_r]
29 $$ LANGUAGE plpythonu;
30 
31 CREATE OR REPLACE FUNCTION
32 MADLIB_SCHEMA.matrix_mult
33 (
34  matrix_a TEXT,
35  a_trans BOOLEAN,
36  matrix_b TEXT,
37  b_trans BOOLEAN,
38  matrix_r TEXT
39 )
40 RETURNS MADLIB_SCHEMA.matrix_result AS $$
41  SELECT
42  MADLIB_SCHEMA.matrix_mult(
43  $1, NULL, NULL, NULL, $2,
44  $3, NULL, NULL, NULL, $4,
45  $5);
46 $$ LANGUAGE sql;
47 
48 CREATE OR REPLACE FUNCTION
49 MADLIB_SCHEMA.matrix_block_mult
50 (
51  matrix_a TEXT,
52  matrix_b TEXT,
53  matrix_r TEXT
54 )
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)
59  return [matrix_r]
60 $$ LANGUAGE plpythonu;
61 
62 CREATE OR REPLACE FUNCTION
63 MADLIB_SCHEMA.matrix_block_square
64 (
65  matrix_in TEXT,
66  matrix_out TEXT
67 )
68 RETURNS MADLIB_SCHEMA.matrix_result AS $$
69  PythonFunctionBodyOnly(`linalg', `matrix_op')
70  matrix_op.matrix_block_square(schema_madlib, matrix_in, matrix_out)
71  return [matrix_out]
72 $$ LANGUAGE plpythonu;
73 
74 CREATE OR REPLACE FUNCTION
75 MADLIB_SCHEMA.matrix_block_trans
76 (
77  matrix_in TEXT,
78  matrix_out TEXT
79 )
80 RETURNS MADLIB_SCHEMA.matrix_result AS $$
81  PythonFunctionBodyOnly(`linalg', `matrix_op')
82  matrix_op.matrix_block_trans(schema_madlib, matrix_in, matrix_out)
83  return [matrix_out]
84 $$ LANGUAGE plpythonu;
85 
86 CREATE OR REPLACE FUNCTION
87 MADLIB_SCHEMA.matrix_square
88 (
89  matrix_in TEXT,
90  matrix_out TEXT
91 )
92 RETURNS MADLIB_SCHEMA.matrix_result AS $$
93  PythonFunctionBodyOnly(`linalg', `matrix_op')
94  matrix_op.matrix_square(schema_madlib,
95  matrix_in, matrix_out)
96  return [matrix_out]
97 $$ LANGUAGE plpythonu;
98 
99 CREATE OR REPLACE FUNCTION
100 MADLIB_SCHEMA.matrix_trans
101 (
102  matrix_in TEXT,
103  in_row TEXT,
104  in_col TEXT,
105  in_val TEXT,
106  matrix_out TEXT,
107  use_temp_table BOOLEAN
108 )
109 RETURNS MADLIB_SCHEMA.matrix_result AS $$
110  PythonFunctionBodyOnly(`linalg', `matrix_op')
111  matrix_op.matrix_trans(schema_madlib,
112  matrix_in, in_row, in_col, in_val, matrix_out, use_temp_table)
113  return [matrix_out]
114 $$ LANGUAGE plpythonu;
115 
116 CREATE OR REPLACE FUNCTION
117 MADLIB_SCHEMA.matrix_trans
118 (
119  matrix_in TEXT,
120  matrix_out TEXT,
121  use_temp_table BOOLEAN
122 )
123 RETURNS MADLIB_SCHEMA.matrix_result AS $$
124  SELECT
125  MADLIB_SCHEMA.matrix_trans(
126  $1, NULL, NULL, NULL, $2, $3);
127 $$ LANGUAGE sql;
128 
129 CREATE OR REPLACE FUNCTION
130 MADLIB_SCHEMA.matrix_sparsify
131 (
132  matrix_in TEXT,
133  matrix_out TEXT,
134  use_temp_table BOOLEAN
135 )
136 RETURNS MADLIB_SCHEMA.matrix_result AS $$
137  PythonFunctionBodyOnly(`linalg', `matrix_op')
138  matrix_op.matrix_sparsify(matrix_in, matrix_out, use_temp_table)
139  return [matrix_out]
140 $$ LANGUAGE plpythonu;
141 
142 CREATE OR REPLACE FUNCTION
143 MADLIB_SCHEMA.matrix_densify
144 (
145  matrix_in TEXT,
146  in_row TEXT,
147  in_col TEXT,
148  in_val TEXT,
149  matrix_out TEXT,
150  use_temp_table BOOLEAN
151 )
152 RETURNS MADLIB_SCHEMA.matrix_result AS $$
153  PythonFunctionBodyOnly(`linalg', `matrix_op')
154  matrix_op.matrix_densify(schema_madlib,
155  matrix_in, in_row, in_col, in_val, matrix_out, use_temp_table)
156  return [matrix_out]
157 $$ LANGUAGE plpythonu;
158 
159 CREATE OR REPLACE FUNCTION
160 MADLIB_SCHEMA.__matrix_densify_sfunc
161 (
162  state FLOAT8[],
163  col_dim INT4,
164  col INT4,
165  val FLOAT8
166 )
167 RETURNS FLOAT8[]
168 AS 'MODULE_PATHNAME', 'matrix_densify_sfunc'
169 LANGUAGE C;
170 
171 CREATE OR REPLACE FUNCTION
172 MADLIB_SCHEMA.__rand_vector
173 (
174  dim INT4
175 )
176 RETURNS INT4[]
177 AS 'MODULE_PATHNAME', 'rand_vector'
178 LANGUAGE C STRICT;
179 
180 CREATE OR REPLACE FUNCTION
181 MADLIB_SCHEMA.__rand_block
182 (
183  row_dim INT4,
184  col_dim INT4
185 )
186 RETURNS INT4[]
187 AS 'MODULE_PATHNAME', 'rand_block'
188 LANGUAGE C STRICT;
189 
190 CREATE OR REPLACE FUNCTION
191 MADLIB_SCHEMA.__rand_block
192 (
193  dim INT4
194 )
195 RETURNS INT4[] AS $$
196  SELECT MADLIB_SCHEMA.__rand_block($1, $1);
197 $$ LANGUAGE sql STRICT;
198 
199 CREATE OR REPLACE FUNCTION
200 MADLIB_SCHEMA.__matrix_row_split
201 (
202  row_in FLOAT8[],
203  size INT4
204 )
205 RETURNS SETOF FLOAT8[]
206 AS 'MODULE_PATHNAME', 'row_split'
207 LANGUAGE C STRICT;
208 
209 CREATE OR REPLACE FUNCTION
210 MADLIB_SCHEMA.__matrix_blockize_sfunc
211 (
212  state FLOAT8[],
213  row_id INT4,
214  row_vec FLOAT8[],
215  rsize INT4
216 )
217 RETURNS FLOAT8[]
218 AS 'MODULE_PATHNAME', 'matrix_blockize_sfunc'
219 LANGUAGE C;
220 
221 CREATE OR REPLACE FUNCTION
222 MADLIB_SCHEMA.__matrix_unblockize_sfunc
223 (
224  state FLOAT8[],
225  total_col_dim INT4,
226  col_id INT4,
227  row_vec FLOAT8[]
228 )
229 RETURNS FLOAT8[]
230 AS 'MODULE_PATHNAME', 'matrix_unblockize_sfunc'
231 LANGUAGE C;
232 
233 DROP AGGREGATE IF EXISTS
234 MADLIB_SCHEMA.__matrix_densify_agg
235 (
236  INT4,
237  INT4,
238  FLOAT8
239 );
240 
241 CREATE AGGREGATE
242 MADLIB_SCHEMA.__matrix_densify_agg
243 (
244  INT4,
245  INT4,
246  FLOAT8
247 )
248 (
249  stype = FLOAT8[],
250  sfunc = MADLIB_SCHEMA.__matrix_densify_sfunc
251 );
252 
253 DROP AGGREGATE IF EXISTS
254 MADLIB_SCHEMA.__matrix_blockize_agg
255 (
256  INT4,
257  FLOAT8[],
258  INT4
259 );
260 
261 CREATE AGGREGATE
262 MADLIB_SCHEMA.__matrix_blockize_agg
263 (
264  INT4,
265  FLOAT8[],
266  INT4
267 )
268 (
269  stype = FLOAT8[],
270  sfunc = MADLIB_SCHEMA.__matrix_blockize_sfunc
271 );
272 
273 DROP AGGREGATE IF EXISTS
274 MADLIB_SCHEMA.__matrix_unblockize_agg
275 (
276  INT4,
277  INT4,
278  FLOAT8[]
279 );
280 
281 CREATE AGGREGATE
282 MADLIB_SCHEMA.__matrix_unblockize_agg
283 (
284  INT4,
285  INT4,
286  FLOAT8[]
287 )
288 (
289  stype = FLOAT8[],
290  sfunc = MADLIB_SCHEMA.__matrix_unblockize_sfunc
291 );
292 
293 CREATE OR REPLACE FUNCTION
294 MADLIB_SCHEMA.matrix_mem_mult
295 (
296  matrix_a FLOAT[],
297  matrix_b FLOAT[],
298  trans_b BOOLEAN
299 )
300 RETURNS FLOAT8[]
301 AS 'MODULE_PATHNAME', 'matrix_mem_mult'
302 LANGUAGE C;
303 
304 CREATE OR REPLACE FUNCTION
305 MADLIB_SCHEMA.matrix_mem_mult
306 (
307  matrix_a FLOAT[],
308  matrix_b FLOAT[]
309 )
310 RETURNS FLOAT8[] AS $$
311  SELECT MADLIB_SCHEMA.matrix_mem_mult($1, $2, false);
312 $$ LANGUAGE sql;
313 
314 CREATE OR REPLACE FUNCTION
315 MADLIB_SCHEMA.matrix_mem_trans
316 (
317  matrix FLOAT[]
318 )
319 RETURNS FLOAT8[]
320 AS 'MODULE_PATHNAME', 'matrix_mem_trans'
321 LANGUAGE C;
322 
323 CREATE OR REPLACE FUNCTION
324 MADLIB_SCHEMA.__matrix_mem_sum_sfunc
325 (
326  state FLOAT[],
327  matrix FLOAT[]
328 )
329 RETURNS FLOAT8[]
330 AS 'MODULE_PATHNAME', 'matrix_mem_sum_sfunc'
331 LANGUAGE C;
332 
333 DROP AGGREGATE IF EXISTS
334 MADLIB_SCHEMA.__matrix_mem_sum
335 (
336  FLOAT[],
337  FLOAT[]
338 );
339 
340 CREATE AGGREGATE
341 MADLIB_SCHEMA.__matrix_mem_sum
342 (
343  FLOAT[]
344 )
345 (
346  stype = FLOAT8[],
347  sfunc = MADLIB_SCHEMA.__matrix_mem_sum_sfunc
348 );
349 
350 CREATE OR REPLACE FUNCTION
351 MADLIB_SCHEMA.__matrix_column_to_array_format
352 (
353  matrix_in TEXT,
354  matrix_out TEXT
355 )
356 RETURNS MADLIB_SCHEMA.matrix_result AS $$
357  PythonFunctionBodyOnly(`linalg', `matrix_op')
358  matrix_op.__matrix_column_to_array_format(matrix_in, matrix_out)
359  return [matrix_out]
360 $$ LANGUAGE plpythonu STRICT;
361 
362 CREATE OR REPLACE FUNCTION
363 MADLIB_SCHEMA.matrix_blockize
364 (
365  matrix_in TEXT,
366  rsize INT4,
367  csize INT4,
368  matrix_out TEXT
369 )
370 RETURNS MADLIB_SCHEMA.matrix_result AS $$
371  PythonFunctionBodyOnly(`linalg', `matrix_op')
372  matrix_op.matrix_blockize(schema_madlib, matrix_in, rsize, csize, matrix_out)
373  return [matrix_out]
374 $$ LANGUAGE plpythonu;
375 
376 CREATE OR REPLACE FUNCTION
377 MADLIB_SCHEMA.matrix_unblockize
378 (
379  matrix_in TEXT,
380  matrix_out TEXT
381 )
382 RETURNS MADLIB_SCHEMA.matrix_result AS $$
383  PythonFunctionBodyOnly(`linalg', `matrix_op')
384  matrix_op.matrix_unblockize(schema_madlib, matrix_in, matrix_out)
385  return [matrix_out]
386 $$ LANGUAGE plpythonu;
387 
388 CREATE OR REPLACE FUNCTION
389 MADLIB_SCHEMA.__matrix_unnest_block
390 (
391  block FLOAT8[]
392 )
393 RETURNS SETOF FLOAT8[]
394 AS 'MODULE_PATHNAME', 'unnest_block'
395 LANGUAGE C IMMUTABLE STRICT;