qiskit 1.3.0b1__cp39-abi3-win32.whl → 1.3.0rc2__cp39-abi3-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qiskit/VERSION.txt +1 -1
- qiskit/__init__.py +20 -1
- qiskit/_accelerate.pyd +0 -0
- qiskit/assembler/assemble_schedules.py +2 -0
- qiskit/circuit/__init__.py +44 -1
- qiskit/circuit/_standard_gates_commutations.py +585 -0
- qiskit/circuit/barrier.py +2 -0
- qiskit/circuit/controlflow/builder.py +3 -3
- qiskit/circuit/controlflow/if_else.py +13 -5
- qiskit/circuit/controlflow/while_loop.py +10 -2
- qiskit/circuit/delay.py +20 -3
- qiskit/circuit/equivalence.py +13 -214
- qiskit/circuit/gate.py +3 -1
- qiskit/circuit/instruction.py +32 -11
- qiskit/circuit/instructionset.py +2 -0
- qiskit/circuit/library/__init__.py +110 -14
- qiskit/circuit/library/arithmetic/__init__.py +9 -2
- qiskit/circuit/library/arithmetic/adders/__init__.py +1 -0
- qiskit/circuit/library/arithmetic/adders/adder.py +154 -2
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +20 -56
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +14 -1
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +21 -91
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
- qiskit/circuit/library/arithmetic/multipliers/__init__.py +1 -0
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +8 -1
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +94 -3
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +8 -1
- qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
- qiskit/circuit/library/basis_change/qft.py +20 -38
- qiskit/circuit/library/blueprintcircuit.py +64 -0
- qiskit/circuit/library/boolean_logic/__init__.py +4 -4
- qiskit/circuit/library/boolean_logic/inner_product.py +81 -4
- qiskit/circuit/library/boolean_logic/quantum_and.py +107 -4
- qiskit/circuit/library/boolean_logic/quantum_or.py +107 -3
- qiskit/circuit/library/boolean_logic/quantum_xor.py +97 -3
- qiskit/circuit/library/data_preparation/__init__.py +6 -3
- qiskit/circuit/library/data_preparation/{z_feature_map.py → _z_feature_map.py} +45 -34
- qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +342 -29
- qiskit/circuit/library/fourier_checking.py +72 -11
- qiskit/circuit/library/generalized_gates/__init__.py +1 -1
- qiskit/circuit/library/generalized_gates/diagonal.py +45 -51
- qiskit/circuit/library/generalized_gates/gms.py +67 -14
- qiskit/circuit/library/generalized_gates/gr.py +4 -4
- qiskit/circuit/library/generalized_gates/isometry.py +2 -2
- qiskit/circuit/library/generalized_gates/linear_function.py +12 -6
- qiskit/circuit/library/generalized_gates/mcmt.py +167 -107
- qiskit/circuit/library/generalized_gates/permutation.py +8 -6
- qiskit/circuit/library/generalized_gates/rv.py +8 -9
- qiskit/circuit/library/graph_state.py +93 -10
- qiskit/circuit/library/grover_operator.py +270 -2
- qiskit/circuit/library/hidden_linear_function.py +83 -20
- qiskit/circuit/library/iqp.py +99 -20
- qiskit/circuit/library/n_local/__init__.py +19 -7
- qiskit/circuit/library/n_local/efficient_su2.py +118 -5
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +259 -0
- qiskit/circuit/library/n_local/excitation_preserving.py +130 -6
- qiskit/circuit/library/n_local/n_local.py +406 -5
- qiskit/circuit/library/n_local/pauli_two_design.py +106 -4
- qiskit/circuit/library/n_local/qaoa_ansatz.py +80 -1
- qiskit/circuit/library/n_local/real_amplitudes.py +127 -7
- qiskit/circuit/library/n_local/two_local.py +14 -7
- qiskit/circuit/library/overlap.py +91 -26
- qiskit/circuit/library/pauli_evolution.py +17 -15
- qiskit/circuit/library/phase_estimation.py +80 -4
- qiskit/circuit/library/quantum_volume.py +72 -20
- qiskit/circuit/library/standard_gates/__init__.py +20 -1
- qiskit/circuit/library/standard_gates/dcx.py +2 -1
- qiskit/circuit/library/standard_gates/ecr.py +2 -2
- qiskit/circuit/library/standard_gates/h.py +4 -3
- qiskit/circuit/library/standard_gates/i.py +2 -1
- qiskit/circuit/library/standard_gates/iswap.py +2 -2
- qiskit/circuit/library/standard_gates/p.py +20 -12
- qiskit/circuit/library/standard_gates/r.py +1 -1
- qiskit/circuit/library/standard_gates/rx.py +4 -3
- qiskit/circuit/library/standard_gates/rxx.py +2 -2
- qiskit/circuit/library/standard_gates/ry.py +4 -3
- qiskit/circuit/library/standard_gates/ryy.py +2 -2
- qiskit/circuit/library/standard_gates/rz.py +13 -12
- qiskit/circuit/library/standard_gates/rzx.py +6 -6
- qiskit/circuit/library/standard_gates/rzz.py +1 -1
- qiskit/circuit/library/standard_gates/s.py +4 -4
- qiskit/circuit/library/standard_gates/swap.py +3 -3
- qiskit/circuit/library/standard_gates/sx.py +4 -3
- qiskit/circuit/library/standard_gates/t.py +2 -2
- qiskit/circuit/library/standard_gates/u.py +11 -3
- qiskit/circuit/library/standard_gates/u1.py +65 -15
- qiskit/circuit/library/standard_gates/u2.py +4 -1
- qiskit/circuit/library/standard_gates/u3.py +31 -3
- qiskit/circuit/library/standard_gates/x.py +7 -5
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -2
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -2
- qiskit/circuit/library/standard_gates/y.py +4 -3
- qiskit/circuit/library/standard_gates/z.py +3 -3
- qiskit/circuit/library/templates/clifford/clifford_2_1.py +9 -8
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +9 -7
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +9 -8
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +9 -8
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +9 -8
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +10 -9
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +9 -7
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +10 -8
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +16 -14
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +14 -12
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +14 -12
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +11 -9
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +11 -9
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +11 -9
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +11 -9
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +12 -10
- qiskit/circuit/library/templates/rzx/rzx_cy.py +11 -10
- qiskit/circuit/library/templates/rzx/rzx_xz.py +16 -15
- qiskit/circuit/library/templates/rzx/rzx_yz.py +12 -10
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +22 -20
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +16 -15
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +17 -15
- qiskit/circuit/parameter.py +4 -0
- qiskit/circuit/parameterexpression.py +167 -34
- qiskit/circuit/quantumcircuit.py +162 -126
- qiskit/circuit/singleton.py +2 -0
- qiskit/circuit/store.py +2 -0
- qiskit/circuit/twirling.py +145 -0
- qiskit/compiler/assembler.py +17 -4
- qiskit/compiler/scheduler.py +2 -0
- qiskit/compiler/sequencer.py +2 -0
- qiskit/compiler/transpiler.py +81 -26
- qiskit/converters/circuit_to_dag.py +2 -2
- qiskit/converters/circuit_to_dagdependency.py +1 -1
- qiskit/converters/circuit_to_dagdependency_v2.py +1 -1
- qiskit/converters/circuit_to_instruction.py +1 -1
- qiskit/converters/dag_to_circuit.py +7 -5
- qiskit/converters/dag_to_dagdependency.py +1 -1
- qiskit/converters/dag_to_dagdependency_v2.py +1 -1
- qiskit/converters/dagdependency_to_circuit.py +5 -1
- qiskit/converters/dagdependency_to_dag.py +6 -1
- qiskit/dagcircuit/collect_blocks.py +3 -3
- qiskit/dagcircuit/dagdependency.py +18 -5
- qiskit/dagcircuit/dagdependency_v2.py +1 -1
- qiskit/dagcircuit/dagnode.py +2 -2
- qiskit/passmanager/__init__.py +2 -2
- qiskit/primitives/backend_estimator.py +5 -2
- qiskit/primitives/backend_sampler_v2.py +61 -18
- qiskit/primitives/base/base_estimator.py +2 -2
- qiskit/primitives/containers/data_bin.py +9 -1
- qiskit/primitives/statevector_sampler.py +1 -1
- qiskit/primitives/utils.py +1 -1
- qiskit/providers/__init__.py +3 -3
- qiskit/providers/backend.py +12 -1
- qiskit/providers/backend_compat.py +23 -3
- qiskit/providers/basic_provider/basic_simulator.py +12 -2
- qiskit/providers/fake_provider/fake_pulse_backend.py +6 -1
- qiskit/providers/fake_provider/generic_backend_v2.py +46 -30
- qiskit/providers/models/pulsedefaults.py +2 -0
- qiskit/pulse/builder.py +59 -18
- qiskit/pulse/calibration_entries.py +4 -1
- qiskit/pulse/channels.py +2 -0
- qiskit/pulse/exceptions.py +2 -0
- qiskit/pulse/instruction_schedule_map.py +21 -6
- qiskit/pulse/instructions/acquire.py +2 -0
- qiskit/pulse/instructions/delay.py +2 -0
- qiskit/pulse/instructions/directives.py +8 -0
- qiskit/pulse/instructions/frequency.py +3 -0
- qiskit/pulse/instructions/instruction.py +2 -0
- qiskit/pulse/instructions/phase.py +3 -0
- qiskit/pulse/instructions/play.py +2 -0
- qiskit/pulse/instructions/reference.py +2 -0
- qiskit/pulse/instructions/snapshot.py +2 -0
- qiskit/pulse/library/pulse.py +2 -0
- qiskit/pulse/library/symbolic_pulses.py +28 -0
- qiskit/pulse/library/waveform.py +2 -0
- qiskit/pulse/macros.py +1 -1
- qiskit/pulse/schedule.py +12 -13
- qiskit/pulse/transforms/alignments.py +5 -3
- qiskit/pulse/transforms/dag.py +7 -0
- qiskit/qasm2/export.py +5 -3
- qiskit/qasm2/parse.py +46 -2
- qiskit/qasm3/__init__.py +1 -0
- qiskit/qasm3/ast.py +123 -15
- qiskit/qasm3/exporter.py +103 -77
- qiskit/qobj/converters/pulse_instruction.py +6 -4
- qiskit/qpy/__init__.py +181 -0
- qiskit/qpy/binary_io/circuits.py +20 -5
- qiskit/qpy/binary_io/schedules.py +3 -4
- qiskit/qpy/binary_io/value.py +310 -13
- qiskit/qpy/common.py +46 -2
- qiskit/qpy/formats.py +7 -0
- qiskit/qpy/interface.py +40 -4
- qiskit/quantum_info/__init__.py +4 -0
- qiskit/quantum_info/operators/channel/transformations.py +28 -21
- qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
- qiskit/quantum_info/operators/operator.py +54 -8
- qiskit/quantum_info/operators/symplectic/base_pauli.py +11 -19
- qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +1 -1
- qiskit/quantum_info/operators/symplectic/pauli.py +2 -0
- qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +23 -2
- qiskit/quantum_info/states/densitymatrix.py +5 -5
- qiskit/quantum_info/states/stabilizerstate.py +1 -1
- qiskit/quantum_info/states/statevector.py +6 -6
- qiskit/result/mitigation/base_readout_mitigator.py +1 -1
- qiskit/result/mitigation/correlated_readout_mitigator.py +9 -1
- qiskit/result/mitigation/local_readout_mitigator.py +9 -1
- qiskit/result/mitigation/utils.py +57 -0
- qiskit/scheduler/config.py +2 -0
- qiskit/scheduler/methods/basic.py +3 -0
- qiskit/scheduler/schedule_circuit.py +2 -0
- qiskit/scheduler/sequence.py +2 -0
- qiskit/synthesis/__init__.py +25 -0
- qiskit/synthesis/arithmetic/__init__.py +16 -0
- qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
- qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +102 -0
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +99 -0
- qiskit/synthesis/clifford/clifford_decompose_bm.py +1 -2
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +3 -2
- qiskit/synthesis/clifford/clifford_decompose_layers.py +2 -1
- qiskit/synthesis/evolution/__init__.py +1 -0
- qiskit/synthesis/evolution/lie_trotter.py +16 -42
- qiskit/synthesis/evolution/pauli_network.py +80 -0
- qiskit/synthesis/evolution/product_formula.py +165 -238
- qiskit/synthesis/evolution/qdrift.py +36 -29
- qiskit/synthesis/evolution/suzuki_trotter.py +87 -27
- qiskit/synthesis/multi_controlled/__init__.py +1 -0
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
- qiskit/synthesis/qft/qft_decompose_full.py +19 -1
- qiskit/synthesis/qft/qft_decompose_lnn.py +2 -1
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -1
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +4 -63
- qiskit/synthesis/unitary/qsd.py +5 -5
- qiskit/transpiler/__init__.py +21 -14
- qiskit/transpiler/basepasses.py +1 -1
- qiskit/transpiler/passes/__init__.py +2 -0
- qiskit/transpiler/passes/basis/basis_translator.py +9 -565
- qiskit/transpiler/passes/basis/decompose.py +45 -12
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
- qiskit/transpiler/passes/calibration/pulse_gate.py +4 -2
- qiskit/transpiler/passes/calibration/rx_builder.py +11 -7
- qiskit/transpiler/passes/calibration/rzx_builder.py +46 -30
- qiskit/transpiler/passes/layout/disjoint_utils.py +15 -13
- qiskit/transpiler/passes/layout/sabre_layout.py +7 -2
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +5 -0
- qiskit/transpiler/passes/optimization/__init__.py +1 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +19 -3
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +1 -1
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
- qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +1 -1
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +48 -131
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +4 -2
- qiskit/transpiler/passes/optimization/elide_permutations.py +9 -32
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +5 -11
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
- qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +1 -1
- qiskit/transpiler/passes/optimization/remove_identity_equiv.py +69 -0
- qiskit/transpiler/passes/optimization/template_matching/backward_match.py +5 -5
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +4 -4
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +2 -2
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +1 -1
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
- qiskit/transpiler/passes/routing/sabre_swap.py +7 -3
- qiskit/transpiler/passes/routing/star_prerouting.py +2 -2
- qiskit/transpiler/passes/scheduling/alap.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +2 -2
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +2 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
- qiskit/transpiler/passes/scheduling/asap.py +1 -1
- qiskit/transpiler/passes/scheduling/base_scheduler.py +14 -12
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +9 -4
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +16 -5
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +4 -1
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +6 -2
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +9 -4
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +262 -99
- qiskit/transpiler/passes/synthesis/hls_plugins.py +637 -7
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +55 -34
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +2 -56
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +5 -0
- qiskit/transpiler/passes/utils/gate_direction.py +12 -275
- qiskit/transpiler/passes/utils/gates_basis.py +7 -30
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +2 -1
- qiskit/transpiler/passmanager_config.py +22 -4
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +40 -14
- qiskit/transpiler/preset_passmanagers/common.py +5 -3
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +125 -42
- qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
- qiskit/transpiler/target.py +74 -16
- qiskit/utils/deprecate_pulse.py +119 -0
- qiskit/visualization/circuit/_utils.py +2 -2
- qiskit/visualization/circuit/circuit_visualization.py +3 -2
- qiskit/visualization/circuit/matplotlib.py +1 -1
- qiskit/visualization/dag_visualization.py +1 -1
- qiskit/visualization/pass_manager_visualization.py +3 -14
- qiskit/visualization/pulse_v2/interface.py +3 -1
- qiskit/visualization/timeline/core.py +25 -2
- qiskit/visualization/timeline/interface.py +12 -0
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/METADATA +9 -8
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/RECORD +357 -346
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/WHEEL +1 -1
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/entry_points.txt +19 -0
- qiskit/circuit/library/data_preparation/zz_feature_map.py +0 -118
- qiskit/synthesis/two_qubit/weyl.py +0 -97
- qiskit/transpiler/passes/synthesis/qubit_tracker.py +0 -132
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/top_level.txt +0 -0
qiskit/transpiler/target.py
CHANGED
@@ -57,6 +57,7 @@ from qiskit.exceptions import QiskitError
|
|
57
57
|
from qiskit.providers.backend import QubitProperties # pylint: disable=unused-import
|
58
58
|
from qiskit.providers.models.backendproperties import BackendProperties
|
59
59
|
from qiskit.utils import deprecate_func
|
60
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency, deprecate_pulse_arg
|
60
61
|
|
61
62
|
logger = logging.getLogger(__name__)
|
62
63
|
|
@@ -86,6 +87,7 @@ class InstructionProperties(BaseInstructionProperties):
|
|
86
87
|
cls, duration, error
|
87
88
|
)
|
88
89
|
|
90
|
+
@deprecate_pulse_arg("calibration", predicate=lambda cals: cals is not None)
|
89
91
|
def __init__(
|
90
92
|
self,
|
91
93
|
duration: float | None = None, # pylint: disable=unused-argument
|
@@ -99,13 +101,14 @@ class InstructionProperties(BaseInstructionProperties):
|
|
99
101
|
specified set of qubits
|
100
102
|
error: The average error rate for the instruction on the specified
|
101
103
|
set of qubits.
|
102
|
-
calibration: The pulse representation of the instruction.
|
104
|
+
calibration: DEPRECATED. The pulse representation of the instruction.
|
103
105
|
"""
|
104
106
|
super().__init__()
|
105
107
|
self._calibration: CalibrationEntry | None = None
|
106
|
-
self.
|
108
|
+
self._calibration_prop = calibration
|
107
109
|
|
108
110
|
@property
|
111
|
+
@deprecate_pulse_dependency(is_property=True)
|
109
112
|
def calibration(self):
|
110
113
|
"""The pulse representation of the instruction.
|
111
114
|
|
@@ -133,12 +136,24 @@ class InstructionProperties(BaseInstructionProperties):
|
|
133
136
|
use own definition to compile the circuit down to the execution format.
|
134
137
|
|
135
138
|
"""
|
136
|
-
|
137
|
-
return None
|
138
|
-
return self._calibration.get_schedule()
|
139
|
+
return self._calibration_prop
|
139
140
|
|
140
141
|
@calibration.setter
|
142
|
+
@deprecate_pulse_dependency(is_property=True)
|
141
143
|
def calibration(self, calibration: Schedule | ScheduleBlock | CalibrationEntry):
|
144
|
+
self._calibration_prop = calibration
|
145
|
+
|
146
|
+
@property
|
147
|
+
def _calibration_prop(self):
|
148
|
+
if self._calibration is None:
|
149
|
+
return None
|
150
|
+
with warnings.catch_warnings():
|
151
|
+
warnings.simplefilter(action="ignore", category=DeprecationWarning)
|
152
|
+
# Clean this alternative path from deprecation warning emitted by `get_schedule`
|
153
|
+
return self._calibration.get_schedule()
|
154
|
+
|
155
|
+
@_calibration_prop.setter
|
156
|
+
def _calibration_prop(self, calibration: Schedule | ScheduleBlock | CalibrationEntry):
|
142
157
|
if isinstance(calibration, (Schedule, ScheduleBlock)):
|
143
158
|
new_entry = ScheduleDef()
|
144
159
|
new_entry.define(calibration, user_provided=True)
|
@@ -153,11 +168,11 @@ class InstructionProperties(BaseInstructionProperties):
|
|
153
168
|
)
|
154
169
|
|
155
170
|
def __getstate__(self) -> tuple:
|
156
|
-
return (super().__getstate__(), self.
|
171
|
+
return (super().__getstate__(), self._calibration_prop, self._calibration)
|
157
172
|
|
158
173
|
def __setstate__(self, state: tuple):
|
159
174
|
super().__setstate__(state[0])
|
160
|
-
self.
|
175
|
+
self._calibration_prop = state[1]
|
161
176
|
self._calibration = state[2]
|
162
177
|
|
163
178
|
|
@@ -447,6 +462,7 @@ class Target(BaseTarget):
|
|
447
462
|
self._instruction_durations = None
|
448
463
|
self._instruction_schedule_map = None
|
449
464
|
|
465
|
+
@deprecate_pulse_dependency
|
450
466
|
def update_from_instruction_schedule_map(self, inst_map, inst_name_map=None, error_dict=None):
|
451
467
|
"""Update the target from an instruction schedule map.
|
452
468
|
|
@@ -604,6 +620,7 @@ class Target(BaseTarget):
|
|
604
620
|
self.granularity, self.min_length, self.pulse_alignment, self.acquire_alignment
|
605
621
|
)
|
606
622
|
|
623
|
+
@deprecate_pulse_dependency
|
607
624
|
def instruction_schedule_map(self):
|
608
625
|
"""Return an :class:`~qiskit.pulse.InstructionScheduleMap` for the
|
609
626
|
instructions in the target with a pulse schedule defined.
|
@@ -612,9 +629,17 @@ class Target(BaseTarget):
|
|
612
629
|
InstructionScheduleMap: The instruction schedule map for the
|
613
630
|
instructions in this target with a pulse schedule defined.
|
614
631
|
"""
|
632
|
+
return self._get_instruction_schedule_map()
|
633
|
+
|
634
|
+
def _get_instruction_schedule_map(self):
|
615
635
|
if self._instruction_schedule_map is not None:
|
616
636
|
return self._instruction_schedule_map
|
617
|
-
|
637
|
+
with warnings.catch_warnings():
|
638
|
+
warnings.simplefilter(action="ignore", category=DeprecationWarning)
|
639
|
+
# `InstructionScheduleMap` is deprecated in Qiskit 1.3 but we want this alternative
|
640
|
+
# path to be clean of deprecation warnings
|
641
|
+
out_inst_schedule_map = InstructionScheduleMap()
|
642
|
+
|
618
643
|
for instruction, qargs in self._gate_map.items():
|
619
644
|
for qarg, properties in qargs.items():
|
620
645
|
# Directly getting CalibrationEntry not to invoke .get_schedule().
|
@@ -626,6 +651,7 @@ class Target(BaseTarget):
|
|
626
651
|
self._instruction_schedule_map = out_inst_schedule_map
|
627
652
|
return out_inst_schedule_map
|
628
653
|
|
654
|
+
@deprecate_pulse_dependency
|
629
655
|
def has_calibration(
|
630
656
|
self,
|
631
657
|
operation_name: str,
|
@@ -640,6 +666,13 @@ class Target(BaseTarget):
|
|
640
666
|
Returns:
|
641
667
|
Returns ``True`` if the calibration is supported and ``False`` if it isn't.
|
642
668
|
"""
|
669
|
+
return self._has_calibration(operation_name, qargs)
|
670
|
+
|
671
|
+
def _has_calibration(
|
672
|
+
self,
|
673
|
+
operation_name: str,
|
674
|
+
qargs: tuple[int, ...],
|
675
|
+
) -> bool:
|
643
676
|
qargs = tuple(qargs)
|
644
677
|
if operation_name not in self._gate_map:
|
645
678
|
return False
|
@@ -647,6 +680,7 @@ class Target(BaseTarget):
|
|
647
680
|
return False
|
648
681
|
return getattr(self._gate_map[operation_name][qargs], "_calibration", None) is not None
|
649
682
|
|
683
|
+
@deprecate_pulse_dependency
|
650
684
|
def get_calibration(
|
651
685
|
self,
|
652
686
|
operation_name: str,
|
@@ -668,7 +702,16 @@ class Target(BaseTarget):
|
|
668
702
|
Returns:
|
669
703
|
Calibrated pulse schedule of corresponding instruction.
|
670
704
|
"""
|
671
|
-
|
705
|
+
return self._get_calibration(operation_name, qargs, *args, *kwargs)
|
706
|
+
|
707
|
+
def _get_calibration(
|
708
|
+
self,
|
709
|
+
operation_name: str,
|
710
|
+
qargs: tuple[int, ...],
|
711
|
+
*args: ParameterValueType,
|
712
|
+
**kwargs: ParameterValueType,
|
713
|
+
) -> Schedule | ScheduleBlock:
|
714
|
+
if not self._has_calibration(operation_name, qargs):
|
672
715
|
raise KeyError(
|
673
716
|
f"Calibration of instruction {operation_name} for qubit {qargs} is not defined."
|
674
717
|
)
|
@@ -927,6 +970,7 @@ class Target(BaseTarget):
|
|
927
970
|
super().__setstate__(state["base"])
|
928
971
|
|
929
972
|
@classmethod
|
973
|
+
@deprecate_pulse_arg("inst_map")
|
930
974
|
def from_configuration(
|
931
975
|
cls,
|
932
976
|
basis_gates: list[str],
|
@@ -965,7 +1009,7 @@ class Target(BaseTarget):
|
|
965
1009
|
coupling_map: The coupling map representing connectivity constraints
|
966
1010
|
on the backend. If specified all gates from ``basis_gates`` will
|
967
1011
|
be supported on all qubits (or pairs of qubits).
|
968
|
-
inst_map: The instruction schedule map representing the pulse
|
1012
|
+
inst_map: DEPRECATED. The instruction schedule map representing the pulse
|
969
1013
|
:class:`~.Schedule` definitions for each instruction. If this
|
970
1014
|
is specified ``coupling_map`` must be specified. The
|
971
1015
|
``coupling_map`` is used as the source of truth for connectivity
|
@@ -1112,9 +1156,16 @@ class Target(BaseTarget):
|
|
1112
1156
|
if error is None and duration is None and calibration is None:
|
1113
1157
|
gate_properties[(qubit,)] = None
|
1114
1158
|
else:
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1159
|
+
with warnings.catch_warnings():
|
1160
|
+
warnings.filterwarnings(
|
1161
|
+
"ignore",
|
1162
|
+
category=DeprecationWarning,
|
1163
|
+
message=".*``calibration`` is deprecated as of Qiskit 1.3.*",
|
1164
|
+
module="qiskit",
|
1165
|
+
)
|
1166
|
+
gate_properties[(qubit,)] = InstructionProperties(
|
1167
|
+
duration=duration, error=error, calibration=calibration
|
1168
|
+
)
|
1118
1169
|
target.add_instruction(name_mapping[gate], properties=gate_properties, name=gate)
|
1119
1170
|
edges = list(coupling_map.get_edges())
|
1120
1171
|
for gate in two_qubit_gates:
|
@@ -1154,9 +1205,16 @@ class Target(BaseTarget):
|
|
1154
1205
|
if error is None and duration is None and calibration is None:
|
1155
1206
|
gate_properties[edge] = None
|
1156
1207
|
else:
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1208
|
+
with warnings.catch_warnings():
|
1209
|
+
warnings.filterwarnings(
|
1210
|
+
"ignore",
|
1211
|
+
category=DeprecationWarning,
|
1212
|
+
message=".*``calibration`` is deprecated as of Qiskit 1.3.*",
|
1213
|
+
module="qiskit",
|
1214
|
+
)
|
1215
|
+
gate_properties[edge] = InstructionProperties(
|
1216
|
+
duration=duration, error=error, calibration=calibration
|
1217
|
+
)
|
1160
1218
|
target.add_instruction(name_mapping[gate], properties=gate_properties, name=gate)
|
1161
1219
|
for gate in global_ideal_variable_width_gates:
|
1162
1220
|
target.add_instruction(name_mapping[gate], name=gate)
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2024
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""
|
14
|
+
Deprecation functions for Qiskit Pulse. To be removed in Qiskit 2.0.
|
15
|
+
"""
|
16
|
+
|
17
|
+
import warnings
|
18
|
+
import functools
|
19
|
+
|
20
|
+
from qiskit.utils.deprecation import deprecate_func, deprecate_arg
|
21
|
+
|
22
|
+
|
23
|
+
def deprecate_pulse_func(func):
|
24
|
+
"""Deprecation message for functions and classes"""
|
25
|
+
return deprecate_func(
|
26
|
+
since="1.3",
|
27
|
+
package_name="Qiskit",
|
28
|
+
removal_timeline="in Qiskit 2.0",
|
29
|
+
additional_msg="The entire Qiskit Pulse package is being deprecated "
|
30
|
+
"and will be moved to the Qiskit Dynamics repository: "
|
31
|
+
"https://github.com/qiskit-community/qiskit-dynamics",
|
32
|
+
)(func)
|
33
|
+
|
34
|
+
|
35
|
+
def deprecate_pulse_dependency(*args, moving_to_dynamics: bool = False, **kwargs):
|
36
|
+
# pylint: disable=missing-param-doc
|
37
|
+
"""Deprecation message for functions and classes which use or depend on Pulse
|
38
|
+
|
39
|
+
Args:
|
40
|
+
moving_to_dynamics: set to True if the dependency is moving to Qiskit Dynamics. This affects
|
41
|
+
the deprecation message being printed, namely saying explicitly whether the dependency will
|
42
|
+
be moved to Qiskit Dynamics or whether it will just be removed without an alternative.
|
43
|
+
"""
|
44
|
+
|
45
|
+
def msg_handler(func):
|
46
|
+
fully_qual_name = format(f"{func.__module__}.{func.__qualname__}")
|
47
|
+
if ".__init__" in fully_qual_name: # Deprecating a class' vis it __init__ method
|
48
|
+
fully_qual_name = fully_qual_name[:-9]
|
49
|
+
elif "is_property" not in kwargs: # Deprecating either a function or a method
|
50
|
+
fully_qual_name += "()"
|
51
|
+
|
52
|
+
message = (
|
53
|
+
"The entire Qiskit Pulse package is being deprecated and will be moved to the Qiskit "
|
54
|
+
"Dynamics repository: https://github.com/qiskit-community/qiskit-dynamics."
|
55
|
+
+ (
|
56
|
+
format(f" Note that ``{fully_qual_name}`` will be moved as well.")
|
57
|
+
if moving_to_dynamics
|
58
|
+
else format(
|
59
|
+
f" Note that once removed, ``{fully_qual_name}`` will have no alternative in Qiskit."
|
60
|
+
)
|
61
|
+
)
|
62
|
+
)
|
63
|
+
|
64
|
+
decorator = deprecate_func(
|
65
|
+
since="1.3",
|
66
|
+
package_name="Qiskit",
|
67
|
+
removal_timeline="in Qiskit 2.0",
|
68
|
+
additional_msg=message,
|
69
|
+
**kwargs,
|
70
|
+
)(func)
|
71
|
+
|
72
|
+
# Taken when `deprecate_pulse_dependency` is used with no arguments and with empty parentheses,
|
73
|
+
# in which case the decorated function is passed
|
74
|
+
|
75
|
+
return decorator
|
76
|
+
|
77
|
+
if args:
|
78
|
+
return msg_handler(args[0])
|
79
|
+
return msg_handler
|
80
|
+
|
81
|
+
|
82
|
+
def deprecate_pulse_arg(arg_name: str, **kwargs):
|
83
|
+
"""Deprecation message for arguments related to Pulse"""
|
84
|
+
return deprecate_arg(
|
85
|
+
name=arg_name,
|
86
|
+
since="1.3",
|
87
|
+
package_name="Qiskit",
|
88
|
+
removal_timeline="in Qiskit 2.0",
|
89
|
+
additional_msg="The entire Qiskit Pulse package is being deprecated "
|
90
|
+
"and this argument uses a dependency on the package.",
|
91
|
+
**kwargs,
|
92
|
+
)
|
93
|
+
|
94
|
+
|
95
|
+
def ignore_pulse_deprecation_warnings(func):
|
96
|
+
"""Ignore deprecation warnings emitted from the pulse package"""
|
97
|
+
|
98
|
+
@functools.wraps(func)
|
99
|
+
def wrapper(*args, **kwargs):
|
100
|
+
with warnings.catch_warnings():
|
101
|
+
warnings.filterwarnings(
|
102
|
+
"ignore", category=DeprecationWarning, message="The (.*) ``qiskit.pulse"
|
103
|
+
)
|
104
|
+
return func(*args, **kwargs)
|
105
|
+
|
106
|
+
return wrapper
|
107
|
+
|
108
|
+
|
109
|
+
def decorate_test_methods(decorator):
|
110
|
+
"""Put a given decorator on all the decorated class methods whose name starts with `test_`"""
|
111
|
+
|
112
|
+
def cls_wrapper(cls):
|
113
|
+
for attr in dir(cls):
|
114
|
+
if attr.startswith("test_") and callable(object.__getattribute__(cls, attr)):
|
115
|
+
setattr(cls, attr, decorator(object.__getattribute__(cls, attr)))
|
116
|
+
|
117
|
+
return cls
|
118
|
+
|
119
|
+
return cls_wrapper
|
@@ -503,7 +503,7 @@ def _get_gate_span(qubits, node):
|
|
503
503
|
# type of op must be the only op in the layer
|
504
504
|
if isinstance(node.op, ControlFlowOp):
|
505
505
|
span = qubits
|
506
|
-
elif node.cargs or getattr(node
|
506
|
+
elif node.cargs or getattr(node, "condition", None):
|
507
507
|
span = qubits[min_index : len(qubits)]
|
508
508
|
else:
|
509
509
|
span = qubits[min_index : max_index + 1]
|
@@ -582,7 +582,7 @@ class _LayerSpooler(list):
|
|
582
582
|
curr_index = index
|
583
583
|
last_insertable_index = -1
|
584
584
|
index_stop = -1
|
585
|
-
if (condition := getattr(node
|
585
|
+
if (condition := getattr(node, "condition", None)) is not None:
|
586
586
|
index_stop = max(
|
587
587
|
(self.measure_map[bit] for bit in condition_resources(condition).clbits),
|
588
588
|
default=index_stop,
|
@@ -191,11 +191,12 @@ def circuit_drawer(
|
|
191
191
|
.. plot::
|
192
192
|
:include-source:
|
193
193
|
|
194
|
-
from qiskit import
|
194
|
+
from qiskit import QuantumCircuit
|
195
|
+
from qiskit.visualization import circuit_drawer
|
195
196
|
qc = QuantumCircuit(1, 1)
|
196
197
|
qc.h(0)
|
197
198
|
qc.measure(0, 0)
|
198
|
-
qc
|
199
|
+
circuit_drawer(qc, output="mpl", style={"backgroundcolor": "#EEEEEE"})
|
199
200
|
"""
|
200
201
|
image = None
|
201
202
|
expr_len = max(expr_len, 0)
|
@@ -135,7 +135,7 @@ class MatplotlibDrawer:
|
|
135
135
|
|
136
136
|
self._initial_state = initial_state
|
137
137
|
self._global_phase = self._circuit.global_phase
|
138
|
-
self._calibrations = self._circuit.
|
138
|
+
self._calibrations = self._circuit._calibrations_prop
|
139
139
|
self._expr_len = expr_len
|
140
140
|
self._cregbundle = cregbundle
|
141
141
|
|
@@ -81,7 +81,7 @@ def dag_drawer(dag, scale=0.7, filename=None, style="color"):
|
|
81
81
|
``rustworkx`` package to draw the DAG.
|
82
82
|
|
83
83
|
Args:
|
84
|
-
dag (DAGCircuit): The dag to draw.
|
84
|
+
dag (DAGCircuit or DAGDependency): The dag to draw.
|
85
85
|
scale (float): scaling factor
|
86
86
|
filename (str): file path to save image to (format inferred from name)
|
87
87
|
style (str): 'plain': B&W graph
|
@@ -58,23 +58,12 @@ def pass_manager_drawer(pass_manager, filename=None, style=None, raw=False):
|
|
58
58
|
Example:
|
59
59
|
.. code-block::
|
60
60
|
|
61
|
-
%matplotlib inline
|
62
61
|
from qiskit import QuantumCircuit
|
63
|
-
from qiskit.
|
64
|
-
from qiskit.transpiler import PassManager
|
62
|
+
from qiskit.transpiler import generate_preset_pass_manager
|
65
63
|
from qiskit.visualization import pass_manager_drawer
|
66
|
-
from qiskit.transpiler.passes import Unroller
|
67
64
|
|
68
|
-
|
69
|
-
|
70
|
-
circ.draw()
|
71
|
-
|
72
|
-
pass_ = Unroller(['u1', 'u2', 'u3', 'cx'])
|
73
|
-
pm = PassManager(pass_)
|
74
|
-
new_circ = pm.run(circ)
|
75
|
-
new_circ.draw(output='mpl')
|
76
|
-
|
77
|
-
pass_manager_drawer(pm, "passmanager.jpg")
|
65
|
+
pm = generate_preset_pass_manager(optimization_level=0)
|
66
|
+
pass_manager_drawer(pm)
|
78
67
|
"""
|
79
68
|
import pydot
|
80
69
|
|
@@ -28,9 +28,11 @@ from qiskit.visualization.exceptions import VisualizationError
|
|
28
28
|
from qiskit.visualization.pulse_v2 import core, device_info, stylesheet, types
|
29
29
|
from qiskit.exceptions import MissingOptionalLibraryError
|
30
30
|
from qiskit.utils import deprecate_arg
|
31
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
31
32
|
|
32
33
|
|
33
|
-
@
|
34
|
+
@deprecate_pulse_dependency(moving_to_dynamics=True)
|
35
|
+
@deprecate_arg("show_barrier", new_alias="plot_barrier", since="1.1.0", pending=True)
|
34
36
|
def draw(
|
35
37
|
program: Union[Waveform, SymbolicPulse, Schedule, ScheduleBlock],
|
36
38
|
style: Optional[Dict[str, Any]] = None,
|
@@ -58,6 +58,7 @@ from enum import Enum
|
|
58
58
|
import numpy as np
|
59
59
|
|
60
60
|
from qiskit import circuit
|
61
|
+
from qiskit.transpiler.target import Target
|
61
62
|
from qiskit.visualization.exceptions import VisualizationError
|
62
63
|
from qiskit.visualization.timeline import drawings, types
|
63
64
|
from qiskit.visualization.timeline.stylesheet import QiskitTimelineStyle
|
@@ -138,11 +139,13 @@ class DrawerCanvas:
|
|
138
139
|
self._collections[data.data_key] = data
|
139
140
|
|
140
141
|
# pylint: disable=cyclic-import
|
141
|
-
def load_program(self, program: circuit.QuantumCircuit):
|
142
|
+
def load_program(self, program: circuit.QuantumCircuit, target: Target | None = None):
|
142
143
|
"""Load quantum circuit and create drawing..
|
143
144
|
|
144
145
|
Args:
|
145
146
|
program: Scheduled circuit object to draw.
|
147
|
+
target: The target the circuit is scheduled for. This contains backend information
|
148
|
+
including the instruction durations used in scheduling.
|
146
149
|
|
147
150
|
Raises:
|
148
151
|
VisualizationError: When circuit is not scheduled.
|
@@ -180,10 +183,30 @@ class DrawerCanvas:
|
|
180
183
|
for bit_pos, bit in enumerate(bits):
|
181
184
|
if not isinstance(instruction.operation, not_gate_like):
|
182
185
|
# Generate draw object for gates
|
186
|
+
if target is not None:
|
187
|
+
duration = None
|
188
|
+
op_props = target.get(instruction.operation.name)
|
189
|
+
if op_props is not None:
|
190
|
+
inst_props = op_props.get(tuple(instruction.qubits))
|
191
|
+
if inst_props is not None:
|
192
|
+
duration = inst_props.getattr("duration")
|
193
|
+
|
194
|
+
if duration is None:
|
195
|
+
# Warn here because an incomplete target isn't obvious most of the time
|
196
|
+
warnings.warn(
|
197
|
+
"Target doesn't contain a duration for "
|
198
|
+
f"{instruction.operation.name} on {bit_pos}, this will error in "
|
199
|
+
"Qiskit 2.0.",
|
200
|
+
DeprecationWarning,
|
201
|
+
stacklevel=3,
|
202
|
+
)
|
203
|
+
duration = instruction.operation.duration
|
204
|
+
else:
|
205
|
+
duration = instruction.operation.duration
|
183
206
|
gate_source = types.ScheduledGate(
|
184
207
|
t0=t0,
|
185
208
|
operand=instruction.operation,
|
186
|
-
duration=
|
209
|
+
duration=duration,
|
187
210
|
bits=bits,
|
188
211
|
bit_position=bit_pos,
|
189
212
|
)
|
@@ -20,8 +20,10 @@ the configured canvas is passed to one of the plotter APIs to generate a visuali
|
|
20
20
|
"""
|
21
21
|
|
22
22
|
from typing import Optional, Dict, Any, List, Tuple
|
23
|
+
import warnings
|
23
24
|
|
24
25
|
from qiskit import circuit
|
26
|
+
from qiskit.transpiler.target import Target
|
25
27
|
from qiskit.exceptions import MissingOptionalLibraryError
|
26
28
|
from qiskit.visualization.exceptions import VisualizationError
|
27
29
|
from qiskit.visualization.timeline import types, core, stylesheet
|
@@ -43,6 +45,7 @@ def draw(
|
|
43
45
|
plotter: Optional[str] = types.Plotter.MPL.value,
|
44
46
|
axis: Optional[Any] = None,
|
45
47
|
filename: Optional[str] = None,
|
48
|
+
target: Optional[Target] = None,
|
46
49
|
*,
|
47
50
|
show_idle: Optional[bool] = None,
|
48
51
|
show_barriers: Optional[bool] = None,
|
@@ -81,6 +84,7 @@ def draw(
|
|
81
84
|
the plotters uses given `axis` instead of internally initializing a figure object.
|
82
85
|
This object format depends on the plotter. See plotters section for details.
|
83
86
|
filename: If provided the output image is dumped into a file under the filename.
|
87
|
+
target: The target for the backend the timeline is being generated for.
|
84
88
|
show_idle: DEPRECATED.
|
85
89
|
show_barriers: DEPRECATED.
|
86
90
|
|
@@ -361,6 +365,14 @@ def draw(
|
|
361
365
|
temp_style = stylesheet.QiskitTimelineStyle()
|
362
366
|
temp_style.update(style or stylesheet.IQXStandard())
|
363
367
|
|
368
|
+
if target is None:
|
369
|
+
warnings.warn(
|
370
|
+
"Target is not specified. In Qiskit 2.0.0 this will be required to get the duration of "
|
371
|
+
"instructions.",
|
372
|
+
PendingDeprecationWarning,
|
373
|
+
stacklevel=2,
|
374
|
+
)
|
375
|
+
|
364
376
|
# update control properties
|
365
377
|
if idle_wires is not None:
|
366
378
|
temp_style["formatter.control.show_idle"] = idle_wires
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: qiskit
|
3
|
-
Version: 1.3.
|
3
|
+
Version: 1.3.0rc2
|
4
4
|
Summary: An open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives.
|
5
5
|
Author-email: Qiskit Development Team <qiskit@us.ibm.com>
|
6
6
|
License: Apache 2.0
|
@@ -23,6 +23,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
23
23
|
Classifier: Programming Language :: Python :: 3.10
|
24
24
|
Classifier: Programming Language :: Python :: 3.11
|
25
25
|
Classifier: Programming Language :: Python :: 3.12
|
26
|
+
Classifier: Programming Language :: Python :: 3.13
|
26
27
|
Classifier: Topic :: Scientific/Engineering
|
27
28
|
Requires-Python: >=3.9
|
28
29
|
Description-Content-Type: text/markdown
|
@@ -35,13 +36,7 @@ Requires-Dist: dill>=0.3
|
|
35
36
|
Requires-Dist: python-dateutil>=2.8.0
|
36
37
|
Requires-Dist: stevedore>=3.0.0
|
37
38
|
Requires-Dist: typing-extensions
|
38
|
-
Requires-Dist: symengine
|
39
|
-
Provides-Extra: all
|
40
|
-
Requires-Dist: qiskit[crosstalk-pass,csp-layout-pass,qasm3-import,visualization]; extra == "all"
|
41
|
-
Provides-Extra: crosstalk-pass
|
42
|
-
Requires-Dist: z3-solver>=4.7; extra == "crosstalk-pass"
|
43
|
-
Provides-Extra: csp-layout-pass
|
44
|
-
Requires-Dist: python-constraint>=1.4; extra == "csp-layout-pass"
|
39
|
+
Requires-Dist: symengine<0.14,>=0.11
|
45
40
|
Provides-Extra: qasm3-import
|
46
41
|
Requires-Dist: qiskit-qasm3-import>=0.1.0; extra == "qasm3-import"
|
47
42
|
Provides-Extra: visualization
|
@@ -50,6 +45,12 @@ Requires-Dist: pydot; extra == "visualization"
|
|
50
45
|
Requires-Dist: Pillow>=4.2.1; extra == "visualization"
|
51
46
|
Requires-Dist: pylatexenc>=1.4; extra == "visualization"
|
52
47
|
Requires-Dist: seaborn>=0.9.0; extra == "visualization"
|
48
|
+
Provides-Extra: crosstalk-pass
|
49
|
+
Requires-Dist: z3-solver>=4.7; extra == "crosstalk-pass"
|
50
|
+
Provides-Extra: csp-layout-pass
|
51
|
+
Requires-Dist: python-constraint>=1.4; extra == "csp-layout-pass"
|
52
|
+
Provides-Extra: all
|
53
|
+
Requires-Dist: qiskit[crosstalk-pass,csp-layout-pass,qasm3-import,visualization]; extra == "all"
|
53
54
|
|
54
55
|
# Qiskit
|
55
56
|
|