qi-compute-api-client 0.42.0__tar.gz → 0.44.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of qi-compute-api-client might be problematic. Click here for more details.

Files changed (197) hide show
  1. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/PKG-INFO +4 -3
  2. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/pyproject.toml +5 -2
  3. qi_compute_api_client-0.44.0/qi2_shared/__init__.py +0 -0
  4. qi_compute_api_client-0.44.0/qi2_shared/authentication.py +65 -0
  5. qi_compute_api_client-0.44.0/qi2_shared/client.py +52 -0
  6. qi_compute_api_client-0.44.0/qi2_shared/hybrid/__init__.py +0 -0
  7. qi_compute_api_client-0.44.0/qi2_shared/hybrid/quantum_interface.py +44 -0
  8. qi_compute_api_client-0.44.0/qi2_shared/pagination.py +44 -0
  9. qi_compute_api_client-0.44.0/qi2_shared/settings.py +68 -0
  10. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/LICENSE.md +0 -0
  11. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/README.md +0 -0
  12. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/__init__.py +0 -0
  13. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/__init__.py +0 -0
  14. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/algorithms_api.py +0 -0
  15. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/auth_config_api.py +0 -0
  16. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/backend_api.py +0 -0
  17. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/backend_types_api.py +0 -0
  18. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/batch_jobs_api.py +0 -0
  19. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/commits_api.py +0 -0
  20. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/files_api.py +0 -0
  21. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/final_results_api.py +0 -0
  22. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/health_api.py +0 -0
  23. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/jobs_api.py +0 -0
  24. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/languages_api.py +0 -0
  25. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/members_api.py +0 -0
  26. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/metadata_api.py +0 -0
  27. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/permissions_api.py +0 -0
  28. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/projects_api.py +0 -0
  29. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/reservations_api.py +0 -0
  30. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/results_api.py +0 -0
  31. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/teams_api.py +0 -0
  32. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/transactions_api.py +0 -0
  33. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api/users_api.py +0 -0
  34. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api_client.py +0 -0
  35. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/api_response.py +0 -0
  36. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/configuration.py +0 -0
  37. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Algorithm.md +0 -0
  38. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/AlgorithmIn.md +0 -0
  39. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/AlgorithmType.md +0 -0
  40. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/AlgorithmsApi.md +0 -0
  41. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/AuthConfig.md +0 -0
  42. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/AuthConfigApi.md +0 -0
  43. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Backend.md +0 -0
  44. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/BackendApi.md +0 -0
  45. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/BackendIn.md +0 -0
  46. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/BackendPatch.md +0 -0
  47. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/BackendStatus.md +0 -0
  48. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/BackendType.md +0 -0
  49. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/BackendTypesApi.md +0 -0
  50. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/BackendWithAuthentication.md +0 -0
  51. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/BatchJob.md +0 -0
  52. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/BatchJobIn.md +0 -0
  53. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/BatchJobStatus.md +0 -0
  54. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/BatchJobsApi.md +0 -0
  55. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Commit.md +0 -0
  56. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/CommitIn.md +0 -0
  57. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/CommitsApi.md +0 -0
  58. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/CompilePayload.md +0 -0
  59. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/CompileStage.md +0 -0
  60. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Domain.md +0 -0
  61. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/File.md +0 -0
  62. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/FileIn.md +0 -0
  63. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/FilesApi.md +0 -0
  64. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/FinalResult.md +0 -0
  65. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/FinalResultIn.md +0 -0
  66. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/FinalResultsApi.md +0 -0
  67. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/HTTPBadRequestError.md +0 -0
  68. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/HTTPNotFoundError.md +0 -0
  69. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/HTTPValidationError.md +0 -0
  70. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/HealthApi.md +0 -0
  71. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Job.md +0 -0
  72. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/JobIn.md +0 -0
  73. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/JobPatch.md +0 -0
  74. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/JobStatus.md +0 -0
  75. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/JobsApi.md +0 -0
  76. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Language.md +0 -0
  77. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/LanguagesApi.md +0 -0
  78. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/LocationInner.md +0 -0
  79. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Member.md +0 -0
  80. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/MemberIn.md +0 -0
  81. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/MembersApi.md +0 -0
  82. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Metadata.md +0 -0
  83. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/MetadataApi.md +0 -0
  84. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/MetadataIn.md +0 -0
  85. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageAlgorithm.md +0 -0
  86. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageBackend.md +0 -0
  87. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageBackendType.md +0 -0
  88. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageBatchJob.md +0 -0
  89. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageCommit.md +0 -0
  90. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageFile.md +0 -0
  91. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageJob.md +0 -0
  92. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageLanguage.md +0 -0
  93. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageMember.md +0 -0
  94. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageMetadata.md +0 -0
  95. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PagePermission.md +0 -0
  96. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PagePermissionGroup.md +0 -0
  97. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageProject.md +0 -0
  98. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageReservation.md +0 -0
  99. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageResult.md +0 -0
  100. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageTeam.md +0 -0
  101. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageTransaction.md +0 -0
  102. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PageUser.md +0 -0
  103. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Permission.md +0 -0
  104. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PermissionGroup.md +0 -0
  105. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/PermissionsApi.md +0 -0
  106. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Project.md +0 -0
  107. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/ProjectIn.md +0 -0
  108. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/ProjectPatch.md +0 -0
  109. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/ProjectsApi.md +0 -0
  110. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Reservation.md +0 -0
  111. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/ReservationIn.md +0 -0
  112. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/ReservationsApi.md +0 -0
  113. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Result.md +0 -0
  114. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/ResultIn.md +0 -0
  115. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/ResultsApi.md +0 -0
  116. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Role.md +0 -0
  117. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/ShareType.md +0 -0
  118. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Team.md +0 -0
  119. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/TeamsApi.md +0 -0
  120. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/Transaction.md +0 -0
  121. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/TransactionsApi.md +0 -0
  122. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/User.md +0 -0
  123. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/UserIn.md +0 -0
  124. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/UsersApi.md +0 -0
  125. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/docs/ValidationError.md +0 -0
  126. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/exceptions.py +0 -0
  127. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/__init__.py +0 -0
  128. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/algorithm.py +0 -0
  129. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/algorithm_in.py +0 -0
  130. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/algorithm_type.py +0 -0
  131. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/auth_config.py +0 -0
  132. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/backend.py +0 -0
  133. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/backend_in.py +0 -0
  134. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/backend_patch.py +0 -0
  135. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/backend_status.py +0 -0
  136. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/backend_type.py +0 -0
  137. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/backend_with_authentication.py +0 -0
  138. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/batch_job.py +0 -0
  139. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/batch_job_in.py +0 -0
  140. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/batch_job_status.py +0 -0
  141. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/commit.py +0 -0
  142. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/commit_in.py +0 -0
  143. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/compile_payload.py +0 -0
  144. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/compile_stage.py +0 -0
  145. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/domain.py +0 -0
  146. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/file.py +0 -0
  147. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/file_in.py +0 -0
  148. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/final_result.py +0 -0
  149. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/final_result_in.py +0 -0
  150. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/http_bad_request_error.py +0 -0
  151. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/http_not_found_error.py +0 -0
  152. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/http_validation_error.py +0 -0
  153. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/job.py +0 -0
  154. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/job_in.py +0 -0
  155. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/job_patch.py +0 -0
  156. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/job_status.py +0 -0
  157. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/language.py +0 -0
  158. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/location_inner.py +0 -0
  159. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/member.py +0 -0
  160. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/member_in.py +0 -0
  161. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/metadata.py +0 -0
  162. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/metadata_in.py +0 -0
  163. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_algorithm.py +0 -0
  164. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_backend.py +0 -0
  165. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_backend_type.py +0 -0
  166. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_batch_job.py +0 -0
  167. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_commit.py +0 -0
  168. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_file.py +0 -0
  169. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_job.py +0 -0
  170. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_language.py +0 -0
  171. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_member.py +0 -0
  172. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_metadata.py +0 -0
  173. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_permission.py +0 -0
  174. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_permission_group.py +0 -0
  175. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_project.py +0 -0
  176. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_reservation.py +0 -0
  177. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_result.py +0 -0
  178. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_team.py +0 -0
  179. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_transaction.py +0 -0
  180. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/page_user.py +0 -0
  181. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/permission.py +0 -0
  182. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/permission_group.py +0 -0
  183. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/project.py +0 -0
  184. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/project_in.py +0 -0
  185. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/project_patch.py +0 -0
  186. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/reservation.py +0 -0
  187. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/reservation_in.py +0 -0
  188. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/result.py +0 -0
  189. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/result_in.py +0 -0
  190. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/role.py +0 -0
  191. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/share_type.py +0 -0
  192. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/team.py +0 -0
  193. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/transaction.py +0 -0
  194. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/user.py +0 -0
  195. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/user_in.py +0 -0
  196. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/models/validation_error.py +0 -0
  197. {qi_compute_api_client-0.42.0 → qi_compute_api_client-0.44.0}/compute_api_client/rest.py +0 -0
