#!/usr/bin/env python3 from util.kSAT import kSAT from util import SAT2QUBO import util.script as scriptUtils import pymongo import ssl import json def main(): args = __parseArguments() dbContext = scriptUtils.getDBContext(args["dbConfigPath"]) __createQubos(dbContext, args["experimentScope"]) def __parseArguments(): parser = scriptUtils.ArgParser() parser.addArg(alias="experimentScope", shortFlag="s", longFlag="scope", help="the experiment experiment scope of interest", type=str) parser.addArg(alias="dbConfigPath", shortFlag="d", longFlag="db_config", help="path to the database config file", type=str, default="database.config") return parser.parse() def __createQubos(dbContext, experimentScope): instances = __queryInstancs(dbContext["db"], experimentScope) for instance in instances: sat = kSAT() for clause in instance["clauses"]: sat.addClause(clause); qubo = SAT2QUBO.WMISdictQUBO(sat) doc = {} doc["instance"] = instance["_id"] doc["description"] = {"": "", "": " | | \"\"", "": "", "": "", "": "", "": "", "": "", "": ""} doc["qubo"] = __qubo2JSON(qubo) dbContext["db"]["wmis_qubos"].insert_one(doc) def __qubo2JSON(qubo): quboJSON = [] for coupler, value in qubo.items(): quboJSON.append([coupler, float(value)]) return quboJSON def __queryInstancs(db, experimentScope): return db["experiment_scopes"].aggregate([ { "$match": {"_id": experimentScope} }, { "$unwind": "$instances" }, { "$lookup": { "from": "instances", "localField": "instances", "foreignField": "_id", "as": "instance" } }, { "$unwind": "$instance" }, { "$replaceRoot": {"newRoot": "$instance"} } ]) if __name__ == "__main__": main()