3434
3535-- halfvec
3636
37- local function halfvec_serialize (v )
37+ local halfvec_mt = {
38+ pgmoon_serialize = function (v )
39+ return 0 , halfvec_serialize (v )
40+ end
41+ }
42+
43+ function pgvector .halfvec (v )
44+ local vec = {}
45+ for _ , x in ipairs (v ) do
46+ table.insert (vec , x )
47+ end
48+ return setmetatable (vec , halfvec_mt )
49+ end
50+
51+ function halfvec_serialize (v )
3852 for _ , v in ipairs (v ) do
3953 assert (type (v ) == " number" )
4054 end
4155 return " [" .. table.concat (v , " ," ) .. " ]"
4256end
4357
44- local function halfvec_deserialize (v )
58+ function halfvec_deserialize (v )
4559 local vec = {}
4660 for x in string.gmatch (string.sub (v , 2 , - 2 ), " [^,]+" ) do
4761 table.insert (vec , tonumber (x ))
@@ -50,31 +64,37 @@ local function halfvec_deserialize(v)
5064 return setmetatable (vec , halfvec_mt )
5165end
5266
53- local halfvec_mt = {
67+ -- sparsevec
68+
69+ local sparsevec_mt = {
5470 pgmoon_serialize = function (v )
55- return 0 , halfvec_serialize (v )
71+ return 0 , sparsevec_serialize (v )
5672 end
5773}
5874
59- function pgvector .halfvec ( v )
60- local vec = {}
61- for _ , x in ipairs ( v ) do
62- table.insert ( vec , x )
75+ function pgvector .sparsevec ( elements , dim )
76+ for k , v in pairs ( elements ) do
77+ assert ( type ( k ) == " number " )
78+ assert ( type ( v ) == " number " )
6379 end
64- return setmetatable (vec , halfvec_mt )
65- end
80+ assert (type (dim ) == " number" )
6681
67- -- sparsevec
82+ local vec = {
83+ elements = elements ,
84+ dim = dim
85+ }
86+ return setmetatable (vec , sparsevec_mt )
87+ end
6888
69- local function sparsevec_serialize (vec )
89+ function sparsevec_serialize (vec )
7090 local elements = {}
7191 for i , v in pairs (vec [" elements" ]) do
7292 table.insert (elements , tonumber (i ) .. " :" .. tonumber (v ))
7393 end
7494 return " {" .. table.concat (elements , " ," ) .. " }/" .. tonumber (vec [" dim" ])
7595end
7696
77- local function sparsevec_deserialize (v )
97+ function sparsevec_deserialize (v )
7898 local m = string.gmatch (v , " [^/]+" )
7999 local elements = {}
80100 for e in string.gmatch (string.sub (m (), 2 , - 2 ), " [^,]+" ) do
@@ -90,26 +110,6 @@ local function sparsevec_deserialize(v)
90110 return setmetatable (vec , sparsevec_mt )
91111end
92112
93- local sparsevec_mt = {
94- pgmoon_serialize = function (v )
95- return 0 , sparsevec_serialize (v )
96- end
97- }
98-
99- function pgvector .sparsevec (elements , dim )
100- for k , v in pairs (elements ) do
101- assert (type (k ) == " number" )
102- assert (type (v ) == " number" )
103- end
104- assert (type (dim ) == " number" )
105-
106- local vec = {
107- elements = elements ,
108- dim = dim
109- }
110- return setmetatable (vec , sparsevec_mt )
111- end
112-
113113-- register
114114
115115function pgvector .setup_vector (pg )
0 commit comments