12 m4_include(`SQLCommon.m4
')
362 ------------------ Linear Systems ------------------------------
364 CREATE TYPE MADLIB_SCHEMA.sparse_linear_solver_result AS (
365 solution DOUBLE PRECISION[],
366 residual_norm DOUBLE PRECISION,
370 ------------------ In memory Iterative ------------------------------
372 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.sparse_inmem_iterative_linear_system_transition(
373 state DOUBLE PRECISION[],
376 value DOUBLE PRECISION,
383 termToler DOUBLE PRECISION)
384 RETURNS DOUBLE PRECISION[]
386 LANGUAGE C IMMUTABLE STRICT;
388 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.sparse_inmem_iterative_linear_system_merge_states(
389 state1 DOUBLE PRECISION[],
390 state2 DOUBLE PRECISION[])
391 RETURNS DOUBLE PRECISION[]
393 LANGUAGE C IMMUTABLE STRICT;
396 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.sparse_inmem_iterative_linear_system_final(
397 state DOUBLE PRECISION[])
398 RETURNS MADLIB_SCHEMA.sparse_linear_solver_result
400 LANGUAGE C IMMUTABLE STRICT;
432 CREATE AGGREGATE MADLIB_SCHEMA.sparse_inmem_iterative_linear_system(
433 /*+ "row_id" */ INTEGER,
434 /*+ "col_id" */ INTEGER,
435 /*+ "value" */ DOUBLE PRECISION,
436 /*+ "right_hand_side" */ DOUBLE PRECISION,
437 /*+ "numEquations" */ INTEGER,
438 /*+ "numVars" */ INTEGER,
439 /*+ "nnz" */ INTEGER,
440 /*+ "algorithm" */ INTEGER,
441 /*+ "maxIter" */ INTEGER,
442 /*+ "termToler" */ DOUBLE PRECISION)(
443 STYPE=DOUBLE PRECISION[],
444 SFUNC=MADLIB_SCHEMA.sparse_inmem_iterative_linear_system_transition,
445 m4_ifdef(`__GREENPLUM__',`PREFUNC=MADLIB_SCHEMA.sparse_inmem_iterative_linear_system_merge_states,
')
446 FINALFUNC=MADLIB_SCHEMA.sparse_inmem_iterative_linear_system_final,
447 INITCOND='{0,0,0,0,0,0,0,0}
'
450 ------------------ Direct Method ------------------------------
452 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.sparse_direct_linear_system_transition(
453 state DOUBLE PRECISION[],
456 value DOUBLE PRECISION,
462 RETURNS DOUBLE PRECISION[]
464 LANGUAGE C IMMUTABLE STRICT;
466 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.sparse_direct_linear_system_merge_states(
467 state1 DOUBLE PRECISION[],
468 state2 DOUBLE PRECISION[])
469 RETURNS DOUBLE PRECISION[]
471 LANGUAGE C IMMUTABLE STRICT;
474 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.sparse_direct_linear_system_final(
475 state DOUBLE PRECISION[])
476 RETURNS MADLIB_SCHEMA.sparse_linear_solver_result
478 LANGUAGE C IMMUTABLE STRICT;
508 CREATE AGGREGATE MADLIB_SCHEMA.sparse_direct_linear_system(
509 /*+ "row_id" */ INTEGER,
510 /*+ "col_id" */ INTEGER,
511 /*+ "value" */ DOUBLE PRECISION,
512 /*+ "right_hand_side" */ DOUBLE PRECISION,
513 /*+ "numEquations" */ INTEGER,
514 /*+ "numVars" */ INTEGER,
515 /*+ "nnz" */ INTEGER,
516 /*+ "algorithm" */ INTEGER)(
517 STYPE=DOUBLE PRECISION[],
518 SFUNC=MADLIB_SCHEMA.sparse_direct_linear_system_transition,
519 m4_ifdef(`__GREENPLUM__',`PREFUNC=MADLIB_SCHEMA.sparse_direct_linear_system_merge_states,
')
520 FINALFUNC=MADLIB_SCHEMA.sparse_direct_linear_system_final,
521 INITCOND='{0,0,0,0,0,0}
'
525 --------------------------- Interface ----------------------------------
530 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.linear_solver_sparse(
533 RETURNS VARCHAR AS $$
534 PythonFunction(linear_systems, sparse_linear_systems, linear_solver_sparse_help)
535 $$ LANGUAGE plpythonu;
537 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.linear_solver_sparse()
538 RETURNS VARCHAR AS $$
540 RETURN MADLIB_SCHEMA.linear_solver_sparse('
');
542 $$ LANGUAGE plpgsql VOLATILE;
576 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.linear_solver_sparse(
577 lhs_table VARCHAR -- name of input lhs table
578 , rhs_table VARCHAR -- name of input rhs table
579 , out_table VARCHAR -- name of output table
580 , lhs_row_id VARCHAR -- column name with row_id
581 , lhs_col_id VARCHAR -- column name with col_id
582 , lhs_value VARCHAR -- column name with value
583 , rhs_row_id VARCHAR -- rhs row_id
584 , rhs_value VARCHAR -- rhs value
585 , num_vars INTEGER -- Number of variables
586 , grouping_cols VARCHAR -- name of columns to group by
587 , optimizer VARCHAR -- Name of the optimizer
588 , optimizer_options VARCHAR -- Optimal parameters of the optimizer
591 PythonFunction(linear_systems, sparse_linear_systems, linear_solver_sparse)
592 $$ LANGUAGE plpythonu;
596 -- Default Variable calls for linear_solver_sparse
597 ------------------------------------------------------------------------------
602 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.linear_solver_sparse(
603 lhs_table VARCHAR -- name of input lhs table
604 , rhs_table VARCHAR -- name of input rhs table
605 , out_table VARCHAR -- name of output table
606 , lhs_row_id VARCHAR -- column name with row_id
607 , lhs_col_id VARCHAR -- column name with col_id
608 , lhs_value VARCHAR -- column name with value
609 , rhs_row_id VARCHAR -- rhs row_id
610 , rhs_value VARCHAR -- rhs value
611 , num_vars INTEGER -- Number of variables
615 PERFORM MADLIB_SCHEMA.linear_solver_sparse(
630 $$ LANGUAGE plpgsql VOLATILE;
636 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.linear_solver_sparse(
637 lhs_table VARCHAR -- name of input lhs table
638 , rhs_table VARCHAR -- name of input rhs table
639 , out_table VARCHAR -- name of output table
640 , lhs_row_id VARCHAR -- column name with row_id
641 , lhs_col_id VARCHAR -- column name with col_id
642 , lhs_value VARCHAR -- column name with value
643 , rhs_row_id VARCHAR -- rhs row_id
644 , rhs_value VARCHAR -- rhs value
645 , num_vars INTEGER -- Number of variables
646 , grouping_cols VARCHAR -- name of columns to group by
650 PERFORM MADLIB_SCHEMA.linear_solver_sparse(
664 $$ LANGUAGE plpgsql VOLATILE;
669 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.linear_solver_sparse(
670 lhs_table VARCHAR -- name of input lhs table
671 , rhs_table VARCHAR -- name of input rhs table
672 , out_table VARCHAR -- name of output table
673 , lhs_row_id VARCHAR -- column name with row_id
674 , lhs_col_id VARCHAR -- column name with col_id
675 , lhs_value VARCHAR -- column name with value
676 , rhs_row_id VARCHAR -- rhs row_id
677 , rhs_value VARCHAR -- rhs value
678 , num_vars INTEGER -- Number of variables
679 , grouping_cols VARCHAR -- name of columns to group by
680 , optimizer VARCHAR -- Name of the optimizer
684 PERFORM MADLIB_SCHEMA.linear_solver_sparse(
698 $$ LANGUAGE plpgsql VOLATILE;