PennyLaneAI / pennylane

PennyLane is a cross-platform Python library for quantum computing, quantum machine learning, and quantum chemistry. Train a quantum computer the same way as a neural network.
https://pennylane.ai
Apache License 2.0
2.34k stars 599 forks source link

[BUG] `SPSAOptimizer.step_and_cost` ignores keyword arguments #6028

Closed isaacdevlugt closed 2 months ago

isaacdevlugt commented 3 months ago

Expected behavior

Keyword arguments don't get ignored

Actual behavior

They get ignored.

Additional information

sc-69429

Source code

coeffs = [0.2, -0.543, 0.4514]
obs = [
    qml.PauliX(0) @ qml.PauliZ(1),
    qml.PauliZ(0) @ qml.Hadamard(2),
    qml.PauliX(3) @ qml.PauliZ(1),
]
H = qml.Hamiltonian(coeffs, obs)
num_qubits = 4
dev = qml.device("lightning.qubit", wires=num_qubits)

@qml.qnode(dev)
def cost_fun(params, num_qubits=1):
    print(num_qubits)
    qml.BasisState([1, 1, 0, 0], wires=range(num_qubits))
    for i in range(num_qubits):
        qml.CNOT(wires=[2, 3])
        qml.CNOT(wires=[2, 0])
        qml.CNOT(wires=[3, 1])
    return qml.expval(H)

init_params = np.random.normal(0, np.pi, (num_qubits,), requires_grad=True)
params = init_params

init_energy = cost_fun(init_params, num_qubits)

max_iterations = 100
opt = qml.SPSAOptimizer(maxiter=max_iterations)

params, energy = opt.step_and_cost(cost_fun, params, num_qubits=num_qubits)

Tracebacks

4
4
4
1 # this should be 4
4

System information

Name: PennyLane
Version: 0.37.0
Summary: PennyLane is a cross-platform Python library for quantum computing, quantum machine learning, and quantum chemistry. Train a quantum computer the same way as a neural network.
Home-page: https://github.com/PennyLaneAI/pennylane
Author: 
Author-email: 
License: Apache License 2.0
Location: /Users/isaac/.virtualenvs/pennylane-stable/lib/python3.11/site-packages
Requires: appdirs, autograd, autoray, cachetools, networkx, numpy, packaging, pennylane-lightning, requests, rustworkx, scipy, semantic-version, toml, typing-extensions
Required-by: PennyLane_Lightning

Platform info:           macOS-14.5-arm64-arm-64bit
Python version:          3.11.8
Numpy version:           1.26.4
Scipy version:           1.12.0
Installed devices:
- default.clifford (PennyLane-0.38.0.dev0)
- default.gaussian (PennyLane-0.38.0.dev0)
- default.mixed (PennyLane-0.38.0.dev0)
- default.qubit (PennyLane-0.38.0.dev0)
- default.qubit.autograd (PennyLane-0.38.0.dev0)
- default.qubit.jax (PennyLane-0.38.0.dev0)
- default.qubit.legacy (PennyLane-0.38.0.dev0)
- default.qubit.tf (PennyLane-0.38.0.dev0)
- default.qubit.torch (PennyLane-0.38.0.dev0)
- default.qutrit (PennyLane-0.38.0.dev0)
- default.qutrit.mixed (PennyLane-0.38.0.dev0)
- default.tensor (PennyLane-0.38.0.dev0)
- null.qubit (PennyLane-0.38.0.dev0)
- lightning.qubit (PennyLane_Lightning-0.37.0)

Existing GitHub issues

isaacdevlugt commented 2 months ago

Fixed by #6027