quantum-debugger 0.7.1__tar.gz → 0.9.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. quantum_debugger-0.9.0/CHANGELOG.md +956 -0
  2. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/PKG-INFO +24 -24
  3. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/README.md +22 -22
  4. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/__init__.py +1 -1
  5. quantum_debugger-0.9.0/quantum_debugger/algorithms/__init__.py +465 -0
  6. quantum_debugger-0.9.0/quantum_debugger/algorithms/adiabatic.py +66 -0
  7. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/arithmetic.py +114 -6
  8. quantum_debugger-0.9.0/quantum_debugger/algorithms/channel_capacity.py +99 -0
  9. quantum_debugger-0.9.0/quantum_debugger/algorithms/classical_shadows.py +113 -0
  10. quantum_debugger-0.9.0/quantum_debugger/algorithms/cloning.py +68 -0
  11. quantum_debugger-0.9.0/quantum_debugger/algorithms/contextuality.py +146 -0
  12. quantum_debugger-0.9.0/quantum_debugger/algorithms/decoherence_free.py +97 -0
  13. quantum_debugger-0.9.0/quantum_debugger/algorithms/discrimination.py +105 -0
  14. quantum_debugger-0.9.0/quantum_debugger/algorithms/distillation.py +286 -0
  15. quantum_debugger-0.9.0/quantum_debugger/algorithms/dynamical_decoupling.py +106 -0
  16. quantum_debugger-0.9.0/quantum_debugger/algorithms/entanglement_growth.py +50 -0
  17. quantum_debugger-0.9.0/quantum_debugger/algorithms/entanglement_negativity.py +58 -0
  18. quantum_debugger-0.9.0/quantum_debugger/algorithms/error_detection.py +111 -0
  19. quantum_debugger-0.9.0/quantum_debugger/algorithms/geometric_phase.py +94 -0
  20. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/hamiltonian_simulation.py +75 -0
  21. quantum_debugger-0.9.0/quantum_debugger/algorithms/holevo.py +177 -0
  22. quantum_debugger-0.9.0/quantum_debugger/algorithms/hubbard.py +91 -0
  23. quantum_debugger-0.9.0/quantum_debugger/algorithms/imaginary_time.py +67 -0
  24. quantum_debugger-0.9.0/quantum_debugger/algorithms/jordan_wigner.py +101 -0
  25. quantum_debugger-0.9.0/quantum_debugger/algorithms/kitaev_chain.py +69 -0
  26. quantum_debugger-0.9.0/quantum_debugger/algorithms/krylov.py +79 -0
  27. quantum_debugger-0.9.0/quantum_debugger/algorithms/level_statistics.py +87 -0
  28. quantum_debugger-0.9.0/quantum_debugger/algorithms/loschmidt.py +72 -0
  29. quantum_debugger-0.9.0/quantum_debugger/algorithms/loss_robustness.py +56 -0
  30. quantum_debugger-0.9.0/quantum_debugger/algorithms/magic_measures.py +60 -0
  31. quantum_debugger-0.9.0/quantum_debugger/algorithms/magic_state.py +89 -0
  32. quantum_debugger-0.9.0/quantum_debugger/algorithms/many_body_correlations.py +99 -0
  33. quantum_debugger-0.9.0/quantum_debugger/algorithms/mbqc.py +116 -0
  34. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/metrology.py +26 -0
  35. quantum_debugger-0.9.0/quantum_debugger/algorithms/nonlocality.py +107 -0
  36. quantum_debugger-0.9.0/quantum_debugger/algorithms/otoc.py +92 -0
  37. quantum_debugger-0.9.0/quantum_debugger/algorithms/perfect_code.py +114 -0
  38. quantum_debugger-0.9.0/quantum_debugger/algorithms/petz.py +95 -0
  39. quantum_debugger-0.9.0/quantum_debugger/algorithms/qec_noise.py +261 -0
  40. quantum_debugger-0.9.0/quantum_debugger/algorithms/quantum_phase_transition.py +62 -0
  41. quantum_debugger-0.9.0/quantum_debugger/algorithms/schmidt.py +83 -0
  42. quantum_debugger-0.9.0/quantum_debugger/algorithms/spin_squeezing.py +100 -0
  43. quantum_debugger-0.9.0/quantum_debugger/algorithms/ssh_model.py +71 -0
  44. quantum_debugger-0.9.0/quantum_debugger/algorithms/steane_code.py +286 -0
  45. quantum_debugger-0.9.0/quantum_debugger/algorithms/thermal.py +67 -0
  46. quantum_debugger-0.9.0/quantum_debugger/algorithms/uncertainty.py +82 -0
  47. quantum_debugger-0.9.0/quantum_debugger/algorithms/weak_values.py +90 -0
  48. quantum_debugger-0.9.0/quantum_debugger/algorithms/zeno.py +105 -0
  49. quantum_debugger-0.9.0/quantum_debugger/density_matrix.py +641 -0
  50. quantum_debugger-0.9.0/quantum_debugger/stabilizer.py +336 -0
  51. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger.egg-info/PKG-INFO +24 -24
  52. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger.egg-info/SOURCES.txt +81 -0
  53. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/setup.py +1 -1
  54. quantum_debugger-0.9.0/tests/test_adiabatic.py +61 -0
  55. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_arithmetic.py +31 -0
  56. quantum_debugger-0.9.0/tests/test_channel_capacity.py +74 -0
  57. quantum_debugger-0.9.0/tests/test_classical_shadows.py +72 -0
  58. quantum_debugger-0.9.0/tests/test_cloning.py +43 -0
  59. quantum_debugger-0.9.0/tests/test_contextuality.py +74 -0
  60. quantum_debugger-0.9.0/tests/test_decoherence_free.py +67 -0
  61. quantum_debugger-0.9.0/tests/test_density_matrix.py +631 -0
  62. quantum_debugger-0.9.0/tests/test_discrimination.py +88 -0
  63. quantum_debugger-0.9.0/tests/test_distillation.py +221 -0
  64. quantum_debugger-0.9.0/tests/test_dynamical_decoupling.py +53 -0
  65. quantum_debugger-0.9.0/tests/test_entanglement_growth.py +75 -0
  66. quantum_debugger-0.9.0/tests/test_error_detection.py +76 -0
  67. quantum_debugger-0.9.0/tests/test_geometric_phase.py +76 -0
  68. quantum_debugger-0.9.0/tests/test_holevo.py +123 -0
  69. quantum_debugger-0.9.0/tests/test_hubbard.py +71 -0
  70. quantum_debugger-0.9.0/tests/test_imaginary_time.py +75 -0
  71. quantum_debugger-0.9.0/tests/test_jordan_wigner.py +89 -0
  72. quantum_debugger-0.9.0/tests/test_kitaev_chain.py +62 -0
  73. quantum_debugger-0.9.0/tests/test_krylov.py +74 -0
  74. quantum_debugger-0.9.0/tests/test_level_statistics.py +69 -0
  75. quantum_debugger-0.9.0/tests/test_loschmidt.py +87 -0
  76. quantum_debugger-0.9.0/tests/test_loss_robustness.py +40 -0
  77. quantum_debugger-0.9.0/tests/test_magic_measures.py +71 -0
  78. quantum_debugger-0.9.0/tests/test_magic_state.py +66 -0
  79. quantum_debugger-0.9.0/tests/test_many_body_extra.py +130 -0
  80. quantum_debugger-0.9.0/tests/test_mbqc.py +87 -0
  81. quantum_debugger-0.9.0/tests/test_metrology.py +107 -0
  82. quantum_debugger-0.9.0/tests/test_nonlocality.py +70 -0
  83. quantum_debugger-0.9.0/tests/test_otoc.py +77 -0
  84. quantum_debugger-0.9.0/tests/test_pauli_decompose.py +68 -0
  85. quantum_debugger-0.9.0/tests/test_perfect_code.py +52 -0
  86. quantum_debugger-0.9.0/tests/test_petz.py +97 -0
  87. quantum_debugger-0.9.0/tests/test_qec_noise.py +137 -0
  88. quantum_debugger-0.9.0/tests/test_schmidt.py +83 -0
  89. quantum_debugger-0.9.0/tests/test_spin_squeezing.py +44 -0
  90. quantum_debugger-0.9.0/tests/test_stabilizer.py +292 -0
  91. quantum_debugger-0.9.0/tests/test_steane_code.py +168 -0
  92. quantum_debugger-0.9.0/tests/test_thermal.py +73 -0
  93. quantum_debugger-0.9.0/tests/test_trotter_scaling.py +53 -0
  94. quantum_debugger-0.9.0/tests/test_uncertainty.py +76 -0
  95. quantum_debugger-0.9.0/tests/test_weak_values.py +76 -0
  96. quantum_debugger-0.9.0/tests/test_zeno.py +59 -0
  97. quantum_debugger-0.7.1/CHANGELOG.md +0 -402
  98. quantum_debugger-0.7.1/quantum_debugger/algorithms/__init__.py +0 -196
  99. quantum_debugger-0.7.1/quantum_debugger/stabilizer.py +0 -178
  100. quantum_debugger-0.7.1/tests/test_metrology.py +0 -49
  101. quantum_debugger-0.7.1/tests/test_stabilizer.py +0 -100
  102. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/AUTHORS.md +0 -0
  103. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/LICENSE +0 -0
  104. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/MANIFEST.in +0 -0
  105. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/examples/bell_state_debug.py +0 -0
  106. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/examples/benchmarks.py +0 -0
  107. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/examples/grover_profiling.py +0 -0
  108. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/examples/interactive_demo.py +0 -0
  109. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/examples/qaoa_maxcut_example.py +0 -0
  110. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/examples/qiskit_integration_demo.py +0 -0
  111. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/examples/qml_basic_example.py +0 -0
  112. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/examples/vqe_h2_example.py +0 -0
  113. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/amplitude_amplification.py +0 -0
  114. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/amplitude_estimation.py +0 -0
  115. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/bb84.py +0 -0
  116. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/bell_test.py +0 -0
  117. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/decomposition.py +0 -0
  118. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/error_correction.py +0 -0
  119. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/grover.py +0 -0
  120. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/grover_optimize.py +0 -0
  121. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/hhl.py +0 -0
  122. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/maxcut.py +0 -0
  123. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/multicontrol.py +0 -0
  124. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/oracles.py +0 -0
  125. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/phase_estimation.py +0 -0
  126. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/protocols.py +0 -0
  127. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/qec_threshold.py +0 -0
  128. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/qft.py +0 -0
  129. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/quantum_counting.py +0 -0
  130. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/quantum_walk.py +0 -0
  131. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/randomized_benchmarking.py +0 -0
  132. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/sat_solver.py +0 -0
  133. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/shor.py +0 -0
  134. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/simon.py +0 -0
  135. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/spectroscopy.py +0 -0
  136. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/state_preparation.py +0 -0
  137. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/swap_test.py +0 -0
  138. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/algorithms/vqe_solver.py +0 -0
  139. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/backends/__init__.py +0 -0
  140. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/backends/_cuda_dll.py +0 -0
  141. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/backends/aws_backend.py +0 -0
  142. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/backends/base.py +0 -0
  143. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/backends/base_backend.py +0 -0
  144. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/backends/cupy_backend.py +0 -0
  145. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/backends/gpu_backend.py +0 -0
  146. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/backends/ibm_backend.py +0 -0
  147. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/backends/numba_backend.py +0 -0
  148. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/backends/numpy_backend.py +0 -0
  149. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/backends/sparse_backend.py +0 -0
  150. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/benchmarks/__init__.py +0 -0
  151. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/benchmarks/optimization_benchmarks.py +0 -0
  152. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/benchmarks/qml_benchmarks.py +0 -0
  153. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/benchmarks/report_generator.py +0 -0
  154. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/benchmarks/scalability_benchmarks.py +0 -0
  155. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/core/__init__.py +0 -0
  156. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/core/circuit.py +0 -0
  157. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/core/gates.py +0 -0
  158. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/core/quantum_state.py +0 -0
  159. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/debugger/__init__.py +0 -0
  160. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/debugger/breakpoints.py +0 -0
  161. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/debugger/debugger.py +0 -0
  162. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/debugger/inspector.py +0 -0
  163. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/gpu/__init__.py +0 -0
  164. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/gpu/memory.py +0 -0
  165. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/gpu/mixed_precision.py +0 -0
  166. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/gpu/multi_gpu.py +0 -0
  167. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/integrations/__init__.py +0 -0
  168. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/integrations/cirq_adapter.py +0 -0
  169. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/integrations/cirq_bridge.py +0 -0
  170. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/integrations/pennylane_bridge.py +0 -0
  171. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/integrations/qiskit_adapter.py +0 -0
  172. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/integrations/qiskit_bridge.py +0 -0
  173. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/mitigation/__init__.py +0 -0
  174. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/mitigation/core/__init__.py +0 -0
  175. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/mitigation/core/extrapolator.py +0 -0
  176. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/mitigation/core/folder.py +0 -0
  177. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/mitigation/zne.py +0 -0
  178. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/noise/__init__.py +0 -0
  179. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/noise/composite_noise.py +0 -0
  180. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/noise/hardware_profiles.py +0 -0
  181. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/noise/noise_helpers.py +0 -0
  182. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/noise/noise_models.py +0 -0
  183. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/noise/stochastic_sampler.py +0 -0
  184. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/optimization/__init__.py +0 -0
  185. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/optimization/circuit_compiler.py +0 -0
  186. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/optimization/gate_reduction.py +0 -0
  187. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/optimization/optimization_passes.py +0 -0
  188. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/optimization/transpiler.py +0 -0
  189. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/parallel/__init__.py +0 -0
  190. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/parallel/executor.py +0 -0
  191. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/profiler/__init__.py +0 -0
  192. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/profiler/metrics.py +0 -0
  193. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/profiler/profiler.py +0 -0
  194. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/__init__.py +0 -0
  195. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/advanced/__init__.py +0 -0
  196. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/advanced/ansatz_analysis.py +0 -0
  197. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/advanced/autoencoder.py +0 -0
  198. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/advanced/data_reuploading.py +0 -0
  199. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/advanced/qcnn.py +0 -0
  200. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/advanced/vqc.py +0 -0
  201. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/algorithms/__init__.py +0 -0
  202. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/algorithms/actor_critic.py +0 -0
  203. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/algorithms/dqn.py +0 -0
  204. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/algorithms/policy_gradient.py +0 -0
  205. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/algorithms/qaoa.py +0 -0
  206. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/algorithms/qgan.py +0 -0
  207. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/algorithms/qrl.py +0 -0
  208. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/algorithms/vqd.py +0 -0
  209. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/algorithms/vqe.py +0 -0
  210. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/ansatz/__init__.py +0 -0
  211. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/ansatz/excitation_preserving.py +0 -0
  212. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/ansatz/real_amplitudes.py +0 -0
  213. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/ansatz/strongly_entangling.py +0 -0
  214. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/ansatz/two_local.py +0 -0
  215. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/automl/__init__.py +0 -0
  216. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/automl/ansatz_selector.py +0 -0
  217. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/automl/architecture_search.py +0 -0
  218. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/automl/auto_qnn.py +0 -0
  219. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/automl/hyperparameter_tuner.py +0 -0
  220. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/data/__init__.py +0 -0
  221. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/data/dataset.py +0 -0
  222. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/data/feature_maps.py +0 -0
  223. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/error_mitigation/__init__.py +0 -0
  224. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/error_mitigation/zne.py +0 -0
  225. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/gates/__init__.py +0 -0
  226. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/gates/parameterized.py +0 -0
  227. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/hamiltonians/__init__.py +0 -0
  228. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/hamiltonians/molecular.py +0 -0
  229. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/hybrid/__init__.py +0 -0
  230. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/hybrid/layers.py +0 -0
  231. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/hybrid/pytorch_integration.py +0 -0
  232. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/hybrid/tensorflow_integration.py +0 -0
  233. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/kernels/__init__.py +0 -0
  234. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/kernels/alignment.py +0 -0
  235. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/kernels/qsvm.py +0 -0
  236. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/kernels/quantum_kernel.py +0 -0
  237. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/mitigation/__init__.py +0 -0
  238. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/mitigation/cdr.py +0 -0
  239. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/mitigation/error_characterization.py +0 -0
  240. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/mitigation/noise_models.py +0 -0
  241. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/mitigation/pec.py +0 -0
  242. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/optimizers/__init__.py +0 -0
  243. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/optimizers/advanced.py +0 -0
  244. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/optimizers/basics.py +0 -0
  245. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/optimizers/spsa.py +0 -0
  246. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/qnn/__init__.py +0 -0
  247. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/qnn/base.py +0 -0
  248. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/qnn/encoding.py +0 -0
  249. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/qnn/losses.py +0 -0
  250. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/qnn/network.py +0 -0
  251. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/qnn/variational.py +0 -0
  252. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/training/__init__.py +0 -0
  253. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/transfer/__init__.py +0 -0
  254. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/transfer/fine_tuning.py +0 -0
  255. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/transfer/model_zoo.py +0 -0
  256. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/transfer/pretrained.py +0 -0
  257. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/transfer/serialization.py +0 -0
  258. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/utils/__init__.py +0 -0
  259. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/qml/utils/gradients.py +0 -0
  260. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/tomography.py +0 -0
  261. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/visualization/__init__.py +0 -0
  262. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/visualization/bloch_sphere.py +0 -0
  263. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger/visualization/state_viz.py +0 -0
  264. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger.egg-info/dependency_links.txt +0 -0
  265. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger.egg-info/requires.txt +0 -0
  266. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/quantum_debugger.egg-info/top_level.txt +0 -0
  267. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/requirements.txt +0 -0
  268. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/setup.cfg +0 -0
  269. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/__init__.py +0 -0
  270. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/cirq/__init__.py +0 -0
  271. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/cirq/test_cirq_advanced.py +0 -0
  272. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/cirq/test_cirq_edge_cases.py +0 -0
  273. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/cirq/test_cirq_integration.py +0 -0
  274. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/conftest.py +0 -0
  275. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/integration/__init__.py +0 -0
  276. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/integration/test_integration.py +0 -0
  277. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/integration/test_qiskit_integration.py +0 -0
  278. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/__init__.py +0 -0
  279. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_actor_critic.py +0 -0
  280. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_advanced_algorithms.py +0 -0
  281. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_advanced_optimizers.py +0 -0
  282. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_advanced_qml.py +0 -0
  283. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_ansatz_library.py +0 -0
  284. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_automl.py +0 -0
  285. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_dataset.py +0 -0
  286. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_dqn.py +0 -0
  287. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_edge_cases.py +0 -0
  288. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_hamiltonians.py +0 -0
  289. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_hybrid.py +0 -0
  290. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_kernels.py +0 -0
  291. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_mitigation.py +0 -0
  292. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_policy_gradient.py +0 -0
  293. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_qaoa.py +0 -0
  294. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_qml_parameterized_gates.py +0 -0
  295. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_qnn.py +0 -0
  296. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_spsa.py +0 -0
  297. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_transfer.py +0 -0
  298. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_transfer_extended.py +0 -0
  299. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_vqd.py +0 -0
  300. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_vqe.py +0 -0
  301. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/qml/test_zne.py +0 -0
  302. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_algorithms.py +0 -0
  303. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_backends.py +0 -0
  304. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_bb84.py +0 -0
  305. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_bell_test.py +0 -0
  306. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_benchmarks.py +0 -0
  307. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_decomposition.py +0 -0
  308. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_error_correction.py +0 -0
  309. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_grover_optimize.py +0 -0
  310. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_hamiltonian_simulation.py +0 -0
  311. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_integrations.py +0 -0
  312. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_maxcut.py +0 -0
  313. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_multicontrol.py +0 -0
  314. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_optimization.py +0 -0
  315. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_protocols_shor.py +0 -0
  316. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_qec_threshold.py +0 -0
  317. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_randomized_benchmarking.py +0 -0
  318. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_sat_solver.py +0 -0
  319. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_simon.py +0 -0
  320. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_spectroscopy.py +0 -0
  321. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_state_preparation.py +0 -0
  322. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_tomography.py +0 -0
  323. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/test_vqe_solver.py +0 -0
  324. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/CONVERSION_TRACKER.py +0 -0
  325. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/__init__.py +0 -0
  326. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_advanced.py +0 -0
  327. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_backend_comprehensive.py +0 -0
  328. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_backend_integration.py +0 -0
  329. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_backends.py +0 -0
  330. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_backends_advanced.py +0 -0
  331. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_backends_comprehensive.py +0 -0
  332. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_backends_fast.py +0 -0
  333. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_circuit_noise.py +0 -0
  334. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_circuit_noise_advanced.py +0 -0
  335. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_circuit_noise_unique.py +0 -0
  336. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_compatibility.py +0 -0
  337. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_comprehensive.py +0 -0
  338. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_distribution.py +0 -0
  339. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_docstrings.py +0 -0
  340. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_error_handling.py +0 -0
  341. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_extreme.py +0 -0
  342. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_gpu_quick.py +0 -0
  343. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_hardware_profiles_extended.py +0 -0
  344. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_hardware_profiles_phase3.py +0 -0
  345. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_mitigation_comprehensive.py +0 -0
  346. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_mitigation_final.py +0 -0
  347. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_mitigation_observables.py +0 -0
  348. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_mitigation_zne.py +0 -0
  349. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_noise.py +0 -0
  350. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_noise_advanced.py +0 -0
  351. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_noise_extreme.py +0 -0
  352. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_noise_final.py +0 -0
  353. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_noise_performance.py +0 -0
  354. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_noise_quantum_info.py +0 -0
  355. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_noise_ultimate.py +0 -0
  356. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_parallel.py +0 -0
  357. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_performance.py +0 -0
  358. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_production.py +0 -0
  359. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_qiskit_complex.py +0 -0
  360. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_qiskit_extreme.py +0 -0
  361. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_qiskit_ultra.py +0 -0
  362. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_qml_advanced.py +0 -0
  363. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_qml_comprehensive.py +0 -0
  364. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_qml_memory.py +0 -0
  365. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_qml_threading.py +0 -0
  366. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_qml_tricky.py +0 -0
  367. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_quickstart.py +0 -0
  368. {quantum_debugger-0.7.1 → quantum_debugger-0.9.0}/tests/unit/test_validation.py +0 -0
