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
@@ -24,7 +24,7 @@ import numpy as np
|
|
24
24
|
from qiskit.exceptions import QiskitError
|
25
25
|
from qiskit.quantum_info.operators.op_shape import OpShape
|
26
26
|
from qiskit.quantum_info.operators.operator import Operator
|
27
|
-
from qiskit.quantum_info.operators.symplectic import Clifford, Pauli, PauliList
|
27
|
+
from qiskit.quantum_info.operators.symplectic import Clifford, Pauli, PauliList, SparsePauliOp
|
28
28
|
from qiskit.quantum_info.operators.symplectic.clifford_circuits import _append_x
|
29
29
|
from qiskit.quantum_info.states.quantum_state import QuantumState
|
30
30
|
from qiskit.circuit import QuantumCircuit, Instruction
|
@@ -38,7 +38,9 @@ class StabilizerState(QuantumState):
|
|
38
38
|
Stabilizer simulator using the convention from reference [1].
|
39
39
|
Based on the internal class :class:`~qiskit.quantum_info.Clifford`.
|
40
40
|
|
41
|
-
..
|
41
|
+
.. plot::
|
42
|
+
:include-source:
|
43
|
+
:nofigs:
|
42
44
|
|
43
45
|
from qiskit import QuantumCircuit
|
44
46
|
from qiskit.quantum_info import StabilizerState, Pauli
|
@@ -67,7 +69,9 @@ class StabilizerState(QuantumState):
|
|
67
69
|
Given a list of stabilizers, :meth:`qiskit.quantum_info.StabilizerState.from_stabilizer_list`
|
68
70
|
returns a state stabilized by the list
|
69
71
|
|
70
|
-
..
|
72
|
+
.. plot::
|
73
|
+
:include-source:
|
74
|
+
:nofigs:
|
71
75
|
|
72
76
|
from qiskit.quantum_info import StabilizerState
|
73
77
|
|
@@ -255,7 +259,34 @@ class StabilizerState(QuantumState):
|
|
255
259
|
ret._data = self.clifford.compose(other.clifford, qargs=qargs)
|
256
260
|
return ret
|
257
261
|
|
258
|
-
def expectation_value(self, oper: Pauli, qargs: None | list = None) -> complex:
|
262
|
+
def expectation_value(self, oper: Pauli | SparsePauliOp, qargs: None | list = None) -> complex:
|
263
|
+
"""Compute the expectation value of a Pauli or SparsePauliOp operator.
|
264
|
+
|
265
|
+
Args:
|
266
|
+
oper: A Pauli or SparsePauliOp operator to evaluate the expectation value.
|
267
|
+
qargs: Subsystems to apply the operator on.
|
268
|
+
|
269
|
+
Returns:
|
270
|
+
The expectation value.
|
271
|
+
|
272
|
+
Raises:
|
273
|
+
QiskitError: if oper is not a Pauli or SparsePauliOp operator.
|
274
|
+
"""
|
275
|
+
if isinstance(oper, Pauli):
|
276
|
+
return self._expectation_value_pauli(oper, qargs)
|
277
|
+
|
278
|
+
if isinstance(oper, SparsePauliOp):
|
279
|
+
return sum(
|
280
|
+
coeff * self._expectation_value_pauli(Pauli((z, x)), qargs)
|
281
|
+
for z, x, coeff in zip(oper.paulis.z, oper.paulis.x, oper.coeffs)
|
282
|
+
)
|
283
|
+
|
284
|
+
raise QiskitError(
|
285
|
+
"Operator for expectation value is not a Pauli or SparsePauliOp operator, "
|
286
|
+
f"but {type(oper)}."
|
287
|
+
)
|
288
|
+
|
289
|
+
def _expectation_value_pauli(self, oper: Pauli, qargs: None | list = None) -> complex:
|
259
290
|
"""Compute the expectation value of a Pauli operator.
|
260
291
|
|
261
292
|
Args:
|
@@ -198,7 +198,7 @@ class Statevector(QuantumState, TolerancesMixin):
|
|
198
198
|
def _ipython_display_(self):
|
199
199
|
out = self.draw()
|
200
200
|
if isinstance(out, str):
|
201
|
-
print(out)
|
201
|
+
print(out) # pylint: disable=bad-builtin
|
202
202
|
else:
|
203
203
|
from IPython.display import display
|
204
204
|
|
@@ -545,7 +545,9 @@ class Statevector(QuantumState, TolerancesMixin):
|
|
545
545
|
Consider a 2-qubit product state
|
546
546
|
:math:`|\\psi\\rangle=|+\\rangle\\otimes|0\\rangle`.
|
547
547
|
|
548
|
-
..
|
548
|
+
.. plot::
|
549
|
+
:include-source:
|
550
|
+
:nofigs:
|
549
551
|
|
550
552
|
from qiskit.quantum_info import Statevector
|
551
553
|
|
@@ -572,7 +574,9 @@ class Statevector(QuantumState, TolerancesMixin):
|
|
572
574
|
We can also permute the order of qubits in the ``qargs`` list
|
573
575
|
to change the qubit position in the probabilities output
|
574
576
|
|
575
|
-
..
|
577
|
+
.. plot::
|
578
|
+
:include-source:
|
579
|
+
:nofigs:
|
576
580
|
|
577
581
|
from qiskit.quantum_info import Statevector
|
578
582
|
|
@@ -796,7 +800,9 @@ class Statevector(QuantumState, TolerancesMixin):
|
|
796
800
|
The ket-form of a 2-qubit statevector
|
797
801
|
:math:`|\psi\rangle = |-\rangle\otimes |0\rangle`
|
798
802
|
|
799
|
-
..
|
803
|
+
.. plot::
|
804
|
+
:include-source:
|
805
|
+
:nofigs:
|
800
806
|
|
801
807
|
from qiskit.quantum_info import Statevector
|
802
808
|
|
@@ -810,7 +816,9 @@ class Statevector(QuantumState, TolerancesMixin):
|
|
810
816
|
For non-qubit subsystems the integer range can go from 0 to 9. For
|
811
817
|
example in a qutrit system
|
812
818
|
|
813
|
-
..
|
819
|
+
.. plot::
|
820
|
+
:include-source:
|
821
|
+
:nofigs:
|
814
822
|
|
815
823
|
import numpy as np
|
816
824
|
from qiskit.quantum_info import Statevector
|
@@ -829,7 +837,9 @@ class Statevector(QuantumState, TolerancesMixin):
|
|
829
837
|
following example is for a 20-dimensional system consisting of
|
830
838
|
a qubit and 10-dimensional qudit.
|
831
839
|
|
832
|
-
..
|
840
|
+
.. plot::
|
841
|
+
:include-source:
|
842
|
+
:nofigs:
|
833
843
|
|
834
844
|
import numpy as np
|
835
845
|
from qiskit.quantum_info import Statevector
|
qiskit/result/__init__.py
CHANGED
@@ -48,26 +48,14 @@ Expectation values
|
|
48
48
|
|
49
49
|
.. autofunction:: sampled_expectation_value
|
50
50
|
|
51
|
-
Mitigation
|
52
|
-
==========
|
53
|
-
.. autosummary::
|
54
|
-
:toctree: ../stubs/
|
55
|
-
|
56
|
-
BaseReadoutMitigator
|
57
|
-
CorrelatedReadoutMitigator
|
58
|
-
LocalReadoutMitigator
|
59
|
-
|
60
51
|
"""
|
61
52
|
|
62
|
-
from .
|
53
|
+
from .counts import Counts
|
54
|
+
from .distributions import QuasiDistribution, ProbDistribution
|
63
55
|
from .exceptions import ResultError
|
56
|
+
from .models import MeasLevel, MeasReturnType
|
57
|
+
from .result import Result
|
58
|
+
from .sampled_expval import sampled_expectation_value
|
64
59
|
from .utils import marginal_counts
|
65
60
|
from .utils import marginal_distribution
|
66
61
|
from .utils import marginal_memory
|
67
|
-
from .counts import Counts
|
68
|
-
|
69
|
-
from .distributions import QuasiDistribution, ProbDistribution
|
70
|
-
from .sampled_expval import sampled_expectation_value
|
71
|
-
from .mitigation.base_readout_mitigator import BaseReadoutMitigator
|
72
|
-
from .mitigation.correlated_readout_mitigator import CorrelatedReadoutMitigator
|
73
|
-
from .mitigation.local_readout_mitigator import LocalReadoutMitigator
|
qiskit/result/models.py
CHANGED
@@ -13,13 +13,26 @@
|
|
13
13
|
"""Schema and helper models for schema-conformant Results."""
|
14
14
|
|
15
15
|
import copy
|
16
|
-
import
|
16
|
+
from enum import Enum, IntEnum
|
17
17
|
|
18
|
-
from qiskit.qobj.utils import MeasReturnType, MeasLevel
|
19
|
-
from qiskit.qobj import QobjExperimentHeader
|
20
18
|
from qiskit.exceptions import QiskitError
|
21
19
|
|
22
20
|
|
21
|
+
class MeasReturnType(str, Enum):
|
22
|
+
"""meas_return allowed values defined by legacy PulseQobjConfig object but still used by Result."""
|
23
|
+
|
24
|
+
AVERAGE = "avg"
|
25
|
+
SINGLE = "single"
|
26
|
+
|
27
|
+
|
28
|
+
class MeasLevel(IntEnum):
|
29
|
+
"""MeasLevel allowed values defined by legacy PulseQobjConfig object but still used by Result."""
|
30
|
+
|
31
|
+
RAW = 0
|
32
|
+
KERNELED = 1
|
33
|
+
CLASSIFIED = 2
|
34
|
+
|
35
|
+
|
23
36
|
class ExperimentResultData:
|
24
37
|
"""Class representing experiment result data"""
|
25
38
|
|
@@ -132,8 +145,7 @@ class ExperimentResult:
|
|
132
145
|
status (str): The status of the experiment
|
133
146
|
seed (int): The seed used for simulation (if run on a simulator)
|
134
147
|
meas_return (str): The type of measurement returned
|
135
|
-
header (
|
136
|
-
header for the experiment
|
148
|
+
header (dict): A free form dictionary header for the experiment
|
137
149
|
kwargs: Arbitrary extra fields
|
138
150
|
|
139
151
|
Raises:
|
@@ -197,7 +209,7 @@ class ExperimentResult:
|
|
197
209
|
"meas_level": self.meas_level,
|
198
210
|
}
|
199
211
|
if hasattr(self, "header"):
|
200
|
-
out_dict["header"] = self.header
|
212
|
+
out_dict["header"] = self.header
|
201
213
|
if hasattr(self, "status"):
|
202
214
|
out_dict["status"] = self.status
|
203
215
|
if hasattr(self, "seed"):
|
@@ -223,11 +235,6 @@ class ExperimentResult:
|
|
223
235
|
|
224
236
|
in_data = copy.copy(data)
|
225
237
|
data_obj = ExperimentResultData.from_dict(in_data.pop("data"))
|
226
|
-
if "header" in in_data:
|
227
|
-
with warnings.catch_warnings():
|
228
|
-
# The class QobjExperimentHeader is deprecated
|
229
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
230
|
-
in_data["header"] = QobjExperimentHeader.from_dict(in_data.pop("header"))
|
231
238
|
shots = in_data.pop("shots")
|
232
239
|
success = in_data.pop("success")
|
233
240
|
|
qiskit/result/result.py
CHANGED
@@ -12,154 +12,63 @@
|
|
12
12
|
|
13
13
|
"""Model for schema-conformant Results."""
|
14
14
|
|
15
|
-
from collections.abc import Iterable
|
16
15
|
import copy
|
17
16
|
import warnings
|
18
17
|
|
19
18
|
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
20
|
-
from qiskit.pulse.schedule import Schedule
|
21
19
|
from qiskit.exceptions import QiskitError
|
22
20
|
from qiskit.quantum_info.states import statevector
|
23
|
-
from qiskit.result.models import ExperimentResult
|
21
|
+
from qiskit.result.models import ExperimentResult, MeasLevel
|
24
22
|
from qiskit.result import postprocess
|
25
23
|
from qiskit.result.counts import Counts
|
26
|
-
from qiskit.qobj.utils import MeasLevel
|
27
|
-
from qiskit.qobj import QobjHeader
|
28
|
-
|
29
|
-
_MISSING = object()
|
30
24
|
|
31
25
|
|
32
26
|
class Result:
|
33
27
|
"""Model for Results.
|
34
28
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
be used in Qiskit 2.0. It will, however, still be possible to set ``qobj_id`` as a
|
41
|
-
generic kwarg, which will land in the metadata field with the other generic kwargs.
|
42
|
-
|
43
|
-
Args:
|
44
|
-
backend_name (str): (REQUIRED) backend name.
|
45
|
-
backend_version (str): (REQUIRED) backend version, in the form X.Y.Z.
|
46
|
-
qobj_id (str): (REQUIRED) user-generated Qobj id.
|
47
|
-
job_id (str): (REQUIRED) unique execution id from the backend.
|
48
|
-
success (bool): (REQUIRED) True if complete input qobj executed correctly. (Implies
|
29
|
+
Attributes:
|
30
|
+
backend_name (str): backend name.
|
31
|
+
backend_version (str): backend version, in the form X.Y.Z.
|
32
|
+
job_id (str): unique execution id from the backend.
|
33
|
+
success (bool): True if complete input executed correctly. (Implies
|
49
34
|
each experiment success)
|
50
|
-
results (list[ExperimentResult]):
|
51
|
-
experiments of the input
|
52
|
-
date (str):
|
53
|
-
|
54
|
-
|
35
|
+
results (list[ExperimentResult]): corresponding results for array of
|
36
|
+
experiments of the input
|
37
|
+
date (str): optional date field
|
38
|
+
status (str): optional status field
|
39
|
+
header (dict): an optional free form dictionary header
|
55
40
|
"""
|
56
41
|
|
57
42
|
_metadata = {}
|
58
43
|
|
59
44
|
def __init__(
|
60
45
|
self,
|
61
|
-
|
46
|
+
*,
|
47
|
+
backend_name=None,
|
48
|
+
backend_version=None,
|
49
|
+
job_id=None,
|
50
|
+
success=None,
|
51
|
+
results=None,
|
62
52
|
date=None,
|
63
53
|
status=None,
|
64
54
|
header=None,
|
65
55
|
**kwargs,
|
66
56
|
):
|
67
|
-
# The following arguments are required.
|
68
|
-
required_args = {
|
69
|
-
"backend_name": _MISSING,
|
70
|
-
"backend_version": _MISSING,
|
71
|
-
"qobj_id": _MISSING,
|
72
|
-
"job_id": _MISSING,
|
73
|
-
"success": _MISSING,
|
74
|
-
"results": _MISSING,
|
75
|
-
}
|
76
|
-
# Step 1: iterate over kwargs.
|
77
|
-
# An item from required_args might be set as a kwarg, so we must separate
|
78
|
-
# true kwargs from "required_args" kwargs.
|
79
|
-
true_kwargs = {}
|
80
|
-
for key, value in kwargs.items():
|
81
|
-
if key in required_args:
|
82
|
-
required_args[key] = value
|
83
|
-
else:
|
84
|
-
true_kwargs[key] = value
|
85
|
-
# Step 2: iterate over args, which are expected in the order of the index_map below.
|
86
|
-
index_map = ["backend_name", "backend_version", "qobj_id", "job_id", "success", "results"]
|
87
|
-
raise_qobj = False
|
88
|
-
missing_args = []
|
89
|
-
for index, name in enumerate(index_map):
|
90
|
-
try:
|
91
|
-
value = args[index]
|
92
|
-
required_args[name] = value
|
93
|
-
# The use of args is deprecated in 1.4 and will be removed in 2.0.
|
94
|
-
# Furthermore, qobj_id will be ignored if set as a kwarg in 2.0.
|
95
|
-
if name == "qobj_id":
|
96
|
-
warnings.warn(
|
97
|
-
"The use of positional arguments in `qiskit.result.result.Result.__init__()` "
|
98
|
-
"is deprecated as of Qiskit 1.4, and will be disabled in Qiskit 2.0. "
|
99
|
-
"Please set this value using kwarg syntax, "
|
100
|
-
f"i.e: `Result(...,{name}={name}_value)`. "
|
101
|
-
"The `qobj_id` argument will no longer be used in Qiskit 2.0, "
|
102
|
-
"but it will still be possible to "
|
103
|
-
"set as a kwarg that will land in the metadata field.",
|
104
|
-
category=DeprecationWarning,
|
105
|
-
stacklevel=2,
|
106
|
-
)
|
107
|
-
else:
|
108
|
-
warnings.warn(
|
109
|
-
"The use of positional arguments in `qiskit.result.result.Result.__init__()` "
|
110
|
-
"is deprecated as of Qiskit 1.4, and will be disabled in Qiskit 2.0. "
|
111
|
-
"Please set this value using kwarg syntax, "
|
112
|
-
f"i.e: `Result(...,{name}={name}_value)`. ",
|
113
|
-
category=DeprecationWarning,
|
114
|
-
stacklevel=2,
|
115
|
-
)
|
116
|
-
except IndexError:
|
117
|
-
if required_args[name] is _MISSING:
|
118
|
-
missing_args = [
|
119
|
-
key for (key, value) in required_args.items() if value is _MISSING
|
120
|
-
]
|
121
|
-
elif name == "qobj_id":
|
122
|
-
raise_qobj = True
|
123
|
-
break
|
124
|
-
|
125
|
-
# The deprecation warning should be raised outside of the try-except,
|
126
|
-
# not to show a confusing trace that points to the IndexError
|
127
|
-
if len(missing_args) > 1:
|
128
|
-
raise TypeError(
|
129
|
-
f"Result.__init__() missing {len(missing_args)} required arguments: {missing_args}"
|
130
|
-
)
|
131
|
-
if len(missing_args) == 1:
|
132
|
-
raise TypeError(f"Result.__init__() missing a required argument: {missing_args[0]}")
|
133
|
-
if raise_qobj:
|
134
|
-
# qobj_id will be ignored if set as a kwarg in 2.0.
|
135
|
-
warnings.warn(
|
136
|
-
"The `qobj_id` argument will no longer be used in Qiskit 2.0, "
|
137
|
-
"but it will still be possible to "
|
138
|
-
"set as a kwarg that will land in the metadata field.",
|
139
|
-
category=DeprecationWarning,
|
140
|
-
stacklevel=2,
|
141
|
-
)
|
142
|
-
|
143
57
|
self._metadata = {}
|
144
|
-
self.backend_name =
|
145
|
-
self.backend_version =
|
146
|
-
self.
|
147
|
-
self.
|
148
|
-
self.
|
149
|
-
self.results = (
|
150
|
-
[required_args["results"]]
|
151
|
-
if not isinstance(required_args["results"], Iterable)
|
152
|
-
else required_args["results"]
|
153
|
-
)
|
58
|
+
self.backend_name = backend_name
|
59
|
+
self.backend_version = backend_version
|
60
|
+
self.job_id = job_id
|
61
|
+
self.success = success
|
62
|
+
self.results = results
|
154
63
|
self.date = date
|
155
64
|
self.status = status
|
156
65
|
self.header = header
|
157
|
-
self._metadata.update(
|
66
|
+
self._metadata.update(kwargs)
|
158
67
|
|
159
68
|
def __repr__(self):
|
160
69
|
out = (
|
161
70
|
f"Result(backend_name='{self.backend_name}', backend_version='{self.backend_version}',"
|
162
|
-
f"
|
71
|
+
f" job_id='{self.job_id}', success={self.success},"
|
163
72
|
f" results={self.results}"
|
164
73
|
)
|
165
74
|
out += f", date={self.date}, status={self.status}, header={self.header}"
|
@@ -182,8 +91,7 @@ class Result:
|
|
182
91
|
"backend_name": self.backend_name,
|
183
92
|
"backend_version": self.backend_version,
|
184
93
|
"date": self.date,
|
185
|
-
"header":
|
186
|
-
"qobj_id": self.qobj_id,
|
94
|
+
"header": self.header,
|
187
95
|
"job_id": self.job_id,
|
188
96
|
"status": self.status,
|
189
97
|
"success": self.success,
|
@@ -213,10 +121,6 @@ class Result:
|
|
213
121
|
|
214
122
|
in_data = copy.copy(data)
|
215
123
|
in_data["results"] = [ExperimentResult.from_dict(x) for x in in_data.pop("results")]
|
216
|
-
if in_data.get("header") is not None:
|
217
|
-
with warnings.catch_warnings():
|
218
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
219
|
-
in_data["header"] = QobjHeader.from_dict(in_data.pop("header"))
|
220
124
|
return cls(**in_data)
|
221
125
|
|
222
126
|
def data(self, experiment=None):
|
@@ -227,11 +131,10 @@ class Result:
|
|
227
131
|
the get_xxx method, and the data will be post-processed for the data type.
|
228
132
|
|
229
133
|
Args:
|
230
|
-
experiment (str or QuantumCircuit or
|
134
|
+
experiment (str or QuantumCircuit or int or None): the index of the
|
231
135
|
experiment. Several types are accepted for convenience::
|
232
136
|
* str: the name of the experiment.
|
233
137
|
* QuantumCircuit: the name of the circuit instance will be used.
|
234
|
-
* Schedule: the name of the schedule instance will be used.
|
235
138
|
* int: the position of the experiment.
|
236
139
|
* None: if there is only one experiment, returns it.
|
237
140
|
|
@@ -278,7 +181,7 @@ class Result:
|
|
278
181
|
['00000', '01000', '10100', '10100', '11101', '11100', '00101', ..., '01010']
|
279
182
|
|
280
183
|
Args:
|
281
|
-
experiment (str or QuantumCircuit or
|
184
|
+
experiment (str or QuantumCircuit or int or None): the index of the
|
282
185
|
experiment, as specified by ``data()``.
|
283
186
|
|
284
187
|
Returns:
|
@@ -301,7 +204,7 @@ class Result:
|
|
301
204
|
exp_result = self._get_experiment(experiment)
|
302
205
|
try:
|
303
206
|
try: # header is not available
|
304
|
-
header = exp_result.header
|
207
|
+
header = exp_result.header
|
305
208
|
except (AttributeError, QiskitError):
|
306
209
|
header = None
|
307
210
|
|
@@ -330,7 +233,7 @@ class Result:
|
|
330
233
|
"""Get the histogram data of an experiment.
|
331
234
|
|
332
235
|
Args:
|
333
|
-
experiment (str or QuantumCircuit or
|
236
|
+
experiment (str or QuantumCircuit or int or None): the index of the
|
334
237
|
experiment, as specified by ``data([experiment])``.
|
335
238
|
|
336
239
|
Returns:
|
@@ -352,7 +255,7 @@ class Result:
|
|
352
255
|
for key in exp_keys:
|
353
256
|
exp = self._get_experiment(key)
|
354
257
|
try:
|
355
|
-
header = exp.header
|
258
|
+
header = exp.header
|
356
259
|
except (AttributeError, QiskitError): # header is not available
|
357
260
|
header = None
|
358
261
|
|
@@ -382,7 +285,7 @@ class Result:
|
|
382
285
|
"""Get the final statevector of an experiment.
|
383
286
|
|
384
287
|
Args:
|
385
|
-
experiment (str or QuantumCircuit or
|
288
|
+
experiment (str or QuantumCircuit or int or None): the index of the
|
386
289
|
experiment, as specified by ``data()``.
|
387
290
|
decimals (int): the number of decimals in the statevector.
|
388
291
|
If None, does not round.
|
@@ -404,7 +307,7 @@ class Result:
|
|
404
307
|
"""Get the final unitary of an experiment.
|
405
308
|
|
406
309
|
Args:
|
407
|
-
experiment (str or QuantumCircuit or
|
310
|
+
experiment (str or QuantumCircuit or int or None): the index of the
|
408
311
|
experiment, as specified by ``data()``.
|
409
312
|
decimals (int): the number of decimals in the unitary.
|
410
313
|
If None, does not round.
|
@@ -425,7 +328,7 @@ class Result:
|
|
425
328
|
"""Return a single experiment result from a given key.
|
426
329
|
|
427
330
|
Args:
|
428
|
-
key (str or QuantumCircuit or
|
331
|
+
key (str or QuantumCircuit or int or None): the index of the
|
429
332
|
experiment, as specified by ``data()``.
|
430
333
|
|
431
334
|
Returns:
|
@@ -443,8 +346,8 @@ class Result:
|
|
443
346
|
)
|
444
347
|
key = 0
|
445
348
|
|
446
|
-
# Key is a QuantumCircuit
|
447
|
-
if isinstance(key,
|
349
|
+
# Key is a QuantumCircuit or str: retrieve result by name.
|
350
|
+
if isinstance(key, QuantumCircuit):
|
448
351
|
key = key.name
|
449
352
|
# Key is an integer: return result by index.
|
450
353
|
if isinstance(key, int):
|
@@ -453,11 +356,12 @@ class Result:
|
|
453
356
|
except IndexError as ex:
|
454
357
|
raise QiskitError(f'Result for experiment "{key}" could not be found.') from ex
|
455
358
|
else:
|
456
|
-
# Look into `result[x].header
|
359
|
+
# Look into `result[x].header["name"]` for the names.
|
457
360
|
exp = [
|
458
361
|
result
|
459
362
|
for result in self.results
|
460
|
-
if getattr(
|
363
|
+
if getattr(result, "header", None) is not None
|
364
|
+
and getattr(result, "header").get("name", "") == key
|
461
365
|
]
|
462
366
|
|
463
367
|
if len(exp) == 0:
|
qiskit/result/sampled_expval.py
CHANGED
@@ -30,8 +30,7 @@ def sampled_expectation_value(dist, oper):
|
|
30
30
|
|
31
31
|
Parameters:
|
32
32
|
dist (Counts or QuasiDistribution or ProbDistribution or dict): Input sampled distribution
|
33
|
-
oper (str or Pauli or
|
34
|
-
the observable
|
33
|
+
oper (str or Pauli or SparsePauliOp): The operator for the observable
|
35
34
|
|
36
35
|
Returns:
|
37
36
|
float: The expectation value
|
qiskit/result/utils.py
CHANGED
@@ -24,7 +24,6 @@ from qiskit.result.result import Result
|
|
24
24
|
from qiskit.result.counts import Counts
|
25
25
|
from qiskit.result.distributions.probability import ProbDistribution
|
26
26
|
from qiskit.result.distributions.quasi import QuasiDistribution
|
27
|
-
|
28
27
|
from qiskit.result.postprocess import _bin_to_hex
|
29
28
|
|
30
29
|
from qiskit._accelerate import results as results_rs # pylint: disable=no-name-in-module
|
@@ -74,10 +73,10 @@ def marginal_counts(
|
|
74
73
|
experiment_result.data.counts = new_counts_hex
|
75
74
|
|
76
75
|
if indices is not None:
|
77
|
-
experiment_result.header
|
78
|
-
csize =
|
76
|
+
experiment_result.header["memory_slots"] = len(indices)
|
77
|
+
csize = experiment_result.header.get("creg_sizes", None)
|
79
78
|
if csize is not None:
|
80
|
-
experiment_result.header
|
79
|
+
experiment_result.header["creg_sizes"] = _adjust_creg_sizes(csize, indices)
|
81
80
|
|
82
81
|
if getattr(experiment_result.data, "memory", None) is not None and indices is not None:
|
83
82
|
if marginalize_memory is False:
|
qiskit/synthesis/__init__.py
CHANGED
@@ -119,6 +119,7 @@ Two-Qubit Synthesis
|
|
119
119
|
TwoQubitBasisDecomposer
|
120
120
|
XXDecomposer
|
121
121
|
TwoQubitWeylDecomposition
|
122
|
+
TwoQubitControlledUDecomposer
|
122
123
|
|
123
124
|
.. autofunction:: two_qubit_cnot_decompose
|
124
125
|
|
@@ -147,9 +148,24 @@ Adders
|
|
147
148
|
Multipliers
|
148
149
|
-----------
|
149
150
|
|
150
|
-
.. autofunction:: multiplier_cumulative_h18
|
151
|
+
.. autofunction:: multiplier_cumulative_h18
|
151
152
|
.. autofunction:: multiplier_qft_r17
|
152
153
|
|
154
|
+
Sums
|
155
|
+
----
|
156
|
+
|
157
|
+
.. autofunction:: synth_weighted_sum_carry
|
158
|
+
|
159
|
+
|
160
|
+
Unary Arithmetic Synthesis
|
161
|
+
==========================
|
162
|
+
|
163
|
+
Integer comparators
|
164
|
+
-------------------
|
165
|
+
|
166
|
+
.. autofunction:: synth_integer_comparator_2s
|
167
|
+
.. autofunction:: synth_integer_comparator_greedy
|
168
|
+
|
153
169
|
"""
|
154
170
|
|
155
171
|
from .evolution import (
|
@@ -200,6 +216,7 @@ from .two_qubit.two_qubit_decompose import (
|
|
200
216
|
TwoQubitBasisDecomposer,
|
201
217
|
two_qubit_cnot_decompose,
|
202
218
|
TwoQubitWeylDecomposition,
|
219
|
+
TwoQubitControlledUDecomposer,
|
203
220
|
)
|
204
221
|
from .multi_controlled import (
|
205
222
|
synth_mcmt_vchain,
|
@@ -217,4 +234,7 @@ from .arithmetic import (
|
|
217
234
|
adder_ripple_v95,
|
218
235
|
multiplier_cumulative_h18,
|
219
236
|
multiplier_qft_r17,
|
237
|
+
synth_integer_comparator_greedy,
|
238
|
+
synth_integer_comparator_2s,
|
239
|
+
synth_weighted_sum_carry,
|
220
240
|
)
|
@@ -10,7 +10,9 @@
|
|
10
10
|
# copyright notice, and modified files need to carry a notice indicating
|
11
11
|
# that they have been altered from the originals.
|
12
12
|
|
13
|
-
"""
|
13
|
+
"""Synthesis for arithmetic circuits."""
|
14
14
|
|
15
|
+
from .comparators import synth_integer_comparator_2s, synth_integer_comparator_greedy
|
15
16
|
from .adders import adder_qft_d00, adder_ripple_c04, adder_ripple_v95
|
16
17
|
from .multipliers import multiplier_cumulative_h18, multiplier_qft_r17
|
18
|
+
from .weighted_sum import synth_weighted_sum_carry
|
@@ -13,7 +13,7 @@
|
|
13
13
|
"""Compute the sum of two qubit registers using ripple-carry approach."""
|
14
14
|
|
15
15
|
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
16
|
-
from qiskit.circuit
|
16
|
+
from qiskit.circuit import QuantumRegister, AncillaRegister
|
17
17
|
|
18
18
|
|
19
19
|
def adder_ripple_c04(num_state_qubits: int, kind: str = "half") -> QuantumCircuit:
|
@@ -13,10 +13,10 @@
|
|
13
13
|
"""Compute the sum of two qubit registers using Classical Addition."""
|
14
14
|
|
15
15
|
from __future__ import annotations
|
16
|
-
from qiskit.circuit
|
16
|
+
from qiskit.circuit import Bit
|
17
17
|
|
18
18
|
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
19
|
-
from qiskit.circuit
|
19
|
+
from qiskit.circuit import QuantumRegister, AncillaRegister
|
20
20
|
|
21
21
|
|
22
22
|
def adder_ripple_v95(num_state_qubits: int, kind: str = "half") -> QuantumCircuit:
|
qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This code is part of Qiskit.
|
2
2
|
#
|
3
|
-
# (C) Copyright IBM
|
3
|
+
# (C) Copyright IBM 2017, 2024.
|
4
4
|
#
|
5
5
|
# This code is licensed under the Apache License, Version 2.0. You may
|
6
6
|
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
@@ -10,9 +10,7 @@
|
|
10
10
|
# copyright notice, and modified files need to carry a notice indicating
|
11
11
|
# that they have been altered from the originals.
|
12
12
|
|
13
|
+
"""Comparator synthesis algorithms."""
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
"""
|
17
|
-
|
18
|
-
from .fake_20q import Fake20QV1
|
15
|
+
from .compare_2s import synth_integer_comparator_2s
|
16
|
+
from .compare_greedy import synth_integer_comparator_greedy
|