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/circuit/quantumcircuit.py
CHANGED
@@ -47,7 +47,6 @@ from qiskit.circuit.gate import Gate
|
|
47
47
|
from qiskit.circuit.parameter import Parameter
|
48
48
|
from qiskit.circuit.exceptions import CircuitError
|
49
49
|
from qiskit.utils import deprecate_func
|
50
|
-
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
51
50
|
from . import _classical_resource_map
|
52
51
|
from .controlflow import ControlFlowOp, _builder_utils
|
53
52
|
from .controlflow.builder import CircuitScopeInterface, ControlFlowBuilderBlock
|
@@ -71,7 +70,6 @@ from .quantumcircuitdata import QuantumCircuitData, CircuitInstruction
|
|
71
70
|
from .delay import Delay
|
72
71
|
from .store import Store
|
73
72
|
|
74
|
-
|
75
73
|
if typing.TYPE_CHECKING:
|
76
74
|
import qiskit # pylint: disable=cyclic-import
|
77
75
|
from qiskit.transpiler.layout import TranspileLayout # pylint: disable=cyclic-import
|
@@ -878,7 +876,7 @@ class QuantumCircuit:
|
|
878
876
|
|
879
877
|
qc.count_ops()
|
880
878
|
|
881
|
-
..
|
879
|
+
.. parsed-literal::
|
882
880
|
|
883
881
|
OrderedDict([('cx', 8), ('h', 5), ('x', 3), ('swap', 3)])
|
884
882
|
|
@@ -1147,41 +1145,21 @@ class QuantumCircuit:
|
|
1147
1145
|
for var, initial in declarations:
|
1148
1146
|
self.add_var(var, initial)
|
1149
1147
|
|
1150
|
-
self.
|
1151
|
-
|
1148
|
+
self.duration: int | float | None = None
|
1149
|
+
"""The total duration of the circuit, set by a scheduling transpiler pass. Its unit is
|
1150
|
+
specified by :attr:`unit`."""
|
1151
|
+
self.unit = "dt"
|
1152
|
+
"""The unit that :attr:`duration` is specified in."""
|
1152
1153
|
self.metadata = {} if metadata is None else metadata
|
1153
1154
|
"""Arbitrary user-defined metadata for the circuit.
|
1154
|
-
|
1155
|
+
|
1155
1156
|
Qiskit will not examine the content of this mapping, but it will pass it through the
|
1156
1157
|
transpiler and reattach it to the output, so you can track your own metadata."""
|
1157
1158
|
|
1158
|
-
@property
|
1159
|
-
@deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
|
1160
|
-
def duration(self):
|
1161
|
-
"""The total duration of the circuit, set by a scheduling transpiler pass. Its unit is
|
1162
|
-
specified by :attr:`unit`."""
|
1163
|
-
return self._duration
|
1164
|
-
|
1165
|
-
@duration.setter
|
1166
|
-
def duration(self, value: int | float | None):
|
1167
|
-
self._duration = value
|
1168
|
-
|
1169
|
-
@property
|
1170
|
-
@deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
|
1171
|
-
def unit(self):
|
1172
|
-
"""The unit that :attr:`duration` is specified in."""
|
1173
|
-
return self._unit
|
1174
|
-
|
1175
|
-
@unit.setter
|
1176
|
-
def unit(self, value):
|
1177
|
-
self._unit = value
|
1178
|
-
|
1179
1159
|
@classmethod
|
1180
|
-
def _from_circuit_data(
|
1181
|
-
cls, data: CircuitData, add_regs: bool = False, name: str | None = None
|
1182
|
-
) -> typing.Self:
|
1160
|
+
def _from_circuit_data(cls, data: CircuitData, add_regs: bool = False) -> typing.Self:
|
1183
1161
|
"""A private constructor from rust space circuit data."""
|
1184
|
-
out = QuantumCircuit(
|
1162
|
+
out = QuantumCircuit()
|
1185
1163
|
|
1186
1164
|
if data.num_qubits > 0:
|
1187
1165
|
if add_regs:
|
@@ -1343,17 +1321,15 @@ class QuantumCircuit:
|
|
1343
1321
|
return self._op_start_times
|
1344
1322
|
|
1345
1323
|
@property
|
1346
|
-
@deprecate_pulse_dependency(is_property=True)
|
1347
1324
|
def calibrations(self) -> dict:
|
1348
1325
|
"""Return calibration dictionary.
|
1349
1326
|
|
1350
1327
|
The custom pulse definition of a given gate is of the form
|
1351
1328
|
``{'gate_name': {(qubits, params): schedule}}``
|
1352
1329
|
"""
|
1353
|
-
return self.
|
1330
|
+
return dict(self._calibrations)
|
1354
1331
|
|
1355
1332
|
@calibrations.setter
|
1356
|
-
@deprecate_pulse_dependency(is_property=True)
|
1357
1333
|
def calibrations(self, calibrations: dict):
|
1358
1334
|
"""Set the circuit calibration data from a dictionary of calibration definition.
|
1359
1335
|
|
@@ -1361,37 +1337,18 @@ class QuantumCircuit:
|
|
1361
1337
|
calibrations (dict): A dictionary of input in the format
|
1362
1338
|
``{'gate_name': {(qubits, gate_params): schedule}}``
|
1363
1339
|
"""
|
1364
|
-
self._calibrations_prop = calibrations
|
1365
|
-
|
1366
|
-
@property
|
1367
|
-
def _calibrations_prop(self) -> dict:
|
1368
|
-
"""An alternative private path to the `calibrations` property for
|
1369
|
-
avoiding deprecation warnings."""
|
1370
|
-
return dict(self._calibrations)
|
1371
|
-
|
1372
|
-
@_calibrations_prop.setter
|
1373
|
-
def _calibrations_prop(self, calibrations: dict):
|
1374
|
-
"""An alternative private path to the `calibrations` property for
|
1375
|
-
avoiding deprecation warnings."""
|
1376
1340
|
self._calibrations = defaultdict(dict, calibrations)
|
1377
1341
|
|
1378
|
-
@deprecate_pulse_dependency
|
1379
1342
|
def has_calibration_for(self, instruction: CircuitInstruction | tuple):
|
1380
1343
|
"""Return True if the circuit has a calibration defined for the instruction context. In this
|
1381
1344
|
case, the operation does not need to be translated to the device basis.
|
1382
1345
|
"""
|
1383
|
-
|
1384
|
-
return self._has_calibration_for(instruction)
|
1385
|
-
|
1386
|
-
def _has_calibration_for(self, instruction: CircuitInstruction | tuple):
|
1387
|
-
"""An alternative private path to the `has_calibration_for` method for
|
1388
|
-
avoiding deprecation warnings."""
|
1389
1346
|
if isinstance(instruction, CircuitInstruction):
|
1390
1347
|
operation = instruction.operation
|
1391
1348
|
qubits = instruction.qubits
|
1392
1349
|
else:
|
1393
1350
|
operation, qubits, _ = instruction
|
1394
|
-
if not self.
|
1351
|
+
if not self.calibrations or operation.name not in self.calibrations:
|
1395
1352
|
return False
|
1396
1353
|
qubits = tuple(self.qubits.index(qubit) for qubit in qubits)
|
1397
1354
|
params = []
|
@@ -1401,7 +1358,7 @@ class QuantumCircuit:
|
|
1401
1358
|
else:
|
1402
1359
|
params.append(p)
|
1403
1360
|
params = tuple(params)
|
1404
|
-
return (qubits, params) in self.
|
1361
|
+
return (qubits, params) in self.calibrations[operation.name]
|
1405
1362
|
|
1406
1363
|
@property
|
1407
1364
|
def metadata(self) -> dict:
|
@@ -1537,7 +1494,7 @@ class QuantumCircuit:
|
|
1537
1494
|
|
1538
1495
|
input:
|
1539
1496
|
|
1540
|
-
..
|
1497
|
+
.. parsed-literal::
|
1541
1498
|
|
1542
1499
|
┌───┐
|
1543
1500
|
q_0: ┤ H ├─────■──────
|
@@ -1547,7 +1504,7 @@ class QuantumCircuit:
|
|
1547
1504
|
|
1548
1505
|
output:
|
1549
1506
|
|
1550
|
-
..
|
1507
|
+
.. parsed-literal::
|
1551
1508
|
|
1552
1509
|
┌───┐
|
1553
1510
|
q_0: ─────■──────┤ H ├
|
@@ -1581,7 +1538,7 @@ class QuantumCircuit:
|
|
1581
1538
|
|
1582
1539
|
input:
|
1583
1540
|
|
1584
|
-
..
|
1541
|
+
.. parsed-literal::
|
1585
1542
|
|
1586
1543
|
┌───┐
|
1587
1544
|
a_0: ┤ H ├──■─────────────────
|
@@ -1597,7 +1554,7 @@ class QuantumCircuit:
|
|
1597
1554
|
|
1598
1555
|
output:
|
1599
1556
|
|
1600
|
-
..
|
1557
|
+
.. parsed-literal::
|
1601
1558
|
|
1602
1559
|
┌───┐
|
1603
1560
|
b_0: ────────────────────┤ X ├
|
@@ -1651,7 +1608,7 @@ class QuantumCircuit:
|
|
1651
1608
|
|
1652
1609
|
input:
|
1653
1610
|
|
1654
|
-
..
|
1611
|
+
.. parsed-literal::
|
1655
1612
|
|
1656
1613
|
┌───┐
|
1657
1614
|
q_0: ┤ H ├─────■──────
|
@@ -1661,7 +1618,7 @@ class QuantumCircuit:
|
|
1661
1618
|
|
1662
1619
|
output:
|
1663
1620
|
|
1664
|
-
..
|
1621
|
+
.. parsed-literal::
|
1665
1622
|
|
1666
1623
|
┌───┐
|
1667
1624
|
q_0: ──────■──────┤ H ├
|
@@ -1903,7 +1860,7 @@ class QuantumCircuit:
|
|
1903
1860
|
|
1904
1861
|
>>> lhs.compose(rhs, qubits=[3, 2], inplace=True)
|
1905
1862
|
|
1906
|
-
..
|
1863
|
+
.. parsed-literal::
|
1907
1864
|
|
1908
1865
|
┌───┐ ┌─────┐ ┌───┐
|
1909
1866
|
lqr_1_0: ───┤ H ├─── rqr_0: ──■──┤ Tdg ├ lqr_1_0: ───┤ H ├───────────────
|
@@ -2042,7 +1999,7 @@ class QuantumCircuit:
|
|
2042
1999
|
)
|
2043
2000
|
edge_map.update(zip(other.clbits, dest._cbit_argument_conversion(clbits)))
|
2044
2001
|
|
2045
|
-
for gate, cals in other.
|
2002
|
+
for gate, cals in other.calibrations.items():
|
2046
2003
|
dest._calibrations[gate].update(cals)
|
2047
2004
|
|
2048
2005
|
dest.duration = None
|
@@ -2104,14 +2061,14 @@ class QuantumCircuit:
|
|
2104
2061
|
is_control_flow = isinstance(n_op, ControlFlowOp)
|
2105
2062
|
if (
|
2106
2063
|
not is_control_flow
|
2107
|
-
and (condition := getattr(n_op, "
|
2064
|
+
and (condition := getattr(n_op, "condition", None)) is not None
|
2108
2065
|
):
|
2109
2066
|
n_op = n_op.copy() if n_op is op and copy else n_op
|
2110
2067
|
n_op.condition = variable_mapper.map_condition(condition)
|
2111
2068
|
elif is_control_flow:
|
2112
2069
|
n_op = n_op.replace_blocks(recurse_block(block) for block in n_op.blocks)
|
2113
2070
|
if isinstance(n_op, (IfElseOp, WhileLoopOp)):
|
2114
|
-
n_op.condition = variable_mapper.map_condition(n_op.
|
2071
|
+
n_op.condition = variable_mapper.map_condition(n_op.condition)
|
2115
2072
|
elif isinstance(n_op, SwitchCaseOp):
|
2116
2073
|
n_op.target = variable_mapper.map_target(n_op.target)
|
2117
2074
|
elif isinstance(n_op, Store):
|
@@ -2151,10 +2108,10 @@ class QuantumCircuit:
|
|
2151
2108
|
|
2152
2109
|
Remember that in the little-endian convention the leftmost operation will be at the bottom
|
2153
2110
|
of the circuit. See also
|
2154
|
-
`the docs <https://docs.quantum.ibm.com/
|
2111
|
+
`the docs <https://docs.quantum.ibm.com/build/circuit-construction>`__
|
2155
2112
|
for more information.
|
2156
2113
|
|
2157
|
-
..
|
2114
|
+
.. parsed-literal::
|
2158
2115
|
|
2159
2116
|
┌────────┐ ┌─────┐ ┌─────┐
|
2160
2117
|
q_0: ┤ bottom ├ ⊗ q_0: ┤ top ├ = q_0: ─┤ top ├──
|
@@ -2735,10 +2692,7 @@ class QuantumCircuit:
|
|
2735
2692
|
"""
|
2736
2693
|
if isinstance(name_or_param, str):
|
2737
2694
|
return self.get_parameter(name_or_param, None) is not None
|
2738
|
-
return (
|
2739
|
-
isinstance(name_or_param, Parameter)
|
2740
|
-
and self.get_parameter(name_or_param.name, None) == name_or_param
|
2741
|
-
)
|
2695
|
+
return self.get_parameter(name_or_param.name) == name_or_param
|
2742
2696
|
|
2743
2697
|
@typing.overload
|
2744
2698
|
def get_var(self, name: str, default: T) -> Union[expr.Var, T]: ...
|
@@ -3257,33 +3211,40 @@ class QuantumCircuit:
|
|
3257
3211
|
|
3258
3212
|
def decompose(
|
3259
3213
|
self,
|
3260
|
-
gates_to_decompose:
|
3261
|
-
str | Type[Instruction] | Sequence[str | Type[Instruction]] | None
|
3262
|
-
) = None,
|
3214
|
+
gates_to_decompose: Type[Gate] | Sequence[Type[Gate]] | Sequence[str] | str | None = None,
|
3263
3215
|
reps: int = 1,
|
3264
|
-
) ->
|
3265
|
-
"""Call a decomposition pass on this circuit,
|
3216
|
+
) -> "QuantumCircuit":
|
3217
|
+
"""Call a decomposition pass on this circuit,
|
3218
|
+
to decompose one level (shallow decompose).
|
3266
3219
|
|
3267
3220
|
Args:
|
3268
|
-
gates_to_decompose
|
3269
|
-
|
3270
|
-
|
3271
|
-
|
3272
|
-
the circuit.
|
3273
|
-
reps: Optional number of times the circuit should be decomposed.
|
3221
|
+
gates_to_decompose (type or str or list(type, str)): Optional subset of gates
|
3222
|
+
to decompose. Can be a gate type, such as ``HGate``, or a gate name, such
|
3223
|
+
as 'h', or a gate label, such as 'My H Gate', or a list of any combination
|
3224
|
+
of these. If a gate name is entered, it will decompose all gates with that
|
3225
|
+
name, whether the gates have labels or not. Defaults to all gates in circuit.
|
3226
|
+
reps (int): Optional number of times the circuit should be decomposed.
|
3274
3227
|
For instance, ``reps=2`` equals calling ``circuit.decompose().decompose()``.
|
3228
|
+
can decompose specific gates specific time
|
3275
3229
|
|
3276
3230
|
Returns:
|
3277
3231
|
QuantumCircuit: a circuit one level decomposed
|
3278
3232
|
"""
|
3279
3233
|
# pylint: disable=cyclic-import
|
3280
3234
|
from qiskit.transpiler.passes.basis.decompose import Decompose
|
3235
|
+
from qiskit.transpiler.passes.synthesis import HighLevelSynthesis
|
3281
3236
|
from qiskit.converters.circuit_to_dag import circuit_to_dag
|
3282
3237
|
from qiskit.converters.dag_to_circuit import dag_to_circuit
|
3283
3238
|
|
3284
3239
|
dag = circuit_to_dag(self, copy_operations=True)
|
3285
3240
|
|
3286
|
-
|
3241
|
+
if gates_to_decompose is None:
|
3242
|
+
# We should not rewrite the circuit using HLS when we have gates_to_decompose,
|
3243
|
+
# or else HLS will rewrite all objects with available plugins (e.g., Cliffords,
|
3244
|
+
# PermutationGates, and now also MCXGates)
|
3245
|
+
dag = HighLevelSynthesis().run(dag)
|
3246
|
+
|
3247
|
+
pass_ = Decompose(gates_to_decompose)
|
3287
3248
|
for _ in range(reps):
|
3288
3249
|
dag = pass_.run(dag)
|
3289
3250
|
|
@@ -3525,7 +3486,7 @@ class QuantumCircuit:
|
|
3525
3486
|
|
3526
3487
|
for instruction in self._data:
|
3527
3488
|
objects = set(itertools.chain(instruction.qubits, instruction.clbits))
|
3528
|
-
if (condition := getattr(instruction.operation, "
|
3489
|
+
if (condition := getattr(instruction.operation, "condition", None)) is not None:
|
3529
3490
|
objects.update(_builder_utils.condition_resources(condition).clbits)
|
3530
3491
|
if isinstance(condition, expr.Expr):
|
3531
3492
|
update_from_expr(objects, condition)
|
@@ -3628,7 +3589,7 @@ class QuantumCircuit:
|
|
3628
3589
|
else:
|
3629
3590
|
args = instruction.qubits + instruction.clbits
|
3630
3591
|
num_qargs = len(args) + (
|
3631
|
-
1 if getattr(instruction.operation, "
|
3592
|
+
1 if getattr(instruction.operation, "condition", None) else 0
|
3632
3593
|
)
|
3633
3594
|
|
3634
3595
|
if num_qargs >= 2 and not getattr(instruction.operation, "_directive", False):
|
@@ -3754,13 +3715,39 @@ class QuantumCircuit:
|
|
3754
3715
|
f"invalid name for a circuit: '{name}'. The name must be a string or 'None'."
|
3755
3716
|
)
|
3756
3717
|
cpy = _copy.copy(self)
|
3757
|
-
|
3758
|
-
|
3718
|
+
# copy registers correctly, in copy.copy they are only copied via reference
|
3719
|
+
cpy.qregs = self.qregs.copy()
|
3720
|
+
cpy.cregs = self.cregs.copy()
|
3721
|
+
cpy._builder_api = _OuterCircuitScopeInterface(cpy)
|
3722
|
+
cpy._ancillas = self._ancillas.copy()
|
3723
|
+
cpy._qubit_indices = self._qubit_indices.copy()
|
3724
|
+
cpy._clbit_indices = self._clbit_indices.copy()
|
3725
|
+
|
3726
|
+
if vars_mode == "alike":
|
3727
|
+
# Note that this causes the local variables to be uninitialised, because the stores are
|
3728
|
+
# not copied. This can leave the circuit in a potentially dangerous state for users if
|
3729
|
+
# they don't re-add initializer stores.
|
3730
|
+
cpy._vars_local = self._vars_local.copy()
|
3731
|
+
cpy._vars_input = self._vars_input.copy()
|
3732
|
+
cpy._vars_capture = self._vars_capture.copy()
|
3733
|
+
elif vars_mode == "captures":
|
3734
|
+
cpy._vars_local = {}
|
3735
|
+
cpy._vars_input = {}
|
3736
|
+
cpy._vars_capture = {var.name: var for var in self.iter_vars()}
|
3737
|
+
elif vars_mode == "drop":
|
3738
|
+
cpy._vars_local = {}
|
3739
|
+
cpy._vars_input = {}
|
3740
|
+
cpy._vars_capture = {}
|
3741
|
+
else: # pragma: no cover
|
3742
|
+
raise ValueError(f"unknown vars_mode: '{vars_mode}'")
|
3759
3743
|
|
3760
3744
|
cpy._data = CircuitData(
|
3761
3745
|
self._data.qubits, self._data.clbits, global_phase=self._data.global_phase
|
3762
3746
|
)
|
3763
3747
|
|
3748
|
+
cpy._calibrations = _copy.deepcopy(self._calibrations)
|
3749
|
+
cpy._metadata = _copy.deepcopy(self._metadata)
|
3750
|
+
|
3764
3751
|
if name:
|
3765
3752
|
cpy.name = name
|
3766
3753
|
return cpy
|
@@ -3876,7 +3863,7 @@ class QuantumCircuit:
|
|
3876
3863
|
circuit.draw()
|
3877
3864
|
|
3878
3865
|
|
3879
|
-
..
|
3866
|
+
.. parsed-literal::
|
3880
3867
|
|
3881
3868
|
┌───┐┌─┐
|
3882
3869
|
q: ┤ H ├┤M├
|
@@ -4350,57 +4337,30 @@ class QuantumCircuit:
|
|
4350
4337
|
|
4351
4338
|
if isinstance(parameters, collections.abc.Mapping):
|
4352
4339
|
raw_mapping = parameters if flat_input else self._unroll_param_dict(parameters)
|
4353
|
-
|
4354
|
-
|
4355
|
-
parameter for parameter in raw_mapping if not self.has_parameter(parameter)
|
4356
|
-
]
|
4357
|
-
):
|
4340
|
+
our_parameters = self._data.unsorted_parameters()
|
4341
|
+
if strict and (extras := raw_mapping.keys() - our_parameters):
|
4358
4342
|
raise CircuitError(
|
4359
4343
|
f"Cannot bind parameters ({', '.join(str(x) for x in extras)}) not present in"
|
4360
4344
|
" the circuit."
|
4361
4345
|
)
|
4362
|
-
|
4363
|
-
|
4364
|
-
return raw_mapping
|
4365
|
-
|
4366
|
-
target._data.assign_parameters_mapping(raw_mapping)
|
4346
|
+
parameter_binds = _ParameterBindsDict(raw_mapping, our_parameters)
|
4347
|
+
target._data.assign_parameters_mapping(parameter_binds)
|
4367
4348
|
else:
|
4368
|
-
|
4369
|
-
# what the parameters were before anything is assigned, because we assign parameters in
|
4370
|
-
# the calibrations (which aren't tracked in the internal parameter table) after, which
|
4371
|
-
# would change what we create. We don't make the full Python-space mapping object of
|
4372
|
-
# parameters to values eagerly because 99.9% of the time we don't need it, and it's
|
4373
|
-
# relatively expensive to do for large numbers of parameters.
|
4374
|
-
initial_parameters = target._data.parameters
|
4375
|
-
|
4376
|
-
def create_mapping_view():
|
4377
|
-
return dict(zip(initial_parameters, parameters))
|
4378
|
-
|
4349
|
+
parameter_binds = _ParameterBindsSequence(target._data.parameters, parameters)
|
4379
4350
|
target._data.assign_parameters_iterable(parameters)
|
4380
4351
|
|
4381
4352
|
# Finally, assign the parameters inside any of the calibrations. We don't track these in
|
4382
|
-
# the `ParameterTable`, so we manually reconstruct things.
|
4383
|
-
# `{parameter: bound_value}` the first time we encounter a binding (we have to scan for
|
4384
|
-
# this, because calibrations don't use a parameter-table lookup), rather than always paying
|
4385
|
-
# the cost - most circuits don't have parametric calibrations, and it's expensive.
|
4386
|
-
mapping_view = None
|
4387
|
-
|
4353
|
+
# the `ParameterTable`, so we manually reconstruct things.
|
4388
4354
|
def map_calibration(qubits, parameters, schedule):
|
4389
|
-
# All calls to this function should share the same `{Parameter: bound_value}` mapping,
|
4390
|
-
# which we only want to lazily construct a single time.
|
4391
|
-
nonlocal mapping_view
|
4392
|
-
if mapping_view is None:
|
4393
|
-
mapping_view = create_mapping_view()
|
4394
|
-
|
4395
4355
|
modified = False
|
4396
4356
|
new_parameters = list(parameters)
|
4397
4357
|
for i, parameter in enumerate(new_parameters):
|
4398
4358
|
if not isinstance(parameter, ParameterExpression):
|
4399
4359
|
continue
|
4400
|
-
if not (contained := parameter.parameters &
|
4360
|
+
if not (contained := parameter.parameters & parameter_binds.mapping.keys()):
|
4401
4361
|
continue
|
4402
4362
|
for to_bind in contained:
|
4403
|
-
parameter = parameter.assign(to_bind,
|
4363
|
+
parameter = parameter.assign(to_bind, parameter_binds.mapping[to_bind])
|
4404
4364
|
if not parameter.parameters:
|
4405
4365
|
parameter = parameter.numeric()
|
4406
4366
|
if isinstance(parameter, complex):
|
@@ -4408,7 +4368,7 @@ class QuantumCircuit:
|
|
4408
4368
|
new_parameters[i] = parameter
|
4409
4369
|
modified = True
|
4410
4370
|
if modified:
|
4411
|
-
schedule.assign_parameters(
|
4371
|
+
schedule.assign_parameters(parameter_binds.mapping)
|
4412
4372
|
return (qubits, tuple(new_parameters)), schedule
|
4413
4373
|
|
4414
4374
|
target._calibrations = defaultdict(
|
@@ -5731,7 +5691,7 @@ class QuantumCircuit:
|
|
5731
5691
|
|
5732
5692
|
output:
|
5733
5693
|
|
5734
|
-
..
|
5694
|
+
.. parsed-literal::
|
5735
5695
|
|
5736
5696
|
┌─────────────────────────────────────┐
|
5737
5697
|
q_0: ┤ State Preparation(0.70711,-0.70711) ├
|
@@ -5754,7 +5714,7 @@ class QuantumCircuit:
|
|
5754
5714
|
|
5755
5715
|
output:
|
5756
5716
|
|
5757
|
-
..
|
5717
|
+
.. parsed-literal::
|
5758
5718
|
|
5759
5719
|
┌─────────────────────────┐
|
5760
5720
|
q_0: ┤0 ├
|
@@ -5775,7 +5735,7 @@ class QuantumCircuit:
|
|
5775
5735
|
|
5776
5736
|
output:
|
5777
5737
|
|
5778
|
-
..
|
5738
|
+
.. parsed-literal::
|
5779
5739
|
|
5780
5740
|
┌───────────────────────────────────────────┐
|
5781
5741
|
q_0: ┤0 ├
|
@@ -5846,7 +5806,7 @@ class QuantumCircuit:
|
|
5846
5806
|
|
5847
5807
|
output:
|
5848
5808
|
|
5849
|
-
..
|
5809
|
+
.. parsed-literal::
|
5850
5810
|
|
5851
5811
|
┌──────────────────────────────┐
|
5852
5812
|
q_0: ┤ Initialize(0.70711,-0.70711) ├
|
@@ -5869,7 +5829,7 @@ class QuantumCircuit:
|
|
5869
5829
|
|
5870
5830
|
output:
|
5871
5831
|
|
5872
|
-
..
|
5832
|
+
.. parsed-literal::
|
5873
5833
|
|
5874
5834
|
┌──────────────────┐
|
5875
5835
|
q_0: ┤0 ├
|
@@ -5890,7 +5850,7 @@ class QuantumCircuit:
|
|
5890
5850
|
|
5891
5851
|
output:
|
5892
5852
|
|
5893
|
-
..
|
5853
|
+
.. parsed-literal::
|
5894
5854
|
|
5895
5855
|
┌────────────────────────────────────┐
|
5896
5856
|
q_0: ┤0 ├
|
@@ -6506,7 +6466,6 @@ class QuantumCircuit:
|
|
6506
6466
|
ContinueLoopOp(self.num_qubits, self.num_clbits), self.qubits, self.clbits, copy=False
|
6507
6467
|
)
|
6508
6468
|
|
6509
|
-
@deprecate_pulse_dependency
|
6510
6469
|
def add_calibration(
|
6511
6470
|
self,
|
6512
6471
|
gate: Union[Gate, str],
|
@@ -6732,6 +6691,42 @@ def _validate_expr(circuit_scope: CircuitScopeInterface, node: expr.Expr) -> exp
|
|
6732
6691
|
return node
|
6733
6692
|
|
6734
6693
|
|
6694
|
+
class _ParameterBindsDict:
|
6695
|
+
__slots__ = ("mapping", "allowed_keys")
|
6696
|
+
|
6697
|
+
def __init__(self, mapping, allowed_keys):
|
6698
|
+
self.mapping = mapping
|
6699
|
+
self.allowed_keys = allowed_keys
|
6700
|
+
|
6701
|
+
def items(self):
|
6702
|
+
"""Iterator through all the keys in the mapping that we care about. Wrapping the main
|
6703
|
+
mapping allows us to avoid reconstructing a new 'dict', but just use the given 'mapping'
|
6704
|
+
without any copy / reconstruction."""
|
6705
|
+
for parameter, value in self.mapping.items():
|
6706
|
+
if parameter in self.allowed_keys:
|
6707
|
+
yield parameter, value
|
6708
|
+
|
6709
|
+
|
6710
|
+
class _ParameterBindsSequence:
|
6711
|
+
__slots__ = ("parameters", "values", "mapping_cache")
|
6712
|
+
|
6713
|
+
def __init__(self, parameters, values):
|
6714
|
+
self.parameters = parameters
|
6715
|
+
self.values = values
|
6716
|
+
self.mapping_cache = None
|
6717
|
+
|
6718
|
+
def items(self):
|
6719
|
+
"""Iterator through all the keys in the mapping that we care about."""
|
6720
|
+
return zip(self.parameters, self.values)
|
6721
|
+
|
6722
|
+
@property
|
6723
|
+
def mapping(self):
|
6724
|
+
"""Cached version of a mapping. This is only generated on demand."""
|
6725
|
+
if self.mapping_cache is None:
|
6726
|
+
self.mapping_cache = dict(zip(self.parameters, self.values))
|
6727
|
+
return self.mapping_cache
|
6728
|
+
|
6729
|
+
|
6735
6730
|
def _bit_argument_conversion(specifier, bit_sequence, bit_set, type_) -> list[Bit]:
|
6736
6731
|
"""Get the list of bits referred to by the specifier ``specifier``.
|
6737
6732
|
|
@@ -6796,34 +6791,3 @@ def _bit_argument_conversion_scalar(specifier, bit_sequence, bit_set, type_):
|
|
6796
6791
|
else f"Invalid bit index: '{specifier}' of type '{type(specifier)}'"
|
6797
6792
|
)
|
6798
6793
|
raise CircuitError(message)
|
6799
|
-
|
6800
|
-
|
6801
|
-
def _copy_metadata(original, cpy, vars_mode):
|
6802
|
-
# copy registers correctly, in copy.copy they are only copied via reference
|
6803
|
-
cpy.qregs = original.qregs.copy()
|
6804
|
-
cpy.cregs = original.cregs.copy()
|
6805
|
-
cpy._builder_api = _OuterCircuitScopeInterface(cpy)
|
6806
|
-
cpy._ancillas = original._ancillas.copy()
|
6807
|
-
cpy._qubit_indices = original._qubit_indices.copy()
|
6808
|
-
cpy._clbit_indices = original._clbit_indices.copy()
|
6809
|
-
|
6810
|
-
if vars_mode == "alike":
|
6811
|
-
# Note that this causes the local variables to be uninitialised, because the stores are
|
6812
|
-
# not copied. This can leave the circuit in a potentially dangerous state for users if
|
6813
|
-
# they don't re-add initializer stores.
|
6814
|
-
cpy._vars_local = original._vars_local.copy()
|
6815
|
-
cpy._vars_input = original._vars_input.copy()
|
6816
|
-
cpy._vars_capture = original._vars_capture.copy()
|
6817
|
-
elif vars_mode == "captures":
|
6818
|
-
cpy._vars_local = {}
|
6819
|
-
cpy._vars_input = {}
|
6820
|
-
cpy._vars_capture = {var.name: var for var in original.iter_vars()}
|
6821
|
-
elif vars_mode == "drop":
|
6822
|
-
cpy._vars_local = {}
|
6823
|
-
cpy._vars_input = {}
|
6824
|
-
cpy._vars_capture = {}
|
6825
|
-
else: # pragma: no cover
|
6826
|
-
raise ValueError(f"unknown vars_mode: '{vars_mode}'")
|
6827
|
-
|
6828
|
-
cpy._calibrations = _copy.deepcopy(original._calibrations)
|
6829
|
-
cpy._metadata = _copy.deepcopy(original._metadata)
|
qiskit/circuit/singleton.py
CHANGED
@@ -251,7 +251,6 @@ from __future__ import annotations
|
|
251
251
|
|
252
252
|
import functools
|
253
253
|
|
254
|
-
from qiskit.utils import deprecate_func
|
255
254
|
from .instruction import Instruction
|
256
255
|
from .gate import Gate
|
257
256
|
from .controlledgate import ControlledGate, _ctrl_state_to_int
|
@@ -490,7 +489,6 @@ class _SingletonInstructionOverrides(Instruction):
|
|
490
489
|
instruction._params = _frozenlist(instruction._params)
|
491
490
|
return instruction
|
492
491
|
|
493
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
|
494
492
|
def c_if(self, classical, val):
|
495
493
|
return self.to_mutable().c_if(classical, val)
|
496
494
|
|
qiskit/circuit/store.py
CHANGED
@@ -16,7 +16,6 @@ from __future__ import annotations
|
|
16
16
|
|
17
17
|
import typing
|
18
18
|
|
19
|
-
from qiskit.utils import deprecate_func
|
20
19
|
from .exceptions import CircuitError
|
21
20
|
from .classical import expr, types
|
22
21
|
from .instruction import Instruction
|
@@ -89,7 +88,6 @@ class Store(Instruction):
|
|
89
88
|
"""Get the r-value :class:`~.expr.Expr` node that is being written into the l-value."""
|
90
89
|
return self.params[1]
|
91
90
|
|
92
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
|
93
91
|
def c_if(self, classical, val):
|
94
92
|
""":meta hidden:"""
|
95
93
|
raise NotImplementedError(
|
qiskit/compiler/assembler.py
CHANGED
@@ -189,16 +189,6 @@ def assemble(
|
|
189
189
|
)
|
190
190
|
|
191
191
|
|
192
|
-
# Note for future: this method is used in `BasicSimulator` and may need to be kept past the
|
193
|
-
# `assemble` removal deadline (2.0). If it is kept (potentially in a different location),
|
194
|
-
# we will need an alternative for the backend.configuration() access that currently takes
|
195
|
-
# place in L566 (`parse_circuit_args`) and L351 (`parse_common_args`)
|
196
|
-
# because backend.configuration() is also set for removal in 2.0.
|
197
|
-
# The ultimate goal will be to move away from relying on any kind of `assemble` implementation
|
198
|
-
# because of how tightly coupled it is to these legacy data structures. But as a transition step,
|
199
|
-
# given that we would only have to support the subcase of `BasicSimulator`, we could probably just
|
200
|
-
# inline the relevant config values that are already hardcoded in the basic simulator configuration
|
201
|
-
# generator.
|
202
192
|
def _assemble(
|
203
193
|
experiments: Union[
|
204
194
|
QuantumCircuit,
|
@@ -239,7 +229,7 @@ def _assemble(
|
|
239
229
|
experiments = experiments if isinstance(experiments, list) else [experiments]
|
240
230
|
pulse_qobj = any(isinstance(exp, (ScheduleBlock, Schedule, Instruction)) for exp in experiments)
|
241
231
|
with warnings.catch_warnings():
|
242
|
-
# The Qobj
|
232
|
+
# The Qobj is deprecated
|
243
233
|
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
244
234
|
qobj_id, qobj_header, run_config_common_dict = _parse_common_args(
|
245
235
|
backend,
|
@@ -564,12 +554,9 @@ def _parse_circuit_args(
|
|
564
554
|
run_config_dict = {"parameter_binds": parameter_binds, **run_config}
|
565
555
|
if parametric_pulses is None:
|
566
556
|
if backend:
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
run_config_dict["parametric_pulses"] = getattr(
|
571
|
-
backend.configuration(), "parametric_pulses", []
|
572
|
-
)
|
557
|
+
run_config_dict["parametric_pulses"] = getattr(
|
558
|
+
backend.configuration(), "parametric_pulses", []
|
559
|
+
)
|
573
560
|
else:
|
574
561
|
run_config_dict["parametric_pulses"] = []
|
575
562
|
else:
|
qiskit/compiler/scheduler.py
CHANGED
@@ -26,7 +26,6 @@ from qiskit.providers.backend import Backend
|
|
26
26
|
from qiskit.scheduler.config import ScheduleConfig
|
27
27
|
from qiskit.scheduler.schedule_circuit import schedule_circuit
|
28
28
|
from qiskit.utils.parallel import parallel_map
|
29
|
-
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
30
29
|
|
31
30
|
logger = logging.getLogger(__name__)
|
32
31
|
|
@@ -36,7 +35,6 @@ def _log_schedule_time(start_time, end_time):
|
|
36
35
|
logger.info(log_msg)
|
37
36
|
|
38
37
|
|
39
|
-
@deprecate_pulse_dependency(moving_to_dynamics=True)
|
40
38
|
def schedule(
|
41
39
|
circuits: Union[QuantumCircuit, List[QuantumCircuit]],
|
42
40
|
backend: Optional[Backend] = None,
|