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

Setting qutip-qip as an optional plugin for qutip-5 [unitaryhack] #1920

Merged
merged 7 commits into from
Jun 8, 2022
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
13 changes: 13 additions & 0 deletions qutip/qip.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
"""Module replicating the qutip_qip package from within qutip."""
import sys

try:
import qutip_qip
del qutip_qip
sys.modules["qutip.qip"] = sys.modules["qutip_qip"]
except ImportError:
raise ImportError(
"Importing 'qutip.qip' requires the 'qutip_qip' package. Install it "
"with `pip install qutip-qip` (for more details, go to "
"https://qutip-qip.rtfd.io/en/stable/)."
HGSilveri marked this conversation as resolved.
Show resolved Hide resolved
)
45 changes: 45 additions & 0 deletions qutip/tests/test_qip.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import sys

import pytest


class QutipQipStub:
class CircuitModuleStub:
QubitCircuit = "FakeQubitCircuit"

circuit = CircuitModuleStub()


@pytest.fixture
def without_qutip_qip(monkeypatch):
monkeypatch.setitem(sys.modules, "qutip_qip", None)
monkeypatch.delitem(sys.modules, "qutip.qip", raising=False)


@pytest.fixture
def with_qutip_qip_stub(monkeypatch):
monkeypatch.setitem(sys.modules, "qutip_qip", QutipQipStub())
monkeypatch.delitem(sys.modules, "qutip.qip", raising=False)


def test_failed_import(without_qutip_qip):
# Ensure 'qutip.qip' is not imported yet
assert "qutip.qip" not in sys.modules
with pytest.raises(
ImportError,
match="Importing 'qutip.qip' requires the 'qutip_qip' package.",
HGSilveri marked this conversation as resolved.
Show resolved Hide resolved
):
import qutip.qip


def test_with_qip(monkeypatch, with_qutip_qip_stub):
import qutip.qip

monkeypatch.setitem(sys.modules, "qutip.qip.circuit", qutip.qip.circuit)
import qutip.qip.circuit as circuit
from qutip.qip.circuit import QubitCircuit
import qutip_qip
HGSilveri marked this conversation as resolved.
Show resolved Hide resolved

assert qutip.qip is qutip_qip
assert circuit is qutip_qip.circuit
assert QubitCircuit is qutip_qip.circuit.QubitCircuit