qiskit 1.3.0b1__cp39-abi3-win32.whl → 1.3.0rc2__cp39-abi3-win32.whl
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.
- qiskit/VERSION.txt +1 -1
- qiskit/__init__.py +20 -1
- qiskit/_accelerate.pyd +0 -0
- qiskit/assembler/assemble_schedules.py +2 -0
- qiskit/circuit/__init__.py +44 -1
- qiskit/circuit/_standard_gates_commutations.py +585 -0
- qiskit/circuit/barrier.py +2 -0
- qiskit/circuit/controlflow/builder.py +3 -3
- qiskit/circuit/controlflow/if_else.py +13 -5
- qiskit/circuit/controlflow/while_loop.py +10 -2
- qiskit/circuit/delay.py +20 -3
- qiskit/circuit/equivalence.py +13 -214
- qiskit/circuit/gate.py +3 -1
- qiskit/circuit/instruction.py +32 -11
- qiskit/circuit/instructionset.py +2 -0
- qiskit/circuit/library/__init__.py +110 -14
- qiskit/circuit/library/arithmetic/__init__.py +9 -2
- qiskit/circuit/library/arithmetic/adders/__init__.py +1 -0
- qiskit/circuit/library/arithmetic/adders/adder.py +154 -2
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +20 -56
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +14 -1
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +21 -91
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
- qiskit/circuit/library/arithmetic/multipliers/__init__.py +1 -0
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +8 -1
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +94 -3
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +8 -1
- qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
- qiskit/circuit/library/basis_change/qft.py +20 -38
- qiskit/circuit/library/blueprintcircuit.py +64 -0
- qiskit/circuit/library/boolean_logic/__init__.py +4 -4
- qiskit/circuit/library/boolean_logic/inner_product.py +81 -4
- qiskit/circuit/library/boolean_logic/quantum_and.py +107 -4
- qiskit/circuit/library/boolean_logic/quantum_or.py +107 -3
- qiskit/circuit/library/boolean_logic/quantum_xor.py +97 -3
- qiskit/circuit/library/data_preparation/__init__.py +6 -3
- qiskit/circuit/library/data_preparation/{z_feature_map.py → _z_feature_map.py} +45 -34
- qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +342 -29
- qiskit/circuit/library/fourier_checking.py +72 -11
- qiskit/circuit/library/generalized_gates/__init__.py +1 -1
- qiskit/circuit/library/generalized_gates/diagonal.py +45 -51
- qiskit/circuit/library/generalized_gates/gms.py +67 -14
- qiskit/circuit/library/generalized_gates/gr.py +4 -4
- qiskit/circuit/library/generalized_gates/isometry.py +2 -2
- qiskit/circuit/library/generalized_gates/linear_function.py +12 -6
- qiskit/circuit/library/generalized_gates/mcmt.py +167 -107
- qiskit/circuit/library/generalized_gates/permutation.py +8 -6
- qiskit/circuit/library/generalized_gates/rv.py +8 -9
- qiskit/circuit/library/graph_state.py +93 -10
- qiskit/circuit/library/grover_operator.py +270 -2
- qiskit/circuit/library/hidden_linear_function.py +83 -20
- qiskit/circuit/library/iqp.py +99 -20
- qiskit/circuit/library/n_local/__init__.py +19 -7
- qiskit/circuit/library/n_local/efficient_su2.py +118 -5
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +259 -0
- qiskit/circuit/library/n_local/excitation_preserving.py +130 -6
- qiskit/circuit/library/n_local/n_local.py +406 -5
- qiskit/circuit/library/n_local/pauli_two_design.py +106 -4
- qiskit/circuit/library/n_local/qaoa_ansatz.py +80 -1
- qiskit/circuit/library/n_local/real_amplitudes.py +127 -7
- qiskit/circuit/library/n_local/two_local.py +14 -7
- qiskit/circuit/library/overlap.py +91 -26
- qiskit/circuit/library/pauli_evolution.py +17 -15
- qiskit/circuit/library/phase_estimation.py +80 -4
- qiskit/circuit/library/quantum_volume.py +72 -20
- qiskit/circuit/library/standard_gates/__init__.py +20 -1
- qiskit/circuit/library/standard_gates/dcx.py +2 -1
- qiskit/circuit/library/standard_gates/ecr.py +2 -2
- qiskit/circuit/library/standard_gates/h.py +4 -3
- qiskit/circuit/library/standard_gates/i.py +2 -1
- qiskit/circuit/library/standard_gates/iswap.py +2 -2
- qiskit/circuit/library/standard_gates/p.py +20 -12
- qiskit/circuit/library/standard_gates/r.py +1 -1
- qiskit/circuit/library/standard_gates/rx.py +4 -3
- qiskit/circuit/library/standard_gates/rxx.py +2 -2
- qiskit/circuit/library/standard_gates/ry.py +4 -3
- qiskit/circuit/library/standard_gates/ryy.py +2 -2
- qiskit/circuit/library/standard_gates/rz.py +13 -12
- qiskit/circuit/library/standard_gates/rzx.py +6 -6
- qiskit/circuit/library/standard_gates/rzz.py +1 -1
- qiskit/circuit/library/standard_gates/s.py +4 -4
- qiskit/circuit/library/standard_gates/swap.py +3 -3
- qiskit/circuit/library/standard_gates/sx.py +4 -3
- qiskit/circuit/library/standard_gates/t.py +2 -2
- qiskit/circuit/library/standard_gates/u.py +11 -3
- qiskit/circuit/library/standard_gates/u1.py +65 -15
- qiskit/circuit/library/standard_gates/u2.py +4 -1
- qiskit/circuit/library/standard_gates/u3.py +31 -3
- qiskit/circuit/library/standard_gates/x.py +7 -5
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -2
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -2
- qiskit/circuit/library/standard_gates/y.py +4 -3
- qiskit/circuit/library/standard_gates/z.py +3 -3
- qiskit/circuit/library/templates/clifford/clifford_2_1.py +9 -8
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +9 -7
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +9 -8
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +9 -8
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +9 -8
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +10 -9
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +9 -7
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +10 -8
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +16 -14
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +14 -12
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +14 -12
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +11 -9
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +11 -9
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +11 -9
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +11 -9
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +12 -10
- qiskit/circuit/library/templates/rzx/rzx_cy.py +11 -10
- qiskit/circuit/library/templates/rzx/rzx_xz.py +16 -15
- qiskit/circuit/library/templates/rzx/rzx_yz.py +12 -10
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +22 -20
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +16 -15
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +17 -15
- qiskit/circuit/parameter.py +4 -0
- qiskit/circuit/parameterexpression.py +167 -34
- qiskit/circuit/quantumcircuit.py +162 -126
- qiskit/circuit/singleton.py +2 -0
- qiskit/circuit/store.py +2 -0
- qiskit/circuit/twirling.py +145 -0
- qiskit/compiler/assembler.py +17 -4
- qiskit/compiler/scheduler.py +2 -0
- qiskit/compiler/sequencer.py +2 -0
- qiskit/compiler/transpiler.py +81 -26
- qiskit/converters/circuit_to_dag.py +2 -2
- qiskit/converters/circuit_to_dagdependency.py +1 -1
- qiskit/converters/circuit_to_dagdependency_v2.py +1 -1
- qiskit/converters/circuit_to_instruction.py +1 -1
- qiskit/converters/dag_to_circuit.py +7 -5
- qiskit/converters/dag_to_dagdependency.py +1 -1
- qiskit/converters/dag_to_dagdependency_v2.py +1 -1
- qiskit/converters/dagdependency_to_circuit.py +5 -1
- qiskit/converters/dagdependency_to_dag.py +6 -1
- qiskit/dagcircuit/collect_blocks.py +3 -3
- qiskit/dagcircuit/dagdependency.py +18 -5
- qiskit/dagcircuit/dagdependency_v2.py +1 -1
- qiskit/dagcircuit/dagnode.py +2 -2
- qiskit/passmanager/__init__.py +2 -2
- qiskit/primitives/backend_estimator.py +5 -2
- qiskit/primitives/backend_sampler_v2.py +61 -18
- qiskit/primitives/base/base_estimator.py +2 -2
- qiskit/primitives/containers/data_bin.py +9 -1
- qiskit/primitives/statevector_sampler.py +1 -1
- qiskit/primitives/utils.py +1 -1
- qiskit/providers/__init__.py +3 -3
- qiskit/providers/backend.py +12 -1
- qiskit/providers/backend_compat.py +23 -3
- qiskit/providers/basic_provider/basic_simulator.py +12 -2
- qiskit/providers/fake_provider/fake_pulse_backend.py +6 -1
- qiskit/providers/fake_provider/generic_backend_v2.py +46 -30
- qiskit/providers/models/pulsedefaults.py +2 -0
- qiskit/pulse/builder.py +59 -18
- qiskit/pulse/calibration_entries.py +4 -1
- qiskit/pulse/channels.py +2 -0
- qiskit/pulse/exceptions.py +2 -0
- qiskit/pulse/instruction_schedule_map.py +21 -6
- qiskit/pulse/instructions/acquire.py +2 -0
- qiskit/pulse/instructions/delay.py +2 -0
- qiskit/pulse/instructions/directives.py +8 -0
- qiskit/pulse/instructions/frequency.py +3 -0
- qiskit/pulse/instructions/instruction.py +2 -0
- qiskit/pulse/instructions/phase.py +3 -0
- qiskit/pulse/instructions/play.py +2 -0
- qiskit/pulse/instructions/reference.py +2 -0
- qiskit/pulse/instructions/snapshot.py +2 -0
- qiskit/pulse/library/pulse.py +2 -0
- qiskit/pulse/library/symbolic_pulses.py +28 -0
- qiskit/pulse/library/waveform.py +2 -0
- qiskit/pulse/macros.py +1 -1
- qiskit/pulse/schedule.py +12 -13
- qiskit/pulse/transforms/alignments.py +5 -3
- qiskit/pulse/transforms/dag.py +7 -0
- qiskit/qasm2/export.py +5 -3
- qiskit/qasm2/parse.py +46 -2
- qiskit/qasm3/__init__.py +1 -0
- qiskit/qasm3/ast.py +123 -15
- qiskit/qasm3/exporter.py +103 -77
- qiskit/qobj/converters/pulse_instruction.py +6 -4
- qiskit/qpy/__init__.py +181 -0
- qiskit/qpy/binary_io/circuits.py +20 -5
- qiskit/qpy/binary_io/schedules.py +3 -4
- qiskit/qpy/binary_io/value.py +310 -13
- qiskit/qpy/common.py +46 -2
- qiskit/qpy/formats.py +7 -0
- qiskit/qpy/interface.py +40 -4
- qiskit/quantum_info/__init__.py +4 -0
- qiskit/quantum_info/operators/channel/transformations.py +28 -21
- qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
- qiskit/quantum_info/operators/operator.py +54 -8
- qiskit/quantum_info/operators/symplectic/base_pauli.py +11 -19
- qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +1 -1
- qiskit/quantum_info/operators/symplectic/pauli.py +2 -0
- qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +23 -2
- qiskit/quantum_info/states/densitymatrix.py +5 -5
- qiskit/quantum_info/states/stabilizerstate.py +1 -1
- qiskit/quantum_info/states/statevector.py +6 -6
- qiskit/result/mitigation/base_readout_mitigator.py +1 -1
- qiskit/result/mitigation/correlated_readout_mitigator.py +9 -1
- qiskit/result/mitigation/local_readout_mitigator.py +9 -1
- qiskit/result/mitigation/utils.py +57 -0
- qiskit/scheduler/config.py +2 -0
- qiskit/scheduler/methods/basic.py +3 -0
- qiskit/scheduler/schedule_circuit.py +2 -0
- qiskit/scheduler/sequence.py +2 -0
- qiskit/synthesis/__init__.py +25 -0
- qiskit/synthesis/arithmetic/__init__.py +16 -0
- qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
- qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +102 -0
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +99 -0
- qiskit/synthesis/clifford/clifford_decompose_bm.py +1 -2
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +3 -2
- qiskit/synthesis/clifford/clifford_decompose_layers.py +2 -1
- qiskit/synthesis/evolution/__init__.py +1 -0
- qiskit/synthesis/evolution/lie_trotter.py +16 -42
- qiskit/synthesis/evolution/pauli_network.py +80 -0
- qiskit/synthesis/evolution/product_formula.py +165 -238
- qiskit/synthesis/evolution/qdrift.py +36 -29
- qiskit/synthesis/evolution/suzuki_trotter.py +87 -27
- qiskit/synthesis/multi_controlled/__init__.py +1 -0
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
- qiskit/synthesis/qft/qft_decompose_full.py +19 -1
- qiskit/synthesis/qft/qft_decompose_lnn.py +2 -1
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -1
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +4 -63
- qiskit/synthesis/unitary/qsd.py +5 -5
- qiskit/transpiler/__init__.py +21 -14
- qiskit/transpiler/basepasses.py +1 -1
- qiskit/transpiler/passes/__init__.py +2 -0
- qiskit/transpiler/passes/basis/basis_translator.py +9 -565
- qiskit/transpiler/passes/basis/decompose.py +45 -12
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
- qiskit/transpiler/passes/calibration/pulse_gate.py +4 -2
- qiskit/transpiler/passes/calibration/rx_builder.py +11 -7
- qiskit/transpiler/passes/calibration/rzx_builder.py +46 -30
- qiskit/transpiler/passes/layout/disjoint_utils.py +15 -13
- qiskit/transpiler/passes/layout/sabre_layout.py +7 -2
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +5 -0
- qiskit/transpiler/passes/optimization/__init__.py +1 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +19 -3
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +1 -1
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
- qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +1 -1
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +48 -131
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +4 -2
- qiskit/transpiler/passes/optimization/elide_permutations.py +9 -32
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +5 -11
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
- qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +1 -1
- qiskit/transpiler/passes/optimization/remove_identity_equiv.py +69 -0
- qiskit/transpiler/passes/optimization/template_matching/backward_match.py +5 -5
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +4 -4
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +2 -2
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +1 -1
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
- qiskit/transpiler/passes/routing/sabre_swap.py +7 -3
- qiskit/transpiler/passes/routing/star_prerouting.py +2 -2
- qiskit/transpiler/passes/scheduling/alap.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +2 -2
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +2 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
- qiskit/transpiler/passes/scheduling/asap.py +1 -1
- qiskit/transpiler/passes/scheduling/base_scheduler.py +14 -12
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +9 -4
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +16 -5
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +4 -1
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +6 -2
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +9 -4
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +262 -99
- qiskit/transpiler/passes/synthesis/hls_plugins.py +637 -7
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +55 -34
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +2 -56
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +5 -0
- qiskit/transpiler/passes/utils/gate_direction.py +12 -275
- qiskit/transpiler/passes/utils/gates_basis.py +7 -30
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +2 -1
- qiskit/transpiler/passmanager_config.py +22 -4
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +40 -14
- qiskit/transpiler/preset_passmanagers/common.py +5 -3
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +125 -42
- qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
- qiskit/transpiler/target.py +74 -16
- qiskit/utils/deprecate_pulse.py +119 -0
- qiskit/visualization/circuit/_utils.py +2 -2
- qiskit/visualization/circuit/circuit_visualization.py +3 -2
- qiskit/visualization/circuit/matplotlib.py +1 -1
- qiskit/visualization/dag_visualization.py +1 -1
- qiskit/visualization/pass_manager_visualization.py +3 -14
- qiskit/visualization/pulse_v2/interface.py +3 -1
- qiskit/visualization/timeline/core.py +25 -2
- qiskit/visualization/timeline/interface.py +12 -0
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/METADATA +9 -8
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/RECORD +357 -346
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/WHEEL +1 -1
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/entry_points.txt +19 -0
- qiskit/circuit/library/data_preparation/zz_feature_map.py +0 -118
- qiskit/synthesis/two_qubit/weyl.py +0 -97
- qiskit/transpiler/passes/synthesis/qubit_tracker.py +0 -132
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/top_level.txt +0 -0
@@ -16,6 +16,7 @@ Matrix Operator class.
|
|
16
16
|
|
17
17
|
from __future__ import annotations
|
18
18
|
|
19
|
+
import cmath
|
19
20
|
import copy as _copy
|
20
21
|
import re
|
21
22
|
from numbers import Number
|
@@ -540,11 +541,41 @@ class Operator(LinearOp):
|
|
540
541
|
ret._op_shape = new_shape
|
541
542
|
return ret
|
542
543
|
|
543
|
-
def power(
|
544
|
+
def power(
|
545
|
+
self, n: float, branch_cut_rotation=cmath.pi * 1e-12, assume_unitary=False
|
546
|
+
) -> Operator:
|
544
547
|
"""Return the matrix power of the operator.
|
545
548
|
|
549
|
+
Non-integer powers of operators with an eigenvalue whose complex phase is :math:`\\pi` have
|
550
|
+
a branch cut in the complex plane, which makes the calculation of the principal root around
|
551
|
+
this cut subject to precision / differences in BLAS implementation. For example, the square
|
552
|
+
root of Pauli Y can return the :math:`\\pi/2` or :math:`-\\pi/2` Y rotation depending on
|
553
|
+
whether the -1 eigenvalue is found as ``complex(-1, tiny)`` or ``complex(-1, -tiny)``. Such
|
554
|
+
eigenvalues are really common in quantum information, so this function first phase-rotates
|
555
|
+
the input matrix to shift the branch cut to a far less common point. The underlying
|
556
|
+
numerical precision issues around the branch-cut point remain, if an operator has an
|
557
|
+
eigenvalue close to this phase. The magnitude of this rotation can be controlled with the
|
558
|
+
``branch_cut_rotation`` parameter.
|
559
|
+
|
560
|
+
The choice of ``branch_cut_rotation`` affects the principal root that is found. For
|
561
|
+
example, the square root of :class:`.ZGate` will be calculated as either :class:`.SGate` or
|
562
|
+
:class:`.SdgGate` depending on which way the rotation is done::
|
563
|
+
|
564
|
+
from qiskit.circuit import library
|
565
|
+
from qiskit.quantum_info import Operator
|
566
|
+
|
567
|
+
z_op = Operator(library.ZGate())
|
568
|
+
assert z_op.power(0.5, branch_cut_rotation=1e-3) == Operator(library.SGate())
|
569
|
+
assert z_op.power(0.5, branch_cut_rotation=-1e-3) == Operator(library.SdgGate())
|
570
|
+
|
546
571
|
Args:
|
547
572
|
n (float): the power to raise the matrix to.
|
573
|
+
branch_cut_rotation (float): The rotation angle to apply to the branch cut in the
|
574
|
+
complex plane. This shifts the branch cut away from the common point of :math:`-1`,
|
575
|
+
but can cause a different root to be selected as the principal root. The rotation
|
576
|
+
is anticlockwise, following the standard convention for complex phase.
|
577
|
+
assume_unitary (bool): if ``True``, the operator is assumed to be unitary. In this case,
|
578
|
+
for fractional powers we employ a faster implementation based on Schur's decomposition.
|
548
579
|
|
549
580
|
Returns:
|
550
581
|
Operator: the resulting operator ``O ** n``.
|
@@ -552,6 +583,11 @@ class Operator(LinearOp):
|
|
552
583
|
Raises:
|
553
584
|
QiskitError: if the input and output dimensions of the operator
|
554
585
|
are not equal.
|
586
|
+
|
587
|
+
.. note::
|
588
|
+
It is only safe to set the argument ``assume_unitary`` to ``True`` when the operator
|
589
|
+
is unitary (or, more generally, normal). Otherwise, the function will return an
|
590
|
+
incorrect output.
|
555
591
|
"""
|
556
592
|
if self.input_dims() != self.output_dims():
|
557
593
|
raise QiskitError("Can only power with input_dims = output_dims.")
|
@@ -561,13 +597,23 @@ class Operator(LinearOp):
|
|
561
597
|
else:
|
562
598
|
import scipy.linalg
|
563
599
|
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
600
|
+
if assume_unitary:
|
601
|
+
# Experimentally, for fractional powers this seems to be 3x faster than
|
602
|
+
# calling scipy.linalg.fractional_matrix_power(self.data, exponent)
|
603
|
+
decomposition, unitary = scipy.linalg.schur(
|
604
|
+
cmath.rect(1, -branch_cut_rotation) * self.data, output="complex"
|
605
|
+
)
|
606
|
+
decomposition_diagonal = decomposition.diagonal()
|
607
|
+
decomposition_power = [pow(element, n) for element in decomposition_diagonal]
|
608
|
+
unitary_power = unitary @ np.diag(decomposition_power) @ unitary.conj().T
|
609
|
+
ret._data = cmath.rect(1, branch_cut_rotation * n) * unitary_power
|
610
|
+
else:
|
611
|
+
ret._data = cmath.rect(
|
612
|
+
1, branch_cut_rotation * n
|
613
|
+
) * scipy.linalg.fractional_matrix_power(
|
614
|
+
cmath.rect(1, -branch_cut_rotation) * self.data, n
|
615
|
+
)
|
616
|
+
|
571
617
|
return ret
|
572
618
|
|
573
619
|
def tensor(self, other: Operator) -> Operator:
|
@@ -33,6 +33,8 @@ if TYPE_CHECKING:
|
|
33
33
|
|
34
34
|
# utility for _to_matrix
|
35
35
|
_PARITY = np.array([-1 if bin(i).count("1") % 2 else 1 for i in range(256)], dtype=complex)
|
36
|
+
# Utility for `_to_label`
|
37
|
+
_TO_LABEL_CHARS = np.array([ord("I"), ord("X"), ord("Z"), ord("Y")], dtype=np.uint8)
|
36
38
|
|
37
39
|
|
38
40
|
class BasePauli(BaseOperator, AdjointMixin, MultiplyMixin):
|
@@ -184,7 +186,7 @@ class BasePauli(BaseOperator, AdjointMixin, MultiplyMixin):
|
|
184
186
|
return BasePauli(self._z, self._x, np.mod(self._phase + phase, 4))
|
185
187
|
|
186
188
|
def conjugate(self):
|
187
|
-
"""Return the conjugate of
|
189
|
+
"""Return the complex conjugate of the Pauli with respect to the Z basis."""
|
188
190
|
complex_phase = np.mod(self._phase, 2)
|
189
191
|
if np.all(complex_phase == 0):
|
190
192
|
return self
|
@@ -496,25 +498,15 @@ class BasePauli(BaseOperator, AdjointMixin, MultiplyMixin):
|
|
496
498
|
the phase ``q`` for the coefficient :math:`(-i)^(q + x.z)`
|
497
499
|
for the label from the full Pauli group.
|
498
500
|
"""
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
label += "I"
|
507
|
-
else:
|
508
|
-
label += "X"
|
509
|
-
elif not x[num_qubits - 1 - i]:
|
510
|
-
label += "Z"
|
511
|
-
else:
|
512
|
-
label += "Y"
|
513
|
-
if not group_phase:
|
514
|
-
phase -= 1
|
515
|
-
phase %= 4
|
501
|
+
# Map each qubit to the {I: 0, X: 1, Z: 2, Y: 3} integer form, then use Numpy advanced
|
502
|
+
# indexing to get a new data buffer which is compatible with an ASCII string label.
|
503
|
+
index = z << 1
|
504
|
+
index += x
|
505
|
+
ascii_label = _TO_LABEL_CHARS[index[::-1]].data.tobytes()
|
506
|
+
phase = (int(phase) if group_phase else int(phase) - ascii_label.count(b"Y")) % 4
|
507
|
+
label = ascii_label.decode("ascii")
|
516
508
|
if phase and full_group:
|
517
|
-
label =
|
509
|
+
label = ("", "-i", "-", "i")[phase] + label
|
518
510
|
if return_phase:
|
519
511
|
return label, phase
|
520
512
|
return label
|
@@ -92,7 +92,7 @@ class Clifford(BaseOperator, AdjointMixin, Operation):
|
|
92
92
|
# Print the Clifford stabilizer rows
|
93
93
|
print(cliff.to_labels(mode="S"))
|
94
94
|
|
95
|
-
..
|
95
|
+
.. code-block:: text
|
96
96
|
|
97
97
|
Clifford: Stabilizer = ['+XX', '+ZZ'], Destabilizer = ['+IZ', '+XI']
|
98
98
|
['+IZ', '+XI']
|
@@ -81,7 +81,7 @@ def _append_operation(clifford, operation, qargs=None):
|
|
81
81
|
else:
|
82
82
|
# assert isinstance(gate, Instruction)
|
83
83
|
name = gate.name
|
84
|
-
if getattr(gate, "
|
84
|
+
if getattr(gate, "_condition", None) is not None:
|
85
85
|
raise QiskitError("Conditional gate is not a valid Clifford operation.")
|
86
86
|
|
87
87
|
# Apply gate if it is a Clifford basis gate
|
@@ -80,7 +80,7 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
|
|
80
80
|
pauli_list = PauliList.from_symplectic(z, x, phase)
|
81
81
|
print("4. ", pauli_list)
|
82
82
|
|
83
|
-
..
|
83
|
+
.. code-block:: text
|
84
84
|
|
85
85
|
1. ['II', 'ZI', '-iYY']
|
86
86
|
2. ['iXI']
|
@@ -100,7 +100,7 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
|
|
100
100
|
print("List: ", repr(pauli_list[[0, 2]]))
|
101
101
|
print("Slice: ", repr(pauli_list[0:2]))
|
102
102
|
|
103
|
-
..
|
103
|
+
.. code-block:: text
|
104
104
|
|
105
105
|
Integer: Pauli('ZZ')
|
106
106
|
List: PauliList(['XX', 'IZ'])
|
@@ -568,7 +568,7 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
|
|
568
568
|
print('Weight sorted')
|
569
569
|
print(srt)
|
570
570
|
|
571
|
-
..
|
571
|
+
.. code-block:: text
|
572
572
|
|
573
573
|
Initial Ordering
|
574
574
|
['YX', 'ZZ', 'XZ', 'YI', 'YZ', 'II', 'XX', 'XI', 'XY', 'YY', 'IX', 'IZ',
|
@@ -603,7 +603,7 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
|
|
603
603
|
unique = pt.unique()
|
604
604
|
print(unique)
|
605
605
|
|
606
|
-
..
|
606
|
+
.. code-block:: text
|
607
607
|
|
608
608
|
['X', 'Y', '-X', 'I', 'Z', 'iZ']
|
609
609
|
|
@@ -560,7 +560,7 @@ class SparsePauliOp(LinearOp):
|
|
560
560
|
print('Weight sorted')
|
561
561
|
print(srt)
|
562
562
|
|
563
|
-
..
|
563
|
+
.. code-block:: text
|
564
564
|
|
565
565
|
Initial Ordering
|
566
566
|
SparsePauliOp(['XX', 'XX', 'XX', 'YI', 'II', 'XZ', 'XY', 'XI'],
|
@@ -629,7 +629,7 @@ class SparsePauliOp(LinearOp):
|
|
629
629
|
print('Weight sorted')
|
630
630
|
print(srt)
|
631
631
|
|
632
|
-
..
|
632
|
+
.. code-block:: text
|
633
633
|
|
634
634
|
Initial Ordering
|
635
635
|
SparsePauliOp(['XX', 'XX', 'XX', 'YI', 'II', 'XZ', 'XY', 'XI'],
|
@@ -794,6 +794,8 @@ class SparsePauliOp(LinearOp):
|
|
794
794
|
|
795
795
|
.. code-block:: python
|
796
796
|
|
797
|
+
from qiskit.quantum_info import SparsePauliOp
|
798
|
+
|
797
799
|
# via tuples and the full Pauli string
|
798
800
|
op = SparsePauliOp.from_list([("XIIZI", 1), ("IYIIY", 2)])
|
799
801
|
|
@@ -858,6 +860,8 @@ class SparsePauliOp(LinearOp):
|
|
858
860
|
|
859
861
|
.. code-block:: python
|
860
862
|
|
863
|
+
from qiskit.quantum_info import SparsePauliOp
|
864
|
+
|
861
865
|
# via triples and local Paulis with indices
|
862
866
|
op = SparsePauliOp.from_sparse_list([("ZX", [1, 4], 1), ("YY", [0, 3], 2)], num_qubits=5)
|
863
867
|
|
@@ -931,6 +935,14 @@ class SparsePauliOp(LinearOp):
|
|
931
935
|
return labels
|
932
936
|
return labels.tolist()
|
933
937
|
|
938
|
+
def to_sparse_list(self):
|
939
|
+
"""Convert to a sparse Pauli list format with elements (pauli, qubits, coefficient)."""
|
940
|
+
pauli_labels = self.paulis.to_labels()
|
941
|
+
sparse_list = [
|
942
|
+
(*sparsify_label(label), coeff) for label, coeff in zip(pauli_labels, self.coeffs)
|
943
|
+
]
|
944
|
+
return sparse_list
|
945
|
+
|
934
946
|
def to_matrix(self, sparse: bool = False, force_serial: bool = False) -> np.ndarray:
|
935
947
|
"""Convert to a dense or sparse matrix.
|
936
948
|
|
@@ -1053,6 +1065,7 @@ class SparsePauliOp(LinearOp):
|
|
1053
1065
|
|
1054
1066
|
.. code-block:: python
|
1055
1067
|
|
1068
|
+
>>> from qiskit.quantum_info import SparsePauliOp
|
1056
1069
|
>>> op = SparsePauliOp.from_list([("XX", 2), ("YY", 1), ("IZ",2j), ("ZZ",1j)])
|
1057
1070
|
>>> op.group_commuting()
|
1058
1071
|
[SparsePauliOp(["IZ", "ZZ"], coeffs=[0.+2.j, 0.+1j]),
|
@@ -1171,5 +1184,13 @@ class SparsePauliOp(LinearOp):
|
|
1171
1184
|
return new_op.compose(self, qargs=layout)
|
1172
1185
|
|
1173
1186
|
|
1187
|
+
def sparsify_label(pauli_string):
|
1188
|
+
"""Return a sparse format of a Pauli string, e.g. "XIIIZ" -> ("XZ", [0, 4])."""
|
1189
|
+
qubits = [i for i, label in enumerate(reversed(pauli_string)) if label != "I"]
|
1190
|
+
sparse_label = "".join(pauli_string[~i] for i in qubits)
|
1191
|
+
|
1192
|
+
return sparse_label, qubits
|
1193
|
+
|
1194
|
+
|
1174
1195
|
# Update docstrings for API docs
|
1175
1196
|
generate_apidocs(SparsePauliOp)
|
@@ -461,7 +461,7 @@ class DensityMatrix(QuantumState, TolerancesMixin):
|
|
461
461
|
probs_qubit_1 = rho.probabilities([1])
|
462
462
|
print('Qubit-1 probs: {}'.format(probs_qubit_1))
|
463
463
|
|
464
|
-
..
|
464
|
+
.. code-block:: text
|
465
465
|
|
466
466
|
probs: [0.5 0. 0.5 0. ]
|
467
467
|
Qubit-0 probs: [1. 0.]
|
@@ -485,7 +485,7 @@ class DensityMatrix(QuantumState, TolerancesMixin):
|
|
485
485
|
probs_swapped = rho.probabilities([1, 0])
|
486
486
|
print('Swapped probs: {}'.format(probs_swapped))
|
487
487
|
|
488
|
-
..
|
488
|
+
.. code-block:: text
|
489
489
|
|
490
490
|
probs: [0.5 0. 0.5 0. ]
|
491
491
|
Swapped probs: [0.5 0.5 0. 0. ]
|
@@ -654,7 +654,7 @@ class DensityMatrix(QuantumState, TolerancesMixin):
|
|
654
654
|
rho = DensityMatrix.from_label('-0')
|
655
655
|
print(rho.to_dict())
|
656
656
|
|
657
|
-
..
|
657
|
+
.. code-block:: text
|
658
658
|
|
659
659
|
{
|
660
660
|
'00|00': (0.4999999999999999+0j),
|
@@ -679,7 +679,7 @@ class DensityMatrix(QuantumState, TolerancesMixin):
|
|
679
679
|
rho = DensityMatrix(mat, dims=(3, 3))
|
680
680
|
print(rho.to_dict())
|
681
681
|
|
682
|
-
..
|
682
|
+
.. code-block:: text
|
683
683
|
|
684
684
|
{'00|00': (0.25+0j), '10|10': (0.25+0j), '20|20': (0.25+0j), '22|22': (0.25+0j)}
|
685
685
|
|
@@ -698,7 +698,7 @@ class DensityMatrix(QuantumState, TolerancesMixin):
|
|
698
698
|
rho = DensityMatrix(mat, dims=(2, 10))
|
699
699
|
print(rho.to_dict())
|
700
700
|
|
701
|
-
..
|
701
|
+
.. code-block:: text
|
702
702
|
|
703
703
|
{'00|00': (0.5+0j), '91|91': (0.5+0j)}
|
704
704
|
"""
|
@@ -54,7 +54,7 @@ class StabilizerState(QuantumState):
|
|
54
54
|
# Calculate expectation value of the StabilizerState
|
55
55
|
print (stab.expectation_value(Pauli('ZZ')))
|
56
56
|
|
57
|
-
..
|
57
|
+
.. code-block:: text
|
58
58
|
|
59
59
|
StabilizerState(StabilizerTable: ['+XX', '+ZZ'])
|
60
60
|
{'00': 0.5, '11': 0.5}
|
@@ -476,7 +476,7 @@ class Statevector(QuantumState, TolerancesMixin):
|
|
476
476
|
pauli_phase = (-1j) ** pauli.phase if pauli.phase else 1
|
477
477
|
|
478
478
|
if x_mask + z_mask == 0:
|
479
|
-
return pauli_phase * np.linalg.norm(self.data)
|
479
|
+
return pauli_phase * np.linalg.norm(self.data) ** 2
|
480
480
|
|
481
481
|
if x_mask == 0:
|
482
482
|
return pauli_phase * expval_pauli_no_x(self.data, self.num_qubits, z_mask)
|
@@ -554,7 +554,7 @@ class Statevector(QuantumState, TolerancesMixin):
|
|
554
554
|
probs_qubit_1 = psi.probabilities([1])
|
555
555
|
print('Qubit-1 probs: {}'.format(probs_qubit_1))
|
556
556
|
|
557
|
-
..
|
557
|
+
.. code-block:: text
|
558
558
|
|
559
559
|
probs: [0.5 0. 0.5 0. ]
|
560
560
|
Qubit-0 probs: [1. 0.]
|
@@ -578,7 +578,7 @@ class Statevector(QuantumState, TolerancesMixin):
|
|
578
578
|
probs_swapped = psi.probabilities([1, 0])
|
579
579
|
print('Swapped probs: {}'.format(probs_swapped))
|
580
580
|
|
581
|
-
..
|
581
|
+
.. code-block:: text
|
582
582
|
|
583
583
|
probs: [0.5 0. 0.5 0. ]
|
584
584
|
Swapped probs: [0.5 0.5 0. 0. ]
|
@@ -794,7 +794,7 @@ class Statevector(QuantumState, TolerancesMixin):
|
|
794
794
|
psi = Statevector.from_label('-0')
|
795
795
|
print(psi.to_dict())
|
796
796
|
|
797
|
-
..
|
797
|
+
.. code-block:: text
|
798
798
|
|
799
799
|
{'00': (0.7071067811865475+0j), '10': (-0.7071067811865475+0j)}
|
800
800
|
|
@@ -812,7 +812,7 @@ class Statevector(QuantumState, TolerancesMixin):
|
|
812
812
|
psi = Statevector(vec, dims=(3, 3))
|
813
813
|
print(psi.to_dict())
|
814
814
|
|
815
|
-
..
|
815
|
+
.. code-block:: text
|
816
816
|
|
817
817
|
{'00': (0.7071067811865475+0j), '22': (0.7071067811865475+0j)}
|
818
818
|
|
@@ -831,7 +831,7 @@ class Statevector(QuantumState, TolerancesMixin):
|
|
831
831
|
psi = Statevector(vec, dims=(2, 10))
|
832
832
|
print(psi.to_dict())
|
833
833
|
|
834
|
-
..
|
834
|
+
.. code-block:: text
|
835
835
|
|
836
836
|
{'00': (0.7071067811865475+0j), '91': (0.7071067811865475+0j)}
|
837
837
|
|
@@ -18,6 +18,7 @@ from typing import Optional, List, Tuple, Iterable, Callable, Union, Dict
|
|
18
18
|
import numpy as np
|
19
19
|
|
20
20
|
from qiskit.exceptions import QiskitError
|
21
|
+
from qiskit.utils.deprecation import deprecate_func
|
21
22
|
from ..distributions.quasi import QuasiDistribution
|
22
23
|
from ..counts import Counts
|
23
24
|
from .base_readout_mitigator import BaseReadoutMitigator
|
@@ -25,7 +26,7 @@ from .utils import counts_probability_vector, z_diagonal, str2diag
|
|
25
26
|
|
26
27
|
|
27
28
|
class CorrelatedReadoutMitigator(BaseReadoutMitigator):
|
28
|
-
"""N-qubit readout error mitigator.
|
29
|
+
"""This class is DEPRECATED. N-qubit readout error mitigator.
|
29
30
|
|
30
31
|
Mitigates :meth:`expectation_value` and :meth:`quasi_probabilities`.
|
31
32
|
The mitigation_matrix should be calibrated using qiskit experiments.
|
@@ -34,6 +35,13 @@ class CorrelatedReadoutMitigator(BaseReadoutMitigator):
|
|
34
35
|
:math:`2^N x 2^N` so the mitigation complexity is :math:`O(4^N)`.
|
35
36
|
"""
|
36
37
|
|
38
|
+
@deprecate_func(
|
39
|
+
since="1.3",
|
40
|
+
package_name="Qiskit",
|
41
|
+
removal_timeline="in Qiskit 2.0",
|
42
|
+
additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
|
43
|
+
"the https://github.com/Qiskit/qiskit-addon-mthree package.",
|
44
|
+
)
|
37
45
|
def __init__(self, assignment_matrix: np.ndarray, qubits: Optional[Iterable[int]] = None):
|
38
46
|
"""Initialize a CorrelatedReadoutMitigator
|
39
47
|
|
@@ -19,6 +19,7 @@ from typing import Optional, List, Tuple, Iterable, Callable, Union, Dict
|
|
19
19
|
import numpy as np
|
20
20
|
|
21
21
|
from qiskit.exceptions import QiskitError
|
22
|
+
from qiskit.utils.deprecation import deprecate_func
|
22
23
|
from ..distributions.quasi import QuasiDistribution
|
23
24
|
from ..counts import Counts
|
24
25
|
from .base_readout_mitigator import BaseReadoutMitigator
|
@@ -26,7 +27,7 @@ from .utils import counts_probability_vector, z_diagonal, str2diag
|
|
26
27
|
|
27
28
|
|
28
29
|
class LocalReadoutMitigator(BaseReadoutMitigator):
|
29
|
-
"""1-qubit tensor product readout error mitigator.
|
30
|
+
"""This class is DEPRECATED. 1-qubit tensor product readout error mitigator.
|
30
31
|
|
31
32
|
Mitigates :meth:`expectation_value` and :meth:`quasi_probabilities`.
|
32
33
|
The mitigator should either be calibrated using qiskit experiments,
|
@@ -37,6 +38,13 @@ class LocalReadoutMitigator(BaseReadoutMitigator):
|
|
37
38
|
so it is more efficient than the :class:`CorrelatedReadoutMitigator` class.
|
38
39
|
"""
|
39
40
|
|
41
|
+
@deprecate_func(
|
42
|
+
since="1.3",
|
43
|
+
package_name="Qiskit",
|
44
|
+
removal_timeline="in Qiskit 2.0",
|
45
|
+
additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
|
46
|
+
"the https://github.com/Qiskit/qiskit-addon-mthree package.",
|
47
|
+
)
|
40
48
|
def __init__(
|
41
49
|
self,
|
42
50
|
assignment_matrices: Optional[List[np.ndarray]] = None,
|
@@ -19,12 +19,20 @@ from typing import Optional, List, Tuple, Dict
|
|
19
19
|
import numpy as np
|
20
20
|
|
21
21
|
from qiskit.exceptions import QiskitError
|
22
|
+
from qiskit.utils.deprecation import deprecate_func
|
22
23
|
from ..utils import marginal_counts
|
23
24
|
from ..counts import Counts
|
24
25
|
|
25
26
|
logger = logging.getLogger(__name__)
|
26
27
|
|
27
28
|
|
29
|
+
@deprecate_func(
|
30
|
+
since="1.3",
|
31
|
+
package_name="Qiskit",
|
32
|
+
removal_timeline="in Qiskit 2.0",
|
33
|
+
additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
|
34
|
+
"the https://github.com/Qiskit/qiskit-addon-mthree package.",
|
35
|
+
)
|
28
36
|
def z_diagonal(dim, dtype=float):
|
29
37
|
r"""Return the diagonal for the operator :math:`Z^\otimes n`"""
|
30
38
|
parity = np.zeros(dim, dtype=dtype)
|
@@ -33,6 +41,13 @@ def z_diagonal(dim, dtype=float):
|
|
33
41
|
return (-1) ** np.mod(parity, 2)
|
34
42
|
|
35
43
|
|
44
|
+
@deprecate_func(
|
45
|
+
since="1.3",
|
46
|
+
package_name="Qiskit",
|
47
|
+
removal_timeline="in Qiskit 2.0",
|
48
|
+
additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
|
49
|
+
"the https://github.com/Qiskit/qiskit-addon-mthree package.",
|
50
|
+
)
|
36
51
|
def expval_with_stddev(coeffs: np.ndarray, probs: np.ndarray, shots: int) -> Tuple[float, float]:
|
37
52
|
"""Compute expectation value and standard deviation.
|
38
53
|
Args:
|
@@ -60,6 +75,13 @@ def expval_with_stddev(coeffs: np.ndarray, probs: np.ndarray, shots: int) -> Tup
|
|
60
75
|
return [expval, calc_stddev]
|
61
76
|
|
62
77
|
|
78
|
+
@deprecate_func(
|
79
|
+
since="1.3",
|
80
|
+
package_name="Qiskit",
|
81
|
+
removal_timeline="in Qiskit 2.0",
|
82
|
+
additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
|
83
|
+
"the https://github.com/Qiskit/qiskit-addon-mthree package.",
|
84
|
+
)
|
63
85
|
def stddev(probs, shots):
|
64
86
|
"""Calculate stddev dict"""
|
65
87
|
ret = {}
|
@@ -69,6 +91,13 @@ def stddev(probs, shots):
|
|
69
91
|
return ret
|
70
92
|
|
71
93
|
|
94
|
+
@deprecate_func(
|
95
|
+
since="1.3",
|
96
|
+
package_name="Qiskit",
|
97
|
+
removal_timeline="in Qiskit 2.0",
|
98
|
+
additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
|
99
|
+
"the https://github.com/Qiskit/qiskit-addon-mthree package.",
|
100
|
+
)
|
72
101
|
def str2diag(string):
|
73
102
|
"""Transform diagonal from a string to a numpy array"""
|
74
103
|
chars = {
|
@@ -85,6 +114,13 @@ def str2diag(string):
|
|
85
114
|
return ret
|
86
115
|
|
87
116
|
|
117
|
+
@deprecate_func(
|
118
|
+
since="1.3",
|
119
|
+
package_name="Qiskit",
|
120
|
+
removal_timeline="in Qiskit 2.0",
|
121
|
+
additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
|
122
|
+
"the https://github.com/Qiskit/qiskit-addon-mthree package.",
|
123
|
+
)
|
88
124
|
def counts_to_vector(counts: Counts, num_qubits: int) -> Tuple[np.ndarray, int]:
|
89
125
|
"""Transforms Counts to a probability vector"""
|
90
126
|
vec = np.zeros(2**num_qubits, dtype=float)
|
@@ -96,6 +132,13 @@ def counts_to_vector(counts: Counts, num_qubits: int) -> Tuple[np.ndarray, int]:
|
|
96
132
|
return vec, shots
|
97
133
|
|
98
134
|
|
135
|
+
@deprecate_func(
|
136
|
+
since="1.3",
|
137
|
+
package_name="Qiskit",
|
138
|
+
removal_timeline="in Qiskit 2.0",
|
139
|
+
additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
|
140
|
+
"the https://github.com/Qiskit/qiskit-addon-mthree package.",
|
141
|
+
)
|
99
142
|
def remap_qubits(
|
100
143
|
vec: np.ndarray, num_qubits: int, qubits: Optional[List[int]] = None
|
101
144
|
) -> np.ndarray:
|
@@ -108,6 +151,13 @@ def remap_qubits(
|
|
108
151
|
return vec
|
109
152
|
|
110
153
|
|
154
|
+
@deprecate_func(
|
155
|
+
since="1.3",
|
156
|
+
package_name="Qiskit",
|
157
|
+
removal_timeline="in Qiskit 2.0",
|
158
|
+
additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
|
159
|
+
"the https://github.com/Qiskit/qiskit-addon-mthree package.",
|
160
|
+
)
|
111
161
|
def marganalize_counts(
|
112
162
|
counts: Counts,
|
113
163
|
qubit_index: Dict[int, int],
|
@@ -129,6 +179,13 @@ def marganalize_counts(
|
|
129
179
|
return counts
|
130
180
|
|
131
181
|
|
182
|
+
@deprecate_func(
|
183
|
+
since="1.3",
|
184
|
+
package_name="Qiskit",
|
185
|
+
removal_timeline="in Qiskit 2.0",
|
186
|
+
additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
|
187
|
+
"the https://github.com/Qiskit/qiskit-addon-mthree package.",
|
188
|
+
)
|
132
189
|
def counts_probability_vector(
|
133
190
|
counts: Counts,
|
134
191
|
qubit_index: Dict[int, int],
|
qiskit/scheduler/config.py
CHANGED
@@ -16,11 +16,13 @@ from typing import List
|
|
16
16
|
|
17
17
|
from qiskit.pulse.instruction_schedule_map import InstructionScheduleMap
|
18
18
|
from qiskit.pulse.utils import format_meas_map
|
19
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
19
20
|
|
20
21
|
|
21
22
|
class ScheduleConfig:
|
22
23
|
"""Configuration for pulse scheduling."""
|
23
24
|
|
25
|
+
@deprecate_pulse_dependency(moving_to_dynamics=True)
|
24
26
|
def __init__(self, inst_map: InstructionScheduleMap, meas_map: List[List[int]], dt: float):
|
25
27
|
"""
|
26
28
|
Container for information needed to schedule a QuantumCircuit into a pulse Schedule.
|
@@ -23,8 +23,10 @@ from qiskit.pulse.schedule import Schedule
|
|
23
23
|
from qiskit.scheduler.config import ScheduleConfig
|
24
24
|
from qiskit.scheduler.lowering import lower_gates
|
25
25
|
from qiskit.providers import BackendV1, BackendV2
|
26
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
26
27
|
|
27
28
|
|
29
|
+
@deprecate_pulse_dependency(moving_to_dynamics=True)
|
28
30
|
def as_soon_as_possible(
|
29
31
|
circuit: QuantumCircuit,
|
30
32
|
schedule_config: ScheduleConfig,
|
@@ -78,6 +80,7 @@ def as_soon_as_possible(
|
|
78
80
|
return schedule
|
79
81
|
|
80
82
|
|
83
|
+
@deprecate_pulse_dependency(moving_to_dynamics=True)
|
81
84
|
def as_late_as_possible(
|
82
85
|
circuit: QuantumCircuit,
|
83
86
|
schedule_config: ScheduleConfig,
|
@@ -20,8 +20,10 @@ from qiskit.pulse.schedule import Schedule
|
|
20
20
|
from qiskit.scheduler.config import ScheduleConfig
|
21
21
|
from qiskit.scheduler.methods import as_soon_as_possible, as_late_as_possible
|
22
22
|
from qiskit.providers import BackendV1, BackendV2
|
23
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
23
24
|
|
24
25
|
|
26
|
+
@deprecate_pulse_dependency(moving_to_dynamics=True)
|
25
27
|
def schedule_circuit(
|
26
28
|
circuit: QuantumCircuit,
|
27
29
|
schedule_config: ScheduleConfig,
|
qiskit/scheduler/sequence.py
CHANGED
@@ -25,8 +25,10 @@ from qiskit.pulse.transforms import pad
|
|
25
25
|
from qiskit.scheduler.config import ScheduleConfig
|
26
26
|
from qiskit.scheduler.lowering import lower_gates
|
27
27
|
from qiskit.providers import BackendV1, BackendV2
|
28
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
28
29
|
|
29
30
|
|
31
|
+
@deprecate_pulse_dependency(moving_to_dynamics=True)
|
30
32
|
def sequence(
|
31
33
|
scheduled_circuit: QuantumCircuit,
|
32
34
|
schedule_config: ScheduleConfig,
|