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