diff --git a/.gitignore b/.gitignore index c18dd8d..a3fb408 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ __pycache__/ +*.DS_Store +.venv +*.egg-info/ +*/_version.py \ No newline at end of file diff --git a/graphix_stim_backend/graphix_stim_backend.py b/graphix_stim_backend/graphix_stim_backend.py index 3db33dd..66b8a54 100644 --- a/graphix_stim_backend/graphix_stim_backend.py +++ b/graphix_stim_backend/graphix_stim_backend.py @@ -18,7 +18,7 @@ from graphix.noise_models.depolarising import DepolarisingNoise, TwoQubitDepolarisingNoise from graphix.optimization import StandardizedPattern from graphix.sim.base_backend import Backend, Matrix -from graphix.sim.statevec import Statevec +from graphix.sim.statevec import Statevector from graphix.simulator import DefaultMeasureMethod from graphix.states import BasicStates, PlanarState, State from typing_extensions import assert_never, override @@ -53,14 +53,14 @@ class BasicState(Enum): @staticmethod def try_from_statevector(sv: Matrix) -> BasicState | None: """Return the BasicState corresponding to the parameter, or not if it is not a basic state.""" - return next((bs for bs in BasicState if np.all(bs.value.to_statevector() == sv)), None) + return next((bs for bs in BasicState if np.all(bs.value.to_statevector_numpy() == sv)), None) @staticmethod def try_from_state(s: State) -> BasicState | None: """Return the BasicState corresponding to the parameter, or not if it is not a basic state.""" if isinstance(s, PlanarState): return next((bs for bs in BasicState if bs.value == s), None) - return BasicState.try_from_statevector(s.to_statevector()) + return BasicState.try_from_statevector(s.to_statevector_numpy()) BASIC_STATE_TO_CLIFFORD = { @@ -191,7 +191,7 @@ def get_renumbered_graph(pattern: Pattern) -> RenumberedGraph: :param pattern: pattern :return: the renumbering and the graph """ - graph = pattern.extract_graph() + graph = pattern.to_opengraph().graph nodes = list(graph.nodes()) renumbering = {node: i for i, node in enumerate(graph.nodes())} renumbered_edges = [(renumbering[u], renumbering[v]) for (u, v) in graph.edges()] @@ -250,7 +250,7 @@ class _AbstractStimBackend(Backend[stim.TableauSimulator]): @override def add_nodes(self, nodes: Sequence[int], data: Data = BasicStates.PLUS) -> None: - state = BasicState.try_from_statevector(Statevec(data).psi) + state = BasicState.try_from_statevector(Statevector(data).psi) if state is None: msg = f"Incorrect state value: stim can only prepare stabiliser states {data}." @@ -372,7 +372,7 @@ def get_target(node: int) -> stim.GateTarget: if cmd.kind == CommandKind.N: basic_state_or_none = None if fixed_states is None else fixed_states.get(cmd.node) if basic_state_or_none is None: - basic_state_or_none = BasicState.try_from_statevector(Statevec(cmd.state).psi) + basic_state_or_none = BasicState.try_from_statevector(Statevector(cmd.state).psi) if basic_state_or_none is None: msg = f"Non-Pauli preparation: {cmd}" raise ValueError(msg) diff --git a/graphix_stim_backend/single_pauli_noise_model.py b/graphix_stim_backend/single_pauli_noise_model.py index 47bdcc2..75cb7b5 100644 --- a/graphix_stim_backend/single_pauli_noise_model.py +++ b/graphix_stim_backend/single_pauli_noise_model.py @@ -36,7 +36,7 @@ def nqubits(self) -> int: return 1 @override - def to_kraus_channel(self) -> KrausChannel: + def to_krauschannel(self) -> KrausChannel: if self.error_type == "Z": return KrausChannel([KrausData(self.prob, Ops.Z)]) diff --git a/requirements.txt b/requirements.txt index 54dbb11..4ca3ac9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -graphix @ git+https://github.com/TeamGraphix/graphix.git +graphix @ git+https://github.com/TeamGraphix/graphix.git@master stim>=1.15,<2 diff --git a/tests/test_graphix_stim_backend.py b/tests/test_graphix_stim_backend.py index b980e12..4e7c796 100644 --- a/tests/test_graphix_stim_backend.py +++ b/tests/test_graphix_stim_backend.py @@ -17,7 +17,7 @@ from graphix.random_objects import rand_circuit from graphix.sim.base_backend import DenseState, Matrix, outer from graphix.sim.density_matrix import DensityMatrix -from graphix.sim.statevec import Statevec +from graphix.sim.statevec import Statevector from graphix.simulator import DefaultMeasureMethod from graphix.states import BasicStates from numpy.random import PCG64, Generator @@ -41,17 +41,17 @@ def fidelity(u: Matrix, v: Matrix) -> float: def compare_backend_results(state1: DenseState, state2: DenseState) -> float: """Compute fidelity between two backend states.""" - if isinstance(state1, Statevec) and isinstance(state2, Statevec): + if isinstance(state1, Statevector) and isinstance(state2, Statevector): return fidelity(state1.flatten(), state2.flatten()) if isinstance(state1, DensityMatrix): dm1 = state1 - elif isinstance(state1, Statevec): + elif isinstance(state1, Statevector): dm1 = DensityMatrix(state1) else: raise NotImplementedError if isinstance(state2, DensityMatrix): dm2 = state2 - elif isinstance(state2, Statevec): + elif isinstance(state2, Statevector): dm2 = DensityMatrix(state2) else: raise NotImplementedError @@ -147,7 +147,7 @@ def simulate_with_noise_model_to_density_matrix(pattern: Pattern, noise_model: N pattern.simulate_pattern(backend=backend, noise_model=noise_model) second_pattern = backend.to_pattern([], pattern.output_nodes) state = second_pattern.simulate_pattern() - assert isinstance(state, Statevec) + assert isinstance(state, Statevector) return outer(state.psi, state.psi.conj())