qilisdk 0.1.5__py3-none-any.whl → 0.1.7__py3-none-any.whl

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.
Files changed (49) hide show
  1. qilisdk/analog/__init__.py +1 -2
  2. qilisdk/analog/hamiltonian.py +4 -71
  3. qilisdk/analog/schedule.py +291 -313
  4. qilisdk/backends/backend.py +5 -1
  5. qilisdk/backends/cuda_backend.py +10 -6
  6. qilisdk/backends/qutip_backend.py +24 -32
  7. qilisdk/{common → core}/__init__.py +4 -0
  8. qilisdk/core/interpolator.py +406 -0
  9. qilisdk/{common → core}/model.py +7 -7
  10. qilisdk/core/parameterizable.py +131 -0
  11. qilisdk/{common → core}/qtensor.py +1 -1
  12. qilisdk/{common → core}/variables.py +192 -11
  13. qilisdk/cost_functions/cost_function.py +1 -1
  14. qilisdk/cost_functions/model_cost_function.py +5 -5
  15. qilisdk/cost_functions/observable_cost_function.py +2 -2
  16. qilisdk/digital/ansatz.py +0 -3
  17. qilisdk/digital/circuit.py +3 -2
  18. qilisdk/digital/circuit_transpiler.py +46 -0
  19. qilisdk/digital/circuit_transpiler_passes/__init__.py +18 -0
  20. qilisdk/digital/circuit_transpiler_passes/circuit_transpiler_pass.py +36 -0
  21. qilisdk/digital/circuit_transpiler_passes/decompose_multi_controlled_gates_pass.py +216 -0
  22. qilisdk/digital/circuit_transpiler_passes/numeric_helpers.py +82 -0
  23. qilisdk/digital/gates.py +15 -5
  24. qilisdk/{speqtrum/experiments → experiments}/__init__.py +13 -2
  25. qilisdk/{speqtrum/experiments → experiments}/experiment_functional.py +90 -2
  26. qilisdk/{speqtrum/experiments → experiments}/experiment_result.py +16 -0
  27. qilisdk/functionals/functional.py +2 -2
  28. qilisdk/functionals/functional_result.py +1 -1
  29. qilisdk/functionals/sampling.py +8 -1
  30. qilisdk/functionals/time_evolution.py +8 -4
  31. qilisdk/functionals/time_evolution_result.py +2 -2
  32. qilisdk/functionals/variational_program.py +58 -0
  33. qilisdk/optimizers/optimizer_result.py +1 -1
  34. qilisdk/speqtrum/__init__.py +2 -0
  35. qilisdk/speqtrum/speqtrum.py +537 -152
  36. qilisdk/speqtrum/speqtrum_models.py +258 -2
  37. qilisdk/utils/openfermion/__init__.py +38 -0
  38. qilisdk/{common/algorithm.py → utils/openfermion/__init__.pyi} +2 -3
  39. qilisdk/utils/openfermion/openfermion.py +45 -0
  40. qilisdk/utils/visualization/schedule_renderers.py +22 -9
  41. {qilisdk-0.1.5.dist-info → qilisdk-0.1.7.dist-info}/METADATA +89 -39
  42. qilisdk-0.1.7.dist-info/RECORD +76 -0
  43. {qilisdk-0.1.5.dist-info → qilisdk-0.1.7.dist-info}/WHEEL +1 -1
  44. qilisdk/analog/linear_schedule.py +0 -118
  45. qilisdk/common/parameterizable.py +0 -75
  46. qilisdk-0.1.5.dist-info/RECORD +0 -69
  47. /qilisdk/{common → core}/exceptions.py +0 -0
  48. /qilisdk/{common → core}/result.py +0 -0
  49. {qilisdk-0.1.5.dist-info → qilisdk-0.1.7.dist-info}/licenses/LICENCE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qilisdk
3
- Version: 0.1.5
3
+ Version: 0.1.7
4
4
  Summary: QiliSDK is a Python framework for writing digital and analog quantum algorithms and executing them across multiple quantum backends. Its modular design streamlines the development process and enables easy integration with a variety of quantum platforms.
5
5
  Project-URL: Homepage, https://github.com/qilimanjaro-tech/qilisdk
6
6
  Project-URL: Documentation, https://qilimanjaro-tech.github.io/qilisdk/
@@ -10,35 +10,39 @@ Project-URL: Changelog, https://github.com/qilimanjaro-tech/qilisdk/blob/main/CH
10
10
  Author-email: Qilimanjaro Quantum Tech <info@qilimanjaro.tech>
11
11
  License-File: LICENCE
12
12
  Keywords: analog quantum computing,digital quantum computing,qilimanjaro,quantum computing
13
- Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Development Status :: 4 - Beta
14
14
  Classifier: Environment :: Console
15
15
  Classifier: Intended Audience :: Developers
16
16
  Classifier: Intended Audience :: Science/Research
17
17
  Classifier: License :: OSI Approved :: Apache Software License
18
18
  Classifier: Operating System :: POSIX :: Linux
19
19
  Classifier: Programming Language :: Python :: 3
20
- Classifier: Programming Language :: Python :: 3.10
21
20
  Classifier: Programming Language :: Python :: 3.11
22
21
  Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
23
  Classifier: Topic :: Scientific/Engineering
24
24
  Classifier: Topic :: Scientific/Engineering :: Physics
25
25
  Classifier: Topic :: Scientific/Engineering :: Quantum Computing
26
- Requires-Python: >=3.10
26
+ Requires-Python: >=3.11
27
27
  Requires-Dist: dill>=0.3.9
28
28
  Requires-Dist: loguru>=0.7.3
29
29
  Requires-Dist: matplotlib>=3.10.7
30
- Requires-Dist: numpy>=1.26.4
30
+ Requires-Dist: mkl-service>=2.4.2; sys_platform != 'darwin'
31
+ Requires-Dist: numpy>=2.2.0
31
32
  Requires-Dist: pydantic-settings>=2.11.0
