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
@@ -0,0 +1,132 @@
|
|
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
|
+
"""A qubit state tracker for synthesizing operations with auxiliary qubits."""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
from collections.abc import Iterable
|
17
|
+
from dataclasses import dataclass
|
18
|
+
|
19
|
+
|
20
|
+
@dataclass
|
21
|
+
class QubitTracker:
|
22
|
+
"""Track qubits (by global index) and their state.
|
23
|
+
|
24
|
+
The states are distinguished into clean (meaning in state :math:`|0\rangle`) or dirty (an
|
25
|
+
unknown state).
|
26
|
+
"""
|
27
|
+
|
28
|
+
# This could in future be extended to track different state types, if necessary.
|
29
|
+
# However, using sets of integers here is much faster than e.g. storing a dictionary with
|
30
|
+
# {index: state} entries.
|
31
|
+
qubits: tuple[int]
|
32
|
+
clean: set[int]
|
33
|
+
dirty: set[int]
|
34
|
+
|
35
|
+
def num_clean(self, active_qubits: Iterable[int] | None = None):
|
36
|
+
"""Return the number of clean qubits, not considering the active qubits."""
|
37
|
+
# this could be cached if getting the set length becomes a performance bottleneck
|
38
|
+
return len(self.clean.difference(active_qubits or set()))
|
39
|
+
|
40
|
+
def num_dirty(self, active_qubits: Iterable[int] | None = None):
|
41
|
+
"""Return the number of dirty qubits, not considering the active qubits."""
|
42
|
+
return len(self.dirty.difference(active_qubits or set()))
|
43
|
+
|
44
|
+
def borrow(self, num_qubits: int, active_qubits: Iterable[int] | None = None) -> list[int]:
|
45
|
+
"""Get ``num_qubits`` qubits, excluding ``active_qubits``."""
|
46
|
+
active_qubits = set(active_qubits or [])
|
47
|
+
available_qubits = [qubit for qubit in self.qubits if qubit not in active_qubits]
|
48
|
+
|
49
|
+
if num_qubits > (available := len(available_qubits)):
|
50
|
+
raise RuntimeError(f"Cannot borrow {num_qubits} qubits, only {available} available.")
|
51
|
+
|
52
|
+
# for now, prioritize returning clean qubits
|
53
|
+
available_clean = [qubit for qubit in available_qubits if qubit in self.clean]
|
54
|
+
available_dirty = [qubit for qubit in available_qubits if qubit in self.dirty]
|
55
|
+
|
56
|
+
borrowed = available_clean[:num_qubits]
|
57
|
+
return borrowed + available_dirty[: (num_qubits - len(borrowed))]
|
58
|
+
|
59
|
+
def used(self, qubits: Iterable[int], check: bool = True) -> None:
|
60
|
+
"""Set the state of ``qubits`` to used (i.e. False)."""
|
61
|
+
qubits = set(qubits)
|
62
|
+
|
63
|
+
if check:
|
64
|
+
if len(untracked := qubits.difference(self.qubits)) > 0:
|
65
|
+
raise ValueError(f"Setting state of untracked qubits: {untracked}. Tracker: {self}")
|
66
|
+
|
67
|
+
self.clean -= qubits
|
68
|
+
self.dirty |= qubits
|
69
|
+
|
70
|
+
def reset(self, qubits: Iterable[int], check: bool = True) -> None:
|
71
|
+
"""Set the state of ``qubits`` to 0 (i.e. True)."""
|
72
|
+
qubits = set(qubits)
|
73
|
+
|
74
|
+
if check:
|
75
|
+
if len(untracked := qubits.difference(self.qubits)) > 0:
|
76
|
+
raise ValueError(f"Setting state of untracked qubits: {untracked}. Tracker: {self}")
|
77
|
+
|
78
|
+
self.clean |= qubits
|
79
|
+
self.dirty -= qubits
|
80
|
+
|
81
|
+
def drop(self, qubits: Iterable[int], check: bool = True) -> None:
|
82
|
+
"""Drop qubits from the tracker, meaning that they are no longer available."""
|
83
|
+
qubits = set(qubits)
|
84
|
+
|
85
|
+
if check:
|
86
|
+
if len(untracked := qubits.difference(self.qubits)) > 0:
|
87
|
+
raise ValueError(f"Dropping untracked qubits: {untracked}. Tracker: {self}")
|
88
|
+
|
89
|
+
self.qubits = tuple(qubit for qubit in self.qubits if qubit not in qubits)
|
90
|
+
self.clean -= qubits
|
91
|
+
self.dirty -= qubits
|
92
|
+
|
93
|
+
def copy(
|
94
|
+
self, qubit_map: dict[int, int] | None = None, drop: Iterable[int] | None = None
|
95
|
+
) -> "QubitTracker":
|
96
|
+
"""Copy self.
|
97
|
+
|
98
|
+
Args:
|
99
|
+
qubit_map: If provided, apply the mapping ``{old_qubit: new_qubit}`` to
|
100
|
+
the qubits in the tracker. Only those old qubits in the mapping will be
|
101
|
+
part of the new one.
|
102
|
+
drop: If provided, drop these qubits in the copied tracker. This argument is ignored
|
103
|
+
if ``qubit_map`` is given, since the qubits can then just be dropped in the map.
|
104
|
+
"""
|
105
|
+
if qubit_map is None and drop is not None:
|
106
|
+
remaining_qubits = [qubit for qubit in self.qubits if qubit not in drop]
|
107
|
+
qubit_map = dict(zip(remaining_qubits, remaining_qubits))
|
108
|
+
|
109
|
+
if qubit_map is None:
|
110
|
+
clean = self.clean.copy()
|
111
|
+
dirty = self.dirty.copy()
|
112
|
+
qubits = self.qubits # tuple is immutable, no need to copy
|
113
|
+
else:
|
114
|
+
clean, dirty = set(), set()
|
115
|
+
for old_index, new_index in qubit_map.items():
|
116
|
+
if old_index in self.clean:
|
117
|
+
clean.add(new_index)
|
118
|
+
elif old_index in self.dirty:
|
119
|
+
dirty.add(new_index)
|
120
|
+
else:
|
121
|
+
raise ValueError(f"Unknown old qubit index: {old_index}. Tracker: {self}")
|
122
|
+
|
123
|
+
qubits = tuple(qubit_map.values())
|
124
|
+
|
125
|
+
return QubitTracker(qubits, clean=clean, dirty=dirty)
|
126
|
+
|
127
|
+
def __str__(self) -> str:
|
128
|
+
return (
|
129
|
+
f"QubitTracker({len(self.qubits)}, clean: {self.num_clean()}, dirty: {self.num_dirty()})"
|
130
|
+
+ f"\n\tclean: {self.clean}"
|
131
|
+
+ f"\n\tdirty: {self.dirty}"
|
132
|
+
)
|
@@ -52,7 +52,7 @@ class SolovayKitaev(TransformationPass):
|
|
52
52
|
|
53
53
|
For example, the following circuit
|
54
54
|
|
55
|
-
..
|
55
|
+
.. parsed-literal::
|
56
56
|
|
57
57
|
┌─────────┐
|
58
58
|
q_0: ┤ RX(0.8) ├
|
@@ -60,7 +60,7 @@ class SolovayKitaev(TransformationPass):
|
|
60
60
|
|
61
61
|
can be decomposed into
|
62
62
|
|
63
|
-
..
|
63
|
+
.. parsed-literal::
|
64
64
|
|
65
65
|
global phase: 7π/8
|
66
66
|
┌───┐┌───┐┌───┐
|
@@ -95,7 +95,7 @@ class SolovayKitaev(TransformationPass):
|
|
95
95
|
|
96
96
|
print("Error:", np.linalg.norm(Operator(circuit).data - Operator(discretized).data))
|
97
97
|
|
98
|
-
..
|
98
|
+
.. parsed-literal::
|
99
99
|
|
100
100
|
Original circuit:
|
101
101
|
┌─────────┐
|
@@ -73,7 +73,6 @@ from qiskit.transpiler.passes.optimization.optimize_1q_decomposition import (
|
|
73
73
|
from qiskit.transpiler.passes.synthesis import plugin
|
74
74
|
from qiskit.transpiler.target import Target
|
75
75
|
|
76
|
-
from qiskit._accelerate.unitary_synthesis import run_default_main_loop
|
77
76
|
|
78
77
|
GATE_NAME_MAP = {
|
79
78
|
"cx": CXGate._standard_gate,
|
@@ -457,6 +456,37 @@ class UnitarySynthesis(TransformationPass):
|
|
457
456
|
default_kwargs = {}
|
458
457
|
method_list = [(plugin_method, plugin_kwargs), (default_method, default_kwargs)]
|
459
458
|
|
459
|
+
for method, kwargs in method_list:
|
460
|
+
if method.supports_basis_gates:
|
461
|
+
kwargs["basis_gates"] = self._basis_gates
|
462
|
+
if method.supports_natural_direction:
|
463
|
+
kwargs["natural_direction"] = self._natural_direction
|
464
|
+
if method.supports_pulse_optimize:
|
465
|
+
kwargs["pulse_optimize"] = self._pulse_optimize
|
466
|
+
if method.supports_gate_lengths:
|
467
|
+
_gate_lengths = _gate_lengths or _build_gate_lengths(
|
468
|
+
self._backend_props, self._target
|
469
|
+
)
|
470
|
+
kwargs["gate_lengths"] = _gate_lengths
|
471
|
+
if method.supports_gate_errors:
|
472
|
+
_gate_errors = _gate_errors or _build_gate_errors(self._backend_props, self._target)
|
473
|
+
kwargs["gate_errors"] = _gate_errors
|
474
|
+
if method.supports_gate_lengths_by_qubit:
|
475
|
+
_gate_lengths_by_qubit = _gate_lengths_by_qubit or _build_gate_lengths_by_qubit(
|
476
|
+
self._backend_props, self._target
|
477
|
+
)
|
478
|
+
kwargs["gate_lengths_by_qubit"] = _gate_lengths_by_qubit
|
479
|
+
if method.supports_gate_errors_by_qubit:
|
480
|
+
_gate_errors_by_qubit = _gate_errors_by_qubit or _build_gate_errors_by_qubit(
|
481
|
+
self._backend_props, self._target
|
482
|
+
)
|
483
|
+
kwargs["gate_errors_by_qubit"] = _gate_errors_by_qubit
|
484
|
+
supported_bases = method.supported_bases
|
485
|
+
if supported_bases is not None:
|
486
|
+
kwargs["matched_basis"] = _choose_bases(self._basis_gates, supported_bases)
|
487
|
+
if method.supports_target:
|
488
|
+
kwargs["target"] = self._target
|
489
|
+
|
460
490
|
# Handle approximation degree as a special case for backwards compatibility, it's
|
461
491
|
# not part of the plugin interface and only something needed for the default
|
462
492
|
# pass.
|
@@ -471,60 +501,9 @@ class UnitarySynthesis(TransformationPass):
|
|
471
501
|
if plugin_method.supports_coupling_map or default_method.supports_coupling_map
|
472
502
|
else {}
|
473
503
|
)
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
set(self._coupling_map.get_edges()) if self._coupling_map is not None else set()
|
478
|
-
)
|
479
|
-
|
480
|
-
out = run_default_main_loop(
|
481
|
-
dag,
|
482
|
-
list(qubit_indices.values()),
|
483
|
-
self._min_qubits,
|
484
|
-
self._target,
|
485
|
-
_coupling_edges,
|
486
|
-
self._approximation_degree,
|
487
|
-
self._natural_direction,
|
488
|
-
)
|
489
|
-
return out
|
490
|
-
else:
|
491
|
-
for method, kwargs in method_list:
|
492
|
-
if method.supports_basis_gates:
|
493
|
-
kwargs["basis_gates"] = self._basis_gates
|
494
|
-
if method.supports_natural_direction:
|
495
|
-
kwargs["natural_direction"] = self._natural_direction
|
496
|
-
if method.supports_pulse_optimize:
|
497
|
-
kwargs["pulse_optimize"] = self._pulse_optimize
|
498
|
-
if method.supports_gate_lengths:
|
499
|
-
_gate_lengths = _gate_lengths or _build_gate_lengths(
|
500
|
-
self._backend_props, self._target
|
501
|
-
)
|
502
|
-
kwargs["gate_lengths"] = _gate_lengths
|
503
|
-
if method.supports_gate_errors:
|
504
|
-
_gate_errors = _gate_errors or _build_gate_errors(
|
505
|
-
self._backend_props, self._target
|
506
|
-
)
|
507
|
-
kwargs["gate_errors"] = _gate_errors
|
508
|
-
if method.supports_gate_lengths_by_qubit:
|
509
|
-
_gate_lengths_by_qubit = _gate_lengths_by_qubit or _build_gate_lengths_by_qubit(
|
510
|
-
self._backend_props, self._target
|
511
|
-
)
|
512
|
-
kwargs["gate_lengths_by_qubit"] = _gate_lengths_by_qubit
|
513
|
-
if method.supports_gate_errors_by_qubit:
|
514
|
-
_gate_errors_by_qubit = _gate_errors_by_qubit or _build_gate_errors_by_qubit(
|
515
|
-
self._backend_props, self._target
|
516
|
-
)
|
517
|
-
kwargs["gate_errors_by_qubit"] = _gate_errors_by_qubit
|
518
|
-
supported_bases = method.supported_bases
|
519
|
-
if supported_bases is not None:
|
520
|
-
kwargs["matched_basis"] = _choose_bases(self._basis_gates, supported_bases)
|
521
|
-
if method.supports_target:
|
522
|
-
kwargs["target"] = self._target
|
523
|
-
|
524
|
-
out = self._run_main_loop(
|
525
|
-
dag, qubit_indices, plugin_method, plugin_kwargs, default_method, default_kwargs
|
526
|
-
)
|
527
|
-
return out
|
504
|
+
return self._run_main_loop(
|
505
|
+
dag, qubit_indices, plugin_method, plugin_kwargs, default_method, default_kwargs
|
506
|
+
)
|
528
507
|
|
529
508
|
def _run_main_loop(
|
530
509
|
self, dag, qubit_indices, plugin_method, plugin_kwargs, default_method, default_kwargs
|
@@ -13,8 +13,9 @@
|
|
13
13
|
|
14
14
|
"""Add a barrier before final measurements."""
|
15
15
|
|
16
|
-
from qiskit.
|
16
|
+
from qiskit.circuit.barrier import Barrier
|
17
17
|
from qiskit.transpiler.basepasses import TransformationPass
|
18
|
+
from qiskit.dagcircuit import DAGCircuit, DAGOpNode
|
18
19
|
from .merge_adjacent_barriers import MergeAdjacentBarriers
|
19
20
|
|
20
21
|
|
@@ -32,7 +33,60 @@ class BarrierBeforeFinalMeasurements(TransformationPass):
|
|
32
33
|
|
33
34
|
def run(self, dag):
|
34
35
|
"""Run the BarrierBeforeFinalMeasurements pass on `dag`."""
|
35
|
-
|
36
|
+
# Collect DAG nodes which are followed only by barriers or other measures.
|
37
|
+
final_op_types = ["measure", "barrier"]
|
38
|
+
final_ops = []
|
39
|
+
for candidate_node in dag.named_nodes(*final_op_types):
|
40
|
+
is_final_op = True
|
41
|
+
|
42
|
+
for _, child_successors in dag.bfs_successors(candidate_node):
|
43
|
+
|
44
|
+
if any(
|
45
|
+
isinstance(suc, DAGOpNode) and suc.name not in final_op_types
|
46
|
+
for suc in child_successors
|
47
|
+
):
|
48
|
+
is_final_op = False
|
49
|
+
break
|
50
|
+
|
51
|
+
if is_final_op:
|
52
|
+
final_ops.append(candidate_node)
|
53
|
+
|
54
|
+
if not final_ops:
|
55
|
+
return dag
|
56
|
+
|
57
|
+
# Create a layer with the barrier and add both bits and registers from the original dag.
|
58
|
+
barrier_layer = DAGCircuit()
|
59
|
+
barrier_layer.add_qubits(dag.qubits)
|
60
|
+
for qreg in dag.qregs.values():
|
61
|
+
barrier_layer.add_qreg(qreg)
|
62
|
+
barrier_layer.add_clbits(dag.clbits)
|
63
|
+
for creg in dag.cregs.values():
|
64
|
+
barrier_layer.add_creg(creg)
|
65
|
+
|
66
|
+
# Add a barrier across all qubits so swap mapper doesn't add a swap
|
67
|
+
# from an unmeasured qubit after a measure.
|
68
|
+
final_qubits = dag.qubits
|
69
|
+
|
70
|
+
barrier_layer.apply_operation_back(
|
71
|
+
Barrier(len(final_qubits), label=self.label), final_qubits, (), check=False
|
72
|
+
)
|
73
|
+
|
74
|
+
# Preserve order of final ops collected earlier from the original DAG.
|
75
|
+
ordered_final_nodes = [
|
76
|
+
node for node in dag.topological_op_nodes() if node in set(final_ops)
|
77
|
+
]
|
78
|
+
|
79
|
+
# Move final ops to the new layer and append the new layer to the DAG.
|
80
|
+
for final_node in ordered_final_nodes:
|
81
|
+
barrier_layer.apply_operation_back(
|
82
|
+
final_node.op, final_node.qargs, final_node.cargs, check=False
|
83
|
+
)
|
84
|
+
|
85
|
+
for final_op in final_ops:
|
86
|
+
dag.remove_op_node(final_op)
|
87
|
+
|
88
|
+
dag.compose(barrier_layer)
|
89
|
+
|
36
90
|
if self.label is None:
|
37
91
|
# Merge the new barrier into any other barriers
|
38
92
|
adjacent_pass = MergeAdjacentBarriers()
|
@@ -22,7 +22,6 @@ from qiskit.circuit import (
|
|
22
22
|
)
|
23
23
|
from qiskit.dagcircuit import DAGCircuit
|
24
24
|
from qiskit.transpiler.basepasses import TransformationPass
|
25
|
-
from qiskit.utils import deprecate_func
|
26
25
|
|
27
26
|
|
28
27
|
class ConvertConditionsToIfOps(TransformationPass):
|
@@ -32,10 +31,6 @@ class ConvertConditionsToIfOps(TransformationPass):
|
|
32
31
|
This is a simple pass aimed at easing the conversion from the old style of using
|
33
32
|
:meth:`.InstructionSet.c_if` into the new style of using more complex conditional logic."""
|
34
33
|
|
35
|
-
@deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0")
|
36
|
-
def __init__(self):
|
37
|
-
super().__init__()
|
38
|
-
|
39
34
|
def _run_inner(self, dag):
|
40
35
|
"""Run the pass on one :class:`.DAGCircuit`, mutating it. Returns ``True`` if the circuit
|
41
36
|
was modified and ``False`` if not."""
|