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
@@ -14,6 +14,9 @@ ParameterExpression Class to enable creating simple expressions of Parameters.
|
|
14
14
|
"""
|
15
15
|
|
16
16
|
from __future__ import annotations
|
17
|
+
|
18
|
+
from dataclasses import dataclass
|
19
|
+
from enum import IntEnum
|
17
20
|
from typing import Callable, Union
|
18
21
|
|
19
22
|
import numbers
|
@@ -30,12 +33,86 @@ from qiskit.circuit.exceptions import CircuitError
|
|
30
33
|
ParameterValueType = Union["ParameterExpression", float]
|
31
34
|
|
32
35
|
|
36
|
+
class _OPCode(IntEnum):
|
37
|
+
ADD = 0
|
38
|
+
SUB = 1
|
39
|
+
MUL = 2
|
40
|
+
DIV = 3
|
41
|
+
POW = 4
|
42
|
+
SIN = 5
|
43
|
+
COS = 6
|
44
|
+
TAN = 7
|
45
|
+
ASIN = 8
|
46
|
+
ACOS = 9
|
47
|
+
EXP = 10
|
48
|
+
LOG = 11
|
49
|
+
SIGN = 12
|
50
|
+
GRAD = 13
|
51
|
+
CONJ = 14
|
52
|
+
SUBSTITUTE = 15
|
53
|
+
ABS = 16
|
54
|
+
ATAN = 17
|
55
|
+
RSUB = 18
|
56
|
+
RDIV = 19
|
57
|
+
RPOW = 20
|
58
|
+
|
59
|
+
|
60
|
+
_OP_CODE_MAP = (
|
61
|
+
"__add__",
|
62
|
+
"__sub__",
|
63
|
+
"__mul__",
|
64
|
+
"__truediv__",
|
65
|
+
"__pow__",
|
66
|
+
"sin",
|
67
|
+
"cos",
|
68
|
+
"tan",
|
69
|
+
"arcsin",
|
70
|
+
"arccos",
|
71
|
+
"exp",
|
72
|
+
"log",
|
73
|
+
"sign",
|
74
|
+
"gradient",
|
75
|
+
"conjugate",
|
76
|
+
"subs",
|
77
|
+
"abs",
|
78
|
+
"arctan",
|
79
|
+
"__rsub__",
|
80
|
+
"__rtruediv__",
|
81
|
+
"__rpow__",
|
82
|
+
)
|
83
|
+
|
84
|
+
|
85
|
+
def op_code_to_method(op_code: _OPCode):
|
86
|
+
"""Return the method name for a given op_code."""
|
87
|
+
return _OP_CODE_MAP[op_code]
|
88
|
+
|
89
|
+
|
90
|
+
@dataclass
|
91
|
+
class _INSTRUCTION:
|
92
|
+
op: _OPCode
|
93
|
+
lhs: ParameterValueType | None
|
94
|
+
rhs: ParameterValueType | None = None
|
95
|
+
|
96
|
+
|
97
|
+
@dataclass
|
98
|
+
class _SUBS:
|
99
|
+
binds: dict
|
100
|
+
op: _OPCode = _OPCode.SUBSTITUTE
|
101
|
+
|
102
|
+
|
33
103
|
class ParameterExpression:
|
34
104
|
"""ParameterExpression class to enable creating expressions of Parameters."""
|
35
105
|
|
36
|
-
__slots__ = [
|
106
|
+
__slots__ = [
|
107
|
+
"_parameter_symbols",
|
108
|
+
"_parameter_keys",
|
109
|
+
"_symbol_expr",
|
110
|
+
"_name_map",
|
111
|
+
"_qpy_replay",
|
112
|
+
"_standalone_param",
|
113
|
+
]
|
37
114
|
|
38
|
-
def __init__(self, symbol_map: dict, expr):
|
115
|
+
def __init__(self, symbol_map: dict, expr, *, _qpy_replay=None):
|
39
116
|
"""Create a new :class:`ParameterExpression`.
|
40
117
|
|
41
118
|
Not intended to be called directly, but to be instantiated via operations
|
@@ -54,6 +131,11 @@ class ParameterExpression:
|
|
54
131
|
self._parameter_keys = frozenset(p._hash_key() for p in self._parameter_symbols)
|
55
132
|
self._symbol_expr = expr
|
56
133
|
self._name_map: dict | None = None
|
134
|
+
self._standalone_param = False
|
135
|
+
if _qpy_replay is not None:
|
136
|
+
self._qpy_replay = _qpy_replay
|
137
|
+
else:
|
138
|
+
self._qpy_replay = []
|
57
139
|
|
58
140
|
@property
|
59
141
|
def parameters(self) -> set:
|
@@ -69,8 +151,14 @@ class ParameterExpression:
|
|
69
151
|
|
70
152
|
def conjugate(self) -> "ParameterExpression":
|
71
153
|
"""Return the conjugate."""
|
154
|
+
if self._standalone_param:
|
155
|
+
new_op = _INSTRUCTION(_OPCode.CONJ, self)
|
156
|
+
else:
|
157
|
+
new_op = _INSTRUCTION(_OPCode.CONJ, None)
|
158
|
+
new_replay = self._qpy_replay.copy()
|
159
|
+
new_replay.append(new_op)
|
72
160
|
conjugated = ParameterExpression(
|
73
|
-
self._parameter_symbols, symengine.conjugate(self._symbol_expr)
|
161
|
+
self._parameter_symbols, symengine.conjugate(self._symbol_expr), _qpy_replay=new_replay
|
74
162
|
)
|
75
163
|
return conjugated
|
76
164
|
|
@@ -117,6 +205,7 @@ class ParameterExpression:
|
|
117
205
|
self._raise_if_passed_unknown_parameters(parameter_values.keys())
|
118
206
|
self._raise_if_passed_nan(parameter_values)
|
119
207
|
|
208
|
+
new_op = _SUBS(parameter_values)
|
120
209
|
symbol_values = {}
|
121
210
|
for parameter, value in parameter_values.items():
|
122
211
|
if (param_expr := self._parameter_symbols.get(parameter)) is not None:
|
@@ -143,7 +232,12 @@ class ParameterExpression:
|
|
143
232
|
f"(Expression: {self}, Bindings: {parameter_values})."
|
144
233
|
)
|
145
234
|
|
146
|
-
|
235
|
+
new_replay = self._qpy_replay.copy()
|
236
|
+
new_replay.append(new_op)
|
237
|
+
|
238
|
+
return ParameterExpression(
|
239
|
+
free_parameter_symbols, bound_symbol_expr, _qpy_replay=new_replay
|
240
|
+
)
|
147
241
|
|
148
242
|
def subs(
|
149
243
|
self, parameter_map: dict, allow_unknown_parameters: bool = False
|
@@ -175,6 +269,7 @@ class ParameterExpression:
|
|
175
269
|
for p in replacement_expr.parameters
|
176
270
|
}
|
177
271
|
self._raise_if_parameter_names_conflict(inbound_names, parameter_map.keys())
|
272
|
+
new_op = _SUBS(parameter_map)
|
178
273
|
|
179
274
|
# Include existing parameters in self not set to be replaced.
|
180
275
|
new_parameter_symbols = {
|
@@ -192,8 +287,12 @@ class ParameterExpression:
|
|
192
287
|
new_parameter_symbols[p] = symbol_type(p.name)
|
193
288
|
|
194
289
|
substituted_symbol_expr = self._symbol_expr.subs(symbol_map)
|
290
|
+
new_replay = self._qpy_replay.copy()
|
291
|
+
new_replay.append(new_op)
|
195
292
|
|
196
|
-
return ParameterExpression(
|
293
|
+
return ParameterExpression(
|
294
|
+
new_parameter_symbols, substituted_symbol_expr, _qpy_replay=new_replay
|
295
|
+
)
|
197
296
|
|
198
297
|
def _raise_if_passed_unknown_parameters(self, parameters):
|
199
298
|
unknown_parameters = parameters - self.parameters
|
@@ -231,7 +330,11 @@ class ParameterExpression:
|
|
231
330
|
)
|
232
331
|
|
233
332
|
def _apply_operation(
|
234
|
-
self,
|
333
|
+
self,
|
334
|
+
operation: Callable,
|
335
|
+
other: ParameterValueType,
|
336
|
+
reflected: bool = False,
|
337
|
+
op_code: _OPCode = None,
|
235
338
|
) -> "ParameterExpression":
|
236
339
|
"""Base method implementing math operations between Parameters and
|
237
340
|
either a constant or a second ParameterExpression.
|
@@ -253,7 +356,6 @@ class ParameterExpression:
|
|
253
356
|
A new expression describing the result of the operation.
|
254
357
|
"""
|
255
358
|
self_expr = self._symbol_expr
|
256
|
-
|
257
359
|
if isinstance(other, ParameterExpression):
|
258
360
|
self._raise_if_parameter_names_conflict(other._names)
|
259
361
|
parameter_symbols = {**self._parameter_symbols, **other._parameter_symbols}
|
@@ -266,10 +368,26 @@ class ParameterExpression:
|
|
266
368
|
|
267
369
|
if reflected:
|
268
370
|
expr = operation(other_expr, self_expr)
|
371
|
+
if op_code in {_OPCode.RSUB, _OPCode.RDIV, _OPCode.RPOW}:
|
372
|
+
if self._standalone_param:
|
373
|
+
new_op = _INSTRUCTION(op_code, self, other)
|
374
|
+
else:
|
375
|
+
new_op = _INSTRUCTION(op_code, None, other)
|
376
|
+
else:
|
377
|
+
if self._standalone_param:
|
378
|
+
new_op = _INSTRUCTION(op_code, other, self)
|
379
|
+
else:
|
380
|
+
new_op = _INSTRUCTION(op_code, other, None)
|
269
381
|
else:
|
270
382
|
expr = operation(self_expr, other_expr)
|
271
|
-
|
272
|
-
|
383
|
+
if self._standalone_param:
|
384
|
+
new_op = _INSTRUCTION(op_code, self, other)
|
385
|
+
else:
|
386
|
+
new_op = _INSTRUCTION(op_code, None, other)
|
387
|
+
new_replay = self._qpy_replay.copy()
|
388
|
+
new_replay.append(new_op)
|
389
|
+
|
390
|
+
out_expr = ParameterExpression(parameter_symbols, expr, _qpy_replay=new_replay)
|
273
391
|
out_expr._name_map = self._names.copy()
|
274
392
|
if isinstance(other, ParameterExpression):
|
275
393
|
out_expr._names.update(other._names.copy())
|
@@ -291,6 +409,13 @@ class ParameterExpression:
|
|
291
409
|
# If it is not contained then return 0
|
292
410
|
return 0.0
|
293
411
|
|
412
|
+
if self._standalone_param:
|
413
|
+
new_op = _INSTRUCTION(_OPCode.GRAD, self, param)
|
414
|
+
else:
|
415
|
+
new_op = _INSTRUCTION(_OPCode.GRAD, None, param)
|
416
|
+
qpy_replay = self._qpy_replay.copy()
|
417
|
+
qpy_replay.append(new_op)
|
418
|
+
|
294
419
|
# Compute the gradient of the parameter expression w.r.t. param
|
295
420
|
key = self._parameter_symbols[param]
|
296
421
|
expr_grad = symengine.Derivative(self._symbol_expr, key)
|
@@ -304,7 +429,7 @@ class ParameterExpression:
|
|
304
429
|
parameter_symbols[parameter] = symbol
|
305
430
|
# If the gradient corresponds to a parameter expression then return the new expression.
|
306
431
|
if len(parameter_symbols) > 0:
|
307
|
-
return ParameterExpression(parameter_symbols, expr=expr_grad)
|
432
|
+
return ParameterExpression(parameter_symbols, expr=expr_grad, _qpy_replay=qpy_replay)
|
308
433
|
# If no free symbols left, return a complex or float gradient
|
309
434
|
expr_grad_cplx = complex(expr_grad)
|
310
435
|
if expr_grad_cplx.imag != 0:
|
@@ -313,81 +438,89 @@ class ParameterExpression:
|
|
313
438
|
return float(expr_grad)
|
314
439
|
|
315
440
|
def __add__(self, other):
|
316
|
-
return self._apply_operation(operator.add, other)
|
441
|
+
return self._apply_operation(operator.add, other, op_code=_OPCode.ADD)
|
317
442
|
|
318
443
|
def __radd__(self, other):
|
319
|
-
return self._apply_operation(operator.add, other, reflected=True)
|
444
|
+
return self._apply_operation(operator.add, other, reflected=True, op_code=_OPCode.ADD)
|
320
445
|
|
321
446
|
def __sub__(self, other):
|
322
|
-
return self._apply_operation(operator.sub, other)
|
447
|
+
return self._apply_operation(operator.sub, other, op_code=_OPCode.SUB)
|
323
448
|
|
324
449
|
def __rsub__(self, other):
|
325
|
-
return self._apply_operation(operator.sub, other, reflected=True)
|
450
|
+
return self._apply_operation(operator.sub, other, reflected=True, op_code=_OPCode.RSUB)
|
326
451
|
|
327
452
|
def __mul__(self, other):
|
328
|
-
return self._apply_operation(operator.mul, other)
|
453
|
+
return self._apply_operation(operator.mul, other, op_code=_OPCode.MUL)
|
329
454
|
|
330
455
|
def __pos__(self):
|
331
|
-
return self._apply_operation(operator.mul, 1)
|
456
|
+
return self._apply_operation(operator.mul, 1, op_code=_OPCode.MUL)
|
332
457
|
|
333
458
|
def __neg__(self):
|
334
|
-
return self._apply_operation(operator.mul, -1)
|
459
|
+
return self._apply_operation(operator.mul, -1, op_code=_OPCode.MUL)
|
335
460
|
|
336
461
|
def __rmul__(self, other):
|
337
|
-
return self._apply_operation(operator.mul, other, reflected=True)
|
462
|
+
return self._apply_operation(operator.mul, other, reflected=True, op_code=_OPCode.MUL)
|
338
463
|
|
339
464
|
def __truediv__(self, other):
|
340
465
|
if other == 0:
|
341
466
|
raise ZeroDivisionError("Division of a ParameterExpression by zero.")
|
342
|
-
return self._apply_operation(operator.truediv, other)
|
467
|
+
return self._apply_operation(operator.truediv, other, op_code=_OPCode.DIV)
|
343
468
|
|
344
469
|
def __rtruediv__(self, other):
|
345
|
-
return self._apply_operation(operator.truediv, other, reflected=True)
|
470
|
+
return self._apply_operation(operator.truediv, other, reflected=True, op_code=_OPCode.RDIV)
|
346
471
|
|
347
472
|
def __pow__(self, other):
|
348
|
-
return self._apply_operation(pow, other)
|
473
|
+
return self._apply_operation(pow, other, op_code=_OPCode.POW)
|
349
474
|
|
350
475
|
def __rpow__(self, other):
|
351
|
-
return self._apply_operation(pow, other, reflected=True)
|
476
|
+
return self._apply_operation(pow, other, reflected=True, op_code=_OPCode.RPOW)
|
352
477
|
|
353
|
-
def _call(self, ufunc):
|
354
|
-
|
478
|
+
def _call(self, ufunc, op_code):
|
479
|
+
if self._standalone_param:
|
480
|
+
new_op = _INSTRUCTION(op_code, self)
|
481
|
+
else:
|
482
|
+
new_op = _INSTRUCTION(op_code, None)
|
483
|
+
new_replay = self._qpy_replay.copy()
|
484
|
+
new_replay.append(new_op)
|
485
|
+
return ParameterExpression(
|
486
|
+
self._parameter_symbols, ufunc(self._symbol_expr), _qpy_replay=new_replay
|
487
|
+
)
|
355
488
|
|
356
489
|
def sin(self):
|
357
490
|
"""Sine of a ParameterExpression"""
|
358
|
-
return self._call(symengine.sin)
|
491
|
+
return self._call(symengine.sin, op_code=_OPCode.SIN)
|
359
492
|
|
360
493
|
def cos(self):
|
361
494
|
"""Cosine of a ParameterExpression"""
|
362
|
-
return self._call(symengine.cos)
|
495
|
+
return self._call(symengine.cos, op_code=_OPCode.COS)
|
363
496
|
|
364
497
|
def tan(self):
|
365
498
|
"""Tangent of a ParameterExpression"""
|
366
|
-
return self._call(symengine.tan)
|
499
|
+
return self._call(symengine.tan, op_code=_OPCode.TAN)
|
367
500
|
|
368
501
|
def arcsin(self):
|
369
502
|
"""Arcsin of a ParameterExpression"""
|
370
|
-
return self._call(symengine.asin)
|
503
|
+
return self._call(symengine.asin, op_code=_OPCode.ASIN)
|
371
504
|
|
372
505
|
def arccos(self):
|
373
506
|
"""Arccos of a ParameterExpression"""
|
374
|
-
return self._call(symengine.acos)
|
507
|
+
return self._call(symengine.acos, op_code=_OPCode.ACOS)
|
375
508
|
|
376
509
|
def arctan(self):
|
377
510
|
"""Arctan of a ParameterExpression"""
|
378
|
-
return self._call(symengine.atan)
|
511
|
+
return self._call(symengine.atan, op_code=_OPCode.ATAN)
|
379
512
|
|
380
513
|
def exp(self):
|
381
514
|
"""Exponential of a ParameterExpression"""
|
382
|
-
return self._call(symengine.exp)
|
515
|
+
return self._call(symengine.exp, op_code=_OPCode.EXP)
|
383
516
|
|
384
517
|
def log(self):
|
385
518
|
"""Logarithm of a ParameterExpression"""
|
386
|
-
return self._call(symengine.log)
|
519
|
+
return self._call(symengine.log, op_code=_OPCode.LOG)
|
387
520
|
|
388
521
|
def sign(self):
|
389
522
|
"""Sign of a ParameterExpression"""
|
390
|
-
return self._call(symengine.sign)
|
523
|
+
return self._call(symengine.sign, op_code=_OPCode.SIGN)
|
391
524
|
|
392
525
|
def __repr__(self):
|
393
526
|
return f"{self.__class__.__name__}({str(self)})"
|
@@ -455,7 +588,7 @@ class ParameterExpression:
|
|
455
588
|
|
456
589
|
def __abs__(self):
|
457
590
|
"""Absolute of a ParameterExpression"""
|
458
|
-
return self._call(symengine.Abs)
|
591
|
+
return self._call(symengine.Abs, _OPCode.ABS)
|
459
592
|
|
460
593
|
def abs(self):
|
461
594
|
"""Absolute of a ParameterExpression"""
|