13 m4_include(`SQLCommon.m4
')
353 --! @file svec.sql_in
356 -- DROP SCHEMA MADLIB_SCHEMA CASCADE;
357 -- CREATE SCHEMA MADLIB_SCHEMA;
359 -- DROP TYPE IF EXISTS MADLIB_SCHEMA.svec CASCADE;
360 CREATE TYPE MADLIB_SCHEMA.svec;
362 --! SVEC constructor from CSTRING.
364 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_in(cstring)
365 RETURNS MADLIB_SCHEMA.svec
367 LANGUAGE C IMMUTABLE STRICT;
369 --! Converts SVEC to CSTRING.
371 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_out(MADLIB_SCHEMA.svec)
374 LANGUAGE C IMMUTABLE STRICT;
376 --! Converts SVEC internal representation to SVEC.
378 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_recv(internal)
379 RETURNS MADLIB_SCHEMA.svec
381 LANGUAGE C IMMUTABLE STRICT;
383 --! Converts SVEC to BYTEA.
385 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_send(MADLIB_SCHEMA.svec)
388 LANGUAGE C IMMUTABLE STRICT;
390 CREATE TYPE MADLIB_SCHEMA.svec (
391 internallength = VARIABLE,
392 input = MADLIB_SCHEMA.svec_in,
393 output = MADLIB_SCHEMA.svec_out,
394 send = MADLIB_SCHEMA.svec_send,
395 receive = MADLIB_SCHEMA.svec_recv,
400 --! Basic floating point scalar operator: MIN.
402 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dmin(float8,float8) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8_min
' LANGUAGE C IMMUTABLE;
404 --! Basic floating point scalar operator: MAX.
406 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dmax(float8,float8) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8_max
' LANGUAGE C IMMUTABLE;
408 --! Counts the number of non-zero entries in the input vector; the second argument is capped at 1, then added to the first; used as the sfunc in the svec_count_nonzero() aggregate below.
410 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_count(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec
411 AS 'MODULE_PATHNAME
', 'svec_count' STRICT LANGUAGE C IMMUTABLE;
413 --! Adds two SVECs together, element by element.
415 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_plus(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_plus' STRICT LANGUAGE C IMMUTABLE;
417 --! Minus second SVEC from the first, element by element.
419 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_minus(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_minus' STRICT LANGUAGE C IMMUTABLE;
421 --! Computes the logarithm of each element of the input SVEC.
423 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_log(MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_log' STRICT LANGUAGE C IMMUTABLE;
425 --! Divides the first SVEC by the second, element by element.
427 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_div(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_div' STRICT LANGUAGE C IMMUTABLE;
429 --! Multiplies two SVEVs together, element by element.
431 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_mult(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_mult' STRICT LANGUAGE C IMMUTABLE;
433 --! Raises each element of the first SVEC to the power given by second SVEC, which must have dimension 1 (a scalar).
435 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_pow(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_pow' STRICT LANGUAGE C IMMUTABLE;
437 --! Returns true if two SVECs are equal. If the two SVEC's are of different size, then will
return false.
439 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_eq(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS
boolean AS
'MODULE_PATHNAME',
'svec_eq' STRICT LANGUAGE C IMMUTABLE;
441 --! Returns
true if two SVECs are equal, not counting zeros (zero equals anything). If the two SVEC
's are of different size, then the function essentially zero-pads the shorter one and performs the comparison.
443 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_eq_non_zero(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS boolean AS 'MODULE_PATHNAME
', 'svec_eq_non_zero' STRICT LANGUAGE C IMMUTABLE;
445 --! Returns true if left svec contains right one, meaning that every non-zero value in the right svec equals left one
447 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_contains(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS boolean AS 'MODULE_PATHNAME
', 'svec_contains' STRICT LANGUAGE C IMMUTABLE;
449 --! Returns true if two float8 arrays are equal
451 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_eq(float8[],float8[]) RETURNS boolean AS 'MODULE_PATHNAME
', 'float8arr_equals
' LANGUAGE C IMMUTABLE;
453 --! Minus second array from the first array, element by element.
455 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_minus_float8arr(float8[],float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'float8arr_minus_float8arr' LANGUAGE C IMMUTABLE;
457 --! Minus second SVEC from the first array, element by element.
459 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_minus_svec(float8[],MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'float8arr_minus_svec' LANGUAGE C IMMUTABLE;
461 --! Minus second array from the first SVEC, element by element.
463 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_minus_float8arr(MADLIB_SCHEMA.svec,float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_minus_float8arr' LANGUAGE C IMMUTABLE;
465 --! Adds two arrays together, element by element.
467 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_plus_float8arr(float8[],float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'float8arr_plus_float8arr' LANGUAGE C IMMUTABLE;
469 --! Adds an array and an SVEC, element by element.
471 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_plus_svec(float8[],MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'float8arr_plus_svec' LANGUAGE C IMMUTABLE;
473 --! Adds an SVEC and an array, element by element.
475 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_plus_float8arr(MADLIB_SCHEMA.svec,float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_plus_float8arr' LANGUAGE C IMMUTABLE;
477 --! Multiplies two float8 arrays, element by element.
479 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_mult_float8arr(float8[],float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'float8arr_mult_float8arr' LANGUAGE C IMMUTABLE;
481 --! Multiplies an array and an SVEC, element by element.
483 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_mult_svec(float8[],MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'float8arr_mult_svec' LANGUAGE C IMMUTABLE;
485 --! Multiplies an SVEC and an array, element by element.
487 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_mult_float8arr(MADLIB_SCHEMA.svec,float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_mult_float8arr' LANGUAGE C IMMUTABLE;
489 --! Divides a float8 array by another, element by element.
491 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_div_float8arr(float8[],float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'float8arr_div_float8arr' LANGUAGE C IMMUTABLE;
493 --! Divides a float8 array by an SVEC, element by element.
495 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_div_svec(float8[],MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'float8arr_div_svec' LANGUAGE C IMMUTABLE;
497 --! Divides an SVEC by a float8 array, element by element.
499 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_div_float8arr(MADLIB_SCHEMA.svec,float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_div_float8arr' LANGUAGE C IMMUTABLE;
501 --! Computes the dot product of two SVECs.
503 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dot(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_dot' STRICT LANGUAGE C IMMUTABLE;
505 --! Computes the dot product of two float8 arrays.
507 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dot(float8[],float8[]) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8arr_dot
' STRICT LANGUAGE C IMMUTABLE;
509 --! Computes the dot product of an SVEC and a float8 array.
511 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dot(MADLIB_SCHEMA.svec,float8[]) RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_dot_float8arr
' STRICT LANGUAGE C IMMUTABLE;
513 --! Computes the dot product of a float8 array and an SVEC.
515 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dot(float8[],MADLIB_SCHEMA.svec) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8arr_dot_svec
' STRICT LANGUAGE C IMMUTABLE;
517 --! Computes the l2norm of an SVEC.
519 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2norm(MADLIB_SCHEMA.svec) RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_l2norm' STRICT LANGUAGE C IMMUTABLE;
521 --! Computes the l2norm of a float8 array.
523 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2norm(float8[]) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8arr_l2norm
' LANGUAGE C IMMUTABLE;
525 --! Computes the l2norm distance between two SVECs.
527 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.l2norm(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec)
528 RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_svec_l2norm
' LANGUAGE C STRICT IMMUTABLE;
530 --! Computes the l1norm distance between two SVECs.
532 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.l1norm(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec)
533 RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_svec_l1norm
' LANGUAGE C STRICT IMMUTABLE;
535 --! Computes the l1norm of an SVEC.
537 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l1norm(MADLIB_SCHEMA.svec) RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_l1norm' STRICT LANGUAGE C IMMUTABLE;
539 --! Computes the l1norm of a float8 array.
541 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l1norm(float8[]) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8arr_l1norm
' STRICT LANGUAGE C IMMUTABLE;
543 --! Computes the angle between two SVECs in radians.
545 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.angle(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec)
546 RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_svec_angle
' LANGUAGE C STRICT IMMUTABLE;
548 --! Computes the Tanimoto distance between two SVECs.
550 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.tanimoto_distance(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec)
551 RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_svec_tanimoto_distance
' LANGUAGE C STRICT IMMUTABLE;
553 --! Unnests an SVEC into a table of uncompressed values
555 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_unnest(MADLIB_SCHEMA.svec) RETURNS setof float8 AS 'MODULE_PATHNAME
', 'svec_unnest' LANGUAGE C IMMUTABLE;
557 --! Appends an element to the back of an SVEC.
559 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_pivot(MADLIB_SCHEMA.svec,float8) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_pivot' LANGUAGE C IMMUTABLE;
561 --! Sums the elements of an SVEC.
563 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_elsum(MADLIB_SCHEMA.svec) RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_summate
' STRICT LANGUAGE C IMMUTABLE;
565 --! Sums the elements of a float8 array.
567 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_elsum(float8[]) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8arr_summate
' STRICT LANGUAGE C IMMUTABLE;
569 --! Computes the median element of a float8 array.
571 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_median(float8[]) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8arr_median
' STRICT LANGUAGE C IMMUTABLE;
573 --! Computes the median element of an SVEC.
575 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_median(MADLIB_SCHEMA.svec) RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_median' STRICT LANGUAGE C IMMUTABLE;
577 --! Compares an SVEC to a float8, and returns positions of all elements not equal to the float as an array. Element index here starts at 0.
579 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_nonbase_positions(MADLIB_SCHEMA.svec, FLOAT8) RETURNS INT8[] AS 'MODULE_PATHNAME
', 'svec_nonbase_positions' STRICT LANGUAGE C IMMUTABLE;
581 --! Compares an SVEC to a float8, and returns values of all elements not equal to the float as an array.
583 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_nonbase_values(MADLIB_SCHEMA.svec, FLOAT8) RETURNS FLOAT8[] AS 'MODULE_PATHNAME
', 'svec_nonbase_values' STRICT LANGUAGE C IMMUTABLE;
586 --! Casts an int2 into an SVEC.
588 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_int2(int2) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_int2' STRICT LANGUAGE C IMMUTABLE;
590 --! Casts an int4 into an SVEC.
592 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_int4(int4) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_int4' STRICT LANGUAGE C IMMUTABLE;
594 --! Casts an int8 into an SVEC.
596 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_int8(bigint) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_int8' STRICT LANGUAGE C IMMUTABLE;
598 --! Casts a float4 into an SVEC.
600 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_float4(float4) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_float4' STRICT LANGUAGE C IMMUTABLE;
602 --! Casts a float8 into an SVEC.
604 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_float8(float8) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_float8' STRICT LANGUAGE C IMMUTABLE;
606 --! Casts a numeric into an SVEC.
608 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_numeric(numeric) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_numeric' STRICT LANGUAGE C IMMUTABLE;
610 --! Casts an int2 into a float8 array.
612 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_int2(int2) RETURNS float8[] AS 'MODULE_PATHNAME
', 'float8arr_cast_int2' STRICT LANGUAGE C IMMUTABLE;
614 --! Casts an int4 into a float8 array.
616 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_int4(int4) RETURNS float8[] AS 'MODULE_PATHNAME
', 'float8arr_cast_int4' STRICT LANGUAGE C IMMUTABLE;
618 --! Casts an int8 into a float8 array.
620 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_int8(bigint) RETURNS float8[] AS 'MODULE_PATHNAME
', 'float8arr_cast_int8' STRICT LANGUAGE C IMMUTABLE;
622 --! Casts a float4 into a float8 array.
624 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_float4(float4) RETURNS float8[] AS 'MODULE_PATHNAME
', 'float8arr_cast_float4' STRICT LANGUAGE C IMMUTABLE;
626 --! Casts a float8 into a float8 array.
628 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_float8(float8) RETURNS float8[] AS 'MODULE_PATHNAME
', 'float8arr_cast_float8' STRICT LANGUAGE C IMMUTABLE;
630 --! Casts a numeric into a float8 array.
632 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_numeric(numeric) RETURNS float8[] AS 'MODULE_PATHNAME
', 'float8arr_cast_numeric' STRICT LANGUAGE C IMMUTABLE;
634 --! Casts a float8 into an SVEC.
636 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_float8arr(float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_float8arr' STRICT LANGUAGE C IMMUTABLE;
638 --! Casts an array of int8 positions, float8 values into an SVEC.
640 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_positions_float8arr(int8[],float8[],int8,float8) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_positions_float8arr' STRICT LANGUAGE C IMMUTABLE;
642 --! Casts an SVEC into a float8 array.
644 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_return_array(MADLIB_SCHEMA.svec) RETURNS float8[] AS 'MODULE_PATHNAME
', 'svec_return_array' LANGUAGE C IMMUTABLE;
646 --! Concatenates two SVECs.
648 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_concat(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_concat' LANGUAGE C IMMUTABLE;
650 --! Replicates n copies of an SVEC and concatenates them together.
652 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_concat_replicate(int4,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_concat_replicate' LANGUAGE C IMMUTABLE;
654 --! Returns the dimension of an SVEC.
656 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dimension(MADLIB_SCHEMA.svec) RETURNS integer AS 'MODULE_PATHNAME
', 'svec_dimension' LANGUAGE C IMMUTABLE;
658 --! Applies a given function to each element of an SVEC.
660 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_lapply(text,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_lapply' LANGUAGE C IMMUTABLE;
662 --! Appends a run-length block to the back of an SVEC.
664 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_append(MADLIB_SCHEMA.svec,float8,int8) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_append' LANGUAGE C IMMUTABLE;
666 --! Projects onto an element of an SVEC.
668 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_proj(MADLIB_SCHEMA.svec,int4) RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_proj' LANGUAGE C IMMUTABLE;
670 --! Extracts a subvector of an SVEC given the subvector's start and end indices.
672 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_subvec(MADLIB_SCHEMA.svec,int4,int4) RETURNS MADLIB_SCHEMA.svec AS
'MODULE_PATHNAME',
'svec_subvec' LANGUAGE C IMMUTABLE;
674 --! Reverses the elements of an SVEC.
676 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_reverse(MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS
'MODULE_PATHNAME',
'svec_reverse' LANGUAGE C IMMUTABLE;
678 --! Replaces the subvector of a given SVEC at a given start index with another SVEC. Note that element index should start at 1.
680 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_change(MADLIB_SCHEMA.svec,int4,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS
'MODULE_PATHNAME',
'svec_change' LANGUAGE C IMMUTABLE;
682 --! Computes the hash of an SVEC.
684 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_hash(MADLIB_SCHEMA.svec) RETURNS int4 AS
'MODULE_PATHNAME',
'svec_hash' STRICT LANGUAGE C IMMUTABLE;
686 --! Computes the word-occurence vector of a document
688 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_sfv(text[], text[]) RETURNS MADLIB_SCHEMA.svec AS
689 'MODULE_PATHNAME',
'gp_extract_feature_histogram' LANGUAGE C IMMUTABLE;
691 --! Sorts an array of texts. This
function should be in MADlib common.
693 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_sort(text[]) RETURNS text[] AS $$
694 SELECT array(SELECT unnest($1::text[]) ORDER BY 1);
697 --! Converts an svec to a text
string
699 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_to_string(MADLIB_SCHEMA.svec)
700 RETURNS text AS
'MODULE_PATHNAME',
'svec_to_string' STRICT LANGUAGE C IMMUTABLE;
702 --! Converts a text
string to an svec
704 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_from_string(text)
705 RETURNS MADLIB_SCHEMA.svec AS
'MODULE_PATHNAME',
'svec_from_string' STRICT LANGUAGE C IMMUTABLE;
718 CREATE OPERATOR MADLIB_SCHEMA.|| (
719 LEFTARG = MADLIB_SCHEMA.svec,
720 RIGHTARG = MADLIB_SCHEMA.svec,
721 PROCEDURE = MADLIB_SCHEMA.svec_concat
724 CREATE OPERATOR MADLIB_SCHEMA.- (
725 LEFTARG = MADLIB_SCHEMA.svec,
726 RIGHTARG = MADLIB_SCHEMA.svec,
727 PROCEDURE = MADLIB_SCHEMA.svec_minus
729 CREATE OPERATOR MADLIB_SCHEMA.+ (
730 LEFTARG = MADLIB_SCHEMA.svec,
731 RIGHTARG = MADLIB_SCHEMA.svec,
732 PROCEDURE = MADLIB_SCHEMA.svec_plus
734 CREATE OPERATOR MADLIB_SCHEMA./ (
735 LEFTARG = MADLIB_SCHEMA.svec,
736 RIGHTARG = MADLIB_SCHEMA.svec,
737 PROCEDURE = MADLIB_SCHEMA.svec_div
739 CREATE OPERATOR MADLIB_SCHEMA.%*% (
740 LEFTARG = MADLIB_SCHEMA.svec,
741 RIGHTARG = MADLIB_SCHEMA.svec,
742 PROCEDURE = MADLIB_SCHEMA.svec_dot
744 CREATE OPERATOR MADLIB_SCHEMA.* (
745 LEFTARG = MADLIB_SCHEMA.svec,
746 RIGHTARG = MADLIB_SCHEMA.svec,
747 PROCEDURE = MADLIB_SCHEMA.svec_mult
749 CREATE OPERATOR MADLIB_SCHEMA.^ (
750 LEFTARG = MADLIB_SCHEMA.svec,
751 RIGHTARG = MADLIB_SCHEMA.svec,
752 PROCEDURE = MADLIB_SCHEMA.svec_pow
755 -- float8[] operators
756 -- DROP OPERATOR IF EXISTS = ( float8[], float8[]);
786 CREATE OPERATOR MADLIB_SCHEMA.%*% (
789 PROCEDURE = MADLIB_SCHEMA.svec_dot
791 CREATE OPERATOR MADLIB_SCHEMA.%*% (
793 RIGHTARG = MADLIB_SCHEMA.svec,
794 PROCEDURE = MADLIB_SCHEMA.svec_dot
796 CREATE OPERATOR MADLIB_SCHEMA.%*% (
797 LEFTARG = MADLIB_SCHEMA.svec,
799 PROCEDURE = MADLIB_SCHEMA.svec_dot
801 CREATE OPERATOR MADLIB_SCHEMA.- (
804 PROCEDURE = MADLIB_SCHEMA.float8arr_minus_float8arr
806 CREATE OPERATOR MADLIB_SCHEMA.+ (
809 PROCEDURE = MADLIB_SCHEMA.float8arr_plus_float8arr
811 CREATE OPERATOR MADLIB_SCHEMA.* (
814 PROCEDURE = MADLIB_SCHEMA.float8arr_mult_float8arr
816 CREATE OPERATOR MADLIB_SCHEMA./ (
819 PROCEDURE = MADLIB_SCHEMA.float8arr_div_float8arr
822 CREATE OPERATOR MADLIB_SCHEMA.- (
824 RIGHTARG = MADLIB_SCHEMA.svec,
825 PROCEDURE = MADLIB_SCHEMA.float8arr_minus_svec
827 CREATE OPERATOR MADLIB_SCHEMA.+ (
829 RIGHTARG = MADLIB_SCHEMA.svec,
830 PROCEDURE = MADLIB_SCHEMA.float8arr_plus_svec
832 CREATE OPERATOR MADLIB_SCHEMA.* (
834 RIGHTARG = MADLIB_SCHEMA.svec,
835 PROCEDURE = MADLIB_SCHEMA.float8arr_mult_svec
837 CREATE OPERATOR MADLIB_SCHEMA./ (
839 RIGHTARG = MADLIB_SCHEMA.svec,
840 PROCEDURE = MADLIB_SCHEMA.float8arr_div_svec
843 CREATE OPERATOR MADLIB_SCHEMA.- (
844 LEFTARG = MADLIB_SCHEMA.svec,
846 PROCEDURE = MADLIB_SCHEMA.svec_minus_float8arr
848 CREATE OPERATOR MADLIB_SCHEMA.+ (
849 LEFTARG = MADLIB_SCHEMA.svec,
851 PROCEDURE = MADLIB_SCHEMA.svec_plus_float8arr
853 CREATE OPERATOR MADLIB_SCHEMA.* (
854 LEFTARG = MADLIB_SCHEMA.svec,
856 PROCEDURE = MADLIB_SCHEMA.svec_mult_float8arr
858 CREATE OPERATOR MADLIB_SCHEMA./ (
859 LEFTARG = MADLIB_SCHEMA.svec,
861 PROCEDURE = MADLIB_SCHEMA.svec_div_float8arr
873 CREATE CAST (int2 AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_int2(int2) ; -- AS IMPLICIT;
874 CREATE CAST (integer AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_int4(integer) ; -- AS IMPLICIT;
875 CREATE CAST (bigint AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_int8(bigint) ; -- AS IMPLICIT;
876 CREATE CAST (float4 AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_float4(float4) ; -- AS IMPLICIT;
877 CREATE CAST (float8 AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_float8(float8) ; -- AS IMPLICIT;
878 CREATE CAST (numeric AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_numeric(numeric) ; -- AS IMPLICIT;
889 -- CREATE CAST (int2 AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_int2(int2) ; -- AS IMPLICIT;
890 -- CREATE CAST (integer AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_int4(integer) ; -- AS IMPLICIT;
891 -- CREATE CAST (bigint AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_int8(bigint) ; -- AS IMPLICIT;
892 -- CREATE CAST (float4 AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_float4(float4) ; -- AS IMPLICIT;
893 -- CREATE CAST (float8 AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_float8(float8) ; -- AS IMPLICIT;
894 -- CREATE CAST (numeric AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_numeric(numeric) ; -- AS IMPLICIT;
896 -- DROP CAST IF EXISTS (MADLIB_SCHEMA.svec AS float8[]) ;
897 -- DROP CAST IF EXISTS (float8[] AS MADLIB_SCHEMA.svec) ;
899 CREATE CAST (MADLIB_SCHEMA.svec AS float8[]) WITH FUNCTION MADLIB_SCHEMA.svec_return_array(MADLIB_SCHEMA.svec) ; -- AS IMPLICIT;
900 CREATE CAST (float8[] AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_float8arr(float8[]) ; -- AS IMPLICIT;
902 -- DROP OPERATOR IF EXISTS = (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) ;
905 CREATE OPERATOR MADLIB_SCHEMA.= (
906 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_eq,
907 commutator = operator(MADLIB_SCHEMA.=) ,
908 -- negator = operator(MADLIB_SCHEMA.<>) ,
909 restrict = eqsel, join = eqjoinsel
912 --! Transition
function for mean(svec) aggregate
915 RETURNS FLOAT[] AS 'MODULE_PATHNAME'
916 LANGUAGE C IMMUTABLE;
918 --! Preliminary merge function for
mean(svec) aggregate
921 RETURNS FLOAT[] AS 'MODULE_PATHNAME'
922 LANGUAGE C IMMUTABLE;
924 --! Final function for
mean(svec) aggregate
927 RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME'
928 LANGUAGE C IMMUTABLE;
930 --! Aggregate that computes the element-wise
mean of a list of vectors.
932 CREATE AGGREGATE MADLIB_SCHEMA.
mean( MADLIB_SCHEMA.svec) (
939 --! Aggregate that provides the element-wise sum of a list of vectors.
941 -- DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.
svec_sum(MADLIB_SCHEMA.svec);
942 CREATE AGGREGATE MADLIB_SCHEMA.
svec_sum (MADLIB_SCHEMA.svec) (
944 m4_ifdef(`__GREENPLUM__',`prefunc=MADLIB_SCHEMA.svec_plus,')
945 INITCOND = '{1}:{0.}
', -- Zero
946 STYPE = MADLIB_SCHEMA.svec
949 --! Aggregate that provides a tally of nonzero entries in a list of vectors.
951 -- DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.svec_count_nonzero(MADLIB_SCHEMA.svec);
952 CREATE AGGREGATE MADLIB_SCHEMA.svec_count_nonzero (MADLIB_SCHEMA.svec) (
953 SFUNC = MADLIB_SCHEMA.svec_count,
954 m4_ifdef(`__GREENPLUM__',`prefunc=MADLIB_SCHEMA.svec_plus,
')
955 INITCOND = '{1}:{0.}
', -- Zero
956 STYPE = MADLIB_SCHEMA.svec
959 --! Aggregate that turns a list of float8 values into an SVEC.
961 -- DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.svec_agg(float8);
963 m4_ifdef(`__GREENPLUM__', m4_ifdef(`__HAS_ORDERED_AGGREGATES__
', `ORDERED'))
964 AGGREGATE MADLIB_SCHEMA.svec_agg (float8) (
965 SFUNC = MADLIB_SCHEMA.svec_pivot,
966 m4_ifdef(`__GREENPLUM__
', m4_ifdef(`__HAS_ORDERED_AGGREGATES__', `
', ``prefunc=MADLIB_SCHEMA.svec_concat,''))
967 STYPE = MADLIB_SCHEMA.svec
970 --! Aggregate that computes the median element of a list of float8 values.
972 -- DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.svec_median_inmemory(float8);
973 CREATE AGGREGATE MADLIB_SCHEMA.svec_median_inmemory (float8) (
974 SFUNC = MADLIB_SCHEMA.svec_pivot,
975 m4_ifdef(`__GREENPLUM__',`prefunc=MADLIB_SCHEMA.svec_concat,
')
976 FINALFUNC = MADLIB_SCHEMA.svec_median,
977 STYPE = MADLIB_SCHEMA.svec
980 -- Comparisons based on L2 Norm
981 --! Returns true if the l2 norm of the first SVEC is less than that of the second SVEC.
983 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_lt(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS bool AS 'MODULE_PATHNAME
', 'svec_l2_lt' LANGUAGE C IMMUTABLE;
985 --! Returns true if the l2 norm of the first SVEC is less than or equal to that of the second SVEC.
987 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_le(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS bool AS 'MODULE_PATHNAME
', 'svec_l2_le' LANGUAGE C IMMUTABLE;
989 --! Returns true if the l2 norm of the first SVEC is equal to that of the second SVEC.
991 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_eq(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS bool AS 'MODULE_PATHNAME
', 'svec_l2_eq' LANGUAGE C IMMUTABLE;
993 --! Returns true if the l2 norm of the first SVEC is not equal to that of the second SVEC.
995 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_ne(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS bool AS 'MODULE_PATHNAME
', 'svec_l2_ne' LANGUAGE C IMMUTABLE;
997 --! Returns true if the l2 norm of the first SVEC is greater than that of the second SVEC.
999 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_gt(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS bool AS 'MODULE_PATHNAME
', 'svec_l2_gt' LANGUAGE C IMMUTABLE;
1001 --! Returns true if the l2 norm of the first SVEC is greater than or equal to that of the second SVEC.
1003 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_ge(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS bool AS 'MODULE_PATHNAME
', 'svec_l2_ge' LANGUAGE C IMMUTABLE;
1005 --! Returns a value indicating the relative values of the l2 norms of two SVECs.
1007 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2_cmp(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS integer AS 'MODULE_PATHNAME
', 'svec_l2_cmp' LANGUAGE C IMMUTABLE;
1009 --! Normalizes an SVEC that is divides all elements by its norm/magnitude.
1011 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.normalize(MADLIB_SCHEMA.svec)
1012 RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_normalize
' LANGUAGE C IMMUTABLE STRICT;
1015 DROP OPERATOR IF EXISTS < (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;
1016 DROP OPERATOR IF EXISTS <= (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;
1017 DROP OPERATOR IF EXISTS <> (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) ;
1018 DROP OPERATOR IF EXISTS == (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;
1019 DROP OPERATOR IF EXISTS > (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;
1020 DROP OPERATOR IF EXISTS >= (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;
1021 DROP OPERATOR IF EXISTS *|| (int4, MADLIB_SCHEMA.svec) ;
1024 CREATE OPERATOR MADLIB_SCHEMA.< (
1025 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_lt,
1026 commutator = operator(MADLIB_SCHEMA.>) , negator = operator(MADLIB_SCHEMA.>=) ,
1027 restrict = scalarltsel, join = scalarltjoinsel
1029 CREATE OPERATOR MADLIB_SCHEMA.<= (
1030 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_le,
1031 commutator = operator(MADLIB_SCHEMA.>=) , negator = operator(MADLIB_SCHEMA.>) ,
1032 restrict = scalarltsel, join = scalarltjoinsel
1034 CREATE OPERATOR MADLIB_SCHEMA.<> (
1035 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_eq,
1036 commutator = operator(MADLIB_SCHEMA.<>) ,
1037 negator = operator(MADLIB_SCHEMA.=),
1038 restrict = eqsel, join = eqjoinsel
1040 CREATE OPERATOR MADLIB_SCHEMA.== (
1041 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_eq,
1042 commutator = operator(MADLIB_SCHEMA.=) ,
1043 negator = operator(MADLIB_SCHEMA.<>) ,
1044 restrict = eqsel, join = eqjoinsel
1046 CREATE OPERATOR MADLIB_SCHEMA.>= (
1047 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_ge,
1048 commutator = operator(MADLIB_SCHEMA.<=) , negator = operator(MADLIB_SCHEMA.<) ,
1049 restrict = scalargtsel, join = scalargtjoinsel
1051 CREATE OPERATOR MADLIB_SCHEMA.> (
1052 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_gt,
1053 commutator = operator(MADLIB_SCHEMA.<) , negator = operator(MADLIB_SCHEMA.<=) ,
1054 restrict = scalargtsel, join = scalargtjoinsel
1057 CREATE OPERATOR MADLIB_SCHEMA.*|| (
1058 leftarg = int4, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_concat_replicate
1061 CREATE OPERATOR CLASS MADLIB_SCHEMA.svec_l2_ops
1062 DEFAULT FOR TYPE MADLIB_SCHEMA.svec USING btree AS
1063 OPERATOR 1 MADLIB_SCHEMA.< ,
1064 OPERATOR 2 MADLIB_SCHEMA.<= ,
1065 OPERATOR 3 MADLIB_SCHEMA.== ,
1066 OPERATOR 4 MADLIB_SCHEMA.>= ,
1067 OPERATOR 5 MADLIB_SCHEMA.> ,
1068 FUNCTION 1 MADLIB_SCHEMA.svec_l2_cmp(MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec);