qadence 1.11.0__tar.gz → 1.11.1__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.
- {qadence-1.11.0 → qadence-1.11.1}/PKG-INFO +3 -3
- {qadence-1.11.0 → qadence-1.11.1}/pyproject.toml +3 -3
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/hamiltonians.py +10 -1
- {qadence-1.11.0 → qadence-1.11.1}/qadence/draw/utils.py +2 -1
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/constructors.py +7 -2
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/models.py +2 -7
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/trainer.py +1 -9
- {qadence-1.11.0 → qadence-1.11.1}/qadence/model.py +23 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/register.py +5 -1
- {qadence-1.11.0 → qadence-1.11.1}/.coveragerc +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/.github/ISSUE_TEMPLATE/new-feature.yml +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/.github/workflows/build_docs.yml +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/.github/workflows/lint.yml +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/.github/workflows/test_all.yml +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/.github/workflows/test_examples.yml +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/.github/workflows/test_fast.yml +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/.gitignore +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/.pre-commit-config.yaml +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/LICENSE +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/MANIFEST.in +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/README.md +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/mkdocs.yml +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/analog/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/analog/addressing.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/analog/constants.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/analog/device.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/analog/hamiltonian_terms.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/analog/parse_analog.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backend.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/api.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/gpsr.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/horqrux/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/horqrux/backend.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/horqrux/config.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/horqrux/convert_ops.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/jax_utils.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/pulser/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/pulser/backend.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/pulser/channels.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/pulser/cloud.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/pulser/config.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/pulser/convert_ops.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/pulser/devices.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/pulser/pulses.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/pulser/waveforms.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/pyqtorch/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/pyqtorch/backend.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/pyqtorch/config.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/pyqtorch/convert_ops.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/backends/utils.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/blocks/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/blocks/abstract.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/blocks/analog.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/blocks/block_to_tensor.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/blocks/composite.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/blocks/embedding.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/blocks/manipulate.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/blocks/matrix.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/blocks/primitive.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/blocks/utils.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/circuit.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/ala.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/daqc/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/daqc/daqc.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/daqc/gen_parser.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/daqc/utils.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/feature_maps.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/hea.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/iia.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/qft.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/rydberg_feature_maps.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/rydberg_hea.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/constructors/utils.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/decompose.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/divergences.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/draw/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/draw/assets/dark/measurement.png +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/draw/assets/dark/measurement.svg +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/draw/assets/light/measurement.png +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/draw/assets/light/measurement.svg +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/draw/themes.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/draw/vizbackend.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/engines/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/engines/differentiable_backend.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/engines/jax/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/engines/jax/differentiable_backend.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/engines/jax/differentiable_expectation.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/engines/torch/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/engines/torch/differentiable_backend.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/engines/torch/differentiable_expectation.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/exceptions/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/exceptions/exceptions.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/execution.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/extensions.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/libs.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/log_config.yaml +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/logger.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/measurements/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/measurements/protocols.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/measurements/samples.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/measurements/shadow.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/measurements/tomography.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/measurements/utils.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/mitigations/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/mitigations/analog_zne.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/mitigations/protocols.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/mitigations/readout.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/callbacks/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/callbacks/callback.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/callbacks/callbackmanager.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/callbacks/saveload.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/callbacks/writer_registry.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/config.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/data.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/information/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/information/information_content.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/loss/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/loss/loss.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/optimize_step.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/parameters.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/stages.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/tensors.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/train_utils/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/train_utils/accelerator.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/train_utils/base_trainer.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/train_utils/config_manager.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/train_utils/distribution.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/train_utils/execution.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/ml_tools/utils.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/noise/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/noise/protocols.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/operations/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/operations/analog.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/operations/control_ops.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/operations/ham_evo.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/operations/parametric.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/operations/primitive.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/overlap.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/parameters.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/pasqal_cloud_connection.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/protocols.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/py.typed +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/qubit_support.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/serial_expr_grammar.peg +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/serialization.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/states.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/transpile/__init__.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/transpile/apply_fn.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/transpile/block.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/transpile/circuit.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/transpile/digitalize.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/transpile/flatten.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/transpile/invert.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/transpile/noise.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/transpile/transpile.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/types.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/qadence/utils.py +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/renovate.json +0 -0
- {qadence-1.11.0 → qadence-1.11.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: qadence
|
3
|
-
Version: 1.11.
|
3
|
+
Version: 1.11.1
|
4
4
|
Summary: Pasqal interface for circuit-based quantum computing SDKs
|
5
5
|
Author-email: Aleksander Wennersteen <aleksander.wennersteen@pasqal.com>, Gert-Jan Both <gert-jan.both@pasqal.com>, Niklas Heim <niklas.heim@pasqal.com>, Mario Dagrada <mario.dagrada@pasqal.com>, Vincent Elfving <vincent.elfving@pasqal.com>, Dominik Seitz <dominik.seitz@pasqal.com>, Roland Guichard <roland.guichard@pasqal.com>, "Joao P. Moutinho" <joao.moutinho@pasqal.com>, Vytautas Abramavicius <vytautas.abramavicius@pasqal.com>, Gergana Velikova <gergana.velikova@pasqal.com>, Eduardo Maschio <eduardo.maschio@pasqal.com>, Smit Chaudhary <smit.chaudhary@pasqal.com>, Ignacio Fernández Graña <ignacio.fernandez-grana@pasqal.com>, Charles Moussa <charles.moussa@pasqal.com>, Giorgio Tosti Balducci <giorgio.tosti-balducci@pasqal.com>, Daniele Cucurachi <daniele.cucurachi@pasqal.com>, Pim Venderbosch <pim.venderbosch@pasqal.com>, Manu Lahariya <manu.lahariya@pasqal.com>
|
6
6
|
License: Apache 2.0
|
@@ -23,7 +23,7 @@ Requires-Dist: nevergrad
|
|
23
23
|
Requires-Dist: numpy
|
24
24
|
Requires-Dist: openfermion
|
25
25
|
Requires-Dist: pasqal-cloud
|
26
|
-
Requires-Dist: pyqtorch==1.7.
|
26
|
+
Requires-Dist: pyqtorch==1.7.2
|
27
27
|
Requires-Dist: pyyaml
|
28
28
|
Requires-Dist: rich
|
29
29
|
Requires-Dist: scipy
|
@@ -55,7 +55,7 @@ Requires-Dist: mlflow; extra == 'mlflow'
|
|
55
55
|
Provides-Extra: protocols
|
56
56
|
Requires-Dist: qadence-protocols; extra == 'protocols'
|
57
57
|
Provides-Extra: pulser
|
58
|
-
Requires-Dist: pasqal-cloud==0.
|
58
|
+
Requires-Dist: pasqal-cloud==0.20.2; extra == 'pulser'
|
59
59
|
Requires-Dist: pulser-core==1.3.0; extra == 'pulser'
|
60
60
|
Requires-Dist: pulser-simulation==1.3.0; extra == 'pulser'
|
61
61
|
Provides-Extra: visualization
|
@@ -28,7 +28,7 @@ authors = [
|
|
28
28
|
]
|
29
29
|
requires-python = ">=3.9"
|
30
30
|
license = { text = "Apache 2.0" }
|
31
|
-
version = "1.11.
|
31
|
+
version = "1.11.1"
|
32
32
|
classifiers = [
|
33
33
|
"License :: OSI Approved :: Apache Software License",
|
34
34
|
"Programming Language :: Python",
|
@@ -52,7 +52,7 @@ dependencies = [
|
|
52
52
|
"jsonschema",
|
53
53
|
"nevergrad",
|
54
54
|
"scipy",
|
55
|
-
"pyqtorch==1.7.
|
55
|
+
"pyqtorch==1.7.2",
|
56
56
|
"pyyaml",
|
57
57
|
"matplotlib",
|
58
58
|
"Arpeggio==2.0.2",
|
@@ -67,7 +67,7 @@ allow-ambiguous-features = true
|
|
67
67
|
pulser = [
|
68
68
|
"pulser-core==1.3.0",
|
69
69
|
"pulser-simulation==1.3.0",
|
70
|
-
"pasqal-cloud==0.
|
70
|
+
"pasqal-cloud==0.20.2",
|
71
71
|
]
|
72
72
|
visualization = [
|
73
73
|
"graphviz",
|
@@ -281,6 +281,12 @@ class ObservableConfig:
|
|
281
281
|
If True, the scale and shift are VariationalParameter.
|
282
282
|
If False, the scale and shift are FeatureParameter.
|
283
283
|
"""
|
284
|
+
tag: str | None = None
|
285
|
+
"""
|
286
|
+
String to indicate the name tag of the observable.
|
287
|
+
|
288
|
+
Defaults to None, in which case no tag will be applied.
|
289
|
+
"""
|
284
290
|
|
285
291
|
def __post_init__(self) -> None:
|
286
292
|
if self.interaction is None and self.detuning is None:
|
@@ -313,6 +319,7 @@ def total_magnetization_config(
|
|
313
319
|
scale=scale,
|
314
320
|
shift=shift,
|
315
321
|
trainable_transform=trainable_transform,
|
322
|
+
tag="Total Magnetization",
|
316
323
|
)
|
317
324
|
|
318
325
|
|
@@ -327,6 +334,7 @@ def zz_hamiltonian_config(
|
|
327
334
|
scale=scale,
|
328
335
|
shift=shift,
|
329
336
|
trainable_transform=trainable_transform,
|
337
|
+
tag="ZZ Hamiltonian",
|
330
338
|
)
|
331
339
|
|
332
340
|
|
@@ -348,8 +356,9 @@ def ising_hamiltonian_config(
|
|
348
356
|
|
349
357
|
return ObservableConfig(
|
350
358
|
interaction=ZZ_Z_hamiltonian,
|
351
|
-
detuning=
|
359
|
+
detuning=X,
|
352
360
|
scale=scale,
|
353
361
|
shift=shift,
|
354
362
|
trainable_transform=trainable_transform,
|
363
|
+
tag="Ising Hamiltonian",
|
355
364
|
)
|
@@ -147,7 +147,8 @@ def _(model: QuantumModel, *args: Any, **kwargs: Any) -> QuantumCircuitDiagram:
|
|
147
147
|
raise ValueError("Cannot visualize QuantumModel with more than one observable.")
|
148
148
|
|
149
149
|
obs = deepcopy(model._observable[0].original) # type: ignore [index]
|
150
|
-
obs.tag
|
150
|
+
if not isinstance(obs.tag, str):
|
151
|
+
obs.tag = "Obs."
|
151
152
|
|
152
153
|
block: AbstractBlock = chain(model._circuit.original.block, obs)
|
153
154
|
else:
|
@@ -733,7 +733,13 @@ def create_observable(
|
|
733
733
|
interaction=config.interaction,
|
734
734
|
detuning=config.detuning,
|
735
735
|
)
|
736
|
-
|
736
|
+
|
737
|
+
obs: AbstractBlock = add(shifting_term, detuning_hamiltonian)
|
738
|
+
|
739
|
+
if isinstance(config.tag, str):
|
740
|
+
tag(obs, config.tag)
|
741
|
+
|
742
|
+
return obs
|
737
743
|
|
738
744
|
|
739
745
|
def build_qnn_from_configs(
|
@@ -795,7 +801,6 @@ def build_qnn_from_configs(
|
|
795
801
|
if isinstance(observable_config, list)
|
796
802
|
else create_observable(register=register, config=observable_config)
|
797
803
|
)
|
798
|
-
|
799
804
|
ufa = QNN(
|
800
805
|
circ,
|
801
806
|
observable,
|
@@ -360,13 +360,8 @@ class QNN(QuantumModel):
|
|
360
360
|
)
|
361
361
|
observable_str = ""
|
362
362
|
if self._observable:
|
363
|
-
observable_str = (
|
364
|
-
|
365
|
-
+ "\n".join(
|
366
|
-
(block_to_mathematical_expression(obs.original) for obs in self._observable)
|
367
|
-
)
|
368
|
-
+ "\n]"
|
369
|
-
)
|
363
|
+
observable_str = f"observable_config = {self.observables_to_expression()}"
|
364
|
+
|
370
365
|
return f"{type(self).__name__}(\n{configs_str}\n{observable_str}\n)"
|
371
366
|
|
372
367
|
return super().__str__()
|
@@ -530,15 +530,7 @@ class Trainer(BaseTrainer):
|
|
530
530
|
self.ng_params = ng_params
|
531
531
|
loss_metrics = loss, metrics
|
532
532
|
|
533
|
-
|
534
|
-
# Because the loss/metrics are returned before the optimization. To sync
|
535
|
-
# model state and current loss/metrics we calculate them again after optimization.
|
536
|
-
# This is not strictly necessary.
|
537
|
-
# TODO: Should be removed if loss can be logged at an unoptimized model state
|
538
|
-
with torch.no_grad():
|
539
|
-
post_update_loss_metrics = self.loss_fn(self.model, batch)
|
540
|
-
|
541
|
-
return self._modify_batch_end_loss_metrics(post_update_loss_metrics)
|
533
|
+
return self._modify_batch_end_loss_metrics(loss_metrics)
|
542
534
|
|
543
535
|
@BaseTrainer.callback("val_epoch")
|
544
536
|
def run_validation(self, dataloader: DataLoader) -> list[tuple[torch.Tensor, dict[str, Any]]]:
|
@@ -27,6 +27,7 @@ from qadence.mitigations import Mitigations
|
|
27
27
|
from qadence.noise import NoiseHandler
|
28
28
|
from qadence.parameters import Parameter
|
29
29
|
from qadence.types import DiffMode, Endianness
|
30
|
+
from qadence.utils import block_to_mathematical_expression
|
30
31
|
|
31
32
|
logger = getLogger(__name__)
|
32
33
|
|
@@ -568,6 +569,28 @@ class QuantumModel(nn.Module):
|
|
568
569
|
logger.warning(f"Unable to move {self} to {args}, {kwargs} due to {e}.")
|
569
570
|
return self
|
570
571
|
|
572
|
+
def observables_to_expression(self) -> dict[str, str] | str:
|
573
|
+
"""
|
574
|
+
Convert the observable to a dictionary representation of Pauli terms.
|
575
|
+
|
576
|
+
If no observable is set, returns an empty dictionary. Each observable is
|
577
|
+
represented by its tag (if available) as the key and its mathematical expression
|
578
|
+
as the value.
|
579
|
+
|
580
|
+
Returns:
|
581
|
+
dict[str, str]: A dictionary where the keys are observable tags (or "Obs." if not provided)
|
582
|
+
and the values are the corresponding mathematical expressions.
|
583
|
+
"""
|
584
|
+
if self._observable is None:
|
585
|
+
return "No observable set."
|
586
|
+
else:
|
587
|
+
return {
|
588
|
+
obs.original.tag if obs.original.tag else "Obs.": block_to_mathematical_expression(
|
589
|
+
obs.original
|
590
|
+
)
|
591
|
+
for obs in self._observable
|
592
|
+
}
|
593
|
+
|
571
594
|
@property
|
572
595
|
def device(self) -> torch.device:
|
573
596
|
"""Get device.
|
@@ -329,8 +329,12 @@ class Register:
|
|
329
329
|
return Register(g, spacing=None, device_specs=self.device_specs)
|
330
330
|
|
331
331
|
def _to_dict(self) -> dict:
|
332
|
+
try:
|
333
|
+
graph_data = nx.node_link_data(self.graph, edges="links")
|
334
|
+
except TypeError: # For Python 3.9 support
|
335
|
+
graph_data = nx.node_link_data(self.graph)
|
332
336
|
return {
|
333
|
-
"graph":
|
337
|
+
"graph": graph_data,
|
334
338
|
"device_specs": self.device_specs._to_dict(),
|
335
339
|
}
|
336
340
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|