qiskit 1.4.1__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 +11 -0
- 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/circuit/tools/pi_check.py +3 -0
- 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 +96 -116
- qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
- qiskit/qpy/binary_io/schedules.py +61 -388
- qiskit/qpy/binary_io/value.py +159 -33
- qiskit/qpy/common.py +10 -7
- qiskit/qpy/formats.py +41 -0
- qiskit/qpy/interface.py +29 -62
- qiskit/qpy/type_keys.py +58 -221
- qiskit/quantum_info/analysis/distance.py +3 -1
- qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
- qiskit/quantum_info/operators/operator.py +6 -2
- qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
- qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
- qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
- qiskit/quantum_info/states/densitymatrix.py +16 -6
- qiskit/quantum_info/states/stabilizerstate.py +35 -4
- qiskit/quantum_info/states/statevector.py +16 -6
- qiskit/result/__init__.py +5 -17
- qiskit/result/models.py +18 -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/discrete_basis/generate_basis_approximations.py +2 -0
- qiskit/synthesis/evolution/lie_trotter.py +10 -7
- qiskit/synthesis/evolution/product_formula.py +44 -35
- qiskit/synthesis/evolution/qdrift.py +17 -24
- qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
- qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
- qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
- qiskit/synthesis/multi_controlled/__init__.py +1 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
- qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
- qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
- qiskit/synthesis/two_qubit/__init__.py +1 -0
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
- qiskit/transpiler/__init__.py +32 -232
- qiskit/transpiler/basepasses.py +20 -51
- qiskit/transpiler/layout.py +1 -1
- qiskit/transpiler/passes/__init__.py +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 +3 -2
- 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.1.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
- {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/RECORD +303 -449
- {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/WHEEL +2 -1
- {qiskit-1.4.1.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.1.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
- {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
@@ -12,33 +12,34 @@
|
|
12
12
|
|
13
13
|
"""Phase Oracle object."""
|
14
14
|
|
15
|
-
# Needed to avoid type hints from erroring when `classicalfunction` might not be available.
|
16
15
|
from __future__ import annotations
|
17
16
|
|
18
|
-
from
|
17
|
+
from qiskit.circuit import QuantumCircuit, Gate
|
19
18
|
|
20
|
-
from qiskit.
|
21
|
-
from qiskit.utils import optionals as _optionals
|
19
|
+
from qiskit.synthesis.boolean.boolean_expression import BooleanExpression
|
22
20
|
|
23
|
-
if TYPE_CHECKING:
|
24
|
-
from qiskit.circuit.classicalfunction.boolean_expression import BooleanExpression
|
25
|
-
from qiskit.circuit.classicalfunction.classical_element import ClassicalElement
|
26
21
|
|
27
|
-
|
28
|
-
@_optionals.HAS_TWEEDLEDUM.require_in_instance
|
29
22
|
class PhaseOracle(QuantumCircuit):
|
30
23
|
r"""Phase Oracle.
|
31
24
|
|
32
25
|
The Phase Oracle object constructs circuits for any arbitrary
|
33
26
|
input logical expressions. A logical expression is composed of logical operators
|
34
|
-
`&` (`AND`), `|` (`OR`),
|
27
|
+
`&` (logical `AND`), `|` (logical `OR`),
|
28
|
+
`~` (logical `NOT`), and `^` (logical `XOR`).
|
35
29
|
as well as symbols for literals (variables).
|
36
30
|
For example, `'a & b'`, and `(v0 | ~v1) & (~v2 & v3)`
|
37
31
|
are both valid string representation of boolean logical expressions.
|
38
32
|
|
33
|
+
A phase oracle for a boolean function `f(x)` performs the following
|
34
|
+
quantum operation:
|
35
|
+
|
36
|
+
.. math::
|
37
|
+
|
38
|
+
|x\rangle \mapsto (-1)^{f(x)}|x\rangle
|
39
|
+
|
39
40
|
For convenience, this oracle, in addition to parsing arbitrary logical expressions,
|
40
41
|
also supports input strings in the `DIMACS CNF format
|
41
|
-
<
|
42
|
+
<https://web.archive.org/web/20190325181937/https://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
|
42
43
|
which is the standard format for specifying SATisfiability (SAT) problem instances in
|
43
44
|
`Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
|
44
45
|
which is a conjunction of one or more clauses, where a clause is a disjunction of one
|
@@ -50,51 +51,21 @@ class PhaseOracle(QuantumCircuit):
|
|
50
51
|
|
51
52
|
def __init__(
|
52
53
|
self,
|
53
|
-
expression:
|
54
|
-
|
55
|
-
var_order: list = None,
|
54
|
+
expression: str,
|
55
|
+
var_order: list[str] | None = None,
|
56
56
|
) -> None:
|
57
|
-
"""
|
58
|
-
|
57
|
+
"""
|
59
58
|
Args:
|
60
59
|
expression: A Python-like boolean expression.
|
61
|
-
|
62
|
-
If None is provided, Tweedledum's `pkrm_synth` with `phase_esop` will be used.
|
63
|
-
var_order(list): A list with the order in which variables will be created.
|
60
|
+
var_order: A list with the order in which variables will be created.
|
64
61
|
(default: by appearance)
|
65
62
|
"""
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
with warnings.catch_warnings():
|
70
|
-
warnings.simplefilter("ignore", DeprecationWarning)
|
71
|
-
from qiskit.circuit.classicalfunction.boolean_expression import BooleanExpression
|
72
|
-
from qiskit.circuit.classicalfunction.classical_element import ClassicalElement
|
73
|
-
|
74
|
-
if not isinstance(expression, ClassicalElement):
|
75
|
-
expression = BooleanExpression(expression, var_order=var_order)
|
76
|
-
|
77
|
-
self.boolean_expression = expression
|
78
|
-
|
79
|
-
if synthesizer is None:
|
80
|
-
|
81
|
-
def synthesizer(boolean_expression):
|
82
|
-
from tweedledum.synthesis import pkrm_synth # pylint: disable=import-error
|
83
|
-
from qiskit.circuit.classicalfunction.utils import tweedledum2qiskit
|
63
|
+
self.boolean_expression = BooleanExpression(expression, var_order=var_order)
|
64
|
+
oracle = self.boolean_expression.synth(circuit_type="phase")
|
84
65
|
|
85
|
-
|
86
|
-
output_bit=0
|
87
|
-
)
|
88
|
-
tweedledum_circuit = pkrm_synth(
|
89
|
-
truth_table, {"pkrm_synth": {"phase_esop": True}}
|
90
|
-
)
|
91
|
-
return tweedledum2qiskit(tweedledum_circuit)
|
66
|
+
super().__init__(oracle.num_qubits, name="Phase Oracle")
|
92
67
|
|
93
|
-
|
94
|
-
|
95
|
-
super().__init__(oracle.num_qubits, name="Phase Oracle")
|
96
|
-
|
97
|
-
self.compose(oracle, inplace=True, copy=False)
|
68
|
+
self.compose(oracle, inplace=True, copy=False)
|
98
69
|
|
99
70
|
def evaluate_bitstring(self, bitstring: str) -> bool:
|
100
71
|
"""Evaluate the oracle on a bitstring.
|
@@ -114,7 +85,7 @@ class PhaseOracle(QuantumCircuit):
|
|
114
85
|
r"""Create a PhaseOracle from the string in the DIMACS format.
|
115
86
|
|
116
87
|
It is possible to build a PhaseOracle from a file in `DIMACS CNF format
|
117
|
-
<
|
88
|
+
<https://web.archive.org/web/20190325181937/https://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
|
118
89
|
which is the standard format for specifying SATisfiability (SAT) problem instances in
|
119
90
|
`Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
|
120
91
|
which is a conjunction of one or more clauses, where a clause is a disjunction of one
|
@@ -154,7 +125,115 @@ class PhaseOracle(QuantumCircuit):
|
|
154
125
|
Returns:
|
155
126
|
PhaseOracle: A quantum circuit with a phase oracle.
|
156
127
|
"""
|
157
|
-
|
128
|
+
expr = BooleanExpression.from_dimacs_file(filename)
|
129
|
+
return cls(expr)
|
130
|
+
|
131
|
+
|
132
|
+
class PhaseOracleGate(Gate):
|
133
|
+
r"""Implements a phase oracle.
|
134
|
+
|
135
|
+
The Phase Oracle Gate object constructs circuits for any arbitrary
|
136
|
+
input logical expressions. A logical expression is composed of logical operators
|
137
|
+
`&` (logical `AND`), `|` (logical `OR`),
|
138
|
+
`~` (logical `NOT`), and `^` (logical `XOR`).
|
139
|
+
as well as symbols for literals (variables).
|
140
|
+
For example, `'a & b'`, and `(v0 | ~v1) & (~v2 & v3)`
|
141
|
+
are both valid string representation of boolean logical expressions.
|
142
|
+
|
143
|
+
A phase oracle for a boolean function `f(x)` performs the following
|
144
|
+
quantum operation:
|
145
|
+
|
146
|
+
.. math::
|
147
|
+
|
148
|
+
|x\rangle \mapsto (-1)^{f(x)}|x\rangle
|
149
|
+
|
150
|
+
For convenience, this oracle, in addition to parsing arbitrary logical expressions,
|
151
|
+
also supports input strings in the `DIMACS CNF format
|
152
|
+
<https://web.archive.org/web/20190325181937/https://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
|
153
|
+
which is the standard format for specifying SATisfiability (SAT) problem instances in
|
154
|
+
`Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
|
155
|
+
which is a conjunction of one or more clauses, where a clause is a disjunction of one
|
156
|
+
or more literals. See :meth:`qiskit.circuit.library.phase_oracle.PhaseOracleGate.from_dimacs_file`.
|
157
|
+
|
158
|
+
From 16 variables on, possible performance issues should be expected when using the
|
159
|
+
default synthesizer.
|
160
|
+
"""
|
161
|
+
|
162
|
+
def __init__(
|
163
|
+
self,
|
164
|
+
expression: str,
|
165
|
+
var_order: list[str] | None = None,
|
166
|
+
label: str | None = None,
|
167
|
+
) -> None:
|
168
|
+
"""
|
169
|
+
Args:
|
170
|
+
expression: A Python-like boolean expression.
|
171
|
+
var_order: A list with the order in which variables will be created.
|
172
|
+
(default: by appearance)
|
173
|
+
label: A label for the gate to display in visualizations. Per default, the label is
|
174
|
+
set to display the textual represntation of the boolean expression (truncated if needed)
|
175
|
+
"""
|
176
|
+
self.boolean_expression = BooleanExpression(expression, var_order=var_order)
|
158
177
|
|
178
|
+
if label is None:
|
179
|
+
short_expr_for_name = (expression[:15] + "...") if len(expression) > 15 else expression
|
180
|
+
label = short_expr_for_name
|
181
|
+
|
182
|
+
super().__init__(
|
183
|
+
name="Phase Oracle",
|
184
|
+
num_qubits=self.boolean_expression.num_bits,
|
185
|
+
params=[],
|
186
|
+
label=label,
|
187
|
+
)
|
188
|
+
|
189
|
+
def _define(self):
|
190
|
+
"""Defined by the synthesized phase oracle"""
|
191
|
+
self.definition = self.boolean_expression.synth(circuit_type="phase")
|
192
|
+
|
193
|
+
@classmethod
|
194
|
+
def from_dimacs_file(cls, filename: str) -> PhaseOracleGate:
|
195
|
+
r"""Create a PhaseOracle from the string in the DIMACS format.
|
196
|
+
|
197
|
+
It is possible to build a PhaseOracle from a file in `DIMACS CNF format
|
198
|
+
<https://web.archive.org/web/20190325181937/https://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
|
199
|
+
which is the standard format for specifying SATisfiability (SAT) problem instances in
|
200
|
+
`Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
|
201
|
+
which is a conjunction of one or more clauses, where a clause is a disjunction of one
|
202
|
+
or more literals.
|
203
|
+
|
204
|
+
The following is an example of a CNF expressed in the DIMACS format:
|
205
|
+
|
206
|
+
.. code:: text
|
207
|
+
|
208
|
+
c DIMACS CNF file with 3 satisfying assignments: 1 -2 3, -1 -2 -3, 1 2 -3.
|
209
|
+
p cnf 3 5
|
210
|
+
-1 -2 -3 0
|
211
|
+
1 -2 3 0
|
212
|
+
1 2 -3 0
|
213
|
+
1 -2 -3 0
|
214
|
+
-1 2 3 0
|
215
|
+
|
216
|
+
The first line, following the `c` character, is a comment. The second line specifies that
|
217
|
+
the CNF is over three boolean variables --- let us call them :math:`x_1, x_2, x_3`, and
|
218
|
+
contains five clauses. The five clauses, listed afterwards, are implicitly joined by the
|
219
|
+
logical `AND` operator, :math:`\land`, while the variables in each clause, represented by
|
220
|
+
their indices, are implicitly disjoined by the logical `OR` operator, :math:`\lor`. The
|
221
|
+
:math:`-` symbol preceding a boolean variable index corresponds to the logical `NOT`
|
222
|
+
operator, :math:`\lnot`. Character `0` (zero) marks the end of each clause. Essentially,
|
223
|
+
the code above corresponds to the following CNF:
|
224
|
+
|
225
|
+
:math:`(\lnot x_1 \lor \lnot x_2 \lor \lnot x_3)
|
226
|
+
\land (x_1 \lor \lnot x_2 \lor x_3)
|
227
|
+
\land (x_1 \lor x_2 \lor \lnot x_3)
|
228
|
+
\land (x_1 \lor \lnot x_2 \lor \lnot x_3)
|
229
|
+
\land (\lnot x_1 \lor x_2 \lor x_3)`.
|
230
|
+
|
231
|
+
|
232
|
+
Args:
|
233
|
+
filename: A file in DIMACS format.
|
234
|
+
|
235
|
+
Returns:
|
236
|
+
PhaseOracleGate: A quantum circuit with a phase oracle.
|
237
|
+
"""
|
159
238
|
expr = BooleanExpression.from_dimacs_file(filename)
|
160
239
|
return cls(expr)
|
@@ -43,7 +43,6 @@ from .x import MCXGate, MCXGrayCode, MCXRecursive, MCXVChain
|
|
43
43
|
from .y import YGate, CYGate
|
44
44
|
from .z import ZGate, CZGate, CCZGate
|
45
45
|
from .global_phase import GlobalPhaseGate
|
46
|
-
from .multi_control_rotation_gates import mcrx, mcry, mcrz
|
47
46
|
|
48
47
|
|
49
48
|
def get_standard_gate_name_mapping():
|
@@ -13,7 +13,6 @@
|
|
13
13
|
"""Double-CNOT gate."""
|
14
14
|
|
15
15
|
from qiskit.circuit.singleton import SingletonGate, stdlib_singleton_key
|
16
|
-
from qiskit.circuit.quantumregister import QuantumRegister
|
17
16
|
from qiskit.circuit._utils import with_gate_array
|
18
17
|
from qiskit._accelerate.circuit import StandardGate
|
19
18
|
|
@@ -52,9 +51,9 @@ class DCXGate(SingletonGate):
|
|
52
51
|
|
53
52
|
_standard_gate = StandardGate.DCXGate
|
54
53
|
|
55
|
-
def __init__(self, label=None
|
54
|
+
def __init__(self, label=None):
|
56
55
|
"""Create new DCX gate."""
|
57
|
-
super().__init__("dcx", 2, [], label=label
|
56
|
+
super().__init__("dcx", 2, [], label=label)
|
58
57
|
|
59
58
|
_singleton_lookup_key = stdlib_singleton_key()
|
60
59
|
|
@@ -63,7 +62,7 @@ class DCXGate(SingletonGate):
|
|
63
62
|
gate dcx a, b { cx a, b; cx b, a; }
|
64
63
|
"""
|
65
64
|
# pylint: disable=cyclic-import
|
66
|
-
from qiskit.circuit
|
65
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
67
66
|
from .x import CXGate
|
68
67
|
|
69
68
|
q = QuantumRegister(2, "q")
|
@@ -15,7 +15,6 @@ from math import sqrt
|
|
15
15
|
import numpy as np
|
16
16
|
|
17
17
|
from qiskit.circuit._utils import with_gate_array
|
18
|
-
from qiskit.circuit.quantumregister import QuantumRegister
|
19
18
|
from qiskit.circuit.singleton import SingletonGate, stdlib_singleton_key
|
20
19
|
from qiskit._accelerate.circuit import StandardGate
|
21
20
|
from .rzx import RZXGate
|
@@ -87,9 +86,9 @@ class ECRGate(SingletonGate):
|
|
87
86
|
|
88
87
|
_standard_gate = StandardGate.ECRGate
|
89
88
|
|
90
|
-
def __init__(self, label=None
|
89
|
+
def __init__(self, label=None):
|
91
90
|
"""Create new ECR gate."""
|
92
|
-
super().__init__("ecr", 2, [], label=label
|
91
|
+
super().__init__("ecr", 2, [], label=label)
|
93
92
|
|
94
93
|
_singleton_lookup_key = stdlib_singleton_key()
|
95
94
|
|
@@ -98,7 +97,7 @@ class ECRGate(SingletonGate):
|
|
98
97
|
gate ecr a, b { rzx(pi/4) a, b; x a; rzx(-pi/4) a, b;}
|
99
98
|
"""
|
100
99
|
# pylint: disable=cyclic-import
|
101
|
-
from qiskit.circuit
|
100
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
102
101
|
|
103
102
|
q = QuantumRegister(2, "q")
|
104
103
|
qc = QuantumCircuit(q, name=self.name)
|
@@ -17,8 +17,6 @@ from typing import Optional
|
|
17
17
|
import numpy
|
18
18
|
|
19
19
|
from qiskit.circuit.gate import Gate
|
20
|
-
from qiskit.circuit.quantumregister import QuantumRegister
|
21
|
-
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
22
20
|
from qiskit.circuit.parameterexpression import ParameterValueType
|
23
21
|
from qiskit._accelerate.circuit import StandardGate
|
24
22
|
|
@@ -39,17 +37,18 @@ class GlobalPhaseGate(Gate):
|
|
39
37
|
|
40
38
|
_standard_gate = StandardGate.GlobalPhaseGate
|
41
39
|
|
42
|
-
def __init__(
|
43
|
-
self, phase: ParameterValueType, label: Optional[str] = None, *, duration=None, unit="dt"
|
44
|
-
):
|
40
|
+
def __init__(self, phase: ParameterValueType, label: Optional[str] = None):
|
45
41
|
"""
|
46
42
|
Args:
|
47
43
|
phase: The value of phase it takes.
|
48
44
|
label: An optional label for the gate.
|
49
45
|
"""
|
50
|
-
super().__init__("global_phase", 0, [phase], label=label
|
46
|
+
super().__init__("global_phase", 0, [phase], label=label)
|
51
47
|
|
52
48
|
def _define(self):
|
49
|
+
# pylint: disable=cyclic-import
|
50
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
51
|
+
|
53
52
|
q = QuantumRegister(0, "q")
|
54
53
|
qc = QuantumCircuit(q, name=self.name, global_phase=self.params[0])
|
55
54
|
|
@@ -18,7 +18,6 @@ from math import sqrt, pi
|
|
18
18
|
from typing import Optional, Union
|
19
19
|
import numpy
|
20
20
|
from qiskit.circuit.singleton import SingletonGate, SingletonControlledGate, stdlib_singleton_key
|
21
|
-
from qiskit.circuit.quantumregister import QuantumRegister
|
22
21
|
from qiskit.circuit._utils import with_gate_array, with_controlled_gate_array
|
23
22
|
from qiskit._accelerate.circuit import StandardGate
|
24
23
|
|
@@ -57,9 +56,9 @@ class HGate(SingletonGate):
|
|
57
56
|
|
58
57
|
_standard_gate = StandardGate.HGate
|
59
58
|
|
60
|
-
def __init__(self, label: Optional[str] = None
|
59
|
+
def __init__(self, label: Optional[str] = None):
|
61
60
|
"""Create new H gate."""
|
62
|
-
super().__init__("h", 1, [], label=label
|
61
|
+
super().__init__("h", 1, [], label=label)
|
63
62
|
|
64
63
|
_singleton_lookup_key = stdlib_singleton_key()
|
65
64
|
|
@@ -68,7 +67,7 @@ class HGate(SingletonGate):
|
|
68
67
|
gate h a { u2(0,pi) a; }
|
69
68
|
"""
|
70
69
|
# pylint: disable=cyclic-import
|
71
|
-
from qiskit.circuit
|
70
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
72
71
|
from .u2 import U2Gate
|
73
72
|
|
74
73
|
q = QuantumRegister(1, "q")
|
@@ -196,8 +195,6 @@ class CHGate(SingletonControlledGate):
|
|
196
195
|
label: Optional[str] = None,
|
197
196
|
ctrl_state: Optional[Union[int, str]] = None,
|
198
197
|
*,
|
199
|
-
duration=None,
|
200
|
-
unit="dt",
|
201
198
|
_base_label=None,
|
202
199
|
):
|
203
200
|
"""Create new CH gate."""
|
@@ -209,8 +206,6 @@ class CHGate(SingletonControlledGate):
|
|
209
206
|
label=label,
|
210
207
|
ctrl_state=ctrl_state,
|
211
208
|
base_gate=HGate(label=_base_label),
|
212
|
-
duration=duration,
|
213
|
-
unit=unit,
|
214
209
|
_base_label=_base_label,
|
215
210
|
)
|
216
211
|
|
@@ -229,7 +224,7 @@ class CHGate(SingletonControlledGate):
|
|
229
224
|
}
|
230
225
|
"""
|
231
226
|
# pylint: disable=cyclic-import
|
232
|
-
from qiskit.circuit
|
227
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
233
228
|
from .x import CXGate # pylint: disable=cyclic-import
|
234
229
|
from .t import TGate, TdgGate
|
235
230
|
from .s import SGate, SdgGate
|
@@ -49,9 +49,9 @@ class IGate(SingletonGate):
|
|
49
49
|
|
50
50
|
_standard_gate = StandardGate.IGate
|
51
51
|
|
52
|
-
def __init__(self, label: Optional[str] = None
|
52
|
+
def __init__(self, label: Optional[str] = None):
|
53
53
|
"""Create new Identity gate."""
|
54
|
-
super().__init__("id", 1, [], label=label
|
54
|
+
super().__init__("id", 1, [], label=label)
|
55
55
|
|
56
56
|
_singleton_lookup_key = stdlib_singleton_key()
|
57
57
|
|
@@ -17,7 +17,6 @@ from typing import Optional
|
|
17
17
|
import numpy as np
|
18
18
|
|
19
19
|
from qiskit.circuit.singleton import SingletonGate, stdlib_singleton_key
|
20
|
-
from qiskit.circuit.quantumregister import QuantumRegister
|
21
20
|
from qiskit.circuit._utils import with_gate_array
|
22
21
|
from qiskit._accelerate.circuit import StandardGate
|
23
22
|
|
@@ -88,9 +87,9 @@ class iSwapGate(SingletonGate):
|
|
88
87
|
|
89
88
|
_standard_gate = StandardGate.ISwapGate
|
90
89
|
|
91
|
-
def __init__(self, label: Optional[str] = None
|
90
|
+
def __init__(self, label: Optional[str] = None):
|
92
91
|
"""Create new iSwap gate."""
|
93
|
-
super().__init__("iswap", 2, [], label=label
|
92
|
+
super().__init__("iswap", 2, [], label=label)
|
94
93
|
|
95
94
|
_singleton_lookup_key = stdlib_singleton_key()
|
96
95
|
|
@@ -106,7 +105,7 @@ class iSwapGate(SingletonGate):
|
|
106
105
|
}
|
107
106
|
"""
|
108
107
|
# pylint: disable=cyclic-import
|
109
|
-
from qiskit.circuit
|
108
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
110
109
|
|
111
110
|
from .h import HGate
|
112
111
|
from .s import SGate
|
@@ -17,7 +17,6 @@ from cmath import exp
|
|
17
17
|
import numpy
|
18
18
|
from qiskit.circuit.controlledgate import ControlledGate
|
19
19
|
from qiskit.circuit.gate import Gate
|
20
|
-
from qiskit.circuit.quantumregister import QuantumRegister
|
21
20
|
from qiskit.circuit.parameterexpression import ParameterValueType
|
22
21
|
from qiskit._accelerate.circuit import StandardGate
|
23
22
|
|
@@ -78,15 +77,13 @@ class PhaseGate(Gate):
|
|
78
77
|
|
79
78
|
_standard_gate = StandardGate.PhaseGate
|
80
79
|
|
81
|
-
def __init__(
|
82
|
-
self, theta: ParameterValueType, label: str | None = None, *, duration=None, unit="dt"
|
83
|
-
):
|
80
|
+
def __init__(self, theta: ParameterValueType, label: str | None = None):
|
84
81
|
"""Create new Phase gate."""
|
85
|
-
super().__init__("p", 1, [theta], label=label
|
82
|
+
super().__init__("p", 1, [theta], label=label)
|
86
83
|
|
87
84
|
def _define(self):
|
88
85
|
# pylint: disable=cyclic-import
|
89
|
-
from qiskit.circuit
|
86
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
90
87
|
from .u import UGate
|
91
88
|
|
92
89
|
q = QuantumRegister(1, "q")
|
@@ -208,8 +205,6 @@ class CPhaseGate(ControlledGate):
|
|
208
205
|
label: str | None = None,
|
209
206
|
ctrl_state: str | int | None = None,
|
210
207
|
*,
|
211
|
-
duration=None,
|
212
|
-
unit="dt",
|
213
208
|
_base_label=None,
|
214
209
|
):
|
215
210
|
"""Create new CPhase gate."""
|
@@ -221,8 +216,6 @@ class CPhaseGate(ControlledGate):
|
|
221
216
|
label=label,
|
222
217
|
ctrl_state=ctrl_state,
|
223
218
|
base_gate=PhaseGate(theta, label=_base_label),
|
224
|
-
duration=duration,
|
225
|
-
unit=unit,
|
226
219
|
)
|
227
220
|
|
228
221
|
def _define(self):
|
@@ -234,7 +227,7 @@ class CPhaseGate(ControlledGate):
|
|
234
227
|
}
|
235
228
|
"""
|
236
229
|
# pylint: disable=cyclic-import
|
237
|
-
from qiskit.circuit
|
230
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
238
231
|
|
239
232
|
# ┌────────┐
|
240
233
|
# q_0: ┤ P(λ/2) ├──■───────────────■────────────
|
@@ -342,8 +335,6 @@ class MCPhaseGate(ControlledGate):
|
|
342
335
|
label: str | None = None,
|
343
336
|
ctrl_state: str | int | None = None,
|
344
337
|
*,
|
345
|
-
duration=None,
|
346
|
-
unit="dt",
|
347
338
|
_base_label=None,
|
348
339
|
):
|
349
340
|
"""Create new MCPhase gate."""
|
@@ -355,13 +346,11 @@ class MCPhaseGate(ControlledGate):
|
|
355
346
|
label=label,
|
356
347
|
ctrl_state=ctrl_state,
|
357
348
|
base_gate=PhaseGate(lam, label=_base_label),
|
358
|
-
duration=duration,
|
359
|
-
unit=unit,
|
360
349
|
)
|
361
350
|
|
362
351
|
def _define(self):
|
363
352
|
# pylint: disable=cyclic-import
|
364
|
-
from qiskit.circuit
|
353
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
365
354
|
|
366
355
|
qr = QuantumRegister(self.num_qubits, "q")
|
367
356
|
qc = QuantumCircuit(qr, name=self.name)
|
@@ -372,24 +361,16 @@ class MCPhaseGate(ControlledGate):
|
|
372
361
|
qc.cp(self.params[0], 0, 1)
|
373
362
|
else:
|
374
363
|
lam = self.params[0]
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
from .u3 import _gray_code_chain
|
386
|
-
|
387
|
-
scaled_lam = self.params[0] / (2 ** (self.num_ctrl_qubits - 1))
|
388
|
-
bottom_gate = CPhaseGate(scaled_lam)
|
389
|
-
for operation, qubits, clbits in _gray_code_chain(
|
390
|
-
qr, self.num_ctrl_qubits, bottom_gate
|
391
|
-
):
|
392
|
-
qc._append(operation, qubits, clbits)
|
364
|
+
|
365
|
+
q_controls = list(range(self.num_ctrl_qubits))
|
366
|
+
q_target = self.num_ctrl_qubits
|
367
|
+
new_target = q_target
|
368
|
+
for k in range(self.num_ctrl_qubits):
|
369
|
+
# Note: it's better *not* to run transpile recursively
|
370
|
+
qc.mcrz(lam / (2**k), q_controls, new_target, use_basis_gates=False)
|
371
|
+
new_target = q_controls.pop()
|
372
|
+
qc.p(lam / (2**self.num_ctrl_qubits), new_target)
|
373
|
+
|
393
374
|
self.definition = qc
|
394
375
|
|
395
376
|
def control(
|
@@ -18,7 +18,6 @@ from math import pi
|
|
18
18
|
from typing import Optional
|
19
19
|
import numpy
|
20
20
|
from qiskit.circuit.gate import Gate
|
21
|
-
from qiskit.circuit.quantumregister import QuantumRegister
|
22
21
|
from qiskit.circuit.parameterexpression import ParameterValueType
|
23
22
|
from qiskit._accelerate.circuit import StandardGate
|
24
23
|
|
@@ -33,9 +32,10 @@ class RGate(Gate):
|
|
33
32
|
|
34
33
|
.. code-block:: text
|
35
34
|
|
36
|
-
|
37
|
-
q_0:
|
38
|
-
|
35
|
+
┌─────────┐
|
36
|
+
q_0: ┤ R(θ,ϕ) ├
|
37
|
+
└─────────┘
|
38
|
+
|
39
39
|
|
40
40
|
**Matrix Representation:**
|
41
41
|
|
@@ -57,19 +57,16 @@ class RGate(Gate):
|
|
57
57
|
theta: ParameterValueType,
|
58
58
|
phi: ParameterValueType,
|
59
59
|
label: Optional[str] = None,
|
60
|
-
*,
|
61
|
-
duration=None,
|
62
|
-
unit="dt",
|
63
60
|
):
|
64
61
|
"""Create new r single-qubit gate."""
|
65
|
-
super().__init__("r", 1, [theta, phi], label=label
|
62
|
+
super().__init__("r", 1, [theta, phi], label=label)
|
66
63
|
|
67
64
|
def _define(self):
|
68
65
|
"""
|
69
66
|
gate r(θ, φ) a {u3(θ, φ - π/2, -φ + π/2) a;}
|
70
67
|
"""
|
71
68
|
# pylint: disable=cyclic-import
|
72
|
-
from qiskit.circuit
|
69
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
73
70
|
from .u3 import U3Gate
|
74
71
|
|
75
72
|
q = QuantumRegister(1, "q")
|
@@ -83,7 +80,7 @@ class RGate(Gate):
|
|
83
80
|
self.definition = qc
|
84
81
|
|
85
82
|
def inverse(self, annotated: bool = False):
|
86
|
-
"""Invert this gate as: :math:`
|
83
|
+
r"""Invert this gate as: :math:`R(θ, φ)^{\dagger} = R(-θ, φ)`
|
87
84
|
|
88
85
|
Args:
|
89
86
|
annotated: when set to ``True``, this is typically used to return an
|
@@ -21,8 +21,7 @@ import numpy
|
|
21
21
|
|
22
22
|
from qiskit.circuit.controlledgate import ControlledGate
|
23
23
|
from qiskit.circuit.gate import Gate
|
24
|
-
from qiskit.circuit.
|
25
|
-
from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
|
24
|
+
from qiskit.circuit.parameterexpression import ParameterValueType
|
26
25
|
from qiskit._accelerate.circuit import StandardGate
|
27
26
|
|
28
27
|
|
@@ -55,18 +54,16 @@ class RXGate(Gate):
|
|
55
54
|
|
56
55
|
_standard_gate = StandardGate.RXGate
|
57
56
|
|
58
|
-
def __init__(
|
59
|
-
self, theta: ParameterValueType, label: Optional[str] = None, *, duration=None, unit="dt"
|
60
|
-
):
|
57
|
+
def __init__(self, theta: ParameterValueType, label: Optional[str] = None):
|
61
58
|
"""Create new RX gate."""
|
62
|
-
super().__init__("rx", 1, [theta], label=label
|
59
|
+
super().__init__("rx", 1, [theta], label=label)
|
63
60
|
|
64
61
|
def _define(self):
|
65
62
|
"""
|
66
63
|
gate rx(theta) a {r(theta, 0) a;}
|
67
64
|
"""
|
68
65
|
# pylint: disable=cyclic-import
|
69
|
-
from qiskit.circuit
|
66
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
70
67
|
from .r import RGate
|
71
68
|
|
72
69
|
q = QuantumRegister(1, "q")
|
@@ -104,11 +101,6 @@ class RXGate(Gate):
|
|
104
101
|
gate = CRXGate(self.params[0], label=label, ctrl_state=ctrl_state)
|
105
102
|
gate.base_gate.label = self.label
|
106
103
|
else:
|
107
|
-
# If the gate parameters contain free parameters, we cannot eagerly synthesize
|
108
|
-
# the controlled gate decomposition. In this case, we annotate the gate per default.
|
109
|
-
if annotated is None:
|
110
|
-
annotated = any(isinstance(p, ParameterExpression) for p in self.params)
|
111
|
-
|
112
104
|
gate = super().control(
|
113
105
|
num_ctrl_qubits=num_ctrl_qubits,
|
114
106
|
label=label,
|
@@ -218,8 +210,6 @@ class CRXGate(ControlledGate):
|
|
218
210
|
label: Optional[str] = None,
|
219
211
|
ctrl_state: Optional[Union[str, int]] = None,
|
220
212
|
*,
|
221
|
-
duration=None,
|
222
|
-
unit="dt",
|
223
213
|
_base_label=None,
|
224
214
|
):
|
225
215
|
"""Create new CRX gate."""
|
@@ -244,7 +234,7 @@ class CRXGate(ControlledGate):
|
|
244
234
|
}
|
245
235
|
"""
|
246
236
|
# pylint: disable=cyclic-import
|
247
|
-
from qiskit.circuit
|
237
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
248
238
|
from .u1 import U1Gate
|
249
239
|
from .u3 import U3Gate
|
250
240
|
from .x import CXGate
|