qiskit 1.4.1__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0rc1__cp39-abi3-macosx_11_0_arm64.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 +2 -5
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/circuit/__init__.py +24 -5
- qiskit/circuit/{add_control.py → _add_control.py} +32 -12
- qiskit/circuit/_classical_resource_map.py +5 -3
- qiskit/circuit/barrier.py +3 -7
- qiskit/circuit/classical/expr/__init__.py +31 -3
- qiskit/circuit/classical/expr/constructors.py +248 -28
- qiskit/circuit/classical/expr/expr.py +104 -3
- qiskit/circuit/classical/expr/visitors.py +75 -0
- qiskit/circuit/classical/types/__init__.py +12 -8
- qiskit/circuit/classical/types/ordering.py +14 -7
- qiskit/circuit/classical/types/types.py +36 -0
- qiskit/circuit/commutation_checker.py +34 -7
- qiskit/circuit/controlflow/__init__.py +32 -1
- qiskit/circuit/controlflow/_builder_utils.py +9 -5
- qiskit/circuit/controlflow/box.py +163 -0
- qiskit/circuit/controlflow/break_loop.py +1 -1
- qiskit/circuit/controlflow/builder.py +139 -39
- qiskit/circuit/controlflow/continue_loop.py +1 -3
- qiskit/circuit/controlflow/control_flow.py +10 -0
- qiskit/circuit/controlflow/for_loop.py +2 -1
- qiskit/circuit/controlflow/if_else.py +3 -16
- qiskit/circuit/controlflow/switch_case.py +2 -8
- qiskit/circuit/controlflow/while_loop.py +2 -7
- qiskit/circuit/controlledgate.py +2 -4
- qiskit/circuit/delay.py +40 -11
- qiskit/circuit/duration.py +0 -15
- qiskit/circuit/gate.py +2 -4
- qiskit/circuit/instruction.py +2 -141
- qiskit/circuit/instructionset.py +7 -54
- qiskit/circuit/library/__init__.py +34 -5
- qiskit/circuit/library/arithmetic/__init__.py +16 -10
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
- qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
- qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
- qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
- qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
- qiskit/circuit/library/bit_flip_oracle.py +130 -0
- qiskit/circuit/library/blueprintcircuit.py +52 -16
- qiskit/circuit/library/data_preparation/initializer.py +1 -1
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
- qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
- qiskit/circuit/library/generalized_gates/gms.py +1 -1
- qiskit/circuit/library/generalized_gates/isometry.py +1 -1
- qiskit/circuit/library/generalized_gates/pauli.py +1 -2
- qiskit/circuit/library/generalized_gates/uc.py +97 -7
- qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
- qiskit/circuit/library/generalized_gates/unitary.py +4 -2
- qiskit/circuit/library/hamiltonian_gate.py +1 -1
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
- qiskit/circuit/library/n_local/n_local.py +1 -1
- qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
- qiskit/circuit/library/overlap.py +2 -2
- qiskit/circuit/library/pauli_evolution.py +39 -24
- qiskit/circuit/library/phase_oracle.py +130 -51
- qiskit/circuit/library/standard_gates/__init__.py +0 -1
- qiskit/circuit/library/standard_gates/dcx.py +3 -4
- qiskit/circuit/library/standard_gates/ecr.py +3 -4
- qiskit/circuit/library/standard_gates/global_phase.py +5 -6
- qiskit/circuit/library/standard_gates/h.py +4 -9
- qiskit/circuit/library/standard_gates/i.py +2 -2
- qiskit/circuit/library/standard_gates/iswap.py +3 -4
- qiskit/circuit/library/standard_gates/p.py +15 -34
- qiskit/circuit/library/standard_gates/r.py +2 -6
- qiskit/circuit/library/standard_gates/rx.py +5 -15
- qiskit/circuit/library/standard_gates/rxx.py +3 -6
- qiskit/circuit/library/standard_gates/ry.py +5 -17
- qiskit/circuit/library/standard_gates/ryy.py +3 -6
- qiskit/circuit/library/standard_gates/rz.py +5 -17
- qiskit/circuit/library/standard_gates/rzx.py +3 -6
- qiskit/circuit/library/standard_gates/rzz.py +3 -6
- qiskit/circuit/library/standard_gates/s.py +6 -15
- qiskit/circuit/library/standard_gates/swap.py +4 -11
- qiskit/circuit/library/standard_gates/sx.py +7 -12
- qiskit/circuit/library/standard_gates/t.py +6 -7
- qiskit/circuit/library/standard_gates/u.py +2 -10
- qiskit/circuit/library/standard_gates/u1.py +5 -16
- qiskit/circuit/library/standard_gates/u2.py +2 -6
- qiskit/circuit/library/standard_gates/u3.py +3 -11
- qiskit/circuit/library/standard_gates/x.py +13 -60
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
- qiskit/circuit/library/standard_gates/y.py +4 -9
- qiskit/circuit/library/standard_gates/z.py +5 -15
- qiskit/circuit/measure.py +11 -2
- qiskit/circuit/parameterexpression.py +4 -0
- qiskit/circuit/quantumcircuit.py +881 -555
- qiskit/circuit/random/utils.py +12 -6
- qiskit/circuit/reset.py +5 -2
- qiskit/circuit/singleton.py +5 -11
- qiskit/circuit/store.py +0 -8
- qiskit/compiler/__init__.py +1 -7
- qiskit/compiler/transpiler.py +38 -196
- qiskit/converters/circuit_to_dag.py +4 -2
- qiskit/converters/circuit_to_dagdependency.py +0 -2
- qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
- qiskit/converters/circuit_to_gate.py +1 -1
- qiskit/converters/circuit_to_instruction.py +16 -29
- qiskit/converters/dag_to_circuit.py +5 -5
- qiskit/converters/dag_to_dagdependency.py +0 -1
- qiskit/converters/dag_to_dagdependency_v2.py +0 -1
- qiskit/converters/dagdependency_to_circuit.py +0 -6
- qiskit/converters/dagdependency_to_dag.py +0 -6
- qiskit/dagcircuit/collect_blocks.py +32 -20
- qiskit/dagcircuit/dagdependency.py +3 -37
- qiskit/dagcircuit/dagdependency_v2.py +2 -80
- qiskit/dagcircuit/dagnode.py +14 -2
- qiskit/passmanager/__init__.py +24 -6
- qiskit/passmanager/passmanager.py +26 -24
- qiskit/primitives/__init__.py +44 -35
- qiskit/primitives/backend_estimator_v2.py +102 -23
- qiskit/primitives/backend_sampler_v2.py +5 -20
- qiskit/primitives/base/__init__.py +4 -4
- qiskit/primitives/base/base_estimator.py +77 -82
- qiskit/primitives/base/base_primitive_job.py +2 -2
- qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
- qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
- qiskit/primitives/base/base_sampler.py +52 -60
- qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
- qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
- qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
- qiskit/primitives/containers/bindings_array.py +3 -1
- qiskit/primitives/containers/bit_array.py +23 -0
- qiskit/primitives/containers/data_bin.py +3 -1
- qiskit/primitives/containers/observables_array.py +19 -2
- qiskit/primitives/statevector_sampler.py +6 -8
- qiskit/primitives/utils.py +14 -189
- qiskit/providers/__init__.py +4 -130
- qiskit/providers/backend.py +11 -314
- qiskit/providers/basic_provider/__init__.py +3 -1
- qiskit/providers/basic_provider/basic_provider.py +29 -9
- qiskit/providers/basic_provider/basic_simulator.py +158 -298
- qiskit/providers/exceptions.py +0 -33
- qiskit/providers/fake_provider/__init__.py +0 -37
- qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
- qiskit/qasm2/__init__.py +21 -6
- qiskit/qasm2/export.py +2 -10
- qiskit/qasm2/parse.py +11 -25
- qiskit/qasm3/__init__.py +5 -1
- qiskit/qasm3/ast.py +44 -0
- qiskit/qasm3/exporter.py +65 -27
- qiskit/qasm3/printer.py +35 -4
- qiskit/qpy/__init__.py +141 -19
- qiskit/qpy/binary_io/__init__.py +0 -1
- qiskit/qpy/binary_io/circuits.py +91 -116
- qiskit/qpy/binary_io/schedules.py +61 -388
- qiskit/qpy/binary_io/value.py +154 -28
- qiskit/qpy/common.py +10 -7
- qiskit/qpy/formats.py +41 -0
- qiskit/qpy/interface.py +29 -62
- qiskit/qpy/type_keys.py +58 -221
- qiskit/quantum_info/analysis/distance.py +3 -1
- qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
- qiskit/quantum_info/operators/operator.py +6 -2
- qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
- qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
- qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
- qiskit/quantum_info/states/densitymatrix.py +16 -6
- qiskit/quantum_info/states/stabilizerstate.py +35 -4
- qiskit/quantum_info/states/statevector.py +16 -6
- qiskit/result/__init__.py +5 -17
- qiskit/result/models.py +18 -10
- qiskit/result/result.py +28 -126
- qiskit/result/sampled_expval.py +1 -2
- qiskit/result/utils.py +3 -4
- qiskit/synthesis/__init__.py +21 -1
- qiskit/synthesis/arithmetic/__init__.py +3 -1
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
- qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
- qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
- qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
- qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
- qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
- qiskit/synthesis/boolean/boolean_expression.py +231 -0
- qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
- qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
- qiskit/synthesis/evolution/lie_trotter.py +10 -7
- qiskit/synthesis/evolution/product_formula.py +44 -35
- qiskit/synthesis/evolution/qdrift.py +17 -24
- qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
- qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
- qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
- qiskit/synthesis/multi_controlled/__init__.py +1 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
- qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
- qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
- qiskit/synthesis/two_qubit/__init__.py +1 -0
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
- qiskit/transpiler/__init__.py +32 -232
- qiskit/transpiler/basepasses.py +20 -51
- qiskit/transpiler/layout.py +1 -1
- qiskit/transpiler/passes/__init__.py +2 -40
- qiskit/transpiler/passes/basis/basis_translator.py +4 -3
- qiskit/transpiler/passes/basis/decompose.py +1 -15
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
- qiskit/transpiler/passes/layout/apply_layout.py +4 -0
- qiskit/transpiler/passes/layout/dense_layout.py +2 -39
- qiskit/transpiler/passes/layout/full_ancilla_allocation.py +4 -4
- qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
- qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
- qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
- qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
- qiskit/transpiler/passes/optimization/__init__.py +1 -3
- qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
- qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
- qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
- qiskit/transpiler/passes/optimization/light_cone.py +135 -0
- qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
- qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
- qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
- qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -0
- qiskit/transpiler/passes/routing/__init__.py +0 -1
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
- qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
- qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
- qiskit/transpiler/passes/scheduling/__init__.py +1 -7
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +30 -2
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -58
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +11 -3
- qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
- qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +127 -59
- qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
- qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
- qiskit/transpiler/passes/synthesis/plugin.py +4 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
- qiskit/transpiler/passes/utils/__init__.py +0 -1
- qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
- qiskit/transpiler/passes/utils/control_flow.py +2 -6
- qiskit/transpiler/passes/utils/gate_direction.py +7 -0
- qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
- qiskit/transpiler/passmanager.py +13 -0
- qiskit/transpiler/passmanager_config.py +5 -81
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
- qiskit/transpiler/preset_passmanagers/common.py +140 -167
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +101 -322
- qiskit/transpiler/preset_passmanagers/level0.py +2 -11
- qiskit/transpiler/preset_passmanagers/level1.py +2 -14
- qiskit/transpiler/preset_passmanagers/level2.py +2 -12
- qiskit/transpiler/preset_passmanagers/level3.py +2 -11
- qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
- qiskit/transpiler/target.py +67 -524
- qiskit/user_config.py +8 -4
- qiskit/utils/__init__.py +13 -12
- qiskit/utils/deprecation.py +4 -112
- qiskit/utils/optionals.py +11 -4
- qiskit/utils/parallel.py +214 -87
- qiskit/utils/units.py +4 -1
- qiskit/visualization/__init__.py +3 -7
- qiskit/visualization/array.py +4 -1
- qiskit/visualization/bloch.py +1 -1
- qiskit/visualization/circuit/_utils.py +19 -19
- qiskit/visualization/circuit/circuit_visualization.py +11 -4
- qiskit/visualization/circuit/matplotlib.py +13 -23
- qiskit/visualization/circuit/text.py +7 -3
- qiskit/visualization/dag_visualization.py +2 -1
- qiskit/visualization/gate_map.py +39 -154
- qiskit/visualization/pass_manager_visualization.py +6 -2
- qiskit/visualization/state_visualization.py +6 -0
- qiskit/visualization/timeline/core.py +18 -12
- qiskit/visualization/timeline/interface.py +19 -18
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +2 -1
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/entry_points.txt +8 -2
- qiskit/assembler/__init__.py +0 -42
- qiskit/assembler/assemble_circuits.py +0 -451
- qiskit/assembler/assemble_schedules.py +0 -367
- qiskit/assembler/disassemble.py +0 -310
- qiskit/assembler/run_config.py +0 -77
- qiskit/circuit/bit.py +0 -106
- qiskit/circuit/classicalfunction/__init__.py +0 -152
- qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
- qiskit/circuit/classicalfunction/classical_element.py +0 -54
- qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
- qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
- qiskit/circuit/classicalfunction/exceptions.py +0 -41
- qiskit/circuit/classicalfunction/types.py +0 -18
- qiskit/circuit/classicalfunction/utils.py +0 -91
- qiskit/circuit/classicalregister.py +0 -57
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
- qiskit/circuit/quantumregister.py +0 -75
- qiskit/circuit/register.py +0 -246
- qiskit/compiler/assembler.py +0 -689
- qiskit/compiler/scheduler.py +0 -109
- qiskit/compiler/sequencer.py +0 -71
- qiskit/primitives/backend_estimator.py +0 -486
- qiskit/primitives/backend_sampler.py +0 -222
- qiskit/primitives/estimator.py +0 -172
- qiskit/primitives/sampler.py +0 -162
- qiskit/providers/backend_compat.py +0 -507
- qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
- qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
- qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
- qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
- qiskit/providers/fake_provider/fake_1q.py +0 -91
- qiskit/providers/fake_provider/fake_backend.py +0 -165
- qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
- qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
- qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
- qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
- qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
- qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
- qiskit/providers/models/__init__.py +0 -89
- qiskit/providers/models/backendconfiguration.py +0 -1040
- qiskit/providers/models/backendproperties.py +0 -535
- qiskit/providers/models/backendstatus.py +0 -104
- qiskit/providers/models/jobstatus.py +0 -77
- qiskit/providers/models/pulsedefaults.py +0 -305
- qiskit/providers/provider.py +0 -95
- qiskit/pulse/__init__.py +0 -158
- qiskit/pulse/builder.py +0 -2262
- qiskit/pulse/calibration_entries.py +0 -381
- qiskit/pulse/channels.py +0 -227
- qiskit/pulse/configuration.py +0 -245
- qiskit/pulse/exceptions.py +0 -45
- qiskit/pulse/filters.py +0 -309
- qiskit/pulse/instruction_schedule_map.py +0 -424
- qiskit/pulse/instructions/__init__.py +0 -67
- qiskit/pulse/instructions/acquire.py +0 -150
- qiskit/pulse/instructions/delay.py +0 -71
- qiskit/pulse/instructions/directives.py +0 -154
- qiskit/pulse/instructions/frequency.py +0 -135
- qiskit/pulse/instructions/instruction.py +0 -270
- qiskit/pulse/instructions/phase.py +0 -152
- qiskit/pulse/instructions/play.py +0 -99
- qiskit/pulse/instructions/reference.py +0 -100
- qiskit/pulse/instructions/snapshot.py +0 -82
- qiskit/pulse/library/__init__.py +0 -97
- qiskit/pulse/library/continuous.py +0 -430
- qiskit/pulse/library/pulse.py +0 -148
- qiskit/pulse/library/samplers/__init__.py +0 -15
- qiskit/pulse/library/samplers/decorators.py +0 -295
- qiskit/pulse/library/samplers/strategies.py +0 -71
- qiskit/pulse/library/symbolic_pulses.py +0 -1989
- qiskit/pulse/library/waveform.py +0 -136
- qiskit/pulse/macros.py +0 -262
- qiskit/pulse/parameter_manager.py +0 -445
- qiskit/pulse/parser.py +0 -314
- qiskit/pulse/reference_manager.py +0 -58
- qiskit/pulse/schedule.py +0 -1854
- qiskit/pulse/transforms/__init__.py +0 -106
- qiskit/pulse/transforms/alignments.py +0 -406
- qiskit/pulse/transforms/base_transforms.py +0 -71
- qiskit/pulse/transforms/canonicalization.py +0 -498
- qiskit/pulse/transforms/dag.py +0 -122
- qiskit/pulse/utils.py +0 -149
- qiskit/qobj/__init__.py +0 -75
- qiskit/qobj/common.py +0 -81
- qiskit/qobj/converters/__init__.py +0 -18
- qiskit/qobj/converters/lo_config.py +0 -177
- qiskit/qobj/converters/pulse_instruction.py +0 -897
- qiskit/qobj/pulse_qobj.py +0 -709
- qiskit/qobj/qasm_qobj.py +0 -708
- qiskit/qobj/utils.py +0 -46
- qiskit/result/mitigation/base_readout_mitigator.py +0 -79
- qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
- qiskit/result/mitigation/local_readout_mitigator.py +0 -328
- qiskit/result/mitigation/utils.py +0 -217
- qiskit/scheduler/__init__.py +0 -40
- qiskit/scheduler/config.py +0 -37
- qiskit/scheduler/lowering.py +0 -187
- qiskit/scheduler/methods/__init__.py +0 -15
- qiskit/scheduler/methods/basic.py +0 -140
- qiskit/scheduler/schedule_circuit.py +0 -69
- qiskit/scheduler/sequence.py +0 -104
- qiskit/transpiler/passes/calibration/__init__.py +0 -17
- qiskit/transpiler/passes/calibration/base_builder.py +0 -79
- qiskit/transpiler/passes/calibration/builders.py +0 -20
- qiskit/transpiler/passes/calibration/exceptions.py +0 -22
- qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
- qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
- qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
- qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
- qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
- qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
- qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
- qiskit/transpiler/passes/scheduling/alap.py +0 -153
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
- qiskit/transpiler/passes/scheduling/asap.py +0 -175
- qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
- qiskit/utils/deprecate_pulse.py +0 -119
- qiskit/utils/multiprocessing.py +0 -56
- qiskit/visualization/pulse_v2/__init__.py +0 -21
- qiskit/visualization/pulse_v2/core.py +0 -901
- qiskit/visualization/pulse_v2/device_info.py +0 -173
- qiskit/visualization/pulse_v2/drawings.py +0 -253
- qiskit/visualization/pulse_v2/events.py +0 -254
- qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
- qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
- qiskit/visualization/pulse_v2/generators/chart.py +0 -208
- qiskit/visualization/pulse_v2/generators/frame.py +0 -436
- qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
- qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
- qiskit/visualization/pulse_v2/interface.py +0 -459
- qiskit/visualization/pulse_v2/layouts.py +0 -387
- qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
- qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
- qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
- qiskit/visualization/pulse_v2/stylesheet.py +0 -312
- qiskit/visualization/pulse_v2/types.py +0 -242
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/top_level.txt +0 -0
qiskit/circuit/instruction.py
CHANGED
@@ -34,21 +34,17 @@ The circuit itself keeps this context.
|
|
34
34
|
from __future__ import annotations
|
35
35
|
|
36
36
|
import copy
|
37
|
-
import warnings
|
38
37
|
from itertools import zip_longest
|
39
38
|
import math
|
40
|
-
from typing import
|
39
|
+
from typing import Type
|
41
40
|
|
42
41
|
import numpy
|
43
42
|
|
44
43
|
from qiskit.circuit.exceptions import CircuitError
|
45
|
-
from qiskit.circuit.classicalregister import ClassicalRegister, Clbit
|
46
|
-
from qiskit.qobj.qasm_qobj import QasmQobjInstruction
|
47
44
|
from qiskit.circuit.parameter import ParameterExpression
|
48
45
|
from qiskit.circuit.operation import Operation
|
49
46
|
|
50
47
|
from qiskit.circuit.annotated_operation import AnnotatedOperation, InverseModifier
|
51
|
-
from qiskit.utils import deprecate_func
|
52
48
|
|
53
49
|
_CUTOFF_PRECISION = 1e-10
|
54
50
|
|
@@ -61,7 +57,7 @@ class Instruction(Operation):
|
|
61
57
|
_directive = False
|
62
58
|
_standard_gate = None
|
63
59
|
|
64
|
-
def __init__(self, name, num_qubits, num_clbits, params,
|
60
|
+
def __init__(self, name, num_qubits, num_clbits, params, label=None):
|
65
61
|
"""Create a new instruction.
|
66
62
|
|
67
63
|
.. deprecated:: 1.3
|
@@ -75,9 +71,6 @@ class Instruction(Operation):
|
|
75
71
|
num_clbits (int): instruction's clbit width
|
76
72
|
params (list[int|float|complex|str|ndarray|list|ParameterExpression]):
|
77
73
|
list of parameters
|
78
|
-
duration (int|float): (DEPRECATED) instruction's duration. it must be
|
79
|
-
an integer if ``unit`` is ``'dt'``
|
80
|
-
unit (str): (DEPRECATED) time unit of duration
|
81
74
|
label (str or None): An optional label for identifying the instruction.
|
82
75
|
|
83
76
|
Raises:
|
@@ -103,30 +96,9 @@ class Instruction(Operation):
|
|
103
96
|
if label is not None and not isinstance(label, str):
|
104
97
|
raise TypeError("label expects a string or None")
|
105
98
|
self._label = label
|
106
|
-
# tuple (ClassicalRegister, int), tuple (Clbit, bool) or tuple (Clbit, int)
|
107
|
-
# when the instruction has a conditional ("if")
|
108
|
-
self._condition = None
|
109
99
|
# list of instructions (and their contexts) that this instruction is composed of
|
110
100
|
# empty definition means opaque or fundamental instruction
|
111
101
|
self._definition = None
|
112
|
-
if duration is not None:
|
113
|
-
warnings.warn(
|
114
|
-
"Setting a custom duration per instruction is deprecated as of Qiskit "
|
115
|
-
"1.3.0. It will be removed in Qiskit 2.0.0. An instruction's duration "
|
116
|
-
"is defined in a backend's Target object.",
|
117
|
-
DeprecationWarning,
|
118
|
-
stacklevel=2,
|
119
|
-
)
|
120
|
-
self._duration = duration
|
121
|
-
if unit is not None and unit != "dt":
|
122
|
-
warnings.warn(
|
123
|
-
"Setting a custom unit for duration per instruction is deprecated as of Qiskit "
|
124
|
-
"1.3.0. It will be removed in Qiskit 2.0.0. An instruction's duration "
|
125
|
-
"is defined in a backend's Target object which has a fixed unit in seconds.",
|
126
|
-
DeprecationWarning,
|
127
|
-
stacklevel=2,
|
128
|
-
)
|
129
|
-
self._unit = unit
|
130
102
|
|
131
103
|
self.params = params # must be at last (other properties may be required for validation)
|
132
104
|
|
@@ -181,16 +153,6 @@ class Instruction(Operation):
|
|
181
153
|
"""
|
182
154
|
return self.copy()
|
183
155
|
|
184
|
-
@property
|
185
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0", is_property=True)
|
186
|
-
def condition(self):
|
187
|
-
"""The classical condition on the instruction."""
|
188
|
-
return self._condition
|
189
|
-
|
190
|
-
@condition.setter
|
191
|
-
def condition(self, condition):
|
192
|
-
self._condition = condition
|
193
|
-
|
194
156
|
def __eq__(self, other):
|
195
157
|
"""Two instructions are the same if they have the same name,
|
196
158
|
same dimensions, and same params.
|
@@ -363,64 +325,6 @@ class Instruction(Operation):
|
|
363
325
|
|
364
326
|
sel.add_equivalence(self, decomposition)
|
365
327
|
|
366
|
-
@property
|
367
|
-
@deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
|
368
|
-
def duration(self):
|
369
|
-
"""Get the duration."""
|
370
|
-
return self._duration
|
371
|
-
|
372
|
-
@duration.setter
|
373
|
-
def duration(self, value):
|
374
|
-
"""Set the duration."""
|
375
|
-
self._duration = value
|
376
|
-
|
377
|
-
@property
|
378
|
-
@deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
|
379
|
-
def unit(self):
|
380
|
-
"""Get the time unit of duration."""
|
381
|
-
return self._unit
|
382
|
-
|
383
|
-
@unit.setter
|
384
|
-
def unit(self, value):
|
385
|
-
"""Set the time unit of duration."""
|
386
|
-
self._unit = value
|
387
|
-
|
388
|
-
@deprecate_func(
|
389
|
-
since="1.2",
|
390
|
-
removal_timeline="in the 2.0 release",
|
391
|
-
additional_msg="The `Qobj` class and related functionality are part of the deprecated "
|
392
|
-
"`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
|
393
|
-
"workflow requires `Qobj` it likely relies on deprecated functionality and "
|
394
|
-
"should be updated to use `BackendV2`.",
|
395
|
-
)
|
396
|
-
def assemble(self):
|
397
|
-
"""Assemble a QasmQobjInstruction"""
|
398
|
-
return self._assemble()
|
399
|
-
|
400
|
-
def _assemble(self):
|
401
|
-
with warnings.catch_warnings():
|
402
|
-
# The class QasmQobjInstruction is deprecated
|
403
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
404
|
-
instruction = QasmQobjInstruction(name=self.name)
|
405
|
-
# Evaluate parameters
|
406
|
-
if self.params:
|
407
|
-
params = [x.evalf(x) if hasattr(x, "evalf") else x for x in self.params]
|
408
|
-
instruction.params = params
|
409
|
-
# Add placeholder for qarg and carg params
|
410
|
-
if self.num_qubits:
|
411
|
-
instruction.qubits = list(range(self.num_qubits))
|
412
|
-
if self.num_clbits:
|
413
|
-
instruction.memory = list(range(self.num_clbits))
|
414
|
-
# Add label if defined
|
415
|
-
if self.label:
|
416
|
-
instruction.label = self.label
|
417
|
-
# Add condition parameters for assembler. This is needed to convert
|
418
|
-
# to a qobj conditional instruction at assemble time and after
|
419
|
-
# conversion will be deleted by the assembler.
|
420
|
-
if self._condition:
|
421
|
-
instruction._condition = self._condition
|
422
|
-
return instruction
|
423
|
-
|
424
328
|
@property
|
425
329
|
def label(self) -> str:
|
426
330
|
"""Return instruction label"""
|
@@ -524,27 +428,6 @@ class Instruction(Operation):
|
|
524
428
|
inverse_gate.definition = inverse_definition
|
525
429
|
return inverse_gate
|
526
430
|
|
527
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
|
528
|
-
def c_if(self, classical, val):
|
529
|
-
"""Set a classical equality condition on this instruction between the register or cbit
|
530
|
-
``classical`` and value ``val``.
|
531
|
-
|
532
|
-
.. note::
|
533
|
-
|
534
|
-
This is a setter method, not an additive one. Calling this multiple times will silently
|
535
|
-
override any previously set condition; it does not stack.
|
536
|
-
"""
|
537
|
-
if not isinstance(classical, (ClassicalRegister, Clbit)):
|
538
|
-
raise CircuitError("c_if must be used with a classical register or classical bit")
|
539
|
-
if val < 0:
|
540
|
-
raise CircuitError("condition value should be non-negative")
|
541
|
-
if isinstance(classical, Clbit):
|
542
|
-
# Casting the conditional value as Boolean when
|
543
|
-
# the classical condition is on a classical bit.
|
544
|
-
val = bool(val)
|
545
|
-
self._condition = (classical, val)
|
546
|
-
return self
|
547
|
-
|
548
431
|
def copy(self, name=None):
|
549
432
|
"""
|
550
433
|
Copy of the instruction.
|
@@ -611,12 +494,6 @@ class Instruction(Operation):
|
|
611
494
|
def repeat(self, n):
|
612
495
|
"""Creates an instruction with ``self`` repeated :math`n` times.
|
613
496
|
|
614
|
-
If this operation has a conditional, the output instruction will have the same conditional
|
615
|
-
and the inner repeated operations will be unconditional; instructions within a compound
|
616
|
-
definition cannot be conditioned on registers within Qiskit's data model. This means that
|
617
|
-
it is not valid to apply a repeated instruction to a clbit that it both writes to and reads
|
618
|
-
from in its condition.
|
619
|
-
|
620
497
|
Args:
|
621
498
|
n (int): Number of times to repeat the instruction
|
622
499
|
|
@@ -640,28 +517,12 @@ class Instruction(Operation):
|
|
640
517
|
qargs = tuple(qc.qubits)
|
641
518
|
cargs = tuple(qc.clbits)
|
642
519
|
base = self.copy()
|
643
|
-
if self._condition:
|
644
|
-
# Condition is handled on the outer instruction.
|
645
|
-
base = base.to_mutable()
|
646
|
-
base.condition = None
|
647
520
|
for _ in [None] * n:
|
648
521
|
qc._append(CircuitInstruction(base, qargs, cargs))
|
649
522
|
|
650
523
|
instruction.definition = qc
|
651
|
-
if self._condition:
|
652
|
-
instruction = instruction.c_if(*self._condition)
|
653
524
|
return instruction
|
654
525
|
|
655
|
-
@property
|
656
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0", is_property=True)
|
657
|
-
def condition_bits(self) -> List[Clbit]:
|
658
|
-
"""Get Clbits in condition."""
|
659
|
-
from qiskit.circuit.controlflow import condition_resources # pylint: disable=cyclic-import
|
660
|
-
|
661
|
-
if self._condition is None:
|
662
|
-
return []
|
663
|
-
return list(condition_resources(self._condition).clbits)
|
664
|
-
|
665
526
|
@property
|
666
527
|
def name(self):
|
667
528
|
"""Return the name."""
|
qiskit/circuit/instructionset.py
CHANGED
@@ -17,14 +17,15 @@ Instruction collection.
|
|
17
17
|
from __future__ import annotations
|
18
18
|
|
19
19
|
from collections.abc import MutableSequence
|
20
|
-
from typing import Callable
|
20
|
+
from typing import Callable, TYPE_CHECKING
|
21
21
|
|
22
22
|
from qiskit.circuit.exceptions import CircuitError
|
23
|
-
from qiskit.utils import deprecate_func
|
24
|
-
from .classicalregister import Clbit, ClassicalRegister
|
25
23
|
from .operation import Operation
|
26
24
|
from .quantumcircuitdata import CircuitInstruction
|
27
25
|
|
26
|
+
if TYPE_CHECKING:
|
27
|
+
from qiskit.circuit import Clbit, ClassicalRegister
|
28
|
+
|
28
29
|
|
29
30
|
class InstructionSet:
|
30
31
|
"""Instruction collection, and their contexts."""
|
@@ -50,9 +51,9 @@ class InstructionSet:
|
|
50
51
|
|
51
52
|
.. note::
|
52
53
|
|
53
|
-
The callback ``resource_requester``
|
54
|
-
|
55
|
-
|
54
|
+
The callback ``resource_requester`` assumes that a call implies that the
|
55
|
+
resource will now be used. It may throw an error if the resource is not valid
|
56
|
+
for usage.
|
56
57
|
|
57
58
|
"""
|
58
59
|
self._instructions: list[
|
@@ -106,54 +107,6 @@ class InstructionSet:
|
|
106
107
|
)
|
107
108
|
return self
|
108
109
|
|
109
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
|
110
|
-
def c_if(self, classical: Clbit | ClassicalRegister | int, val: int) -> "InstructionSet":
|
111
|
-
"""Set a classical equality condition on all the instructions in this set between the
|
112
|
-
:obj:`.ClassicalRegister` or :obj:`.Clbit` ``classical`` and value ``val``.
|
113
|
-
|
114
|
-
.. note::
|
115
|
-
You should prefer to use the :meth:`.QuantumCircuit.if_test` builder interface, rather
|
116
|
-
than using this method.
|
117
|
-
|
118
|
-
.. note::
|
119
|
-
|
120
|
-
This is a setter method, not an additive one. Calling this multiple times will silently
|
121
|
-
override any previously set condition on any of the contained instructions; it does not
|
122
|
-
stack.
|
123
|
-
|
124
|
-
Args:
|
125
|
-
classical: the classical resource the equality condition should be on. If this is given
|
126
|
-
as an integer, it will be resolved into a :obj:`.Clbit` using the same conventions
|
127
|
-
as the circuit these instructions are attached to.
|
128
|
-
val: the value the classical resource should be equal to.
|
129
|
-
|
130
|
-
Returns:
|
131
|
-
This same instance of :obj:`.InstructionSet`, but now mutated to have the given equality
|
132
|
-
condition.
|
133
|
-
|
134
|
-
Raises:
|
135
|
-
CircuitError: if the passed classical resource is invalid, or otherwise not resolvable
|
136
|
-
to a concrete resource that these instructions are permitted to access.
|
137
|
-
"""
|
138
|
-
if self._requester is None and not isinstance(classical, (Clbit, ClassicalRegister)):
|
139
|
-
raise CircuitError(
|
140
|
-
"Cannot pass an index as a condition variable without specifying a requester"
|
141
|
-
" when creating this InstructionSet."
|
142
|
-
)
|
143
|
-
if self._requester is not None:
|
144
|
-
classical = self._requester(classical)
|
145
|
-
for idx, instruction in enumerate(self._instructions):
|
146
|
-
if isinstance(instruction, CircuitInstruction):
|
147
|
-
updated = instruction.operation.c_if(classical, val)
|
148
|
-
self._instructions[idx] = instruction.replace(operation=updated)
|
149
|
-
else:
|
150
|
-
data, idx = instruction
|
151
|
-
instruction = data[idx]
|
152
|
-
data[idx] = instruction.replace(
|
153
|
-
operation=instruction.operation.c_if(classical, val)
|
154
|
-
)
|
155
|
-
return self
|
156
|
-
|
157
110
|
# Legacy support for properties. Added in Terra 0.21 to support the internal switch in
|
158
111
|
# `QuantumCircuit.data` from the 3-tuple to `CircuitInstruction`.
|
159
112
|
|
@@ -53,7 +53,9 @@ and :meth:`~qiskit.circuit.Gate.control`, which we can generally only apply to u
|
|
53
53
|
|
54
54
|
For example:
|
55
55
|
|
56
|
-
..
|
56
|
+
.. plot::
|
57
|
+
:include-source:
|
58
|
+
:nofigs:
|
57
59
|
|
58
60
|
from qiskit.circuit.library import XGate
|
59
61
|
gate = XGate()
|
@@ -156,7 +158,9 @@ These "gates" (many are :class:`~qiskit.circuit.QuantumCircuit` subclasses) allo
|
|
156
158
|
set the amount of qubits involved at instantiation time.
|
157
159
|
|
158
160
|
|
159
|
-
..
|
161
|
+
.. plot::
|
162
|
+
:include-source:
|
163
|
+
:nofigs:
|
160
164
|
|
161
165
|
from qiskit.circuit.library import DiagonalGate
|
162
166
|
|
@@ -255,6 +259,7 @@ Amplitude Functions
|
|
255
259
|
:template: autosummary/class_no_inherited_members.rst
|
256
260
|
|
257
261
|
LinearAmplitudeFunction
|
262
|
+
LinearAmplitudeFunctionGate
|
258
263
|
|
259
264
|
Functional Pauli Rotations
|
260
265
|
--------------------------
|
@@ -265,10 +270,15 @@ Functional Pauli Rotations
|
|
265
270
|
|
266
271
|
FunctionalPauliRotations
|
267
272
|
LinearPauliRotations
|
273
|
+
LinearPauliRotationsGate
|
268
274
|
PolynomialPauliRotations
|
275
|
+
PolynomialPauliRotationsGate
|
269
276
|
PiecewiseLinearPauliRotations
|
277
|
+
PiecewiseLinearPauliRotationsGate
|
270
278
|
PiecewisePolynomialPauliRotations
|
279
|
+
PiecewisePolynomialPauliRotationsGate
|
271
280
|
PiecewiseChebyshev
|
281
|
+
PiecewiseChebyshevGate
|
272
282
|
|
273
283
|
Adders
|
274
284
|
------
|
@@ -280,7 +290,6 @@ Adders
|
|
280
290
|
DraperQFTAdder
|
281
291
|
CDKMRippleCarryAdder
|
282
292
|
VBERippleCarryAdder
|
283
|
-
WeightedAdder
|
284
293
|
ModularAdderGate
|
285
294
|
HalfAdderGate
|
286
295
|
FullAdderGate
|
@@ -304,6 +313,7 @@ Comparators
|
|
304
313
|
:template: autosummary/class_no_inherited_members.rst
|
305
314
|
|
306
315
|
IntegerComparator
|
316
|
+
IntegerComparatorGate
|
307
317
|
|
308
318
|
Functions on binary variables
|
309
319
|
-----------------------------
|
@@ -313,6 +323,7 @@ Functions on binary variables
|
|
313
323
|
:template: autosummary/class_no_inherited_members.rst
|
314
324
|
|
315
325
|
QuadraticForm
|
326
|
+
QuadraticFormGate
|
316
327
|
|
317
328
|
Other arithmetic functions
|
318
329
|
--------------------------
|
@@ -322,6 +333,9 @@ Other arithmetic functions
|
|
322
333
|
:template: autosummary/class_no_inherited_members.rst
|
323
334
|
|
324
335
|
ExactReciprocal
|
336
|
+
ExactReciprocalGate
|
337
|
+
WeightedAdder
|
338
|
+
WeightedSumGate
|
325
339
|
|
326
340
|
Particular Quantum Circuits
|
327
341
|
===========================
|
@@ -341,6 +355,8 @@ quantum circuits of interest:
|
|
341
355
|
QuantumVolume
|
342
356
|
PhaseEstimation
|
343
357
|
GroverOperator
|
358
|
+
BitFlipOracleGate
|
359
|
+
PhaseOracleGate
|
344
360
|
PhaseOracle
|
345
361
|
PauliEvolutionGate
|
346
362
|
HamiltonianGate
|
@@ -447,7 +463,9 @@ to replace the match with the inverse of the remainder from the template.
|
|
447
463
|
|
448
464
|
In this example, the identity constant in a template is checked:
|
449
465
|
|
450
|
-
..
|
466
|
+
.. plot::
|
467
|
+
:include-source:
|
468
|
+
:nofigs:
|
451
469
|
|
452
470
|
from qiskit.circuit.library.templates import template_nct_4b_1
|
453
471
|
from qiskit.quantum_info import Operator
|
@@ -613,20 +631,30 @@ from .arithmetic import (
|
|
613
631
|
MultiplierGate,
|
614
632
|
FunctionalPauliRotations,
|
615
633
|
LinearPauliRotations,
|
634
|
+
LinearPauliRotationsGate,
|
616
635
|
PiecewiseLinearPauliRotations,
|
636
|
+
PiecewiseLinearPauliRotationsGate,
|
617
637
|
PiecewisePolynomialPauliRotations,
|
638
|
+
PiecewisePolynomialPauliRotationsGate,
|
618
639
|
PolynomialPauliRotations,
|
640
|
+
PolynomialPauliRotationsGate,
|
619
641
|
IntegerComparator,
|
642
|
+
IntegerComparatorGate,
|
620
643
|
WeightedAdder,
|
644
|
+
WeightedSumGate,
|
621
645
|
QuadraticForm,
|
646
|
+
QuadraticFormGate,
|
622
647
|
LinearAmplitudeFunction,
|
648
|
+
LinearAmplitudeFunctionGate,
|
623
649
|
VBERippleCarryAdder,
|
624
650
|
CDKMRippleCarryAdder,
|
625
651
|
DraperQFTAdder,
|
626
652
|
PiecewiseChebyshev,
|
653
|
+
PiecewiseChebyshevGate,
|
627
654
|
HRSCumulativeMultiplier,
|
628
655
|
RGQFTMultiplier,
|
629
656
|
ExactReciprocal,
|
657
|
+
ExactReciprocalGate,
|
630
658
|
)
|
631
659
|
|
632
660
|
from .n_local import (
|
@@ -664,6 +692,7 @@ from .hidden_linear_function import HiddenLinearFunction, hidden_linear_function
|
|
664
692
|
from .iqp import IQP, iqp, random_iqp
|
665
693
|
from .phase_estimation import PhaseEstimation, phase_estimation
|
666
694
|
from .grover_operator import GroverOperator, grover_operator
|
667
|
-
from .phase_oracle import PhaseOracle
|
695
|
+
from .phase_oracle import PhaseOracle, PhaseOracleGate
|
696
|
+
from .bit_flip_oracle import BitFlipOracleGate
|
668
697
|
from .overlap import UnitaryOverlap, unitary_overlap
|
669
698
|
from .standard_gates import get_standard_gate_name_mapping
|
@@ -13,14 +13,22 @@
|
|
13
13
|
"""The arithmetic circuit library."""
|
14
14
|
|
15
15
|
from .functional_pauli_rotations import FunctionalPauliRotations
|
16
|
-
from .integer_comparator import IntegerComparator
|
17
|
-
from .linear_pauli_rotations import LinearPauliRotations
|
18
|
-
from .piecewise_linear_pauli_rotations import
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
from .
|
23
|
-
|
16
|
+
from .integer_comparator import IntegerComparator, IntegerComparatorGate
|
17
|
+
from .linear_pauli_rotations import LinearPauliRotations, LinearPauliRotationsGate
|
18
|
+
from .piecewise_linear_pauli_rotations import (
|
19
|
+
PiecewiseLinearPauliRotations,
|
20
|
+
PiecewiseLinearPauliRotationsGate,
|
21
|
+
)
|
22
|
+
from .piecewise_polynomial_pauli_rotations import (
|
23
|
+
PiecewisePolynomialPauliRotations,
|
24
|
+
PiecewisePolynomialPauliRotationsGate,
|
25
|
+
)
|
26
|
+
from .polynomial_pauli_rotations import PolynomialPauliRotations, PolynomialPauliRotationsGate
|
27
|
+
from .weighted_adder import WeightedAdder, WeightedSumGate
|
28
|
+
from .quadratic_form import QuadraticForm, QuadraticFormGate
|
29
|
+
from .linear_amplitude_function import LinearAmplitudeFunction, LinearAmplitudeFunctionGate
|
30
|
+
from .piecewise_chebyshev import PiecewiseChebyshev, PiecewiseChebyshevGate
|
31
|
+
from .exact_reciprocal import ExactReciprocal, ExactReciprocalGate
|
24
32
|
from .adders import (
|
25
33
|
VBERippleCarryAdder,
|
26
34
|
CDKMRippleCarryAdder,
|
@@ -29,6 +37,4 @@ from .adders import (
|
|
29
37
|
HalfAdderGate,
|
30
38
|
FullAdderGate,
|
31
39
|
)
|
32
|
-
from .piecewise_chebyshev import PiecewiseChebyshev
|
33
40
|
from .multipliers import HRSCumulativeMultiplier, RGQFTMultiplier, MultiplierGate
|
34
|
-
from .exact_reciprocal import ExactReciprocal
|
@@ -84,7 +84,7 @@ class CDKMRippleCarryAdder(Adder):
|
|
84
84
|
:class:`.ModularAdderGate`: A generic inplace adder, modulo :math:`2^n`. This
|
85
85
|
is functionally equivalent to ``kind="fixed"``.
|
86
86
|
|
87
|
-
:class:`.
|
87
|
+
:class:`.AdderGate`: A generic inplace adder. This
|
88
88
|
is functionally equivalent to ``kind="half"``.
|
89
89
|
|
90
90
|
:class:`.FullAdderGate`: A generic inplace adder, with a carry-in bit. This
|
@@ -15,7 +15,7 @@
|
|
15
15
|
import numpy as np
|
16
16
|
|
17
17
|
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
18
|
-
from qiskit.circuit
|
18
|
+
from qiskit.circuit import QuantumRegister
|
19
19
|
from qiskit.circuit.library.basis_change import QFT
|
20
20
|
|
21
21
|
from .adder import Adder
|
@@ -54,7 +54,7 @@ class DraperQFTAdder(Adder):
|
|
54
54
|
:class:`.ModularAdderGate`: A generic inplace adder, modulo :math:`2^n`. This
|
55
55
|
is functionally equivalent to ``kind="fixed"``.
|
56
56
|
|
57
|
-
:class:`.
|
57
|
+
:class:`.AdderGate`: A generic inplace adder. This
|
58
58
|
is functionally equivalent to ``kind="half"``.
|
59
59
|
|
60
60
|
**References:**
|
@@ -60,7 +60,7 @@ class VBERippleCarryAdder(Adder):
|
|
60
60
|
:class:`.ModularAdderGate`: A generic inplace adder, modulo :math:`2^n`. This
|
61
61
|
is functionally equivalent to ``kind="fixed"``.
|
62
62
|
|
63
|
-
:class:`.
|
63
|
+
:class:`.AdderGate`: A generic inplace adder. This
|
64
64
|
is functionally equivalent to ``kind="half"``.
|
65
65
|
|
66
66
|
:class:`.FullAdderGate`: A generic inplace adder, with a carry-in bit. This
|
@@ -13,7 +13,7 @@
|
|
13
13
|
|
14
14
|
from math import isclose
|
15
15
|
import numpy as np
|
16
|
-
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
16
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister, Gate
|
17
17
|
from qiskit.circuit.library.generalized_gates import UCRYGate
|
18
18
|
|
19
19
|
|
@@ -46,43 +46,86 @@ class ExactReciprocal(QuantumCircuit):
|
|
46
46
|
"""
|
47
47
|
qr_state = QuantumRegister(num_state_qubits, "state")
|
48
48
|
qr_flag = QuantumRegister(1, "flag")
|
49
|
-
|
49
|
+
super().__init__(qr_state, qr_flag, name=name)
|
50
|
+
|
51
|
+
reciprocal = ExactReciprocalGate(num_state_qubits, scaling, neg_vals, label=name)
|
52
|
+
self.append(reciprocal, self.qubits)
|
53
|
+
|
54
|
+
|
55
|
+
class ExactReciprocalGate(Gate):
|
56
|
+
r"""Implements an exact reciprocal function.
|
57
|
+
|
58
|
+
For a state :math:`|x\rangle` and a scaling factor :math:`s`, this gate implements the operation
|
59
|
+
|
60
|
+
.. math::
|
61
|
+
|
62
|
+
|x\rangle |0\rangle \mapsto
|
63
|
+
\cos\left(\arcsin\left(s\frac{2^n}{x}\right)\right)|x\rangle|0\rangle +
|
64
|
+
\left(s\frac{2^n}{x}\right)|x\rangle|1\rangle.
|
65
|
+
|
66
|
+
States representing :math:`x = 0` or :math:`s 2^n / x \geq 1` are left unchanged, since
|
67
|
+
this function would not be defined.
|
68
|
+
"""
|
69
|
+
|
70
|
+
def __init__(
|
71
|
+
self, num_state_qubits: int, scaling: float, neg_vals: bool = False, label: str = "1/x"
|
72
|
+
) -> None:
|
73
|
+
r"""
|
74
|
+
Args:
|
75
|
+
num_state_qubits: The number of qubits representing the value to invert.
|
76
|
+
scaling: Scaling factor :math:`s` of the reciprocal function, i.e. to compute
|
77
|
+
:math:`s / x`.
|
78
|
+
neg_vals: Whether :math:`x` might represent negative values. In this case the first
|
79
|
+
qubit is the sign, with :math:`|1\rangle` for negative and :math:`|0\rangle` for
|
80
|
+
positive. For the negative case it is assumed that the remaining string represents
|
81
|
+
:math:`1 - x`. This is because :math:`e^{-2 \pi i x} = e^{2 \pi i (1 - x)}` for
|
82
|
+
:math:`x \in [0,1)`.
|
83
|
+
label: The label of the object.
|
84
|
+
|
85
|
+
.. note::
|
86
|
+
|
87
|
+
It is assumed that the binary string :math:`x` represents a number < 1.
|
88
|
+
"""
|
89
|
+
super().__init__("ExactReciprocal", num_state_qubits + 1, [], label=label)
|
90
|
+
|
91
|
+
self.scaling = scaling
|
92
|
+
self.neg_vals = neg_vals
|
93
|
+
|
94
|
+
def _define(self):
|
95
|
+
num_state_qubits = self.num_qubits - 1
|
96
|
+
qr_state = QuantumRegister(num_state_qubits, "state")
|
97
|
+
qr_flag = QuantumRegister(1, "flag")
|
98
|
+
circuit = QuantumCircuit(qr_state, qr_flag)
|
50
99
|
|
51
100
|
angles = [0.0]
|
52
|
-
nl = 2 ** (num_state_qubits - 1) if neg_vals else 2**num_state_qubits
|
101
|
+
nl = 2 ** (num_state_qubits - 1) if self.neg_vals else 2**num_state_qubits
|
53
102
|
|
54
103
|
# Angles to rotate by scaling / x, where x = i / nl
|
55
104
|
for i in range(1, nl):
|
56
|
-
if isclose(scaling * nl / i, 1, abs_tol=1e-5):
|
105
|
+
if isclose(self.scaling * nl / i, 1, abs_tol=1e-5):
|
57
106
|
angles.append(np.pi)
|
58
|
-
elif scaling * nl / i < 1:
|
59
|
-
angles.append(2 * np.arcsin(scaling * nl / i))
|
107
|
+
elif self.scaling * nl / i < 1:
|
108
|
+
angles.append(2 * np.arcsin(self.scaling * nl / i))
|
60
109
|
else:
|
61
110
|
angles.append(0.0)
|
62
111
|
|
63
|
-
circuit.
|
64
|
-
UCRYGate(angles), [qr_flag[0]] + qr_state[: len(qr_state) - neg_vals], inplace=True
|
65
|
-
)
|
112
|
+
circuit.append(UCRYGate(angles), [qr_flag[0]] + qr_state[: len(qr_state) - self.neg_vals])
|
66
113
|
|
67
|
-
if neg_vals:
|
68
|
-
circuit.
|
114
|
+
if self.neg_vals:
|
115
|
+
circuit.append(
|
69
116
|
UCRYGate([-theta for theta in angles]).control(),
|
70
117
|
[qr_state[-1]] + [qr_flag[0]] + qr_state[:-1],
|
71
|
-
inplace=True,
|
72
118
|
)
|
73
119
|
angles_neg = [0.0]
|
74
120
|
for i in range(1, nl):
|
75
|
-
if isclose(scaling * (-1) / (1 - i / nl), -1, abs_tol=1e-5):
|
121
|
+
if isclose(self.scaling * (-1) / (1 - i / nl), -1, abs_tol=1e-5):
|
76
122
|
angles_neg.append(-np.pi)
|
77
|
-
elif np.abs(scaling * (-1) / (1 - i / nl)) < 1:
|
78
|
-
angles_neg.append(2 * np.arcsin(scaling * (-1) / (1 - i / nl)))
|
123
|
+
elif np.abs(self.scaling * (-1) / (1 - i / nl)) < 1:
|
124
|
+
angles_neg.append(2 * np.arcsin(self.scaling * (-1) / (1 - i / nl)))
|
79
125
|
else:
|
80
126
|
angles_neg.append(0.0)
|
81
|
-
circuit.
|
82
|
-
UCRYGate(angles_neg).control(),
|
83
|
-
[qr_state[-1]] + [qr_flag[0]] + qr_state[:-1],
|
84
|
-
inplace=True,
|
127
|
+
circuit.append(
|
128
|
+
UCRYGate(angles_neg).control(), [qr_state[-1]] + [qr_flag[0]] + qr_state[:-1]
|
85
129
|
)
|
86
130
|
|
87
|
-
|
88
|
-
self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
|
131
|
+
self.definition = circuit
|