From 6dfb9d488b8d47693bef2e6851e2fe3570cf39e7 Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Tue, 21 Jan 2025 16:20:10 -0500 Subject: [PATCH 1/7] small fix --- pennylane/labs/vibrational/christiansen_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pennylane/labs/vibrational/christiansen_utils.py b/pennylane/labs/vibrational/christiansen_utils.py index 33a6f26ed2f..dba81bf98eb 100644 --- a/pennylane/labs/vibrational/christiansen_utils.py +++ b/pennylane/labs/vibrational/christiansen_utils.py @@ -848,7 +848,7 @@ def christiansen_integrals_dipole(pes, n_states=16): comm.Barrier() dipole_cform_onebody = comm.bcast(dipole_cform_onebody, root=0) - if pes.localized is True or pes.dipole_level > 1: + if pes.localized and pes.dipole_level > 1: local_dipole_cform_twobody = _cform_twomode_dipole(pes, n_states) comm.Barrier() @@ -865,7 +865,7 @@ def christiansen_integrals_dipole(pes, n_states=16): comm.Barrier() dipole_cform_twobody = comm.bcast(dipole_cform_twobody, root=0) - if pes.localized is True or pes.dipole_level > 2: + if pes.localized and pes.dipole_level > 2: local_dipole_cform_threebody = _cform_threemode_dipole(pes, n_states) comm.Barrier() From c41f04a2de5e4c6a66a02876841c84b3b0adb82f Mon Sep 17 00:00:00 2001 From: Austin Huang <65315367+austingmhuang@users.noreply.github.com> Date: Tue, 21 Jan 2025 16:29:11 -0500 Subject: [PATCH 2/7] Apply suggestions from code review --- pennylane/labs/vibrational/christiansen_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pennylane/labs/vibrational/christiansen_utils.py b/pennylane/labs/vibrational/christiansen_utils.py index dba81bf98eb..81e4bcc7b9a 100644 --- a/pennylane/labs/vibrational/christiansen_utils.py +++ b/pennylane/labs/vibrational/christiansen_utils.py @@ -848,7 +848,7 @@ def christiansen_integrals_dipole(pes, n_states=16): comm.Barrier() dipole_cform_onebody = comm.bcast(dipole_cform_onebody, root=0) - if pes.localized and pes.dipole_level > 1: + if pes.dipole_level > 1: local_dipole_cform_twobody = _cform_twomode_dipole(pes, n_states) comm.Barrier() @@ -865,7 +865,7 @@ def christiansen_integrals_dipole(pes, n_states=16): comm.Barrier() dipole_cform_twobody = comm.bcast(dipole_cform_twobody, root=0) - if pes.localized and pes.dipole_level > 2: + if pes.dipole_level > 2: local_dipole_cform_threebody = _cform_threemode_dipole(pes, n_states) comm.Barrier() From 3a0055abce7e83311a231299a8297a64bfefb1be Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Tue, 21 Jan 2025 16:38:09 -0500 Subject: [PATCH 3/7] this would fail --- pennylane/labs/tests/vibrational/test_christiansen_ham.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pennylane/labs/tests/vibrational/test_christiansen_ham.py b/pennylane/labs/tests/vibrational/test_christiansen_ham.py index 7d13333c419..92eea147a50 100644 --- a/pennylane/labs/tests/vibrational/test_christiansen_ham.py +++ b/pennylane/labs/tests/vibrational/test_christiansen_ham.py @@ -150,6 +150,12 @@ def test_christiansen_integrals_dipole(): assert np.allclose(abs(two), abs(D2), atol=1e-8) assert np.allclose(abs(three), abs(D3), atol=1e-8) +def test_christiansen_integrals_dipole_conditional(): + """Test that christiansen_integrals_dipole works even when there is only two mode dipoles.""" + one, two = christiansen_integrals_dipole(pes=pes_object_2D, n_states=4) + assert np.allclose(abs(one), abs(D1), atol=1e-8) + assert np.allclose(abs(two), abs(D2), atol=1e-8) + def test_cform_onemode(): """Test that _cform_onemode produces the expected one-body integral.""" From fd72be10607877975bfbd277f1135b902ea73309 Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Tue, 21 Jan 2025 16:39:41 -0500 Subject: [PATCH 4/7] this would fail --- pennylane/labs/tests/vibrational/test_christiansen_ham.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pennylane/labs/tests/vibrational/test_christiansen_ham.py b/pennylane/labs/tests/vibrational/test_christiansen_ham.py index 92eea147a50..ab522bf40c6 100644 --- a/pennylane/labs/tests/vibrational/test_christiansen_ham.py +++ b/pennylane/labs/tests/vibrational/test_christiansen_ham.py @@ -152,9 +152,10 @@ def test_christiansen_integrals_dipole(): def test_christiansen_integrals_dipole_conditional(): """Test that christiansen_integrals_dipole works even when there is only two mode dipoles.""" - one, two = christiansen_integrals_dipole(pes=pes_object_2D, n_states=4) - assert np.allclose(abs(one), abs(D1), atol=1e-8) - assert np.allclose(abs(two), abs(D2), atol=1e-8) + coeffs = christiansen_integrals_dipole(pes=pes_object_2D, n_states=4) + assert np.allclose(abs(coeffs[0]), abs(D1), atol=1e-8) + assert np.allclose(abs(coeffs[1]), abs(D2), atol=1e-8) + assert len(coeffs) == 2 def test_cform_onemode(): From 5de30e543887feb8ebe5acd90842ce35aa1e5c92 Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Mon, 27 Jan 2025 13:48:41 -0500 Subject: [PATCH 5/7] changelog and black --- doc/releases/changelog-dev.md | 4 ++++ pennylane/labs/tests/vibrational/test_christiansen_ham.py | 1 + 2 files changed, 5 insertions(+) diff --git a/doc/releases/changelog-dev.md b/doc/releases/changelog-dev.md index 6b08ff74363..f0330ba818b 100644 --- a/doc/releases/changelog-dev.md +++ b/doc/releases/changelog-dev.md @@ -105,6 +105,9 @@ * `BasisState` now casts its input to integers. [(#6844)](https://github.com/PennyLaneAI/pennylane/pull/6844) +* Fixed a bug in `qml.labs.vibrational.christiansen_integrals_dipole` that caused one-mode and two-mode dipole operators to be computed incorrectly. + [#6870](https://github.com/PennyLaneAI/pennylane/pull/6870) +

Contributors ✍️

This release contains contributions from (in alphabetical order): @@ -114,5 +117,6 @@ Isaac De Vlugt, Diksha Dhawan, Pietropaolo Frisoni, Marcus Gisslén, +Austin Huang, Christina Lee, Andrija Paurevic diff --git a/pennylane/labs/tests/vibrational/test_christiansen_ham.py b/pennylane/labs/tests/vibrational/test_christiansen_ham.py index ab522bf40c6..9794a41bf44 100644 --- a/pennylane/labs/tests/vibrational/test_christiansen_ham.py +++ b/pennylane/labs/tests/vibrational/test_christiansen_ham.py @@ -150,6 +150,7 @@ def test_christiansen_integrals_dipole(): assert np.allclose(abs(two), abs(D2), atol=1e-8) assert np.allclose(abs(three), abs(D3), atol=1e-8) + def test_christiansen_integrals_dipole_conditional(): """Test that christiansen_integrals_dipole works even when there is only two mode dipoles.""" coeffs = christiansen_integrals_dipole(pes=pes_object_2D, n_states=4) From 467140123af45f727c231d60ed0646f43cc26da7 Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Thu, 30 Jan 2025 10:58:43 -0500 Subject: [PATCH 6/7] fix --- pennylane/labs/vibrational/christiansen_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pennylane/labs/vibrational/christiansen_utils.py b/pennylane/labs/vibrational/christiansen_utils.py index 81e4bcc7b9a..253a428039e 100644 --- a/pennylane/labs/vibrational/christiansen_utils.py +++ b/pennylane/labs/vibrational/christiansen_utils.py @@ -847,6 +847,7 @@ def christiansen_integrals_dipole(pes, n_states=16): path.unlink() comm.Barrier() dipole_cform_onebody = comm.bcast(dipole_cform_onebody, root=0) + D_arr = [dipole_cform_onebody] if pes.dipole_level > 1: local_dipole_cform_twobody = _cform_twomode_dipole(pes, n_states) @@ -864,6 +865,7 @@ def christiansen_integrals_dipole(pes, n_states=16): path.unlink() comm.Barrier() dipole_cform_twobody = comm.bcast(dipole_cform_twobody, root=0) + D_arr = [dipole_cform_onebody, dipole_cform_twobody] if pes.dipole_level > 2: local_dipole_cform_threebody = _cform_threemode_dipole(pes, n_states) @@ -883,7 +885,5 @@ def christiansen_integrals_dipole(pes, n_states=16): dipole_cform_threebody = comm.bcast(dipole_cform_threebody, root=0) D_arr = [dipole_cform_onebody, dipole_cform_twobody, dipole_cform_threebody] - else: - D_arr = [dipole_cform_onebody, dipole_cform_twobody] return D_arr From aeac90feb8ac6738bf445a82ca9e7df931d84673 Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Thu, 30 Jan 2025 11:16:49 -0500 Subject: [PATCH 7/7] fix --- pennylane/labs/vibrational/christiansen_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pennylane/labs/vibrational/christiansen_utils.py b/pennylane/labs/vibrational/christiansen_utils.py index 253a428039e..762f8622ba6 100644 --- a/pennylane/labs/vibrational/christiansen_utils.py +++ b/pennylane/labs/vibrational/christiansen_utils.py @@ -847,7 +847,7 @@ def christiansen_integrals_dipole(pes, n_states=16): path.unlink() comm.Barrier() dipole_cform_onebody = comm.bcast(dipole_cform_onebody, root=0) - D_arr = [dipole_cform_onebody] + D_arr = [dipole_cform_onebody, None, None] if pes.dipole_level > 1: local_dipole_cform_twobody = _cform_twomode_dipole(pes, n_states) @@ -865,7 +865,7 @@ def christiansen_integrals_dipole(pes, n_states=16): path.unlink() comm.Barrier() dipole_cform_twobody = comm.bcast(dipole_cform_twobody, root=0) - D_arr = [dipole_cform_onebody, dipole_cform_twobody] + D_arr = [dipole_cform_onebody, dipole_cform_twobody, None] if pes.dipole_level > 2: local_dipole_cform_threebody = _cform_threemode_dipole(pes, n_states)