Qadence 2 Working Example
Running Fresnel 1 device using Pulser and QuTiP emulator
Traceback (most recent call last):
File "/home/runner/.local/share/hatch/env/virtual/qadence2/T-GisMMX/docs/lib/python3.10/site-packages/markdown_exec/formatters/python.py", line 71, in _run_python
exec_python(code, code_block_id, exec_globals)
File "/home/runner/.local/share/hatch/env/virtual/qadence2/T-GisMMX/docs/lib/python3.10/site-packages/markdown_exec/formatters/_exec_python.py", line 8, in exec_python
exec(compiled, exec_globals) # noqa: S102
File "<code block: session compile_to_backend; n1>", line 16, in <module>
res = compiled_model.sample(values=f_params, shots=10_000, on="emulator")
File "/home/runner/.local/share/hatch/env/virtual/qadence2/T-GisMMX/docs/lib/python3.10/site-packages/qadence2_platforms/backends/_base_analog/interface.py", line 199, in sample
raise NotImplementedError(f"Platform '{on}' not implemented.")
NotImplementedError: Platform 'emulator' not implemented.
Running using PyQTorch
import pyqtorch as pyq
import torch
from qadence2_platforms.compiler import compile_to_backend
from qadence2_expressions import *
a = parameter("a")
expr = RX(1.57 * a)(0) * RY(0.707 * a ** 2)(0)
print(f"expression: {str(expr)}")
add_qpu_directives({"digital": True})
model = compile_to_model(expr)
print(f"model: {model}\n")
f_params = {"a": torch.tensor(1.0, requires_grad=True)}
compiled_model = compile_to_backend(model, "pyqtorch")
res = compiled_model.sample(values=f_params, shots=10_000)
print(f"sample result: {res}")
wf = compiled_model.run(state=pyq.zero_state(2), values=f_params)
dfdx = torch.autograd.grad(wf, f_params["a"], torch.ones_like(wf))[0]
print(f"{dfdx = }\n")
expression: RX(1.57 * a)[0] * RY(0.707 * a ^ 2.0)[0]
model: Model(
AllocQubits(1),
{
'a': Alloc(1, trainable=False),
},
[
Assign('%0', Call('mul', 1.57, Load('a'))),
QuInstruct('rx', Support((0,)), Load('%0')),
Assign('%1', Call('pow', Load('a'), 2.0)),
Assign('%2', Call('mul', 0.707, Load('%1'))),
QuInstruct('ry', Support((0,)), Load('%2')),
],
directives={
'digital': True,
}
)
sample result: [OrderedCounter({'0': 5023, '1': 4977})]
dfdx = tensor(-0.4166, dtype=torch.float32)