12 m4_include(`SQLCommon.m4
')
243 ------------------ Linear Systems ------------------------------
245 CREATE TYPE MADLIB_SCHEMA.dense_linear_solver_result AS (
246 solution DOUBLE PRECISION[],
247 residual_norm DOUBLE PRECISION,
251 CREATE TYPE MADLIB_SCHEMA.residual_norm_result AS (
252 residual_norm DOUBLE PRECISION
256 ------------------------ Compute the residuals ------------------------------
258 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.dense_residual_norm_transition(
259 state MADLIB_SCHEMA.bytea8,
260 a DOUBLE PRECISION[],
262 x DOUBLE PRECISION[])
263 RETURNS MADLIB_SCHEMA.bytea8
265 LANGUAGE C IMMUTABLE STRICT;
267 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.dense_residual_norm_merge_states(
268 state1 MADLIB_SCHEMA.bytea8,
269 state2 MADLIB_SCHEMA.bytea8)
270 RETURNS MADLIB_SCHEMA.bytea8
272 LANGUAGE C IMMUTABLE STRICT;
275 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.dense_residual_norm_final(
276 state MADLIB_SCHEMA.bytea8)
277 RETURNS MADLIB_SCHEMA.residual_norm_result
279 LANGUAGE C IMMUTABLE STRICT;
302 CREATE AGGREGATE MADLIB_SCHEMA.dense_residual_norm(
303 /*+ "left_hand_side" */ DOUBLE PRECISION[],
304 /*+ "right_hand_side" */ DOUBLE PRECISION,
305 /*+ "solution" */ DOUBLE PRECISION[])(
306 STYPE=MADLIB_SCHEMA.bytea8,
307 SFUNC=MADLIB_SCHEMA.dense_residual_norm_transition,
308 m4_ifdef(`__GREENPLUM__',`PREFUNC=MADLIB_SCHEMA.dense_residual_norm_merge_states,
')
309 FINALFUNC=MADLIB_SCHEMA.dense_residual_norm_final,
313 ------------------ Direct Method ------------------------------
315 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.dense_direct_linear_system_transition(
316 state DOUBLE PRECISION[],
318 a DOUBLE PRECISION[],
322 RETURNS DOUBLE PRECISION[]
324 LANGUAGE C IMMUTABLE STRICT;
326 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.dense_direct_linear_system_merge_states(
327 state1 DOUBLE PRECISION[],
328 state2 DOUBLE PRECISION[])
329 RETURNS DOUBLE PRECISION[]
331 LANGUAGE C IMMUTABLE STRICT;
334 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.dense_direct_linear_system_final(
335 state DOUBLE PRECISION[])
336 RETURNS MADLIB_SCHEMA.dense_linear_solver_result
338 LANGUAGE C IMMUTABLE STRICT;
367 CREATE AGGREGATE MADLIB_SCHEMA.dense_direct_linear_system(
368 /*+ "row_id" */ INTEGER,
369 /*+ "left_hand_side" */ DOUBLE PRECISION[],
370 /*+ "right_hand_side" */ DOUBLE PRECISION,
371 /*+ "numEquations" */ INTEGER,
372 /*+ "algorithm" */ INTEGER)(
373 STYPE=DOUBLE PRECISION[],
374 SFUNC=MADLIB_SCHEMA.dense_direct_linear_system_transition,
375 m4_ifdef(`__GREENPLUM__',`PREFUNC=MADLIB_SCHEMA.dense_direct_linear_system_merge_states,
')
376 FINALFUNC=MADLIB_SCHEMA.dense_direct_linear_system_final,
377 INITCOND='{0,0,0,0,0,0}
'
381 --------------------------- Interface ----------------------------------
386 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.linear_solver_dense(
389 RETURNS VARCHAR AS $$
390 PythonFunction(linear_systems, dense_linear_systems, linear_solver_dense_help)
391 $$ LANGUAGE plpythonu;
393 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.linear_solver_dense()
394 RETURNS VARCHAR AS $$
396 RETURN MADLIB_SCHEMA.linear_solver_dense('
');
398 $$ LANGUAGE plpgsql VOLATILE;
428 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.linear_solver_dense(
429 source_table VARCHAR -- name of input table
430 , out_table VARCHAR -- name of output table
431 , row_id VARCHAR -- name of the column containing row_id
432 , left_hand_side VARCHAR -- name of columns with lhs
433 , right_hand_side VARCHAR -- name of columns with rhs
434 , grouping_cols VARCHAR -- name of columns to group by
435 , optimizer VARCHAR -- Name of the optimizer
436 , optimizer_options VARCHAR -- Optimal parameters of the optimizer
439 PythonFunction(linear_systems, dense_linear_systems, linear_solver_dense)
440 $$ LANGUAGE plpythonu;
444 -- Default Variable calls for linear_solver_dense
445 ------------------------------------------------------------------------------
450 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.linear_solver_dense(
451 source_table VARCHAR -- name of input table
452 , out_table VARCHAR -- name of output table
453 , row_id VARCHAR -- name of the column containing row_id
454 , left_hand_side VARCHAR -- name of columns with lhs
455 , right_hand_side VARCHAR -- name of columns with rhs
459 PERFORM MADLIB_SCHEMA.linear_solver_dense(
470 $$ LANGUAGE plpgsql VOLATILE;
476 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.linear_solver_dense(
477 source_table VARCHAR -- name of input table
478 , out_table VARCHAR -- name of output table
479 , row_id VARCHAR -- name of the column containing row_id
480 , left_hand_side VARCHAR -- name of columns with lhs
481 , right_hand_side VARCHAR -- name of columns with rhs
482 , grouping_cols VARCHAR -- name of columns to group by
486 PERFORM MADLIB_SCHEMA.linear_solver_dense(
496 $$ LANGUAGE plpgsql VOLATILE;
501 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.linear_solver_dense(
502 source_table VARCHAR -- name of input table
503 , out_table VARCHAR -- name of output table
504 , row_id VARCHAR -- name of the column containing row_id
505 , left_hand_side VARCHAR -- name of columns with lhs
506 , right_hand_side VARCHAR -- name of columns with rhs
507 , grouping_cols VARCHAR -- name of columns to group by
508 , optimizer VARCHAR -- Name of the optimizer
512 PERFORM MADLIB_SCHEMA.linear_solver_dense(
522 $$ LANGUAGE plpgsql VOLATILE;