32
- Requires-Dist: pydantic>=2.12.2
33
- Requires-Dist: ruamel-yaml>=0.18.15
34
- Requires-Dist: scipy>=1.15.3
33
+ Requires-Dist: pydantic>=2.12.3
34
+ Requires-Dist: ruamel-yaml>=0.18.16
35
+ Requires-Dist: scipy<1.16.3,>=1.15; sys_platform != 'darwin'
36
+ Requires-Dist: scipy>=1.16.3; sys_platform == 'darwin'
35
37
  Provides-Extra: cuda
36
- Requires-Dist: cuda-quantum-cu12==0.12.0; extra == 'cuda'
38
+ Requires-Dist: cuda-quantum-cu12==0.13.0; extra == 'cuda'
39
+ Provides-Extra: openfermion
40
+ Requires-Dist: openfermion>=1.7.1; extra == 'openfermion'
37
41
  Provides-Extra: qutip
38
42
  Requires-Dist: qutip-qip>=0.4.1; extra == 'qutip'
39
- Requires-Dist: qutip>=5.2.1; extra == 'qutip'
43
+ Requires-Dist: qutip>=5.2.2; extra == 'qutip'
40
44
  Provides-Extra: speqtrum
41
- Requires-Dist: httpx>=0.28.1; extra == 'speqtrum'
45
+ Requires-Dist: httpx==0.28.1; extra == 'speqtrum'
42
46
  Requires-Dist: keyring>=25.6.0; extra == 'speqtrum'
43
47
  Requires-Dist: keyrings-alt>=5.0.2; extra == 'speqtrum'
44
48
  Description-Content-Type: text/markdown
