From b657f17c1de9006cba088b629d2c178c20b1c18a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erc=C3=BCment=20Kaya?= Date: Tue, 15 Sep 2026 22:38:47 +0200 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20minor=20improvements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/mqss/client.h | 2 +- include/mqss/job.h | 6 ++--- src/client.cpp | 5 +++-- src/job.cpp | 22 +++++++++++-------- .../integration/c++/job_integration_test.cpp | 2 +- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/include/mqss/client.h b/include/mqss/client.h index 222c415..f40b915 100644 --- a/include/mqss/client.h +++ b/include/mqss/client.h @@ -48,7 +48,7 @@ class MQSSClient { private: std::unique_ptr waitForJobResult(const JobRequest& job, size_t poll_seconds); - + bool mIsHpc; std::unique_ptr mClient; public: diff --git a/include/mqss/job.h b/include/mqss/job.h index 05d59b9..aa8d168 100644 --- a/include/mqss/job.h +++ b/include/mqss/job.h @@ -31,7 +31,7 @@ class JobRequest { public: virtual ~JobRequest() = default; - virtual nlohmann::json toJson() const = 0; + virtual nlohmann::json toJson(bool isHpc) const = 0; virtual std::string getPath() const = 0; std::string getUuid() const { return mUuid; } void setUuid(const std::string& uuid) { mUuid = uuid; } @@ -70,7 +70,7 @@ class CircuitJobRequest : public JobRequest { void setQueued(bool queued) { mQueued = queued; } bool isQueued() const { return mQueued; } - nlohmann::json toJson() const; + nlohmann::json toJson(bool isHpc) const; std::string getPath() const { return "job"; } }; @@ -102,7 +102,7 @@ class HamiltonianJobRequest : public JobRequest { } std::string getCoefficientsString() const { return mCoefficientsStr; } - nlohmann::json toJson() const; + nlohmann::json toJson(bool isHpc) const; std::string getPath() const { return "hamiltonian_job"; } }; diff --git a/src/client.cpp b/src/client.cpp index 704a3a8..ff65b70 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -30,7 +30,8 @@ using namespace mqss::client; // GCOVR_EXCL_START MQSSClient::MQSSClient(const std::string& token, - const std::string& url_or_queue, bool is_hpc) { + const std::string& url_or_queue, bool is_hpc) + : mIsHpc(is_hpc) { if (is_hpc) { mClient = std::make_unique(token, url_or_queue); } else { @@ -67,7 +68,7 @@ MQSSClient::getResourceInfo(const std::string& resource) const { } std::optional MQSSClient::submitJob(JobRequest& job) { std::string path = job.getPath(); - std::string result = mClient->post(path, job.toJson()); + std::string result = mClient->post(path, job.toJson(mIsHpc)); if (result.empty() || !nlohmann::json::accept(result)) return std::nullopt; diff --git a/src/job.cpp b/src/job.cpp index 34d8880..36ef02d 100644 --- a/src/job.cpp +++ b/src/job.cpp @@ -31,14 +31,18 @@ using namespace mqss::client; -nlohmann::json CircuitJobRequest::toJson() const { - - return {{"circuit", mCircuit}, - {"circuit_format", mCircuitFormat}, - {"resource_name", mResourceName}, - {"shots", mShots}, - {"no_modify", mNoModify}, - {"queued", mQueued}}; +nlohmann::json CircuitJobRequest::toJson(bool isHpc) const { + nlohmann::json circuit = mCircuit; + + if (isHpc) { + circuit = nlohmann::json::array({mCircuit}); + } + + return { + {"circuit", std::move(circuit)}, {"circuit_format", mCircuitFormat}, + {"resource_name", mResourceName}, {"shots", mShots}, + {"no_modify", mNoModify}, {"queued", mQueued}, + }; } CircuitJobRequest::CircuitJobRequest(std::string circuit, @@ -57,7 +61,7 @@ HamiltonianJobRequest::HamiltonianJobRequest(std::string resourceName, mInteractionStr(std::move(interactionStr)), mCoefficientsStr(std::move(coefficientsStr)) {} -nlohmann::json HamiltonianJobRequest::toJson() const { +nlohmann::json HamiltonianJobRequest::toJson(bool isHpc) const { return {{"resource_name", mResourceName}, {"interaction_str", mInteractionStr}, diff --git a/tests/integration/c++/job_integration_test.cpp b/tests/integration/c++/job_integration_test.cpp index eaf627d..f682888 100644 --- a/tests/integration/c++/job_integration_test.cpp +++ b/tests/integration/c++/job_integration_test.cpp @@ -29,7 +29,7 @@ #define MQSS_HPC_QUEUENAME std::getenv("MQSS_HPC_QUEUENAME") #define MQSS_API_TOKEN std::getenv("MQSS_API_TOKEN") -#define MQSS_API_URL "https://portal-test.quantum.lrz.de:4000/v1" +#define MQSS_API_URL "https://portal.quantum.lrz.de:4000/v1/" struct ClientCtorParam { std::string token; From 763988e494172f2629242e877aad90b2c96b42fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erc=C3=BCment=20Kaya?= Date: Wed, 16 Sep 2026 22:14:23 +0200 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=90=9B=20minor=20bug=20fixed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/resource.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/resource.cpp b/src/resource.cpp index d9414ef..5726940 100644 --- a/src/resource.cpp +++ b/src/resource.cpp @@ -159,7 +159,9 @@ Resource::Resource(std::string name, unsigned qubitCount, bool online, Resource::Resource(const nlohmann::json& json) { std::string name = json.value("name", ""); - unsigned qubitCount = json.value("qubits", 0); + unsigned qubitCount = json.contains("qubits") && json["qubits"].is_number() + ? json["qubits"].get() + : 0; bool online = json.value("online", false); std::vector> couplingMap =