@@ -1,8 +1,7 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: qi-compute-api-client
3
- Version: 0.42.0
3
+ Version: 0.44.0
4
4
  Summary: An API client for the Compute Job Manager of Quantum Inspire.
5
- Home-page: https://github.com/QuTech-Delft/compute-api-client
6
5
  License: Apache-2.0
7
6
  Author: Quantum Inspire
8
7
  Author-email: support@quantum-inspire.eu
@@ -17,7 +16,9 @@ Classifier: Programming Language :: Python :: 3.11
17
16
  Classifier: Programming Language :: Python :: 3.12
18
17
  Classifier: Programming Language :: Python :: 3.13
19
18
  Requires-Dist: aiohttp (>=3.10.5,<4.0.0)
19
+ Requires-Dist: pydantic (>=2.10.4,<3.0.0)
20
20
  Requires-Dist: python-dateutil (>=2.8.2,<3.0.0)
21
+ Requires-Dist: requests (>=2.31.0,<3.0.0)
21
22
  Requires-Dist: urllib3 (>=2.0.0,<3.0.0)
22
23
  Project-URL: Repository, https://github.com/QuTech-Delft/compute-api-client
23
24
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "qi-compute-api-client"
3
- version = "0.42.0"
3
+ version = "0.44.0"
4
4
  description = "An API client for the Compute Job Manager of Quantum Inspire."
