Spaces:
Running on Zero
Running on Zero
| import sqlite3, json | |
| from ..config import HYPERGRAPH_DB | |
| from .engine import Hypergraph | |
| def save(hg: Hypergraph): | |
| con = sqlite3.connect(HYPERGRAPH_DB) | |
| con.executescript(""" | |
| CREATE TABLE IF NOT EXISTS nodes(node_id TEXT PRIMARY KEY, data TEXT); | |
| CREATE TABLE IF NOT EXISTS edges(edge_id TEXT PRIMARY KEY, src TEXT, dst TEXT, data TEXT); | |
| DELETE FROM nodes; DELETE FROM edges; | |
| """) | |
| for i in hg.g.node_indexes(): | |
| d = hg.g[i] | |
| con.execute("INSERT OR REPLACE INTO nodes VALUES(?,?)", (d["node_id"], json.dumps(d))) | |
| for s, t in hg.g.edge_list(): | |
| d = hg.g.get_edge_data(s, t) | |
| sd, td = hg.g[s]["node_id"], hg.g[t]["node_id"] | |
| con.execute("INSERT OR REPLACE INTO edges VALUES(?,?,?,?)", (d["edge_id"], sd, td, json.dumps(d))) | |
| con.commit(); con.close() | |
| def load() -> Hypergraph: | |
| hg = Hypergraph() | |
| if not HYPERGRAPH_DB.exists(): | |
| return hg | |
| con = sqlite3.connect(HYPERGRAPH_DB) | |
| try: | |
| for nid, data in con.execute("SELECT node_id, data FROM nodes"): | |
| d = json.loads(data) | |
| i = hg.g.add_node(d) | |
| hg._idx[nid] = i | |
| for eid, sd, td, data in con.execute("SELECT edge_id, src, dst, data FROM edges"): | |
| d = json.loads(data) | |
| if sd in hg._idx and td in hg._idx: | |
| hg.g.add_edge(hg._idx[sd], hg._idx[td], d) | |
| except sqlite3.OperationalError: | |
| pass | |
| con.close() | |
| return hg | |