@@ -48,6 +52,7 @@ Description-Content-Type: text/markdown
48
52
  [![Python Versions](https://img.shields.io/pypi/pyversions/qilisdk.svg)](https://pypi.org/project/qilisdk/)
49
53
  [![PyPI Version](https://img.shields.io/pypi/v/qilisdk.svg)](https://pypi.org/project/qilisdk/)
50
54
  [![License](https://img.shields.io/pypi/l/qilisdk.svg)](#license)
55
+ [![Docs](https://img.shields.io/badge/docs-latest-pink.svg)](https://qilimanjaro-tech.github.io/qilisdk/main/index.html)
51
56
 
52
57
  **QiliSDK** is a Python framework for writing digital and analog quantum algorithms and executing them across multiple quantum backends. Its modular design streamlines the development process and enables easy integration with a variety of quantum platforms.
53
58
 
@@ -58,15 +63,15 @@ Description-Content-Type: text/markdown
58
63
  - [Table of Contents](#table-of-contents)
59
64
  - [Installation](#installation)
60
65
  - [Base Installation](#base-installation)
61
- - [Optional Extras](#optional-extras)
66
+ - [Optional Dependencies: speqtrum, cuda, qutip](#optional-dependencies-speqtrum-cuda-qutip)
62
67
  - [Usage](#usage)
63
68
  - [Digital Quantum Circuits](#digital-quantum-circuits)
64
- - [Hamiltonian and Analog Operations](#hamiltonian-and-analog-operations)
69
+ - [Hamiltonians](#hamiltonians)
65
70
  - [Optimizers](#optimizers)
66
- - [Quantum-as-a-Service (QaaS)](#quantum-as-a-service-qaas)
67
- - [CUDA-Accelerated Simulation](#cuda-accelerated-simulation)
68
- - [Time Evolution](#time-evolution)
69
- - [Variational Quantum Eigensolver (VQE)](#variational-quantum-eigensolver-vqe)
71
+ - [Qilimanjaro SpeQtrum](#qilimanjaro-speqtrum)
72
+ - [Sample a quantum Circuit Using a CUDA-Accelerated Simulator](#sample-a-quantum-circuit-using-a-cuda-accelerated-simulator)
73
+ - [Time Evolution using Qutip](#time-evolution-using-qutip)
74
+ - [Variational Programs](#variational-programs)
70
75
  - [Open QASM Serialization](#open-qasm-serialization)
71
76
  - [YAML Serialization](#yaml-serialization)
72
77
  - [Development](#development)
@@ -94,7 +99,7 @@ Install the core QiliSDK package using pip:
94
99
  pip install qilisdk
95
100
  ```
96
101
 
97
- ### Optional Dependencies
102
+ ### Optional Dependencies: speqtrum, cuda, qutip
98
103
 
99
104
  QiliSDK supports optional modules for additional functionality:
100
105
 
@@ -197,26 +202,35 @@ print("Optimal cost:", result.optimal_cost)
197
202
  print("Optimal Parameters:", result.optimal_parameters)
198
203
  ```
199
204
 
200
- ### SpeQtrum
205
+ ### Qilimanjaro SpeQtrum
201
206
 
202
207
  QiliSDK includes a client for interacting with Qilimanjaro's SpeQtrum platform. This module supports secure login and a unified interface for both digital circuits and analog evolutions:
203
208
 
204
209
  ```python
205
- from qilisdk.speqtrum import SpeQtrum
210
+ from qilisdk.backends import CudaBackend, CudaSamplingMethod
211
+ from qilisdk.digital import Circuit, H, M
206
212
  from qilisdk.functionals import Sampling
213
+ from qilisdk.speqtrum import SpeQtrum
214
+
215
+
216
+ # Build a single-qubit circuit
217
+ circuit = Circuit(nqubits=1)
218
+ circuit.add(H(0))
219
+ circuit.add(M(0))
207
220
 
208
221
  # Login to QaaSBackend with credentials (or use environment variables)
209
222
  # This only needs to be run once.
210
- SpeQtrum.login(username="your_username", apikey="your_apikey")
223
+ SpeQtrum.login(username="YOUR_USERNAME", apikey="YOUR_APIKEY")
211
224
 
212
225
  # Instantiate QaaSBackend
213
226
  client = SpeQtrum()
214
227
 
215
- # # Execute a pre-built circuit (see Digital Quantum Circuits section)
216
- job_id = client.submit(Sampling(circuit, 1000), device="cuda_state_vector")
228
+ # Execute a pre-built circuit (see Digital Quantum Circuits section)
229
+ # make sure to select the device (you can list available devices using ``client.list_devices()``)
230
+ job_id = client.submit(Sampling(circuit, 1000), device="SELECTED_DEVICE")
217
231
  print("job id:", job_id)
218
- print("job status:", client.get_job_details(job_id).status)
219
- print("job result:", client.get_job_details(job_id).result)
232
+ print("job status:", client.get_job(job_id).status)
233
+ print("job result:", client.get_job(job_id).result)
220
234
  ```
221
235
 
222
236
  ### Sample a quantum Circuit Using a CUDA-Accelerated Simulator
@@ -241,18 +255,17 @@ print("CUDA Backend Results:", results)
241
255
 
242
256
  ### Time Evolution using Qutip
243
257
 
244
- For analog simulations, the new `TimeEvolution` and `Schedule` classes allow you to simulate time-dependent quantum dynamics. The following example uses a linear schedule to interpolate between two Hamiltonians on a Qutip backend:
258
+ For analog simulations, the `TimeEvolution` and unified `Schedule` classes allow you to simulate time-dependent quantum dynamics. The following example uses callable coefficients defined over an interval to interpolate between two Hamiltonians on a Qutip backend:
245
259
 
246
260
  ```python
247
- import numpy as np
248
261
  from qilisdk.analog import Schedule, X, Z, Y
249
- from qilisdk.common import ket, tensor_prod
262
+ from qilisdk.core import ket, tensor_prod
250
263
  from qilisdk.backends import QutipBackend
251
264
  from qilisdk.functionals import TimeEvolution
252
265
 
253
266
  # Define total time and timestep
254
- T = 100
255
- steps = np.linspace(0, T, T)
267
+ T = 100.0
268
+ dt = 0.1
256
269
  nqubits = 1
257
270
 
258
271
  # Define Hamiltonians
@@ -260,13 +273,14 @@ Hx = sum(X(i) for i in range(nqubits))
260
273
  Hz = sum(Z(i) for i in range(nqubits))
261
274
 
262
275
  # Build a time‑dependent schedule
263
- schedule = Schedule(T)
264
-
265
- # Add hx with a time‐dependent coefficient function
266
- schedule.add_hamiltonian(label="hx", hamiltonian=Hx, schedule=lambda t: 1 - steps[t] / T)
267
-
268
- # Add hz similarly
269
- schedule.add_hamiltonian(label="hz", hamiltonian=Hz, schedule=lambda t: steps[t] / T)
276
+ schedule = Schedule(
277
+ hamiltonians={"hx": Hx, "hz": Hz},
278
+ coefficients={
279
+ "hx": {(0.0, T): lambda t: 1 - t / T},
280
+ "hz": {(0.0, T): lambda t: t / T},
281
+ },
282
+ dt=dt,
283
+ )
270
284
 
271
285
  # draw the schedule
272
286
  schedule.draw()
@@ -299,8 +313,8 @@ Here you find an example of building a Variational Quantum Eigensolver (VQE). To
299
313
  ```python
300
314
  from qilisdk.digital.gates import U2, CNOT
301
315
  from qilisdk.optimizers import SciPyOptimizer
302
- from qilisdk.common.model import Model
303
- from qilisdk.common.variables import LEQ, BinaryVariable
316
+ from qilisdk.core.model import Model
317
+ from qilisdk.core.variables import LEQ, BinaryVariable
304
318
  from qilisdk.digital.ansatz import HardwareEfficientAnsatz
305
319
  from qilisdk.functionals import VariationalProgram, Sampling
306
320
  from qilisdk.backends import CudaBackend
@@ -418,6 +432,42 @@ print("Reconstructed Circuit:")
418
432
  restored_circuit.draw()
419
433
  ```
420
434
 
435
+ ### OpenFermion Integration
436
+
437
+ `QiliSDK` can translate ``QubitOperator`` objects from ``OpenFermion`` to ``QiliSDK``'s ``Hamiltonian`` Objects and vice versa.
438
+
439
+ This code is available under an optional dependency that can be installed using ``pip install qilisdk[openfermion]``.
440
+
441
+ here is an example of the usage:
442
+ ```python
443
+ from openfermion.hamiltonians import jellium_model
444
+ from openfermion.transforms import fourier_transform, jordan_wigner
445
+ from openfermion.utils import Grid
446
+
447
+ from qilisdk.utils.openfermion import openfermion_to_qilisdk, qilisdk_to_openfermion
448
+
449
+ # Let's look at a very small model of jellium in 1D.
450
+ grid = Grid(dimensions=1, length=3, scale=1.0)
451
+ spinless = True
452
+
453
+ # Get the momentum Hamiltonian.
454
+ momentum_hamiltonian = jellium_model(grid, spinless)
455
+ momentum_qubit_operator = jordan_wigner(momentum_hamiltonian)
456
+ momentum_qubit_operator.compress()
457
+
458
+ # Fourier transform the Hamiltonian to the position basis.
459
+ position_hamiltonian = fourier_transform(momentum_hamiltonian, grid, spinless)
460
+ position_qubit_operator = jordan_wigner(position_hamiltonian)
461
+ position_qubit_operator.compress()
462
+
463
+ qilisdk_ham = openfermion_to_qilisdk(position_qubit_operator)
464
+ openfermion_ham = qilisdk_to_openfermion(qilisdk_ham)
465
+
466
+ ```
467
+
468
+
469
+
470
+
421
471
  ---
422
472
 
423
473
  ## Development
@@ -0,0 +1,76 @@
1
+ qilisdk/__init__.py,sha256=ewlADDRquvUClgPp1fDx5gfsPsmUHl3LF42ROLqeI5g,824
2
+ qilisdk/__init__.pyi,sha256=7O8kvYmk9hl0OKHgXJkemmYp-x_zppNRuN_WAZeHjbo,630
3
+ qilisdk/_logging.py,sha256=vCKCClIwAY9KptzieYbldU6MVs-HYZ4P1imG2oXkumM,4063
4
+ qilisdk/_optionals.py,sha256=WkYAtoE4RcPtgl7l4OJNGeXwJc0xc8M_UQCpVHS1lmo,3459
5
+ qilisdk/logging_config.yaml,sha256=DxsAJBPr1o54pjtYRnzMHuDbrr8hv4ruym8rLRmUKEk,381
6
+ qilisdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ qilisdk/settings.py,sha256=PtiO3iInoBIBLTO_t6D5iWN5a3FuqO4DXyPKmpnph-A,2827
8
+ qilisdk/yaml.py,sha256=UcildGIQq1vMmjKLgFAbd-tN5nwYHlAUi6cs_8r8_As,8050
9
+ qilisdk/analog/__init__.py,sha256=VKy42hUP__jaQcaAhNU0Wai08r1UzjwsysLBF0uN10g,800
10
+ qilisdk/analog/exceptions.py,sha256=oYRJD00ICs9M6hezXPv7C7Ug6amcbbGDeP-1o1GkECc,717
11
+ qilisdk/analog/hamiltonian.py,sha256=tybXon1-DnfDK0YwhNwhipsemsaIyUbcObHkYXUaOys,37129
12
+ qilisdk/analog/schedule.py,sha256=9HCHV7-w2QF6DK8BUfizWJN8srwBQeneI--yVqfwuV4,20063
13
+ qilisdk/backends/__init__.py,sha256=QHJ99ub4WPMmSMEs_Zdx3yF6d7K9uBapKp0FgvZ12L8,1666
14
+ qilisdk/backends/__init__.pyi,sha256=JP6QY7BqO0LuN7NPAWU0ebBwfcKEJ5w5p4xHa5GNKhA,752
15
+ qilisdk/backends/backend.py,sha256=wHbQQfaiLfjp2hWPN8besfkBbm0iAeDK6uIeNIu_bTo,5397
16
+ qilisdk/backends/cuda_backend.py,sha256=oQRbT56XdhAvB44Q2uOgFuCIbJwu0AbKd55-NiPcmeY,17368
17
+ qilisdk/backends/qutip_backend.py,sha256=tO1X31mwNJguDc00EkS8c7F1nNV9xSygii9ooV_47JE,19477
18
+ qilisdk/core/__init__.py,sha256=lb-PD21HztYO3_354pFwJ79GbC8f2uyiIXgl7RJ0zVQ,1453
19
+ qilisdk/core/exceptions.py,sha256=f72N4SRj-oUkHVKVV_Drj6oinTJODNM0LxdFn6AHuBE,1034
20
+ qilisdk/core/interpolator.py,sha256=jSZ04KSdgD-btwSyX7aaKYa77_F1x7qaWPcdyizCA48,17494
21
+ qilisdk/core/model.py,sha256=ty1vnMzBWDQYwc7lJnVAW62THs2y2er0J-p1W48MJVQ,41569
22
+ qilisdk/core/parameterizable.py,sha256=pc35JtU8fpyXv-oCCYXSPOPBLbCNqgXupwZuHvBFfh0,5392
23
+ qilisdk/core/qtensor.py,sha256=_Ru3qaxntjyIkP_mWxr7I8oVgJddi2eQizUwWXwnRUQ,26014
24
+ qilisdk/core/result.py,sha256=EUCWebtdeBwGjhVCBgStuEVmx-U1WR0ZOX7ALAnLrmI,700
25
+ qilisdk/core/variables.py,sha256=SEEgaAm-0XssaeO9JRHKtRdcOqO5NKR7y2qpLOTLHAo,77647
26
+ qilisdk/cost_functions/__init__.py,sha256=tKoEm4eVb8oTGGhj25nM2YQE73CRXaLgLyfipa2I70s,760
27
+ qilisdk/cost_functions/cost_function.py,sha256=7Ap_tpUEJXrJAzAJ1QyrPT_Nmqv2dzkUyYPL6TpdqY8,2850
28
+ qilisdk/cost_functions/model_cost_function.py,sha256=93ui_yO8vpoZ22Ro9W9E9rkHVYrFoSzMipU6Op7wWr0,5705
29
+ qilisdk/cost_functions/observable_cost_function.py,sha256=PalzTjRaXdeU69fcvPBsAnf_MNcJni_dwXUXchmA1Lo,4184
30
+ qilisdk/digital/__init__.py,sha256=qmE0VTKdD9ILlx6ClhBjvOXbpD0nr3uavG-l3VSh69c,989
31
+ qilisdk/digital/ansatz.py,sha256=r2g0hISPhXpTIgvqQgeu9tZ9OO3mQ7h_Cq9tlMZDruQ,7999
32
+ qilisdk/digital/circuit.py,sha256=YM2iBaGL6GdoHt23_c5hYss9nRc-pTZSesII916juhc,6947
33
+ qilisdk/digital/circuit_transpiler.py,sha256=pbqB2QETyclmd_ZexsD8a-3mTKj97jJ5XVGgcgi8y2g,2060
34
+ qilisdk/digital/exceptions.py,sha256=dtMN9yjX_qRWJ5iFfNTHWVwKB7BrrSecvjB4D0KeoEA,1292
35
+ qilisdk/digital/gates.py,sha256=l7HkGxWX59dkTqlbBIrGwim4z0pEIUuZfTKHTXaGUp8,34068
36
+ qilisdk/digital/circuit_transpiler_passes/__init__.py,sha256=nH_z1rTH3UNOAbKeFFF8LedaRk06W_2gXHDeUr23500,807
37
+ qilisdk/digital/circuit_transpiler_passes/circuit_transpiler_pass.py,sha256=bMj0duwgLYHj4jKZAx-YyW9zx5ViyVsJFeCHNZS0Yz8,1182
38
+ qilisdk/digital/circuit_transpiler_passes/decompose_multi_controlled_gates_pass.py,sha256=mWcPmdsvuM5K1mwWkvGFp0625nlSrPtaQ9zHuWS2i4M,7180
39
+ qilisdk/digital/circuit_transpiler_passes/numeric_helpers.py,sha256=sd6WAzPBWJCTrA08KGhU3gbo2zjrsCq_rxjAX9W4Bhw,2412
40
+ qilisdk/experiments/__init__.py,sha256=I2djCoersUrA5UnoPtbifSgpIryxfDqdztQLAT48e90,1168
41
+ qilisdk/experiments/experiment_functional.py,sha256=ZWnSHCu7Ihn2bJf4VRoT8UbKqp3C1trlaonMRE6UE8s,7532
42
+ qilisdk/experiments/experiment_result.py,sha256=WYQ1h0F4GhyiAycppgkdeLUod3klcLy9WJueF5-bsEY,8637
43
+ qilisdk/functionals/__init__.py,sha256=1Yrk8SyJ98yNYm658HeyaPFaNdMBH96PPlv6oEGGwpM,1037
44
+ qilisdk/functionals/functional.py,sha256=21JFxoBXhHm4FkeBzLXlQOU2jEB2DcTXOKp9Zq0ve98,1445
45
+ qilisdk/functionals/functional_result.py,sha256=NZwgV5m90wdo__Q6ILL-VoWyBU5tiAbEqBzb3zJ-4eU,741
46
+ qilisdk/functionals/sampling.py,sha256=g7jD_4QXiN8-6XQKqJoutvE6OiuCqCq2gIGYfzjq7s4,3558
47
+ qilisdk/functionals/sampling_result.py,sha256=tUXOHJOtznGyWsHK4MLtP1bTSdD6zppbT2K2lcQFkyo,3411
48
+ qilisdk/functionals/time_evolution.py,sha256=OrtYJCPatfGXtpal2AEt-nMzSCFQg8UqCf5v0A1X7dM,4364
49
+ qilisdk/functionals/time_evolution_result.py,sha256=l53aBACRWPzOaVPJ86DgiHRTXK4cVcxlKcD91cY_KNY,3491
50
+ qilisdk/functionals/variational_program.py,sha256=PeBk1gyAzCd3e04VmH936HpeB2Y1PTjCuCB7YEJsRqU,6126
51
+ qilisdk/functionals/variational_program_result.py,sha256=Dii9D1BnUpfsBfgN60eFVp7Qhsr2mIFSbUtM5Q4KZeI,2657
52
+ qilisdk/optimizers/__init__.py,sha256=v3pLS__wnVRCiz83y8-gUjRuW-BoAGXFpd6HUmLodgY,663
53
+ qilisdk/optimizers/optimizer.py,sha256=GT9ziwPJ2ZjckOeeoyc07O3XyaVsRmUnVxN0UXNaO7Y,1570
54
+ qilisdk/optimizers/optimizer_result.py,sha256=t3iD9CGBNLZr6hjKtCsJk04rCfIUpoHUyszfcBLuCV4,3475
55
+ qilisdk/optimizers/scipy_optimizer.py,sha256=JquRPvpWJ6ccpzxlo9HKV66cz4kYwEXEPe3jNeT8_sE,5020
56
+ qilisdk/speqtrum/__init__.py,sha256=kGBrSF949ppWDRsnWuIt61WqBcb6qIQaJ9gRZrnMdo4,1700
57
+ qilisdk/speqtrum/__init__.pyi,sha256=2_3FiMTnJe0rUuK-arKd4JuIt3tJ9ci-a8ipgMdOSSo,728
58
+ qilisdk/speqtrum/keyring.py,sha256=zPYSAqq9A0hfjWdchTCy9oZi72HPFvtxDoblHDvpjhA,1898
59
+ qilisdk/speqtrum/speqtrum.py,sha256=s-JrUrpYvG8wV976SrzO85oHXbPLftlvYa-q3o3hg_k,32037
60
+ qilisdk/speqtrum/speqtrum_models.py,sha256=uaASy1gWAGu3XEDVB33ZPCJgVKiT-3ox6c6LUQt4ZsY,20987
61
+ qilisdk/utils/__init__.py,sha256=LDSTo7NstSbHMvvqvx7ZLxh0HFTEXg1O_B76SyEEHk8,588
62
+ qilisdk/utils/openqasm2.py,sha256=IMHT3BRbpS4giKg5JCZ4tt6BpD7eDEJMALrW7w1RvPw,8322
63
+ qilisdk/utils/serialization.py,sha256=_SmxxbshMtSozCHdzi_Y_3YZ7-KNjsrlfgkBtJ3mAjw,3870
64
+ qilisdk/utils/openfermion/__init__.py,sha256=bFSfbvRIVkM4n02g4sfEg_NHSrNSJWuU0H_oI3yPWDQ,1480
65
+ qilisdk/utils/openfermion/__init__.pyi,sha256=d-KapuuD9ciD7R-ZLNqyQ7FSidqO_pFA5wakdFIEA-8,725
66
+ qilisdk/utils/openfermion/openfermion.py,sha256=IcKy73s-VWMKbOMxXLAUwitVh3O5GOqILoKrYbTfklk,1464
67
+ qilisdk/utils/visualization/PlusJakartaSans-SemiBold.ttf,sha256=kcACUvAhK3AgdI7-50kwPyG0xdtAodY9-UhPbw2NtTk,94844
68
+ qilisdk/utils/visualization/__init__.py,sha256=p3OTMwM2eF5_LZW0-kYU8IqcEyQySxjDKnqDfCw3dpg,769
69
+ qilisdk/utils/visualization/circuit_renderers.py,sha256=20X--lgQdwmu08pvuekdebOI01hRHknl0Z8ct4OVWOU,29908
70
+ qilisdk/utils/visualization/schedule_renderers.py,sha256=bMfEOEQhWcwfp8J6uebWAnYxy8PP7eiZhahL-i5Rh4A,6284
71
+ qilisdk/utils/visualization/style.py,sha256=l50u4UGCbU0r_BBuij35M4sTrmYh_e0m1IgRY-DjfH8,7288
72
+ qilisdk/utils/visualization/themes.py,sha256=uganZjDx742bmGVG73UU6Lde5XXjlDNfVNEa9y_icBw,2346
73
+ qilisdk-0.1.7.dist-info/METADATA,sha256=GqgYhVRAjFO0lWufXYiu7VjWOj8Dhu8d_5s-Zpc9X_s,21152
74
+ qilisdk-0.1.7.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
75
+ qilisdk-0.1.7.dist-info/licenses/LICENCE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
76
+ qilisdk-0.1.7.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,118 +0,0 @@
1
- # Copyright 2025 Qilimanjaro Quantum Tech
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
- from __future__ import annotations
15
-
16
- from qilisdk.analog.hamiltonian import Hamiltonian
17
- from qilisdk.analog.schedule import Schedule
18
- from qilisdk.common.variables import Number, Parameter, Term
19
- from qilisdk.yaml import yaml
20
-
21
-
22
- @yaml.register_class
23
- class LinearSchedule(Schedule):
24
- """
25
- Schedule implementation that linearly interpolates coefficients between defined time steps.
26
-
27
- Example:
28
- .. code-block:: python
29
-
30
- from qilisdk.analog.hamiltonian import Hamiltonian, Z
31
- from qilisdk.analog.linear_schedule import LinearSchedule
32
-
33
- h = 2 * Z(0)
34
- schedule = LinearSchedule(T=4.0, dt=1.0, hamiltonians={"hz": h})
35
- schedule.add_schedule_step(0, {"hz": 0.0})
36
- schedule.add_schedule_step(4, {"hz": 1.0})
37
- assert schedule.get_coefficient(2.0, "hz") == 0.5
38
- """
39
-
40
- def get_coefficient_expression(self, time_step: float, hamiltonian_key: str) -> Number | Term | Parameter:
41
- """
42
- Return the symbolic coefficient for a Hamiltonian at an arbitrary time step.
43
-
44
- Args:
45
- time_step (float): The time at which to evaluate the coefficient.
46
- hamiltonian_key (str): Label of the Hamiltonian inside the schedule.
47
-
48
- Returns:
49
- Number | Term: The (possibly symbolic) coefficient associated with ``hamiltonian_key``.
50
-
51
- Raises:
52
- ValueError: If something unexpected happens during coefficient retrieval.
53
- """
54
- t = time_step / self.dt
55
- t_idx = int(t)
56
-
57
- if t_idx in self._schedule and hamiltonian_key in self._schedule[t_idx]:
58
- return self._schedule[t_idx][hamiltonian_key]
59
-
60
- # search backwards
61
- prev_idx, prev_expr = None, None
62
- for i in range(t_idx, -1, -1):
63
- if i in self._schedule and hamiltonian_key in self._schedule[i]:
64
- prev_idx = i
65
- prev_expr = self._schedule[i][hamiltonian_key]
66
- break
67
-
68
- # search forwards
69
- next_idx, next_expr = None, None
70
- for i in range(t_idx + 1, int(self.T / self.dt) + 1):
71
- if i in self._schedule and hamiltonian_key in self._schedule[i]:
72
- next_idx = i
73
- next_expr = self._schedule[i][hamiltonian_key]
74
- break
75
-
76
- # cases
77
- if prev_expr is None and next_expr is None:
78
- return 0
79
- if prev_expr is None and next_expr is not None:
80
- return next_expr
81
- if next_expr is None and prev_expr is not None:
82
- return prev_expr
83
-
84
- # linear interpolation (keeps expressions if they are Terms/Parameters)
85
- if next_idx is None or prev_idx is None or prev_expr is None or next_expr is None:
86
- raise ValueError("Something unexpected happened while retrieving the coefficient.")
87
- alpha: float = (t - prev_idx) / (next_idx - prev_idx)
88
- return (1 - alpha) * prev_expr + alpha * next_expr
89
-
90
- def get_coefficient(self, time_step: float, hamiltonian_key: str) -> Number:
91
- """
92
- Return the numeric coefficient for a Hamiltonian at ``time_step``.
93
-
94
- Args:
95
- time_step (float): Time at which to evaluate the coefficient.
96
- hamiltonian_key (str): Label of the Hamiltonian.
97
-
98
- Returns:
99
- Number: Evaluated coefficient value.
100
- """
101
- val = self.get_coefficient_expression(time_step=time_step, hamiltonian_key=hamiltonian_key)
102
- return val.evaluate({}) if isinstance(val, Term) else (val.evaluate() if isinstance(val, Parameter) else val)
103
-
104
- def __getitem__(self, time_step: int) -> Hamiltonian:
105
- """
106
- Retrieve the interpolated Hamiltonian at the specified discrete time step.
107
-
108
- Args:
109
- time_step (int): Discrete index to evaluate (converted internally to ``time_step * dt``).
110
-
111
- Returns:
112
- Hamiltonian: Hamiltonian with coefficients interpolated at the requested time step.
113
- """
114
- ham = Hamiltonian()
115
- for ham_label in self._hamiltonians:
116
- coeff = self.get_coefficient(time_step * self.dt, ham_label)
117
- ham += coeff * self._hamiltonians[ham_label]
118
- return ham.get_static_hamiltonian()
@@ -1,75 +0,0 @@
1
- # Copyright 2025 Qilimanjaro Quantum Tech
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
- from __future__ import annotations
15
-
16
- from abc import ABC, abstractmethod
17
-
18
-
19
- class Parameterizable(ABC):
20
- @property
21
- @abstractmethod
22
- def nparameters(self) -> int:
23
- """Number of tunable parameters defined by the object."""
24
-
25
- @abstractmethod
26
- def get_parameter_values(self) -> list[float]:
27
- """Return the current numerical values of the parameters."""
28
-
29
- @abstractmethod
30
- def get_parameter_names(self) -> list[str]:
31
- """Return the ordered list of parameter labels."""
32
-
33
- @abstractmethod
34
- def get_parameters(self) -> dict[str, float]:
35
- """Return a mapping from parameter labels to their current numerical values."""
36
-
37
- @abstractmethod
38
- def set_parameter_values(self, values: list[float]) -> None:
39
- """
40
- Update all parameter values at once.
41
-
42
- Args:
43
- values (list[float]): New parameter values ordered consistently with ``get_parameter_names()``.
44
-
45
- Raises:
46
- ValueError: If ``values`` does not contain exactly ``nparameters`` entries.
47
- """
48
-
49
- @abstractmethod
50
- def set_parameters(self, parameters: dict[str, float]) -> None:
51
- """
52
- Update a subset of parameters by label.
53
-
54
- Args:
55
- parameters (dict[str, float]): Mapping from parameter labels to updated numeric values.
56
-
57
- Raises:
58
- ValueError: If an unknown parameter label is provided.
59
- """
60
-
61
- @abstractmethod
62
- def get_parameter_bounds(self) -> dict[str, tuple[float, float]]:
63
- """Return the ``(lower, upper)`` bounds associated with each parameter."""
64
-
65
- @abstractmethod
66
- def set_parameter_bounds(self, ranges: dict[str, tuple[float, float]]) -> None:
67
- """
68
- Update the allowable ranges for the specified parameters.
69
-
70
- Args:
71
- ranges (dict[str, tuple[float, float]]): Mapping from parameter label to ``(lower, upper)`` bounds.
72
-
73
- Raises:
74
- ValueError: If an unknown parameter label is provided.
75
- """
@@ -1,69 +0,0 @@
1
- qilisdk/__init__.py,sha256=ewlADDRquvUClgPp1fDx5gfsPsmUHl3LF42ROLqeI5g,824
2
- qilisdk/__init__.pyi,sha256=7O8kvYmk9hl0OKHgXJkemmYp-x_zppNRuN_WAZeHjbo,630
3
- qilisdk/_logging.py,sha256=vCKCClIwAY9KptzieYbldU6MVs-HYZ4P1imG2oXkumM,4063
4
- qilisdk/_optionals.py,sha256=WkYAtoE4RcPtgl7l4OJNGeXwJc0xc8M_UQCpVHS1lmo,3459
5
- qilisdk/logging_config.yaml,sha256=DxsAJBPr1o54pjtYRnzMHuDbrr8hv4ruym8rLRmUKEk,381
6
- qilisdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- qilisdk/settings.py,sha256=PtiO3iInoBIBLTO_t6D5iWN5a3FuqO4DXyPKmpnph-A,2827
8
- qilisdk/yaml.py,sha256=UcildGIQq1vMmjKLgFAbd-tN5nwYHlAUi6cs_8r8_As,8050
9
- qilisdk/analog/__init__.py,sha256=HZecq1CdbZ9ilgxeXcuNQDYv0qYUqi-Mvta-WZPoGT4,862
10
- qilisdk/analog/exceptions.py,sha256=oYRJD00ICs9M6hezXPv7C7Ug6amcbbGDeP-1o1GkECc,717
11
- qilisdk/analog/hamiltonian.py,sha256=UbjPmgGZtAO0O99RTJWuCS4M19XFSr2VsL2utszI9eo,39994
12
- qilisdk/analog/linear_schedule.py,sha256=lVjSvvOxRHBqfCezWEqa4ndQTj4ffSN0FeFLHKAS2Zw,4775
13
- qilisdk/analog/schedule.py,sha256=gzyAjjTbiCtlPvQxV8wRfLFXetiyp4_fVhW01rE_nsc,22760
14
- qilisdk/backends/__init__.py,sha256=QHJ99ub4WPMmSMEs_Zdx3yF6d7K9uBapKp0FgvZ12L8,1666
15
- qilisdk/backends/__init__.pyi,sha256=JP6QY7BqO0LuN7NPAWU0ebBwfcKEJ5w5p4xHa5GNKhA,752
16
- qilisdk/backends/backend.py,sha256=G0duQuO6Cf9en36eiFunLpmWNKmtQJzN4RuMxV8sp6w,5241
17
- qilisdk/backends/cuda_backend.py,sha256=1OnkodWH7u2cDlJ9SuIxBtBjCx-bsTkJYEnyqz4KiqQ,17084
18
- qilisdk/backends/qutip_backend.py,sha256=LgOMNFGzYHtxeOk9PnBDWRUacT1z_LuqTpae0l-aALU,19585
19
- qilisdk/common/__init__.py,sha256=etcRx1P5YrIAEqkfRuZ8RuF0AFxLFgwM6VTUcBiev9o,1405
20
- qilisdk/common/algorithm.py,sha256=RgXo5rhl0yON6M77hRI82fmtflwkwUS7ADZPUZw_pQE,682
21
- qilisdk/common/exceptions.py,sha256=f72N4SRj-oUkHVKVV_Drj6oinTJODNM0LxdFn6AHuBE,1034
22
- qilisdk/common/model.py,sha256=FAw_YksZnqrfPUKO7mkOrKYthWYKgOgiz-CVZaym2JY,41583
23
- qilisdk/common/parameterizable.py,sha256=hdibs--MFKn7Sy3CuFbn7Bk2ozPe0206jAuXfyMQdNY,2575
24
- qilisdk/common/qtensor.py,sha256=gyPcYpi5fumyFctlniZfjGhDvQZ8LjSFodKxXQSK43w,26016
25
- qilisdk/common/result.py,sha256=EUCWebtdeBwGjhVCBgStuEVmx-U1WR0ZOX7ALAnLrmI,700
26
- qilisdk/common/variables.py,sha256=f98valt1445iysG7CXEpPaiqTeLuYwcoPYBAL952_GA,71826
27
- qilisdk/cost_functions/__init__.py,sha256=tKoEm4eVb8oTGGhj25nM2YQE73CRXaLgLyfipa2I70s,760
28
- qilisdk/cost_functions/cost_function.py,sha256=NyUy-2pp5A_KMjFZ5vIvl0pw5aGD024i-2X2AUKasDo,2852
29
- qilisdk/cost_functions/model_cost_function.py,sha256=gU2-nRlPCv_Dwkt2GSWRtAtjkMOyTppMX4uD_cp9Uno,5715
30
- qilisdk/cost_functions/observable_cost_function.py,sha256=lPYrnQr9Tf6VD7YbDY4l8q9VY-xF_o0rLtbefku3C0M,4188
31
- qilisdk/digital/__init__.py,sha256=qmE0VTKdD9ILlx6ClhBjvOXbpD0nr3uavG-l3VSh69c,989
32
- qilisdk/digital/ansatz.py,sha256=HJLhC5o5sh8aw4itLnYoZ6cUZMunFIC0FFFBjYT0OJQ,8074
33
- qilisdk/digital/circuit.py,sha256=3oSkStK91wPG_ozjEGDoDder6PFs5yV5xp6InonoPPo,6911
34
- qilisdk/digital/exceptions.py,sha256=dtMN9yjX_qRWJ5iFfNTHWVwKB7BrrSecvjB4D0KeoEA,1292
35
- qilisdk/digital/gates.py,sha256=3on8XI0zZd7WFF15Rr7KNV-se7AOZSf5FBKgX60w1Tk,33651
36
- qilisdk/functionals/__init__.py,sha256=1Yrk8SyJ98yNYm658HeyaPFaNdMBH96PPlv6oEGGwpM,1037
37
- qilisdk/functionals/functional.py,sha256=z0KrJ6CPD_FawpYYereXnaiFnX1TyfEmK5pf9HzY_ew,1449
38
- qilisdk/functionals/functional_result.py,sha256=jEtMEoJcezFgIa1AsJDNg0nm5HSJJOEXkr5eVo2u4bI,743
39
- qilisdk/functionals/sampling.py,sha256=LkZJW2oHqDcGiARmKJPp3qwNmUEd0ygJfIUAjigKlnY,3266
40
- qilisdk/functionals/sampling_result.py,sha256=tUXOHJOtznGyWsHK4MLtP1bTSdD6zppbT2K2lcQFkyo,3411
41
- qilisdk/functionals/time_evolution.py,sha256=ixSTvtd5zckhTmyZsylpEUxTdPYx9siag_l5NfIy6CU,4155
42
- qilisdk/functionals/time_evolution_result.py,sha256=kwagAEZdumaWcJzRL0t25wXYIqH9hIax7jL4i0KEDV8,3495
43
- qilisdk/functionals/variational_program.py,sha256=wD5oHYBMUGRNCn-SFjTHE6r0oqd5y3KxQ8dkgbANS94,3029
44
- qilisdk/functionals/variational_program_result.py,sha256=Dii9D1BnUpfsBfgN60eFVp7Qhsr2mIFSbUtM5Q4KZeI,2657
45
- qilisdk/optimizers/__init__.py,sha256=v3pLS__wnVRCiz83y8-gUjRuW-BoAGXFpd6HUmLodgY,663
46
- qilisdk/optimizers/optimizer.py,sha256=GT9ziwPJ2ZjckOeeoyc07O3XyaVsRmUnVxN0UXNaO7Y,1570
47
- qilisdk/optimizers/optimizer_result.py,sha256=OjwgED_tAKkp4rqqnq0ordaLp09B2lbN5Yfjed9qUak,3477
48
- qilisdk/optimizers/scipy_optimizer.py,sha256=JquRPvpWJ6ccpzxlo9HKV66cz4kYwEXEPe3jNeT8_sE,5020
49
- qilisdk/speqtrum/__init__.py,sha256=7fvKWdhNrfhRFNJuCNg-VKZ-mr0VlPlfbbLWYUBdqqM,1537
50
- qilisdk/speqtrum/__init__.pyi,sha256=2_3FiMTnJe0rUuK-arKd4JuIt3tJ9ci-a8ipgMdOSSo,728
51
- qilisdk/speqtrum/keyring.py,sha256=zPYSAqq9A0hfjWdchTCy9oZi72HPFvtxDoblHDvpjhA,1898
52
- qilisdk/speqtrum/speqtrum.py,sha256=Je-Euanqa2yANhLaeRZ59OMpsCQatPq6MRBjJANS9E4,17387
53
- qilisdk/speqtrum/speqtrum_models.py,sha256=eI5xg3flP6N-UObffI75BhNcSmNp511N3WoGSw-yCHU,9952
54
- qilisdk/speqtrum/experiments/__init__.py,sha256=FlXV-8SR8VMRKMxbgj3sa8kHcueTsw6NT9j0zm6Tk_U,955
55
- qilisdk/speqtrum/experiments/experiment_functional.py,sha256=0yuuDZJzI2OaHsKmbQrkXeK4Ih2PQilKLuwqdXZxdC4,4363
56
- qilisdk/speqtrum/experiments/experiment_result.py,sha256=O398vInFShp4n8YvUSfit1kgNCnlSZ9F07xHipxRHkc,8201
57
- qilisdk/utils/__init__.py,sha256=LDSTo7NstSbHMvvqvx7ZLxh0HFTEXg1O_B76SyEEHk8,588
58
- qilisdk/utils/openqasm2.py,sha256=IMHT3BRbpS4giKg5JCZ4tt6BpD7eDEJMALrW7w1RvPw,8322
59
- qilisdk/utils/serialization.py,sha256=_SmxxbshMtSozCHdzi_Y_3YZ7-KNjsrlfgkBtJ3mAjw,3870
60
- qilisdk/utils/visualization/PlusJakartaSans-SemiBold.ttf,sha256=kcACUvAhK3AgdI7-50kwPyG0xdtAodY9-UhPbw2NtTk,94844
61
- qilisdk/utils/visualization/__init__.py,sha256=p3OTMwM2eF5_LZW0-kYU8IqcEyQySxjDKnqDfCw3dpg,769
62
- qilisdk/utils/visualization/circuit_renderers.py,sha256=20X--lgQdwmu08pvuekdebOI01hRHknl0Z8ct4OVWOU,29908
63
- qilisdk/utils/visualization/schedule_renderers.py,sha256=RhigVpXgZF_iHg2W8EOdvwL_g2j_mCw-gIgFvgJcjLM,6005
64
- qilisdk/utils/visualization/style.py,sha256=l50u4UGCbU0r_BBuij35M4sTrmYh_e0m1IgRY-DjfH8,7288
65
- qilisdk/utils/visualization/themes.py,sha256=uganZjDx742bmGVG73UU6Lde5XXjlDNfVNEa9y_icBw,2346
66
- qilisdk-0.1.5.dist-info/METADATA,sha256=Yclcu1KkOs4WMosRTkCT_lT6mLNsvMQqeOoP4UIhQuw,19301
67
- qilisdk-0.1.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
68
- qilisdk-0.1.5.dist-info/licenses/LICENCE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
69
- qilisdk-0.1.5.dist-info/RECORD,,
File without changes
File without changes