import numpy as np
import struct
import bitpolar
DIM = 128
q = bitpolar.TurboQuantizer(dim=DIM, bits=4, projections=32, seed=42)
print("=== DuckDB Vector Store ===\n")
try:
import duckdb
con = duckdb.connect(":memory:")
con.execute("CREATE TABLE vectors (id INTEGER PRIMARY KEY, code BLOB, label TEXT)")
vectors = {i: np.random.randn(DIM).astype(np.float32) for i in range(20)}
for vid, vec in vectors.items():
code = q.encode(vec)
con.execute("INSERT INTO vectors VALUES (?, ?, ?)", [vid, code, f"doc_{vid}"])
print(f"Added {len(vectors)} vectors to DuckDB")
count = con.execute("SELECT COUNT(*) FROM vectors").fetchone()[0]
print(f"Count: {count}")
query = np.random.randn(DIM).astype(np.float32)
rows = con.execute("SELECT id, code, label FROM vectors").fetchall()
scores = [(r[0], q.inner_product(r[1], query), r[2]) for r in rows]
scores.sort(key=lambda x: x[1], reverse=True)
print("Top 3 search results:")
for vid, score, label in scores[:3]:
print(f" id={vid}, score={score:.4f}, label={label}")
con.execute("DELETE FROM vectors WHERE id = 0")
count = con.execute("SELECT COUNT(*) FROM vectors").fetchone()[0]
print(f"After delete: {count} vectors\n")
except ImportError:
print("duckdb not installed — pip install duckdb\n")
print("=== SQLite Vector Store ===\n")
import sqlite3
conn = sqlite3.connect(":memory:")
conn.execute("CREATE TABLE vectors (id INTEGER PRIMARY KEY, code BLOB, label TEXT)")
for vid, vec in vectors.items():
code = q.encode(vec)
conn.execute("INSERT INTO vectors VALUES (?, ?, ?)", [vid, code, f"item_{vid}"])
conn.commit()
print(f"Added {len(vectors)} vectors to SQLite")
count = conn.execute("SELECT COUNT(*) FROM vectors").fetchone()[0]
print(f"Count: {count}")
query = np.random.randn(DIM).astype(np.float32)
rows = conn.execute("SELECT id, code, label FROM vectors").fetchall()
scores = [(r[0], q.inner_product(bytes(r[1]), query), r[2]) for r in rows]
scores.sort(key=lambda x: x[1], reverse=True)
print("Top 3 search results:")
for vid, score, label in scores[:3]:
print(f" id={vid}, score={score:.4f}, label={label}")
conn.execute("DELETE FROM vectors WHERE id = 0")
conn.commit()
count = conn.execute("SELECT COUNT(*) FROM vectors").fetchone()[0]
print(f"After delete: {count} vectors")