diff --git a/README.md b/README.md index b36270b..88b0931 100644 --- a/README.md +++ b/README.md @@ -895,10 +895,10 @@ Function | Description | Added --- | --- | --- cosine_distance(halfvec, halfvec) → double precision | cosine distance | unreleased halfvec_dims(halfvec) → integer | number of dimensions | unreleased -halfvec_norm(halfvec) → double precision | Euclidean norm | unreleased inner_product(halfvec, halfvec) → double precision | inner product | unreleased l1_distance(halfvec, halfvec) → double precision | taxicab distance | unreleased l2_distance(halfvec, halfvec) → double precision | Euclidean distance | unreleased +l2_norm(halfvec) → double precision | Euclidean norm | unreleased quantize_binary(halfvec) → bit | quantize | unreleased subvector(halfvec, integer, integer) → halfvec | subvector | unreleased @@ -947,7 +947,7 @@ cosine_distance(sparsevec, sparsevec) → double precision | cosine distance | u inner_product(sparsevec, sparsevec) → double precision | inner product | unreleased l1_distance(sparsevec, sparsevec) → double precision | taxicab distance | unreleased l2_distance(sparsevec, sparsevec) → double precision | Euclidean distance | unreleased -sparsevec_norm(sparsevec) → double precision | Euclidean norm | unreleased +l2_norm(sparsevec) → double precision | Euclidean norm | unreleased ## Installation Notes - Linux and Mac diff --git a/sql/vector--0.6.2--0.7.0.sql b/sql/vector--0.6.2--0.7.0.sql index 8d13060..e0a4a5d 100644 --- a/sql/vector--0.6.2--0.7.0.sql +++ b/sql/vector--0.6.2--0.7.0.sql @@ -74,8 +74,8 @@ CREATE FUNCTION l1_distance(halfvec, halfvec) RETURNS float8 CREATE FUNCTION halfvec_dims(halfvec) RETURNS integer AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; -CREATE FUNCTION halfvec_norm(halfvec) RETURNS float8 - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; +CREATE FUNCTION l2_norm(halfvec) RETURNS float8 + AS 'MODULE_PATHNAME', 'halfvec_l2_norm' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION halfvec_add(halfvec, halfvec) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; @@ -277,15 +277,15 @@ CREATE OPERATOR CLASS halfvec_ip_ops OPERATOR 1 <#> (halfvec, halfvec) FOR ORDER BY float_ops, FUNCTION 1 halfvec_negative_inner_product(halfvec, halfvec), FUNCTION 3 halfvec_spherical_distance(halfvec, halfvec), - FUNCTION 4 halfvec_norm(halfvec); + FUNCTION 4 l2_norm(halfvec); CREATE OPERATOR CLASS halfvec_cosine_ops FOR TYPE halfvec USING ivfflat AS OPERATOR 1 <=> (halfvec, halfvec) FOR ORDER BY float_ops, FUNCTION 1 halfvec_negative_inner_product(halfvec, halfvec), - FUNCTION 2 halfvec_norm(halfvec), + FUNCTION 2 l2_norm(halfvec), FUNCTION 3 halfvec_spherical_distance(halfvec, halfvec), - FUNCTION 4 halfvec_norm(halfvec); + FUNCTION 4 l2_norm(halfvec); CREATE OPERATOR CLASS halfvec_l2_ops FOR TYPE halfvec USING hnsw AS @@ -301,7 +301,7 @@ CREATE OPERATOR CLASS halfvec_cosine_ops FOR TYPE halfvec USING hnsw AS OPERATOR 1 <=> (halfvec, halfvec) FOR ORDER BY float_ops, FUNCTION 1 halfvec_negative_inner_product(halfvec, halfvec), - FUNCTION 2 halfvec_norm(halfvec); + FUNCTION 2 l2_norm(halfvec); CREATE TYPE sparsevec; @@ -338,8 +338,8 @@ CREATE FUNCTION inner_product(sparsevec, sparsevec) RETURNS float8 CREATE FUNCTION cosine_distance(sparsevec, sparsevec) RETURNS float8 AS 'MODULE_PATHNAME', 'sparsevec_cosine_distance' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; -CREATE FUNCTION sparsevec_norm(sparsevec) RETURNS float8 - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; +CREATE FUNCTION l2_norm(sparsevec) RETURNS float8 + AS 'MODULE_PATHNAME', 'sparsevec_l2_norm' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION sparsevec_lt(sparsevec, sparsevec) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; @@ -460,4 +460,4 @@ CREATE OPERATOR CLASS sparsevec_cosine_ops FOR TYPE sparsevec USING hnsw AS OPERATOR 1 <=> (sparsevec, sparsevec) FOR ORDER BY float_ops, FUNCTION 1 sparsevec_negative_inner_product(sparsevec, sparsevec), - FUNCTION 2 sparsevec_norm(sparsevec); + FUNCTION 2 l2_norm(sparsevec); diff --git a/sql/vector.sql b/sql/vector.sql index e183c1f..ebeecec 100644 --- a/sql/vector.sql +++ b/sql/vector.sql @@ -367,8 +367,8 @@ CREATE FUNCTION l1_distance(halfvec, halfvec) RETURNS float8 CREATE FUNCTION halfvec_dims(halfvec) RETURNS integer AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; -CREATE FUNCTION halfvec_norm(halfvec) RETURNS float8 - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; +CREATE FUNCTION l2_norm(halfvec) RETURNS float8 + AS 'MODULE_PATHNAME', 'halfvec_l2_norm' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION halfvec_add(halfvec, halfvec) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; @@ -582,15 +582,15 @@ CREATE OPERATOR CLASS halfvec_ip_ops OPERATOR 1 <#> (halfvec, halfvec) FOR ORDER BY float_ops, FUNCTION 1 halfvec_negative_inner_product(halfvec, halfvec), FUNCTION 3 halfvec_spherical_distance(halfvec, halfvec), - FUNCTION 4 halfvec_norm(halfvec); + FUNCTION 4 l2_norm(halfvec); CREATE OPERATOR CLASS halfvec_cosine_ops FOR TYPE halfvec USING ivfflat AS OPERATOR 1 <=> (halfvec, halfvec) FOR ORDER BY float_ops, FUNCTION 1 halfvec_negative_inner_product(halfvec, halfvec), - FUNCTION 2 halfvec_norm(halfvec), + FUNCTION 2 l2_norm(halfvec), FUNCTION 3 halfvec_spherical_distance(halfvec, halfvec), - FUNCTION 4 halfvec_norm(halfvec); + FUNCTION 4 l2_norm(halfvec); CREATE OPERATOR CLASS halfvec_l2_ops FOR TYPE halfvec USING hnsw AS @@ -606,7 +606,7 @@ CREATE OPERATOR CLASS halfvec_cosine_ops FOR TYPE halfvec USING hnsw AS OPERATOR 1 <=> (halfvec, halfvec) FOR ORDER BY float_ops, FUNCTION 1 halfvec_negative_inner_product(halfvec, halfvec), - FUNCTION 2 halfvec_norm(halfvec); + FUNCTION 2 l2_norm(halfvec); --- sparsevec type @@ -647,8 +647,8 @@ CREATE FUNCTION inner_product(sparsevec, sparsevec) RETURNS float8 CREATE FUNCTION cosine_distance(sparsevec, sparsevec) RETURNS float8 AS 'MODULE_PATHNAME', 'sparsevec_cosine_distance' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; -CREATE FUNCTION sparsevec_norm(sparsevec) RETURNS float8 - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; +CREATE FUNCTION l2_norm(sparsevec) RETURNS float8 + AS 'MODULE_PATHNAME', 'sparsevec_l2_norm' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; -- sparsevec private functions @@ -779,4 +779,4 @@ CREATE OPERATOR CLASS sparsevec_cosine_ops FOR TYPE sparsevec USING hnsw AS OPERATOR 1 <=> (sparsevec, sparsevec) FOR ORDER BY float_ops, FUNCTION 1 sparsevec_negative_inner_product(sparsevec, sparsevec), - FUNCTION 2 sparsevec_norm(sparsevec); + FUNCTION 2 l2_norm(sparsevec); diff --git a/src/halfvec.c b/src/halfvec.c index 5e12712..c2c1ee3 100644 --- a/src/halfvec.c +++ b/src/halfvec.c @@ -727,9 +727,9 @@ halfvec_dims(PG_FUNCTION_ARGS) /* * Get the L2 norm of a half vector */ -PGDLLEXPORT PG_FUNCTION_INFO_V1(halfvec_norm); +PGDLLEXPORT PG_FUNCTION_INFO_V1(halfvec_l2_norm); Datum -halfvec_norm(PG_FUNCTION_ARGS) +halfvec_l2_norm(PG_FUNCTION_ARGS) { HalfVector *a = PG_GETARG_HALFVEC_P(0); half *ax = a->x; diff --git a/src/sparsevec.c b/src/sparsevec.c index 3c5058c..407195d 100644 --- a/src/sparsevec.c +++ b/src/sparsevec.c @@ -784,9 +784,9 @@ sparsevec_cosine_distance(PG_FUNCTION_ARGS) /* * Get the L2 norm of a sparse vector */ -PGDLLEXPORT PG_FUNCTION_INFO_V1(sparsevec_norm); +PGDLLEXPORT PG_FUNCTION_INFO_V1(sparsevec_l2_norm); Datum -sparsevec_norm(PG_FUNCTION_ARGS) +sparsevec_l2_norm(PG_FUNCTION_ARGS) { SparseVector *a = PG_GETARG_SPARSEVEC_P(0); float *ax = SPARSEVEC_VALUES(a); diff --git a/test/expected/halfvec_functions.out b/test/expected/halfvec_functions.out index 8067d46..d2b3e9a 100644 --- a/test/expected/halfvec_functions.out +++ b/test/expected/halfvec_functions.out @@ -144,22 +144,22 @@ SELECT halfvec_dims('[1,2,3]'::halfvec); 3 (1 row) -SELECT round(halfvec_norm('[1,1]')::numeric, 5); +SELECT round(l2_norm('[1,1]'::halfvec)::numeric, 5); round --------- 1.41421 (1 row) -SELECT halfvec_norm('[3,4]'); - halfvec_norm --------------- - 5 +SELECT l2_norm('[3,4]'::halfvec); + l2_norm +--------- + 5 (1 row) -SELECT halfvec_norm('[0,1]'); - halfvec_norm --------------- - 1 +SELECT l2_norm('[0,1]'::halfvec); + l2_norm +--------- + 1 (1 row) SELECT l2_distance('[0,0]'::halfvec, '[3,4]'); diff --git a/test/expected/sparsevec_functions.out b/test/expected/sparsevec_functions.out index 9f8a279..8f3dab6 100644 --- a/test/expected/sparsevec_functions.out +++ b/test/expected/sparsevec_functions.out @@ -112,28 +112,28 @@ SELECT sparsevec_cmp('{1:2,2:3}/2', '{1:1,2:2,3:3}/3'); 1 (1 row) -SELECT round(sparsevec_norm('{1:1,2:1}/2')::numeric, 5); +SELECT round(l2_norm('{1:1,2:1}/2'::sparsevec)::numeric, 5); round --------- 1.41421 (1 row) -SELECT sparsevec_norm('{1:3,2:4}/2'); - sparsevec_norm ----------------- - 5 +SELECT l2_norm('{1:3,2:4}/2'::sparsevec); + l2_norm +--------- + 5 (1 row) -SELECT sparsevec_norm('{2:1}/2'); - sparsevec_norm ----------------- - 1 +SELECT l2_norm('{2:1}/2'::sparsevec); + l2_norm +--------- + 1 (1 row) -SELECT sparsevec_norm('{1:3e37,2:4e37}/2')::real; - sparsevec_norm ----------------- - 5e+37 +SELECT l2_norm('{1:3e37,2:4e37}/2'::sparsevec)::real; + l2_norm +--------- + 5e+37 (1 row) SELECT l2_distance('{}/2'::sparsevec, '{1:3,2:4}/2'); diff --git a/test/sql/halfvec_functions.sql b/test/sql/halfvec_functions.sql index 430d444..67acc67 100644 --- a/test/sql/halfvec_functions.sql +++ b/test/sql/halfvec_functions.sql @@ -29,9 +29,9 @@ SELECT halfvec_cmp('[2,3]', '[1,2,3]'); SELECT halfvec_dims('[1,2,3]'::halfvec); -SELECT round(halfvec_norm('[1,1]')::numeric, 5); -SELECT halfvec_norm('[3,4]'); -SELECT halfvec_norm('[0,1]'); +SELECT round(l2_norm('[1,1]'::halfvec)::numeric, 5); +SELECT l2_norm('[3,4]'::halfvec); +SELECT l2_norm('[0,1]'::halfvec); SELECT l2_distance('[0,0]'::halfvec, '[3,4]'); SELECT l2_distance('[0,0]'::halfvec, '[0,1]'); diff --git a/test/sql/sparsevec_functions.sql b/test/sql/sparsevec_functions.sql index c7515b5..76549c7 100644 --- a/test/sql/sparsevec_functions.sql +++ b/test/sql/sparsevec_functions.sql @@ -19,10 +19,10 @@ SELECT sparsevec_cmp('{1:1,2:2,3:3}/3', '{1:1,2:2}/2'); SELECT sparsevec_cmp('{1:1,2:2}/2', '{1:2,2:3,3:4}/3'); SELECT sparsevec_cmp('{1:2,2:3}/2', '{1:1,2:2,3:3}/3'); -SELECT round(sparsevec_norm('{1:1,2:1}/2')::numeric, 5); -SELECT sparsevec_norm('{1:3,2:4}/2'); -SELECT sparsevec_norm('{2:1}/2'); -SELECT sparsevec_norm('{1:3e37,2:4e37}/2')::real; +SELECT round(l2_norm('{1:1,2:1}/2'::sparsevec)::numeric, 5); +SELECT l2_norm('{1:3,2:4}/2'::sparsevec); +SELECT l2_norm('{2:1}/2'::sparsevec); +SELECT l2_norm('{1:3e37,2:4e37}/2'::sparsevec)::real; SELECT l2_distance('{}/2'::sparsevec, '{1:3,2:4}/2'); SELECT l2_distance('{}/2'::sparsevec, '{2:1}/2');