@@ -0,0 +1,956 @@
1
+ # Changelog
2
+
3
+ All notable changes to QuantumDebugger will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.9.0]
9
+
10
+ Theme: quantum chemistry, many-body physics & advanced simulation. Fermionic systems
11
+ (Jordan-Wigner, Fermi-Hubbard, the Kitaev topological chain), ground- and
12
+ excited-state solvers (chemistry-via-VQE with Pauli decomposition, imaginary-time
13
+ cooling, Krylov/Lanczos, adiabatic evolution), finite-temperature physics (Gibbs
14
+ states & thermodynamics), quantum dynamics (Trotter error scaling, Loschmidt echo &
15
+ DQPTs, out-of-time-order correlators, entanglement growth), quantum chaos (level-
16
+ spacing statistics), metrology (spin squeezing, mixed-state QFI), and the modern
17
+ measurement/tensor-network toolkit (classical shadows, Schmidt decomposition & the
18
+ area law). Every routine verified against a closed form or an independent
19
+ computation. (Open systems, noise, and fault tolerance landed in 0.8.0.)
20
+
21
+ ### Added
22
+ - **SSH topological insulator** (`algorithms.ssh_hamiltonian`) — the Su-Schrieffer-Heeger
23
+ chain with alternating hoppings `v, w`, the textbook 1D topological insulator; the
24
+ single-particle Hamiltonian is exactly diagonalized and verified to have a
25
+ chiral-symmetric spectrum.
26
+ - **SSH winding number** (`algorithms.ssh_winding_number`) — the bulk `Z` invariant of the
27
+ chiral class BDI: `1` (topological) when `|w| > |v|`, `0` (trivial) otherwise.
28
+ - **SSH edge modes** (`algorithms.ssh_zero_modes`, `ssh_edge_polarization`) — the
29
+ bulk-boundary correspondence made concrete: `2` protected zero-energy modes localized on
30
+ the ends in the topological phase, `0` in the trivial phase, verified against the exact
31
+ spectrum and eigenvectors.
32
+ - **Ground-state fidelity** (`algorithms.ground_state_fidelity`) — the overlap
33
+ `|<psi(lambda)|psi(lambda+dlambda)>|` between neighbouring ground states, near 1 inside a
34
+ phase and dipping sharply at a quantum phase transition.
35
+ - **Fidelity susceptibility** (`algorithms.fidelity_susceptibility`, `tfim_critical_field`)
36
+ — the intensive response `chi_F = 2(1-F)/dlambda^2` that peaks at a critical point;
37
+ verified to locate the transverse-field Ising transition, its finite-size peak drifting
38
+ toward the exact `h_c = 1` as the system grows.
39
+ - **Connected correlation functions** (`algorithms.connected_correlation`) —
40
+ `<O_i O_j> - <O_i><O_j>`, the probe of correlations beyond mean field; verified `1` on a
41
+ GHZ state and `0` on a product state.
42
+ - **Correlation length** (`algorithms.correlation_length`) — `xi` from the exponential
43
+ decay of the connected correlator; verified `0` for a product state and growing toward
44
+ criticality for the TFIM ground state.
45
+ - **Static structure factor** (`algorithms.structure_factor`) — `S(k)` from the spatial
46
+ correlations, the Fourier probe of order; verified to Bragg-peak at `k=0` for a
47
+ ferromagnet and `k=pi` for an antiferromagnet.
48
+ - **Entanglement negativity** (`algorithms.negativity`, `logarithmic_negativity`) — the
49
+ computable mixed-state entanglement measure from the partial transpose; verified
50
+ `E_N = 1` for a Bell pair, `0` for a product state.
51
+ - **Peres-Horodecki (PPT) criterion** (`algorithms.partial_transpose`, `is_entangled_ppt`)
52
+ — the partial transpose and its negative-eigenvalue entanglement witness; verified to
53
+ reproduce the Werner-state entanglement threshold `p > 1/3`.
54
+ - **Schmidt decomposition & the area law** (`algorithms.schmidt_decomposition`,
55
+ `truncation_fidelity`, `area_law_compressibility`) — the tensor-network bridge:
56
+ write any bipartite pure state as `sum lambda_i |i>_A|i>_B` via SVD. Verified that a
57
+ Bell pair gives two equal Schmidt values (1 bit), a product state rank 1, the values
58
+ are normalized and descending, and the Schmidt entropy matches the density-matrix
59
+ entanglement entropy exactly. The headline result: a gapped 1D ground state (TFIM)
60
+ keeps > 99% of its weight in a handful of Schmidt values (area law → compressible to
61
+ a low-bond-dimension MPS), while a random volume-law state has a flat spectrum that
62
+ refuses to compress — exactly why matrix product states work.
63
+ - **Classical shadows** (`algorithms.collect_shadows`, `estimate_observable`,
64
+ `shadow_estimates`) — estimate many observables from few measurements
65
+ (Huang-Kueng-Preskill): measure each qubit in a random Pauli basis, build the
66
+ unbiased single-shot snapshot `prod_q (3|b_q><b_q| - I)`, and read off `<O> =
67
+ Tr(O rho_hat)` for *any* observable from the *same* dataset. Verified: Bell-pair
68
+ correlators (`<XX>=1`, `<YY>=-1`, `<ZZ>=1`, `<ZI>=0`) all recovered from one
69
+ collection, the error shrinks with shot count, `<I...I>=1` exactly per snapshot, and
70
+ a shadow set is reusable across observables — the cost set by observable locality,
71
+ not Hilbert-space dimension.
72
+ - **Spin squeezing (one-axis twisting)** (`algorithms.one_axis_twisting`,
73
+ `best_squeezing`) — metrologically useful entanglement that beats the standard
74
+ quantum limit. Evolving a coherent spin state under `H = chi J_z^2` (Kitagawa-Ueda)
75
+ redistributes the transverse noise; the Wineland parameter `xi^2 = N min Var(J_perp)
76
+ / |<J>|^2` (minimum variance computed in closed form from the 2x2 covariance matrix)
77
+ drops below 1. Verified: `xi^2 = 1` exactly at zero twisting (the SQL), squeezing
78
+ reaches -2.9 to -4.5 dB, improves with atom number, and `1/xi^2` gives the
79
+ phase-sensitivity gain — the interferometric payoff of the entanglement.
80
+ - **Kitaev chain (topological superconductor)** (`algorithms.kitaev_chain_hamiltonian`,
81
+ `kitaev_ground_degeneracy`) — the simplest model with Majorana edge modes, built on
82
+ the Jordan-Wigner operators: `-mu sum n_j - t sum hopping + Delta sum pairing`.
83
+ Verified the topological hallmarks — for `|mu| < 2t` the ground state is doubly
84
+ degenerate (splitting < 1e-9 at `mu = 0`) with the bulk gap staying open, while for
85
+ `|mu| > 2t` it is unique and gapped; the topological flag flips exactly at the
86
+ `|mu| = 2t` transition; fermion parity is conserved; and the ground-state splitting
87
+ decays *exponentially* with chain length (halving per site) — the localization of
88
+ the two Majorana modes at the chain ends, the nonlocal storage behind topological
89
+ qubits.
90
+ - **Level-spacing statistics (quantum chaos)** (`algorithms.level_spacing_ratio`,
91
+ `goe_reference`, `poisson_reference`, `classify_spectrum`) — the symmetry-free
92
+ Oganesyan-Huse gap-ratio `<r>` that distinguishes integrable from chaotic spectra
93
+ without unfolding. Validated against both defining ensembles: Gaussian Orthogonal
94
+ Ensemble spectra give `<r> ~ 0.531` (Wigner-Dyson level repulsion) and uncorrelated
95
+ Poisson spectra give `~ 0.386`, with a rigid equally-spaced spectrum giving exactly
96
+ 1. `classify_spectrum` labels a spectrum against these universal values.
97
+ Honestly documented: physical Hamiltonians only show the clean values within a
98
+ single symmetry sector (mixed sectors bias toward Poisson).
99
+ - **Entanglement growth after a quench** (`algorithms.entanglement_growth`) — how
100
+ isolated systems thermalize: start in a product state, evolve under an entangling
101
+ Hamiltonian, and watch a subregion's entanglement entropy grow and saturate near
102
+ the volume-law value. Verified against the analytic two-qubit case (an `X x X`
103
+ quench of `|00>` gives exactly the binary entropy `h(sin^2(gt))`, reaching 1 bit at
104
+ a quarter period), and for larger TFIM/Heisenberg quenches the entropy starts at 0,
105
+ grows, saturates below its `min(|A|, n-|A|)` bound, and stays static for an energy
106
+ eigenstate.
107
+ - **Out-of-time-order correlators (scrambling)** (`algorithms.otoc`,
108
+ `scrambling_time`) — the butterfly effect of quantum chaos: the growth of
109
+ `C(t) = <|[W(t), V]|^2>` as a local operator spreads across the lattice. Verified
110
+ the exact structure — `C(0) = 0` for spatially-separated operators (they commute),
111
+ `C(0) = 4` for anticommuting same-site operators, `C(t) >= 0` always, and the exact
112
+ identity `C(t) = 2(1 - Re F(t))` with the OTOC `F(0) = 1`. `scrambling_time` tracks
113
+ a perturbation from one edge to the other and finds when it arrives — the far qubit
114
+ lagging the near one, the operator light cone made quantitative.
115
+ - **Loschmidt echo & dynamical quantum phase transitions**
116
+ (`algorithms.loschmidt_echo`, `rate_function`, `quench_dynamics`) — quench a state
117
+ under a Hamiltonian and track `L(t) = |<psi_0|e^{-iHt}|psi_0>|^2` and its rate
118
+ function `-ln L / N`, whose non-analytic cusps mark DQPTs. Verified: an eigenstate
119
+ never dephases (`L = 1`), a two-level superposition reproduces the analytic
120
+ `1 - sin^2(2θ) sin^2(Δt/2)` exactly, the rate function peaks precisely where the
121
+ echo dips, and at `θ = π/4` the echo hits zero — a genuine dynamical phase
122
+ transition where the evolved state becomes orthogonal to the start.
123
+ - **Krylov subspace diagonalization (Lanczos)** (`algorithms.krylov_spectrum`,
124
+ `krylov_ground_energy`) — build a small subspace `span{|psi>, H|psi>, ...,
125
+ H^{m-1}|psi>}` and diagonalize `H` inside it. The Ritz values converge to the exact
126
+ extreme eigenvalues — ground energy to machine precision by `m = 8` on TFIM
127
+ (Fermi-Hubbard, Heisenberg too), and, unlike imaginary-time evolution, the lowest
128
+ Ritz values recover the low-lying *excited* states as well. Solved through a
129
+ thresholded generalized eigenproblem for stability against the near-parallel Krylov
130
+ vectors; Ritz values are provably bracketed by the exact spectrum.
131
+ - **Adiabatic quantum computation** (`algorithms.adiabatic_evolution`) — the
132
+ alternative computing paradigm: start in the easy ground state of a driver
133
+ Hamiltonian and slowly interpolate `H(s) = (1-s)H_i + s H_f` to the problem
134
+ Hamiltonian, ending in *its* ground state. Verified across both regimes of the
135
+ adiabatic theorem: a slow sweep (T=50) reaches the target ground state at fidelity
136
+ > 0.99, a fast one (T=0.5) is left excited at < 0.5 (diabatic transition), fidelity
137
+ is monotone in the total time, and the minimum spectral gap along the path is
138
+ tracked — the quantity that sets how slow "slow enough" must be.
139
+ - **Trotter error scaling** (`algorithms.trotter_unitary`,
140
+ `trotter_error_scaling`) — assemble the full Trotterized evolution operator and
141
+ measure how its error `|| U_trotter - exp(-iHt) ||` shrinks with the step count.
142
+ Verified against the theoretical rates: the first-order formula converges as
143
+ `~ t^2/n` (measured log-log slope -1.03) and the symmetric second-order Suzuki
144
+ formula as `~ t^3/n^2` (slope -2.02) on TFIM and Heisenberg Hamiltonians, with
145
+ second order strictly beating first at fixed step count — quantifying the accuracy
146
+ of Hamiltonian-simulation circuits.
147
+ - **Imaginary-time evolution** (`algorithms.imaginary_time_evolution`) — cool any
148
+ state to a Hamiltonian's ground state via normalized `e^{-tau H}`, the engine
149
+ behind QITE and projector Monte Carlo — no optimizer, no local minima. Verified to
150
+ converge to the exact ground energy (Fermi-Hubbard, TFIM, Heisenberg) with the
151
+ energy decreasing monotonically and the converged state a true ground eigenstate.
152
+ Honestly bounded: because the ground component decays slowest, even a start made
153
+ orthogonal to the ground state still cools *to* it (its ~1e-16 residual overlap is
154
+ re-amplified) — so plain ITE targets the ground state, never an excited level.
155
+ - **Gibbs states & quantum thermodynamics** (`algorithms.gibbs_state`,
156
+ `partition_function`, `thermal_properties`) — finite-temperature physics of any
157
+ Hamiltonian: `rho(beta) = e^{-beta H}/Z` and its thermodynamic potentials. Verified
158
+ the full set of identities — `beta -> 0` gives the maximally mixed `I/d` (entropy
159
+ `ln d`), `beta -> infinity` projects onto the ground state (entropy 0), the
160
+ Helmholtz free energy satisfies `F = -ln Z / beta = E - S/beta` exactly, entropy is
161
+ monotone in temperature, heat capacity is non-negative, and a single spin
162
+ reproduces the analytic `<H> = -tanh(beta)`, `Z = 2 cosh(beta)`. Applied to the
163
+ Fermi-Hubbard Hamiltonian, this gives its thermal state directly.
164
+ - **Pauli decomposition + chemistry-via-VQE**
165
+ (`algorithms.pauli_decompose`) — decompose any Hermitian matrix into weighted
166
+ Pauli strings (`c_P = Tr(P H)/2^n`), the step that turns a dense molecular or
167
+ Fermi-Hubbard Hamiltonian into something a gate-based algorithm can run. Verified
168
+ to round-trip random Hermitian operators exactly and to preserve the full
169
+ spectrum; feeding the decomposed Fermi-Hubbard dimer (and a hopping chain) to the
170
+ existing VQE solver recovers the exact ground energy to ~1e-11 — the complete
171
+ fermion → qubit → variational-ground-state pipeline.
172
+ - **Fermi-Hubbard model** (`algorithms.fermi_hubbard_hamiltonian`,
173
+ `hubbard_ground_energy`, `hubbard_dimer_energy`) — interacting electrons on a
174
+ lattice, built on the Jordan-Wigner operators: hopping `t` vs on-site repulsion
175
+ `U`, two spin-orbitals per site. Verified: the Hamiltonian conserves total and
176
+ per-spin particle number, and the exactly-solvable half-filled two-site dimer
177
+ reproduces the analytic ground energy `(U - sqrt(U^2 + 16t^2))/2` at every `U`,
178
+ interpolating from the non-interacting `-2t` (`U = 0`) to the Heisenberg
179
+ antiferromagnet `-4t^2/U` (large `U`) — the Mott physics in miniature.
180
+ - **Jordan-Wigner transformation** (`algorithms.jw_annihilation`, `jw_creation`,
181
+ `jw_number`, `jw_total_number`, `hopping_hamiltonian`, `anticommutation_error`) —
182
+ the bridge from fermions to qubits that makes quantum chemistry simulable. Mode
183
+ `j` maps to `(prod_{k<j} Z_k) sigma_j^-`; verified that the operators satisfy the
184
+ fermionic algebra `{a_i, a_j} = 0`, `{a_i, a_j^dagger} = delta_ij` exactly, that
185
+ number operators are {0,1} projectors, that `(a^dagger)^2 = 0` (Pauli exclusion),
186
+ and that the tight-binding hopping Hamiltonian reproduces the exact band
187
+ `-2t cos(k)` (open chain and ring) while conserving particle number.
188
+
189
+ ## [0.8.0]
190
+
191
+ Theme: a comprehensive quantum-information-theory layer on the two simulation
192
+ engines — open systems & noise (Lindblad, channel metrics, Stinespring dilation,
193
+ process tomography), fault tolerance & QEC ([[5,1,3]], Steane [[7,1,3]] with
194
+ transversal gates, [[4,2,2]], magic-state injection, Petz recovery), quantum
195
+ networking (BBPSSW/DEJMPS distillation, noisy swapping, repeater chains),
196
+ noise-protection without QEC (DFS, spin echo, Zeno), and foundational measures
197
+ (negativity, concurrence, discord, mutual information, Horodecki nonlocality,
198
+ contextuality, geometric phase, uncertainty relations, weak values, Holevo,
199
+ channel capacity, state discrimination, no-cloning, magic, MBQC). Every routine
200
+ verified against a closed form or an independent computation.
201
+
202
+ ### Added
203
+ - **Petz recovery map (approximate QEC)** (`algorithms.petz_recovery`,
204
+ `petz_code_recovery`) — the canonical "best-effort" recovery for noise that has no
205
+ perfect correction: `R_sigma(rho) = sigma^{1/2} N^dagger(N(sigma)^{-1/2} rho
206
+ N(sigma)^{-1/2}) sigma^{1/2}`. Verified on three fronts: it recovers *correctable*
207
+ errors perfectly (bit-flip errors on the 3-qubit code, fidelity 1.0 from 0.75 —
208
+ reproducing the syndrome decoder); it gives genuine *approximate* recovery for
209
+ uncorrectable amplitude damping (0.82 → 0.93, degrading with damping strength);
210
+ and it satisfies the defining identity `R_sigma(N(sigma)) = sigma` exactly while
211
+ preserving trace.
212
+ - **Weak values (Aharonov-Albert-Vaidman)** (`algorithms.weak_value`,
213
+ `weak_measurement_shift`, `weak_value_demo`) — pre- and post-selection let a
214
+ weakly-measured observable read `A_w = <phi|A|psi>/<phi|psi>`, which can sit far
215
+ outside its spectrum or be complex. Verified both ways: `A_w` reduces to the
216
+ eigenvalue/expectation in the appropriate limits, reaches ~ -20 for an observable
217
+ with eigenvalues +/-1 under near-orthogonal selection (the amplification effect),
218
+ and — running the actual pointer-qubit weak measurement `exp(-i g A x Y/2)` — the
219
+ post-selected pointer's `<X>/g` shift converges to `Re(A_w)` in the weak-coupling
220
+ limit.
221
+ - **Quantum process tomography** (`density_matrix.process_tomography`) —
222
+ reconstruct an unknown single-qubit channel's full Choi matrix from its
223
+ input/output behavior alone: probe the black box on the four
224
+ informationally-complete states `|0>, |1>, |+>, |+i>`, recover the off-diagonal
225
+ image by linear combination, and assemble `J = sum_ij |i><j| x N(|i><j|)`.
226
+ Verified to recover the exact `choi_matrix` for every standard channel and for
227
+ unitary channels, with the reconstruction certified CPTP (positive Choi, partial
228
+ trace = I). A channel is fully characterized by how it acts, not how it is built.
229
+ - **Stabilizer entanglement entropy from the tableau**
230
+ (`StabilizerSimulator.entanglement_entropy`) — the entropy across any cut of a
231
+ stabilizer state in `O(n^3)` directly from the binary tableau (Fattal et al.:
232
+ `S_A = rank_GF2(G_B) - |B|`), no `2^n` state vector — so it works on the hundreds
233
+ of qubits the Clifford engine reaches (verified on a 200-qubit GHZ cut, instant).
234
+ Matches the dense density-matrix entanglement entropy exactly on random Clifford
235
+ states across many cuts; always an integer number of bits; 1 bit for Bell/GHZ
236
+ cuts, 0 for product cuts.
237
+ - **Stinespring dilation** (`density_matrix.stinespring_isometry`,
238
+ `apply_channel_dilated`) — the constructive proof that all noise is entanglement
239
+ with an environment: any Kraus channel `N(rho) = sum_k K_k rho K_k^dagger` is
240
+ realized as an isometry `V|psi> = sum_k K_k|psi>|k>_env` followed by discarding
241
+ the environment. Verified that `Tr_env(V rho V^dagger)` reproduces every standard
242
+ channel exactly, that `V^dagger V = I` (trace preservation), that a unitary
243
+ channel dilates to itself (env dimension 1), and that the dilated global state is
244
+ pure — the environment *purifies* the noise.
245
+ - **Measurement-based quantum computation** (`algorithms.mbqc_rotation`,
246
+ `cluster_pair`) — the opposite of the circuit model: compute by *measuring* a
247
+ fixed entangled resource. Measuring one qubit of a two-qubit cluster state in the
248
+ `alpha`-tilted basis teleports `X^s H Rz(-alpha)|psi>` onto the ancilla — verified
249
+ to fidelity 1 on 200+ random inputs against the exact byproduct law. Applying the
250
+ outcome-conditioned `X^s` correction turns it into a *deterministic* gate
251
+ `H Rz(-alpha)` (exactly `H` at `alpha = 0`), a genuine unitary enacted purely by
252
+ measurement, with the outcome unbiased and both branches occurring.
253
+ - **[[4,2,2]] error-detecting code** (`algorithms.four_two_two_codewords`,
254
+ `detect_single_errors`, `postselected_memory`) — the smallest useful stabilizer
255
+ code: 4 qubits, 2 logical qubits, distance 2, stabilizers `XXXX`/`ZZZZ`.
256
+ Verified: orthonormal stabilized codewords, all 12 single-qubit Pauli errors
257
+ anticommute with a stabilizer (detected), and detect-and-discard memory under
258
+ depolarizing noise gives post-selected infidelity O(p^2) (ratio 4.02 on p
259
+ doubling, 330x below a bare qubit at p = 0.002) at an O(p) rejection cost — the
260
+ strategy behind many early fault-tolerance experiments.
261
+ - **Dense coding with a noisy resource** (`algorithms.dense_coding_capacity`) —
262
+ superdense coding meets reality: encoding 2 bits by local Paulis on half a
263
+ Werner pair gives an ensemble whose Holevo capacity (computed directly with
264
+ `holevo_bound`) equals `2 - S(rho_W)` exactly at every fidelity. A perfect Bell
265
+ pair delivers 2 bits, the maximally mixed resource exactly 0, capacity is
266
+ monotone in F, and the *quantum advantage* (beating the 1 classical bit) is lost
267
+ well before entanglement is — another resource-hierarchy gap, quantified.
268
+ - **Magic measures: stabilizer Renyi entropy**
269
+ (`algorithms.stabilizer_renyi_entropy`, `magic_of_t_states`) — quantify the
270
+ resource that takes computation beyond classically-simulable Clifford circuits:
271
+ `M_2 = -log2(sum_P <P>^4 / d)` over all `4^n` Pauli strings (Leone et al., PRL
272
+ 128, 050402). Verified: exactly 0 on all six single-qubit stabilizer states,
273
+ Bell, GHZ, and random Clifford-orbit states (via the stabilizer engine's
274
+ `to_statevector`); exactly `log2(4/3)` on the T-magic state; invariant under H,
275
+ S, and entangling CNOT (Clifford invariance); and exactly additive over parallel
276
+ T states — connecting the magic-state injection arc to a measurable resource.
277
+ - **Mixed-state quantum Fisher information** (`algorithms.qfi_mixed`) — precision
278
+ metrology for realistic (noisy) probes: the SLD spectral formula
279
+ `F_Q = 2 sum (l_i-l_j)^2/(l_i+l_j) |<i|G|j>|^2`. Triple-verified: reduces to
280
+ `4 Var(G)` on pure states, hits the Heisenberg limit `N^2` on a GHZ probe, and
281
+ matches an *independent* numerical Bures-fidelity derivative
282
+ (`8(1-sqrt(F))/dphi^2`) on random mixed states. Mixing monotonically destroys
283
+ Fisher information, down to exactly 0 for the maximally mixed (phase-blind)
284
+ state.
285
+ - **Uncertainty relations** (`algorithms.robertson_bound`,
286
+ `entropic_uncertainty`) — Heisenberg made precise, twice. Robertson:
287
+ `dA dB >= |<[A,B]>|/2`, verified on random observables/states and *tight* on a Z
288
+ eigenstate for (X, Y); its weakness — the bound degenerating to zero on an X
289
+ eigenstate — is demonstrated too. Maassen-Uffink entropic form:
290
+ `H(A) + H(B) >= -log2 max|<a_i|b_j>|^2` = exactly 1 bit for the mutually
291
+ unbiased X/Z pair on ANY state, with equality precisely on the eigenstates —
292
+ complementarity that never degenerates.
293
+ - **Geometric (Pancharatnam-Berry) phase** (`algorithms.berry_phase_triangle`,
294
+ `pancharatnam_phase`, `bloch_spinor`, `solid_angle`) — the phase that depends
295
+ only on the path: transporting a qubit around a geodesic Bloch triangle gives
296
+ `gamma = arg(<n1|n2><n2|n3><n3|n1>) = Omega/2` (mod 2pi), verified against the
297
+ solid angle computed *independently* by classical spherical trigonometry
298
+ (L'Huilier's excess) — exact agreement on 50/50 random triangles, the octant
299
+ giving exactly `pi/4`. Gauge invariance (re-phasing any state changes nothing),
300
+ orientation-oddness (reversing the loop flips the sign), and the degenerate-loop
301
+ zero are all confirmed. The working principle of holonomic quantum gates.
302
+ - **Quantum contextuality: the Peres-Mermin magic square**
303
+ (`algorithms.mermin_peres_square`, `classical_assignment_maximum`,
304
+ `quantum_context_measurement`) — a complete 2-qubit Kochen-Specker proof. The 3x3
305
+ grid of two-qubit Paulis is verified operator-by-operator (every row/column
306
+ mutually commutes; row products `+I,+I,+I`, column products `+I,+I,-I`);
307
+ brute-forcing all 512 non-contextual value assignments shows at most **5 of 6**
308
+ constraints can ever hold classically; yet sequential projective measurement of
309
+ any context on ANY state gives outcomes whose product equals the context's sign
310
+ deterministically — all 6 constraints at once, on 120 randomized context
311
+ measurements, with the individual outcomes still random. Measurement outcomes
312
+ cannot be pre-existing context-independent values.
313
+ - **Optimal universal quantum cloning (Buzek-Hillery)**
314
+ (`algorithms.universal_clone`) — no-cloning made quantitative: the exact 1 -> 2
315
+ cloning machine (a verified 8x2 isometry with two clones + ancilla) copies ANY
316
+ unknown qubit with fidelity exactly 5/6 — the proven optimum — for every input
317
+ state (universality confirmed on random states to 1e-12), with the two clones
318
+ identical. Beats the best classical measure-and-prepare strategy (2/3) while
319
+ respecting the no-cloning bound (< 1).
320
+ - **Logical qubit lifetime under repeated QEC cycles**
321
+ (`algorithms.repeated_qec_cycles`) — the fault-tolerance payoff, exact: each
322
+ (noise -> recovery) cycle of the 3-qubit bit-flip code acts on the code space as a
323
+ *logical* bit-flip channel with `q = 3p^2 - 2p^3` (weight-2/3 errors decode to
324
+ exactly `X_L`), so k cycles give `F_k = (1 + (1-2q)^k)/2` — matched by the
325
+ simulation to machine precision at every cycle. The encoded qubit outlives a bare
326
+ one by `lifetime_gain ~ 1/(3p)` (33.9x at p = 0.01), the gain exceeds 1 for every
327
+ `p < 1/2` with the fixed point exactly at threshold, and `|+_L>` never decays at
328
+ all.
329
+ - **Quantum state discrimination** (`algorithms.helstrom_bound`,
330
+ `helstrom_measurement`, `unambiguous_discrimination`) — the two optimal ways to
331
+ tell non-orthogonal states apart. Helstrom minimum-error:
332
+ `P_err = (1 - ||p0 rho0 - p1 rho1||_1)/2`, with the optimal measurement
333
+ constructed explicitly (positive-eigenspace projector) and achieving the bound to
334
+ machine precision, including mixed states and unequal priors
335
+ (`(1-sqrt(1-4 p0 p1 s^2))/2` verified). Unambiguous (IDP): a 3-outcome POVM that
336
+ is *never* wrong (error exactly 0), succeeding with exactly `1 - |<psi0|psi1>|`
337
+ and paying the difference in inconclusive outcomes — strictly below the Helstrom
338
+ success rate, the price of certainty.
339
+ - **Holevo bound & accessible information** (`algorithms.holevo_bound`,
340
+ `accessible_information`, `holevo_gap`) — why a qubit carries at most one
341
+ classical bit, and why non-orthogonal states can't even deliver that:
342
+ `chi = S(avg) - sum p_i S(rho_i)` vs the best measurement's mutual information
343
+ (optimized over the Bloch sphere). Verified against the exact two-pure-state
344
+ closed forms `chi = h((1+cos t)/2)` and `I_acc = 1 - h((1+sin t)/2)` (Levitin),
345
+ with a strictly positive gap for non-orthogonal states; the BB84 ensemble gives
346
+ exactly `chi = 1` but accessible information exactly `1/2` — the eavesdropper's
347
+ fundamental limit that makes QKD secure.
348
+ - **Channel coherent information & quantum capacity**
349
+ (`algorithms.coherent_information`, `amplitude_damping_capacity`) — quantum
350
+ Shannon theory from first principles: `I_c = S(N(rho)) - S(E)` computed by
351
+ genuinely purifying the input, sending the system half through the channel, and
352
+ reading the environment entropy off the joint output. Verified against the known
353
+ amplitude-damping closed form `h((1-g)p) - h(gp)` at every tested `(g, p)`, the
354
+ identity channel gives `I_c = S(rho)`, and the AD capacity behaves exactly as
355
+ Shannon theory demands: 1 at `g = 0`, monotone decreasing, and **exactly zero
356
+ from `g = 1/2`** — the antidegradable point where the environment learns as much
357
+ as the receiver (with the exact antisymmetry `I_c(g) = -I_c(1-g)` confirmed).
358
+ - **Wootters concurrence & entanglement of formation**
359
+ (`DensityMatrix.concurrence`, `entanglement_of_formation`) — the exact two-qubit
360
+ entanglement measure for ANY mixed state: `C = max(0, l1-l2-l3-l4)` from the
361
+ spin-flipped spectrum (computed in a Hermitian-similar form for eigvalsh
362
+ precision), and `E = h((1+sqrt(1-C^2))/2)` — the cost in Bell pairs of preparing
363
+ the state. Verified: pure states match `C = 2|ad-bc|` and EoF equals the
364
+ entanglement entropy; Bell-diagonal states match `C = max(0, 2 max(lam) - 1)`;
365
+ Werner states give `2F - 1` above the `F = 1/2` separability threshold and exactly
366
+ 0 below it.
367
+ - **CHSH nonlocality of mixed states — the Horodecki criterion**
368
+ (`algorithms.chsh_maximum`, `chsh_maximum_optimized`, `correlation_matrix`,
369
+ `werner_nonlocality`) — the exact maximal CHSH value of ANY two-qubit state:
370
+ `S_max = 2 sqrt(u1 + u2)` from the correlation matrix `T`. Verified: matches
371
+ brute-force optimization over all measurement angles on random mixed states, a
372
+ Bell pair reaches Tsirelson's `2 sqrt(2)`, Werner states follow
373
+ `2 sqrt(2)|4F-1|/3` with `S = 2` exactly at `F = (1+3/sqrt(2))/4 ≈ 0.7803` — and
374
+ the **entangled-but-local window** `1/2 < F < 0.7803` is demonstrated: states
375
+ whose entanglement is certified by negativity, yet no CHSH experiment on them can
376
+ ever violate a Bell inequality. Entanglement and nonlocality are different
377
+ resources.
378
+ - **Steane code under continuous depolarizing noise**
379
+ (`algorithms.steane_code_noisy`) — the distance-3 promise demonstrated exactly on
380
+ the 7-qubit density matrix: independent `depolarizing(p)` on every physical qubit,
381
+ then the exact 64-syndrome CPTP recovery. Doubling `p` quadruples the logical
382
+ error (measured ratio 3.98 — quadratic suppression, `1-F ~ O(p^2)` vs `O(p)`
383
+ bare), the logical error at `p = 0.002` is 24x below the bare qubit's, the exact
384
+ fidelity always exceeds the weight-1 floor `(1-p)^7 + 7p(1-p)^6`, and the
385
+ pseudo-threshold is visible: encoding wins below `p ~ 0.05` and loses at 0.25.
386
+ - **T1/T2 relaxation times** (`density_matrix.relaxation_times`) — extract a qubit's
387
+ datasheet numbers from exact Lindblad evolution (amplitude damping + pure
388
+ dephasing) and verify the fundamental relation `1/T2 = 1/(2 T1) + 1/T_phi`, hence
389
+ `T2 <= 2 T1` always, with equality iff there is no pure dephasing. Includes the
390
+ dephasing-dominated regime (`T2 < T1`).
391
+ - **Quantum discord** (`density_matrix.quantum_discord`) — the quantum correlation
392
+ that survives *without* entanglement: `D = S(B) - S(AB) + min_M sum p_k S(A|k)`,
393
+ minimized over all projective measurements (grid-seeded Nelder-Mead). Verified: a
394
+ Bell state carries exactly 1 bit, classical and product states exactly 0, pure
395
+ states reduce to the entanglement entropy, random Bell-diagonal states match Luo's
396
+ closed form (PRA 77, 042303) to 1e-5 — and a *separable* Werner state (negativity
397
+ 0) still has discord 0.049, quantum correlation with no entanglement at all.
398
+ - **DEJMPS distillation** (`algorithms.dejmps_distill`, `bell_diagonal_state`,
399
+ `dejmps_recurrence`, `dejmps_rounds`) — the protocol real repeaters use: works on
400
+ *any* Bell-diagonal state (BBPSSW needs Werner) via local `Rx(±pi/2)` rotations
401
+ before the bilateral CNOTs. The exact 4-qubit circuit reproduces the Deutsch et al.
402
+ four-coefficient recurrence to machine precision (all Bell weights, plus success
403
+ probability `(l1+l4)^2 + (l2+l3)^2`); on Werner inputs it reduces exactly to
404
+ BBPSSW, and on an asymmetric state of the same fidelity it purifies strictly
405
+ faster (0.845 vs 0.735 in one round from F = 0.7). Bell-diagonal states are closed
406
+ under the map, so `dejmps_rounds` iterates the exact recurrence to a target.
407
+ - **GHZ vs W robustness under particle loss** (`algorithms.loss_robustness`) —
408
+ the standard demonstration that how entanglement is *shared* matters: tracing one
409
+ qubit out of an n-qubit GHZ leaves a fully separable mixture (negativity exactly 0,
410
+ though the intact state is maximally entangled at 1/2), while a W state's surviving
411
+ pair stays entangled with negativity exactly `(sqrt((n-2)^2+4) - (n-2))/(2n)` —
412
+ the golden value `(sqrt(5)-1)/6` at n=3 — verified for n = 3..6, diluting but never
413
+ vanishing as n grows.
414
+ - **Quantum Zeno effect** (`algorithms.quantum_zeno`, `zeno_postselected`) —
415
+ frequent measurement freezes coherent evolution. A Rabi drive interrupted by N
416
+ unread projective measurements (exact measurement channels on the density matrix)
417
+ leaves `|0>` population exactly `1/2 + cos^N(wT/N)/2`; demanding outcome 0 every
418
+ time survives with probability exactly `cos^{2N}(wT/2N)` with the state pinned at
419
+ `|0>`. Both verified against their closed forms, monotone in N, tending to 1 —
420
+ while a free pi-pulse fully inverts the qubit (survival 0), 50 interleaved
421
+ measurements keep it above 0.95.
422
+ - **Dynamical decoupling (Hahn spin echo)** (`algorithms.spin_echo`,
423
+ `echo_state_fidelity`) — the temporal counterpart to a DFS: under quasi-static
424
+ dephasing (random per-shot detuning, Gauss-Hermite ensemble of unitaries) a bare
425
+ `|+>` decays as `exp(-sigma^2/2)`, but an X pulse at mid-evolution refocuses the
426
+ phase (`U(phi/2) X U(phi/2) = X` shot by shot) and restores coherence to exactly 1
427
+ at any noise strength — for arbitrary input states. Crucially also verified where
428
+ the echo *fails*: if the noise re-randomizes between the two halves, the echoed
429
+ decay is exactly `exp(-sigma^2/2)` — no advantage. Noise *correlation* is the
430
+ resource dynamical decoupling consumes.
431
+ - **Decoherence-free subspaces** (`algorithms.collective_dephasing`, `dfs_encode`,
432
+ `dfs_protection`) — protection by symmetry instead of redundancy: under collective
433
+ Gaussian dephasing (the same random Z phase on every qubit, computed as an exact
434
+ Gauss-Hermite ensemble average of unitaries), a logical qubit encoded in
435
+ `span{|01>, |10>}` keeps fidelity exactly 1 at ANY noise strength, while a bare
436
+ `|+>` qubit's coherence dies as `exp(-sigma^2/2)` and an `a|00> + b|11>` qubit
437
+ decays four times faster (`exp(-2 sigma^2)`) — all three verified against their
438
+ closed forms.
439
+ - **Noisy entanglement swapping & repeater chains**
440
+ (`algorithms.entanglement_swap_noisy`, `repeater_chain`) — a Bell measurement at a
441
+ middle node splices two noisy Werner pairs A-B, B-C into an A-C pair of fidelity
442
+ `F1·F2 + (1-F1)(1-F2)/3`, exact for every measurement outcome (each probability
443
+ 1/4), run as the 4-qubit density-matrix circuit with Pauli corrections. Since
444
+ Werner⊗Werner swaps to Werner again, the scalar recurrence composes exactly:
445
+ `repeater_chain` gives the end-to-end fidelity of an n-link chain, decaying toward
446
+ 1/4. Verified highlights: two *entangled* pairs (0.7, 0.6) swap to a *separable*
447
+ 0.46 pair (cross-checked via negativity), and one BBPSSW round rescues a degraded
448
+ chain — the complete quantum-repeater story.
449
+ - **Entanglement distillation (BBPSSW)** (`algorithms.bbpssw_distill`,
450
+ `werner_state`, `distillation_rounds`) — two noisy Werner pairs → one
451
+ higher-fidelity pair using only local CNOTs, measurement, and classical
452
+ communication, run as the exact 4-qubit density-matrix circuit. Verified to
453
+ machine precision against the Bennett et al. closed form
454
+ `F' = (F² + (1-F)²/9)/(F² + 2F(1-F)/3 + 5(1-F)²/9)` with success probability equal
455
+ to the denominator; `F = 1/2` is confirmed as the distillation threshold (fixed
456
+ point, degradation below, improvement above), and the Werner state's entanglement
457
+ threshold at `F > 1/2` is cross-checked via negativity. `distillation_rounds`
458
+ iterates the recurrence to a target fidelity (2^r pairs per output).
459
+ - **Magic states & T-gate injection** (`algorithms.t_magic_state`,
460
+ `inject_t_gate`) — how fault-tolerant computers get non-Clifford gates: the T gate
461
+ enacted on data using only Clifford operations (CNOT, S, measurement) plus one
462
+ consumed magic state `T|+>`, via gate teleportation. Verified exactly: both
463
+ measurement branches deliver `T|psi>` at fidelity 1 for arbitrary inputs (outcome 1
464
+ needing the `S T-dagger = T` fix-up, and demonstrably wrong without it), and each
465
+ outcome occurs with probability exactly 1/2 — the measurement reveals nothing about
466
+ the data.
467
+ - **Transversal logical gates on the Steane code** (`algorithms.steane_transversal`,
468
+ `steane_transversal_cnot`) — fault tolerance's defining property, demonstrated
469
+ exactly: applying a physical gate to all 7 qubits enacts the *logical* gate without
470
+ decoding. Verified: transversal X/Z/H enact logical X/Z/H; transversal S enacts
471
+ logical **S-dagger** (the code's weight-structure hallmark — and explicitly *not*
472
+ logical S); and a bitwise CNOT between two code blocks (14 qubits) enacts a perfect
473
+ logical CNOT, including entangling superposition inputs into encoded logical Bell
474
+ states (fidelity 1.0 for random logical inputs).
475
+ - **Steane 7-qubit code [[7,1,3]]** (`algorithms.steane_code`,
476
+ `steane_stabilizers`) — the CSS code built from the classical [7,4,3] Hamming code,
477
+ correcting an arbitrary single-qubit error. Three X-type and three Z-type stabilizer
478
+ generators decode Z and X errors independently (a Y error trips both). Verified:
479
+ all 22 syndromes distinct, every one of the 21 single-qubit errors corrected to
480
+ fidelity 1 for arbitrary logical inputs, and the CSS structure confirmed (a pure X
481
+ error leaves all X-type stabilizers at +1 and vice versa). Completes the code
482
+ family: 3-qubit repetition → [[5,1,3]] → [[7,1,3]] → 9-qubit Shor.
483
+ - **5-qubit perfect code [[5,1,3]]** (`algorithms.five_qubit_code`,
484
+ `five_qubit_stabilizers`) — the smallest code that corrects an *arbitrary*
485
+ single-qubit error. Encodes a logical qubit via the stabilizer projector, applies a
486
+ chosen `X`/`Y`/`Z` error on any qubit, extracts the 4-bit syndrome, and recovers
487
+ exactly. Verified: all 16 syndromes are distinct (the "perfect" property — 1
488
+ error-free + 15 single-qubit errors, none left over), and every single-qubit error
489
+ is corrected to fidelity 1 for arbitrary logical inputs.
490
+ - **Quantum mutual information** (`DensityMatrix.mutual_information`) —
491
+ `I(A:B) = S(A) + S(B) - S(AB)`, the total (classical + quantum) correlation across a
492
+ cut. Verified: a Bell pair carries 2 bits, a classically correlated pair 1 bit, and a
493
+ product state 0.
494
+ - **Entanglement negativity** (`DensityMatrix.negativity`,
495
+ `logarithmic_negativity`, `partial_transpose`) — a mixed-state entanglement measure
496
+ from the Peres-Horodecki partial transpose: `N = (||rho^{T_A}||_1 - 1)/2` and the
497
+ log-negativity `log2(2N+1)`. Verified exactly: a Bell pair gives `N = 1/2`
498
+ (1 bit log-negativity), a product state 0, and a Werner state matches the analytic
499
+ `max(0, (3p-1)/4)` with the PPT-separability threshold at `p = 1/3`.
500
+ - **Coherence measures** (`DensityMatrix.l1_coherence`,
501
+ `relative_entropy_coherence`) — quantify superposition as a resource: the l1-norm of
502
+ coherence (sum of off-diagonal magnitudes) and the relative entropy of coherence
503
+ `S(diag rho) - S(rho)`. Verified: `|+>` and a Bell state each carry exactly 1 bit,
504
+ computational-basis and maximally mixed states carry none, and full phase damping
505
+ destroys all coherence.
506
+ - **Choi matrix & CPTP verification** (`density_matrix.choi_matrix`, `is_cptp`,
507
+ `kraus_rank`) — the Jamiolkowski image of a Kraus channel, a completely-positive
508
+ + trace-preserving check, and the Kraus rank (minimal number of Kraus operators).
509
+ Verified: the identity channel gives a rank-1 Choi ∝ the maximally entangled state,
510
+ all standard channels are CPTP, a non-trace-preserving map is rejected, and the
511
+ Kraus rank counts noise terms (unitary → 1, full depolarizing → 4).
512
+ - **Lindblad master-equation evolution** (`DensityMatrix.evolve_lindblad`) —
513
+ continuous-time open-system dynamics: evolve `rho` under a Hamiltonian plus
514
+ collapse (jump) operators `{L_k}` for `T1` relaxation, `T2` dephasing, and general
515
+ Markovian decoherence. Computed exactly by exponentiating the Liouvillian
516
+ superoperator (no time-stepping error). Verified against the analytic laws:
517
+ excited-state population `e^{-γt}`, coherence decay `½e^{-2κt}`, closed-system Rabi
518
+ in the no-collapse limit, trace preservation, and relaxation to the ground state.
519
+ - **Channel quality metrics** (`density_matrix.process_fidelity`,
520
+ `average_gate_fidelity`) — quantify how noisy a Kraus channel is: the entanglement
521
+ (process) fidelity to a target unitary and the state-averaged gate fidelity, linked
522
+ by the exact identity `F_avg = (d·F_process + 1)/(d+1)`. Verified: identity gate → 1,
523
+ `depolarizing(p)` → `1 - p/2`, a stray Pauli-X error → 1/3.
524
+ - **Measured syndrome-extraction circuit** (`algorithms.syndrome_extraction_cycle`) —
525
+ the *physical* 3-qubit bit-flip code cycle on the density-matrix engine: two ancilla
526
+ qubits, CNOT parity checks (`Z0Z1`, `Z1Z2`), ancilla measurement, and the
527
+ outcome-conditioned `X` correction (summed as a CPTP measurement channel), then the
528
+ ancillas are traced out. Verified to reproduce the ideal-recovery fidelity
529
+ `(1-p)^3 + 3p(1-p)^2` exactly, confirming the circuit implements the code.
530
+ - **QEC under continuous noise** (`algorithms.bit_flip_code_noisy`,
531
+ `phase_flip_code_noisy`, `repetition_code_logical_error`) — run a quantum
532
+ error-correcting code against *continuous* noise (an independent bit-/phase-flip
533
+ channel of strength `p` on every physical qubit) exactly on the density-matrix
534
+ engine, with an exact CPTP syndrome-recovery map, and read out the logical
535
+ fidelity. Verified against the closed form `(1-p)^3 + 3p(1-p)^2`: the encoded
536
+ qubit beats the un-encoded one for all `p < 1/2` and is worse above threshold;
537
+ `|+_L>` is logical-X-invariant and stays perfectly protected. Ships the exact
538
+ majority-vote logical error rate for any odd code distance, showing distance-`d`
539
+ error suppression below threshold.
540
+ - **Random Clifford circuits** (`StabilizerSimulator.random`) — apply a random
541
+ H/S/CNOT Clifford circuit (default depth `10n`) and get back the sim; useful for
542
+ randomized benchmarking, testing, and random stabilizer states. Scales to hundreds
543
+ of qubits instantly.
544
+ - **Density-matrix simulator** (`quantum_debugger.density_matrix.DensityMatrix`) — an
545
+ open-quantum-systems engine tracking the full `rho`: apply unitary gates and Kraus
546
+ noise channels, take partial traces, and read out purity, populations, expectation
547
+ values, and Uhlmann state fidelity. Ships standard channels (`bit_flip`,
548
+ `phase_flip`, `depolarizing`, `amplitude_damping`, `phase_damping`). Verified:
549
+ purity 1 for pure states, Bell reduced state maximally mixed, depolarizing → I/2,
550
+ amplitude damping relaxes |1> → |0>; unitary evolution matches the state-vector sim.
551
+ Also `von_neumann_entropy` and `entanglement_entropy` (Bell → 1 bit, product → 0),
552
+ plus projective `measure(qubit)` (Born-rule collapse) and `sample(shots)`.
553
+ - **Scalable graph / cluster states** (`StabilizerSimulator.graph`) — prepare a graph
554
+ (cluster) state (H on all qubits + CZ per edge) in `O(n + |edges|)`; thousand-qubit
555
+ cluster states are instant, with the canonical stabilizers `X_i prod_{j~i} Z_j`.
556
+ Verified against the state-vector `graph_state` for small graphs.
557
+ - **Stabilizer simulator: expectation values, S-dagger, state-vector bridge, sampling**
558
+ (`StabilizerSimulator.expectation_value`, `.s_dagger`, `.to_statevector`, `.copy`,
559
+ `.sample`) — compute `<psi|P|psi>` for any Pauli string directly from the tableau
560
+ (exactly +1/-1 if P or -P is in the stabilizer group, else 0); reconstruct the dense
561
+ state vector for small n via the stabilizer projector; the inverse phase gate; and
562
+ non-destructive shot sampling of measurement outcomes (each shot measures a copy).
563
+ All verified against the state-vector simulator.
564
+ - **Quantum multiplier** (`algorithms.quantum_multiply`) — Fourier-basis
565
+ multiplication `|a>|b>|0> -> |a>|b>|a*b>` via doubly-controlled phase rotations
566
+ (adds `2^(j+k)` per pair of set input bits). Returns the exact `2n`-bit product for
567
+ every input pair; complements the Fourier and ripple-carry adders.
568
+ - **Ripple-carry subtractor** (`algorithms.ripple_carry_subtract`) — the Cuccaro adder
569
+ run in reverse, computing `b - a` with a borrow bit (exact for every input pair).
570
+
571
+ ## [0.7.0] - 2026-07-22
572
+
573
+ Theme: performance & scale, a large genuine quantum-algorithms library, advanced
574
+ QML/QRL, and test-suite integrity. Highlights: Shor factoring, Simon, quantum error
575
+ correction (incl. the 9-qubit Shor code), a Clifford/stabilizer simulator, Trotter
576
+ Hamiltonian simulation, a machine-precision VQE ground-state solver, gate
577
+ decomposition (ZYZ/KAK) and multi-controlled synthesis, quantum arithmetic (Fourier
578
+ + ripple-carry adders), teleportation/superdense/entanglement-swapping, Bell-CHSH /
579
+ GHZ-Mermin nonlocality, BB84 QKD, and quantum spectroscopy. All routines verified
580
+ against known outcomes; the `algorithms` package is at ~99% line coverage.
581
+
582
+ ### Added
583
+ - **Deutsch's algorithm** (`algorithms.deutsch`) — the first quantum algorithm
584
+ (1985): decide whether a one-bit function is constant or balanced with a single
585
+ query. Completes the query-algorithm family (Deutsch -> Deutsch-Jozsa ->
586
+ Bernstein-Vazirani -> Simon).
587
+ - **Quantum spectroscopy** (`algorithms.unitary_eigenphase`,
588
+ `algorithms.hermitian_eigenvalue`) — phase estimation for an *arbitrary* unitary
589
+ or Hermitian operator (not just the demo phase gate): read out the eigenphase of a
590
+ unitary or the eigenvalue of a Hermitian `H` (via `U = exp(iH)`) from a supplied
591
+ eigenstate. Verified against classical diagonalization (exact eigenphases for
592
+ P/T gates, Hermitian eigenvalues to ~1e-3).
593
+ - **Repetition-code logical error rate** (`algorithms.repetition_code_error_rate`) —
594
+ Monte-Carlo QEC-threshold demonstration: encode a logical bit in the 3-qubit code,
595
+ apply independent per-qubit bit-flip noise, syndrome-correct, and measure the
596
+ logical failure rate. Matches the analytic `3p^2(1-p)+p^3` and stays below the
597
+ physical rate for all `p < 1/2`.
598
+ - **Grover adaptive minimization** (`algorithms.grover_minimize`) — Durr-Hoyer
599
+ quantum optimization: find the argmin of a cost function via Grover search with a
600
+ threshold oracle and BBHT-randomized iteration counts (which avoid the
601
+ over-rotation stall when many states are marked). Reliably finds the global
602
+ minimum, verified against brute force.
603
+ - **Multi-controlled gate synthesis** (`algorithms.toffoli_gates`,
604
+ `algorithms.fredkin_gates`, `algorithms.mcx_gates`) — decompose Toffoli (CCX),
605
+ Fredkin (controlled-SWAP), and general n-controlled-X gates into the elementary
606
+ H/T/T-dagger/CNOT set; the n-control MCX uses a clean-ancilla Toffoli ladder.
607
+ Verified exactly against the ideal CCX/CSWAP/MCX action with ancillas restored
608
+ to |0>.
609
+ - **Grover-based constraint / SAT solver** (`algorithms.grover_solve`) — finds an
610
+ input satisfying an arbitrary boolean predicate via Grover search over the marked
611
+ set, returning a verified satisfying assignment, the solution count, and the
612
+ success probability.
613
+ - **Variational ground-state solver (VQE)** (`algorithms.variational_ground_state`,
614
+ `algorithms.tfim_hamiltonian`, `algorithms.heisenberg_hamiltonian`) — a
615
+ self-contained hardware-efficient VQE (layered RY + CNOT ansatz, gradient-based
616
+ BFGS optimizer, restarts) for any Pauli-sum Hamiltonian, checked against exact
617
+ diagonalization. Reaches the exact TFIM/Heisenberg ground energies to near machine
618
+ precision up to ~4 qubits (~1e-11) and ~1e-6 at 5 qubits; includes ready-made TFIM
619
+ and Heisenberg Hamiltonian builders.
620
+ - **BB84 quantum key distribution** (`algorithms.bb84`) — the first quantum
621
+ cryptography protocol, with genuine per-qubit preparation and measurement.
622
+ Without an eavesdropper the sifted keys match exactly (QBER 0); an
623
+ intercept-resend eavesdropper injects a ~25% error rate that trips the security
624
+ threshold. Security emerges from real measurement back-action.
625
+ - **Bell/CHSH test, nonlocal game & GHZ-Mermin paradox** (`algorithms.chsh_value`,
626
+ `algorithms.correlator`, `algorithms.bell_state`, `algorithms.chsh_game`,
627
+ `algorithms.mermin_ghz_test`) — a Bell pair measured along optimal angles gives a
628
+ CHSH value `S = 2 sqrt(2)` (Tsirelson's bound), violating the classical limit
629
+ `|S| <= 2`; the CHSH game wins with `cos^2(pi/8) ~ 0.854` vs the classical 0.75; and
630
+ the 3-qubit GHZ (Mermin) test gives an all-or-nothing violation (quantum 4 vs
631
+ classical bound 2). Classical bounds are brute-forced, quantum values exact.
632
+ - **Quantum metrology** (`algorithms.phase_sensitivity`, `algorithms.parity_signal`,
633
+ `algorithms.quantum_fisher_information`) — Heisenberg-limited phase sensing: a GHZ
634
+ probe reaches quantum Fisher information `N^2` (phase uncertainty `1/N`) versus
635
+ `N` (`1/sqrt(N)`) for a product state, and its parity signal oscillates as
636
+ `cos(N*phi)`. Verified exactly for N up to 5.
637
+ - **Simon's algorithm** (`algorithms.simon`, `algorithms.simon_oracle`) — recovers
638
+ the hidden XOR mask of a 2-to-1 function with O(n) quantum queries (exponential
639
+ speedup). Runs the H-oracle-H circuit, collects `y . s = 0` constraints, and
640
+ solves the GF(2) null space. Recovers every planted secret for n up to 4.
641
+ - **Entangled state preparation** (`algorithms.ghz_state`, `algorithms.w_state`,
642
+ `algorithms.graph_state`) — genuine gate-based circuits for the canonical
643
+ entangled states: GHZ (H + CNOT chain), W (single excitation spread evenly by a
644
+ cascade of Givens rotations), and graph/cluster states (H on all, CZ per edge).
645
+ Verified exactly by amplitudes / stabilizers (W fidelity 1.0 up to 6 qubits).
646
+ - **QAOA MaxCut solver** (`algorithms.solve_maxcut`, `algorithms.brute_force_maxcut`)
647
+ — an application-level wrapper that returns an actual MaxCut solution (node
648
+ partition, cut value, brute-force optimum, approximation ratio) with random
649
+ restarts, not just an expected cost. Reaches the optimal cut on standard test
650
+ graphs (square, triangle, K4, path).
651
+ - **Quantum arithmetic (Fourier + ripple-carry)** (`algorithms.qft_add`,
652
+ `algorithms.quantum_adder`, `algorithms.qft_subtract`, `algorithms.quantum_compare`,
653
+ `algorithms.ripple_carry_add`) — two addition paradigms: carry-free Fourier-basis
654
+ (Draper) addition of a constant or two registers, plus a Cuccaro ripple-carry adder
655
+ (CNOT/Toffoli MAJ-UMA) that returns the exact sum with carry-out. Also subtraction
656
+ and comparison. All exact for every input pair.
657
+ - **Randomized benchmarking** (`algorithms.randomized_benchmarking`,
658
+ `algorithms.single_qubit_clifford_group`) — SPAM-independent estimate of the
659
+ average error per single-qubit Clifford. Random Clifford sequences plus the
660
+ exact recovery gate, a per-gate depolarizing channel, and an `A p^m + B` decay
661
+ fit. Recovers `p ≈ 1 - lambda` and average error `≈ lambda/2`; zero noise gives
662
+ survival 1.0, confirming the Clifford-inverse logic. Enumerates the full
663
+ 24-element single-qubit Clifford group.
664
+ - **Clifford / stabilizer simulator** (`quantum_debugger.stabilizer.StabilizerSimulator`)
665
+ — a second simulation engine using the Aaronson-Gottesman CHP tableau
666
+ (`O(n)`/gate, `O(n^2)`/measurement) instead of a `2^n` state vector. Supports
667
+ H/S/X/Y/Z/CNOT/CZ + computational-basis measurement with correct random and
668
+ deterministic outcomes, and exposes the live stabilizer generators. Runs
669
+ hundred-qubit Clifford circuits (e.g. a 200-qubit GHZ) instantly; verified
670
+ against the state-vector simulator (every stabilizer is a +1 eigenstate).
671
+ - **Gate decomposition / synthesis** (`algorithms.zyz_decompose`,
672
+ `algorithms.abc_decomposition`, `algorithms.kak_decompose`,
673
+ `algorithms.canonical_coordinates`) — single-qubit ZYZ Euler decomposition,
674
+ Nielsen-Chuang ABC form for controlled-U, and the two-qubit Cartan (KAK)
675
+ decomposition into local gates plus the entangling core
676
+ `exp(i(a XX + b YY + c ZZ))`. KAK uses the magic basis + a deterministic nested
677
+ joint diagonalization, robust even for degenerate gates; verified to reconstruct
678
+ 1000/1000 random SU(4) unitaries to ~1e-13.
679
+ - **Hamiltonian simulation (Trotter-Suzuki)** (`algorithms.trotter_evolve`,
680
+ `algorithms.trotter_circuit`, `algorithms.hamiltonian_matrix`) — simulate
681
+ `exp(-i H t)` for a Hamiltonian given as weighted Pauli strings, using genuine
682
+ 1- and 2-qubit gates (basis-change + CNOT-ladder + RZ per term). First- and
683
+ second-order product formulas; second order converges faster (O(dt^2)), and
684
+ single-term evolution is exact. Verified against the exact matrix exponential.
685
+ - **Quantum error correction** (`algorithms.bit_flip_code`,
686
+ `algorithms.phase_flip_code`, `algorithms.shor_code`) — genuine gate-based
687
+ stabilizer codes: encode a logical qubit, inject a Pauli error, extract the
688
+ syndrome by measuring stabilizer generators with ancillas, and recover. The
689
+ 3-qubit codes correct any single X (bit-flip) or Z (phase-flip) error; the
690
+ 9-qubit Shor code corrects an **arbitrary** single-qubit error (X/Y/Z on any of
691
+ the 9 qubits). Logical fidelity returns to 1.0 in every case.
692
+ - **Shor's algorithm** (`algorithms.period_finding`, `algorithms.shor_factor`) —
693
+ quantum period finding via QPE on the modular-multiplication unitary
694
+ `U|y> = |a*y mod N>`, with continued-fraction recovery of the period. Genuinely
695
+ factors composites: 15 -> (3, 5) via period r=4, 21 -> (3, 7) via r=6.
696
+ - **Quantum teleportation, superdense coding & entanglement swapping**
697
+ (`algorithms.teleport`, `algorithms.superdense_coding`,
698
+ `algorithms.entanglement_swap`) — teleport an arbitrary single-qubit state with
699
+ fidelity ~1.0 using a Bell pair + X/Z feedforward; superdense coding recovers all
700
+ four 2-bit messages from a single transmitted qubit; entanglement swapping
701
+ entangles two qubits that never interacted (fidelity 1.0 to |Phi+>), the basis of
702
+ quantum repeaters.
703
+ - **HHL quantum linear-systems solver** (`algorithms.hhl`) — solves `A x = b` for
704
+ a small Hermitian `A` via QPE + eigenvalue-inversion rotation + inverse QPE +
705
+ post-selection; the solution state matches the classical `A^{-1} b` with
706
+ fidelity ~1.0.
707
+ - **Quantum State Tomography** (`quantum_debugger.tomography.state_tomography`) —
708
+ reconstructs a <=3-qubit density matrix from simulated Pauli measurements
709
+ (fidelity ~1.0 to the true state).
710
+ - **Amplitude Amplification** (`algorithms.amplitude_amplification`) — generalizes
711
+ Grover to any state preparation A; boosts a marked-state probability of 0.001
712
+ to ~1.0.
713
+ - **Quantum Actor-Critic (A2C)** (`qml.algorithms.QuantumActorCritic`) — online
714
+ advantage actor-critic with a PQC actor and a PQC critic; the critic learns a
715
+ genuine value function (V increases toward the goal). Completes the QRL suite
716
+ (value-based, policy-based, actor-critic).
717
+ - **Multi-class Variational Quantum Classifier**
718
+ (`qml.advanced.VariationalQuantumClassifier`) — K-class softmax readout with
719
+ cross-entropy + parameter-shift training (~0.98 on 3-class data).
720
+ - **Iterative QPE** (`algorithms.iterative_phase_estimation`) — single-ancilla,
721
+ bit-by-bit phase estimation (Kitaev); recovers representable phases exactly.
722
+ - **SPSA optimizer** (`qml.optimizers.SPSA`) — gradient-free, two objective
723
+ evaluations per step regardless of parameter count (ideal for VQAs).
724
+ - **Maximum-Likelihood Amplitude Estimation** (`algorithms.amplitude_estimation`)
725
+ — QPE-free amplitude/count estimation via Grover powers + max-likelihood; more
726
+ accurate than QPE-based counting (counts recovered to <0.6).
727
+ - **VQD (Variational Quantum Deflation)** (`qml.algorithms.VQD`) — finds excited
728
+ states, not just the ground state, by penalizing overlap with previously found
729
+ eigenstates. Recovers exact ground + excited energies on test Hamiltonians.
730
+ - **Quantum walk** (`algorithms.quantum_walk`) — discrete-time coined walk on a
731
+ cycle; spreads ballistically (std ~ steps) vs a classical walk's sqrt(steps).
732
+ - **Quantum counting** (`algorithms.quantum_counting`) — estimates the number of
733
+ marked states via QPE on the Grover iterate.
734
+ - **Quantum algorithms library** (`quantum_debugger.algorithms`) — textbook
735
+ algorithms as first-class, tested functions: **QFT / inverse QFT** (matches the
736
+ analytic DFT), **Grover search** (finds marked states at ~94% in the optimal
737
+ number of iterations), **Quantum Phase Estimation** (exact phase readout),
738
+ **Bernstein-Vazirani** (recovers the hidden string in one query), and
739
+ **Deutsch-Jozsa** (constant vs balanced). All genuinely gate-based.
740
+ - **Quantum Autoencoder** (`qml.advanced.QuantumAutoencoder`) — compresses
741
+ n qubits into fewer by training the trash qubits toward |0> with parameter-
742
+ shift gradients (trash fidelity ~0.45 -> ~1.0 on compressible data).
743
+ - **Quantum Convolutional Neural Network** (`qml.advanced.QCNN`) — convolution +
744
+ pooling layers that halve the qubits toward a single readout; learns separable
745
+ data to 100%.
746
+ - **Quantum Policy Gradient (REINFORCE)** — a policy-based QRL agent with a PQC
747
+ policy (state encoding + variational ansatz + softmax over per-action <Z>
748
+ readouts), trained with exact parameter-shift policy gradients. Learns the
749
+ gridworld to the optimal policy. (`qml.algorithms.QuantumPolicyGradient`)
750
+ - **Quantum DQN** — value-based QRL with an experience-replay buffer and a
751
+ periodically-synced target network on top of the PQC Q-function; converges
752
+ faster/more stably than plain Q-learning. (`qml.algorithms.QuantumDQN`)
753
+ - **Data-reuploading classifier** — re-encodes inputs between variational layers
754
+ (Perez-Salinas et al.) for higher expressivity; learns nonlinearly-separable
755
+ data (concentric circles ~0.9 acc) that single-encoding circuits cannot.
756
+ (`qml.advanced.DataReuploadingClassifier`)
757
+ - **Ansatz analysis toolkit** — `expressibility` (KL to the Haar fidelity
758
+ distribution, Sim et al.), `entangling_capability` (Meyer-Wallach Q), and
759
+ `gradient_variance` (barren-plateau probe, McClean et al.), each validated
760
+ against the expected theoretical behavior. (`qml.advanced`)
761
+
762
+ ### Changed
763
+ - **`QuantumCircuit.run()` simulates once and samples all shots** from the
764
+ resulting distribution, instead of re-simulating the whole circuit for every
765
+ shot (was O(shots x gates), now O(gates + shots)). Statistically identical for
766
+ independent projective Z-measurements; 20k shots on a 10-qubit circuit now
767
+ runs in ~50 ms. `run()` also accepts `use_gpu` / `precision`.
768
+
769
+ ### Fixed
770
+ - **Test integrity**: ~116 legacy tests across 10 files signalled pass/fail via
771
+ `return True/False`, which pytest ignores -- so they passed vacuously. Converted
772
+ to real `assert`s (all still pass, confirming the checks genuinely hold) and
773
+ removed the `PytestReturnNotNoneWarning`s.
774
+ - Registered the `aws` pytest marker (`pytest.ini`) so `-m "not aws"` is clean.
775
+
776
+ ## [0.6.1] - 2026-07-16
777
+
778
+ Release-hardening pass focused on correctness, performance, and robustness. No
779
+ breaking API changes.
780
+
781
+ ### Added
782
+ - **GPU state-vector simulation**: `QuantumCircuit.get_statevector(use_gpu=True,
783
+ precision='single'|'double')` runs the entire circuit on the GPU (CuPy) — the
784
+ state lives on the device across all gates with a single transfer back.
785
+ Verified identical to CPU in double precision; measured ~6x (double) and
786
+ 50-75x (single) vs CPU at 20-22 qubits on an RTX 5060.
787
+ - **Automatic Windows CUDA DLL discovery** so the GPU backend works out of the
788
+ box with the `cupy-cuda12x` + `nvidia-*-cu12` pip wheel setup.
789
+
790
+ ### Fixed
791
+ - **Import robustness**: a broken or version-incompatible optional dependency
792
+ (e.g. PennyLane against a mismatched JAX) no longer crashes
793
+ `import quantum_debugger`. Optional-integration guards now degrade gracefully
794
+ to `<FRAMEWORK>_AVAILABLE = False` instead of only catching `ImportError`.
795
+ - **QNN training**: `QuantumNeuralNetwork.fit` now uses the compiled optimizer
796
+ (Adam / SGD) instead of a hardcoded `params -= 0.01 * gradient` that ignored
797
+ `compile(...)`. Training now actually converges.
798
+ - **QNN readout**: the network output is now a proper Pauli-Z expectation
799
+ `<Z_0>` over the full distribution, rather than `P(|0...0>) - P(|1...1>)`
800
+ which discarded almost all amplitudes for >2 qubits.
801
+ - **AutoML**: `AutoQNN` now selects models on a held-out validation split (was
802
+ scoring on the training data — leakage) and refits the winning configuration
803
+ on all data.
804
+ - **QAOA**: the cost layer now applies genuine two-qubit ZZ interactions
805
+ (CNOT·RZ·CNOT) instead of single-qubit RZ rotations, so the ansatz can
806
+ entangle and reach the true MaxCut optima.
807
+ - **Hybrid (PyTorch)**: fixed a shape-mismatch crash in `HybridQNN` caused by a
808
+ duplicated output projection, and replaced the all-zero backward pass with
809
+ finite-difference gradients so the quantum layer (and any preceding classical
810
+ layers) actually train.
811
+ - Corrected two test bugs exposed once the suite became collectable
812
+ (a swapped-argument `rx` call and a sign error in a QAOA convergence check).
813
+ - **Windows CUDA DLL discovery**: with the common `cupy-cuda12x` + `nvidia-*-cu12`
814
+ wheel setup, the CUDA DLLs live under `site-packages/nvidia/*/bin` and are not
815
+ on the Windows DLL search path, so CuPy failed to load `nvrtc`/`cublas`. The
816
+ backend now adds those directories to `PATH` and the DLL search list before
817
+ importing CuPy, so the GPU backend works out of the box (verified on an
818
+ RTX 5060 / sm_120).
819
+
820
+ ### Reworked — placeholder features are now genuinely quantum
821
+ Several advertised features previously returned classical surrogates, random
822
+ values, or zero gradients. They are now real implementations, each verified:
823
+ - **Quantum fidelity kernel / QSVM**: `FidelityKernel` computes
824
+ `|<phi(x1)|phi(x2)>|^2` by simulating the real feature-map circuits (was a
825
+ classical RBF). Gram matrix verified symmetric, unit-diagonal, PSD.
826
+ `ProjectedKernel` is now the real reduced-density-matrix kernel.
827
+ - **Hybrid quantum layer** (`QuantumMiddleLayer`): forward is now a real
828
+ encoding + variational circuit measured in Z (was `cos(x + params)`), with
829
+ exact parameter-shift gradients wired into the PyTorch and TensorFlow layers
830
+ (were all-zero gradients). Gradients verified against finite differences.
831
+ - **Quantum GAN**: real variational generator circuit and a trainable
832
+ discriminator with exact BCE gradients (was a global-phase no-op generator and
833
+ a random discriminator). Generator demonstrably learns a target distribution.
834
+ - **Quantum RL**: real parameterized-circuit Q-function with parameter-shift TD
835
+ updates (was `tanh` of a dot product). Agent learns the gridworld to optimum.
836
+ - **Error mitigation**: genuine PEC (quasi-probability Monte Carlo that recovers
837
+ the ideal expectation), CDR (exact Clifford simulation + regression), Quantum
838
+ Natural Gradient (true Fubini-Study metric, matches analytic values), and ZNE
839
+ noise scaling by real unitary folding (preserves the logical unitary).
840
+ - **GPU module**: `DistributedQNN`/`DataParallelQNN` now genuinely train via real
841
+ data-parallel gradient averaging (base class no longer raises
842
+ `NotImplementedError`); mixed-precision `train_step` uses a real gradient (was
843
+ random). Multi-GPU wall-clock speedup still requires GPU hardware.
844
+
845
+ ### Changed
846
+ - **Core simulator performance**: `QuantumState.apply_gate` now applies gates by
847
+ tensor contraction (O(2**n) per gate) instead of materializing the full
848
+ 2**n x 2**n operator (O(4**n)). Results are numerically identical (verified
849
+ against the previous implementation over thousands of random configurations);
850
+ 16-qubit circuits that were previously infeasible now run in tens of ms.
851
+ - Reconciled version metadata: `__version__` is the single source of truth and
852
+ `setup.py` reads it (previously `0.4.2` in the package vs `0.6.0` in setup).
853
+
854
+ ## [0.4.2] - 2025-12-22
855
+
856
+ ### Added
857
+ - **Complete pytest migration**: All 200 legacy script-style tests converted to pytest format
858
+ - **Hardware profiles extended**: AWS Braket, Azure Quantum provider support
859
+ - **2025 hardware updates**: IBM Heron, Google Willow, IonQ Forte profiles
860
+ - **Advanced backend tests**: 8 edge case and performance tests
861
+ - **GPU backend support**: CuPy backend availability testing
862
+ - **Enhanced test coverage**: 656 comprehensive tests (all passing ✅)
863
+
864
+ ### Changed
865
+ - Migrated all legacy test files from script execution to pytest format
866
+ - Updated test structure for better CI/CD compatibility
867
+ - Enhanced backend validation with 6 comprehensive backend tests
868
+ - Improved hardware profile testing (18 tests total)
869
+
870
+ ### Fixed
871
+ - Test suite compatibility issues
872
+ - Backend detection for GPU/CuPy
873
+ - Hardware profile version tracking
874
+
875
+ ### Documentation
876
+ - Updated README.md with v0.4.2 features and test count
877
+ - Added comprehensive testing section in README
878
+ - Created FINAL_TEST_SUMMARY.md with complete 656 test breakdown
879
+ - Fixed all documentation links (tutorials, examples, LICENSE)
880
+ - Updated version numbers across all files
881
+
882
+ ### Testing
883
+ - **656 total tests** (all passing ✅)
884
+ - All script-style tests converted to pytest
885
+ - Complete test coverage documentation
886
+
887
+ ## [0.4.1] - 2024-12-XX
888
+
889
+ ### Added
890
+ - Additional QML features and optimizations
891
+ - Performance improvements
892
+
893
+ ## [0.4.0] - 2024-12-XX
894
+
895
+ ### Added
896
+ - **Quantum Machine Learning Module**
897
+ - Parameterized gates (RX, RY, RZ with trainable parameters)
898
+ - VQE algorithm for molecular chemistry
899
+ - QAOA for combinatorial optimization
900
+ - Training framework with 4 optimizers (Adam, SGD, SPSA, RMSprop)
901
+ - Gradient computation (parameter shift rule, finite differences)
902
+ - 316 comprehensive tests
903
+ - 3 tutorials, 4 example scripts
904
+
905
+ ### Changed
906
+ - Enhanced circuit profiling
907
+ - Improved state visualization
908
+
909
+ ## [0.3.0] - 2024-12-XX
910
+
911
+ ### Added
912
+ - Realistic noise models (4 types)
913
+ - Hardware profiles (IBM, Google, IonQ, Rigetti)
914
+ - Qiskit Aer validation
915
+ - 89 new tests
916
+
917
+ ## [0.2.0] - 2024-XX-XX
918
+
919
+ ### Added
920
+ - Bidirectional circuit conversion with Qiskit
921
+ - CP gate support
922
+ - 12-qubit support
923
+
924
+ ## [0.1.1] - 2024-12-03
925
+
926
+ ### Fixed
927
+ - Fixed SWAP gate matrix for little-endian qubit ordering
928
+ - Fixed CNOT gate matrix for little-endian qubit ordering
929
+ - Fixed Toffoli gate matrix for little-endian qubit ordering
930
+ - Fixed entanglement detection for Bell states
931
+ - Rewrote multi-qubit gate expansion algorithm using tensor products
932
+
933
+ ### Added
934
+ - 69 comprehensive tests (100% pass rate)
935
+ - Test suites: quickstart, advanced, comprehensive, extreme, validation, production, edge cases
936
+ - Numerical stability tests (100+ consecutive operations)
937
+ - Quantum mechanics validation tests
938
+ - Production readiness tests
939
+
940
+ ### Changed
941
+ - Improved gate expansion algorithm for better accuracy
942
+ - Enhanced test coverage to 69 tests across 7 test suites
943
+
944
+ ## [0.1.0] - 2024-11-30
945
+
946
+ ### Added
947
+ - Initial release
948
+ - Core quantum state representation
949
+ - 15+ quantum gates (H, X, Y, Z, S, T, RX, RY, RZ, PHASE, CNOT, CZ, SWAP, Toffoli)
950
+ - Step-through debugger with breakpoints
951
+ - Circuit profiler with optimization suggestions
952
+ - State visualization tools
953
+ - Bloch sphere representation
954
+ - Support for up to 15 qubits
955
+ - Example circuits and demos
956
+ - Comprehensive documentation