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.
- quantum_debugger-0.8.0/CHANGELOG.md +775 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/PKG-INFO +55 -24
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/README.md +53 -22
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/__init__.py +1 -1
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/__init__.py +143 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/arithmetic.py +114 -6
- quantum_debugger-0.8.0/quantum_debugger/algorithms/channel_capacity.py +98 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/cloning.py +68 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/contextuality.py +144 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/decoherence_free.py +95 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/discrimination.py +105 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/distillation.py +280 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/dynamical_decoupling.py +106 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/error_detection.py +111 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/geometric_phase.py +94 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/holevo.py +169 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/loss_robustness.py +56 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/magic_measures.py +60 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/magic_state.py +87 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/mbqc.py +114 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/metrology.py +26 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/nonlocality.py +109 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/perfect_code.py +114 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/petz.py +95 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/qec_noise.py +259 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/steane_code.py +276 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/uncertainty.py +82 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/weak_values.py +90 -0
- quantum_debugger-0.8.0/quantum_debugger/algorithms/zeno.py +105 -0
- quantum_debugger-0.8.0/quantum_debugger/density_matrix.py +631 -0
- quantum_debugger-0.8.0/quantum_debugger/stabilizer.py +336 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger.egg-info/PKG-INFO +55 -24
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger.egg-info/SOURCES.txt +46 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/setup.py +1 -1
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_arithmetic.py +31 -0
- quantum_debugger-0.8.0/tests/test_channel_capacity.py +72 -0
- quantum_debugger-0.8.0/tests/test_cloning.py +43 -0
- quantum_debugger-0.8.0/tests/test_contextuality.py +64 -0
- quantum_debugger-0.8.0/tests/test_decoherence_free.py +67 -0
- quantum_debugger-0.8.0/tests/test_density_matrix.py +600 -0
- quantum_debugger-0.8.0/tests/test_discrimination.py +88 -0
- quantum_debugger-0.8.0/tests/test_distillation.py +219 -0
- quantum_debugger-0.8.0/tests/test_dynamical_decoupling.py +53 -0
- quantum_debugger-0.8.0/tests/test_error_detection.py +76 -0
- quantum_debugger-0.8.0/tests/test_geometric_phase.py +73 -0
- quantum_debugger-0.8.0/tests/test_holevo.py +121 -0
- quantum_debugger-0.8.0/tests/test_loss_robustness.py +40 -0
- quantum_debugger-0.8.0/tests/test_magic_measures.py +65 -0
- quantum_debugger-0.8.0/tests/test_magic_state.py +66 -0
- quantum_debugger-0.8.0/tests/test_mbqc.py +75 -0
- quantum_debugger-0.8.0/tests/test_metrology.py +107 -0
- quantum_debugger-0.8.0/tests/test_nonlocality.py +70 -0
- quantum_debugger-0.8.0/tests/test_perfect_code.py +50 -0
- quantum_debugger-0.8.0/tests/test_petz.py +97 -0
- quantum_debugger-0.8.0/tests/test_qec_noise.py +137 -0
- quantum_debugger-0.8.0/tests/test_stabilizer.py +292 -0
- quantum_debugger-0.8.0/tests/test_steane_code.py +152 -0
- quantum_debugger-0.8.0/tests/test_uncertainty.py +76 -0
- quantum_debugger-0.8.0/tests/test_weak_values.py +70 -0
- quantum_debugger-0.8.0/tests/test_zeno.py +59 -0
- quantum_debugger-0.7.0/CHANGELOG.md +0 -393
- quantum_debugger-0.7.0/quantum_debugger/stabilizer.py +0 -178
- quantum_debugger-0.7.0/tests/test_metrology.py +0 -49
- quantum_debugger-0.7.0/tests/test_stabilizer.py +0 -100
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/AUTHORS.md +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/LICENSE +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/MANIFEST.in +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/examples/bell_state_debug.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/examples/benchmarks.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/examples/grover_profiling.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/examples/interactive_demo.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/examples/qaoa_maxcut_example.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/examples/qiskit_integration_demo.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/examples/qml_basic_example.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/examples/vqe_h2_example.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/amplitude_amplification.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/amplitude_estimation.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/bb84.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/bell_test.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/decomposition.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/error_correction.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/grover.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/grover_optimize.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/hamiltonian_simulation.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/hhl.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/maxcut.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/multicontrol.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/oracles.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/phase_estimation.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/protocols.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/qec_threshold.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/qft.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/quantum_counting.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/quantum_walk.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/randomized_benchmarking.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/sat_solver.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/shor.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/simon.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/spectroscopy.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/state_preparation.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/swap_test.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/algorithms/vqe_solver.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/backends/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/backends/_cuda_dll.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/backends/aws_backend.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/backends/base.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/backends/base_backend.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/backends/cupy_backend.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/backends/gpu_backend.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/backends/ibm_backend.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/backends/numba_backend.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/backends/numpy_backend.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/backends/sparse_backend.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/benchmarks/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/benchmarks/optimization_benchmarks.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/benchmarks/qml_benchmarks.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/benchmarks/report_generator.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/benchmarks/scalability_benchmarks.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/core/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/core/circuit.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/core/gates.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/core/quantum_state.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/debugger/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/debugger/breakpoints.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/debugger/debugger.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/debugger/inspector.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/gpu/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/gpu/memory.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/gpu/mixed_precision.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/gpu/multi_gpu.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/integrations/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/integrations/cirq_adapter.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/integrations/cirq_bridge.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/integrations/pennylane_bridge.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/integrations/qiskit_adapter.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/integrations/qiskit_bridge.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/mitigation/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/mitigation/core/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/mitigation/core/extrapolator.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/mitigation/core/folder.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/mitigation/zne.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/noise/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/noise/composite_noise.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/noise/hardware_profiles.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/noise/noise_helpers.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/noise/noise_models.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/noise/stochastic_sampler.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/optimization/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/optimization/circuit_compiler.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/optimization/gate_reduction.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/optimization/optimization_passes.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/optimization/transpiler.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/parallel/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/parallel/executor.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/profiler/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/profiler/metrics.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/profiler/profiler.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/advanced/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/advanced/ansatz_analysis.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/advanced/autoencoder.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/advanced/data_reuploading.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/advanced/qcnn.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/advanced/vqc.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/algorithms/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/algorithms/actor_critic.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/algorithms/dqn.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/algorithms/policy_gradient.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/algorithms/qaoa.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/algorithms/qgan.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/algorithms/qrl.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/algorithms/vqd.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/algorithms/vqe.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/ansatz/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/ansatz/excitation_preserving.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/ansatz/real_amplitudes.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/ansatz/strongly_entangling.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/ansatz/two_local.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/automl/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/automl/ansatz_selector.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/automl/architecture_search.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/automl/auto_qnn.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/automl/hyperparameter_tuner.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/data/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/data/dataset.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/data/feature_maps.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/error_mitigation/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/error_mitigation/zne.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/gates/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/gates/parameterized.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/hamiltonians/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/hamiltonians/molecular.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/hybrid/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/hybrid/layers.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/hybrid/pytorch_integration.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/hybrid/tensorflow_integration.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/kernels/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/kernels/alignment.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/kernels/qsvm.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/kernels/quantum_kernel.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/mitigation/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/mitigation/cdr.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/mitigation/error_characterization.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/mitigation/noise_models.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/mitigation/pec.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/optimizers/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/optimizers/advanced.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/optimizers/basics.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/optimizers/spsa.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/qnn/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/qnn/base.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/qnn/encoding.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/qnn/losses.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/qnn/network.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/qnn/variational.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/training/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/transfer/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/transfer/fine_tuning.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/transfer/model_zoo.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/transfer/pretrained.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/transfer/serialization.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/utils/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/qml/utils/gradients.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/tomography.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/visualization/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/visualization/bloch_sphere.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger/visualization/state_viz.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger.egg-info/dependency_links.txt +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger.egg-info/requires.txt +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/quantum_debugger.egg-info/top_level.txt +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/requirements.txt +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/setup.cfg +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/cirq/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/cirq/test_cirq_advanced.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/cirq/test_cirq_edge_cases.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/cirq/test_cirq_integration.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/conftest.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/integration/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/integration/test_integration.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/integration/test_qiskit_integration.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_actor_critic.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_advanced_algorithms.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_advanced_optimizers.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_advanced_qml.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_ansatz_library.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_automl.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_dataset.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_dqn.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_edge_cases.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_hamiltonians.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_hybrid.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_kernels.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_mitigation.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_policy_gradient.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_qaoa.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_qml_parameterized_gates.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_qnn.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_spsa.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_transfer.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_transfer_extended.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_vqd.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_vqe.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/qml/test_zne.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_algorithms.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_backends.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_bb84.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_bell_test.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_benchmarks.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_decomposition.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_error_correction.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_grover_optimize.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_hamiltonian_simulation.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_integrations.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_maxcut.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_multicontrol.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_optimization.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_protocols_shor.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_qec_threshold.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_randomized_benchmarking.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_sat_solver.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_simon.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_spectroscopy.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_state_preparation.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_tomography.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/test_vqe_solver.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/CONVERSION_TRACKER.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/__init__.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_advanced.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_backend_comprehensive.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_backend_integration.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_backends.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_backends_advanced.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_backends_comprehensive.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_backends_fast.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_circuit_noise.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_circuit_noise_advanced.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_circuit_noise_unique.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_compatibility.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_comprehensive.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_distribution.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_docstrings.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_error_handling.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_extreme.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_gpu_quick.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_hardware_profiles_extended.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_hardware_profiles_phase3.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_mitigation_comprehensive.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_mitigation_final.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_mitigation_observables.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_mitigation_zne.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_noise.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_noise_advanced.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_noise_extreme.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_noise_final.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_noise_performance.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_noise_quantum_info.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_noise_ultimate.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_parallel.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_performance.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_production.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_qiskit_complex.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_qiskit_extreme.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_qiskit_ultra.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_qml_advanced.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_qml_comprehensive.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_qml_memory.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_qml_threading.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_qml_tricky.py +0 -0
- {quantum_debugger-0.7.0 → quantum_debugger-0.8.0}/tests/unit/test_quickstart.py +0 -0
- {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
|