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
@@ -17,12 +17,13 @@ from __future__ import annotations
|
|
17
17
|
import warnings
|
18
18
|
from collections import defaultdict
|
19
19
|
from dataclasses import dataclass
|
20
|
-
from typing import Iterable
|
20
|
+
from typing import Any, Iterable, Union
|
21
21
|
|
22
22
|
import numpy as np
|
23
23
|
from numpy.typing import NDArray
|
24
24
|
|
25
25
|
from qiskit.circuit import QuantumCircuit
|
26
|
+
from qiskit.exceptions import QiskitError
|
26
27
|
from qiskit.primitives.backend_estimator import _run_circuits
|
27
28
|
from qiskit.primitives.base import BaseSamplerV2
|
28
29
|
from qiskit.primitives.containers import (
|
@@ -53,6 +54,11 @@ class Options:
|
|
53
54
|
Default: None.
|
54
55
|
"""
|
55
56
|
|
57
|
+
run_options: dict[str, Any] | None = None
|
58
|
+
"""A dictionary of options to pass to the backend's ``run()`` method.
|
59
|
+
Default: None (no option passed to backend's ``run`` method)
|
60
|
+
"""
|
61
|
+
|
56
62
|
|
57
63
|
@dataclass
|
58
64
|
class _MeasureInfo:
|
@@ -62,6 +68,16 @@ class _MeasureInfo:
|
|
62
68
|
start: int
|
63
69
|
|
64
70
|
|
71
|
+
ResultMemory = Union[list[str], list[list[float]], list[list[list[float]]]]
|
72
|
+
"""Type alias for possible level 2 and level 1 result memory formats. For level
|
73
|
+
2, the format is a list of bit strings. For level 1, format can be either a
|
74
|
+
list of I/Q pairs (list with two floats) for each memory slot if using
|
75
|
+
``meas_return=avg`` or a list of of lists of I/Q pairs if using
|
76
|
+
``meas_return=single`` with the outer list indexing shot number and the inner
|
77
|
+
list indexing memory slot.
|
78
|
+
"""
|
79
|
+
|
80
|
+
|
65
81
|
class BackendSamplerV2(BaseSamplerV2):
|
66
82
|
"""Evaluates bitstrings for provided quantum circuits
|
67
83
|
|
@@ -91,6 +107,9 @@ class BackendSamplerV2(BaseSamplerV2):
|
|
91
107
|
* ``seed_simulator``: The seed to use in the simulator. If None, a random seed will be used.
|
92
108
|
Default: None.
|
93
109
|
|
110
|
+
* ``run_options``: A dictionary of options to pass through to the ``run()``
|
111
|
+
method of the wrapped :class:`~.BackendV2` instance.
|
112
|
+
|
94
113
|
.. note::
|
95
114
|
|
96
115
|
This class requires a backend that supports ``memory`` option.
|
@@ -165,19 +184,27 @@ class BackendSamplerV2(BaseSamplerV2):
|
|
165
184
|
for circuits in bound_circuits:
|
166
185
|
flatten_circuits.extend(np.ravel(circuits).tolist())
|
167
186
|
|
187
|
+
run_opts = self._options.run_options or {}
|
168
188
|
# run circuits
|
169
189
|
results, _ = _run_circuits(
|
170
190
|
flatten_circuits,
|
171
191
|
self._backend,
|
192
|
+
clear_metadata=False,
|
172
193
|
memory=True,
|
173
194
|
shots=shots,
|
174
195
|
seed_simulator=self._options.seed_simulator,
|
196
|
+
**run_opts,
|
175
197
|
)
|
176
198
|
result_memory = _prepare_memory(results)
|
177
199
|
|
178
200
|
# pack memory to an ndarray of uint8
|
179
201
|
results = []
|
180
202
|
start = 0
|
203
|
+
meas_level = (
|
204
|
+
None
|
205
|
+
if self._options.run_options is None
|
206
|
+
else self._options.run_options.get("meas_level")
|
207
|
+
)
|
181
208
|
for pub, bound in zip(pubs, bound_circuits):
|
182
209
|
meas_info, max_num_bytes = _analyze_circuit(pub.circuit)
|
183
210
|
end = start + bound.size
|
@@ -189,6 +216,7 @@ class BackendSamplerV2(BaseSamplerV2):
|
|
189
216
|
meas_info,
|
190
217
|
max_num_bytes,
|
191
218
|
pub.circuit.metadata,
|
219
|
+
meas_level,
|
192
220
|
)
|
193
221
|
)
|
194
222
|
start = end
|
@@ -197,28 +225,43 @@ class BackendSamplerV2(BaseSamplerV2):
|
|
197
225
|
|
198
226
|
def _postprocess_pub(
|
199
227
|
self,
|
200
|
-
result_memory: list[
|
228
|
+
result_memory: list[ResultMemory],
|
201
229
|
shots: int,
|
202
230
|
shape: tuple[int, ...],
|
203
231
|
meas_info: list[_MeasureInfo],
|
204
232
|
max_num_bytes: int,
|
205
233
|
circuit_metadata: dict,
|
234
|
+
meas_level: int | None,
|
206
235
|
) -> SamplerPubResult:
|
207
|
-
"""Converts the memory data into
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
236
|
+
"""Converts the memory data into a sampler pub result
|
237
|
+
|
238
|
+
For level 2 data, the memory data are stored in an array of bit arrays
|
239
|
+
with the shape of the pub. For level 1 data, the data are stored in a
|
240
|
+
complex numpy array.
|
241
|
+
"""
|
242
|
+
if meas_level == 2 or meas_level is None:
|
243
|
+
arrays = {
|
244
|
+
item.creg_name: np.zeros(shape + (shots, item.num_bytes), dtype=np.uint8)
|
245
|
+
for item in meas_info
|
246
|
+
}
|
247
|
+
memory_array = _memory_array(result_memory, max_num_bytes)
|
248
|
+
|
249
|
+
for samples, index in zip(memory_array, np.ndindex(*shape)):
|
250
|
+
for item in meas_info:
|
251
|
+
ary = _samples_to_packed_array(samples, item.num_bits, item.start)
|
252
|
+
arrays[item.creg_name][index] = ary
|
253
|
+
|
254
|
+
meas = {
|
255
|
+
item.creg_name: BitArray(arrays[item.creg_name], item.num_bits)
|
256
|
+
for item in meas_info
|
257
|
+
}
|
258
|
+
elif meas_level == 1:
|
259
|
+
raw = np.array(result_memory)
|
260
|
+
cplx = raw[..., 0] + 1j * raw[..., 1]
|
261
|
+
cplx = np.reshape(cplx, (*shape, *cplx.shape[1:]))
|
262
|
+
meas = {item.creg_name: cplx for item in meas_info}
|
263
|
+
else:
|
264
|
+
raise QiskitError(f"Unsupported meas_level: {meas_level}")
|
222
265
|
return SamplerPubResult(
|
223
266
|
DataBin(**meas, shape=shape),
|
224
267
|
metadata={"shots": shots, "circuit_metadata": circuit_metadata},
|
@@ -248,7 +291,7 @@ def _analyze_circuit(circuit: QuantumCircuit) -> tuple[list[_MeasureInfo], int]:
|
|
248
291
|
return meas_info, _min_num_bytes(max_num_bits)
|
249
292
|
|
250
293
|
|
251
|
-
def _prepare_memory(results: list[Result]) -> list[
|
294
|
+
def _prepare_memory(results: list[Result]) -> list[ResultMemory]:
|
252
295
|
"""Joins splitted results if exceeding max_experiments"""
|
253
296
|
lst = []
|
254
297
|
for res in results:
|
@@ -92,7 +92,7 @@ class BaseEstimatorV1(BasePrimitive, Generic[T]):
|
|
92
92
|
# calculate [ <psi1(theta1)|H1|psi1(theta1)> ]
|
93
93
|
job = estimator.run([psi1], [H1], [theta1])
|
94
94
|
job_result = job.result() # It will block until the job finishes.
|
95
|
-
print(f"The primitive-job finished with result {job_result}")
|
95
|
+
print(f"The primitive-job finished with result {job_result}")
|
96
96
|
|
97
97
|
# calculate [ <psi1(theta1)|H1|psi1(theta1)>,
|
98
98
|
# <psi2(theta2)|H2|psi2(theta2)>,
|
@@ -144,7 +144,7 @@ class BaseEstimatorV1(BasePrimitive, Generic[T]):
|
|
144
144
|
|
145
145
|
.. code-block:: python
|
146
146
|
|
147
|
-
values = parameter_values[i]
|
147
|
+
values = parameter_values[i]
|
148
148
|
|
149
149
|
Args:
|
150
150
|
circuits: one or more circuit objects.
|
@@ -34,14 +34,22 @@ class DataBin(ShapedMixin):
|
|
34
34
|
|
35
35
|
.. code-block:: python
|
36
36
|
|
37
|
+
import numpy as np
|
38
|
+
from qiskit.primitives import DataBin, BitArray
|
39
|
+
|
37
40
|
data = DataBin(
|
38
|
-
alpha=BitArray.
|
41
|
+
alpha=BitArray.from_samples(["0010"]),
|
39
42
|
beta=np.array([1.2])
|
40
43
|
)
|
41
44
|
|
42
45
|
print("alpha data:", data.alpha)
|
43
46
|
print("beta data:", data.beta)
|
44
47
|
|
48
|
+
.. code-block::
|
49
|
+
|
50
|
+
alpha data: BitArray(<shape=(), num_shots=1, num_bits=2>)
|
51
|
+
beta data: [1.2]
|
52
|
+
|
45
53
|
"""
|
46
54
|
|
47
55
|
__slots__ = ("_data", "_shape")
|
@@ -287,6 +287,6 @@ def _final_measurement_mapping(circuit: QuantumCircuit) -> dict[tuple[ClassicalR
|
|
287
287
|
|
288
288
|
def _has_control_flow(circuit: QuantumCircuit) -> bool:
|
289
289
|
return any(
|
290
|
-
isinstance((op := instruction.operation), ControlFlowOp) or op.
|
290
|
+
isinstance((op := instruction.operation), ControlFlowOp) or op._condition
|
291
291
|
for instruction in circuit
|
292
292
|
)
|
qiskit/primitives/utils.py
CHANGED
@@ -82,7 +82,7 @@ def init_observable(observable: BaseOperator | str) -> SparsePauliOp:
|
|
82
82
|
since="1.2",
|
83
83
|
additional_msg="Use ``QuantumCircuit.layout`` and ``SparsePauliOp.apply_layout`` "
|
84
84
|
+ "to adjust an operator for a layout. Otherwise, use ``mthree.utils.final_measurement_mapping``. "
|
85
|
-
+ "See https://qiskit
|
85
|
+
+ "See <https://qiskit.github.io/qiskit-addon-mthree/apidocs/utils> for details.",
|
86
86
|
)
|
87
87
|
def final_measurement_mapping(circuit: QuantumCircuit) -> dict[int, int]:
|
88
88
|
"""Return the final measurement mapping for the circuit.
|
qiskit/providers/__init__.py
CHANGED
@@ -160,7 +160,7 @@ steps for writing a provider are:
|
|
160
160
|
interacting with a running job.
|
161
161
|
|
162
162
|
For a simple example of a provider, see the
|
163
|
-
`qiskit-aqt-provider <https://github.com/
|
163
|
+
`qiskit-aqt-provider <https://github.com/qiskit-community/qiskit-aqt-provider>`__
|
164
164
|
|
165
165
|
Provider
|
166
166
|
--------
|
@@ -307,7 +307,7 @@ Custom Basis Gates
|
|
307
307
|
|
308
308
|
def _define(self):
|
309
309
|
qc = QuantumCircuit(1)
|
310
|
-
|
310
|
+
qc.ry(np.pi / 2, 0)
|
311
311
|
self.definition = qc
|
312
312
|
|
313
313
|
The key thing to ensure is that for any custom gates in your Backend's basis set
|
@@ -664,7 +664,7 @@ that abstract away the mechanics of getting the best result efficiently, to
|
|
664
664
|
concentrate on higher level applications using these outputs.
|
665
665
|
|
666
666
|
For example, if your backends were well suited to leverage
|
667
|
-
`mthree <https://github.com/Qiskit-
|
667
|
+
`mthree <https://github.com/Qiskit/qiskit-addon-mthree>`__ measurement
|
668
668
|
mitigation to improve the quality of the results, you could implement a
|
669
669
|
provider-specific :class:`~.Sampler` implementation that leverages the
|
670
670
|
``M3Mitigation`` class internally to run the circuits and return
|
qiskit/providers/backend.py
CHANGED
@@ -24,6 +24,7 @@ from qiskit.providers.provider import Provider
|
|
24
24
|
from qiskit.providers.models.backendstatus import BackendStatus
|
25
25
|
from qiskit.circuit.gate import Instruction
|
26
26
|
from qiskit.utils import deprecate_func
|
27
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
27
28
|
|
28
29
|
|
29
30
|
class Backend:
|
@@ -485,10 +486,16 @@ class BackendV2(Backend, ABC):
|
|
485
486
|
raise NotImplementedError
|
486
487
|
|
487
488
|
@property
|
489
|
+
@deprecate_pulse_dependency(is_property=True)
|
488
490
|
def instruction_schedule_map(self):
|
489
491
|
"""Return the :class:`~qiskit.pulse.InstructionScheduleMap` for the
|
490
492
|
instructions defined in this backend's target."""
|
491
|
-
return self.
|
493
|
+
return self._instruction_schedule_map
|
494
|
+
|
495
|
+
@property
|
496
|
+
def _instruction_schedule_map(self):
|
497
|
+
"""An alternative private path to be used internally to avoid pulse deprecation warnings."""
|
498
|
+
return self.target._get_instruction_schedule_map()
|
492
499
|
|
493
500
|
def qubit_properties(
|
494
501
|
self, qubit: Union[int, List[int]]
|
@@ -524,6 +531,7 @@ class BackendV2(Backend, ABC):
|
|
524
531
|
return self.target.qubit_properties[qubit]
|
525
532
|
return [self.target.qubit_properties[q] for q in qubit]
|
526
533
|
|
534
|
+
@deprecate_pulse_dependency
|
527
535
|
def drive_channel(self, qubit: int):
|
528
536
|
"""Return the drive channel for the given qubit.
|
529
537
|
|
@@ -539,6 +547,7 @@ class BackendV2(Backend, ABC):
|
|
539
547
|
"""
|
540
548
|
raise NotImplementedError
|
541
549
|
|
550
|
+
@deprecate_pulse_dependency
|
542
551
|
def measure_channel(self, qubit: int):
|
543
552
|
"""Return the measure stimulus channel for the given qubit.
|
544
553
|
|
@@ -554,6 +563,7 @@ class BackendV2(Backend, ABC):
|
|
554
563
|
"""
|
555
564
|
raise NotImplementedError
|
556
565
|
|
566
|
+
@deprecate_pulse_dependency
|
557
567
|
def acquire_channel(self, qubit: int):
|
558
568
|
"""Return the acquisition channel for the given qubit.
|
559
569
|
|
@@ -569,6 +579,7 @@ class BackendV2(Backend, ABC):
|
|
569
579
|
"""
|
570
580
|
raise NotImplementedError
|
571
581
|
|
582
|
+
@deprecate_pulse_dependency
|
572
583
|
def control_channel(self, qubits: Iterable[int]):
|
573
584
|
"""Return the secondary drive channel for the given qubit
|
574
585
|
|
@@ -25,10 +25,13 @@ from qiskit.circuit.controlflow import CONTROL_FLOW_OP_NAMES
|
|
25
25
|
from qiskit.providers.models.pulsedefaults import PulseDefaults
|
26
26
|
from qiskit.providers.options import Options
|
27
27
|
from qiskit.providers.exceptions import BackendPropertyError
|
28
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_arg, deprecate_pulse_dependency
|
29
|
+
|
28
30
|
|
29
31
|
logger = logging.getLogger(__name__)
|
30
32
|
|
31
33
|
|
34
|
+
@deprecate_pulse_arg("defaults")
|
32
35
|
def convert_to_target(
|
33
36
|
configuration: BackendConfiguration,
|
34
37
|
properties: BackendProperties = None,
|
@@ -46,7 +49,7 @@ def convert_to_target(
|
|
46
49
|
Args:
|
47
50
|
configuration: Backend configuration as ``BackendConfiguration``
|
48
51
|
properties: Backend property dictionary or ``BackendProperties``
|
49
|
-
defaults: Backend pulse defaults dictionary or ``PulseDefaults``
|
52
|
+
defaults: DEPRECATED. Backend pulse defaults dictionary or ``PulseDefaults``
|
50
53
|
custom_name_mapping: A name mapping must be supplied for the operation
|
51
54
|
not included in Qiskit Standard Gate name mapping, otherwise the operation
|
52
55
|
will be dropped in the resulting ``Target`` object.
|
@@ -56,7 +59,20 @@ def convert_to_target(
|
|
56
59
|
Returns:
|
57
60
|
A ``Target`` instance.
|
58
61
|
"""
|
62
|
+
return _convert_to_target(
|
63
|
+
configuration, properties, defaults, custom_name_mapping, add_delay, filter_faulty
|
64
|
+
)
|
65
|
+
|
59
66
|
|
67
|
+
def _convert_to_target(
|
68
|
+
configuration: BackendConfiguration,
|
69
|
+
properties: BackendProperties = None,
|
70
|
+
defaults: PulseDefaults = None,
|
71
|
+
custom_name_mapping: Optional[Dict[str, Any]] = None,
|
72
|
+
add_delay: bool = True,
|
73
|
+
filter_faulty: bool = True,
|
74
|
+
):
|
75
|
+
"""An alternative private path to avoid pulse deprecations"""
|
60
76
|
# importing packages where they are needed, to avoid cyclic-import.
|
61
77
|
# pylint: disable=cyclic-import
|
62
78
|
from qiskit.transpiler.target import (
|
@@ -265,7 +281,7 @@ def convert_to_target(
|
|
265
281
|
|
266
282
|
entry = inst_sched_map._get_calibration_entry(name, qubits)
|
267
283
|
try:
|
268
|
-
prop_name_map[name][qubits].
|
284
|
+
prop_name_map[name][qubits]._calibration_prop = entry
|
269
285
|
except AttributeError:
|
270
286
|
# if instruction properties are "None", add entry
|
271
287
|
prop_name_map[name].update({qubits: InstructionProperties(None, None, entry)})
|
@@ -410,7 +426,7 @@ class BackendV2Converter(BackendV2):
|
|
410
426
|
:rtype: Target
|
411
427
|
"""
|
412
428
|
if self._target is None:
|
413
|
-
self._target =
|
429
|
+
self._target = _convert_to_target(
|
414
430
|
configuration=self._config,
|
415
431
|
properties=self._properties,
|
416
432
|
defaults=self._defaults,
|
@@ -436,15 +452,19 @@ class BackendV2Converter(BackendV2):
|
|
436
452
|
def meas_map(self) -> List[List[int]]:
|
437
453
|
return self._config.meas_map
|
438
454
|
|
455
|
+
@deprecate_pulse_dependency
|
439
456
|
def drive_channel(self, qubit: int):
|
440
457
|
return self._config.drive(qubit)
|
441
458
|
|
459
|
+
@deprecate_pulse_dependency
|
442
460
|
def measure_channel(self, qubit: int):
|
443
461
|
return self._config.measure(qubit)
|
444
462
|
|
463
|
+
@deprecate_pulse_dependency
|
445
464
|
def acquire_channel(self, qubit: int):
|
446
465
|
return self._config.acquire(qubit)
|
447
466
|
|
467
|
+
@deprecate_pulse_dependency
|
448
468
|
def control_channel(self, qubits: Iterable[int]):
|
449
469
|
return self._config.control(qubits)
|
450
470
|
|
@@ -48,6 +48,7 @@ from qiskit.providers.options import Options
|
|
48
48
|
from qiskit.qobj import QasmQobj, QasmQobjConfig, QasmQobjExperiment
|
49
49
|
from qiskit.result import Result
|
50
50
|
from qiskit.transpiler import Target
|
51
|
+
from qiskit.utils.deprecation import deprecate_func
|
51
52
|
|
52
53
|
from .basic_provider_job import BasicProviderJob
|
53
54
|
from .basic_provider_tools import single_gate_matrix
|
@@ -212,6 +213,14 @@ class BasicSimulator(BackendV2):
|
|
212
213
|
)
|
213
214
|
return target
|
214
215
|
|
216
|
+
@deprecate_func(
|
217
|
+
since="1.3.0",
|
218
|
+
removal_timeline="in Qiskit 2.0.0",
|
219
|
+
additional_msg="The `BackendConfiguration` class is part of the deprecated `BackendV1` "
|
220
|
+
"workflow, and no longer necessary for `BackendV2`. The individual configuration elements "
|
221
|
+
"can be retrieved directly from the backend or from the contained `Target` instance "
|
222
|
+
"(`backend.target)`).",
|
223
|
+
)
|
215
224
|
def configuration(self) -> BackendConfiguration:
|
216
225
|
"""Return the simulator backend configuration.
|
217
226
|
|
@@ -248,7 +257,7 @@ class BasicSimulator(BackendV2):
|
|
248
257
|
backend_name=self.name,
|
249
258
|
backend_version=self.backend_version,
|
250
259
|
n_qubits=self.num_qubits,
|
251
|
-
basis_gates=self.target.operation_names,
|
260
|
+
basis_gates=list(self.target.operation_names),
|
252
261
|
gates=gates,
|
253
262
|
local=True,
|
254
263
|
simulator=True,
|
@@ -532,7 +541,8 @@ class BasicSimulator(BackendV2):
|
|
532
541
|
"initial_statevector": np.array([1, 0, 0, 1j]) / math.sqrt(2),
|
533
542
|
}
|
534
543
|
"""
|
535
|
-
# TODO: replace assemble with new run flow
|
544
|
+
# TODO: replace assemble with new run flow. If this is not achieved before 2.0,
|
545
|
+
# see removal note on `def _assemble`, L192 of qiskit/compiler/assembler.py
|
536
546
|
from qiskit.compiler.assembler import _assemble
|
537
547
|
|
538
548
|
out_options = {}
|
@@ -14,6 +14,8 @@
|
|
14
14
|
Fake backend abstract class for mock backends supporting OpenPulse.
|
15
15
|
"""
|
16
16
|
|
17
|
+
import warnings
|
18
|
+
|
17
19
|
from qiskit.exceptions import QiskitError
|
18
20
|
from qiskit.providers.models.backendconfiguration import PulseBackendConfiguration
|
19
21
|
from qiskit.providers.models.pulsedefaults import PulseDefaults
|
@@ -30,7 +32,10 @@ class FakePulseBackend(FakeQasmBackend):
|
|
30
32
|
def defaults(self):
|
31
33
|
"""Returns a snapshot of device defaults"""
|
32
34
|
if not self._defaults:
|
33
|
-
|
35
|
+
with warnings.catch_warnings():
|
36
|
+
warnings.simplefilter(action="ignore", category=DeprecationWarning)
|
37
|
+
# Filter deprecation warnings emitted from Qiskit Pulse
|
38
|
+
self._set_defaults_from_json()
|
34
39
|
return self._defaults
|
35
40
|
|
36
41
|
def _set_defaults_from_json(self):
|
@@ -42,6 +42,7 @@ from qiskit.qobj.converters.pulse_instruction import QobjToInstructionConverter
|
|
42
42
|
from qiskit.pulse.calibration_entries import PulseQobjDef
|
43
43
|
from qiskit.providers.models.pulsedefaults import MeasurementKernel, Discriminator
|
44
44
|
from qiskit.qobj.pulse_qobj import QobjMeasurementOption
|
45
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency, deprecate_pulse_arg
|
45
46
|
|
46
47
|
# Noise default values/ranges for duration and error of supported
|
47
48
|
# instructions. There are two possible formats:
|
@@ -518,6 +519,8 @@ class GenericBackendV2(BackendV2):
|
|
518
519
|
transpilation.
|
519
520
|
"""
|
520
521
|
|
522
|
+
@deprecate_pulse_arg("pulse_channels")
|
523
|
+
@deprecate_pulse_arg("calibrate_instructions")
|
521
524
|
def __init__(
|
522
525
|
self,
|
523
526
|
num_qubits: int,
|
@@ -560,7 +563,7 @@ class GenericBackendV2(BackendV2):
|
|
560
563
|
control_flow: Flag to enable control flow directives on the target
|
561
564
|
(defaults to False).
|
562
565
|
|
563
|
-
calibrate_instructions: Instruction calibration settings, this argument
|
566
|
+
calibrate_instructions: DEPRECATED. Instruction calibration settings, this argument
|
564
567
|
supports both boolean and :class:`.InstructionScheduleMap` as
|
565
568
|
input types, and is ``None`` by default:
|
566
569
|
|
@@ -578,7 +581,7 @@ class GenericBackendV2(BackendV2):
|
|
578
581
|
|
579
582
|
seed: Optional seed for generation of default values.
|
580
583
|
|
581
|
-
pulse_channels: If true, sets default pulse channel information on the backend.
|
584
|
+
pulse_channels: DEPRECATED. If true, sets default pulse channel information on the backend.
|
582
585
|
|
583
586
|
noise_info: If true, associates gates and qubits with default noise information.
|
584
587
|
"""
|
@@ -648,14 +651,17 @@ class GenericBackendV2(BackendV2):
|
|
648
651
|
return self._target.concurrent_measurements
|
649
652
|
|
650
653
|
def _build_default_channels(self) -> None:
|
651
|
-
|
652
|
-
"
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
(
|
657
|
-
|
658
|
-
|
654
|
+
with warnings.catch_warnings():
|
655
|
+
warnings.simplefilter(action="ignore", category=DeprecationWarning)
|
656
|
+
# Prevent pulse deprecation warnings from being emitted
|
657
|
+
channels_map = {
|
658
|
+
"acquire": {(i,): [pulse.AcquireChannel(i)] for i in range(self.num_qubits)},
|
659
|
+
"drive": {(i,): [pulse.DriveChannel(i)] for i in range(self.num_qubits)},
|
660
|
+
"measure": {(i,): [pulse.MeasureChannel(i)] for i in range(self.num_qubits)},
|
661
|
+
"control": {
|
662
|
+
(edge): [pulse.ControlChannel(i)] for i, edge in enumerate(self._coupling_map)
|
663
|
+
},
|
664
|
+
}
|
659
665
|
setattr(self, "channels_map", channels_map)
|
660
666
|
|
661
667
|
def _get_noise_defaults(self, name: str, num_qubits: int) -> tuple:
|
@@ -867,27 +873,33 @@ class GenericBackendV2(BackendV2):
|
|
867
873
|
duration, error = (
|
868
874
|
noise_params
|
869
875
|
if len(noise_params) == 2
|
870
|
-
else (
|
871
|
-
|
872
|
-
|
873
|
-
calibration_inst_map is not None
|
874
|
-
and instruction.name not in ["reset", "delay"]
|
875
|
-
and qarg in calibration_inst_map.qubits_with_instruction(instruction.name)
|
876
|
-
):
|
877
|
-
# Do NOT call .get method. This parses Qobj immediately.
|
878
|
-
# This operation is computationally expensive and should be bypassed.
|
879
|
-
calibration_entry = calibration_inst_map._get_calibration_entry(
|
880
|
-
instruction.name, qargs
|
876
|
+
else (
|
877
|
+
self._rng.uniform(*noise_params[:2]),
|
878
|
+
self._rng.uniform(*noise_params[2:]),
|
881
879
|
)
|
882
|
-
|
883
|
-
|
884
|
-
|
885
|
-
#
|
886
|
-
|
887
|
-
|
888
|
-
|
889
|
-
|
890
|
-
|
880
|
+
)
|
881
|
+
with warnings.catch_warnings():
|
882
|
+
warnings.simplefilter(action="ignore", category=DeprecationWarning)
|
883
|
+
# Prevent pulse deprecations from being emitted
|
884
|
+
if (
|
885
|
+
calibration_inst_map is not None
|
886
|
+
and instruction.name not in ["reset", "delay"]
|
887
|
+
and qarg in calibration_inst_map.qubits_with_instruction(instruction.name)
|
888
|
+
):
|
889
|
+
# Do NOT call .get method. This parses Qobj immediately.
|
890
|
+
# This operation is computationally expensive and should be bypassed.
|
891
|
+
calibration_entry = calibration_inst_map._get_calibration_entry(
|
892
|
+
instruction.name, qargs
|
893
|
+
)
|
894
|
+
else:
|
895
|
+
calibration_entry = None
|
896
|
+
if duration is not None and len(noise_params) > 2:
|
897
|
+
# Ensure exact conversion of duration from seconds to dt
|
898
|
+
dt = _QUBIT_PROPERTIES["dt"]
|
899
|
+
rounded_duration = round(duration / dt) * dt
|
900
|
+
# Clamp rounded duration to be between min and max values
|
901
|
+
duration = max(noise_params[0], min(rounded_duration, noise_params[1]))
|
902
|
+
props.update({qargs: InstructionProperties(duration, error, calibration_entry)})
|
891
903
|
self._target.add_instruction(instruction, props)
|
892
904
|
|
893
905
|
# The "measure" instruction calibrations need to be added qubit by qubit, once the
|
@@ -990,6 +1002,7 @@ class GenericBackendV2(BackendV2):
|
|
990
1002
|
else:
|
991
1003
|
return BasicSimulator._default_options()
|
992
1004
|
|
1005
|
+
@deprecate_pulse_dependency
|
993
1006
|
def drive_channel(self, qubit: int):
|
994
1007
|
drive_channels_map = getattr(self, "channels_map", {}).get("drive", {})
|
995
1008
|
qubits = (qubit,)
|
@@ -997,6 +1010,7 @@ class GenericBackendV2(BackendV2):
|
|
997
1010
|
return drive_channels_map[qubits][0]
|
998
1011
|
return None
|
999
1012
|
|
1013
|
+
@deprecate_pulse_dependency
|
1000
1014
|
def measure_channel(self, qubit: int):
|
1001
1015
|
measure_channels_map = getattr(self, "channels_map", {}).get("measure", {})
|
1002
1016
|
qubits = (qubit,)
|
@@ -1004,6 +1018,7 @@ class GenericBackendV2(BackendV2):
|
|
1004
1018
|
return measure_channels_map[qubits][0]
|
1005
1019
|
return None
|
1006
1020
|
|
1021
|
+
@deprecate_pulse_dependency
|
1007
1022
|
def acquire_channel(self, qubit: int):
|
1008
1023
|
acquire_channels_map = getattr(self, "channels_map", {}).get("acquire", {})
|
1009
1024
|
qubits = (qubit,)
|
@@ -1011,6 +1026,7 @@ class GenericBackendV2(BackendV2):
|
|
1011
1026
|
return acquire_channels_map[qubits][0]
|
1012
1027
|
return None
|
1013
1028
|
|
1029
|
+
@deprecate_pulse_dependency
|
1014
1030
|
def control_channel(self, qubits: Iterable[int]):
|
1015
1031
|
control_channels_map = getattr(self, "channels_map", {}).get("control", {})
|
1016
1032
|
qubits = tuple(qubits)
|
@@ -18,6 +18,7 @@ from typing import Any, Dict, List
|
|
18
18
|
from qiskit.pulse.instruction_schedule_map import InstructionScheduleMap, PulseQobjDef
|
19
19
|
from qiskit.qobj import PulseLibraryItem, PulseQobjInstruction
|
20
20
|
from qiskit.qobj.converters import QobjToInstructionConverter
|
21
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
21
22
|
|
22
23
|
|
23
24
|
class MeasurementKernel:
|
@@ -169,6 +170,7 @@ class PulseDefaults:
|
|
169
170
|
|
170
171
|
_data = {}
|
171
172
|
|
173
|
+
@deprecate_pulse_dependency
|
172
174
|
def __init__(
|
173
175
|
self,
|
174
176
|
qubit_freq_est: List[float],
|