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
@@ -21,7 +21,6 @@ from qiskit.transpiler.basepasses import TransformationPass
|
|
21
21
|
from qiskit.transpiler.exceptions import TranspilerError
|
22
22
|
from qiskit.transpiler.layout import Layout
|
23
23
|
from qiskit.transpiler.passes.calibration.rzx_builder import _check_calibration_type, CRCalType
|
24
|
-
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
25
24
|
|
26
25
|
from qiskit.dagcircuit import DAGCircuit
|
27
26
|
from qiskit.converters import circuit_to_dag
|
@@ -35,7 +34,6 @@ class EchoRZXWeylDecomposition(TransformationPass):
|
|
35
34
|
Each pair of RZXGates forms an echoed RZXGate.
|
36
35
|
"""
|
37
36
|
|
38
|
-
@deprecate_pulse_dependency
|
39
37
|
def __init__(self, instruction_schedule_map=None, target=None):
|
40
38
|
"""EchoRZXWeylDecomposition pass.
|
41
39
|
|
@@ -64,7 +62,7 @@ class EchoRZXWeylDecomposition(TransformationPass):
|
|
64
62
|
def _echo_rzx_dag(theta):
|
65
63
|
"""Return the following circuit
|
66
64
|
|
67
|
-
..
|
65
|
+
.. parsed-literal::
|
68
66
|
|
69
67
|
┌───────────────┐┌───┐┌────────────────┐┌───┐
|
70
68
|
q_0: ┤0 ├┤ X ├┤0 ├┤ X ├
|
@@ -85,7 +83,7 @@ class EchoRZXWeylDecomposition(TransformationPass):
|
|
85
83
|
def _reverse_echo_rzx_dag(theta):
|
86
84
|
"""Return the following circuit
|
87
85
|
|
88
|
-
..
|
86
|
+
.. parsed-literal::
|
89
87
|
|
90
88
|
┌───┐┌───────────────┐ ┌────────────────┐┌───┐
|
91
89
|
q_0: ┤ H ├┤1 ├─────┤1 ├┤ H ├─────
|
@@ -15,9 +15,10 @@
|
|
15
15
|
|
16
16
|
import logging
|
17
17
|
|
18
|
+
from qiskit.circuit.library.standard_gates import SwapGate
|
19
|
+
from qiskit.circuit.library.generalized_gates import PermutationGate
|
18
20
|
from qiskit.transpiler.basepasses import TransformationPass
|
19
21
|
from qiskit.transpiler.layout import Layout
|
20
|
-
from qiskit._accelerate import elide_permutations as elide_permutations_rs
|
21
22
|
|
22
23
|
logger = logging.getLogger(__name__)
|
23
24
|
|
@@ -66,16 +67,38 @@ class ElidePermutations(TransformationPass):
|
|
66
67
|
)
|
67
68
|
return dag
|
68
69
|
|
69
|
-
|
70
|
-
|
71
|
-
# If the pass did not do anything, the result is None
|
72
|
-
if result is None:
|
70
|
+
op_count = dag.count_ops(recurse=False)
|
71
|
+
if op_count.get("swap", 0) == 0 and op_count.get("permutation", 0) == 0:
|
73
72
|
return dag
|
74
73
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
74
|
+
new_dag = dag.copy_empty_like()
|
75
|
+
qubit_mapping = list(range(len(dag.qubits)))
|
76
|
+
|
77
|
+
def _apply_mapping(qargs):
|
78
|
+
return tuple(dag.qubits[qubit_mapping[dag.find_bit(qubit).index]] for qubit in qargs)
|
79
|
+
|
80
|
+
for node in dag.topological_op_nodes():
|
81
|
+
if not isinstance(node.op, (SwapGate, PermutationGate)):
|
82
|
+
new_dag.apply_operation_back(
|
83
|
+
node.op, _apply_mapping(node.qargs), node.cargs, check=False
|
84
|
+
)
|
85
|
+
elif getattr(node.op, "condition", None) is not None:
|
86
|
+
new_dag.apply_operation_back(
|
87
|
+
node.op, _apply_mapping(node.qargs), node.cargs, check=False
|
88
|
+
)
|
89
|
+
elif isinstance(node.op, SwapGate):
|
90
|
+
index_0 = dag.find_bit(node.qargs[0]).index
|
91
|
+
index_1 = dag.find_bit(node.qargs[1]).index
|
92
|
+
qubit_mapping[index_1], qubit_mapping[index_0] = (
|
93
|
+
qubit_mapping[index_0],
|
94
|
+
qubit_mapping[index_1],
|
95
|
+
)
|
96
|
+
elif isinstance(node.op, PermutationGate):
|
97
|
+
starting_indices = [qubit_mapping[dag.find_bit(qarg).index] for qarg in node.qargs]
|
98
|
+
pattern = node.op.params[0]
|
99
|
+
pattern_indices = [qubit_mapping[idx] for idx in pattern]
|
100
|
+
for i, j in zip(starting_indices, pattern_indices):
|
101
|
+
qubit_mapping[i] = j
|
79
102
|
input_qubit_mapping = {qubit: index for index, qubit in enumerate(dag.qubits)}
|
80
103
|
self.property_set["original_layout"] = Layout(input_qubit_mapping)
|
81
104
|
if self.property_set["original_qubit_indices"] is None:
|
@@ -19,7 +19,6 @@ from qiskit.circuit import Gate
|
|
19
19
|
from qiskit.dagcircuit import DAGCircuit
|
20
20
|
from qiskit.transpiler.basepasses import TransformationPass
|
21
21
|
from qiskit.transpiler.exceptions import TranspilerError
|
22
|
-
from qiskit.transpiler.passes.utils import control_flow
|
23
22
|
|
24
23
|
from qiskit._accelerate.inverse_cancellation import inverse_cancellation
|
25
24
|
|
@@ -75,7 +74,6 @@ class InverseCancellation(TransformationPass):
|
|
75
74
|
|
76
75
|
super().__init__()
|
77
76
|
|
78
|
-
@control_flow.trivial_recurse
|
79
77
|
def run(self, dag: DAGCircuit):
|
80
78
|
"""Run the InverseCancellation pass on `dag`.
|
81
79
|
|
@@ -170,13 +170,13 @@ class Optimize1qGatesDecomposition(TransformationPass):
|
|
170
170
|
return False
|
171
171
|
|
172
172
|
# do we even have calibrations?
|
173
|
-
has_cals_p = dag.
|
173
|
+
has_cals_p = dag.calibrations is not None and len(dag.calibrations) > 0
|
174
174
|
# does this run have uncalibrated gates?
|
175
|
-
uncalibrated_p = not has_cals_p or any(not dag.
|
175
|
+
uncalibrated_p = not has_cals_p or any(not dag.has_calibration_for(g) for g in old_run)
|
176
176
|
# does this run have gates not in the image of ._decomposers _and_ uncalibrated?
|
177
177
|
if basis is not None:
|
178
178
|
uncalibrated_and_not_basis_p = any(
|
179
|
-
g.name not in basis and (not has_cals_p or not dag.
|
179
|
+
g.name not in basis and (not has_cals_p or not dag.has_calibration_for(g))
|
180
180
|
for g in old_run
|
181
181
|
)
|
182
182
|
else:
|
@@ -222,12 +222,18 @@ class Optimize1qGatesDecomposition(TransformationPass):
|
|
222
222
|
def _error(self, circuit, qubit):
|
223
223
|
"""
|
224
224
|
Calculate a rough error for a `circuit` that runs on a specific
|
225
|
-
`qubit` of `target` (`circuit`
|
225
|
+
`qubit` of `target` (`circuit` can either be an OneQubitGateSequence
|
226
|
+
from Rust or a list of DAGOPNodes).
|
226
227
|
|
227
228
|
Use basis errors from target if available, otherwise use length
|
228
229
|
of circuit as a weak proxy for error.
|
229
230
|
"""
|
230
|
-
|
231
|
+
if isinstance(circuit, euler_one_qubit_decomposer.OneQubitGateSequence):
|
232
|
+
return euler_one_qubit_decomposer.compute_error_one_qubit_sequence(
|
233
|
+
circuit, qubit, self.error_map
|
234
|
+
)
|
235
|
+
else:
|
236
|
+
return euler_one_qubit_decomposer.compute_error_list(circuit, qubit, self.error_map)
|
231
237
|
|
232
238
|
|
233
239
|
def _possible_decomposers(basis_set):
|
@@ -86,7 +86,7 @@ class Optimize1qGates(TransformationPass):
|
|
86
86
|
for current_node in run:
|
87
87
|
left_name = current_node.name
|
88
88
|
if (
|
89
|
-
getattr(current_node, "condition", None) is not None
|
89
|
+
getattr(current_node.op, "condition", None) is not None
|
90
90
|
or len(current_node.qargs) != 1
|
91
91
|
or left_name not in ["p", "u1", "u2", "u3", "u", "id"]
|
92
92
|
):
|
@@ -40,7 +40,7 @@ class OptimizeSwapBeforeMeasure(TransformationPass):
|
|
40
40
|
|
41
41
|
swaps = dag.op_nodes(SwapGate)
|
42
42
|
for swap in swaps[::-1]:
|
43
|
-
if getattr(swap.op, "
|
43
|
+
if getattr(swap.op, "condition", None) is not None:
|
44
44
|
continue
|
45
45
|
final_successor = []
|
46
46
|
for successor in dag.descendants(swap):
|
@@ -242,7 +242,7 @@ class BackwardMatch:
|
|
242
242
|
Returns:
|
243
243
|
bool: True if the same, False otherwise.
|
244
244
|
"""
|
245
|
-
return node_circuit.op
|
245
|
+
return node_circuit.op == node_template.op
|
246
246
|
|
247
247
|
def _is_same_q_conf(self, node_circuit, node_template, qarg_circuit):
|
248
248
|
"""
|
@@ -304,15 +304,15 @@ class BackwardMatch:
|
|
304
304
|
"""
|
305
305
|
if (
|
306
306
|
node_circuit.type == "op"
|
307
|
-
and getattr(node_circuit.op, "
|
307
|
+
and getattr(node_circuit.op, "condition", None)
|
308
308
|
and node_template.type == "op"
|
309
|
-
and getattr(node_template.op, "
|
309
|
+
and getattr(node_template.op, "condition", None)
|
310
310
|
):
|
311
311
|
if set(carg_circuit) != set(node_template.cindices):
|
312
312
|
return False
|
313
313
|
if (
|
314
|
-
getattr(node_circuit.op, "
|
315
|
-
!= getattr(node_template.op, "
|
314
|
+
getattr(node_circuit.op, "condition", None)[1]
|
315
|
+
!= getattr(node_template.op, "condition", None)[1]
|
316
316
|
):
|
317
317
|
return False
|
318
318
|
return True
|
@@ -311,15 +311,15 @@ class ForwardMatch:
|
|
311
311
|
"""
|
312
312
|
if (
|
313
313
|
node_circuit.type == "op"
|
314
|
-
and getattr(node_circuit.op, "
|
314
|
+
and getattr(node_circuit.op, "condition", None)
|
315
315
|
and node_template.type == "op"
|
316
|
-
and getattr(node_template.op, "
|
316
|
+
and getattr(node_template.op, "condition", None)
|
317
317
|
):
|
318
318
|
if set(self.carg_indices) != set(node_template.cindices):
|
319
319
|
return False
|
320
320
|
if (
|
321
|
-
getattr(node_circuit.op, "
|
322
|
-
!= getattr(node_template.op, "
|
321
|
+
getattr(node_circuit.op, "condition", None)[1]
|
322
|
+
!= getattr(node_template.op, "condition", None)[1]
|
323
323
|
):
|
324
324
|
return False
|
325
325
|
return True
|
@@ -450,7 +450,7 @@ class TemplateSubstitution:
|
|
450
450
|
template_sublist and circuit_sublist match up to the
|
451
451
|
assignment of the parameters. For example the template
|
452
452
|
|
453
|
-
..
|
453
|
+
.. parsed-literal::
|
454
454
|
|
455
455
|
┌───────────┐ ┌────────┐
|
456
456
|
q_0: ┤ P(-1.0*β) ├──■────────────■──┤0 ├
|
@@ -460,7 +460,7 @@ class TemplateSubstitution:
|
|
460
460
|
|
461
461
|
should only maximally match once in the circuit
|
462
462
|
|
463
|
-
..
|
463
|
+
.. parsed-literal::
|
464
464
|
|
465
465
|
┌───────┐
|
466
466
|
q_0: ┤ P(-2) ├──■────────────■────────────────────────────
|
@@ -30,7 +30,7 @@ class SwapStrategy:
|
|
30
30
|
parallel. This means that a qubit can only be present once in a swap layer. For example, the
|
31
31
|
following swap layers represent the optimal swap strategy for a line with five qubits
|
32
32
|
|
33
|
-
..
|
33
|
+
.. parsed-literal::
|
34
34
|
|
35
35
|
(
|
36
36
|
((0, 1), (2, 3)), # Swap layer no. 1
|
@@ -41,9 +41,8 @@ class SabreSwap(TransformationPass):
|
|
41
41
|
r"""Map input circuit onto a backend topology via insertion of SWAPs.
|
42
42
|
|
43
43
|
Implementation of the SWAP-based heuristic search from the SABRE qubit
|
44
|
-
mapping paper [
|
45
|
-
|
46
|
-
and the depth of the circuit.
|
44
|
+
mapping paper [1] (Algorithm 1). The heuristic aims to minimize the number
|
45
|
+
of lossy SWAPs inserted and the depth of the circuit.
|
47
46
|
|
48
47
|
This algorithm starts from an initial layout of virtual qubits onto physical
|
49
48
|
qubits, and iterates over the circuit DAG until all gates are exhausted,
|
@@ -70,10 +69,7 @@ class SabreSwap(TransformationPass):
|
|
70
69
|
|
71
70
|
**References:**
|
72
71
|
|
73
|
-
[1]
|
74
|
-
"LightSABRE: A Lightweight and Enhanced SABRE Algorithm"
|
75
|
-
`arXiv:2409.08368 <https://doi.org/10.48550/arXiv.2409.08368>`__
|
76
|
-
[2] Li, Gushu, Yufei Ding, and Yuan Xie. "Tackling the qubit mapping problem
|
72
|
+
[1] Li, Gushu, Yufei Ding, and Yuan Xie. "Tackling the qubit mapping problem
|
77
73
|
for NISQ-era quantum devices." ASPLOS 2019.
|
78
74
|
`arXiv:1809.02573 <https://arxiv.org/pdf/1809.02573.pdf>`_
|
79
75
|
"""
|
@@ -223,7 +223,7 @@ class StarPreRouting(TransformationPass):
|
|
223
223
|
return (
|
224
224
|
len(node.qargs) <= 2
|
225
225
|
and len(node.cargs) == 0
|
226
|
-
and getattr(node, "condition", None) is None
|
226
|
+
and getattr(node.op, "condition", None) is None
|
227
227
|
and not isinstance(node.op, Barrier)
|
228
228
|
)
|
229
229
|
|
@@ -372,7 +372,7 @@ def _extract_nodes(nodes, dag):
|
|
372
372
|
qubit_indices = [dag.find_bit(qubit).index for qubit in node.qargs]
|
373
373
|
classical_bit_indices = set()
|
374
374
|
|
375
|
-
if node.condition is not None:
|
375
|
+
if node.op.condition is not None:
|
376
376
|
classical_bit_indices.update(condition_resources(node.op.condition).clbits)
|
377
377
|
|
378
378
|
if isinstance(node.op, SwitchCaseOp):
|
@@ -144,7 +144,7 @@ class ALAPSchedule(BaseSchedulerTransform):
|
|
144
144
|
|
145
145
|
new_dag.name = dag.name
|
146
146
|
new_dag.metadata = dag.metadata
|
147
|
-
new_dag.
|
147
|
+
new_dag.calibrations = dag.calibrations
|
148
148
|
|
149
149
|
# set circuit duration and unit to indicate it is scheduled
|
150
150
|
new_dag.duration = circuit_duration
|
@@ -63,7 +63,7 @@ class AlignMeasures(TransformationPass):
|
|
63
63
|
Examples:
|
64
64
|
We assume executing the following circuit on a backend with ``alignment=16``.
|
65
65
|
|
66
|
-
..
|
66
|
+
.. parsed-literal::
|
67
67
|
|
68
68
|
┌───┐┌────────────────┐┌─┐
|
69
69
|
q_0: ┤ X ├┤ Delay(100[dt]) ├┤M├
|
@@ -74,7 +74,7 @@ class AlignMeasures(TransformationPass):
|
|
74
74
|
Note that delay of 100 dt induces a misalignment of 4 dt at the measurement.
|
75
75
|
This pass appends an extra 12 dt time shift to the input circuit.
|
76
76
|
|
77
|
-
..
|
77
|
+
.. parsed-literal::
|
78
78
|
|
79
79
|
┌───┐┌────────────────┐┌─┐
|
80
80
|
q_0: ┤ X ├┤ Delay(112[dt]) ├┤M├
|
@@ -70,7 +70,7 @@ class InstructionDurationCheck(AnalysisPass):
|
|
70
70
|
return
|
71
71
|
|
72
72
|
# Check custom gate durations
|
73
|
-
for inst_defs in dag.
|
73
|
+
for inst_defs in dag.calibrations.values():
|
74
74
|
for caldef in inst_defs.values():
|
75
75
|
dur = caldef.duration
|
76
76
|
if not (dur % self.acquire_align == 0 and dur % self.pulse_align == 0):
|
@@ -17,7 +17,6 @@ from qiskit.pulse import Play
|
|
17
17
|
from qiskit.transpiler.basepasses import AnalysisPass
|
18
18
|
from qiskit.transpiler.exceptions import TranspilerError
|
19
19
|
from qiskit.transpiler.target import Target
|
20
|
-
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
21
20
|
|
22
21
|
|
23
22
|
class ValidatePulseGates(AnalysisPass):
|
@@ -41,7 +40,6 @@ class ValidatePulseGates(AnalysisPass):
|
|
41
40
|
the backend control electronics.
|
42
41
|
"""
|
43
42
|
|
44
|
-
@deprecate_pulse_dependency
|
45
43
|
def __init__(
|
46
44
|
self,
|
47
45
|
granularity: int = 1,
|
@@ -35,7 +35,7 @@ class ConstrainedReschedule(AnalysisPass):
|
|
35
35
|
|
36
36
|
We assume executing the following circuit on a backend with 16 dt of acquire alignment.
|
37
37
|
|
38
|
-
..
|
38
|
+
.. parsed-literal::
|
39
39
|
|
40
40
|
┌───┐┌────────────────┐┌─┐
|
41
41
|
q_0: ┤ X ├┤ Delay(100[dt]) ├┤M├
|
@@ -46,7 +46,7 @@ class ConstrainedReschedule(AnalysisPass):
|
|
46
46
|
Note that delay of 100 dt induces a misalignment of 4 dt at the measurement.
|
47
47
|
This pass appends an extra 12 dt time shift to the input circuit.
|
48
48
|
|
49
|
-
..
|
49
|
+
.. parsed-literal::
|
50
50
|
|
51
51
|
┌───┐┌────────────────┐┌─┐
|
52
52
|
q_0: ┤ X ├┤ Delay(112[dt]) ├┤M├
|
@@ -167,7 +167,7 @@ class ASAPSchedule(BaseSchedulerTransform):
|
|
167
167
|
|
168
168
|
new_dag.name = dag.name
|
169
169
|
new_dag.metadata = dag.metadata
|
170
|
-
new_dag.
|
170
|
+
new_dag.calibrations = dag.calibrations
|
171
171
|
|
172
172
|
# set circuit duration and unit to indicate it is scheduled
|
173
173
|
new_dag.duration = circuit_duration
|
@@ -42,7 +42,7 @@ class BaseSchedulerTransform(TransformationPass):
|
|
42
42
|
conditioned on the same register are commute, i.e. read-access to the
|
43
43
|
classical register doesn't change its state.
|
44
44
|
|
45
|
-
..
|
45
|
+
.. parsed-literal::
|
46
46
|
|
47
47
|
qc = QuantumCircuit(2, 1)
|
48
48
|
qc.delay(100, 0)
|
@@ -52,7 +52,7 @@ class BaseSchedulerTransform(TransformationPass):
|
|
52
52
|
The scheduler SHOULD comply with above topological ordering policy of the DAG circuit.
|
53
53
|
Accordingly, the `asap`-scheduled circuit will become
|
54
54
|
|
55
|
-
..
|
55
|
+
.. parsed-literal::
|
56
56
|
|
57
57
|
┌────────────────┐ ┌───┐
|
58
58
|
q_0: ┤ Delay(100[dt]) ├───┤ X ├──────────────
|
@@ -76,7 +76,7 @@ class BaseSchedulerTransform(TransformationPass):
|
|
76
76
|
is moved to the classical register (C).
|
77
77
|
The sequence from t0 to t1 of the measure instruction interval might be modeled as follows:
|
78
78
|
|
79
|
-
..
|
79
|
+
.. parsed-literal::
|
80
80
|
|
81
81
|
Q ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
|
82
82
|
B ░░▒▒▒▒▒▒▒▒░░░░░░░░░
|
@@ -90,7 +90,7 @@ class BaseSchedulerTransform(TransformationPass):
|
|
90
90
|
|
91
91
|
This precise model may induce weird edge case.
|
92
92
|
|
93
|
-
..
|
93
|
+
.. parsed-literal::
|
94
94
|
|
95
95
|
┌───┐
|
96
96
|
q_0: ───┤ X ├──────
|
@@ -107,7 +107,7 @@ class BaseSchedulerTransform(TransformationPass):
|
|
107
107
|
is unchanged during the stimulus, thus two nodes are simultaneously operated.
|
108
108
|
If one `alap`-schedule this circuit, it may return following circuit.
|
109
109
|
|
110
|
-
..
|
110
|
+
.. parsed-literal::
|
111
111
|
|
112
112
|
┌────────────────┐ ┌───┐
|
113
113
|
q_0: ┤ Delay(500[dt]) ├───┤ X ├──────
|
@@ -122,7 +122,7 @@ class BaseSchedulerTransform(TransformationPass):
|
|
122
122
|
It looks like the topological ordering between the nodes are flipped in the scheduled view.
|
123
123
|
This behavior can be understood by considering the control flow model described above,
|
124
124
|
|
125
|
-
..
|
125
|
+
.. parsed-literal::
|
126
126
|
|
127
127
|
: Quantum Circuit, first-measure
|
128
128
|
0 ░░░░░░░░░░░░▒▒▒▒▒▒░
|
@@ -154,7 +154,7 @@ class BaseSchedulerTransform(TransformationPass):
|
|
154
154
|
In this case, ``Measure`` instruction immediately locks the register C.
|
155
155
|
Under this configuration, the `alap`-scheduled circuit of above example may become
|
156
156
|
|
157
|
-
..
|
157
|
+
.. parsed-literal::
|
158
158
|
|
159
159
|
┌───┐
|
160
160
|
q_0: ───┤ X ├──────
|
@@ -168,8 +168,7 @@ class BaseSchedulerTransform(TransformationPass):
|
|
168
168
|
it may separately schedule qubit and classical register,
|
169
169
|
insertion of the delay yields unnecessary longer total execution time.
|
170
170
|
|
171
|
-
..
|
172
|
-
|
171
|
+
.. parsed-literal::
|
173
172
|
: Quantum Circuit, first-xgate
|
174
173
|
0 ░▒▒▒░░░░░░░░░░░░░░░
|
175
174
|
1 ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
|
@@ -186,7 +185,7 @@ class BaseSchedulerTransform(TransformationPass):
|
|
186
185
|
If finite conditional latency is provided, for example, 30 dt, the circuit
|
187
186
|
is scheduled as follows.
|
188
187
|
|
189
|
-
..
|
188
|
+
.. parsed-literal::
|
190
189
|
|
191
190
|
┌───────────────┐ ┌───┐
|
192
191
|
q_0: ┤ Delay(30[dt]) ├───┤ X ├──────
|
@@ -198,8 +197,7 @@ class BaseSchedulerTransform(TransformationPass):
|
|
198
197
|
|
199
198
|
with the timing model:
|
200
199
|
|
201
|
-
..
|
202
|
-
|
200
|
+
.. parsed-literal::
|
203
201
|
: Quantum Circuit, first-xgate
|
204
202
|
0 ░░▒▒▒░░░░░░░░░░░░░░░
|
205
203
|
1 ░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
|
@@ -266,10 +264,10 @@ class BaseSchedulerTransform(TransformationPass):
|
|
266
264
|
"""A helper method to get duration from node or calibration."""
|
267
265
|
indices = [dag.find_bit(qarg).index for qarg in node.qargs]
|
268
266
|
|
269
|
-
if dag.
|
267
|
+
if dag.has_calibration_for(node):
|
270
268
|
# If node has calibration, this value should be the highest priority
|
271
269
|
cal_key = tuple(indices), tuple(float(p) for p in node.op.params)
|
272
|
-
duration = dag.
|
270
|
+
duration = dag.calibrations[node.op.name][cal_key].duration
|
273
271
|
else:
|
274
272
|
duration = node.op.duration
|
275
273
|
|
@@ -13,7 +13,6 @@
|
|
13
13
|
"""Dynamical Decoupling insertion pass."""
|
14
14
|
|
15
15
|
import itertools
|
16
|
-
import warnings
|
17
16
|
|
18
17
|
import numpy as np
|
19
18
|
from qiskit.circuit import Gate, Delay, Reset
|
@@ -289,15 +288,11 @@ class DynamicalDecoupling(TransformationPass):
|
|
289
288
|
"""
|
290
289
|
circ_durations = InstructionDurations()
|
291
290
|
|
292
|
-
if dag.
|
291
|
+
if dag.calibrations:
|
293
292
|
cal_durations = []
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
# to see here
|
298
|
-
for gate, gate_cals in dag._calibrations_prop.items():
|
299
|
-
for (qubits, parameters), schedule in gate_cals.items():
|
300
|
-
cal_durations.append((gate, qubits, parameters, schedule.duration))
|
293
|
+
for gate, gate_cals in dag.calibrations.items():
|
294
|
+
for (qubits, parameters), schedule in gate_cals.items():
|
295
|
+
cal_durations.append((gate, qubits, parameters, schedule.duration))
|
301
296
|
circ_durations.update(cal_durations, circ_durations.dt)
|
302
297
|
|
303
298
|
if self._durations is not None:
|
@@ -99,7 +99,7 @@ class BasePadding(TransformationPass):
|
|
99
99
|
new_dag.name = dag.name
|
100
100
|
new_dag.metadata = dag.metadata
|
101
101
|
new_dag.unit = self.property_set["time_unit"]
|
102
|
-
new_dag.
|
102
|
+
new_dag.calibrations = dag.calibrations
|
103
103
|
new_dag.global_phase = dag.global_phase
|
104
104
|
|
105
105
|
idle_after = {bit: 0 for bit in dag.qubits}
|
@@ -14,7 +14,6 @@
|
|
14
14
|
from __future__ import annotations
|
15
15
|
|
16
16
|
import logging
|
17
|
-
import warnings
|
18
17
|
import numpy as np
|
19
18
|
|
20
19
|
from qiskit.circuit import Gate, ParameterExpression, Qubit
|
@@ -188,15 +187,11 @@ class PadDynamicalDecoupling(BasePadding):
|
|
188
187
|
"""
|
189
188
|
circ_durations = InstructionDurations()
|
190
189
|
|
191
|
-
if dag.
|
190
|
+
if dag.calibrations:
|
192
191
|
cal_durations = []
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
# to see here
|
197
|
-
for gate, gate_cals in dag._calibrations_prop.items():
|
198
|
-
for (qubits, parameters), schedule in gate_cals.items():
|
199
|
-
cal_durations.append((gate, qubits, parameters, schedule.duration))
|
192
|
+
for gate, gate_cals in dag.calibrations.items():
|
193
|
+
for (qubits, parameters), schedule in gate_cals.items():
|
194
|
+
cal_durations.append((gate, qubits, parameters, schedule.duration))
|
200
195
|
circ_durations.update(cal_durations, circ_durations.dt)
|
201
196
|
|
202
197
|
if self._durations is not None:
|
@@ -257,13 +252,7 @@ class PadDynamicalDecoupling(BasePadding):
|
|
257
252
|
try:
|
258
253
|
# Check calibration.
|
259
254
|
params = self._resolve_params(gate)
|
260
|
-
|
261
|
-
warnings.simplefilter(action="ignore", category=DeprecationWarning)
|
262
|
-
# `schedule.duration` emits pulse deprecation warnings which we don't want
|
263
|
-
# to see here
|
264
|
-
gate_length = dag._calibrations_prop[gate.name][
|
265
|
-
((physical_index,), params)
|
266
|
-
].duration
|
255
|
+
gate_length = dag.calibrations[gate.name][((physical_index,), params)].duration
|
267
256
|
if gate_length % self._alignment != 0:
|
268
257
|
# This is necessary to implement lightweight scheduling logic for this pass.
|
269
258
|
# Usually the pulse alignment constraint and pulse data chunk size take
|
@@ -27,9 +27,6 @@ class PadDelay(BasePadding):
|
|
27
27
|
|
28
28
|
.. code-block:: python
|
29
29
|
|
30
|
-
from qiskit import QuantumCircuit
|
31
|
-
from qiskit.transpiler import InstructionDurations
|
32
|
-
|
33
30
|
durations = InstructionDurations([("x", None, 160), ("cx", None, 800)])
|
34
31
|
|
35
32
|
qc = QuantumCircuit(2)
|
@@ -39,7 +36,7 @@ class PadDelay(BasePadding):
|
|
39
36
|
|
40
37
|
The ASAP-scheduled circuit output may become
|
41
38
|
|
42
|
-
..
|
39
|
+
.. parsed-literal::
|
43
40
|
|
44
41
|
┌────────────────┐
|
45
42
|
q_0: ┤ Delay(160[dt]) ├──■──
|
@@ -64,14 +64,10 @@ class BaseScheduler(AnalysisPass):
|
|
64
64
|
"""A helper method to get duration from node or calibration."""
|
65
65
|
indices = [dag.find_bit(qarg).index for qarg in node.qargs]
|
66
66
|
|
67
|
-
if dag.
|
67
|
+
if dag.has_calibration_for(node):
|
68
68
|
# If node has calibration, this value should be the highest priority
|
69
69
|
cal_key = tuple(indices), tuple(float(p) for p in node.op.params)
|
70
|
-
|
71
|
-
warnings.simplefilter(action="ignore", category=DeprecationWarning)
|
72
|
-
# `schedule.duration` emits pulse deprecation warnings which we don't want
|
73
|
-
# to see here
|
74
|
-
duration = dag._calibrations_prop[node.op.name][cal_key].duration
|
70
|
+
duration = dag.calibrations[node.op.name][cal_key].duration
|
75
71
|
|
76
72
|
# Note that node duration is updated (but this is analysis pass)
|
77
73
|
op = node.op.to_mutable()
|
@@ -12,7 +12,6 @@
|
|
12
12
|
|
13
13
|
"""Unify time unit in circuit for scheduling and following passes."""
|
14
14
|
from typing import Set
|
15
|
-
import warnings
|
16
15
|
|
17
16
|
from qiskit.circuit import Delay
|
18
17
|
from qiskit.dagcircuit import DAGCircuit
|
@@ -122,15 +121,11 @@ class TimeUnitConversion(TransformationPass):
|
|
122
121
|
"""
|
123
122
|
circ_durations = InstructionDurations()
|
124
123
|
|
125
|
-
if dag.
|
124
|
+
if dag.calibrations:
|
126
125
|
cal_durations = []
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
# to see here
|
131
|
-
for gate, gate_cals in dag._calibrations_prop.items():
|
132
|
-
for (qubits, parameters), schedule in gate_cals.items():
|
133
|
-
cal_durations.append((gate, qubits, parameters, schedule.duration))
|
126
|
+
for gate, gate_cals in dag.calibrations.items():
|
127
|
+
for (qubits, parameters), schedule in gate_cals.items():
|
128
|
+
cal_durations.append((gate, qubits, parameters, schedule.duration))
|
134
129
|
circ_durations.update(cal_durations, circ_durations.dt)
|
135
130
|
|
136
131
|
if self._durations_provided:
|