qiskit 1.4.2__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0__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 +3 -9
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/circuit/__init__.py +35 -10
- 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 +236 -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 +469 -154
- 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/graph_state.py +1 -0
- 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 +7 -10
- 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 +14 -62
- 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 +7 -1
- qiskit/circuit/quantumcircuit.py +890 -564
- 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 +6 -4
- 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 +7 -8
- 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 +5 -82
- 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 +162 -19
- qiskit/qpy/binary_io/__init__.py +0 -1
- qiskit/qpy/binary_io/circuits.py +98 -130
- qiskit/qpy/binary_io/schedules.py +69 -439
- qiskit/qpy/binary_io/value.py +154 -31
- qiskit/qpy/common.py +10 -7
- qiskit/qpy/formats.py +41 -0
- qiskit/qpy/interface.py +34 -81
- 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 -11
- qiskit/result/result.py +38 -134
- 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/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 +4 -40
- qiskit/transpiler/passes/basis/basis_translator.py +5 -4
- 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 +3 -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 +2 -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 +32 -4
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
- 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 +134 -62
- 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 +107 -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 +78 -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/counts_visualization.py +4 -0
- qiskit/visualization/dag_visualization.py +2 -1
- qiskit/visualization/gate_map.py +39 -154
- qiskit/visualization/library.py +4 -1
- qiskit/visualization/pass_manager_visualization.py +6 -2
- qiskit/visualization/state_visualization.py +19 -2
- qiskit/visualization/timeline/core.py +19 -13
- qiskit/visualization/timeline/interface.py +19 -18
- qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
- {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
- {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/RECORD +300 -447
- {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/WHEEL +2 -1
- {qiskit-1.4.2.dist-info → qiskit-2.0.0.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.2.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
- {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
@@ -10,38 +10,124 @@
|
|
10
10
|
# copyright notice, and modified files need to carry a notice indicating
|
11
11
|
# that they have been altered from the originals.
|
12
12
|
|
13
|
-
|
13
|
+
|
14
|
+
r"""
|
14
15
|
===============================================
|
15
16
|
Circuit Library (:mod:`qiskit.circuit.library`)
|
16
17
|
===============================================
|
17
18
|
|
18
19
|
.. currentmodule:: qiskit.circuit.library
|
19
20
|
|
20
|
-
The circuit library is a collection of
|
21
|
-
|
22
|
-
|
21
|
+
The circuit library is a collection of valuable circuits and building blocks. We call these valuable
|
22
|
+
for different reasons. For instance, they can be used as building blocks for algorithms, serve as
|
23
|
+
benchmarks, or they are circuits conjectured to be difficult to simulate classically.
|
24
|
+
|
25
|
+
Elements in the circuit library are either :class:`.QuantumCircuit`\ s or
|
26
|
+
:class:`~.circuit.Instruction`\ s, allowing them to be easily investigated or plugged into other
|
27
|
+
circuits. This enables fast prototyping and circuit design at higher levels of abstraction.
|
23
28
|
|
24
|
-
|
25
|
-
method and so the circuit library allows users to program at higher levels of abstraction.
|
26
|
-
For example, to append a multi-controlled CNOT:
|
29
|
+
For example:
|
27
30
|
|
28
31
|
.. plot::
|
29
|
-
:alt:
|
32
|
+
:alt: A circuit implementing a Suzuki-Trotter expansion of a Hamiltonian evolution.
|
30
33
|
:include-source:
|
31
34
|
|
32
|
-
from qiskit.circuit
|
33
|
-
|
35
|
+
from qiskit.circuit import QuantumCircuit
|
36
|
+
from qiskit.circuit.library import PauliEvolutionGate
|
37
|
+
from qiskit.quantum_info import SparsePauliOp
|
34
38
|
|
35
|
-
|
36
|
-
|
37
|
-
circuit.append(gate, [0, 1, 4, 2, 3])
|
38
|
-
circuit.draw('mpl')
|
39
|
+
hamiltonian = SparsePauliOp(["ZZI", "IZZ", "IXI"], coeffs=[1, 1, -1])
|
40
|
+
gate = PauliEvolutionGate(hamiltonian)
|
39
41
|
|
40
|
-
|
41
|
-
|
42
|
+
circuit = QuantumCircuit(hamiltonian.num_qubits)
|
43
|
+
circuit.append(gate, circuit.qubits)
|
42
44
|
|
43
|
-
|
45
|
+
circuit.draw("mpl")
|
46
|
+
|
47
|
+
This library is organized in different sections:
|
44
48
|
|
49
|
+
* :ref:`Standard gates <standard-gates>`
|
50
|
+
* :ref:`Standard directives <standard-directives>`
|
51
|
+
* :ref:`Standard operations <standard-operations>`
|
52
|
+
* :ref:`Generalized gates <generalized-gates>`
|
53
|
+
* :ref:`Arithmetic operations <arithmetic>`
|
54
|
+
* :ref:`Basis changes <basis-change>`
|
55
|
+
* :ref:`Boolean logic <boolean-logic>`
|
56
|
+
* :ref:`Data encoding <data-encoding>`
|
57
|
+
* :ref:`Data preparation <data-preparation>`
|
58
|
+
* :ref:`Particular operations <particular>`
|
59
|
+
* :ref:`N-local circuits <n-local>`
|
60
|
+
* :ref:`Oracles <oracles>`
|
61
|
+
* :ref:`Template circuits <template>`
|
62
|
+
|
63
|
+
We distinguish into different categories of operations:
|
64
|
+
|
65
|
+
Standard gates
|
66
|
+
These are fundamental quantum gates, a subset of which typically forms a basis gate
|
67
|
+
set on a quantum computer. These are unitary operations represented as :class:`.Gate`.
|
68
|
+
The library also provides standard compiler directives (a :class:`.Barrier`) and non-unitary
|
69
|
+
operations (like :class:`.Measure`).
|
70
|
+
|
71
|
+
Abstract operations
|
72
|
+
This category includes operations that are defined by a mathematical action, but can be implemented
|
73
|
+
with different decompositions. For example, a multi-controlled :class:`.XGate` flips the target
|
74
|
+
qubit if all control qubits are :math:`|1\rangle`, and there are a variety of concrete circuits
|
75
|
+
implementing this operation using lower-level gates. Such abstract operations are represented as
|
76
|
+
:class:`.Gate` or :class:`~.circuit.Instruction`. This allows building the circuit without choosing
|
77
|
+
a concrete implementation of each block and, finally, let the compiler (or you as user) choose the
|
78
|
+
optimal decomposition. For example:
|
79
|
+
|
80
|
+
.. plot::
|
81
|
+
:alt: A circuit with a multi-controlled X gate.
|
82
|
+
:include-source:
|
83
|
+
|
84
|
+
from qiskit.circuit.library import MCXGate
|
85
|
+
mcx = MCXGate(4)
|
86
|
+
|
87
|
+
from qiskit import QuantumCircuit
|
88
|
+
circuit = QuantumCircuit(5)
|
89
|
+
circuit.append(mcx, [0, 1, 4, 2, 3])
|
90
|
+
circuit.draw("mpl")
|
91
|
+
|
92
|
+
For circuits with abstract operations, the circuit context is taken into account during
|
93
|
+
transpilation. For example, if idle qubits are available, they can be used to obtain a shallower
|
94
|
+
circuit::
|
95
|
+
|
96
|
+
from qiskit import transpile
|
97
|
+
|
98
|
+
small_circuit = QuantumCircuit(5) # here we have no idle qubits
|
99
|
+
small_circuit.append(mcx, [0, 1, 4, 2, 3])
|
100
|
+
small_tqc = transpile(small_circuit, basis_gates=["u", "cx"])
|
101
|
+
print("No aux:", small_tqc.count_ops())
|
102
|
+
|
103
|
+
large_circuit = QuantumCircuit(10) # now we will have 5 idle qubits
|
104
|
+
large_circuit.append(mcx, [0, 1, 4, 2, 3])
|
105
|
+
large_tqc = transpile(large_circuit, basis_gates=["u", "cx"])
|
106
|
+
print("With aux:", large_tqc.count_ops())
|
107
|
+
|
108
|
+
Which prints:
|
109
|
+
|
110
|
+
.. parsed-literal::
|
111
|
+
|
112
|
+
No aux: OrderedDict([('u', 41), ('cx', 36)])
|
113
|
+
With aux: OrderedDict([('u', 24), ('cx', 18)])
|
114
|
+
|
115
|
+
Structural operations
|
116
|
+
These operations have a unique decomposition. As the compiler does not need to reason about
|
117
|
+
them on a higher level, they are implemented as functions that return a :class:`.QuantumCircuit`
|
118
|
+
object. For example:
|
119
|
+
|
120
|
+
.. plot::
|
121
|
+
:alt: The real amplitudes ansatz circuit.
|
122
|
+
:include-source:
|
123
|
+
|
124
|
+
from qiskit.circuit.library import real_amplitudes
|
125
|
+
|
126
|
+
ansatz = real_amplitudes(5, entanglement="pairwise")
|
127
|
+
ansatz.draw("mpl")
|
128
|
+
|
129
|
+
|
130
|
+
.. _standard-gates:
|
45
131
|
|
46
132
|
Standard gates
|
47
133
|
==============
|
@@ -53,12 +139,15 @@ and :meth:`~qiskit.circuit.Gate.control`, which we can generally only apply to u
|
|
53
139
|
|
54
140
|
For example:
|
55
141
|
|
56
|
-
..
|
142
|
+
.. plot::
|
143
|
+
:alt: The X gate and the matrix, power, and control methods.
|
144
|
+
:include-source:
|
145
|
+
:nofigs:
|
57
146
|
|
58
147
|
from qiskit.circuit.library import XGate
|
59
148
|
gate = XGate()
|
60
149
|
print(gate.to_matrix()) # X gate
|
61
|
-
print(gate.power(1/2).to_matrix()) # √X gate
|
150
|
+
print(gate.power(1/2).to_matrix()) # √X gate -- see also the SXGate
|
62
151
|
print(gate.control(1).to_matrix()) # CX (controlled X) gate
|
63
152
|
|
64
153
|
.. code-block:: text
|
@@ -72,52 +161,27 @@ For example:
|
|
72
161
|
[0.+0.j 0.+0.j 1.+0.j 0.+0.j]
|
73
162
|
[0.+0.j 1.+0.j 0.+0.j 0.+0.j]]
|
74
163
|
|
164
|
+
|
165
|
+
The function :func:`.get_standard_gate_name_mapping` allows you to see the available standard gates
|
166
|
+
and operations.
|
167
|
+
|
168
|
+
.. autofunction:: get_standard_gate_name_mapping
|
169
|
+
|
170
|
+
1-qubit standard gates
|
171
|
+
----------------------
|
172
|
+
|
75
173
|
.. autosummary::
|
76
174
|
:toctree: ../stubs/
|
77
|
-
:template: autosummary/class_no_inherited_members.rst
|
78
175
|
|
79
|
-
C3XGate
|
80
|
-
C3SXGate
|
81
|
-
C4XGate
|
82
|
-
CCXGate
|
83
|
-
DCXGate
|
84
|
-
CHGate
|
85
|
-
CPhaseGate
|
86
|
-
CRXGate
|
87
|
-
CRYGate
|
88
|
-
CRZGate
|
89
|
-
CSGate
|
90
|
-
CSdgGate
|
91
|
-
CSwapGate
|
92
|
-
CSXGate
|
93
|
-
CUGate
|
94
|
-
CU1Gate
|
95
|
-
CU3Gate
|
96
|
-
CXGate
|
97
|
-
CYGate
|
98
|
-
CZGate
|
99
|
-
CCZGate
|
100
|
-
ECRGate
|
101
176
|
HGate
|
102
177
|
IGate
|
103
|
-
MSGate
|
104
178
|
PhaseGate
|
105
|
-
RCCXGate
|
106
|
-
RC3XGate
|
107
179
|
RGate
|
108
180
|
RXGate
|
109
|
-
RXXGate
|
110
181
|
RYGate
|
111
|
-
RYYGate
|
112
182
|
RZGate
|
113
|
-
RZZGate
|
114
|
-
RZXGate
|
115
|
-
XXMinusYYGate
|
116
|
-
XXPlusYYGate
|
117
183
|
SGate
|
118
184
|
SdgGate
|
119
|
-
SwapGate
|
120
|
-
iSwapGate
|
121
185
|
SXGate
|
122
186
|
SXdgGate
|
123
187
|
TGate
|
@@ -129,9 +193,66 @@ For example:
|
|
129
193
|
XGate
|
130
194
|
YGate
|
131
195
|
ZGate
|
196
|
+
|
197
|
+
2-qubit standard gates
|
198
|
+
----------------------
|
199
|
+
|
200
|
+
.. autosummary::
|
201
|
+
:toctree: ../stubs/
|
202
|
+
|
203
|
+
CHGate
|
204
|
+
CPhaseGate
|
205
|
+
CRXGate
|
206
|
+
CRYGate
|
207
|
+
CRZGate
|
208
|
+
CSGate
|
209
|
+
CSdgGate
|
210
|
+
CSXGate
|
211
|
+
CUGate
|
212
|
+
CU1Gate
|
213
|
+
CU3Gate
|
214
|
+
CXGate
|
215
|
+
CYGate
|
216
|
+
CZGate
|
217
|
+
DCXGate
|
218
|
+
ECRGate
|
219
|
+
iSwapGate
|
220
|
+
RXXGate
|
221
|
+
RYYGate
|
222
|
+
RZXGate
|
223
|
+
RZZGate
|
224
|
+
SwapGate
|
225
|
+
XXMinusYYGate
|
226
|
+
XXPlusYYGate
|
227
|
+
|
228
|
+
3+ qubit standard gates
|
229
|
+
-----------------------
|
230
|
+
|
231
|
+
.. autosummary::
|
232
|
+
:toctree: ../stubs/
|
233
|
+
|
234
|
+
C3SXGate
|
235
|
+
C3XGate
|
236
|
+
C4XGate
|
237
|
+
CCXGate
|
238
|
+
CCZGate
|
239
|
+
CSwapGate
|
240
|
+
RCCXGate
|
241
|
+
RC3XGate
|
242
|
+
|
243
|
+
Global standard gates
|
244
|
+
---------------------
|
245
|
+
|
246
|
+
The following gate is global and does not take any qubit arguments.
|
247
|
+
|
248
|
+
.. autosummary::
|
249
|
+
:toctree: ../stubs/
|
250
|
+
|
132
251
|
GlobalPhaseGate
|
133
252
|
|
134
253
|
|
254
|
+
.. _standard-directives:
|
255
|
+
|
135
256
|
Standard Directives
|
136
257
|
===================
|
137
258
|
|
@@ -139,24 +260,28 @@ Directives are operations to the quantum stack that are meant to be interpreted
|
|
139
260
|
the transpiler. In general, the transpiler or backend might optionally ignore them if there is no
|
140
261
|
implementation for them.
|
141
262
|
|
142
|
-
* :class
|
263
|
+
* :class:`~qiskit.circuit.Barrier`
|
264
|
+
|
265
|
+
|
266
|
+
.. _standard-operations:
|
143
267
|
|
144
268
|
Standard Operations
|
145
269
|
===================
|
146
270
|
|
147
271
|
Operations are non-reversible changes in the quantum state of the circuit.
|
148
272
|
|
149
|
-
* :class
|
150
|
-
* :class
|
273
|
+
* :class:`~qiskit.circuit.Measure`
|
274
|
+
* :class:`~qiskit.circuit.Reset`
|
151
275
|
|
152
|
-
Generalized Gates
|
153
|
-
=================
|
154
276
|
|
155
|
-
|
156
|
-
set the amount of qubits involved at instantiation time.
|
277
|
+
.. _generalized-gates:
|
157
278
|
|
279
|
+
Generalized Gates
|
280
|
+
=================
|
158
281
|
|
159
|
-
|
282
|
+
This module extends the standard gates with a broader collection of basic gates. This includes
|
283
|
+
gates that are variadic, meaning that the number of qubits depends on the input.
|
284
|
+
For example::
|
160
285
|
|
161
286
|
from qiskit.circuit.library import DiagonalGate
|
162
287
|
|
@@ -166,33 +291,22 @@ set the amount of qubits involved at instantiation time.
|
|
166
291
|
diagonal = DiagonalGate([1, 1, 1, -1])
|
167
292
|
print(diagonal.num_qubits)
|
168
293
|
|
294
|
+
which prints:
|
295
|
+
|
169
296
|
.. code-block:: text
|
170
297
|
|
171
298
|
1
|
172
299
|
2
|
173
300
|
|
174
|
-
|
175
301
|
.. autosummary::
|
176
302
|
:toctree: ../stubs/
|
177
|
-
:template: autosummary/class_no_inherited_members.rst
|
178
303
|
|
179
|
-
Diagonal
|
180
304
|
DiagonalGate
|
181
|
-
MCMT
|
182
|
-
MCMTVChain
|
183
|
-
Permutation
|
184
305
|
PermutationGate
|
185
|
-
GMS
|
186
|
-
GR
|
187
|
-
GRX
|
188
|
-
GRY
|
189
|
-
GRZ
|
190
306
|
MCMTGate
|
191
307
|
MCPhaseGate
|
192
308
|
MCXGate
|
193
|
-
|
194
|
-
MCXRecursive
|
195
|
-
MCXVChain
|
309
|
+
MSGate
|
196
310
|
RVGate
|
197
311
|
PauliGate
|
198
312
|
LinearFunction
|
@@ -204,75 +318,117 @@ set the amount of qubits involved at instantiation time.
|
|
204
318
|
UCRYGate
|
205
319
|
UCRZGate
|
206
320
|
|
207
|
-
|
208
|
-
|
321
|
+
The above objects derive :class:`.Gate` or :class:`~.circuit.Instruction`, which allows the
|
322
|
+
compiler to reason about them on an abstract level. We therefore suggest using these instead
|
323
|
+
of the following, which derive :class:`.QuantumCircuit` and are eagerly constructed.
|
209
324
|
|
210
|
-
|
211
|
-
|
212
|
-
|
325
|
+
.. autosummary::
|
326
|
+
:toctree: ../stubs/
|
327
|
+
:template: autosummary/class_no_inherited_members.rst
|
213
328
|
|
329
|
+
Diagonal
|
330
|
+
MCMT
|
331
|
+
MCMTVChain
|
332
|
+
MCXGrayCode
|
333
|
+
MCXRecursive
|
334
|
+
MCXVChain
|
335
|
+
Permutation
|
336
|
+
GMS
|
337
|
+
GR
|
338
|
+
GRX
|
339
|
+
GRY
|
340
|
+
GRZ
|
341
|
+
|
342
|
+
.. _boolean-logic:
|
343
|
+
|
344
|
+
Boolean Logic
|
345
|
+
=============
|
346
|
+
|
347
|
+
These :class:`.Gate`\ s implement boolean logic operations, such as the logical
|
348
|
+
``or`` of a set of qubit states.
|
214
349
|
|
215
350
|
.. autosummary::
|
216
351
|
:toctree: ../stubs/
|
217
|
-
:template: autosummary/class_no_inherited_members.rst
|
218
352
|
|
219
|
-
AND
|
220
353
|
AndGate
|
221
|
-
OR
|
222
354
|
OrGate
|
223
|
-
XOR
|
224
355
|
BitwiseXorGate
|
225
|
-
random_bitwise_xor
|
226
|
-
InnerProduct
|
227
356
|
InnerProductGate
|
228
357
|
|
358
|
+
The above objects derive :class:`.Gate` (or return this type), which allows the
|
359
|
+
compiler to reason about them on an abstract level. We therefore suggest using these instead
|
360
|
+
of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
|
229
361
|
|
230
|
-
|
231
|
-
|
362
|
+
.. autosummary::
|
363
|
+
:toctree: ../stubs/
|
364
|
+
:template: autosummary/class_no_inherited_members.rst
|
232
365
|
|
233
|
-
|
234
|
-
|
235
|
-
|
366
|
+
AND
|
367
|
+
OR
|
368
|
+
XOR
|
369
|
+
InnerProduct
|
370
|
+
|
371
|
+
|
372
|
+
A random bitwise ``xor`` circuit can be directly generated using:
|
236
373
|
|
237
374
|
.. autosummary::
|
238
375
|
:toctree: ../stubs/
|
239
|
-
:template: autosummary/class_no_inherited_members.rst
|
240
376
|
|
241
|
-
|
242
|
-
QFTGate
|
377
|
+
random_bitwise_xor
|
243
378
|
|
244
|
-
|
245
|
-
===================
|
379
|
+
.. _basis-change:
|
246
380
|
|
247
|
-
|
248
|
-
|
381
|
+
Basis Change
|
382
|
+
============
|
249
383
|
|
250
|
-
|
251
|
-
|
384
|
+
These gates perform basis transformations of the qubit states. For example,
|
385
|
+
in the case of the Quantum Fourier Transform (QFT), it transforms between
|
386
|
+
the computational basis and the Fourier basis.
|
252
387
|
|
253
388
|
.. autosummary::
|
254
389
|
:toctree: ../stubs/
|
255
|
-
:template: autosummary/class_no_inherited_members.rst
|
256
390
|
|
257
|
-
|
391
|
+
QFTGate
|
258
392
|
|
259
|
-
|
260
|
-
|
393
|
+
The above object derives :class:`.Gate`, which allows the
|
394
|
+
compiler to reason about it on an abstract level. We therefore suggest using this instead
|
395
|
+
of the following which derives :class:`.QuantumCircuit` and is eagerly constructed.
|
261
396
|
|
262
397
|
.. autosummary::
|
263
398
|
:toctree: ../stubs/
|
264
399
|
:template: autosummary/class_no_inherited_members.rst
|
265
400
|
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
401
|
+
QFT
|
402
|
+
|
403
|
+
.. _arithmetic:
|
404
|
+
|
405
|
+
Arithmetic
|
406
|
+
==========
|
407
|
+
|
408
|
+
These gates and circuits perform classical arithmetic, such as addition or multiplication.
|
272
409
|
|
273
410
|
Adders
|
274
411
|
------
|
275
412
|
|
413
|
+
Adders compute the sum of two :math:`n`-qubit registers, that is
|
414
|
+
|
415
|
+
.. math::
|
416
|
+
|
417
|
+
|a\rangle_n |b\rangle_n \mapsto |a\rangle_n |a + b\rangle_{t},
|
418
|
+
|
419
|
+
where the size :math:`t` of the output register depends on the type of adder used.
|
420
|
+
|
421
|
+
.. autosummary::
|
422
|
+
:toctree: ../stubs/
|
423
|
+
|
424
|
+
ModularAdderGate
|
425
|
+
HalfAdderGate
|
426
|
+
FullAdderGate
|
427
|
+
|
428
|
+
The above objects derive :class:`.Gate`, which allows the
|
429
|
+
compiler to reason about them on an abstract level. We therefore suggest using these instead
|
430
|
+
of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
|
431
|
+
|
276
432
|
.. autosummary::
|
277
433
|
:toctree: ../stubs/
|
278
434
|
:template: autosummary/class_no_inherited_members.rst
|
@@ -280,79 +436,129 @@ Adders
|
|
280
436
|
DraperQFTAdder
|
281
437
|
CDKMRippleCarryAdder
|
282
438
|
VBERippleCarryAdder
|
283
|
-
WeightedAdder
|
284
|
-
ModularAdderGate
|
285
|
-
HalfAdderGate
|
286
|
-
FullAdderGate
|
287
439
|
|
288
440
|
Multipliers
|
289
441
|
-----------
|
290
442
|
|
443
|
+
Multipliers compute the product of two :math:`n`-qubit registers, that is
|
444
|
+
|
445
|
+
.. math::
|
446
|
+
|
447
|
+
|a\rangle_n |b\rangle_n |0\rangle_{t} \mapsto |a\rangle_n |b\rangle_n |a \cdot b\rangle_t,
|
448
|
+
|
449
|
+
where :math:`t` is the number of bits used to represent the result.
|
450
|
+
|
451
|
+
.. autosummary::
|
452
|
+
:toctree: ../stubs/
|
453
|
+
|
454
|
+
MultiplierGate
|
455
|
+
|
456
|
+
The above object derives :class:`.Gate`, which allows the
|
457
|
+
compiler to reason about it on an abstract level. We therefore suggest using this instead
|
458
|
+
of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
|
459
|
+
|
291
460
|
.. autosummary::
|
292
461
|
:toctree: ../stubs/
|
293
462
|
:template: autosummary/class_no_inherited_members.rst
|
294
463
|
|
295
464
|
HRSCumulativeMultiplier
|
296
465
|
RGQFTMultiplier
|
297
|
-
MultiplierGate
|
298
466
|
|
299
|
-
|
300
|
-
|
467
|
+
Amplitude Functions
|
468
|
+
-------------------
|
469
|
+
|
470
|
+
An amplitude function approximates a function :math:`f: \{0, ..., 2^n - 1\} \rightarrow [0, 1]`
|
471
|
+
applied on the amplitudes of :math:`n` qubits. See the class docstring for more detailed information.
|
301
472
|
|
302
473
|
.. autosummary::
|
303
474
|
:toctree: ../stubs/
|
304
|
-
:template: autosummary/class_no_inherited_members.rst
|
305
475
|
|
306
|
-
|
476
|
+
LinearAmplitudeFunctionGate
|
307
477
|
|
308
|
-
|
309
|
-
|
478
|
+
The above object derives :class:`.Gate`, which allows the
|
479
|
+
compiler to reason about it on an abstract level. We therefore suggest using this instead
|
480
|
+
of the following which derives :class:`.QuantumCircuit` and is eagerly constructed.
|
310
481
|
|
311
482
|
.. autosummary::
|
312
483
|
:toctree: ../stubs/
|
313
484
|
:template: autosummary/class_no_inherited_members.rst
|
314
485
|
|
315
|
-
|
486
|
+
LinearAmplitudeFunction
|
316
487
|
|
317
|
-
|
488
|
+
Functional Pauli Rotations
|
318
489
|
--------------------------
|
319
490
|
|
491
|
+
Functional Pauli rotations implement operations of the form
|
492
|
+
|
493
|
+
.. math::
|
494
|
+
|
495
|
+
|x\rangle |0\rangle \mapsto \cos(f(x))|x\rangle|0\rangle + \sin(f(x))|x\rangle|1\rangle
|
496
|
+
|
497
|
+
using Pauli-:math:`Y` rotations for different types of functions :math:`f`, such as linear,
|
498
|
+
polynomial, or a piecewise version of these. They are similar to the amplitude functions above, but
|
499
|
+
without pre- and post-processing for the domain and image of the target function.
|
500
|
+
|
501
|
+
.. autosummary::
|
502
|
+
:toctree: ../stubs/
|
503
|
+
|
504
|
+
LinearPauliRotationsGate
|
505
|
+
PolynomialPauliRotationsGate
|
506
|
+
PiecewiseLinearPauliRotationsGate
|
507
|
+
PiecewisePolynomialPauliRotationsGate
|
508
|
+
PiecewiseChebyshevGate
|
509
|
+
|
510
|
+
The above objects derive :class:`.Gate`, which allows the
|
511
|
+
compiler to reason about them on an abstract level. We therefore suggest using these instead
|
512
|
+
of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
|
513
|
+
|
320
514
|
.. autosummary::
|
321
515
|
:toctree: ../stubs/
|
322
516
|
:template: autosummary/class_no_inherited_members.rst
|
323
517
|
|
324
|
-
|
518
|
+
FunctionalPauliRotations
|
519
|
+
LinearPauliRotations
|
520
|
+
PolynomialPauliRotations
|
521
|
+
PiecewiseLinearPauliRotations
|
522
|
+
PiecewisePolynomialPauliRotations
|
523
|
+
PiecewiseChebyshev
|
325
524
|
|
326
|
-
Particular Quantum Circuits
|
327
|
-
===========================
|
328
525
|
|
329
|
-
|
330
|
-
|
526
|
+
Other arithmetic functions
|
527
|
+
--------------------------
|
528
|
+
|
529
|
+
Here we list additional arithmetic circuits. See the individual class docstrings for more details.
|
331
530
|
|
332
531
|
.. autosummary::
|
333
532
|
:toctree: ../stubs/
|
334
|
-
:template: autosummary/class_no_inherited_members.rst
|
335
533
|
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
IQP
|
341
|
-
QuantumVolume
|
342
|
-
PhaseEstimation
|
343
|
-
GroverOperator
|
344
|
-
PhaseOracle
|
345
|
-
PauliEvolutionGate
|
346
|
-
HamiltonianGate
|
347
|
-
UnitaryOverlap
|
534
|
+
ExactReciprocalGate
|
535
|
+
IntegerComparatorGate
|
536
|
+
QuadraticFormGate
|
537
|
+
WeightedSumGate
|
348
538
|
|
349
|
-
|
350
|
-
to
|
539
|
+
The above objects derive :class:`.Gate`, which allows the
|
540
|
+
compiler to reason about them on an abstract level. We therefore suggest using these instead
|
541
|
+
of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
|
351
542
|
|
352
543
|
.. autosummary::
|
353
544
|
:toctree: ../stubs/
|
354
545
|
:template: autosummary/class_no_inherited_members.rst
|
355
546
|
|
547
|
+
ExactReciprocal
|
548
|
+
IntegerComparator
|
549
|
+
QuadraticForm
|
550
|
+
WeightedAdder
|
551
|
+
|
552
|
+
.. _particular:
|
553
|
+
|
554
|
+
Particular Quantum Circuits
|
555
|
+
===========================
|
556
|
+
|
557
|
+
The following gates and quantum circuits define specific operations of interest:
|
558
|
+
|
559
|
+
.. autosummary::
|
560
|
+
:toctree: ../stubs/
|
561
|
+
|
356
562
|
fourier_checking
|
357
563
|
hidden_linear_function
|
358
564
|
iqp
|
@@ -361,17 +567,68 @@ to use the following functions to construct them:
|
|
361
567
|
phase_estimation
|
362
568
|
grover_operator
|
363
569
|
unitary_overlap
|
570
|
+
GraphStateGate
|
571
|
+
PauliEvolutionGate
|
572
|
+
HamiltonianGate
|
364
573
|
|
574
|
+
Below we provide the same operations as classes deriving :class:`.QuantumCircuit`. For better
|
575
|
+
runtime and compiler performance, however, we suggest using above functions and gates.
|
576
|
+
|
577
|
+
.. autosummary::
|
578
|
+
:toctree: ../stubs/
|
579
|
+
:template: autosummary/class_no_inherited_members.rst
|
580
|
+
|
581
|
+
FourierChecking
|
582
|
+
GraphState
|
583
|
+
HiddenLinearFunction
|
584
|
+
IQP
|
585
|
+
QuantumVolume
|
586
|
+
PhaseEstimation
|
587
|
+
GroverOperator
|
588
|
+
UnitaryOverlap
|
589
|
+
|
590
|
+
.. _n-local:
|
365
591
|
|
366
592
|
N-local circuits
|
367
593
|
================
|
368
594
|
|
369
595
|
The following functions return a parameterized :class:`.QuantumCircuit` to use as ansatz in
|
370
|
-
a broad set of variational quantum algorithms
|
596
|
+
a broad set of variational quantum algorithms.
|
597
|
+
|
598
|
+
For example, we can build a variational circuit
|
599
|
+
|
600
|
+
.. plot::
|
601
|
+
:alt: The efficient SU2 ansatz circuit...
|
602
|
+
:context:
|
603
|
+
|
604
|
+
from qiskit.circuit.library import efficient_su2
|
605
|
+
|
606
|
+
num_qubits = 4
|
607
|
+
ansatz = efficient_su2(num_qubits, entanglement="pairwise")
|
608
|
+
ansatz.draw("mpl")
|
609
|
+
|
610
|
+
and combine it with
|
611
|
+
|
612
|
+
.. plot::
|
613
|
+
:alt: ... combined with the ZZ feature map.
|
614
|
+
:include-source:
|
615
|
+
:context:
|
616
|
+
|
617
|
+
from qiskit.circuit.library import zz_feature_map
|
618
|
+
|
619
|
+
circuit = zz_feature_map(num_qubits)
|
620
|
+
circuit.barrier()
|
621
|
+
circuit.compose(ansatz, inplace=True)
|
622
|
+
|
623
|
+
circuit.draw("mpl")
|
624
|
+
|
625
|
+
to obtain a circuit for variational quantum classification.
|
626
|
+
|
627
|
+
The following functions all construct variational circuits and are optimized for a fast
|
628
|
+
construction:
|
371
629
|
|
372
630
|
.. autosummary::
|
373
631
|
:toctree: ../stubs/
|
374
|
-
:template: autosummary/class_no_inherited_members.rst
|
375
632
|
|
376
633
|
n_local
|
377
634
|
efficient_su2
|
@@ -382,9 +639,9 @@ a broad set of variational quantum algorithms:
|
|
382
639
|
hamiltonian_variational_ansatz
|
383
640
|
evolved_operator_ansatz
|
384
641
|
|
385
|
-
|
386
|
-
|
387
|
-
|
642
|
+
While we suggest using the above functions, we also continue supporting the following
|
643
|
+
:class:`.BlueprintCircuit`, which wrap the circuits into a block
|
644
|
+
and allow for inplace mutations of the circuits:
|
388
645
|
|
389
646
|
.. autosummary::
|
390
647
|
:toctree: ../stubs/
|
@@ -400,6 +657,8 @@ They are heavily used in near-term algorithms in e.g. Chemistry, Physics or Opti
|
|
400
657
|
QAOAAnsatz
|
401
658
|
|
402
659
|
|
660
|
+
.. _data-encoding:
|
661
|
+
|
403
662
|
Data encoding circuits
|
404
663
|
======================
|
405
664
|
|
@@ -408,14 +667,14 @@ encoding circuits in a series of variational quantum algorithms:
|
|
408
667
|
|
409
668
|
.. autosummary::
|
410
669
|
:toctree: ../stubs/
|
411
|
-
:template: autosummary/class_no_inherited_members.rst
|
412
670
|
|
413
671
|
pauli_feature_map
|
414
672
|
z_feature_map
|
415
673
|
zz_feature_map
|
416
674
|
|
417
|
-
|
418
|
-
|
675
|
+
While we suggest using the above functions, we also continue supporting the following
|
676
|
+
:class:`.BlueprintCircuit`, which wrap the circuits into a block
|
677
|
+
and allow for inplace mutations of the circuits:
|
419
678
|
|
420
679
|
.. autosummary::
|
421
680
|
:toctree: ../stubs/
|
@@ -426,6 +685,8 @@ data in quantum states and are used as feature maps for classification.
|
|
426
685
|
ZZFeatureMap
|
427
686
|
|
428
687
|
|
688
|
+
.. _data-preparation:
|
689
|
+
|
429
690
|
Data preparation circuits
|
430
691
|
=========================
|
431
692
|
|
@@ -433,11 +694,51 @@ The following operations are used for state preparation:
|
|
433
694
|
|
434
695
|
.. autosummary::
|
435
696
|
:toctree: ../stubs/
|
436
|
-
:template: autosummary/class_no_inherited_members.rst
|
437
697
|
|
438
698
|
StatePreparation
|
439
699
|
Initialize
|
440
700
|
|
701
|
+
.. _oracles:
|
702
|
+
|
703
|
+
Oracles
|
704
|
+
=======
|
705
|
+
|
706
|
+
An "oracle" can refer to a variety of black-box operations on quantum states. Here, we consider
|
707
|
+
oracles implementing boolean functions :math:`f: \{0, ..., 2^n - 1\} \rightarrow \{0, 1\}` via
|
708
|
+
phase-flips
|
709
|
+
|
710
|
+
.. math::
|
711
|
+
|
712
|
+
|x\rangle_n \mapsto (-1)^{f(x)} |x\rangle_n,
|
713
|
+
|
714
|
+
or bit-flips
|
715
|
+
|
716
|
+
.. math::
|
717
|
+
|
718
|
+
|x\rangle_n |b\rangle \mapsto |x\rangle_n |b \oplus f(x)\rangle.
|
719
|
+
|
720
|
+
These are implemented in
|
721
|
+
|
722
|
+
.. autosummary::
|
723
|
+
:toctree: ../stubs/
|
724
|
+
|
725
|
+
PhaseOracleGate
|
726
|
+
BitFlipOracleGate
|
727
|
+
|
728
|
+
and an important building block for Grover's algorithm (see :func:`.grover_operator`).
|
729
|
+
|
730
|
+
In addition to the :class:`.Gate`-based implementation we also support the
|
731
|
+
:class:`.QuantumCircuit`-version of the phase flip oracle
|
732
|
+
|
733
|
+
.. autosummary::
|
734
|
+
:toctree: ../stubs/
|
735
|
+
:template: autosummary/class_no_inherited_members.rst
|
736
|
+
|
737
|
+
PhaseOracle
|
738
|
+
|
739
|
+
|
740
|
+
.. _template:
|
741
|
+
|
441
742
|
Template circuits
|
442
743
|
=================
|
443
744
|
|
@@ -447,7 +748,10 @@ to replace the match with the inverse of the remainder from the template.
|
|
447
748
|
|
448
749
|
In this example, the identity constant in a template is checked:
|
449
750
|
|
450
|
-
..
|
751
|
+
.. plot::
|
752
|
+
:alt: A Toffoli template circuit.
|
753
|
+
:include-source:
|
754
|
+
:nofigs:
|
451
755
|
|
452
756
|
from qiskit.circuit.library.templates import template_nct_4b_1
|
453
757
|
from qiskit.quantum_info import Operator
|
@@ -613,20 +917,30 @@ from .arithmetic import (
|
|
613
917
|
MultiplierGate,
|
614
918
|
FunctionalPauliRotations,
|
615
919
|
LinearPauliRotations,
|
920
|
+
LinearPauliRotationsGate,
|
616
921
|
PiecewiseLinearPauliRotations,
|
922
|
+
PiecewiseLinearPauliRotationsGate,
|
617
923
|
PiecewisePolynomialPauliRotations,
|
924
|
+
PiecewisePolynomialPauliRotationsGate,
|
618
925
|
PolynomialPauliRotations,
|
926
|
+
PolynomialPauliRotationsGate,
|
619
927
|
IntegerComparator,
|
928
|
+
IntegerComparatorGate,
|
620
929
|
WeightedAdder,
|
930
|
+
WeightedSumGate,
|
621
931
|
QuadraticForm,
|
932
|
+
QuadraticFormGate,
|
622
933
|
LinearAmplitudeFunction,
|
934
|
+
LinearAmplitudeFunctionGate,
|
623
935
|
VBERippleCarryAdder,
|
624
936
|
CDKMRippleCarryAdder,
|
625
937
|
DraperQFTAdder,
|
626
938
|
PiecewiseChebyshev,
|
939
|
+
PiecewiseChebyshevGate,
|
627
940
|
HRSCumulativeMultiplier,
|
628
941
|
RGQFTMultiplier,
|
629
942
|
ExactReciprocal,
|
943
|
+
ExactReciprocalGate,
|
630
944
|
)
|
631
945
|
|
632
946
|
from .n_local import (
|
@@ -664,6 +978,7 @@ from .hidden_linear_function import HiddenLinearFunction, hidden_linear_function
|
|
664
978
|
from .iqp import IQP, iqp, random_iqp
|
665
979
|
from .phase_estimation import PhaseEstimation, phase_estimation
|
666
980
|
from .grover_operator import GroverOperator, grover_operator
|
667
|
-
from .phase_oracle import PhaseOracle
|
981
|
+
from .phase_oracle import PhaseOracle, PhaseOracleGate
|
982
|
+
from .bit_flip_oracle import BitFlipOracleGate
|
668
983
|
from .overlap import UnitaryOverlap, unitary_overlap
|
669
984
|
from .standard_gates import get_standard_gate_name_mapping
|