Fix density matrix trace drift after measurement collapse#8171
Fix density matrix trace drift after measurement collapse#8171anshjaiswal12 wants to merge 6 commits into
Conversation
Post-measurement normalization by outcome probability can leave the density matrix with trace slightly off 1; reusing it as initial_state compounds the error. Renormalize by trace after collapse and add regression tests that check trace at each simulation step. Fixes quantumlib#5916
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
Pull post-measurement trace correction into _renormalize_density_matrix_trace, use np.isclose for the zero-trace guard, and deduplicate the quantumlibgh-5916 regression circuit in tests.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8171 +/- ##
=======================================
Coverage 99.60% 99.60%
=======================================
Files 1118 1118
Lines 101349 101411 +62
=======================================
+ Hits 100945 101007 +62
Misses 404 404 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Collapse _assert_density_matrix_trace_one signature to one line to satisfy the incremental format check on CI.
mhucka
left a comment
There was a problem hiding this comment.
Thank you for this work! Here are a few comments.
| def _renormalize_density_matrix_trace( | ||
| density_matrix: np.ndarray, qid_shape: tuple[int, ...] | ||
| ) -> None: | ||
| """Rescale ``density_matrix`` in-place so its trace is 1.""" |
There was a problem hiding this comment.
Single backquotes around symbols, not double.
| """Rescale ``density_matrix`` in-place so its trace is 1.""" | |
| """Rescale `density_matrix` in-place so its trace is 1.""" |
|
|
||
|
|
||
| def _gh5916_regression_circuit() -> cirq.Circuit: | ||
| """Circuit from gh-5916 that previously drifted trace under re-simulation.""" |
There was a problem hiding this comment.
In the Cirq project, we have generally refrained from using a shorthand like "gh-N" for referring to issues and PRs. Could you change this to provide an actual URL in the string? The function name also doesn't need gh5916 in it.
| q0, q1 = cirq.NamedQubit('q0'), cirq.NamedQubit('q1') | ||
| return cirq.Circuit(cirq.CNOT.on(q1, q0), cirq.H.on(q1), cirq.measure(q1)) |
There was a problem hiding this comment.
This compact code may seem efficient (and this was probably generated by an LLM, right?), but for human readers this is more difficult to interpret than necessary. Can you rewrite this to use simpler, one-per-line steps?
| q0, q1 = cirq.LineQubit.range(2) | ||
| circuit = cirq.Circuit(cirq.CNOT(q1, q0), cirq.H(q1), cirq.measure(q1)) |
There was a problem hiding this comment.
Same comment as above about readability and interpretability due to overly compact coding.
|
thank you, Michael! I really appreciate you taking the time to leave such detailed comments, this has been one of the most valuable reviews I've received because the feedback is specific and actionable. I'll go through each comment, make the necessary changes, and update the PR. thanks again for helping improve my contribution! |
|
Hi @mhucka , thanks again for the detailed review. I've addressed all the comments: Updated the docstring to use single backticks and "in place" (two words). |
Summary
After a measurement collapse,
measure_density_matrixdivides by the outcome probability. Floating-point error can leave the density matrix with trace slightly ≠ 1. Reusingfinal_density_matrixasinitial_statecompounds that drift (gh-5916).Renormalize by trace after collapse and add regression tests.
Fixes #5916
Tests
test_density_matrix_trace_after_each_moment_gh5916test_density_matrix_trace_stable_under_repeated_simulationtest_density_matrix_trace_stable_across_circuit_familiestest_density_matrix_trace_repeated_simulation_performance_smokeAI disclosure: Cursor IDE was used only to read/search the codebase and help debug the issue. All code in this PR was written and reviewed by me.