Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lindblad model RWA bug fix #100

Merged
merged 2 commits into from
May 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion qiskit_dynamics/models/rotating_wave_approximation.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ def jax_transformable_func(t):
)

if return_signal_map:
signal_translator = lambda a, b: (get_rwa_signals(a), get_rwa_signals(b))
signal_translator = lambda a: (get_rwa_signals(a[0]), get_rwa_signals(a[1]))
return rwa_model, signal_translator
return rwa_model

Expand Down
4 changes: 3 additions & 1 deletion qiskit_dynamics/solvers/solver_classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,9 @@ def signals(self) -> SignalList:
return self._signals

@signals.setter
def signals(self, new_signals: Union[List[Signal], SignalList]):
def signals(
self, new_signals: Union[List[Signal], SignalList, Tuple[List[Signal]], Tuple[SignalList]]
):
"""Set signals for the solver, and pass to the model."""
self._signals = new_signals
if self._rwa_signal_map is not None:
Expand Down
9 changes: 9 additions & 0 deletions releasenotes/notes/lindblad-rwa-bug-491aaeed27ab4780.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
fixes:
- |
The ``rotating_wave_approximation`` function has been fixed in the case of
the ``model`` argument being a ``LindbladModel`` with ``return_signal_map=True``.
The returned signal mapping function was erroneously defined to take two inputs,
one for Hamiltonian signals and one for dissipator signals. This behaviour has been updated
to be consistent with the documentation, which states that in general this function accepts
only a single argument (in this case a tuple storing both sets of signals).
4 changes: 2 additions & 2 deletions test/dynamics/models/test_rotating_wave_approximation.py
Original file line number Diff line number Diff line change
Expand Up @@ -282,13 +282,13 @@ def test_signal_translator_lindblad_model(self):
dissipator_signals=sigs,
)
f = rotating_wave_approximation(LM, 100, return_signal_map=True)[1]
rwa_ham_sig, rwa_dis_sig = f(sigs, sigs)
rwa_ham_sig, rwa_dis_sig = f((sigs, sigs))
self.assertAllClose(rwa_ham_sig.complex_value(2)[:4], SignalList(sigs).complex_value(2))
self.assertAllClose(rwa_dis_sig.complex_value(2)[:4], SignalList(sigs).complex_value(2))
self.assertAllClose(rwa_ham_sig.complex_value(2)[4:], SignalList(s_prime).complex_value(2))
self.assertAllClose(rwa_dis_sig.complex_value(2)[4:], SignalList(s_prime).complex_value(2))

self.assertTrue(f(None, None) == (None, None))
self.assertTrue(f((None, None)) == (None, None))

def test_rwa_operators(self):
"""Tests get_rwa_operators using pseudorandom numbers."""
Expand Down