3434
3535-- halfvec
3636
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 )
37+ local function halfvec_serialize (v )
5238 for _ , v in ipairs (v ) do
5339 assert (type (v ) == " number" )
5440 end
5541 return " [" .. table.concat (v , " ," ) .. " ]"
5642end
5743
58- function halfvec_deserialize (v )
44+ local function halfvec_deserialize (v )
5945 local vec = {}
6046 for x in string.gmatch (string.sub (v , 2 , - 2 ), " [^,]+" ) do
6147 table.insert (vec , tonumber (x ))
@@ -64,37 +50,31 @@ function halfvec_deserialize(v)
6450 return setmetatable (vec , halfvec_mt )
6551end
6652
67- -- sparsevec
68-
69- local sparsevec_mt = {
53+ local halfvec_mt = {
7054 pgmoon_serialize = function (v )
71- return 0 , sparsevec_serialize (v )
55+ return 0 , halfvec_serialize (v )
7256 end
7357}
7458
75- function pgvector .sparsevec ( elements , dim )
76- for k , v in pairs ( elements ) do
77- assert ( type ( k ) == " number " )
78- assert ( type ( v ) == " number " )
59+ function pgvector .halfvec ( v )
60+ local vec = {}
61+ for _ , x in ipairs ( v ) do
62+ table.insert ( vec , x )
7963 end
80- assert (type (dim ) == " number" )
81-
82- local vec = {
83- elements = elements ,
84- dim = dim
85- }
86- return setmetatable (vec , sparsevec_mt )
64+ return setmetatable (vec , halfvec_mt )
8765end
8866
89- function sparsevec_serialize (vec )
67+ -- sparsevec
68+
69+ local function sparsevec_serialize (vec )
9070 local elements = {}
9171 for i , v in pairs (vec [" elements" ]) do
9272 table.insert (elements , tonumber (i ) .. " :" .. tonumber (v ))
9373 end
9474 return " {" .. table.concat (elements , " ," ) .. " }/" .. tonumber (vec [" dim" ])
9575end
9676
97- function sparsevec_deserialize (v )
77+ local function sparsevec_deserialize (v )
9878 local m = string.gmatch (v , " [^/]+" )
9979 local elements = {}
10080 for e in string.gmatch (string.sub (m (), 2 , - 2 ), " [^,]+" ) do
@@ -110,6 +90,26 @@ function sparsevec_deserialize(v)
11090 return setmetatable (vec , sparsevec_mt )
11191end
11292
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