This issue is part of unitaryHACK 2026. You have to be registered to participate. Please read carefully the unitaryHack rules before submitting a PR for this issue.
A note about AI Slop: while we are open to collaboration with LLMs for unitaryHACK, fully AI-generated PRs are not acceptable. It is at the maintainers' discretion whether or not LLM-generated PRs are the right fit for the issues, and those that appear fully AI-generated may be immediately rejected. Please read carefully the AI policy if you are using LLMs for your work.
Context
An important aspect of simulating any quantum computation is incorporating potential decoherence of the quantum system due to interaction with the environment. In Graphix, we can do this by specifying a noise model when simulating a pattern with the densitymatrix backend. A noise channel is a completely positive, trace-preserving (CPTP) map. The density matrix backend thus represents noise channels using the Kraus operator formalism:
$$\Phi(\rho)=\sum_i K_i \rho K_i^\dagger$$
where $\rho$ is the density matrix of the quantum state and $\sum_i K_i^\dagger K_i = I$.
Noise models in Graphix, represented by the abstract class graphix.noise_models.noise_model.NoiseModel, essentially transpile patterns into noisy patterns by appending to each command an auxiliary command ApplyNoise. This new command specifies the noise channel to be applied by the backend, the node indices to apply it to, and the domain to be considered. An important feature of NoiseModel is that the noise channel can be tuned individually for each command in a pattern.
Currently, the only built-in noise model in Graphix is the DepolarisingNoiseModel defined in graphix.noise_models.depolarising. The goal of this issue is to define a new noise model, and all required supporting entities, to implement amplitude damping noise in a pattern simulation. The DepolarisingNoiseModel class should be used as a reference for this new model.
Tasks
- Define two new functions called
amplitude_damping_channel() and two_qubit_amplitude_damping_channel() that return a KrausChannel representing amplitude damping on a single-qubit and two-qubit state, respectively.
- Define two new classes
AmplitudeDampingNoise and TwoQubitAmplitudeDampingNoise that derive from the abstract class Noise.
- Define an
AmplitudeDampingNoiseModel class that derives from the abstract class NoiseModel.
- Define a set of tests to verify accurate application of amplitude damping noise to each step of a simple pattern (see
tests/test_noisy_density_matrix for reference). The soundness of these tests should be explained in the PR text.
Note
In order for the PR to be accepted:
- Graphix CI should be passing. This includes the test suite, typechecking (mypy and pyright), and linting (ruff).
- New functions and classes should be documented appropiately following numpy style.
- Unitary Hack's AI use guidelines should be respected.
- The contributor must engage in a constructive feedback loop with the maintainers.
This issue is part of unitaryHACK 2026. You have to be registered to participate. Please read carefully the unitaryHack rules before submitting a PR for this issue.
A note about AI Slop: while we are open to collaboration with LLMs for unitaryHACK, fully AI-generated PRs are not acceptable. It is at the maintainers' discretion whether or not LLM-generated PRs are the right fit for the issues, and those that appear fully AI-generated may be immediately rejected. Please read carefully the AI policy if you are using LLMs for your work.
Context
An important aspect of simulating any quantum computation is incorporating potential decoherence of the quantum system due to interaction with the environment. In Graphix, we can do this by specifying a noise model when simulating a pattern with the
densitymatrixbackend. A noise channel is a completely positive, trace-preserving (CPTP) map. The density matrix backend thus represents noise channels using the Kraus operator formalism:where$\rho$ is the density matrix of the quantum state and $\sum_i K_i^\dagger K_i = I$ .
Noise models in Graphix, represented by the abstract class
graphix.noise_models.noise_model.NoiseModel, essentially transpile patterns into noisy patterns by appending to each command an auxiliary commandApplyNoise. This new command specifies the noise channel to be applied by the backend, the node indices to apply it to, and the domain to be considered. An important feature ofNoiseModelis that the noise channel can be tuned individually for each command in a pattern.Currently, the only built-in noise model in Graphix is the
DepolarisingNoiseModeldefined ingraphix.noise_models.depolarising. The goal of this issue is to define a new noise model, and all required supporting entities, to implement amplitude damping noise in a pattern simulation. TheDepolarisingNoiseModelclass should be used as a reference for this new model.Tasks
amplitude_damping_channel()andtwo_qubit_amplitude_damping_channel()that return aKrausChannelrepresenting amplitude damping on a single-qubit and two-qubit state, respectively.AmplitudeDampingNoiseandTwoQubitAmplitudeDampingNoisethat derive from the abstract classNoise.AmplitudeDampingNoiseModelclass that derives from the abstract classNoiseModel.tests/test_noisy_density_matrixfor reference). The soundness of these tests should be explained in the PR text.Note
In order for the PR to be accepted: