qiskit 1.3.0__cp39-abi3-win32.whl → 1.3.0b1__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 +1 -20
- qiskit/_accelerate.pyd +0 -0
- qiskit/assembler/assemble_schedules.py +0 -2
- qiskit/circuit/__init__.py +1 -44
- qiskit/circuit/_standard_gates_commutations.py +0 -585
- qiskit/circuit/barrier.py +0 -2
- qiskit/circuit/controlflow/builder.py +3 -3
- qiskit/circuit/controlflow/if_else.py +5 -13
- qiskit/circuit/controlflow/while_loop.py +2 -10
- qiskit/circuit/delay.py +3 -20
- qiskit/circuit/equivalence.py +214 -13
- qiskit/circuit/gate.py +1 -3
- qiskit/circuit/instruction.py +11 -32
- qiskit/circuit/instructionset.py +0 -2
- qiskit/circuit/library/__init__.py +14 -110
- qiskit/circuit/library/arithmetic/__init__.py +2 -9
- qiskit/circuit/library/arithmetic/adders/__init__.py +0 -1
- qiskit/circuit/library/arithmetic/adders/adder.py +2 -154
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +56 -20
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +1 -14
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +91 -21
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
- qiskit/circuit/library/arithmetic/multipliers/__init__.py +0 -1
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -8
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +3 -94
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +1 -8
- qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
- qiskit/circuit/library/basis_change/qft.py +38 -20
- qiskit/circuit/library/blueprintcircuit.py +0 -64
- qiskit/circuit/library/boolean_logic/__init__.py +4 -4
- qiskit/circuit/library/boolean_logic/inner_product.py +4 -81
- qiskit/circuit/library/boolean_logic/quantum_and.py +4 -107
- qiskit/circuit/library/boolean_logic/quantum_or.py +3 -107
- qiskit/circuit/library/boolean_logic/quantum_xor.py +3 -97
- qiskit/circuit/library/data_preparation/__init__.py +3 -6
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +29 -342
- qiskit/circuit/library/data_preparation/{_z_feature_map.py → z_feature_map.py} +34 -45
- qiskit/circuit/library/data_preparation/zz_feature_map.py +118 -0
- qiskit/circuit/library/fourier_checking.py +11 -72
- qiskit/circuit/library/generalized_gates/__init__.py +1 -1
- qiskit/circuit/library/generalized_gates/diagonal.py +51 -45
- qiskit/circuit/library/generalized_gates/gms.py +14 -67
- 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 +6 -12
- qiskit/circuit/library/generalized_gates/mcmt.py +107 -167
- qiskit/circuit/library/generalized_gates/permutation.py +6 -8
- qiskit/circuit/library/generalized_gates/rv.py +9 -8
- qiskit/circuit/library/graph_state.py +10 -93
- qiskit/circuit/library/grover_operator.py +2 -270
- qiskit/circuit/library/hidden_linear_function.py +20 -83
- qiskit/circuit/library/iqp.py +20 -99
- qiskit/circuit/library/n_local/__init__.py +7 -19
- qiskit/circuit/library/n_local/efficient_su2.py +5 -118
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +0 -259
- qiskit/circuit/library/n_local/excitation_preserving.py +6 -130
- qiskit/circuit/library/n_local/n_local.py +5 -406
- qiskit/circuit/library/n_local/pauli_two_design.py +4 -106
- qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -80
- qiskit/circuit/library/n_local/real_amplitudes.py +7 -127
- qiskit/circuit/library/n_local/two_local.py +7 -14
- qiskit/circuit/library/overlap.py +26 -91
- qiskit/circuit/library/pauli_evolution.py +15 -17
- qiskit/circuit/library/phase_estimation.py +4 -80
- qiskit/circuit/library/quantum_volume.py +20 -72
- qiskit/circuit/library/standard_gates/__init__.py +1 -20
- qiskit/circuit/library/standard_gates/dcx.py +1 -2
- qiskit/circuit/library/standard_gates/ecr.py +2 -2
- qiskit/circuit/library/standard_gates/h.py +3 -4
- qiskit/circuit/library/standard_gates/i.py +1 -2
- qiskit/circuit/library/standard_gates/iswap.py +2 -2
- qiskit/circuit/library/standard_gates/p.py +12 -20
- qiskit/circuit/library/standard_gates/r.py +1 -1
- qiskit/circuit/library/standard_gates/rx.py +3 -4
- qiskit/circuit/library/standard_gates/rxx.py +2 -2
- qiskit/circuit/library/standard_gates/ry.py +3 -4
- qiskit/circuit/library/standard_gates/ryy.py +2 -2
- qiskit/circuit/library/standard_gates/rz.py +12 -13
- 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 +3 -4
- qiskit/circuit/library/standard_gates/t.py +2 -2
- qiskit/circuit/library/standard_gates/u.py +3 -11
- qiskit/circuit/library/standard_gates/u1.py +15 -65
- qiskit/circuit/library/standard_gates/u2.py +1 -4
- qiskit/circuit/library/standard_gates/u3.py +3 -31
- qiskit/circuit/library/standard_gates/x.py +5 -7
- 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 +3 -4
- qiskit/circuit/library/standard_gates/z.py +3 -3
- qiskit/circuit/library/templates/clifford/clifford_2_1.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +7 -9
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +9 -10
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +7 -9
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +8 -10
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +14 -16
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +12 -14
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +12 -14
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +10 -12
- qiskit/circuit/library/templates/rzx/rzx_cy.py +10 -11
- qiskit/circuit/library/templates/rzx/rzx_xz.py +15 -16
- qiskit/circuit/library/templates/rzx/rzx_yz.py +10 -12
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +20 -22
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +15 -16
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +15 -17
- qiskit/circuit/parameter.py +0 -4
- qiskit/circuit/parameterexpression.py +34 -167
- qiskit/circuit/quantumcircuit.py +126 -162
- qiskit/circuit/singleton.py +0 -2
- qiskit/circuit/store.py +0 -2
- qiskit/compiler/assembler.py +4 -17
- qiskit/compiler/scheduler.py +0 -2
- qiskit/compiler/sequencer.py +0 -2
- qiskit/compiler/transpiler.py +26 -81
- 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 +5 -7
- qiskit/converters/dag_to_dagdependency.py +1 -1
- qiskit/converters/dag_to_dagdependency_v2.py +1 -1
- qiskit/converters/dagdependency_to_circuit.py +1 -5
- qiskit/converters/dagdependency_to_dag.py +1 -6
- qiskit/dagcircuit/collect_blocks.py +3 -3
- qiskit/dagcircuit/dagdependency.py +5 -18
- qiskit/dagcircuit/dagdependency_v2.py +1 -1
- qiskit/dagcircuit/dagnode.py +2 -2
- qiskit/passmanager/__init__.py +2 -2
- qiskit/primitives/backend_estimator.py +2 -5
- qiskit/primitives/backend_sampler_v2.py +18 -61
- qiskit/primitives/base/base_estimator.py +2 -2
- qiskit/primitives/containers/data_bin.py +1 -9
- qiskit/primitives/statevector_sampler.py +1 -1
- qiskit/primitives/utils.py +1 -1
- qiskit/providers/__init__.py +3 -3
- qiskit/providers/backend.py +1 -12
- qiskit/providers/backend_compat.py +3 -23
- qiskit/providers/basic_provider/basic_simulator.py +2 -12
- qiskit/providers/fake_provider/fake_pulse_backend.py +1 -6
- qiskit/providers/fake_provider/generic_backend_v2.py +30 -46
- qiskit/providers/models/pulsedefaults.py +0 -2
- qiskit/pulse/builder.py +18 -59
- qiskit/pulse/calibration_entries.py +1 -4
- qiskit/pulse/channels.py +0 -2
- qiskit/pulse/exceptions.py +0 -2
- qiskit/pulse/instruction_schedule_map.py +6 -21
- qiskit/pulse/instructions/acquire.py +0 -2
- qiskit/pulse/instructions/delay.py +0 -2
- qiskit/pulse/instructions/directives.py +0 -8
- qiskit/pulse/instructions/frequency.py +0 -3
- qiskit/pulse/instructions/instruction.py +0 -2
- qiskit/pulse/instructions/phase.py +0 -3
- qiskit/pulse/instructions/play.py +0 -2
- qiskit/pulse/instructions/reference.py +0 -2
- qiskit/pulse/instructions/snapshot.py +0 -2
- qiskit/pulse/library/pulse.py +0 -2
- qiskit/pulse/library/symbolic_pulses.py +0 -28
- qiskit/pulse/library/waveform.py +0 -2
- qiskit/pulse/macros.py +1 -1
- qiskit/pulse/schedule.py +13 -12
- qiskit/pulse/transforms/alignments.py +3 -5
- qiskit/pulse/transforms/dag.py +0 -7
- qiskit/qasm2/export.py +3 -5
- qiskit/qasm2/parse.py +2 -46
- qiskit/qasm3/__init__.py +0 -1
- qiskit/qasm3/ast.py +15 -123
- qiskit/qasm3/exporter.py +77 -103
- qiskit/qobj/converters/pulse_instruction.py +4 -6
- qiskit/qpy/__init__.py +0 -181
- qiskit/qpy/binary_io/circuits.py +5 -20
- qiskit/qpy/binary_io/schedules.py +4 -3
- qiskit/qpy/binary_io/value.py +13 -310
- qiskit/qpy/common.py +2 -46
- qiskit/qpy/formats.py +0 -7
- qiskit/qpy/interface.py +4 -40
- qiskit/quantum_info/__init__.py +0 -4
- qiskit/quantum_info/operators/channel/transformations.py +21 -28
- qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
- qiskit/quantum_info/operators/operator.py +8 -54
- qiskit/quantum_info/operators/symplectic/base_pauli.py +19 -11
- 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 +0 -2
- qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +2 -23
- 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 +1 -9
- qiskit/result/mitigation/local_readout_mitigator.py +1 -9
- qiskit/result/mitigation/utils.py +0 -57
- qiskit/scheduler/config.py +0 -2
- qiskit/scheduler/methods/basic.py +0 -3
- qiskit/scheduler/schedule_circuit.py +0 -2
- qiskit/scheduler/sequence.py +0 -2
- qiskit/synthesis/__init__.py +0 -25
- qiskit/synthesis/clifford/clifford_decompose_bm.py +2 -1
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +2 -3
- qiskit/synthesis/clifford/clifford_decompose_layers.py +1 -2
- qiskit/synthesis/evolution/__init__.py +0 -1
- qiskit/synthesis/evolution/lie_trotter.py +42 -16
- qiskit/synthesis/evolution/product_formula.py +238 -165
- qiskit/synthesis/evolution/qdrift.py +29 -36
- qiskit/synthesis/evolution/suzuki_trotter.py +27 -87
- qiskit/synthesis/multi_controlled/__init__.py +0 -1
- qiskit/synthesis/qft/qft_decompose_full.py +1 -19
- qiskit/synthesis/qft/qft_decompose_lnn.py +1 -2
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +1 -2
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +63 -4
- qiskit/synthesis/two_qubit/weyl.py +97 -0
- qiskit/synthesis/unitary/qsd.py +5 -5
- qiskit/transpiler/__init__.py +14 -21
- qiskit/transpiler/basepasses.py +1 -1
- qiskit/transpiler/passes/__init__.py +0 -2
- qiskit/transpiler/passes/basis/basis_translator.py +565 -9
- qiskit/transpiler/passes/basis/decompose.py +12 -45
- 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 +2 -4
- qiskit/transpiler/passes/calibration/rx_builder.py +7 -11
- qiskit/transpiler/passes/calibration/rzx_builder.py +30 -46
- qiskit/transpiler/passes/layout/disjoint_utils.py +13 -15
- qiskit/transpiler/passes/layout/sabre_layout.py +2 -7
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +0 -5
- qiskit/transpiler/passes/optimization/__init__.py +0 -1
- qiskit/transpiler/passes/optimization/collect_cliffords.py +3 -19
- 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 +131 -48
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +2 -4
- qiskit/transpiler/passes/optimization/elide_permutations.py +32 -9
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +0 -2
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +11 -5
- 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/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 +3 -7
- 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 +0 -2
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
- qiskit/transpiler/passes/scheduling/asap.py +1 -1
- qiskit/transpiler/passes/scheduling/base_scheduler.py +12 -14
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +4 -9
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +5 -16
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +1 -4
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +2 -6
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -9
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +99 -262
- qiskit/transpiler/passes/synthesis/hls_plugins.py +7 -638
- qiskit/transpiler/passes/synthesis/qubit_tracker.py +132 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -55
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +56 -2
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -5
- qiskit/transpiler/passes/utils/gate_direction.py +275 -12
- qiskit/transpiler/passes/utils/gates_basis.py +30 -7
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +1 -2
- qiskit/transpiler/passmanager_config.py +4 -22
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +14 -40
- qiskit/transpiler/preset_passmanagers/common.py +3 -5
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +42 -125
- qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
- qiskit/transpiler/target.py +16 -74
- qiskit/visualization/circuit/_utils.py +2 -2
- qiskit/visualization/circuit/circuit_visualization.py +2 -3
- qiskit/visualization/circuit/matplotlib.py +1 -1
- qiskit/visualization/dag_visualization.py +1 -1
- qiskit/visualization/pass_manager_visualization.py +14 -3
- qiskit/visualization/pulse_v2/interface.py +1 -3
- qiskit/visualization/timeline/core.py +2 -25
- qiskit/visualization/timeline/interface.py +0 -12
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/METADATA +19 -20
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/RECORD +347 -358
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/WHEEL +1 -1
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/entry_points.txt +0 -19
- qiskit/circuit/library/data_preparation/_zz_feature_map.py +0 -150
- qiskit/circuit/twirling.py +0 -145
- qiskit/synthesis/arithmetic/__init__.py +0 -16
- qiskit/synthesis/arithmetic/adders/__init__.py +0 -17
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +0 -154
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +0 -103
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +0 -161
- qiskit/synthesis/arithmetic/multipliers/__init__.py +0 -16
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +0 -102
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +0 -99
- qiskit/synthesis/evolution/pauli_network.py +0 -80
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +0 -52
- qiskit/transpiler/passes/optimization/remove_identity_equiv.py +0 -69
- qiskit/utils/deprecate_pulse.py +0 -119
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/top_level.txt +0 -0
qiskit/compiler/sequencer.py
CHANGED
@@ -21,10 +21,8 @@ from qiskit.providers.backend import Backend
|
|
21
21
|
from qiskit.pulse import InstructionScheduleMap, Schedule
|
22
22
|
from qiskit.scheduler import ScheduleConfig
|
23
23
|
from qiskit.scheduler.sequence import sequence as _sequence
|
24
|
-
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
25
24
|
|
26
25
|
|
27
|
-
@deprecate_pulse_dependency(moving_to_dynamics=True)
|
28
26
|
def sequence(
|
29
27
|
scheduled_circuits: Union[QuantumCircuit, List[QuantumCircuit]],
|
30
28
|
backend: Optional[Backend] = None,
|
qiskit/compiler/transpiler.py
CHANGED
@@ -32,41 +32,12 @@ from qiskit.transpiler.instruction_durations import InstructionDurationsType
|
|
32
32
|
from qiskit.transpiler.passes.synthesis.high_level_synthesis import HLSConfig
|
33
33
|
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
|
34
34
|
from qiskit.transpiler.target import Target
|
35
|
-
from qiskit.utils import deprecate_arg
|
36
|
-
from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
|
37
35
|
|
38
36
|
logger = logging.getLogger(__name__)
|
39
37
|
|
40
38
|
_CircuitT = TypeVar("_CircuitT", bound=Union[QuantumCircuit, List[QuantumCircuit]])
|
41
39
|
|
42
40
|
|
43
|
-
@deprecate_arg(
|
44
|
-
name="instruction_durations",
|
45
|
-
since="1.3",
|
46
|
-
package_name="Qiskit",
|
47
|
-
removal_timeline="in Qiskit 2.0",
|
48
|
-
additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
|
49
|
-
"with defined instruction durations with "
|
50
|
-
"`Target.from_configuration(..., instruction_durations=...)`",
|
51
|
-
)
|
52
|
-
@deprecate_arg(
|
53
|
-
name="timing_constraints",
|
54
|
-
since="1.3",
|
55
|
-
package_name="Qiskit",
|
56
|
-
removal_timeline="in Qiskit 2.0",
|
57
|
-
additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
|
58
|
-
"with defined timing constraints with "
|
59
|
-
"`Target.from_configuration(..., timing_constraints=...)`",
|
60
|
-
)
|
61
|
-
@deprecate_arg(
|
62
|
-
name="backend_properties",
|
63
|
-
since="1.3",
|
64
|
-
package_name="Qiskit",
|
65
|
-
removal_timeline="in Qiskit 2.0",
|
66
|
-
additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
|
67
|
-
"with defined properties with Target.from_configuration(..., backend_properties=...)",
|
68
|
-
)
|
69
|
-
@deprecate_pulse_arg("inst_map", predicate=lambda inst_map: inst_map is not None)
|
70
41
|
def transpile( # pylint: disable=too-many-return-statements
|
71
42
|
circuits: _CircuitT,
|
72
43
|
backend: Optional[Backend] = None,
|
@@ -133,7 +104,7 @@ def transpile( # pylint: disable=too-many-return-statements
|
|
133
104
|
will override the backend's.
|
134
105
|
basis_gates: List of basis gate names to unroll to
|
135
106
|
(e.g: ``['u1', 'u2', 'u3', 'cx']``). If ``None``, do not unroll.
|
136
|
-
inst_map:
|
107
|
+
inst_map: Mapping of unrolled gates to pulse schedules. If this is not provided,
|
137
108
|
transpiler tries to get from the backend. If any user defined calibration
|
138
109
|
is found in the map and this is used in a circuit, transpiler attaches
|
139
110
|
the custom gate definition to the circuit. This enables one to flexibly
|
@@ -394,57 +365,31 @@ def transpile( # pylint: disable=too-many-return-statements
|
|
394
365
|
# Edge cases require using the old model (loose constraints) instead of building a target,
|
395
366
|
# but we don't populate the passmanager config with loose constraints unless it's one of
|
396
367
|
# the known edge cases to control the execution path.
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
)
|
423
|
-
pm = generate_preset_pass_manager(
|
424
|
-
optimization_level,
|
425
|
-
target=target,
|
426
|
-
backend=backend,
|
427
|
-
basis_gates=basis_gates,
|
428
|
-
coupling_map=coupling_map,
|
429
|
-
instruction_durations=instruction_durations,
|
430
|
-
backend_properties=backend_properties,
|
431
|
-
timing_constraints=timing_constraints,
|
432
|
-
inst_map=inst_map,
|
433
|
-
initial_layout=initial_layout,
|
434
|
-
layout_method=layout_method,
|
435
|
-
routing_method=routing_method,
|
436
|
-
translation_method=translation_method,
|
437
|
-
scheduling_method=scheduling_method,
|
438
|
-
approximation_degree=approximation_degree,
|
439
|
-
seed_transpiler=seed_transpiler,
|
440
|
-
unitary_synthesis_method=unitary_synthesis_method,
|
441
|
-
unitary_synthesis_plugin_config=unitary_synthesis_plugin_config,
|
442
|
-
hls_config=hls_config,
|
443
|
-
init_method=init_method,
|
444
|
-
optimization_method=optimization_method,
|
445
|
-
dt=dt,
|
446
|
-
qubits_initially_zero=qubits_initially_zero,
|
447
|
-
)
|
368
|
+
pm = generate_preset_pass_manager(
|
369
|
+
optimization_level,
|
370
|
+
target=target,
|
371
|
+
backend=backend,
|
372
|
+
basis_gates=basis_gates,
|
373
|
+
coupling_map=coupling_map,
|
374
|
+
instruction_durations=instruction_durations,
|
375
|
+
backend_properties=backend_properties,
|
376
|
+
timing_constraints=timing_constraints,
|
377
|
+
inst_map=inst_map,
|
378
|
+
initial_layout=initial_layout,
|
379
|
+
layout_method=layout_method,
|
380
|
+
routing_method=routing_method,
|
381
|
+
translation_method=translation_method,
|
382
|
+
scheduling_method=scheduling_method,
|
383
|
+
approximation_degree=approximation_degree,
|
384
|
+
seed_transpiler=seed_transpiler,
|
385
|
+
unitary_synthesis_method=unitary_synthesis_method,
|
386
|
+
unitary_synthesis_plugin_config=unitary_synthesis_plugin_config,
|
387
|
+
hls_config=hls_config,
|
388
|
+
init_method=init_method,
|
389
|
+
optimization_method=optimization_method,
|
390
|
+
dt=dt,
|
391
|
+
qubits_initially_zero=qubits_initially_zero,
|
392
|
+
)
|
448
393
|
|
449
394
|
out_circuits = pm.run(circuits, callback=callback, num_processes=num_processes)
|
450
395
|
|
@@ -73,6 +73,6 @@ def circuit_to_dag(circuit, copy_operations=True, *, qubit_order=None, clbit_ord
|
|
73
73
|
|
74
74
|
dagcircuit = core_circuit_to_dag(circuit, copy_operations, qubit_order, clbit_order)
|
75
75
|
|
76
|
-
dagcircuit.duration = circuit.
|
77
|
-
dagcircuit.unit = circuit.
|
76
|
+
dagcircuit.duration = circuit.duration
|
77
|
+
dagcircuit.unit = circuit.unit
|
78
78
|
return dagcircuit
|
@@ -46,6 +46,6 @@ def circuit_to_dagdependency(circuit, create_preds_and_succs=True):
|
|
46
46
|
dagdependency._add_predecessors()
|
47
47
|
dagdependency._add_successors()
|
48
48
|
|
49
|
-
dagdependency.
|
49
|
+
dagdependency.calibrations = circuit.calibrations
|
50
50
|
|
51
51
|
return dagdependency
|
@@ -27,7 +27,7 @@ def _circuit_to_dagdependency_v2(circuit):
|
|
27
27
|
dagdependency = _DAGDependencyV2()
|
28
28
|
dagdependency.name = circuit.name
|
29
29
|
dagdependency.metadata = circuit.metadata
|
30
|
-
dagdependency.
|
30
|
+
dagdependency.calibrations = circuit.calibrations
|
31
31
|
dagdependency.global_phase = circuit.global_phase
|
32
32
|
|
33
33
|
dagdependency.add_qubits(circuit.qubits)
|
@@ -125,7 +125,7 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
|
|
125
125
|
if (out := operation_map.get(original_id)) is not None:
|
126
126
|
return out
|
127
127
|
|
128
|
-
condition = getattr(op, "
|
128
|
+
condition = getattr(op, "condition", None)
|
129
129
|
if condition:
|
130
130
|
reg, val = condition
|
131
131
|
if isinstance(reg, Clbit):
|
@@ -13,7 +13,6 @@
|
|
13
13
|
"""Helper function for converting a dag to a circuit."""
|
14
14
|
|
15
15
|
from qiskit.circuit import QuantumCircuit
|
16
|
-
from qiskit._accelerate.converters import dag_to_circuit as dag_to_circuit_rs
|
17
16
|
|
18
17
|
|
19
18
|
def dag_to_circuit(dag, copy_operations=True):
|
@@ -55,8 +54,6 @@ def dag_to_circuit(dag, copy_operations=True):
|
|
55
54
|
"""
|
56
55
|
|
57
56
|
name = dag.name or None
|
58
|
-
|
59
|
-
circuit_data = dag_to_circuit_rs(dag, copy_operations)
|
60
57
|
circuit = QuantumCircuit(
|
61
58
|
dag.qubits,
|
62
59
|
dag.clbits,
|
@@ -70,10 +67,11 @@ def dag_to_circuit(dag, copy_operations=True):
|
|
70
67
|
for var in dag.iter_declared_vars():
|
71
68
|
circuit.add_uninitialized_var(var)
|
72
69
|
circuit.metadata = dag.metadata
|
73
|
-
circuit.
|
70
|
+
circuit.calibrations = dag.calibrations
|
74
71
|
|
75
|
-
|
72
|
+
for node in dag.topological_op_nodes():
|
73
|
+
circuit._append(node._to_circuit_instruction(deepcopy=copy_operations))
|
76
74
|
|
77
|
-
circuit.
|
78
|
-
circuit.
|
75
|
+
circuit.duration = dag.duration
|
76
|
+
circuit.unit = dag.unit
|
79
77
|
return circuit
|
@@ -50,6 +50,6 @@ def dag_to_dagdependency(dag, create_preds_and_succs=True):
|
|
50
50
|
|
51
51
|
# copy metadata
|
52
52
|
dagdependency.global_phase = dag.global_phase
|
53
|
-
dagdependency.
|
53
|
+
dagdependency.calibrations = dag.calibrations
|
54
54
|
|
55
55
|
return dagdependency
|
@@ -27,7 +27,7 @@ def _dag_to_dagdependency_v2(dag):
|
|
27
27
|
dagdependency.name = dag.name
|
28
28
|
dagdependency.metadata = dag.metadata
|
29
29
|
dagdependency.global_phase = dag.global_phase
|
30
|
-
dagdependency.calibrations = dag.
|
30
|
+
dagdependency.calibrations = dag.calibrations
|
31
31
|
|
32
32
|
dagdependency.add_qubits(dag.qubits)
|
33
33
|
dagdependency.add_clbits(dag.clbits)
|
@@ -34,11 +34,7 @@ def dagdependency_to_circuit(dagdependency):
|
|
34
34
|
)
|
35
35
|
circuit.metadata = dagdependency.metadata
|
36
36
|
|
37
|
-
|
38
|
-
circuit._calibrations_prop = dagdependency._calibrations_prop
|
39
|
-
else:
|
40
|
-
# This can be _DAGDependencyV2
|
41
|
-
circuit._calibrations_prop = dagdependency.calibrations
|
37
|
+
circuit.calibrations = dagdependency.calibrations
|
42
38
|
|
43
39
|
for node in dagdependency.topological_nodes():
|
44
40
|
circuit._append(CircuitInstruction(node.op.copy(), node.qargs, node.cargs))
|
@@ -12,7 +12,6 @@
|
|
12
12
|
|
13
13
|
"""Helper function for converting a dag dependency to a dag circuit"""
|
14
14
|
from qiskit.dagcircuit.dagcircuit import DAGCircuit
|
15
|
-
from qiskit.dagcircuit.dagdependency import DAGDependency
|
16
15
|
|
17
16
|
|
18
17
|
def dagdependency_to_dag(dagdependency):
|
@@ -45,10 +44,6 @@ def dagdependency_to_dag(dagdependency):
|
|
45
44
|
|
46
45
|
# copy metadata
|
47
46
|
dagcircuit.global_phase = dagdependency.global_phase
|
48
|
-
|
49
|
-
dagcircuit._calibrations_prop = dagdependency._calibrations_prop
|
50
|
-
else:
|
51
|
-
# This can be _DAGDependencyV2
|
52
|
-
dagcircuit._calibrations_prop = dagdependency.calibrations
|
47
|
+
dagcircuit.calibrations = dagdependency.calibrations
|
53
48
|
|
54
49
|
return dagcircuit
|
@@ -306,7 +306,7 @@ def split_block_into_layers(block: list[DAGOpNode | DAGDepNode]):
|
|
306
306
|
cur_bits = set(node.qargs)
|
307
307
|
cur_bits.update(node.cargs)
|
308
308
|
|
309
|
-
cond = getattr(node.op, "
|
309
|
+
cond = getattr(node.op, "condition", None)
|
310
310
|
if cond is not None:
|
311
311
|
cur_bits.update(condition_resources(cond).clbits)
|
312
312
|
|
@@ -356,7 +356,7 @@ class BlockCollapser:
|
|
356
356
|
for node in block:
|
357
357
|
cur_qubits.update(node.qargs)
|
358
358
|
cur_clbits.update(node.cargs)
|
359
|
-
cond = getattr(node.op, "
|
359
|
+
cond = getattr(node.op, "condition", None)
|
360
360
|
if cond is not None:
|
361
361
|
cur_clbits.update(condition_resources(cond).clbits)
|
362
362
|
if isinstance(cond[0], ClassicalRegister):
|
@@ -378,7 +378,7 @@ class BlockCollapser:
|
|
378
378
|
|
379
379
|
for node in block:
|
380
380
|
instructions = qc.append(CircuitInstruction(node.op, node.qargs, node.cargs))
|
381
|
-
cond = getattr(node.op, "
|
381
|
+
cond = getattr(node.op, "condition", None)
|
382
382
|
if cond is not None:
|
383
383
|
instructions.c_if(*cond)
|
384
384
|
|
@@ -29,7 +29,6 @@ from qiskit.circuit.classicalregister import ClassicalRegister, Clbit
|
|
29
29
|
from qiskit.dagcircuit.exceptions import DAGDependencyError
|
30
30
|
from qiskit.dagcircuit.dagdepnode import DAGDepNode
|
31
31
|
from qiskit.pulse import Schedule
|
32
|
-
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
33
32
|
|
34
33
|
if typing.TYPE_CHECKING:
|
35
34
|
from qiskit.circuit.parameterexpression import ParameterExpression
|
@@ -72,7 +71,7 @@ class DAGDependency:
|
|
72
71
|
|
73
72
|
Bell circuit with no measurement.
|
74
73
|
|
75
|
-
..
|
74
|
+
.. parsed-literal::
|
76
75
|
|
77
76
|
┌───┐
|
78
77
|
qr_0: ┤ H ├──■──
|
@@ -147,17 +146,15 @@ class DAGDependency:
|
|
147
146
|
self._global_phase = angle % (2 * math.pi)
|
148
147
|
|
149
148
|
@property
|
150
|
-
@deprecate_pulse_dependency(is_property=True)
|
151
149
|
def calibrations(self) -> dict[str, dict[tuple, Schedule]]:
|
152
150
|
"""Return calibration dictionary.
|
153
151
|
|
154
152
|
The custom pulse definition of a given gate is of the form
|
155
153
|
``{'gate_name': {(qubits, params): schedule}}``.
|
156
154
|
"""
|
157
|
-
return self.
|
155
|
+
return dict(self._calibrations)
|
158
156
|
|
159
157
|
@calibrations.setter
|
160
|
-
@deprecate_pulse_dependency(is_property=True)
|
161
158
|
def calibrations(self, calibrations: dict[str, dict[tuple, Schedule]]):
|
162
159
|
"""Set the circuit calibration data from a dictionary of calibration definition.
|
163
160
|
|
@@ -165,16 +162,6 @@ class DAGDependency:
|
|
165
162
|
calibrations (dict): A dictionary of input in the format
|
166
163
|
{'gate_name': {(qubits, gate_params): schedule}}
|
167
164
|
"""
|
168
|
-
self._calibrations_prop = calibrations
|
169
|
-
|
170
|
-
@property
|
171
|
-
def _calibrations_prop(self) -> dict[str, dict[tuple, Schedule]]:
|
172
|
-
"""An alternative path to be used internally to avoid deprecation warnings"""
|
173
|
-
return dict(self._calibrations)
|
174
|
-
|
175
|
-
@_calibrations_prop.setter
|
176
|
-
def _calibrations_prop(self, calibrations: dict[str, dict[tuple, Schedule]]):
|
177
|
-
"""An alternative path to be used internally to avoid deprecation warnings"""
|
178
165
|
self._calibrations = defaultdict(dict, calibrations)
|
179
166
|
|
180
167
|
def to_retworkx(self):
|
@@ -409,13 +396,13 @@ class DAGDependency:
|
|
409
396
|
for elem in qargs:
|
410
397
|
qindices_list.append(self.qubits.index(elem))
|
411
398
|
|
412
|
-
if getattr(operation, "
|
399
|
+
if getattr(operation, "condition", None):
|
413
400
|
# The change to handling operation.condition follows code patterns in quantum_circuit.py.
|
414
401
|
# However:
|
415
402
|
# (1) cindices_list are specific to template optimization and should not be computed
|
416
403
|
# in this place.
|
417
404
|
# (2) Template optimization pass needs currently does not handle general conditions.
|
418
|
-
cond_bits = condition_resources(operation.
|
405
|
+
cond_bits = condition_resources(operation.condition).clbits
|
419
406
|
cindices_list = [self.clbits.index(clbit) for clbit in cond_bits]
|
420
407
|
else:
|
421
408
|
cindices_list = []
|
@@ -609,7 +596,7 @@ class DAGDependency:
|
|
609
596
|
for nd in node_block:
|
610
597
|
block_qargs |= set(nd.qargs)
|
611
598
|
block_cargs |= set(nd.cargs)
|
612
|
-
cond = getattr(nd.op, "
|
599
|
+
cond = getattr(nd.op, "condition", None)
|
613
600
|
if cond is not None:
|
614
601
|
block_cargs.update(condition_resources(cond).clbits)
|
615
602
|
|
qiskit/dagcircuit/dagnode.py
CHANGED
@@ -92,8 +92,8 @@ def _make_expr_key(bit_indices):
|
|
92
92
|
|
93
93
|
|
94
94
|
def _condition_op_eq(node1, node2, bit_indices1, bit_indices2):
|
95
|
-
cond1 = node1.condition
|
96
|
-
cond2 = node2.condition
|
95
|
+
cond1 = node1.op.condition
|
96
|
+
cond2 = node2.op.condition
|
97
97
|
if isinstance(cond1, expr.Expr) and isinstance(cond2, expr.Expr):
|
98
98
|
if not expr.structurally_equivalent(
|
99
99
|
cond1, cond2, _make_expr_key(bit_indices1), _make_expr_key(bit_indices2)
|
qiskit/passmanager/__init__.py
CHANGED
@@ -133,7 +133,7 @@ new numbers that don't contain five.
|
|
133
133
|
|
134
134
|
Output:
|
135
135
|
|
136
|
-
..
|
136
|
+
.. parsed-literal::
|
137
137
|
|
138
138
|
[12346789, 464, 36784]
|
139
139
|
|
@@ -178,7 +178,7 @@ As before, we schedule these passes with the pass manager and run.
|
|
178
178
|
|
179
179
|
Output:
|
180
180
|
|
181
|
-
..
|
181
|
+
.. parsed-literal::
|
182
182
|
|
183
183
|
[12346789, 45654, 36784]
|
184
184
|
|
@@ -44,15 +44,13 @@ from .utils import _circuit_key, _observable_key, init_observable
|
|
44
44
|
def _run_circuits(
|
45
45
|
circuits: QuantumCircuit | list[QuantumCircuit],
|
46
46
|
backend: BackendV1 | BackendV2,
|
47
|
-
clear_metadata: bool = True,
|
48
47
|
**run_options,
|
49
48
|
) -> tuple[list[Result], list[dict]]:
|
50
49
|
"""Remove metadata of circuits and run the circuits on a backend.
|
51
50
|
Args:
|
52
51
|
circuits: The circuits
|
53
52
|
backend: The backend
|
54
|
-
|
55
|
-
True.
|
53
|
+
monitor: Enable job minotor if True
|
56
54
|
**run_options: run_options
|
57
55
|
Returns:
|
58
56
|
The result and the metadata of the circuits
|
@@ -62,8 +60,7 @@ def _run_circuits(
|
|
62
60
|
metadata = []
|
63
61
|
for circ in circuits:
|
64
62
|
metadata.append(circ.metadata)
|
65
|
-
|
66
|
-
circ.metadata = {}
|
63
|
+
circ.metadata = {}
|
67
64
|
if isinstance(backend, BackendV1):
|
68
65
|
max_circuits = getattr(backend.configuration(), "max_experiments", None)
|
69
66
|
elif isinstance(backend, BackendV2):
|
@@ -17,13 +17,12 @@ from __future__ import annotations
|
|
17
17
|
import warnings
|
18
18
|
from collections import defaultdict
|
19
19
|
from dataclasses import dataclass
|
20
|
-
from typing import
|
20
|
+
from typing import Iterable
|
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
|
27
26
|
from qiskit.primitives.backend_estimator import _run_circuits
|
28
27
|
from qiskit.primitives.base import BaseSamplerV2
|
29
28
|
from qiskit.primitives.containers import (
|
@@ -54,11 +53,6 @@ class Options:
|
|
54
53
|
Default: None.
|
55
54
|
"""
|
56
55
|
|
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
|
-
|
62
56
|
|
63
57
|
@dataclass
|
64
58
|
class _MeasureInfo:
|
@@ -68,16 +62,6 @@ class _MeasureInfo:
|
|
68
62
|
start: int
|
69
63
|
|
70
64
|
|
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
|
-
|
81
65
|
class BackendSamplerV2(BaseSamplerV2):
|
82
66
|
"""Evaluates bitstrings for provided quantum circuits
|
83
67
|
|
@@ -107,9 +91,6 @@ class BackendSamplerV2(BaseSamplerV2):
|
|
107
91
|
* ``seed_simulator``: The seed to use in the simulator. If None, a random seed will be used.
|
108
92
|
Default: None.
|
109
93
|
|
110
|
-
* ``run_options``: A dictionary of options to pass through to the ``run()``
|
111
|
-
method of the wrapped :class:`~.BackendV2` instance.
|
112
|
-
|
113
94
|
.. note::
|
114
95
|
|
115
96
|
This class requires a backend that supports ``memory`` option.
|
@@ -184,27 +165,19 @@ class BackendSamplerV2(BaseSamplerV2):
|
|
184
165
|
for circuits in bound_circuits:
|
185
166
|
flatten_circuits.extend(np.ravel(circuits).tolist())
|
186
167
|
|
187
|
-
run_opts = self._options.run_options or {}
|
188
168
|
# run circuits
|
189
169
|
results, _ = _run_circuits(
|
190
170
|
flatten_circuits,
|
191
171
|
self._backend,
|
192
|
-
clear_metadata=False,
|
193
172
|
memory=True,
|
194
173
|
shots=shots,
|
195
174
|
seed_simulator=self._options.seed_simulator,
|
196
|
-
**run_opts,
|
197
175
|
)
|
198
176
|
result_memory = _prepare_memory(results)
|
199
177
|
|
200
178
|
# pack memory to an ndarray of uint8
|
201
179
|
results = []
|
202
180
|
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
|
-
)
|
208
181
|
for pub, bound in zip(pubs, bound_circuits):
|
209
182
|
meas_info, max_num_bytes = _analyze_circuit(pub.circuit)
|
210
183
|
end = start + bound.size
|
@@ -216,7 +189,6 @@ class BackendSamplerV2(BaseSamplerV2):
|
|
216
189
|
meas_info,
|
217
190
|
max_num_bytes,
|
218
191
|
pub.circuit.metadata,
|
219
|
-
meas_level,
|
220
192
|
)
|
221
193
|
)
|
222
194
|
start = end
|
@@ -225,43 +197,28 @@ class BackendSamplerV2(BaseSamplerV2):
|
|
225
197
|
|
226
198
|
def _postprocess_pub(
|
227
199
|
self,
|
228
|
-
result_memory: list[
|
200
|
+
result_memory: list[list[str]],
|
229
201
|
shots: int,
|
230
202
|
shape: tuple[int, ...],
|
231
203
|
meas_info: list[_MeasureInfo],
|
232
204
|
max_num_bytes: int,
|
233
205
|
circuit_metadata: dict,
|
234
|
-
meas_level: int | None,
|
235
206
|
) -> SamplerPubResult:
|
236
|
-
"""Converts the memory data into
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
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}")
|
207
|
+
"""Converts the memory data into an array of bit arrays with the shape of the pub."""
|
208
|
+
arrays = {
|
209
|
+
item.creg_name: np.zeros(shape + (shots, item.num_bytes), dtype=np.uint8)
|
210
|
+
for item in meas_info
|
211
|
+
}
|
212
|
+
memory_array = _memory_array(result_memory, max_num_bytes)
|
213
|
+
|
214
|
+
for samples, index in zip(memory_array, np.ndindex(*shape)):
|
215
|
+
for item in meas_info:
|
216
|
+
ary = _samples_to_packed_array(samples, item.num_bits, item.start)
|
217
|
+
arrays[item.creg_name][index] = ary
|
218
|
+
|
219
|
+
meas = {
|
220
|
+
item.creg_name: BitArray(arrays[item.creg_name], item.num_bits) for item in meas_info
|
221
|
+
}
|
265
222
|
return SamplerPubResult(
|
266
223
|
DataBin(**meas, shape=shape),
|
267
224
|
metadata={"shots": shots, "circuit_metadata": circuit_metadata},
|
@@ -291,7 +248,7 @@ def _analyze_circuit(circuit: QuantumCircuit) -> tuple[list[_MeasureInfo], int]:
|
|
291
248
|
return meas_info, _min_num_bytes(max_num_bits)
|
292
249
|
|
293
250
|
|
294
|
-
def _prepare_memory(results: list[Result]) -> list[
|
251
|
+
def _prepare_memory(results: list[Result]) -> list[list[str]]:
|
295
252
|
"""Joins splitted results if exceeding max_experiments"""
|
296
253
|
lst = []
|
297
254
|
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,22 +34,14 @@ 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
|
-
|
40
37
|
data = DataBin(
|
41
|
-
alpha=BitArray.
|
38
|
+
alpha=BitArray.from_bitstrings(["0010"]),
|
42
39
|
beta=np.array([1.2])
|
43
40
|
)
|
44
41
|
|
45
42
|
print("alpha data:", data.alpha)
|
46
43
|
print("beta data:", data.beta)
|
47
44
|
|
48
|
-
.. code-block::
|
49
|
-
|
50
|
-
alpha data: BitArray(<shape=(), num_shots=1, num_bits=2>)
|
51
|
-
beta data: [1.2]
|
52
|
-
|
53
45
|
"""
|
54
46
|
|
55
47
|
__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
|
)
|