quantum-debugger 0.9.0__tar.gz → 1.0.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.9.0 → quantum_debugger-1.0.0}/CHANGELOG.md +166 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/PKG-INFO +25 -4
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/README.md +24 -3
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/__init__.py +6 -1
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/__init__.py +12 -0
- quantum_debugger-1.0.0/quantum_debugger/algorithms/tebd.py +141 -0
- quantum_debugger-1.0.0/quantum_debugger/mpo.py +97 -0
- quantum_debugger-1.0.0/quantum_debugger/mps.py +676 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/noise/noise_models.py +18 -5
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger.egg-info/PKG-INFO +25 -4
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger.egg-info/SOURCES.txt +8 -0
- quantum_debugger-1.0.0/tests/test_imaginary_tebd.py +72 -0
- quantum_debugger-1.0.0/tests/test_mpo.py +58 -0
- quantum_debugger-1.0.0/tests/test_mps.py +401 -0
- quantum_debugger-1.0.0/tests/test_mps_extensions.py +326 -0
- quantum_debugger-1.0.0/tests/test_tebd.py +74 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_noise.py +88 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/AUTHORS.md +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/LICENSE +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/MANIFEST.in +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/examples/bell_state_debug.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/examples/benchmarks.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/examples/grover_profiling.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/examples/interactive_demo.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/examples/qaoa_maxcut_example.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/examples/qiskit_integration_demo.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/examples/qml_basic_example.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/examples/vqe_h2_example.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/adiabatic.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/amplitude_amplification.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/amplitude_estimation.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/arithmetic.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/bb84.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/bell_test.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/channel_capacity.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/classical_shadows.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/cloning.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/contextuality.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/decoherence_free.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/decomposition.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/discrimination.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/distillation.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/dynamical_decoupling.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/entanglement_growth.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/entanglement_negativity.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/error_correction.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/error_detection.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/geometric_phase.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/grover.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/grover_optimize.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/hamiltonian_simulation.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/hhl.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/holevo.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/hubbard.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/imaginary_time.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/jordan_wigner.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/kitaev_chain.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/krylov.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/level_statistics.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/loschmidt.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/loss_robustness.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/magic_measures.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/magic_state.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/many_body_correlations.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/maxcut.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/mbqc.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/metrology.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/multicontrol.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/nonlocality.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/oracles.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/otoc.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/perfect_code.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/petz.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/phase_estimation.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/protocols.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/qec_noise.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/qec_threshold.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/qft.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/quantum_counting.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/quantum_phase_transition.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/quantum_walk.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/randomized_benchmarking.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/sat_solver.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/schmidt.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/shor.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/simon.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/spectroscopy.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/spin_squeezing.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/ssh_model.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/state_preparation.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/steane_code.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/swap_test.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/thermal.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/uncertainty.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/vqe_solver.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/weak_values.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/algorithms/zeno.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/backends/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/backends/_cuda_dll.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/backends/aws_backend.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/backends/base.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/backends/base_backend.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/backends/cupy_backend.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/backends/gpu_backend.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/backends/ibm_backend.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/backends/numba_backend.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/backends/numpy_backend.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/backends/sparse_backend.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/benchmarks/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/benchmarks/optimization_benchmarks.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/benchmarks/qml_benchmarks.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/benchmarks/report_generator.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/benchmarks/scalability_benchmarks.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/core/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/core/circuit.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/core/gates.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/core/quantum_state.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/debugger/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/debugger/breakpoints.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/debugger/debugger.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/debugger/inspector.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/density_matrix.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/gpu/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/gpu/memory.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/gpu/mixed_precision.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/gpu/multi_gpu.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/integrations/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/integrations/cirq_adapter.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/integrations/cirq_bridge.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/integrations/pennylane_bridge.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/integrations/qiskit_adapter.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/integrations/qiskit_bridge.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/mitigation/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/mitigation/core/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/mitigation/core/extrapolator.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/mitigation/core/folder.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/mitigation/zne.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/noise/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/noise/composite_noise.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/noise/hardware_profiles.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/noise/noise_helpers.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/noise/stochastic_sampler.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/optimization/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/optimization/circuit_compiler.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/optimization/gate_reduction.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/optimization/optimization_passes.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/optimization/transpiler.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/parallel/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/parallel/executor.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/profiler/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/profiler/metrics.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/profiler/profiler.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/advanced/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/advanced/ansatz_analysis.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/advanced/autoencoder.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/advanced/data_reuploading.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/advanced/qcnn.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/advanced/vqc.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/algorithms/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/algorithms/actor_critic.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/algorithms/dqn.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/algorithms/policy_gradient.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/algorithms/qaoa.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/algorithms/qgan.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/algorithms/qrl.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/algorithms/vqd.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/algorithms/vqe.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/ansatz/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/ansatz/excitation_preserving.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/ansatz/real_amplitudes.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/ansatz/strongly_entangling.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/ansatz/two_local.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/automl/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/automl/ansatz_selector.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/automl/architecture_search.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/automl/auto_qnn.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/automl/hyperparameter_tuner.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/data/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/data/dataset.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/data/feature_maps.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/error_mitigation/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/error_mitigation/zne.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/gates/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/gates/parameterized.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/hamiltonians/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/hamiltonians/molecular.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/hybrid/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/hybrid/layers.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/hybrid/pytorch_integration.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/hybrid/tensorflow_integration.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/kernels/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/kernels/alignment.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/kernels/qsvm.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/kernels/quantum_kernel.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/mitigation/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/mitigation/cdr.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/mitigation/error_characterization.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/mitigation/noise_models.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/mitigation/pec.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/optimizers/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/optimizers/advanced.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/optimizers/basics.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/optimizers/spsa.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/qnn/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/qnn/base.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/qnn/encoding.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/qnn/losses.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/qnn/network.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/qnn/variational.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/training/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/transfer/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/transfer/fine_tuning.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/transfer/model_zoo.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/transfer/pretrained.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/transfer/serialization.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/utils/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/qml/utils/gradients.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/stabilizer.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/tomography.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/visualization/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/visualization/bloch_sphere.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger/visualization/state_viz.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger.egg-info/dependency_links.txt +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger.egg-info/requires.txt +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/quantum_debugger.egg-info/top_level.txt +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/requirements.txt +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/setup.cfg +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/setup.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/cirq/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/cirq/test_cirq_advanced.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/cirq/test_cirq_edge_cases.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/cirq/test_cirq_integration.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/conftest.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/integration/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/integration/test_integration.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/integration/test_qiskit_integration.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_actor_critic.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_advanced_algorithms.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_advanced_optimizers.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_advanced_qml.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_ansatz_library.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_automl.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_dataset.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_dqn.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_edge_cases.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_hamiltonians.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_hybrid.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_kernels.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_mitigation.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_policy_gradient.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_qaoa.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_qml_parameterized_gates.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_qnn.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_spsa.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_transfer.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_transfer_extended.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_vqd.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_vqe.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/qml/test_zne.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_adiabatic.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_algorithms.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_arithmetic.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_backends.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_bb84.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_bell_test.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_benchmarks.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_channel_capacity.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_classical_shadows.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_cloning.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_contextuality.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_decoherence_free.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_decomposition.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_density_matrix.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_discrimination.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_distillation.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_dynamical_decoupling.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_entanglement_growth.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_error_correction.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_error_detection.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_geometric_phase.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_grover_optimize.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_hamiltonian_simulation.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_holevo.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_hubbard.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_imaginary_time.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_integrations.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_jordan_wigner.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_kitaev_chain.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_krylov.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_level_statistics.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_loschmidt.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_loss_robustness.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_magic_measures.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_magic_state.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_many_body_extra.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_maxcut.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_mbqc.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_metrology.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_multicontrol.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_nonlocality.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_optimization.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_otoc.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_pauli_decompose.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_perfect_code.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_petz.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_protocols_shor.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_qec_noise.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_qec_threshold.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_randomized_benchmarking.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_sat_solver.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_schmidt.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_simon.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_spectroscopy.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_spin_squeezing.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_stabilizer.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_state_preparation.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_steane_code.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_thermal.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_tomography.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_trotter_scaling.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_uncertainty.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_vqe_solver.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_weak_values.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/test_zeno.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/CONVERSION_TRACKER.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/__init__.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_advanced.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_backend_comprehensive.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_backend_integration.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_backends.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_backends_advanced.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_backends_comprehensive.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_backends_fast.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_circuit_noise.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_circuit_noise_advanced.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_circuit_noise_unique.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_compatibility.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_comprehensive.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_distribution.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_docstrings.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_error_handling.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_extreme.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_gpu_quick.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_hardware_profiles_extended.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_hardware_profiles_phase3.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_mitigation_comprehensive.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_mitigation_final.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_mitigation_observables.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_mitigation_zne.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_noise_advanced.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_noise_extreme.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_noise_final.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_noise_performance.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_noise_quantum_info.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_noise_ultimate.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_parallel.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_performance.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_production.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_qiskit_complex.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_qiskit_extreme.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_qiskit_ultra.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_qml_advanced.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_qml_comprehensive.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_qml_memory.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_qml_threading.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_qml_tricky.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_quickstart.py +0 -0
- {quantum_debugger-0.9.0 → quantum_debugger-1.0.0}/tests/unit/test_validation.py +0 -0
|
@@ -5,6 +5,172 @@ All notable changes to QuantumDebugger will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.0.0]
|
|
9
|
+
|
|
10
|
+
Theme: scale & tensor networks — breaking the exponential state-vector wall. The
|
|
11
|
+
headline is a full **matrix product state** engine (`quantum_debugger.mps.MPS`):
|
|
12
|
+
construction from a state vector or a `QuantumCircuit`, exact single-qubit and
|
|
13
|
+
SVD-truncated two-qubit gates (nearest-neighbour and long-range via SWAP networks),
|
|
14
|
+
and a complete `O(n·chi^2)` readout toolkit — expectation values, arbitrary
|
|
15
|
+
Pauli-string and Pauli-sum-Hamiltonian energies, correlations, entanglement entropy
|
|
16
|
+
across every bond, overlap/fidelity between states, and exact Born-rule sampling —
|
|
17
|
+
none of which ever forms the dense state. On top of it, TEBD gives real-time dynamics
|
|
18
|
+
and imaginary-time DMRG-style ground states. Every MPS operation is verified against
|
|
19
|
+
the state-vector simulator; the engine scales to 100-qubit GHZ states, 40-qubit
|
|
20
|
+
quenches, and 24-qubit ground states — moving the library from "≤25 qubits exactly"
|
|
21
|
+
to "hundreds of qubits when entanglement allows." (The major-version bump the
|
|
22
|
+
tensor-network capability earns.)
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
- **MPS two-site expectation** (`MPS.two_site_expectation`) — the expectation of any
|
|
26
|
+
two-qubit operator (4x4) via the two-qubit reduced density matrix `Tr(O rho_ab)`,
|
|
27
|
+
matching the dense value and `<ZZ>` correlations — the primitive for bond energies.
|
|
28
|
+
- **MPS truncation error & normalization** (`MPS.truncation_error`, `MPS.normalize`) —
|
|
29
|
+
the weight lost when compressing to a target bond dimension (`1 - fidelity`, exactly
|
|
30
|
+
0 for a GHZ at bond ≥ 2, decreasing as the bond grows) and in-place unit
|
|
31
|
+
normalization — the diagnostics that make bond-dimension choices principled.
|
|
32
|
+
- **MPS two-qubit correlations** (`MPS.two_qubit_rdm`, `MPS.mutual_information`,
|
|
33
|
+
`MPS.concurrence`) — the reduced density matrix of any qubit pair assembled from
|
|
34
|
+
their 16 two-qubit Pauli expectations (scalable, matching the dense partial trace),
|
|
35
|
+
and the pairwise mutual information and Wootters concurrence from it (a Bell pair
|
|
36
|
+
giving 2 bits and concurrence 1, a product pair giving 0).
|
|
37
|
+
- **MPS amplitudes & basis states** (`MPS.amplitude`, `MPS.probability`,
|
|
38
|
+
`MPS.from_bitstring`, `MPS.most_probable`) — the amplitude `<bits|psi>` of any
|
|
39
|
+
computational-basis string by contracting fixed-bit tensor slices (`O(n·chi^2)`,
|
|
40
|
+
matching the dense value, probabilities summing to 1), a basis-state constructor,
|
|
41
|
+
and the most-probable outcome from sampling (a GHZ returning `0000`/`1111` at
|
|
42
|
+
probability 0.5).
|
|
43
|
+
- **Heisenberg MPO** (`mpo.heisenberg_mpo`) — the bond-dimension-5 matrix product
|
|
44
|
+
operator for `H = J sum (XX + YY + ZZ)`, verified to contract to the exact dense
|
|
45
|
+
Heisenberg Hamiltonian.
|
|
46
|
+
- **MPS Bloch vectors & purity profile** (`MPS.bloch_vector`, `MPS.purity_profile`) —
|
|
47
|
+
each qubit's `(<X>,<Y>,<Z>)` and its purity `Tr(rho_i^2)` (a GHZ giving zero Bloch
|
|
48
|
+
vectors and 0.5 purity everywhere, a product state giving unit purity) — a local
|
|
49
|
+
read of how entangled each site is.
|
|
50
|
+
- **MPS structure factor & magnetization** (`MPS.structure_factor`,
|
|
51
|
+
`MPS.total_magnetization`, `MPS.schmidt_gap`) — the static structure factor
|
|
52
|
+
`S(k) = (1/n) sum e^{ik(i-j)} <O_i O_j>` (verified against the dense computation and
|
|
53
|
+
peaking at `S(0)=n` for a ferromagnet), the summed magnetization, and the
|
|
54
|
+
entanglement-spectrum Schmidt gap (an order parameter that closes at a transition).
|
|
55
|
+
- **Apply an MPO to an MPS** (`MPS.apply_mpo`, `MPS.expectation_mpo`) — compute
|
|
56
|
+
`H|psi>` by contracting a matrix product operator into the state (bond dimensions
|
|
57
|
+
multiply, optionally recompressed), verified to match the dense `H·psi`; plus a
|
|
58
|
+
convenience `expectation_mpo` matching `MPS.energy`.
|
|
59
|
+
- **MPS reduced density matrix & entanglement spectrum** (`MPS.single_qubit_rdm`,
|
|
60
|
+
`MPS.entanglement_spectrum`) — a qubit's reduced density matrix from its Pauli
|
|
61
|
+
expectations (scalable, matching the dense partial trace) and the full Schmidt
|
|
62
|
+
spectrum across any bond (a Bell cut giving `[0.707, 0.707]`, squares summing to 1).
|
|
63
|
+
- **Matrix Product Operators** (`quantum_debugger.mpo`: `tfim_mpo`, `mpo_expectation`,
|
|
64
|
+
`mpo_to_matrix`) — the operator analogue of an MPS: a Hamiltonian as a chain of
|
|
65
|
+
rank-4 tensors (the TFIM needs only bond dimension 3), so `<psi|H|psi>` on a large
|
|
66
|
+
MPS costs `O(n·chi^2·D^2)` with no dense operator. Verified: the MPO contracts to the
|
|
67
|
+
exact dense TFIM Hamiltonian, its expectation matches both the dense and the
|
|
68
|
+
`MPS.energy` value, and a 30-qubit GHZ gives the exact `-J(n-1)`.
|
|
69
|
+
- **MPS construction helpers** (`MPS.from_product`, `MPS.random`) — build a product
|
|
70
|
+
state from per-qubit amplitudes (bond dimension 1) or a reproducible random MPS at a
|
|
71
|
+
target bond dimension; verified normalized with the expected structure.
|
|
72
|
+
- **MPS linear algebra** (`MPS.add`, `MPS.compress`) — sum two MPS by the
|
|
73
|
+
direct-sum-of-bonds construction (matching the dense `(a+b)`), and recompress to a
|
|
74
|
+
smaller bond dimension (a GHZ compresses to bond 2 losslessly, fidelity 1).
|
|
75
|
+
- **MPS magnetization & correlation profiles** (`MPS.magnetization_profile`,
|
|
76
|
+
`MPS.correlation_profile`) — `<O_i>` on every site and the spatial correlation
|
|
77
|
+
function `<O_a(ref) O_b(j)>` by contraction; a GHZ gives zero magnetization and unit
|
|
78
|
+
correlation across the chain.
|
|
79
|
+
- **MPS energy variance** (`MPS.variance`) — `<H^2> - <H>^2` of a Pauli-sum
|
|
80
|
+
Hamiltonian, exactly 0 on an eigenstate and positive off it — the convergence check
|
|
81
|
+
for tensor-network ground-state methods.
|
|
82
|
+
- **MPS Renyi entanglement entropy** (`MPS.renyi_entropy`) — Renyi-`alpha` entropy
|
|
83
|
+
across any bond from the canonicalized Schmidt spectrum (`alpha=1` recovers von
|
|
84
|
+
Neumann, `alpha=2` the collision entropy), verified non-increasing in `alpha`.
|
|
85
|
+
- **MPS Hamiltonian energy** (`MPS.energy`) — evaluate `<psi|H|psi>` for any
|
|
86
|
+
Hamiltonian given as `(coefficient, pauli_string)` terms (the `pauli_decompose` /
|
|
87
|
+
VQE format) on a matrix product state, summing Pauli-string expectations by
|
|
88
|
+
contraction. Verified against dense for TFIM and a Pauli-decomposed Fermi-Hubbard
|
|
89
|
+
Hamiltonian, and a GHZ gives the exact `-J(n-1)` — connecting the chemistry/spin
|
|
90
|
+
Hamiltonians of 0.9 to the large-scale MPS engine.
|
|
91
|
+
- **MPS Pauli-string expectation** (`MPS.expectation_pauli`) — the expectation of any
|
|
92
|
+
multi-qubit Pauli observable `<psi|P|psi>` on a matrix product state by
|
|
93
|
+
`O(n·chi^3)` contraction. Verified against the dense value for all 256 Pauli strings
|
|
94
|
+
on 4 qubits, and a 20-qubit GHZ correctly returns `<X^20> = 1` (its stabilizer) —
|
|
95
|
+
measuring arbitrary observables on systems too large to store densely.
|
|
96
|
+
- **Circuit → MPS runner** (`MPS.from_circuit`) — run an existing `QuantumCircuit` on
|
|
97
|
+
the tensor-network engine: single-qubit gates applied exactly, two-qubit gates via
|
|
98
|
+
the long-range SWAP path (either control/target ordering handled by re-indexing the
|
|
99
|
+
4x4 matrix), three-plus-qubit gates rejected with a clear message to decompose first.
|
|
100
|
+
Verified to reproduce the state-vector result exactly on mixed random circuits and
|
|
101
|
+
reversed-control CNOTs, with a GHZ circuit staying at bond dimension 2. (Note: the
|
|
102
|
+
scale ceiling here is the `QuantumCircuit` object itself, which allocates a dense
|
|
103
|
+
state; to exceed it, drive the `MPS` directly.)
|
|
104
|
+
- **MPS long-range two-qubit gates** (`MPS.apply_two_long_range`) — apply a two-qubit
|
|
105
|
+
gate to *any* pair of qubits (not just neighbours) via a nearest-neighbour SWAP
|
|
106
|
+
ladder: swap the qubits together, apply the gate, swap back. Verified against the
|
|
107
|
+
state-vector simulator for all pairs and asymmetric random unitaries, correctly
|
|
108
|
+
delegating for adjacent qubits, and building a long-range Bell pair between qubits 0
|
|
109
|
+
and 9 — so arbitrary-connectivity circuits run on the MPS engine.
|
|
110
|
+
- **MPS overlap & fidelity** (`MPS.overlap`, `MPS.fidelity`) — the inner product
|
|
111
|
+
`<phi|psi>` of two matrix product states by the double-layer `O(n·chi^3)`
|
|
112
|
+
contraction, and the state fidelity from it. Verified to match the dense inner
|
|
113
|
+
product exactly, self-fidelity is 1 (including a 40-qubit GHZ), and orthogonal states
|
|
114
|
+
give zero overlap — comparing tensor-network states without ever forming them
|
|
115
|
+
densely.
|
|
116
|
+
- **MPS entanglement entropy** (`MPS.bond_entropies`, `MPS.entanglement_entropy`) —
|
|
117
|
+
the entanglement entropy across every bond, read from the Schmidt spectrum by
|
|
118
|
+
canonicalizing the network (right-to-left then left-to-right SVD sweeps), scaling to
|
|
119
|
+
large `n` with no dense state. Verified to match the dense density-matrix
|
|
120
|
+
entanglement entropy exactly at every cut; a product state gives 0, a GHZ exactly 1
|
|
121
|
+
bit across every bond — including a 60-qubit GHZ whose full entropy profile is
|
|
122
|
+
computed instantly.
|
|
123
|
+
- **MPS measurement sampling** (`MPS.sample`) — draw computational-basis shots from a
|
|
124
|
+
matrix product state by exact sequential conditional sampling with precomputed right
|
|
125
|
+
environments, `O(shots·n·chi^2)`, never forming the dense state. Verified: the
|
|
126
|
+
empirical distribution matches the dense Born rule to within shot noise on random
|
|
127
|
+
states, Bell/GHZ give only their correlated outcomes, a product state is
|
|
128
|
+
deterministic, and shot counts are conserved — measurement statistics from systems
|
|
129
|
+
far too large to store as a state vector.
|
|
130
|
+
- **Imaginary-time TEBD ground states** (`algorithms.imaginary_tebd_ground_state`,
|
|
131
|
+
`tfim_mps_energy`) — DMRG-style ground-state search on the MPS: apply imaginary-time
|
|
132
|
+
bond gates `e^{-h dtau}` (cooling), renormalize, and settle into the ground state.
|
|
133
|
+
Verified against exact diagonalization (error < 5e-3 for n = 4/6/8, improving with
|
|
134
|
+
finer steps), respects the variational lower bound, and finds the ground state of a
|
|
135
|
+
**24-qubit** chain that no dense diagonalizer could reach — with the energy per site
|
|
136
|
+
extensive across sizes. `tfim_mps_energy` reads the TFIM energy off any MPS by
|
|
137
|
+
contraction, matching the dense value exactly.
|
|
138
|
+
- **TEBD time evolution** (`algorithms.tebd_tfim`, `tebd_magnetization`,
|
|
139
|
+
`tfim_bond_gate`) — real-time many-body dynamics on the MPS: Trotterize
|
|
140
|
+
`e^{-iHt}` into two-site gates, apply them even-then-odd, and let the SVD truncation
|
|
141
|
+
bound the bond dimension. Verified to match exact state-vector evolution to fidelity
|
|
142
|
+
> 0.9999 on small TFIM chains (finer Trotter steps improving it), runs a 30-qubit
|
|
143
|
+
quench beyond the dense simulator's reach, keeps the bond capped at `max_bond`, and
|
|
144
|
+
reproduces the physics — a vanishing field freezes the magnetization (`|0...0>` is an
|
|
145
|
+
eigenstate) while a transverse field tilts the spins.
|
|
146
|
+
- **Matrix Product State simulator** (`quantum_debugger.mps.MPS`) — the 1.0 flagship:
|
|
147
|
+
a tensor-network engine that breaks the exponential state-vector wall for
|
|
148
|
+
low-entanglement states. Represents an n-qubit state as a chain of rank-3 tensors
|
|
149
|
+
with bond dimension `chi` (`O(n·chi^2)` memory instead of `2^n`), applies
|
|
150
|
+
single-qubit gates exactly and neighbouring two-qubit gates by SVD with truncation
|
|
151
|
+
to `max_bond` (the DMRG/TEBD approximation), and computes norms, expectation values,
|
|
152
|
+
and two-point correlations by `O(n·chi^3)` contraction — never forming the dense
|
|
153
|
+
state. Verified: exact state-vector roundtrip, single- and two-qubit gates
|
|
154
|
+
(including asymmetric random unitaries) match the state-vector simulator to 1e-10,
|
|
155
|
+
bond dimensions correctly detect structure (product → 1, GHZ → 2), and a **100-qubit
|
|
156
|
+
GHZ** builds instantly at bond dimension 2 with correct `<Z0 Z99> = 1`, `<X0> = 0` —
|
|
157
|
+
a `2^100`-amplitude state held in a handful of small tensors.
|
|
158
|
+
|
|
159
|
+
## [0.9.1]
|
|
160
|
+
|
|
161
|
+
Theme: correctness patch for the depolarizing noise channel.
|
|
162
|
+
|
|
163
|
+
### Fixed
|
|
164
|
+
- **`DepolarizingNoise.get_kraus_operators()`** now implements the same channel as
|
|
165
|
+
`DepolarizingNoise.apply()` and the class docstring — the Pauli-error convention
|
|
166
|
+
`ρ → (1−p)ρ + (p/3)(XρX + YρY + ZρZ)`, giving `K₀ = √(1−p)·I` and `K₁₋₃ = √(p/3)·{X, Y, Z}`.
|
|
167
|
+
It previously used a `√(p/4)` weighting (the uniform `ρ → (1−p)ρ + pI/2` convention), which
|
|
168
|
+
agrees with `apply()` only under the substitution `p → 4p/3`. Because
|
|
169
|
+
`StochasticNoiseSampler` consumes the Kraus path, Monte-Carlo–sampled depolarizing noise was
|
|
170
|
+
silently `4/3×` too strong for a given `p`. The operators remain trace-preserving
|
|
171
|
+
(`Σ Kᵢ†Kᵢ = I`). Added channel-equivalence, trace-preservation, edge-case, and sampler
|
|
172
|
+
regression tests. (Present in 0.8.0 and 0.9.0; fixed here.)
|
|
173
|
+
|
|
8
174
|
## [0.9.0]
|
|
9
175
|
|
|
10
176
|
Theme: quantum chemistry, many-body physics & advanced simulation. Fermionic systems
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quantum-debugger
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: A quantum simulation and debugging toolkit: state-vector, Clifford/stabilizer, and density-matrix (open-systems) engines, with a broad algorithm library, error correction under noise, quantum machine learning, GPU acceleration, and multi-framework support (Qiskit, PennyLane, Cirq, TensorFlow, PyTorch).
|
|
5
5
|
Home-page: https://github.com/Raunakg2005/quantum-debugger
|
|
6
6
|
Author: Raunak Kumar Gupta
|
|
@@ -84,7 +84,28 @@ Dynamic: summary
|
|
|
84
84
|
[](https://python.org)
|
|
85
85
|
[](LICENSE)
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
## What's New in v1.0.0
|
|
88
|
+
|
|
89
|
+
Scale & tensor networks — **breaking the exponential state-vector wall**:
|
|
90
|
+
|
|
91
|
+
- **Matrix Product State Simulator (`MPS`)** — `O(n·χ²)` memory instead of `2ⁿ`. Represents large, lightly-entangled quantum systems (e.g. **100-qubit GHZ states**, area-law ground states) with exact single-qubit gates, SVD-truncated two-qubit gates, and long-range connectivity via SWAP networks.
|
|
92
|
+
- **Matrix Product Operators (`MPO`)** — compact tensor chains for TFIM (`tfim_mpo`) and Heisenberg (`heisenberg_mpo`) models; evaluate `<ψ|H|ψ>` in `O(n·χ²·D²)` time without dense matrices.
|
|
93
|
+
- **TEBD Real-Time Dynamics** (`tebd_tfim`, `tebd_magnetization`) — Trotterized time evolution on the MPS engine with automatic SVD bond truncation.
|
|
94
|
+
- **Imaginary-Time DMRG-Style Ground States** (`imaginary_tebd_ground_state`) — cool MPS into true ground states on 24+ qubit chains unreachable by dense diagonalizers.
|
|
95
|
+
- **Arbitrary Pauli & Energy Readout** — `MPS.expectation_pauli` and `MPS.energy` evaluate arbitrary Pauli strings and Hamiltonians by tensor contraction.
|
|
96
|
+
- **Born-Rule Measurement Sampling** (`MPS.sample`) — sequential conditional sampling with precomputed environments, drawing shots directly from the MPS.
|
|
97
|
+
- **Circuit-to-MPS Converter** (`MPS.from_circuit`) — execute `QuantumCircuit` instances directly on the tensor-network engine.
|
|
98
|
+
|
|
99
|
+
See the [Matrix Product States Guide](docs/mps_guide.md) and [CHANGELOG.md](CHANGELOG.md).
|
|
100
|
+
|
|
101
|
+
## What's New in v0.9.1
|
|
102
|
+
|
|
103
|
+
Correctness patch: **`DepolarizingNoise.get_kraus_operators()`** now implements the same
|
|
104
|
+
channel as `apply()` and the class docstring — the Pauli-error convention
|
|
105
|
+
`ρ → (1−p)ρ + (p/3)(XρX + YρY + ZρZ)` (`K₀ = √(1−p)·I`, `K₁₋₃ = √(p/3)·{X, Y, Z}`). The old
|
|
106
|
+
`√(p/4)` weighting made `StochasticNoiseSampler`'s Monte-Carlo depolarizing noise `4/3×` too
|
|
107
|
+
strong for a given `p`. Trace preservation is unchanged; channel-equivalence and sampler
|
|
108
|
+
regression tests added. See [CHANGELOG.md](CHANGELOG.md).
|
|
88
109
|
|
|
89
110
|
## What's New in v0.9.0
|
|
90
111
|
|
|
@@ -490,5 +511,5 @@ If you use quantum-debugger in your research, please cite:
|
|
|
490
511
|
|
|
491
512
|
---
|
|
492
513
|
|
|
493
|
-
**Version:** 0.
|
|
494
|
-
**Last Updated:**
|
|
514
|
+
**Version:** 1.0.0 (latest on PyPI) · 0.9.1, 0.9.0, 0.8.0 (previous)
|
|
515
|
+
**Last Updated:** September 2026
|
|
@@ -9,7 +9,28 @@
|
|
|
9
9
|
[](https://python.org)
|
|
10
10
|
[](LICENSE)
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## What's New in v1.0.0
|
|
13
|
+
|
|
14
|
+
Scale & tensor networks — **breaking the exponential state-vector wall**:
|
|
15
|
+
|
|
16
|
+
- **Matrix Product State Simulator (`MPS`)** — `O(n·χ²)` memory instead of `2ⁿ`. Represents large, lightly-entangled quantum systems (e.g. **100-qubit GHZ states**, area-law ground states) with exact single-qubit gates, SVD-truncated two-qubit gates, and long-range connectivity via SWAP networks.
|
|
17
|
+
- **Matrix Product Operators (`MPO`)** — compact tensor chains for TFIM (`tfim_mpo`) and Heisenberg (`heisenberg_mpo`) models; evaluate `<ψ|H|ψ>` in `O(n·χ²·D²)` time without dense matrices.
|
|
18
|
+
- **TEBD Real-Time Dynamics** (`tebd_tfim`, `tebd_magnetization`) — Trotterized time evolution on the MPS engine with automatic SVD bond truncation.
|
|
19
|
+
- **Imaginary-Time DMRG-Style Ground States** (`imaginary_tebd_ground_state`) — cool MPS into true ground states on 24+ qubit chains unreachable by dense diagonalizers.
|
|
20
|
+
- **Arbitrary Pauli & Energy Readout** — `MPS.expectation_pauli` and `MPS.energy` evaluate arbitrary Pauli strings and Hamiltonians by tensor contraction.
|
|
21
|
+
- **Born-Rule Measurement Sampling** (`MPS.sample`) — sequential conditional sampling with precomputed environments, drawing shots directly from the MPS.
|
|
22
|
+
- **Circuit-to-MPS Converter** (`MPS.from_circuit`) — execute `QuantumCircuit` instances directly on the tensor-network engine.
|
|
23
|
+
|
|
24
|
+
See the [Matrix Product States Guide](docs/mps_guide.md) and [CHANGELOG.md](CHANGELOG.md).
|
|
25
|
+
|
|
26
|
+
## What's New in v0.9.1
|
|
27
|
+
|
|
28
|
+
Correctness patch: **`DepolarizingNoise.get_kraus_operators()`** now implements the same
|
|
29
|
+
channel as `apply()` and the class docstring — the Pauli-error convention
|
|
30
|
+
`ρ → (1−p)ρ + (p/3)(XρX + YρY + ZρZ)` (`K₀ = √(1−p)·I`, `K₁₋₃ = √(p/3)·{X, Y, Z}`). The old
|
|
31
|
+
`√(p/4)` weighting made `StochasticNoiseSampler`'s Monte-Carlo depolarizing noise `4/3×` too
|
|
32
|
+
strong for a given `p`. Trace preservation is unchanged; channel-equivalence and sampler
|
|
33
|
+
regression tests added. See [CHANGELOG.md](CHANGELOG.md).
|
|
13
34
|
|
|
14
35
|
## What's New in v0.9.0
|
|
15
36
|
|
|
@@ -415,5 +436,5 @@ If you use quantum-debugger in your research, please cite:
|
|
|
415
436
|
|
|
416
437
|
---
|
|
417
438
|
|
|
418
|
-
**Version:** 0.
|
|
419
|
-
**Last Updated:**
|
|
439
|
+
**Version:** 1.0.0 (latest on PyPI) · 0.9.1, 0.9.0, 0.8.0 (previous)
|
|
440
|
+
**Last Updated:** September 2026
|
|
@@ -13,7 +13,7 @@ Features:
|
|
|
13
13
|
- Hardware profile support
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
-
__version__ = "0.
|
|
16
|
+
__version__ = "1.0.0"
|
|
17
17
|
__author__ = "Raunak Kumar Gupta"
|
|
18
18
|
__license__ = "MIT"
|
|
19
19
|
|
|
@@ -58,6 +58,9 @@ from .mitigation import (
|
|
|
58
58
|
adaptive_fold,
|
|
59
59
|
)
|
|
60
60
|
|
|
61
|
+
# Tensor Networks / Matrix Product States (v1.0.0)
|
|
62
|
+
from .mps import MPS
|
|
63
|
+
|
|
61
64
|
# Optional integrations
|
|
62
65
|
try:
|
|
63
66
|
from .integrations import QiskitAdapter
|
|
@@ -79,6 +82,8 @@ __all__ = [
|
|
|
79
82
|
"CircuitMetrics",
|
|
80
83
|
"StateVisualizer",
|
|
81
84
|
"BlochSphere",
|
|
85
|
+
# Tensor Networks (v1.0.0)
|
|
86
|
+
"MPS",
|
|
82
87
|
# Noise Models (v0.3.0)
|
|
83
88
|
"DepolarizingNoise",
|
|
84
89
|
"AmplitudeDamping",
|
|
@@ -208,6 +208,13 @@ from .schmidt import (
|
|
|
208
208
|
truncation_fidelity,
|
|
209
209
|
area_law_compressibility,
|
|
210
210
|
)
|
|
211
|
+
from .tebd import (
|
|
212
|
+
tfim_bond_gate,
|
|
213
|
+
tebd_tfim,
|
|
214
|
+
tebd_magnetization,
|
|
215
|
+
tfim_mps_energy,
|
|
216
|
+
imaginary_tebd_ground_state,
|
|
217
|
+
)
|
|
211
218
|
from .ssh_model import (
|
|
212
219
|
ssh_hamiltonian,
|
|
213
220
|
ssh_winding_number,
|
|
@@ -440,6 +447,11 @@ __all__ = [
|
|
|
440
447
|
"schmidt_decomposition",
|
|
441
448
|
"truncation_fidelity",
|
|
442
449
|
"area_law_compressibility",
|
|
450
|
+
"tfim_bond_gate",
|
|
451
|
+
"tebd_tfim",
|
|
452
|
+
"tebd_magnetization",
|
|
453
|
+
"tfim_mps_energy",
|
|
454
|
+
"imaginary_tebd_ground_state",
|
|
443
455
|
# SSH topological insulator
|
|
444
456
|
"ssh_hamiltonian",
|
|
445
457
|
"ssh_winding_number",
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"""
|
|
2
|
+
TEBD -- Time-Evolving Block Decimation (dynamics on a matrix product state)
|
|
3
|
+
|
|
4
|
+
Real-time evolution of a many-body state under a nearest-neighbour Hamiltonian, done
|
|
5
|
+
directly on a matrix product state. Trotterize ``e^{-i H t}`` into two-site gates
|
|
6
|
+
``e^{-i h_{j,j+1} dt}``, apply them to the MPS (even bonds, then odd bonds), and let
|
|
7
|
+
the built-in SVD truncation keep the bond dimension bounded. As long as the state
|
|
8
|
+
stays lightly entangled, this simulates the dynamics of far more qubits than the dense
|
|
9
|
+
state-vector engine can hold.
|
|
10
|
+
|
|
11
|
+
This module provides TEBD for the transverse-field Ising model; the same pattern works
|
|
12
|
+
for any nearest-neighbour Hamiltonian by supplying its two-site gates.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import numpy as np
|
|
16
|
+
from scipy.linalg import expm
|
|
17
|
+
|
|
18
|
+
from ..mps import MPS
|
|
19
|
+
|
|
20
|
+
_X = np.array([[0, 1], [1, 0]], dtype=complex)
|
|
21
|
+
_Z = np.array([[1, 0], [0, -1]], dtype=complex)
|
|
22
|
+
_I = np.eye(2, dtype=complex)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def tfim_bond_gate(n: int, i: int, dt: float, j_coupling: float, field: float) -> np.ndarray:
|
|
26
|
+
"""
|
|
27
|
+
Two-site Trotter gate ``exp(-i h_{i,i+1} dt)`` for the transverse-field Ising model
|
|
28
|
+
``H = -J sum Z Z - h sum X`` on a chain of ``n`` sites. The single-site field is
|
|
29
|
+
split evenly between the bonds it belongs to (full weight at the two chain ends).
|
|
30
|
+
"""
|
|
31
|
+
hx_i = field * (0.5 if i > 0 else 1.0)
|
|
32
|
+
hx_j = field * (0.5 if i < n - 2 else 1.0)
|
|
33
|
+
h_local = (
|
|
34
|
+
-j_coupling * np.kron(_Z, _Z)
|
|
35
|
+
- hx_i * np.kron(_I, _X)
|
|
36
|
+
- hx_j * np.kron(_X, _I)
|
|
37
|
+
)
|
|
38
|
+
return expm(-1j * h_local * dt)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def tebd_tfim(n: int, time: float, steps: int = 100, j_coupling: float = 1.0,
|
|
42
|
+
field: float = 1.0, max_bond: int = 16, initial: "MPS" = None) -> "MPS":
|
|
43
|
+
"""
|
|
44
|
+
Evolve a TFIM chain of ``n`` sites for total ``time`` with ``steps`` Trotter steps,
|
|
45
|
+
on an MPS truncated to ``max_bond``. Starts from ``|0...0>`` unless an ``initial``
|
|
46
|
+
MPS is supplied. Returns the evolved MPS.
|
|
47
|
+
"""
|
|
48
|
+
mps = initial if initial is not None else MPS.zero_state(n, max_bond=max_bond)
|
|
49
|
+
mps.max_bond = max_bond
|
|
50
|
+
dt = time / steps
|
|
51
|
+
even = [tfim_bond_gate(n, i, dt, j_coupling, field) for i in range(0, n - 1, 2)]
|
|
52
|
+
odd = [tfim_bond_gate(n, i, dt, j_coupling, field) for i in range(1, n - 1, 2)]
|
|
53
|
+
for _ in range(steps):
|
|
54
|
+
for idx, i in enumerate(range(0, n - 1, 2)):
|
|
55
|
+
mps.apply_two(even[idx], i)
|
|
56
|
+
for idx, i in enumerate(range(1, n - 1, 2)):
|
|
57
|
+
mps.apply_two(odd[idx], i)
|
|
58
|
+
return mps
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def tfim_mps_energy(mps: "MPS", j_coupling: float = 1.0, field: float = 1.0) -> float:
|
|
62
|
+
"""
|
|
63
|
+
Energy ``<H>`` of the transverse-field Ising Hamiltonian
|
|
64
|
+
``H = -J sum Z Z - h sum X`` for an MPS, from its bond correlations and site
|
|
65
|
+
expectations (contraction, no dense state).
|
|
66
|
+
"""
|
|
67
|
+
n = mps.n
|
|
68
|
+
energy = 0.0
|
|
69
|
+
for i in range(n - 1):
|
|
70
|
+
energy += -j_coupling * mps.correlation(_Z, i, _Z, i + 1)
|
|
71
|
+
for i in range(n):
|
|
72
|
+
energy += -field * mps.expectation(_X, i)
|
|
73
|
+
return float(energy)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _imag_bond_gate(n, i, dtau, j_coupling, field):
|
|
77
|
+
hx_i = field * (0.5 if i > 0 else 1.0)
|
|
78
|
+
hx_j = field * (0.5 if i < n - 2 else 1.0)
|
|
79
|
+
h_local = (
|
|
80
|
+
-j_coupling * np.kron(_Z, _Z)
|
|
81
|
+
- hx_i * np.kron(_I, _X)
|
|
82
|
+
- hx_j * np.kron(_X, _I)
|
|
83
|
+
)
|
|
84
|
+
return expm(-h_local * dtau) # imaginary time -> real exponential (cooling)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def imaginary_tebd_ground_state(n: int, j_coupling: float = 1.0, field: float = 1.0,
|
|
88
|
+
dtau: float = 0.05, steps: int = 300,
|
|
89
|
+
max_bond: int = 16) -> dict:
|
|
90
|
+
"""
|
|
91
|
+
Find the TFIM ground state of an ``n``-site chain by imaginary-time TEBD -- apply
|
|
92
|
+
``e^{-h_{j,j+1} dtau}`` bond gates (cooling), renormalizing each step, until the
|
|
93
|
+
state settles into the ground state. Scales to chains far beyond the dense
|
|
94
|
+
simulator.
|
|
95
|
+
|
|
96
|
+
Returns dict with ``energy`` (variational ground energy), ``bond`` (bond dimension
|
|
97
|
+
reached), and -- when ``n`` is small enough to diagonalize -- ``exact_energy`` and
|
|
98
|
+
``error``.
|
|
99
|
+
"""
|
|
100
|
+
from ..core.gates import GateLibrary
|
|
101
|
+
|
|
102
|
+
mps = MPS.zero_state(n, max_bond=max_bond)
|
|
103
|
+
for q in range(n): # start from |+...+> for good ground-state overlap
|
|
104
|
+
mps.apply_single(GateLibrary.H, q)
|
|
105
|
+
|
|
106
|
+
for _ in range(steps):
|
|
107
|
+
for i in range(0, n - 1, 2):
|
|
108
|
+
mps.apply_two(_imag_bond_gate(n, i, dtau, j_coupling, field), i)
|
|
109
|
+
for i in range(1, n - 1, 2):
|
|
110
|
+
mps.apply_two(_imag_bond_gate(n, i, dtau, j_coupling, field), i)
|
|
111
|
+
norm = mps.norm()
|
|
112
|
+
mps.tensors[0] = mps.tensors[0] / norm
|
|
113
|
+
|
|
114
|
+
energy = tfim_mps_energy(mps, j_coupling, field)
|
|
115
|
+
result = {"energy": energy, "bond": mps.max_bond_dimension()}
|
|
116
|
+
if n <= 12:
|
|
117
|
+
from .hamiltonian_simulation import hamiltonian_matrix
|
|
118
|
+
from .vqe_solver import tfim_hamiltonian
|
|
119
|
+
|
|
120
|
+
H = hamiltonian_matrix(tfim_hamiltonian(n, field, j_coupling), n)
|
|
121
|
+
exact = float(np.linalg.eigvalsh(H).real.min())
|
|
122
|
+
result["exact_energy"] = exact
|
|
123
|
+
result["error"] = abs(energy - exact)
|
|
124
|
+
return result
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def tebd_magnetization(n: int, time: float, steps: int = 100, j_coupling: float = 1.0,
|
|
128
|
+
field: float = 1.0, max_bond: int = 16) -> dict:
|
|
129
|
+
"""
|
|
130
|
+
Quench a TFIM chain from the all-up state and read out the transverse magnetization.
|
|
131
|
+
|
|
132
|
+
Returns dict with ``z_profile`` (``<Z_i>`` on each site), ``mean_z``, and
|
|
133
|
+
``max_bond`` (the bond dimension reached -- the cost of the entanglement generated).
|
|
134
|
+
"""
|
|
135
|
+
mps = tebd_tfim(n, time, steps, j_coupling, field, max_bond)
|
|
136
|
+
z_profile = [mps.expectation(_Z, q) for q in range(n)]
|
|
137
|
+
return {
|
|
138
|
+
"z_profile": z_profile,
|
|
139
|
+
"mean_z": float(np.mean(z_profile)),
|
|
140
|
+
"max_bond": mps.max_bond_dimension(),
|
|
141
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Matrix Product Operators (MPO)
|
|
3
|
+
|
|
4
|
+
The operator analogue of a matrix product state: a many-body operator ``H`` written as
|
|
5
|
+
a chain of rank-4 tensors ``W[i]`` of shape ``(D_left, 2, 2, D_right)`` (bond, physical
|
|
6
|
+
out, physical in, bond). Local Hamiltonians have a *small* MPO bond dimension -- the
|
|
7
|
+
transverse-field Ising model needs only 3 -- so ``<psi|H|psi>`` on a matrix product
|
|
8
|
+
state costs ``O(n * chi^2 * D^2)`` with no dense operator ever formed. MPOs are the
|
|
9
|
+
operator input to DMRG and MPS-based time evolution.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import numpy as np
|
|
13
|
+
|
|
14
|
+
_I = np.eye(2, dtype=complex)
|
|
15
|
+
_Z = np.array([[1, 0], [0, -1]], dtype=complex)
|
|
16
|
+
_X = np.array([[0, 1], [1, 0]], dtype=complex)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def tfim_mpo(n: int, j_coupling: float = 1.0, field: float = 1.0) -> list:
|
|
20
|
+
"""
|
|
21
|
+
Bond-dimension-3 MPO for the transverse-field Ising Hamiltonian
|
|
22
|
+
``H = -J sum Z Z - h sum X`` on ``n`` sites. Returns the list of ``W`` tensors.
|
|
23
|
+
"""
|
|
24
|
+
W = np.zeros((3, 2, 2, 3), dtype=complex)
|
|
25
|
+
W[0, :, :, 0] = _I
|
|
26
|
+
W[1, :, :, 0] = _Z
|
|
27
|
+
W[2, :, :, 0] = -field * _X
|
|
28
|
+
W[2, :, :, 1] = -j_coupling * _Z
|
|
29
|
+
W[2, :, :, 2] = _I
|
|
30
|
+
tensors = []
|
|
31
|
+
for i in range(n):
|
|
32
|
+
if i == 0:
|
|
33
|
+
tensors.append(W[2:3, :, :, :]) # left boundary row
|
|
34
|
+
elif i == n - 1:
|
|
35
|
+
tensors.append(W[:, :, :, 0:1]) # right boundary column
|
|
36
|
+
else:
|
|
37
|
+
tensors.append(W)
|
|
38
|
+
return tensors
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def heisenberg_mpo(n: int, j_coupling: float = 1.0) -> list:
|
|
42
|
+
"""
|
|
43
|
+
Bond-dimension-5 MPO for the Heisenberg Hamiltonian
|
|
44
|
+
``H = J sum (X X + Y Y + Z Z)`` on ``n`` sites.
|
|
45
|
+
"""
|
|
46
|
+
Y = np.array([[0, -1j], [1j, 0]], dtype=complex)
|
|
47
|
+
W = np.zeros((5, 2, 2, 5), dtype=complex)
|
|
48
|
+
W[0, :, :, 0] = _I
|
|
49
|
+
W[4, :, :, 4] = _I
|
|
50
|
+
W[1, :, :, 0] = _X
|
|
51
|
+
W[2, :, :, 0] = Y
|
|
52
|
+
W[3, :, :, 0] = _Z
|
|
53
|
+
W[4, :, :, 1] = j_coupling * _X
|
|
54
|
+
W[4, :, :, 2] = j_coupling * Y
|
|
55
|
+
W[4, :, :, 3] = j_coupling * _Z
|
|
56
|
+
tensors = []
|
|
57
|
+
for i in range(n):
|
|
58
|
+
if i == 0:
|
|
59
|
+
tensors.append(W[4:5, :, :, :])
|
|
60
|
+
elif i == n - 1:
|
|
61
|
+
tensors.append(W[:, :, :, 0:1])
|
|
62
|
+
else:
|
|
63
|
+
tensors.append(W)
|
|
64
|
+
return tensors
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def mpo_expectation(mps, mpo) -> float:
|
|
68
|
+
"""
|
|
69
|
+
Expectation ``<psi|H|psi>`` of an MPO ``mpo`` for a matrix product state ``mps``, by
|
|
70
|
+
sweeping the three-layer (bra, operator, ket) contraction -- no dense operator.
|
|
71
|
+
"""
|
|
72
|
+
E = np.ones((1, 1, 1), dtype=complex) # (bra bond, mpo bond, ket bond)
|
|
73
|
+
for A, W in zip(mps.tensors, mpo):
|
|
74
|
+
E = np.einsum("lmn,nSr->lmSr", E, A) # absorb ket tensor
|
|
75
|
+
E = np.einsum("lmSr,mSTw->lTrw", E, W) # apply operator tensor
|
|
76
|
+
E = np.einsum("lTrw,lTb->wrb", E, np.conj(A)) # absorb bra tensor
|
|
77
|
+
E = E.transpose(2, 0, 1)
|
|
78
|
+
return float(np.real(E[0, 0, 0]))
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def mpo_to_matrix(mpo) -> np.ndarray:
|
|
82
|
+
"""Contract an MPO into its dense ``2^n x 2^n`` operator (small ``n``, for checking)."""
|
|
83
|
+
n = len(mpo)
|
|
84
|
+
T = mpo[0]
|
|
85
|
+
for W in mpo[1:]:
|
|
86
|
+
T = np.tensordot(T, W, axes=(T.ndim - 1, 0))
|
|
87
|
+
# T axes: bond_l, (out,in) per site, bond_r -> reshape
|
|
88
|
+
T = T[0, ..., 0] # drop trivial boundary bonds
|
|
89
|
+
outs = list(range(0, 2 * n, 2))
|
|
90
|
+
ins = list(range(1, 2 * n, 2))
|
|
91
|
+
T = T.transpose(outs + ins)
|
|
92
|
+
dim = 2**n
|
|
93
|
+
M = T.reshape(dim, dim)
|
|
94
|
+
# little-endian reordering to match the rest of the library
|
|
95
|
+
perm = list(range(n - 1, -1, -1))
|
|
96
|
+
Mt = M.reshape([2] * (2 * n)).transpose(perm + [n + p for p in perm]).reshape(dim, dim)
|
|
97
|
+
return Mt
|