qiskit 1.3.0__cp39-abi3-win32.whl → 1.3.0b1__cp39-abi3-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qiskit/VERSION.txt +1 -1
- qiskit/__init__.py +1 -20
- qiskit/_accelerate.pyd +0 -0
- qiskit/assembler/assemble_schedules.py +0 -2
- qiskit/circuit/__init__.py +1 -44
- qiskit/circuit/_standard_gates_commutations.py +0 -585
- qiskit/circuit/barrier.py +0 -2
- qiskit/circuit/controlflow/builder.py +3 -3
- qiskit/circuit/controlflow/if_else.py +5 -13
- qiskit/circuit/controlflow/while_loop.py +2 -10
- qiskit/circuit/delay.py +3 -20
- qiskit/circuit/equivalence.py +214 -13
- qiskit/circuit/gate.py +1 -3
- qiskit/circuit/instruction.py +11 -32
- qiskit/circuit/instructionset.py +0 -2
- qiskit/circuit/library/__init__.py +14 -110
- qiskit/circuit/library/arithmetic/__init__.py +2 -9
- qiskit/circuit/library/arithmetic/adders/__init__.py +0 -1
- qiskit/circuit/library/arithmetic/adders/adder.py +2 -154
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +56 -20
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +1 -14
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +91 -21
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
- qiskit/circuit/library/arithmetic/multipliers/__init__.py +0 -1
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -8
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +3 -94
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +1 -8
- qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
- qiskit/circuit/library/basis_change/qft.py +38 -20
- qiskit/circuit/library/blueprintcircuit.py +0 -64
- qiskit/circuit/library/boolean_logic/__init__.py +4 -4
- qiskit/circuit/library/boolean_logic/inner_product.py +4 -81
- qiskit/circuit/library/boolean_logic/quantum_and.py +4 -107
- qiskit/circuit/library/boolean_logic/quantum_or.py +3 -107
- qiskit/circuit/library/boolean_logic/quantum_xor.py +3 -97
- qiskit/circuit/library/data_preparation/__init__.py +3 -6
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +29 -342
- qiskit/circuit/library/data_preparation/{_z_feature_map.py → z_feature_map.py} +34 -45
- qiskit/circuit/library/data_preparation/zz_feature_map.py +118 -0
- qiskit/circuit/library/fourier_checking.py +11 -72
- qiskit/circuit/library/generalized_gates/__init__.py +1 -1
- qiskit/circuit/library/generalized_gates/diagonal.py +51 -45
- qiskit/circuit/library/generalized_gates/gms.py +14 -67
- qiskit/circuit/library/generalized_gates/gr.py +4 -4
- qiskit/circuit/library/generalized_gates/isometry.py +2 -2
- qiskit/circuit/library/generalized_gates/linear_function.py +6 -12
- qiskit/circuit/library/generalized_gates/mcmt.py +107 -167
- qiskit/circuit/library/generalized_gates/permutation.py +6 -8
- qiskit/circuit/library/generalized_gates/rv.py +9 -8
- qiskit/circuit/library/graph_state.py +10 -93
- qiskit/circuit/library/grover_operator.py +2 -270
- qiskit/circuit/library/hidden_linear_function.py +20 -83
- qiskit/circuit/library/iqp.py +20 -99
- qiskit/circuit/library/n_local/__init__.py +7 -19
- qiskit/circuit/library/n_local/efficient_su2.py +5 -118
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +0 -259
- qiskit/circuit/library/n_local/excitation_preserving.py +6 -130
- qiskit/circuit/library/n_local/n_local.py +5 -406
- qiskit/circuit/library/n_local/pauli_two_design.py +4 -106
- qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -80
- qiskit/circuit/library/n_local/real_amplitudes.py +7 -127
- qiskit/circuit/library/n_local/two_local.py +7 -14
- qiskit/circuit/library/overlap.py +26 -91
- qiskit/circuit/library/pauli_evolution.py +15 -17
- qiskit/circuit/library/phase_estimation.py +4 -80
- qiskit/circuit/library/quantum_volume.py +20 -72
- qiskit/circuit/library/standard_gates/__init__.py +1 -20
- qiskit/circuit/library/standard_gates/dcx.py +1 -2
- qiskit/circuit/library/standard_gates/ecr.py +2 -2
- qiskit/circuit/library/standard_gates/h.py +3 -4
- qiskit/circuit/library/standard_gates/i.py +1 -2
- qiskit/circuit/library/standard_gates/iswap.py +2 -2
- qiskit/circuit/library/standard_gates/p.py +12 -20
- qiskit/circuit/library/standard_gates/r.py +1 -1
- qiskit/circuit/library/standard_gates/rx.py +3 -4
- qiskit/circuit/library/standard_gates/rxx.py +2 -2
- qiskit/circuit/library/standard_gates/ry.py +3 -4
- qiskit/circuit/library/standard_gates/ryy.py +2 -2
- qiskit/circuit/library/standard_gates/rz.py +12 -13
- qiskit/circuit/library/standard_gates/rzx.py +6 -6
- qiskit/circuit/library/standard_gates/rzz.py +1 -1
- qiskit/circuit/library/standard_gates/s.py +4 -4
- qiskit/circuit/library/standard_gates/swap.py +3 -3
- qiskit/circuit/library/standard_gates/sx.py +3 -4
- qiskit/circuit/library/standard_gates/t.py +2 -2
- qiskit/circuit/library/standard_gates/u.py +3 -11
- qiskit/circuit/library/standard_gates/u1.py +15 -65
- qiskit/circuit/library/standard_gates/u2.py +1 -4
- qiskit/circuit/library/standard_gates/u3.py +3 -31
- qiskit/circuit/library/standard_gates/x.py +5 -7
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -2
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -2
- qiskit/circuit/library/standard_gates/y.py +3 -4
- qiskit/circuit/library/standard_gates/z.py +3 -3
- qiskit/circuit/library/templates/clifford/clifford_2_1.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +7 -9
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +9 -10
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +7 -9
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +8 -10
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +14 -16
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +12 -14
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +12 -14
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +10 -12
- qiskit/circuit/library/templates/rzx/rzx_cy.py +10 -11
- qiskit/circuit/library/templates/rzx/rzx_xz.py +15 -16
- qiskit/circuit/library/templates/rzx/rzx_yz.py +10 -12
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +20 -22
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +15 -16
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +15 -17
- qiskit/circuit/parameter.py +0 -4
- qiskit/circuit/parameterexpression.py +34 -167
- qiskit/circuit/quantumcircuit.py +126 -162
- qiskit/circuit/singleton.py +0 -2
- qiskit/circuit/store.py +0 -2
- qiskit/compiler/assembler.py +4 -17
- qiskit/compiler/scheduler.py +0 -2
- qiskit/compiler/sequencer.py +0 -2
- qiskit/compiler/transpiler.py +26 -81
- qiskit/converters/circuit_to_dag.py +2 -2
- qiskit/converters/circuit_to_dagdependency.py +1 -1
- qiskit/converters/circuit_to_dagdependency_v2.py +1 -1
- qiskit/converters/circuit_to_instruction.py +1 -1
- qiskit/converters/dag_to_circuit.py +5 -7
- qiskit/converters/dag_to_dagdependency.py +1 -1
- qiskit/converters/dag_to_dagdependency_v2.py +1 -1
- qiskit/converters/dagdependency_to_circuit.py +1 -5
- qiskit/converters/dagdependency_to_dag.py +1 -6
- qiskit/dagcircuit/collect_blocks.py +3 -3
- qiskit/dagcircuit/dagdependency.py +5 -18
- qiskit/dagcircuit/dagdependency_v2.py +1 -1
- qiskit/dagcircuit/dagnode.py +2 -2
- qiskit/passmanager/__init__.py +2 -2
- qiskit/primitives/backend_estimator.py +2 -5
- qiskit/primitives/backend_sampler_v2.py +18 -61
- qiskit/primitives/base/base_estimator.py +2 -2
- qiskit/primitives/containers/data_bin.py +1 -9
- qiskit/primitives/statevector_sampler.py +1 -1
- qiskit/primitives/utils.py +1 -1
- qiskit/providers/__init__.py +3 -3
- qiskit/providers/backend.py +1 -12
- qiskit/providers/backend_compat.py +3 -23
- qiskit/providers/basic_provider/basic_simulator.py +2 -12
- qiskit/providers/fake_provider/fake_pulse_backend.py +1 -6
- qiskit/providers/fake_provider/generic_backend_v2.py +30 -46
- qiskit/providers/models/pulsedefaults.py +0 -2
- qiskit/pulse/builder.py +18 -59
- qiskit/pulse/calibration_entries.py +1 -4
- qiskit/pulse/channels.py +0 -2
- qiskit/pulse/exceptions.py +0 -2
- qiskit/pulse/instruction_schedule_map.py +6 -21
- qiskit/pulse/instructions/acquire.py +0 -2
- qiskit/pulse/instructions/delay.py +0 -2
- qiskit/pulse/instructions/directives.py +0 -8
- qiskit/pulse/instructions/frequency.py +0 -3
- qiskit/pulse/instructions/instruction.py +0 -2
- qiskit/pulse/instructions/phase.py +0 -3
- qiskit/pulse/instructions/play.py +0 -2
- qiskit/pulse/instructions/reference.py +0 -2
- qiskit/pulse/instructions/snapshot.py +0 -2
- qiskit/pulse/library/pulse.py +0 -2
- qiskit/pulse/library/symbolic_pulses.py +0 -28
- qiskit/pulse/library/waveform.py +0 -2
- qiskit/pulse/macros.py +1 -1
- qiskit/pulse/schedule.py +13 -12
- qiskit/pulse/transforms/alignments.py +3 -5
- qiskit/pulse/transforms/dag.py +0 -7
- qiskit/qasm2/export.py +3 -5
- qiskit/qasm2/parse.py +2 -46
- qiskit/qasm3/__init__.py +0 -1
- qiskit/qasm3/ast.py +15 -123
- qiskit/qasm3/exporter.py +77 -103
- qiskit/qobj/converters/pulse_instruction.py +4 -6
- qiskit/qpy/__init__.py +0 -181
- qiskit/qpy/binary_io/circuits.py +5 -20
- qiskit/qpy/binary_io/schedules.py +4 -3
- qiskit/qpy/binary_io/value.py +13 -310
- qiskit/qpy/common.py +2 -46
- qiskit/qpy/formats.py +0 -7
- qiskit/qpy/interface.py +4 -40
- qiskit/quantum_info/__init__.py +0 -4
- qiskit/quantum_info/operators/channel/transformations.py +21 -28
- qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
- qiskit/quantum_info/operators/operator.py +8 -54
- qiskit/quantum_info/operators/symplectic/base_pauli.py +19 -11
- qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +1 -1
- qiskit/quantum_info/operators/symplectic/pauli.py +0 -2
- qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +2 -23
- qiskit/quantum_info/states/densitymatrix.py +5 -5
- qiskit/quantum_info/states/stabilizerstate.py +1 -1
- qiskit/quantum_info/states/statevector.py +6 -6
- qiskit/result/mitigation/base_readout_mitigator.py +1 -1
- qiskit/result/mitigation/correlated_readout_mitigator.py +1 -9
- qiskit/result/mitigation/local_readout_mitigator.py +1 -9
- qiskit/result/mitigation/utils.py +0 -57
- qiskit/scheduler/config.py +0 -2
- qiskit/scheduler/methods/basic.py +0 -3
- qiskit/scheduler/schedule_circuit.py +0 -2
- qiskit/scheduler/sequence.py +0 -2
- qiskit/synthesis/__init__.py +0 -25
- qiskit/synthesis/clifford/clifford_decompose_bm.py +2 -1
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +2 -3
- qiskit/synthesis/clifford/clifford_decompose_layers.py +1 -2
- qiskit/synthesis/evolution/__init__.py +0 -1
- qiskit/synthesis/evolution/lie_trotter.py +42 -16
- qiskit/synthesis/evolution/product_formula.py +238 -165
- qiskit/synthesis/evolution/qdrift.py +29 -36
- qiskit/synthesis/evolution/suzuki_trotter.py +27 -87
- qiskit/synthesis/multi_controlled/__init__.py +0 -1
- qiskit/synthesis/qft/qft_decompose_full.py +1 -19
- qiskit/synthesis/qft/qft_decompose_lnn.py +1 -2
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +1 -2
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +63 -4
- qiskit/synthesis/two_qubit/weyl.py +97 -0
- qiskit/synthesis/unitary/qsd.py +5 -5
- qiskit/transpiler/__init__.py +14 -21
- qiskit/transpiler/basepasses.py +1 -1
- qiskit/transpiler/passes/__init__.py +0 -2
- qiskit/transpiler/passes/basis/basis_translator.py +565 -9
- qiskit/transpiler/passes/basis/decompose.py +12 -45
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
- qiskit/transpiler/passes/calibration/pulse_gate.py +2 -4
- qiskit/transpiler/passes/calibration/rx_builder.py +7 -11
- qiskit/transpiler/passes/calibration/rzx_builder.py +30 -46
- qiskit/transpiler/passes/layout/disjoint_utils.py +13 -15
- qiskit/transpiler/passes/layout/sabre_layout.py +2 -7
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +0 -5
- qiskit/transpiler/passes/optimization/__init__.py +0 -1
- qiskit/transpiler/passes/optimization/collect_cliffords.py +3 -19
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +1 -1
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
- qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +1 -1
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +131 -48
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +2 -4
- qiskit/transpiler/passes/optimization/elide_permutations.py +32 -9
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +0 -2
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +11 -5
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
- qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +1 -1
- qiskit/transpiler/passes/optimization/template_matching/backward_match.py +5 -5
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +4 -4
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +2 -2
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +1 -1
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
- qiskit/transpiler/passes/routing/sabre_swap.py +3 -7
- qiskit/transpiler/passes/routing/star_prerouting.py +2 -2
- qiskit/transpiler/passes/scheduling/alap.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +2 -2
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -2
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
- qiskit/transpiler/passes/scheduling/asap.py +1 -1
- qiskit/transpiler/passes/scheduling/base_scheduler.py +12 -14
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +4 -9
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +5 -16
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +1 -4
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +2 -6
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -9
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +99 -262
- qiskit/transpiler/passes/synthesis/hls_plugins.py +7 -638
- qiskit/transpiler/passes/synthesis/qubit_tracker.py +132 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -55
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +56 -2
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -5
- qiskit/transpiler/passes/utils/gate_direction.py +275 -12
- qiskit/transpiler/passes/utils/gates_basis.py +30 -7
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +1 -2
- qiskit/transpiler/passmanager_config.py +4 -22
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +14 -40
- qiskit/transpiler/preset_passmanagers/common.py +3 -5
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +42 -125
- qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
- qiskit/transpiler/target.py +16 -74
- qiskit/visualization/circuit/_utils.py +2 -2
- qiskit/visualization/circuit/circuit_visualization.py +2 -3
- qiskit/visualization/circuit/matplotlib.py +1 -1
- qiskit/visualization/dag_visualization.py +1 -1
- qiskit/visualization/pass_manager_visualization.py +14 -3
- qiskit/visualization/pulse_v2/interface.py +1 -3
- qiskit/visualization/timeline/core.py +2 -25
- qiskit/visualization/timeline/interface.py +0 -12
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/METADATA +19 -20
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/RECORD +347 -358
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/WHEEL +1 -1
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/entry_points.txt +0 -19
- qiskit/circuit/library/data_preparation/_zz_feature_map.py +0 -150
- qiskit/circuit/twirling.py +0 -145
- qiskit/synthesis/arithmetic/__init__.py +0 -16
- qiskit/synthesis/arithmetic/adders/__init__.py +0 -17
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +0 -154
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +0 -103
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +0 -161
- qiskit/synthesis/arithmetic/multipliers/__init__.py +0 -16
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +0 -102
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +0 -99
- qiskit/synthesis/evolution/pauli_network.py +0 -80
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +0 -52
- qiskit/transpiler/passes/optimization/remove_identity_equiv.py +0 -69
- qiskit/utils/deprecate_pulse.py +0 -119
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/top_level.txt +0 -0
@@ -36,11 +36,7 @@ For example, to append a multi-controlled CNOT:
|
|
36
36
|
circuit.append(gate, [0, 1, 4, 2, 3])
|
37
37
|
circuit.draw('mpl')
|
38
38
|
|
39
|
-
The library is organized in several sections.
|
40
|
-
:func:`.get_standard_gate_name_mapping` allows you to see the available standard gates and operations.
|
41
|
-
|
42
|
-
.. autofunction:: get_standard_gate_name_mapping
|
43
|
-
|
39
|
+
The library is organized in several sections.
|
44
40
|
|
45
41
|
Standard gates
|
46
42
|
==============
|
@@ -60,7 +56,7 @@ For example:
|
|
60
56
|
print(gate.power(1/2).to_matrix()) # √X gate
|
61
57
|
print(gate.control(1).to_matrix()) # CX (controlled X) gate
|
62
58
|
|
63
|
-
..
|
59
|
+
.. parsed-literal::
|
64
60
|
|
65
61
|
[[0.+0.j 1.+0.j]
|
66
62
|
[1.+0.j 0.+0.j]]
|
@@ -130,7 +126,6 @@ For example:
|
|
130
126
|
ZGate
|
131
127
|
GlobalPhaseGate
|
132
128
|
|
133
|
-
|
134
129
|
Standard Directives
|
135
130
|
===================
|
136
131
|
|
@@ -157,15 +152,15 @@ set the amount of qubits involved at instantiation time.
|
|
157
152
|
|
158
153
|
.. code-block::
|
159
154
|
|
160
|
-
from qiskit.circuit.library import
|
155
|
+
from qiskit.circuit.library import Diagonal
|
161
156
|
|
162
|
-
diagonal =
|
157
|
+
diagonal = Diagonal([1, 1])
|
163
158
|
print(diagonal.num_qubits)
|
164
159
|
|
165
|
-
diagonal =
|
160
|
+
diagonal = Diagonal([1, 1, 1, 1])
|
166
161
|
print(diagonal.num_qubits)
|
167
162
|
|
168
|
-
..
|
163
|
+
.. parsed-literal::
|
169
164
|
|
170
165
|
1
|
171
166
|
2
|
@@ -186,7 +181,6 @@ set the amount of qubits involved at instantiation time.
|
|
186
181
|
GRX
|
187
182
|
GRY
|
188
183
|
GRZ
|
189
|
-
MCMTGate
|
190
184
|
MCPhaseGate
|
191
185
|
MCXGate
|
192
186
|
MCXGrayCode
|
@@ -216,15 +210,9 @@ or of a set of qubit states.
|
|
216
210
|
:template: autosummary/class_no_inherited_members.rst
|
217
211
|
|
218
212
|
AND
|
219
|
-
AndGate
|
220
213
|
OR
|
221
|
-
OrGate
|
222
214
|
XOR
|
223
|
-
BitwiseXorGate
|
224
|
-
random_bitwise_xor
|
225
215
|
InnerProduct
|
226
|
-
InnerProductGate
|
227
|
-
|
228
216
|
|
229
217
|
Basis Change Circuits
|
230
218
|
=====================
|
@@ -280,9 +268,6 @@ Adders
|
|
280
268
|
CDKMRippleCarryAdder
|
281
269
|
VBERippleCarryAdder
|
282
270
|
WeightedAdder
|
283
|
-
ModularAdderGate
|
284
|
-
HalfAdderGate
|
285
|
-
FullAdderGate
|
286
271
|
|
287
272
|
Multipliers
|
288
273
|
-----------
|
@@ -293,7 +278,6 @@ Multipliers
|
|
293
278
|
|
294
279
|
HRSCumulativeMultiplier
|
295
280
|
RGQFTMultiplier
|
296
|
-
MultiplierGate
|
297
281
|
|
298
282
|
Comparators
|
299
283
|
-----------
|
@@ -325,16 +309,12 @@ Other arithmetic functions
|
|
325
309
|
Particular Quantum Circuits
|
326
310
|
===========================
|
327
311
|
|
328
|
-
The following gates and quantum circuits define specific
|
329
|
-
quantum circuits of interest:
|
330
|
-
|
331
312
|
.. autosummary::
|
332
313
|
:toctree: ../stubs/
|
333
314
|
:template: autosummary/class_no_inherited_members.rst
|
334
315
|
|
335
316
|
FourierChecking
|
336
317
|
GraphState
|
337
|
-
GraphStateGate
|
338
318
|
HiddenLinearFunction
|
339
319
|
IQP
|
340
320
|
QuantumVolume
|
@@ -345,42 +325,10 @@ quantum circuits of interest:
|
|
345
325
|
HamiltonianGate
|
346
326
|
UnitaryOverlap
|
347
327
|
|
348
|
-
For circuits that have a well-defined structure it is preferrable
|
349
|
-
to use the following functions to construct them:
|
350
|
-
|
351
|
-
.. autosummary::
|
352
|
-
:toctree: ../stubs/
|
353
|
-
:template: autosummary/class_no_inherited_members.rst
|
354
|
-
|
355
|
-
fourier_checking
|
356
|
-
hidden_linear_function
|
357
|
-
iqp
|
358
|
-
random_iqp
|
359
|
-
quantum_volume
|
360
|
-
phase_estimation
|
361
|
-
grover_operator
|
362
|
-
unitary_overlap
|
363
|
-
|
364
328
|
|
365
329
|
N-local circuits
|
366
330
|
================
|
367
331
|
|
368
|
-
The following functions return a parameterized :class:`.QuantumCircuit` to use as ansatz in
|
369
|
-
a broad set of variational quantum algorithms:
|
370
|
-
|
371
|
-
.. autosummary::
|
372
|
-
:toctree: ../stubs/
|
373
|
-
:template: autosummary/class_no_inherited_members.rst
|
374
|
-
|
375
|
-
n_local
|
376
|
-
efficient_su2
|
377
|
-
real_amplitudes
|
378
|
-
pauli_two_design
|
379
|
-
excitation_preserving
|
380
|
-
qaoa_ansatz
|
381
|
-
hamiltonian_variational_ansatz
|
382
|
-
evolved_operator_ansatz
|
383
|
-
|
384
332
|
These :class:`~qiskit.circuit.library.BlueprintCircuit` subclasses are used
|
385
333
|
as parameterized models (a.k.a. ansatzes or variational forms) in variational algorithms.
|
386
334
|
They are heavily used in near-term algorithms in e.g. Chemistry, Physics or Optimization.
|
@@ -402,17 +350,6 @@ They are heavily used in near-term algorithms in e.g. Chemistry, Physics or Opti
|
|
402
350
|
Data encoding circuits
|
403
351
|
======================
|
404
352
|
|
405
|
-
The following functions return a parameterized :class:`.QuantumCircuit` to use as data
|
406
|
-
encoding circuits in a series of variational quantum algorithms:
|
407
|
-
|
408
|
-
.. autosummary::
|
409
|
-
:toctree: ../stubs/
|
410
|
-
:template: autosummary/class_no_inherited_members.rst
|
411
|
-
|
412
|
-
pauli_feature_map
|
413
|
-
z_feature_map
|
414
|
-
zz_feature_map
|
415
|
-
|
416
353
|
These :class:`~qiskit.circuit.library.BlueprintCircuit` encode classical
|
417
354
|
data in quantum states and are used as feature maps for classification.
|
418
355
|
|
@@ -423,17 +360,6 @@ data in quantum states and are used as feature maps for classification.
|
|
423
360
|
PauliFeatureMap
|
424
361
|
ZFeatureMap
|
425
362
|
ZZFeatureMap
|
426
|
-
|
427
|
-
|
428
|
-
Data preparation circuits
|
429
|
-
=========================
|
430
|
-
|
431
|
-
The following operations are used for state preparation:
|
432
|
-
|
433
|
-
.. autosummary::
|
434
|
-
:toctree: ../stubs/
|
435
|
-
:template: autosummary/class_no_inherited_members.rst
|
436
|
-
|
437
363
|
StatePreparation
|
438
364
|
Initialize
|
439
365
|
|
@@ -574,7 +500,6 @@ from .generalized_gates import (
|
|
574
500
|
Permutation,
|
575
501
|
PermutationGate,
|
576
502
|
GMS,
|
577
|
-
MCMTGate,
|
578
503
|
MSGate,
|
579
504
|
GR,
|
580
505
|
GRX,
|
@@ -595,21 +520,12 @@ from .pauli_evolution import PauliEvolutionGate
|
|
595
520
|
from .hamiltonian_gate import HamiltonianGate
|
596
521
|
from .boolean_logic import (
|
597
522
|
AND,
|
598
|
-
AndGate,
|
599
523
|
OR,
|
600
|
-
OrGate,
|
601
524
|
XOR,
|
602
|
-
BitwiseXorGate,
|
603
|
-
random_bitwise_xor,
|
604
525
|
InnerProduct,
|
605
|
-
InnerProductGate,
|
606
526
|
)
|
607
527
|
from .basis_change import QFT, QFTGate
|
608
528
|
from .arithmetic import (
|
609
|
-
ModularAdderGate,
|
610
|
-
HalfAdderGate,
|
611
|
-
FullAdderGate,
|
612
|
-
MultiplierGate,
|
613
529
|
FunctionalPauliRotations,
|
614
530
|
LinearPauliRotations,
|
615
531
|
PiecewiseLinearPauliRotations,
|
@@ -629,40 +545,28 @@ from .arithmetic import (
|
|
629
545
|
)
|
630
546
|
|
631
547
|
from .n_local import (
|
632
|
-
n_local,
|
633
548
|
NLocal,
|
634
549
|
TwoLocal,
|
635
|
-
pauli_two_design,
|
636
550
|
PauliTwoDesign,
|
637
|
-
real_amplitudes,
|
638
551
|
RealAmplitudes,
|
639
|
-
efficient_su2,
|
640
552
|
EfficientSU2,
|
641
|
-
hamiltonian_variational_ansatz,
|
642
|
-
evolved_operator_ansatz,
|
643
553
|
EvolvedOperatorAnsatz,
|
644
|
-
excitation_preserving,
|
645
554
|
ExcitationPreserving,
|
646
|
-
qaoa_ansatz,
|
647
555
|
QAOAAnsatz,
|
648
556
|
)
|
649
557
|
from .data_preparation import (
|
650
|
-
z_feature_map,
|
651
|
-
zz_feature_map,
|
652
|
-
pauli_feature_map,
|
653
558
|
PauliFeatureMap,
|
654
559
|
ZFeatureMap,
|
655
560
|
ZZFeatureMap,
|
656
561
|
StatePreparation,
|
657
562
|
Initialize,
|
658
563
|
)
|
659
|
-
from .quantum_volume import QuantumVolume
|
660
|
-
from .fourier_checking import FourierChecking
|
661
|
-
from .graph_state import GraphState
|
662
|
-
from .hidden_linear_function import HiddenLinearFunction
|
663
|
-
from .iqp import IQP
|
664
|
-
from .phase_estimation import PhaseEstimation
|
665
|
-
from .grover_operator import GroverOperator
|
564
|
+
from .quantum_volume import QuantumVolume
|
565
|
+
from .fourier_checking import FourierChecking
|
566
|
+
from .graph_state import GraphState
|
567
|
+
from .hidden_linear_function import HiddenLinearFunction
|
568
|
+
from .iqp import IQP
|
569
|
+
from .phase_estimation import PhaseEstimation
|
570
|
+
from .grover_operator import GroverOperator
|
666
571
|
from .phase_oracle import PhaseOracle
|
667
|
-
from .overlap import UnitaryOverlap
|
668
|
-
from .standard_gates import get_standard_gate_name_mapping
|
572
|
+
from .overlap import UnitaryOverlap
|
@@ -21,14 +21,7 @@ from .polynomial_pauli_rotations import PolynomialPauliRotations
|
|
21
21
|
from .weighted_adder import WeightedAdder
|
22
22
|
from .quadratic_form import QuadraticForm
|
23
23
|
from .linear_amplitude_function import LinearAmplitudeFunction
|
24
|
-
from .adders import
|
25
|
-
VBERippleCarryAdder,
|
26
|
-
CDKMRippleCarryAdder,
|
27
|
-
DraperQFTAdder,
|
28
|
-
ModularAdderGate,
|
29
|
-
HalfAdderGate,
|
30
|
-
FullAdderGate,
|
31
|
-
)
|
24
|
+
from .adders import VBERippleCarryAdder, CDKMRippleCarryAdder, DraperQFTAdder
|
32
25
|
from .piecewise_chebyshev import PiecewiseChebyshev
|
33
|
-
from .multipliers import HRSCumulativeMultiplier, RGQFTMultiplier
|
26
|
+
from .multipliers import HRSCumulativeMultiplier, RGQFTMultiplier
|
34
27
|
from .exact_reciprocal import ExactReciprocal
|
@@ -12,16 +12,13 @@
|
|
12
12
|
|
13
13
|
"""Compute the sum of two equally sized qubit registers."""
|
14
14
|
|
15
|
-
from
|
16
|
-
|
17
|
-
from qiskit.circuit import QuantumCircuit, Gate
|
18
|
-
from qiskit.utils.deprecation import deprecate_func
|
15
|
+
from qiskit.circuit import QuantumCircuit
|
19
16
|
|
20
17
|
|
21
18
|
class Adder(QuantumCircuit):
|
22
19
|
r"""Compute the sum of two equally sized qubit registers.
|
23
20
|
|
24
|
-
For two registers :math:`|a\rangle_n` and :math
|
21
|
+
For two registers :math:`|a\rangle_n` and :math:|b\rangle_n` with :math:`n` qubits each, an
|
25
22
|
adder performs the following operation
|
26
23
|
|
27
24
|
.. math::
|
@@ -42,16 +39,6 @@ class Adder(QuantumCircuit):
|
|
42
39
|
|
43
40
|
"""
|
44
41
|
|
45
|
-
@deprecate_func(
|
46
|
-
since="1.3",
|
47
|
-
additional_msg=(
|
48
|
-
"Use the adder gates provided in qiskit.circuit.library.arithmetic instead. "
|
49
|
-
"The gate type depends on the adder kind: fixed, half, full are represented by "
|
50
|
-
"ModularAdderGate, HalfAdderGate, FullAdderGate, respectively. For different adder "
|
51
|
-
"implementations, see https://docs.quantum.ibm.com/api/qiskit/synthesis.",
|
52
|
-
),
|
53
|
-
pending=True,
|
54
|
-
)
|
55
42
|
def __init__(self, num_state_qubits: int, name: str = "Adder") -> None:
|
56
43
|
"""
|
57
44
|
Args:
|
@@ -69,142 +56,3 @@ class Adder(QuantumCircuit):
|
|
69
56
|
The number of state qubits.
|
70
57
|
"""
|
71
58
|
return self._num_state_qubits
|
72
|
-
|
73
|
-
|
74
|
-
class HalfAdderGate(Gate):
|
75
|
-
r"""Compute the sum of two equally-sized qubit registers, including a carry-out bit.
|
76
|
-
|
77
|
-
For two registers :math:`|a\rangle_n` and :math:`|b\rangle_n` with :math:`n` qubits each, an
|
78
|
-
adder performs the following operation
|
79
|
-
|
80
|
-
.. math::
|
81
|
-
|
82
|
-
|a\rangle_n |b\rangle_n \mapsto |a\rangle_n |a + b\rangle_{n + 1}.
|
83
|
-
|
84
|
-
The quantum register :math:`|a\rangle_n` (and analogously :math:`|b\rangle_n`)
|
85
|
-
|
86
|
-
.. math::
|
87
|
-
|
88
|
-
|a\rangle_n = |a_0\rangle \otimes \cdots \otimes |a_{n - 1}\rangle,
|
89
|
-
|
90
|
-
for :math:`a_i \in \{0, 1\}`, is associated with the integer value
|
91
|
-
|
92
|
-
.. math::
|
93
|
-
|
94
|
-
a = 2^{0}a_{0} + 2^{1}a_{1} + \cdots + 2^{n - 1}a_{n - 1}.
|
95
|
-
|
96
|
-
"""
|
97
|
-
|
98
|
-
def __init__(self, num_state_qubits: int, label: str | None = None) -> None:
|
99
|
-
"""
|
100
|
-
Args:
|
101
|
-
num_state_qubits: The number of qubits in each of the registers.
|
102
|
-
name: The name of the circuit.
|
103
|
-
"""
|
104
|
-
if num_state_qubits < 1:
|
105
|
-
raise ValueError("Need at least 1 state qubit.")
|
106
|
-
|
107
|
-
super().__init__("HalfAdder", 2 * num_state_qubits + 1, [], label=label)
|
108
|
-
self._num_state_qubits = num_state_qubits
|
109
|
-
|
110
|
-
@property
|
111
|
-
def num_state_qubits(self) -> int:
|
112
|
-
"""The number of state qubits, i.e. the number of bits in each input register.
|
113
|
-
|
114
|
-
Returns:
|
115
|
-
The number of state qubits.
|
116
|
-
"""
|
117
|
-
return self._num_state_qubits
|
118
|
-
|
119
|
-
|
120
|
-
class ModularAdderGate(Gate):
|
121
|
-
r"""Compute the sum modulo :math:`2^n` of two :math:`n`-sized qubit registers.
|
122
|
-
|
123
|
-
For two registers :math:`|a\rangle_n` and :math:`|b\rangle_n` with :math:`n` qubits each, an
|
124
|
-
adder performs the following operation
|
125
|
-
|
126
|
-
.. math::
|
127
|
-
|
128
|
-
|a\rangle_n |b\rangle_n \mapsto |a\rangle_n |a + b \text{ mod } 2^n\rangle_n.
|
129
|
-
|
130
|
-
The quantum register :math:`|a\rangle_n` (and analogously :math:`|b\rangle_n`)
|
131
|
-
|
132
|
-
.. math::
|
133
|
-
|
134
|
-
|a\rangle_n = |a_0\rangle \otimes \cdots \otimes |a_{n - 1}\rangle,
|
135
|
-
|
136
|
-
for :math:`a_i \in \{0, 1\}`, is associated with the integer value
|
137
|
-
|
138
|
-
.. math::
|
139
|
-
|
140
|
-
a = 2^{0}a_{0} + 2^{1}a_{1} + \cdots + 2^{n - 1}a_{n - 1}.
|
141
|
-
|
142
|
-
"""
|
143
|
-
|
144
|
-
def __init__(self, num_state_qubits: int, label: str | None = None) -> None:
|
145
|
-
"""
|
146
|
-
Args:
|
147
|
-
num_state_qubits: The number of qubits in each of the registers.
|
148
|
-
name: The name of the circuit.
|
149
|
-
"""
|
150
|
-
if num_state_qubits < 1:
|
151
|
-
raise ValueError("Need at least 1 state qubit.")
|
152
|
-
|
153
|
-
super().__init__("ModularAdder", 2 * num_state_qubits, [], label=label)
|
154
|
-
self._num_state_qubits = num_state_qubits
|
155
|
-
|
156
|
-
@property
|
157
|
-
def num_state_qubits(self) -> int:
|
158
|
-
"""The number of state qubits, i.e. the number of bits in each input register.
|
159
|
-
|
160
|
-
Returns:
|
161
|
-
The number of state qubits.
|
162
|
-
"""
|
163
|
-
return self._num_state_qubits
|
164
|
-
|
165
|
-
|
166
|
-
class FullAdderGate(Gate):
|
167
|
-
r"""Compute the sum of two :math:`n`-sized qubit registers, including carry-in and -out bits.
|
168
|
-
|
169
|
-
For two registers :math:`|a\rangle_n` and :math:`|b\rangle_n` with :math:`n` qubits each, an
|
170
|
-
adder performs the following operation
|
171
|
-
|
172
|
-
.. math::
|
173
|
-
|
174
|
-
|c_{\text{in}}\rangle_1 |a\rangle_n |b\rangle_n
|
175
|
-
\mapsto |a\rangle_n |c_{\text{in}} + a + b \rangle_{n + 1}.
|
176
|
-
|
177
|
-
The quantum register :math:`|a\rangle_n` (and analogously :math:`|b\rangle_n`)
|
178
|
-
|
179
|
-
.. math::
|
180
|
-
|
181
|
-
|a\rangle_n = |a_0\rangle \otimes \cdots \otimes |a_{n - 1}\rangle,
|
182
|
-
|
183
|
-
for :math:`a_i \in \{0, 1\}`, is associated with the integer value
|
184
|
-
|
185
|
-
.. math::
|
186
|
-
|
187
|
-
a = 2^{0}a_{0} + 2^{1}a_{1} + \cdots + 2^{n - 1}a_{n - 1}.
|
188
|
-
|
189
|
-
"""
|
190
|
-
|
191
|
-
def __init__(self, num_state_qubits: int, label: str | None = None) -> None:
|
192
|
-
"""
|
193
|
-
Args:
|
194
|
-
num_state_qubits: The number of qubits in each of the registers.
|
195
|
-
name: The name of the circuit.
|
196
|
-
"""
|
197
|
-
if num_state_qubits < 1:
|
198
|
-
raise ValueError("Need at least 1 state qubit.")
|
199
|
-
|
200
|
-
super().__init__("FullAdder", 2 * num_state_qubits + 2, [], label=label)
|
201
|
-
self._num_state_qubits = num_state_qubits
|
202
|
-
|
203
|
-
@property
|
204
|
-
def num_state_qubits(self) -> int:
|
205
|
-
"""The number of state qubits, i.e. the number of bits in each input register.
|
206
|
-
|
207
|
-
Returns:
|
208
|
-
The number of state qubits.
|
209
|
-
"""
|
210
|
-
return self._num_state_qubits
|
@@ -12,7 +12,8 @@
|
|
12
12
|
|
13
13
|
"""Compute the sum of two qubit registers using ripple-carry approach."""
|
14
14
|
|
15
|
-
from qiskit.
|
15
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister, AncillaRegister
|
16
|
+
|
16
17
|
from .adder import Adder
|
17
18
|
|
18
19
|
|
@@ -22,7 +23,7 @@ class CDKMRippleCarryAdder(Adder):
|
|
22
23
|
As an example, a ripple-carry adder circuit that performs addition on two 3-qubit sized
|
23
24
|
registers with a carry-in bit (``kind="full"``) is as follows:
|
24
25
|
|
25
|
-
..
|
26
|
+
.. parsed-literal::
|
26
27
|
|
27
28
|
┌──────┐ ┌──────┐
|
28
29
|
cin_0: ┤2 ├─────────────────────────────────────┤2 ├
|
@@ -53,7 +54,7 @@ class CDKMRippleCarryAdder(Adder):
|
|
53
54
|
|
54
55
|
The circuit diagram for the fixed-point adder (``kind="fixed"``) on 3-qubit sized inputs is
|
55
56
|
|
56
|
-
..
|
57
|
+
.. parsed-literal::
|
57
58
|
|
58
59
|
┌──────┐┌──────┐ ┌──────┐┌──────┐
|
59
60
|
a_0: ┤0 ├┤2 ├────────────────┤2 ├┤0 ├
|
@@ -74,21 +75,6 @@ class CDKMRippleCarryAdder(Adder):
|
|
74
75
|
It has one less qubit than the full-adder since it doesn't have the carry-out, but uses
|
75
76
|
a helper qubit instead of the carry-in, so it only has one less qubit, not two.
|
76
77
|
|
77
|
-
.. seealso::
|
78
|
-
|
79
|
-
The following generic gate objects perform additions, like this circuit class,
|
80
|
-
but allow the compiler to select the optimal decomposition based on the context.
|
81
|
-
Specific implementations can be set via the :class:`.HLSConfig`, e.g. this circuit
|
82
|
-
can be chosen via ``Adder=["ripple_c04"]``.
|
83
|
-
|
84
|
-
:class:`.ModularAdderGate`: A generic inplace adder, modulo :math:`2^n`. This
|
85
|
-
is functionally equivalent to ``kind="fixed"``.
|
86
|
-
|
87
|
-
:class:`.HalfAdderGate`: A generic inplace adder. This
|
88
|
-
is functionally equivalent to ``kind="half"``.
|
89
|
-
|
90
|
-
:class:`.FullAdderGate`: A generic inplace adder, with a carry-in bit. This
|
91
|
-
is functionally equivalent to ``kind="full"``.
|
92
78
|
|
93
79
|
**References:**
|
94
80
|
|
@@ -116,8 +102,58 @@ class CDKMRippleCarryAdder(Adder):
|
|
116
102
|
Raises:
|
117
103
|
ValueError: If ``num_state_qubits`` is lower than 1.
|
118
104
|
"""
|
105
|
+
if num_state_qubits < 1:
|
106
|
+
raise ValueError("The number of qubits must be at least 1.")
|
107
|
+
|
119
108
|
super().__init__(num_state_qubits, name=name)
|
120
|
-
circuit = adder_ripple_c04(num_state_qubits, kind)
|
121
109
|
|
122
|
-
|
110
|
+
if kind == "full":
|
111
|
+
qr_c = QuantumRegister(1, name="cin")
|
112
|
+
self.add_register(qr_c)
|
113
|
+
else:
|
114
|
+
qr_c = AncillaRegister(1, name="help")
|
115
|
+
|
116
|
+
qr_a = QuantumRegister(num_state_qubits, name="a")
|
117
|
+
qr_b = QuantumRegister(num_state_qubits, name="b")
|
118
|
+
self.add_register(qr_a, qr_b)
|
119
|
+
|
120
|
+
if kind in ["full", "half"]:
|
121
|
+
qr_z = QuantumRegister(1, name="cout")
|
122
|
+
self.add_register(qr_z)
|
123
|
+
|
124
|
+
if kind != "full":
|
125
|
+
self.add_register(qr_c)
|
126
|
+
|
127
|
+
# build carry circuit for majority of 3 bits in-place
|
128
|
+
# corresponds to MAJ gate in [1]
|
129
|
+
qc_maj = QuantumCircuit(3, name="MAJ")
|
130
|
+
qc_maj.cx(0, 1)
|
131
|
+
qc_maj.cx(0, 2)
|
132
|
+
qc_maj.ccx(2, 1, 0)
|
133
|
+
maj_gate = qc_maj.to_gate()
|
134
|
+
|
135
|
+
# build circuit for reversing carry operation
|
136
|
+
# corresponds to UMA gate in [1]
|
137
|
+
qc_uma = QuantumCircuit(3, name="UMA")
|
138
|
+
qc_uma.ccx(2, 1, 0)
|
139
|
+
qc_uma.cx(0, 2)
|
140
|
+
qc_uma.cx(2, 1)
|
141
|
+
uma_gate = qc_uma.to_gate()
|
142
|
+
|
143
|
+
circuit = QuantumCircuit(*self.qregs, name=name)
|
144
|
+
|
145
|
+
# build ripple-carry adder circuit
|
146
|
+
circuit.append(maj_gate, [qr_a[0], qr_b[0], qr_c[0]])
|
147
|
+
|
148
|
+
for i in range(num_state_qubits - 1):
|
149
|
+
circuit.append(maj_gate, [qr_a[i + 1], qr_b[i + 1], qr_a[i]])
|
150
|
+
|
151
|
+
if kind in ["full", "half"]:
|
152
|
+
circuit.cx(qr_a[-1], qr_z[0])
|
153
|
+
|
154
|
+
for i in reversed(range(num_state_qubits - 1)):
|
155
|
+
circuit.append(uma_gate, [qr_a[i + 1], qr_b[i + 1], qr_a[i]])
|
156
|
+
|
157
|
+
circuit.append(uma_gate, [qr_a[0], qr_b[0], qr_c[0]])
|
158
|
+
|
123
159
|
self.append(circuit.to_gate(), self.qubits)
|
@@ -31,7 +31,7 @@ class DraperQFTAdder(Adder):
|
|
31
31
|
As an example, a non-fixed_point QFT adder circuit that performs addition on two 2-qubit sized
|
32
32
|
registers is as follows:
|
33
33
|
|
34
|
-
..
|
34
|
+
.. parsed-literal::
|
35
35
|
|
36
36
|
a_0: ─────────■──────■────────────────────────■────────────────
|
37
37
|
│ │ │
|
@@ -44,19 +44,6 @@ class DraperQFTAdder(Adder):
|
|
44
44
|
cout_0: ┤2 ├────────────────────────■────────■───────┤2 ├
|
45
45
|
└──────┘ └───────┘
|
46
46
|
|
47
|
-
.. seealso::
|
48
|
-
|
49
|
-
The following generic gate objects perform additions, like this circuit class,
|
50
|
-
but allow the compiler to select the optimal decomposition based on the context.
|
51
|
-
Specific implementations can be set via the :class:`.HLSConfig`, e.g. this
|
52
|
-
circuit can be chosen via ``Adder=["qft_d00"]``.
|
53
|
-
|
54
|
-
:class:`.ModularAdderGate`: A generic inplace adder, modulo :math:`2^n`. This
|
55
|
-
is functionally equivalent to ``kind="fixed"``.
|
56
|
-
|
57
|
-
:class:`.HalfAdderGate`: A generic inplace adder. This
|
58
|
-
is functionally equivalent to ``kind="half"``.
|
59
|
-
|
60
47
|
**References:**
|
61
48
|
|
62
49
|
[1] T. G. Draper, Addition on a Quantum Computer, 2000.
|