5
5
  license = "Apache-2.0"
6
6
  authors = ["Quantum Inspire <support@quantum-inspire.eu>"]
@@ -18,15 +18,18 @@ classifiers = [
18
18
  ]
19
19
  packages = [
20
20
  { include = "compute_api_client" },
21
+ { include = "qi2_shared" },
21
22
  ]
22
- exclude = ["compute_api_client/test"]
23
+ exclude = ["compute_api_client/test", "tests"]
23
24
 
24
25
  [tool.poetry.dependencies]
25
26
  # Should not exceed package python version, so be conservative
26
27
  aiohttp = "^3.10.5"
28
+ pydantic = "^2.10.4"
27
29
  python = "^3.8"
28
30
  python-dateutil = "^2.8.2"
29
31
  urllib3 = "^2.0.0"
32
+ requests = "^2.31.0"
30
33
 
31
34
  [tool.poetry.group.dev.dependencies]
32
35
  pytest = {extras = ["toml"], version = "^8.0.0"}
File without changes
@@ -0,0 +1,65 @@
1
+ import time
2
+ from typing import Any, Tuple, cast
3
+
4
+ import requests
5
+
6
+ from qi2_shared.settings import ApiSettings, TokenInfo, Url
7
+
8
+
9
+ class AuthorisationError(Exception):
10
+ """Indicates that the authorisation permanently went wrong."""
11
+ pass
12
+
13
+
14
+ class IdentityProvider:
15
+ """Class for interfacing with the IdentityProvider."""
16
+
17
+ def __init__(self, well_known_endpoint: str):
18
+ self._well_known_endpoint = well_known_endpoint
19
+ self._token_endpoint, self._device_endpoint = self._get_endpoints()
20
+ self._headers = {"Content-Type": "application/x-www-form-urlencoded"}
21
+
22
+ def _get_endpoints(self) -> Tuple[str, str]:
23
+ response = requests.get(self._well_known_endpoint)
24
+ response.raise_for_status()
25
+ config = response.json()
26
+ return config["token_endpoint"], config["device_authorization_endpoint"]
27
+
28
+ def refresh_access_token(self, client_id: str, refresh_token: str) -> dict[str, Any]:
29
+ data = {
30
+ "grant_type": "refresh_token",
31
+ "client_id": client_id,
32
+ "refresh_token": refresh_token,
33
+ }
34
+ response = requests.post(self._token_endpoint, headers=self._headers, data=data)
35
+ response.raise_for_status()
36
+ return cast(dict[str, Any], response.json())
37
+
38
+
39
+ class OauthDeviceSession:
40
+ """Class for storing OAuth session information and refreshing tokens when needed."""
41
+
42
+ def __init__(self, host: Url, settings: ApiSettings, identity_provider: IdentityProvider):
43
+ self._api_settings = settings
44
+ _auth_settings = settings.auths[host]
45
+ self._host = host
46
+ self._client_id = _auth_settings.client_id
47
+ self._token_info = _auth_settings.tokens
48
+ self._refresh_time_reduction = 5 # the number of seconds to refresh the expiration time
49
+ self._identity_provider = identity_provider
50
+
51
+ def refresh(self) -> TokenInfo:
52
+ if self._token_info is None:
53
+ raise AuthorisationError("You should authenticate first before you can refresh")
54
+
55
+ if self._token_info.access_expires_at > time.time() + self._refresh_time_reduction:
56
+ return self._token_info
57
+
58
+ try:
59
+ self._token_info = TokenInfo(
60
+ **self._identity_provider.refresh_access_token(self._client_id, self._token_info.refresh_token)
61
+ )
62
+ self._api_settings.store_tokens(self._host, self._token_info)
63
+ return self._token_info
64
+ except requests.HTTPError as e:
65
+ raise AuthorisationError(f"An error occurred during token refresh: {e}")
@@ -0,0 +1,52 @@
1
+ from typing import Any, Optional
2
+
3
+ import compute_api_client
4
+
5
+ from qi2_shared.authentication import IdentityProvider, OauthDeviceSession
6
+ from qi2_shared.settings import ApiSettings
7
+
8
+
9
+ class Configuration(compute_api_client.Configuration): # type: ignore[misc]
10
+ """Original Configuration class in compute_api_client does not handle refreshing bearer tokens, so we need to add
11
+ some functionality."""
12
+
13
+ def __init__(self, host: str, oauth_session: OauthDeviceSession, **kwargs: Any):
14
+ self._oauth_session = oauth_session
15
+ super().__init__(host=host, **kwargs)
16
+
17
+ def auth_settings(self) -> Any:
18
+ token_info = self._oauth_session.refresh()
19
+ self.access_token = token_info.access_token
20
+ return super().auth_settings()
21
+
22
+
23
+ _config: Optional[Configuration] = None
24
+
25
+
26
+ def connect() -> None:
27
+ """Set connection configuration for the Quantum Inspire API.
28
+
29
+ Call after logging in with the CLI. Will remove old configuration.
30
+ """
31
+ global _config
32
+ settings = ApiSettings.from_config_file()
33
+
34
+ tokens = settings.auths[settings.default_host].tokens
35
+
36
+ if tokens is None:
37
+ raise ValueError("No access token found for the default host. Please connect to Quantum Inspire using the CLI.")
38
+
39
+ host = settings.default_host
40
+ _config = Configuration(
41
+ host=host,
42
+ oauth_session=OauthDeviceSession(host, settings, IdentityProvider(settings.auths[host].well_known_endpoint)),
43
+ )
44
+
45
+
46
+ def config() -> Configuration:
47
+ global _config
48
+ if _config is None:
49
+ connect()
50
+
51
+ assert _config is not None
52
+ return _config
@@ -0,0 +1,44 @@
1
+ """Quantum Inspire SDK.
2
+
3
+ Copyright 2022 QuTech Delft
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
6
+ License. You may obtain a copy of the License at
7
+
8
+ https://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
11
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
12
+ language governing permissions and limitations under the License.
13
+ """
14
+
15
+ from abc import ABC, abstractmethod
16
+ from typing import Any, Dict, List
17
+
18
+ from compute_api_client.models.backend_type import BackendType
19
+ from pydantic import BaseModel
20
+
21
+
22
+ class ExecuteCircuitResult(BaseModel):
23
+ """Result of executing a quantum circuit."""
24
+
25
+ results: Dict[str, float]
26
+ shots_requested: int
27
+ shots_done: int
28
+
29
+
30
+ class QuantumInterface(ABC):
31
+ """Interface for running quantum circuits from hybrid algorithms."""
32
+
33
+ # pylint: disable = R0903
34
+ # Too few public methods (1/2) (too-few-public-methods)
35
+
36
+ results: List[Dict[str, Any]]
37
+ backend_type: BackendType
38
+
39
+ @abstractmethod
40
+ def execute_circuit(
41
+ self, circuit: str, number_of_shots: int
42
+ ) -> ExecuteCircuitResult:
43
+ """Execute a quantum circuit."""
44
+ raise NotImplementedError
@@ -0,0 +1,44 @@
1
+ from typing import Any, Awaitable, Callable, Generic, List, Optional, TypeVar, Union, cast
2
+
3
+ from pydantic import BaseModel, Field
4
+ from typing_extensions import Annotated
5
+
6
+ PageType = TypeVar("PageType")
7
+ ItemType = TypeVar("ItemType")
8
+
9
+
10
+ class PageInterface(BaseModel, Generic[ItemType]):
11
+ """The page models in the generated API client don't inherit from a common base class, so we have to trick the
12
+ typing system a bit with this fake base class."""
13
+
14
+ items: List[ItemType]
15
+ total: Optional[Annotated[int, Field(strict=True, ge=0)]]
16
+ page: Optional[Annotated[int, Field(strict=True, ge=1)]]
17
+ size: Optional[Annotated[int, Field(strict=True, ge=1)]]
18
+ pages: Optional[Annotated[int, Field(strict=True, ge=0)]] = None
19
+
20
+
21
+ class PageReader(Generic[PageType, ItemType]):
22
+ """Helper class for reading fastapi-pagination style pages returned by the compute_api_client."""
23
+
24
+ async def get_all(self, api_call: Callable[..., Awaitable[PageType]], **kwargs: Any) -> List[ItemType]:
25
+ """Get all items from an API call that supports paging."""
26
+ items: List[ItemType] = []
27
+ page = 1
28
+
29
+ while True:
30
+ response = cast(PageInterface[ItemType], await api_call(page=page, **kwargs))
31
+
32
+ items.extend(response.items)
33
+ page += 1
34
+ if response.pages is None or page > response.pages:
35
+ break
36
+ return items
37
+
38
+ async def get_single(self, api_call: Callable[..., Awaitable[PageType]], **kwargs: Any) -> Union[ItemType, None]:
39
+ """Get a single item from an API call that supports paging."""
40
+ response = cast(PageInterface[ItemType], await api_call(**kwargs))
41
+ if len(response.items) > 1:
42
+ raise RuntimeError(f"Response contains more than one item -> {kwargs}.")
43
+
44
+ return response.items[0] if response.items else None
@@ -0,0 +1,68 @@
1
+ """Module containing the handler for the Quantum Inspire persistent configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import time
6
+ from pathlib import Path
7
+ from typing import Dict, Optional
8
+
9
+ from pydantic import BaseModel, BeforeValidator, Field, HttpUrl
10
+ from typing_extensions import Annotated
11
+
12
+ Url = Annotated[str, BeforeValidator(lambda value: str(HttpUrl(value)).rstrip("/"))]
13
+ API_SETTINGS_FILE = Path.joinpath(Path.home(), ".quantuminspire", "config.json")
14
+
15
+
16
+ class TokenInfo(BaseModel):
17
+ """A pydantic model for storing all information regarding oauth access and refresh tokens."""
18
+
19
+ access_token: str
20
+ expires_in: int # [s]
21
+ refresh_token: str
22
+ refresh_expires_in: Optional[int] = None # [s]
23
+ generated_at: float = Field(default_factory=time.time)
24
+
25
+ @property
26
+ def access_expires_at(self) -> float:
27
+ """Unix timestamp containing the time when the access token will expire."""
28
+ return self.generated_at + self.expires_in
29
+
30
+
31
+ class AuthSettings(BaseModel):
32
+ """Pydantic model for storing all auth related settings for a given host."""
33
+
34
+ client_id: str
35
+ code_challenge_method: str
36
+ code_verifyer_length: int
37
+ well_known_endpoint: Url
38
+ tokens: Optional[TokenInfo]
39
+ team_member_id: Optional[int]
40
+
41
+
42
+ class ApiSettings(BaseModel):
43
+ """The settings class for the Quantum Inspire persistent configuration."""
44
+
45
+ auths: Dict[Url, AuthSettings]
46
+ default_host: Url
47
+
48
+ def store_tokens(self, host: Url, tokens: TokenInfo, path: Path = API_SETTINGS_FILE) -> None:
49
+ """Stores the team_member_id, access and refresh tokens in the config.json file.
50
+
51
+ Args:
52
+ host: The hostname of the API for which the tokens are intended.
53
+ tokens: OAuth access and refresh tokens.
54
+ path: The path to the config.json file. Defaults to API_SETTINGS_FILE.
55
+ Returns:
56
+ None
57
+ """
58
+ self.auths[host].tokens = tokens
59
+ path.write_text(self.model_dump_json(indent=2))
60
+
61
+ @classmethod
62
+ def from_config_file(cls, path: Path = API_SETTINGS_FILE) -> ApiSettings:
63
+ """Load the configuration from a file."""
64
+ if not path.is_file():
65
+ raise FileNotFoundError("No configuration file found. Please connect to Quantum Inspire using the CLI.")
66
+
67
+ api_settings = path.read_text()
68
+ return ApiSettings.model_validate_json(api_settings)