diff --git a/poetry.lock b/poetry.lock index 1ba1ce2..ba24250 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -1115,7 +1115,7 @@ cli = ["click (>=5.0)"] [[package]] name = "qi-compute-api-client" -version = "0.9.0" +version = "0.19.0" description = "An API client for the Compute Job Manager of Quantum Inspire." optional = false python-versions = "^3.7" @@ -1130,8 +1130,8 @@ urllib3 = "^1.25.3" [package.source] type = "git" url = "https://github.com/QuTech-Delft/compute-api-client.git" -reference = "0.9.0" -resolved_reference = "b69d71bd25a3026e116aa8f674509797e13f1920" +reference = "0.19.0" +resolved_reference = "d0dff29f9394375c02d08cff900b0a422e62cd46" [[package]] name = "qutechopenql" @@ -1430,4 +1430,4 @@ local = ["qxelarator"] [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "8dab5a07f447d0fe502e40ed1b37aa01219b5a323a28286bc5184f3ef6906387" +content-hash = "6a35b4a5f24eef924b56d966efd2afecefce2baa8e514c34e2423b011c0f2191" diff --git a/pyproject.toml b/pyproject.toml index d14930e..1376bdb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ python = "^3.8" typer = {extras = ["all"], version = "^0.9.0"} qutechopenql = "^0.11.1" pydantic = "^2.5.2" -qi-compute-api-client = {git = "https://github.com/QuTech-Delft/compute-api-client.git", branch="0.9.0"} +qi-compute-api-client = {git = "https://github.com/QuTech-Delft/compute-api-client.git", branch="0.19.0"} qxelarator = {version = "^0.6.2", optional = true} pydantic-settings = "^2.1.0" diff --git a/quantuminspire/sdk/models/circuit.py b/quantuminspire/sdk/models/circuit.py index 38c7b1d..48e9137 100644 --- a/quantuminspire/sdk/models/circuit.py +++ b/quantuminspire/sdk/models/circuit.py @@ -31,12 +31,12 @@ def content(self) -> str: return self._cqasm @property - def content_type(self) -> str: - return str(AlgorithmType.QUANTUM) + def content_type(self) -> AlgorithmType: + return AlgorithmType.QUANTUM @property - def compile_stage(self) -> str: - return str(CompileStage.NONE) + def compile_stage(self) -> CompileStage: + return CompileStage.NONE def __enter__(self) -> "Circuit": self.initialize() diff --git a/quantuminspire/sdk/models/hybrid_algorithm.py b/quantuminspire/sdk/models/hybrid_algorithm.py index 871a774..2586e1f 100644 --- a/quantuminspire/sdk/models/hybrid_algorithm.py +++ b/quantuminspire/sdk/models/hybrid_algorithm.py @@ -21,12 +21,12 @@ def content(self) -> str: return self._content @property - def content_type(self) -> str: - return str(AlgorithmType.HYBRID) + def content_type(self) -> AlgorithmType: + return AlgorithmType.HYBRID @property - def compile_stage(self) -> str: - return str(CompileStage.NONE) + def compile_stage(self) -> CompileStage: + return CompileStage.NONE def read_file(self, file_pointer: Path) -> None: """Read the python file to the wrapper. diff --git a/quantuminspire/util/api/remote_backend.py b/quantuminspire/util/api/remote_backend.py index 1bd753c..f0e0138 100644 --- a/quantuminspire/util/api/remote_backend.py +++ b/quantuminspire/util/api/remote_backend.py @@ -107,6 +107,7 @@ async def _create_algorithm(api_client: ApiClient, program: BaseAlgorithm, proje project_id=project.id, type=program.content_type, shared=ShareType.PRIVATE, + name=program.program_name, ) return await api_instance.create_algorithm_algorithms_post(obj) diff --git a/tests/sdk/test_circuit.py b/tests/sdk/test_circuit.py index 43eee1f..319759a 100644 --- a/tests/sdk/test_circuit.py +++ b/tests/sdk/test_circuit.py @@ -2,6 +2,7 @@ from unittest.mock import MagicMock import pytest +from compute_api_client import AlgorithmType, CompileStage from pytest_mock import MockerFixture from quantuminspire.sdk.models.circuit import Circuit @@ -43,14 +44,14 @@ def test_get_content_type(openql: MagicMock, mock_file: None) -> None: with Circuit(platform_name="platform", program_name="program") as c: pass - assert c.content_type == "quantum" + assert c.content_type.value == "quantum" def test_get_compile_stage(openql: MagicMock, mock_file: None) -> None: with Circuit(platform_name="platform", program_name="program") as c: pass - assert c.compile_stage == "none" + assert c.compile_stage.value == "none" def test_create_empty_circuit(openql: MagicMock, mock_file: None) -> None: diff --git a/tests/sdk/test_hybrid_algorithm.py b/tests/sdk/test_hybrid_algorithm.py index 5d9a59e..d649f74 100644 --- a/tests/sdk/test_hybrid_algorithm.py +++ b/tests/sdk/test_hybrid_algorithm.py @@ -1,6 +1,7 @@ from unittest.mock import MagicMock import pytest +from compute_api_client import AlgorithmType, CompileStage from pytest_mock import MockerFixture from quantuminspire.sdk.models.hybrid_algorithm import HybridAlgorithm @@ -27,12 +28,12 @@ def test_get_program_name() -> None: def test_get_content_type() -> None: p = HybridAlgorithm(platform_name="platform", program_name="program") - assert p.content_type == "hybrid" + assert p.content_type.value == "hybrid" def test_get_compile_stage() -> None: p = HybridAlgorithm(platform_name="platform", program_name="program") - assert p.compile_stage == "none" + assert p.compile_stage.value == "none" def test_read_algorithm(mock_file: MagicMock) -> None: diff --git a/tests/util/api/test_remote_backend.py b/tests/util/api/test_remote_backend.py index e009da0..af0ec5c 100644 --- a/tests/util/api/test_remote_backend.py +++ b/tests/util/api/test_remote_backend.py @@ -68,12 +68,20 @@ def test_run(api_client: MagicMock, compute_api_client: None, mocked_settings: M def test_get_results(mocker: MockerFixture, api_client: MagicMock, mocked_settings: MagicMock) -> None: backend = RemoteBackend() jobs_api_instance = AsyncMock() - jobs = MagicMock() - jobs.status = JobStatus.COMPLETED - jobs_api_instance.read_job_jobs_id_get.return_value = jobs + job = MagicMock() + job.status = JobStatus.COMPLETED + job.id = 1 + jobs_api_instance.read_job_jobs_id_get.return_value = job + + results_api_instance = AsyncMock() + results = MagicMock() + results_api_instance.read_results_by_job_id_results_job_job_id_get.return_value = results + mocker.patch("quantuminspire.util.api.remote_backend.JobsApi", return_value=jobs_api_instance) - backend.get_results(1) - jobs_api_instance.read_job_jobs_id_get.assert_called_with(1) + mocker.patch("quantuminspire.util.api.remote_backend.ResultsApi", return_value=results_api_instance) + backend.get_results(job.id) + jobs_api_instance.read_job_jobs_id_get.assert_called_with(job.id) + results_api_instance.read_results_by_job_id_results_job_job_id_get.assert_called_with(job.id) def test_get_results_not_completed( @@ -81,9 +89,16 @@ def test_get_results_not_completed( ) -> None: backend = RemoteBackend() jobs_api_instance = AsyncMock() - jobs = MagicMock() - jobs.status = JobStatus.RUNNING - jobs_api_instance.read_job_jobs_id_get.return_value = jobs + job = MagicMock() + job.id = 1 + job.status = JobStatus.RUNNING + jobs_api_instance.read_job_jobs_id_get.return_value = job + + results_api_instance = AsyncMock() + mocker.patch("quantuminspire.util.api.remote_backend.JobsApi", return_value=jobs_api_instance) - backend.get_results(MagicMock()) + mocker.patch("quantuminspire.util.api.remote_backend.ResultsApi", return_value=results_api_instance) + backend.get_results(job.id) api_client.assert_has_calls([call().__aenter__(), call().__aexit__(None, None, None)]) + jobs_api_instance.read_job_jobs_id_get.assert_called_with(job.id) + results_api_instance.read_results_by_job_id_results_job_job_id_get.assert_not_called()