13 m4_include(`SQLCommon.m4
')
382 --! @file svec.sql_in
385 -- DROP SCHEMA MADLIB_SCHEMA CASCADE;
386 -- CREATE SCHEMA MADLIB_SCHEMA;
388 -- DROP TYPE IF EXISTS MADLIB_SCHEMA.svec CASCADE;
389 CREATE TYPE MADLIB_SCHEMA.svec;
391 --! SVEC constructor from CSTRING.
393 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_in(cstring)
394 RETURNS MADLIB_SCHEMA.svec
396 LANGUAGE C IMMUTABLE STRICT;
398 --! Converts SVEC to CSTRING.
400 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_out(MADLIB_SCHEMA.svec)
403 LANGUAGE C IMMUTABLE STRICT;
405 --! Converts SVEC internal representation to SVEC.
407 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_recv(internal)
408 RETURNS MADLIB_SCHEMA.svec
410 LANGUAGE C IMMUTABLE STRICT;
412 --! Converts SVEC to BYTEA.
414 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_send(MADLIB_SCHEMA.svec)
417 LANGUAGE C IMMUTABLE STRICT;
419 CREATE TYPE MADLIB_SCHEMA.svec (
420 internallength = VARIABLE,
421 input = MADLIB_SCHEMA.svec_in,
422 output = MADLIB_SCHEMA.svec_out,
423 send = MADLIB_SCHEMA.svec_send,
424 receive = MADLIB_SCHEMA.svec_recv,
429 --! Basic floating point scalar operator: MIN.
431 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dmin(float8,float8) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8_min
' LANGUAGE C IMMUTABLE;
433 --! Basic floating point scalar operator: MAX.
435 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dmax(float8,float8) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8_max
' LANGUAGE C IMMUTABLE;
437 --! 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.
439 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_count(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec
440 AS 'MODULE_PATHNAME
', 'svec_count' STRICT LANGUAGE C IMMUTABLE;
442 --! Adds two SVECs together, element by element.
444 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;
446 --! Minus second SVEC from the first, element by element.
448 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;
450 --! Computes the logarithm of each element of the input SVEC.
452 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_log(MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_log' STRICT LANGUAGE C IMMUTABLE;
454 --! Divides the first SVEC by the second, element by element.
456 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;
458 --! Multiplies two SVEVs together, element by element.
460 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;
462 --! Raises each element of the first SVEC to the power given by second SVEC, which must have dimension 1 (a scalar).
464 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;
466 --! Returns true if two SVECs are equal. If the two SVECs are of different size, then will return false.
468 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;
470 --! Returns true if two SVECs are equal, not counting zeros (zero equals anything). If the two SVECs are of different size, then the function essentially zero-pads the shorter one and performs the comparison.
472 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;
474 --! Returns true if left svec contains right one, meaning that every non-zero value in the right svec equals left one
476 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;
478 --! Returns true if two float8 arrays are equal
480 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_eq(float8[],float8[]) RETURNS boolean AS 'MODULE_PATHNAME
', 'float8arr_equals
' LANGUAGE C IMMUTABLE;
482 --! Minus second array from the first array, element by element.
484 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_minus_float8arr(float8[],float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'float8arr_minus_float8arr' LANGUAGE C IMMUTABLE;
486 --! Minus second SVEC from the first array, element by element.
488 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;
490 --! Minus second array from the first SVEC, element by element.
492 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;
494 --! Adds two arrays together, element by element.
496 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_plus_float8arr(float8[],float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'float8arr_plus_float8arr' LANGUAGE C IMMUTABLE;
498 --! Adds an array and an SVEC, element by element.
500 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;
502 --! Adds an SVEC and an array, element by element.
504 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;
506 --! Multiplies two float8 arrays, element by element.
508 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_mult_float8arr(float8[],float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'float8arr_mult_float8arr' LANGUAGE C IMMUTABLE;
510 --! Multiplies an array and an SVEC, element by element.
512 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;
514 --! Multiplies an SVEC and an array, element by element.
516 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;
518 --! Divides a float8 array by another, element by element.
520 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_div_float8arr(float8[],float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'float8arr_div_float8arr' LANGUAGE C IMMUTABLE;
522 --! Divides a float8 array by an SVEC, element by element.
524 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;
526 --! Divides an SVEC by a float8 array, element by element.
528 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;
530 --! Computes the dot product of two SVECs.
532 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;
534 --! Computes the dot product of two float8 arrays.
536 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dot(float8[],float8[]) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8arr_dot
' STRICT LANGUAGE C IMMUTABLE;
538 --! Computes the dot product of an SVEC and a float8 array.
540 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dot(MADLIB_SCHEMA.svec,float8[]) RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_dot_float8arr
' STRICT LANGUAGE C IMMUTABLE;
542 --! Computes the dot product of a float8 array and an SVEC.
544 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dot(float8[],MADLIB_SCHEMA.svec) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8arr_dot_svec
' STRICT LANGUAGE C IMMUTABLE;
546 --! Computes the l2norm of an SVEC.
548 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2norm(MADLIB_SCHEMA.svec) RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_l2norm' STRICT LANGUAGE C IMMUTABLE;
550 --! Computes the l2norm of a float8 array.
552 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l2norm(float8[]) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8arr_l2norm
' LANGUAGE C IMMUTABLE;
554 --! Computes the l2norm distance between two SVECs.
556 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.l2norm(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec)
557 RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_svec_l2norm
' LANGUAGE C STRICT IMMUTABLE;
559 --! Computes the l1norm distance between two SVECs.
561 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.l1norm(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec)
562 RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_svec_l1norm
' LANGUAGE C STRICT IMMUTABLE;
564 --! Computes the l1norm of an SVEC.
566 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l1norm(MADLIB_SCHEMA.svec) RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_l1norm' STRICT LANGUAGE C IMMUTABLE;
568 --! Computes the l1norm of a float8 array.
570 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_l1norm(float8[]) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8arr_l1norm
' STRICT LANGUAGE C IMMUTABLE;
572 --! Computes the angle between two SVECs in radians.
574 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.angle(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec)
575 RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_svec_angle
' LANGUAGE C STRICT IMMUTABLE;
577 --! Computes the Tanimoto distance between two SVECs.
579 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.tanimoto_distance(MADLIB_SCHEMA.svec,MADLIB_SCHEMA.svec)
580 RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_svec_tanimoto_distance
' LANGUAGE C STRICT IMMUTABLE;
582 --! Unnests an SVEC into a table of uncompressed values
584 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_unnest(MADLIB_SCHEMA.svec) RETURNS setof float8 AS 'MODULE_PATHNAME
', 'svec_unnest' LANGUAGE C IMMUTABLE;
586 --! Appends an element to the back of an SVEC.
588 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_pivot(MADLIB_SCHEMA.svec,float8) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_pivot' LANGUAGE C IMMUTABLE;
590 --! Sums the elements of an SVEC.
592 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_elsum(MADLIB_SCHEMA.svec) RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_summate
' STRICT LANGUAGE C IMMUTABLE;
594 --! Sums the elements of a float8 array.
596 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_elsum(float8[]) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8arr_summate
' STRICT LANGUAGE C IMMUTABLE;
598 --! Computes the median element of a float8 array.
600 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_median(float8[]) RETURNS float8 AS 'MODULE_PATHNAME
', 'float8arr_median
' STRICT LANGUAGE C IMMUTABLE;
602 --! Computes the median element of an SVEC.
604 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_median(MADLIB_SCHEMA.svec) RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_median' STRICT LANGUAGE C IMMUTABLE;
606 --! 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.
608 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;
610 --! Compares an SVEC to a float8, and returns values of all elements not equal to the float as an array.
612 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;
615 --! Casts an int2 into an SVEC.
617 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_int2(int2) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_int2' STRICT LANGUAGE C IMMUTABLE;
619 --! Casts an int4 into an SVEC.
621 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_int4(int4) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_int4' STRICT LANGUAGE C IMMUTABLE;
623 --! Casts an int8 into an SVEC.
625 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_int8(bigint) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_int8' STRICT LANGUAGE C IMMUTABLE;
627 --! Casts a float4 into an SVEC.
629 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_float4(float4) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_float4' STRICT LANGUAGE C IMMUTABLE;
631 --! Casts a float8 into an SVEC.
633 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_float8(float8) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_float8' STRICT LANGUAGE C IMMUTABLE;
635 --! Casts a numeric into an SVEC.
637 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_numeric(numeric) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_numeric' STRICT LANGUAGE C IMMUTABLE;
639 --! Casts an int2 into a float8 array.
641 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_int2(int2) RETURNS float8[] AS 'MODULE_PATHNAME
', 'float8arr_cast_int2' STRICT LANGUAGE C IMMUTABLE;
643 --! Casts an int4 into a float8 array.
645 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_int4(int4) RETURNS float8[] AS 'MODULE_PATHNAME
', 'float8arr_cast_int4' STRICT LANGUAGE C IMMUTABLE;
647 --! Casts an int8 into a float8 array.
649 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_int8(bigint) RETURNS float8[] AS 'MODULE_PATHNAME
', 'float8arr_cast_int8' STRICT LANGUAGE C IMMUTABLE;
651 --! Casts a float4 into a float8 array.
653 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_float4(float4) RETURNS float8[] AS 'MODULE_PATHNAME
', 'float8arr_cast_float4' STRICT LANGUAGE C IMMUTABLE;
655 --! Casts a float8 into a float8 array.
657 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_float8(float8) RETURNS float8[] AS 'MODULE_PATHNAME
', 'float8arr_cast_float8' STRICT LANGUAGE C IMMUTABLE;
659 --! Casts a numeric into a float8 array.
661 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.float8arr_cast_numeric(numeric) RETURNS float8[] AS 'MODULE_PATHNAME
', 'float8arr_cast_numeric' STRICT LANGUAGE C IMMUTABLE;
663 --! Casts a float8 into an SVEC.
665 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_cast_float8arr(float8[]) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_cast_float8arr' STRICT LANGUAGE C IMMUTABLE;
667 --! Casts an array of int8 positions, float8 values into an SVEC.
669 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;
671 --! Casts an SVEC into a float8 array.
673 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_return_array(MADLIB_SCHEMA.svec) RETURNS float8[] AS 'MODULE_PATHNAME
', 'svec_return_array' LANGUAGE C IMMUTABLE;
675 --! Concatenates two SVECs.
677 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;
679 --! Replicates n copies of an SVEC and concatenates them together.
681 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;
683 --! Returns the dimension of an SVEC.
685 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_dimension(MADLIB_SCHEMA.svec) RETURNS integer AS 'MODULE_PATHNAME
', 'svec_dimension' LANGUAGE C IMMUTABLE;
687 --! Applies a given function to each element of an SVEC.
689 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_lapply(text,MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_lapply' LANGUAGE C IMMUTABLE;
691 --! Appends a run-length block to the back of an SVEC.
693 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;
695 --! Projects onto an element of an SVEC.
697 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_proj(MADLIB_SCHEMA.svec,int4) RETURNS float8 AS 'MODULE_PATHNAME
', 'svec_proj' LANGUAGE C IMMUTABLE;
699 --! Extracts a subvector of an SVEC given the subvector's start and end indices.
701 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;
703 --! Reverses the elements of an SVEC.
705 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_reverse(MADLIB_SCHEMA.svec) RETURNS MADLIB_SCHEMA.svec AS
'MODULE_PATHNAME',
'svec_reverse' LANGUAGE C IMMUTABLE;
707 --! Replaces the subvector of a given SVEC at a given start index with another SVEC. Note that element index should start at 1.
709 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;
711 --! Computes the hash of an SVEC.
713 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_hash(MADLIB_SCHEMA.svec) RETURNS int4 AS
'MODULE_PATHNAME',
'svec_hash' STRICT LANGUAGE C IMMUTABLE;
715 --! Computes the word-occurence vector of a document
717 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_sfv(text[], text[]) RETURNS MADLIB_SCHEMA.svec AS
718 'MODULE_PATHNAME',
'gp_extract_feature_histogram' LANGUAGE C IMMUTABLE;
720 --! Sorts an array of texts. This
function should be in MADlib common.
722 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_sort(text[]) RETURNS text[] AS $$
723 SELECT array(SELECT unnest($1::text[]) ORDER BY 1);
726 --! Converts an svec to a text
string
728 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_to_string(MADLIB_SCHEMA.svec)
729 RETURNS text AS
'MODULE_PATHNAME',
'svec_to_string' STRICT LANGUAGE C IMMUTABLE;
731 --! Converts a text
string to an svec
733 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.svec_from_string(text)
734 RETURNS MADLIB_SCHEMA.svec AS
'MODULE_PATHNAME',
'svec_from_string' STRICT LANGUAGE C IMMUTABLE;
747 CREATE OPERATOR MADLIB_SCHEMA.|| (
748 LEFTARG = MADLIB_SCHEMA.svec,
749 RIGHTARG = MADLIB_SCHEMA.svec,
750 PROCEDURE = MADLIB_SCHEMA.svec_concat
753 CREATE OPERATOR MADLIB_SCHEMA.- (
754 LEFTARG = MADLIB_SCHEMA.svec,
755 RIGHTARG = MADLIB_SCHEMA.svec,
756 PROCEDURE = MADLIB_SCHEMA.svec_minus
758 CREATE OPERATOR MADLIB_SCHEMA.+ (
759 LEFTARG = MADLIB_SCHEMA.svec,
760 RIGHTARG = MADLIB_SCHEMA.svec,
761 PROCEDURE = MADLIB_SCHEMA.svec_plus
763 CREATE OPERATOR MADLIB_SCHEMA./ (
764 LEFTARG = MADLIB_SCHEMA.svec,
765 RIGHTARG = MADLIB_SCHEMA.svec,
766 PROCEDURE = MADLIB_SCHEMA.svec_div
768 CREATE OPERATOR MADLIB_SCHEMA.%*% (
769 LEFTARG = MADLIB_SCHEMA.svec,
770 RIGHTARG = MADLIB_SCHEMA.svec,
771 PROCEDURE = MADLIB_SCHEMA.svec_dot
773 CREATE OPERATOR MADLIB_SCHEMA.* (
774 LEFTARG = MADLIB_SCHEMA.svec,
775 RIGHTARG = MADLIB_SCHEMA.svec,
776 PROCEDURE = MADLIB_SCHEMA.svec_mult
778 CREATE OPERATOR MADLIB_SCHEMA.^ (
779 LEFTARG = MADLIB_SCHEMA.svec,
780 RIGHTARG = MADLIB_SCHEMA.svec,
781 PROCEDURE = MADLIB_SCHEMA.svec_pow
784 -- float8[] operators
785 -- DROP OPERATOR IF EXISTS = ( float8[], float8[]);
815 CREATE OPERATOR MADLIB_SCHEMA.%*% (
818 PROCEDURE = MADLIB_SCHEMA.svec_dot
820 CREATE OPERATOR MADLIB_SCHEMA.%*% (
822 RIGHTARG = MADLIB_SCHEMA.svec,
823 PROCEDURE = MADLIB_SCHEMA.svec_dot
825 CREATE OPERATOR MADLIB_SCHEMA.%*% (
826 LEFTARG = MADLIB_SCHEMA.svec,
828 PROCEDURE = MADLIB_SCHEMA.svec_dot
830 CREATE OPERATOR MADLIB_SCHEMA.- (
833 PROCEDURE = MADLIB_SCHEMA.float8arr_minus_float8arr
835 CREATE OPERATOR MADLIB_SCHEMA.+ (
838 PROCEDURE = MADLIB_SCHEMA.float8arr_plus_float8arr
840 CREATE OPERATOR MADLIB_SCHEMA.* (
843 PROCEDURE = MADLIB_SCHEMA.float8arr_mult_float8arr
845 CREATE OPERATOR MADLIB_SCHEMA./ (
848 PROCEDURE = MADLIB_SCHEMA.float8arr_div_float8arr
851 CREATE OPERATOR MADLIB_SCHEMA.- (
853 RIGHTARG = MADLIB_SCHEMA.svec,
854 PROCEDURE = MADLIB_SCHEMA.float8arr_minus_svec
856 CREATE OPERATOR MADLIB_SCHEMA.+ (
858 RIGHTARG = MADLIB_SCHEMA.svec,
859 PROCEDURE = MADLIB_SCHEMA.float8arr_plus_svec
861 CREATE OPERATOR MADLIB_SCHEMA.* (
863 RIGHTARG = MADLIB_SCHEMA.svec,
864 PROCEDURE = MADLIB_SCHEMA.float8arr_mult_svec
866 CREATE OPERATOR MADLIB_SCHEMA./ (
868 RIGHTARG = MADLIB_SCHEMA.svec,
869 PROCEDURE = MADLIB_SCHEMA.float8arr_div_svec
872 CREATE OPERATOR MADLIB_SCHEMA.- (
873 LEFTARG = MADLIB_SCHEMA.svec,
875 PROCEDURE = MADLIB_SCHEMA.svec_minus_float8arr
877 CREATE OPERATOR MADLIB_SCHEMA.+ (
878 LEFTARG = MADLIB_SCHEMA.svec,
880 PROCEDURE = MADLIB_SCHEMA.svec_plus_float8arr
882 CREATE OPERATOR MADLIB_SCHEMA.* (
883 LEFTARG = MADLIB_SCHEMA.svec,
885 PROCEDURE = MADLIB_SCHEMA.svec_mult_float8arr
887 CREATE OPERATOR MADLIB_SCHEMA./ (
888 LEFTARG = MADLIB_SCHEMA.svec,
890 PROCEDURE = MADLIB_SCHEMA.svec_div_float8arr
902 CREATE CAST (int2 AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_int2(int2) ; -- AS IMPLICIT;
903 CREATE CAST (integer AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_int4(integer) ; -- AS IMPLICIT;
904 CREATE CAST (bigint AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_int8(bigint) ; -- AS IMPLICIT;
905 CREATE CAST (float4 AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_float4(float4) ; -- AS IMPLICIT;
906 CREATE CAST (float8 AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_float8(float8) ; -- AS IMPLICIT;
907 CREATE CAST (numeric AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_numeric(numeric) ; -- AS IMPLICIT;
918 -- CREATE CAST (int2 AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_int2(int2) ; -- AS IMPLICIT;
919 -- CREATE CAST (integer AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_int4(integer) ; -- AS IMPLICIT;
920 -- CREATE CAST (bigint AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_int8(bigint) ; -- AS IMPLICIT;
921 -- CREATE CAST (float4 AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_float4(float4) ; -- AS IMPLICIT;
922 -- CREATE CAST (float8 AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_float8(float8) ; -- AS IMPLICIT;
923 -- CREATE CAST (numeric AS float8[]) WITH FUNCTION MADLIB_SCHEMA.float8arr_cast_numeric(numeric) ; -- AS IMPLICIT;
925 -- DROP CAST IF EXISTS (MADLIB_SCHEMA.svec AS float8[]) ;
926 -- DROP CAST IF EXISTS (float8[] AS MADLIB_SCHEMA.svec) ;
928 CREATE CAST (MADLIB_SCHEMA.svec AS float8[]) WITH FUNCTION MADLIB_SCHEMA.svec_return_array(MADLIB_SCHEMA.svec) ; -- AS IMPLICIT;
929 CREATE CAST (float8[] AS MADLIB_SCHEMA.svec) WITH FUNCTION MADLIB_SCHEMA.svec_cast_float8arr(float8[]) ; -- AS IMPLICIT;
931 -- DROP OPERATOR IF EXISTS = (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) ;
934 CREATE OPERATOR MADLIB_SCHEMA.= (
935 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_eq,
936 commutator = operator(MADLIB_SCHEMA.=) ,
937 -- negator = operator(MADLIB_SCHEMA.<>) ,
938 restrict = eqsel, join = eqjoinsel
941 --! Transition
function for mean(svec) aggregate
944 RETURNS FLOAT[] AS 'MODULE_PATHNAME'
945 LANGUAGE C IMMUTABLE;
947 --! Preliminary merge function for
mean(svec) aggregate
950 RETURNS FLOAT[] AS 'MODULE_PATHNAME'
951 LANGUAGE C IMMUTABLE;
953 --! Final function for
mean(svec) aggregate
956 RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME'
957 LANGUAGE C IMMUTABLE;
959 --! Aggregate that computes the element-wise
mean of a list of vectors.
961 CREATE AGGREGATE MADLIB_SCHEMA.
mean( MADLIB_SCHEMA.svec) (
968 --! Aggregate that provides the element-wise sum of a list of vectors.
970 -- DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.
svec_sum(MADLIB_SCHEMA.svec);
971 CREATE AGGREGATE MADLIB_SCHEMA.
svec_sum (MADLIB_SCHEMA.svec) (
973 m4_ifdef(`__GREENPLUM__',`prefunc=MADLIB_SCHEMA.svec_plus,')
974 INITCOND = '{1}:{0.}
', -- Zero
975 STYPE = MADLIB_SCHEMA.svec
978 --! Aggregate that provides a tally of nonzero entries in a list of vectors.
980 -- DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.svec_count_nonzero(MADLIB_SCHEMA.svec);
981 CREATE AGGREGATE MADLIB_SCHEMA.svec_count_nonzero (MADLIB_SCHEMA.svec) (
982 SFUNC = MADLIB_SCHEMA.svec_count,
983 m4_ifdef(`__GREENPLUM__',`prefunc=MADLIB_SCHEMA.svec_plus,
')
984 INITCOND = '{1}:{0.}
', -- Zero
985 STYPE = MADLIB_SCHEMA.svec
988 --! Aggregate that turns a list of float8 values into an SVEC.
990 -- DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.svec_agg(float8);
992 m4_ifdef(`__GREENPLUM__', m4_ifdef(`__HAS_ORDERED_AGGREGATES__
', `ORDERED'))
993 AGGREGATE MADLIB_SCHEMA.svec_agg (float8) (
994 SFUNC = MADLIB_SCHEMA.svec_pivot,
995 m4_ifdef(`__GREENPLUM__
', m4_ifdef(`__HAS_ORDERED_AGGREGATES__', `
', ``prefunc=MADLIB_SCHEMA.svec_concat,''))
996 STYPE = MADLIB_SCHEMA.svec
999 --! Aggregate that computes the median element of a list of float8 values.
1001 -- DROP AGGREGATE IF EXISTS MADLIB_SCHEMA.svec_median_inmemory(float8);
1002 CREATE AGGREGATE MADLIB_SCHEMA.svec_median_inmemory (float8) (
1003 SFUNC = MADLIB_SCHEMA.svec_pivot,
1004 m4_ifdef(`__GREENPLUM__',`prefunc=MADLIB_SCHEMA.svec_concat,
')
1005 FINALFUNC = MADLIB_SCHEMA.svec_median,
1006 STYPE = MADLIB_SCHEMA.svec
1009 -- Comparisons based on L2 Norm
1010 --! Returns true if the l2 norm of the first SVEC is less than that of the second SVEC.
1012 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;
1014 --! Returns true if the l2 norm of the first SVEC is less than or equal to that of the second SVEC.
1016 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;
1018 --! Returns true if the l2 norm of the first SVEC is equal to that of the second SVEC.
1020 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;
1022 --! Returns true if the l2 norm of the first SVEC is not equal to that of the second SVEC.
1024 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;
1026 --! Returns true if the l2 norm of the first SVEC is greater than that of the second SVEC.
1028 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;
1030 --! Returns true if the l2 norm of the first SVEC is greater than or equal to that of the second SVEC.
1032 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;
1034 --! Returns a value indicating the relative values of the l2 norms of two SVECs.
1036 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;
1038 --! Normalizes an SVEC that is divides all elements by its norm/magnitude.
1040 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.normalize(MADLIB_SCHEMA.svec)
1041 RETURNS MADLIB_SCHEMA.svec AS 'MODULE_PATHNAME
', 'svec_normalize
' LANGUAGE C IMMUTABLE STRICT;
1044 DROP OPERATOR IF EXISTS < (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;
1045 DROP OPERATOR IF EXISTS <= (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;
1046 DROP OPERATOR IF EXISTS <> (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) ;
1047 DROP OPERATOR IF EXISTS == (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;
1048 DROP OPERATOR IF EXISTS > (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;
1049 DROP OPERATOR IF EXISTS >= (MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec) CASCADE ;
1050 DROP OPERATOR IF EXISTS *|| (int4, MADLIB_SCHEMA.svec) ;
1053 CREATE OPERATOR MADLIB_SCHEMA.< (
1054 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_lt,
1055 commutator = operator(MADLIB_SCHEMA.>) , negator = operator(MADLIB_SCHEMA.>=) ,
1056 restrict = scalarltsel, join = scalarltjoinsel
1058 CREATE OPERATOR MADLIB_SCHEMA.<= (
1059 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_le,
1060 commutator = operator(MADLIB_SCHEMA.>=) , negator = operator(MADLIB_SCHEMA.>) ,
1061 restrict = scalarltsel, join = scalarltjoinsel
1063 CREATE OPERATOR MADLIB_SCHEMA.<> (
1064 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_eq,
1065 commutator = operator(MADLIB_SCHEMA.<>) ,
1066 negator = operator(MADLIB_SCHEMA.=),
1067 restrict = eqsel, join = eqjoinsel
1069 CREATE OPERATOR MADLIB_SCHEMA.== (
1070 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_eq,
1071 commutator = operator(MADLIB_SCHEMA.=) ,
1072 negator = operator(MADLIB_SCHEMA.<>) ,
1073 restrict = eqsel, join = eqjoinsel
1075 CREATE OPERATOR MADLIB_SCHEMA.>= (
1076 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_ge,
1077 commutator = operator(MADLIB_SCHEMA.<=) , negator = operator(MADLIB_SCHEMA.<) ,
1078 restrict = scalargtsel, join = scalargtjoinsel
1080 CREATE OPERATOR MADLIB_SCHEMA.> (
1081 leftarg = MADLIB_SCHEMA.svec, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_l2_gt,
1082 commutator = operator(MADLIB_SCHEMA.<) , negator = operator(MADLIB_SCHEMA.<=) ,
1083 restrict = scalargtsel, join = scalargtjoinsel
1086 CREATE OPERATOR MADLIB_SCHEMA.*|| (
1087 leftarg = int4, rightarg = MADLIB_SCHEMA.svec, procedure = MADLIB_SCHEMA.svec_concat_replicate
1090 CREATE OPERATOR CLASS MADLIB_SCHEMA.svec_l2_ops
1091 DEFAULT FOR TYPE MADLIB_SCHEMA.svec USING btree AS
1092 OPERATOR 1 MADLIB_SCHEMA.< ,
1093 OPERATOR 2 MADLIB_SCHEMA.<= ,
1094 OPERATOR 3 MADLIB_SCHEMA.== ,
1095 OPERATOR 4 MADLIB_SCHEMA.>= ,
1096 OPERATOR 5 MADLIB_SCHEMA.> ,
1097 FUNCTION 1 MADLIB_SCHEMA.svec_l2_cmp(MADLIB_SCHEMA.svec, MADLIB_SCHEMA.svec);