qiskit 1.1.2__cp38-abi3-macosx_10_9_universal2.whl → 1.2.0__cp38-abi3-macosx_10_9_universal2.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 +27 -24
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/_numpy_compat.py +1 -1
- qiskit/assembler/assemble_circuits.py +107 -64
- qiskit/assembler/assemble_schedules.py +5 -12
- qiskit/assembler/disassemble.py +10 -1
- qiskit/circuit/__init__.py +6 -3
- qiskit/circuit/_classical_resource_map.py +5 -5
- qiskit/circuit/_utils.py +0 -13
- qiskit/circuit/add_control.py +1 -1
- qiskit/circuit/annotated_operation.py +23 -1
- qiskit/circuit/classical/expr/expr.py +4 -4
- qiskit/circuit/classical/expr/visitors.py +1 -1
- qiskit/circuit/classical/types/__init__.py +1 -1
- qiskit/circuit/classical/types/types.py +2 -2
- qiskit/circuit/classicalfunction/boolean_expression.py +1 -1
- qiskit/circuit/classicalfunction/classical_function_visitor.py +5 -5
- qiskit/circuit/classicalfunction/utils.py +1 -1
- qiskit/circuit/classicalregister.py +1 -1
- qiskit/circuit/commutation_checker.py +83 -35
- qiskit/circuit/controlflow/_builder_utils.py +1 -1
- qiskit/circuit/controlflow/builder.py +10 -6
- qiskit/circuit/controlflow/if_else.py +2 -2
- qiskit/circuit/controlflow/switch_case.py +1 -1
- qiskit/circuit/delay.py +1 -1
- qiskit/circuit/duration.py +2 -2
- qiskit/circuit/equivalence.py +5 -7
- qiskit/circuit/gate.py +11 -8
- qiskit/circuit/instruction.py +31 -13
- qiskit/circuit/instructionset.py +2 -5
- qiskit/circuit/library/__init__.py +2 -1
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +1 -1
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +1 -1
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +1 -1
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +3 -3
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +1 -1
- qiskit/circuit/library/basis_change/__init__.py +1 -1
- qiskit/circuit/library/basis_change/qft.py +40 -6
- qiskit/circuit/library/blueprintcircuit.py +3 -5
- qiskit/circuit/library/data_preparation/__init__.py +9 -2
- qiskit/circuit/library/data_preparation/initializer.py +8 -0
- qiskit/circuit/library/data_preparation/state_preparation.py +98 -178
- qiskit/circuit/library/generalized_gates/isometry.py +8 -8
- qiskit/circuit/library/generalized_gates/linear_function.py +3 -2
- qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +4 -4
- qiskit/circuit/library/generalized_gates/permutation.py +8 -9
- qiskit/circuit/library/generalized_gates/uc.py +3 -3
- qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +2 -2
- qiskit/circuit/library/generalized_gates/unitary.py +13 -11
- qiskit/circuit/library/graph_state.py +1 -1
- qiskit/circuit/library/hamiltonian_gate.py +1 -2
- qiskit/circuit/library/hidden_linear_function.py +1 -1
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +3 -2
- qiskit/circuit/library/n_local/n_local.py +4 -5
- qiskit/circuit/library/n_local/pauli_two_design.py +1 -1
- qiskit/circuit/library/n_local/qaoa_ansatz.py +6 -8
- qiskit/circuit/library/n_local/two_local.py +1 -1
- qiskit/circuit/library/overlap.py +11 -5
- qiskit/circuit/library/pauli_evolution.py +7 -3
- qiskit/circuit/library/standard_gates/dcx.py +3 -0
- qiskit/circuit/library/standard_gates/ecr.py +3 -0
- qiskit/circuit/library/standard_gates/global_phase.py +3 -0
- qiskit/circuit/library/standard_gates/h.py +13 -5
- qiskit/circuit/library/standard_gates/i.py +3 -0
- qiskit/circuit/library/standard_gates/iswap.py +3 -0
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +19 -10
- qiskit/circuit/library/standard_gates/p.py +14 -9
- qiskit/circuit/library/standard_gates/r.py +3 -0
- qiskit/circuit/library/standard_gates/rx.py +21 -6
- qiskit/circuit/library/standard_gates/rxx.py +40 -1
- qiskit/circuit/library/standard_gates/ry.py +21 -6
- qiskit/circuit/library/standard_gates/ryy.py +40 -1
- qiskit/circuit/library/standard_gates/rz.py +22 -6
- qiskit/circuit/library/standard_gates/rzx.py +40 -1
- qiskit/circuit/library/standard_gates/rzz.py +41 -2
- qiskit/circuit/library/standard_gates/s.py +77 -0
- qiskit/circuit/library/standard_gates/swap.py +12 -5
- qiskit/circuit/library/standard_gates/sx.py +14 -5
- qiskit/circuit/library/standard_gates/t.py +5 -0
- qiskit/circuit/library/standard_gates/u.py +22 -7
- qiskit/circuit/library/standard_gates/u1.py +8 -3
- qiskit/circuit/library/standard_gates/u2.py +3 -0
- qiskit/circuit/library/standard_gates/u3.py +22 -7
- qiskit/circuit/library/standard_gates/x.py +156 -92
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +40 -1
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +52 -11
- qiskit/circuit/library/standard_gates/y.py +6 -1
- qiskit/circuit/library/standard_gates/z.py +8 -1
- qiskit/circuit/operation.py +1 -1
- qiskit/circuit/parameter.py +9 -10
- qiskit/circuit/parameterexpression.py +16 -13
- qiskit/circuit/parametertable.py +1 -190
- qiskit/circuit/parametervector.py +1 -1
- qiskit/circuit/quantumcircuit.py +395 -387
- qiskit/circuit/quantumcircuitdata.py +3 -5
- qiskit/circuit/quantumregister.py +1 -1
- qiskit/circuit/random/__init__.py +1 -1
- qiskit/circuit/random/utils.py +175 -26
- qiskit/circuit/register.py +5 -7
- qiskit/circuit/singleton.py +3 -3
- qiskit/circuit/tools/pi_check.py +4 -4
- qiskit/compiler/assembler.py +95 -24
- qiskit/compiler/scheduler.py +2 -2
- qiskit/compiler/transpiler.py +42 -128
- qiskit/converters/circuit_to_dag.py +4 -6
- qiskit/converters/circuit_to_gate.py +4 -8
- qiskit/converters/circuit_to_instruction.py +5 -17
- qiskit/converters/dag_to_circuit.py +2 -6
- qiskit/dagcircuit/collect_blocks.py +2 -2
- qiskit/dagcircuit/dagcircuit.py +190 -187
- qiskit/dagcircuit/dagdependency.py +4 -4
- qiskit/dagcircuit/dagdependency_v2.py +4 -4
- qiskit/dagcircuit/dagdepnode.py +1 -1
- qiskit/dagcircuit/dagnode.py +66 -157
- qiskit/passmanager/flow_controllers.py +1 -1
- qiskit/passmanager/passmanager.py +3 -3
- qiskit/primitives/__init__.py +1 -5
- qiskit/primitives/backend_estimator.py +25 -15
- qiskit/primitives/backend_estimator_v2.py +31 -7
- qiskit/primitives/backend_sampler.py +21 -12
- qiskit/primitives/backend_sampler_v2.py +12 -3
- qiskit/primitives/base/base_estimator.py +31 -4
- qiskit/primitives/base/base_primitive.py +2 -2
- qiskit/primitives/base/base_result.py +2 -2
- qiskit/primitives/base/base_sampler.py +26 -2
- qiskit/primitives/base/estimator_result.py +2 -2
- qiskit/primitives/base/sampler_result.py +2 -2
- qiskit/primitives/containers/__init__.py +0 -1
- qiskit/primitives/containers/bindings_array.py +2 -2
- qiskit/primitives/containers/bit_array.py +108 -10
- qiskit/primitives/containers/shape.py +3 -3
- qiskit/primitives/estimator.py +9 -2
- qiskit/primitives/primitive_job.py +1 -1
- qiskit/primitives/sampler.py +10 -3
- qiskit/primitives/statevector_estimator.py +5 -3
- qiskit/primitives/statevector_sampler.py +11 -5
- qiskit/primitives/utils.py +16 -0
- qiskit/providers/backend.py +15 -6
- qiskit/providers/backend_compat.py +7 -4
- qiskit/providers/basic_provider/basic_provider_tools.py +1 -1
- qiskit/providers/basic_provider/basic_simulator.py +33 -25
- qiskit/providers/fake_provider/fake_backend.py +10 -3
- qiskit/providers/fake_provider/fake_openpulse_2q.py +157 -149
- qiskit/providers/fake_provider/fake_openpulse_3q.py +228 -220
- qiskit/providers/fake_provider/fake_pulse_backend.py +2 -1
- qiskit/providers/fake_provider/fake_qasm_backend.py +7 -2
- qiskit/providers/fake_provider/generic_backend_v2.py +514 -68
- qiskit/providers/models/__init__.py +48 -11
- qiskit/providers/models/backendconfiguration.py +50 -4
- qiskit/providers/models/backendproperties.py +13 -2
- qiskit/providers/models/pulsedefaults.py +10 -11
- qiskit/providers/options.py +13 -13
- qiskit/providers/providerutils.py +3 -1
- qiskit/pulse/configuration.py +8 -12
- qiskit/pulse/instruction_schedule_map.py +3 -5
- qiskit/pulse/instructions/acquire.py +7 -8
- qiskit/pulse/instructions/instruction.py +2 -3
- qiskit/pulse/library/samplers/decorators.py +5 -9
- qiskit/pulse/library/symbolic_pulses.py +4 -7
- qiskit/pulse/library/waveform.py +2 -5
- qiskit/pulse/macros.py +11 -6
- qiskit/pulse/parser.py +8 -10
- qiskit/pulse/schedule.py +9 -17
- qiskit/pulse/transforms/alignments.py +1 -3
- qiskit/pulse/utils.py +1 -2
- qiskit/qasm/libs/stdgates.inc +35 -28
- qiskit/qasm2/__init__.py +7 -7
- qiskit/qasm2/export.py +5 -9
- qiskit/qasm2/parse.py +1 -1
- qiskit/qasm3/ast.py +9 -25
- qiskit/qasm3/exporter.py +582 -479
- qiskit/qasm3/printer.py +7 -16
- qiskit/qobj/common.py +10 -0
- qiskit/qobj/converters/lo_config.py +9 -0
- qiskit/qobj/converters/pulse_instruction.py +13 -6
- qiskit/qobj/pulse_qobj.py +69 -15
- qiskit/qobj/qasm_qobj.py +72 -20
- qiskit/qobj/utils.py +9 -0
- qiskit/qpy/__init__.py +1 -1
- qiskit/qpy/binary_io/circuits.py +8 -5
- qiskit/qpy/binary_io/schedules.py +1 -1
- qiskit/qpy/binary_io/value.py +3 -3
- qiskit/qpy/interface.py +3 -2
- qiskit/qpy/type_keys.py +2 -2
- qiskit/quantum_info/operators/channel/quantum_channel.py +3 -6
- qiskit/quantum_info/operators/channel/superop.py +2 -2
- qiskit/quantum_info/operators/channel/transformations.py +1 -1
- qiskit/quantum_info/operators/dihedral/dihedral.py +3 -4
- qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +1 -3
- qiskit/quantum_info/operators/dihedral/random.py +6 -3
- qiskit/quantum_info/operators/measures.py +2 -2
- qiskit/quantum_info/operators/op_shape.py +12 -20
- qiskit/quantum_info/operators/operator.py +14 -21
- qiskit/quantum_info/operators/predicates.py +1 -0
- qiskit/quantum_info/operators/symplectic/base_pauli.py +7 -11
- qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
- qiskit/quantum_info/operators/symplectic/pauli.py +3 -3
- qiskit/quantum_info/operators/symplectic/pauli_list.py +9 -10
- qiskit/quantum_info/operators/symplectic/random.py +1 -1
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +15 -17
- qiskit/quantum_info/quaternion.py +1 -1
- qiskit/quantum_info/states/densitymatrix.py +5 -8
- qiskit/quantum_info/states/stabilizerstate.py +128 -37
- qiskit/quantum_info/states/statevector.py +4 -8
- qiskit/result/counts.py +2 -2
- qiskit/result/mitigation/correlated_readout_mitigator.py +2 -2
- qiskit/result/mitigation/local_readout_mitigator.py +2 -2
- qiskit/result/mitigation/utils.py +1 -3
- qiskit/result/models.py +17 -16
- qiskit/result/result.py +15 -20
- qiskit/scheduler/lowering.py +2 -2
- qiskit/synthesis/__init__.py +2 -1
- qiskit/synthesis/clifford/__init__.py +1 -1
- qiskit/synthesis/clifford/clifford_decompose_ag.py +2 -2
- qiskit/synthesis/clifford/clifford_decompose_bm.py +10 -240
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +9 -303
- qiskit/synthesis/clifford/clifford_decompose_layers.py +25 -23
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +1 -1
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +1 -1
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +1 -1
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +2 -2
- qiskit/synthesis/evolution/evolution_synthesis.py +4 -2
- qiskit/synthesis/evolution/lie_trotter.py +46 -19
- qiskit/synthesis/evolution/product_formula.py +111 -55
- qiskit/synthesis/evolution/qdrift.py +40 -10
- qiskit/synthesis/evolution/suzuki_trotter.py +43 -33
- qiskit/synthesis/linear/__init__.py +1 -0
- qiskit/synthesis/linear/cnot_synth.py +22 -96
- qiskit/synthesis/linear/linear_depth_lnn.py +8 -8
- qiskit/synthesis/linear/linear_matrix_utils.py +13 -161
- qiskit/synthesis/linear_phase/cnot_phase_synth.py +1 -1
- qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +3 -3
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +1 -1
- qiskit/synthesis/one_qubit/one_qubit_decompose.py +29 -29
- qiskit/synthesis/permutation/permutation_full.py +5 -29
- qiskit/synthesis/permutation/permutation_lnn.py +2 -24
- qiskit/synthesis/permutation/permutation_utils.py +2 -59
- qiskit/synthesis/qft/__init__.py +1 -0
- qiskit/synthesis/qft/qft_decompose_full.py +79 -0
- qiskit/synthesis/qft/qft_decompose_lnn.py +17 -9
- qiskit/synthesis/stabilizer/stabilizer_circuit.py +6 -6
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -2
- qiskit/synthesis/two_qubit/local_invariance.py +8 -38
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +48 -129
- qiskit/synthesis/unitary/aqc/cnot_structures.py +1 -1
- qiskit/synthesis/unitary/qsd.py +5 -3
- qiskit/transpiler/__init__.py +1 -0
- qiskit/transpiler/basepasses.py +1 -1
- qiskit/transpiler/coupling.py +3 -3
- qiskit/transpiler/instruction_durations.py +1 -2
- qiskit/transpiler/layout.py +3 -3
- qiskit/transpiler/passes/__init__.py +2 -0
- qiskit/transpiler/passes/basis/basis_translator.py +84 -64
- qiskit/transpiler/passes/basis/translate_parameterized.py +3 -5
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +10 -10
- qiskit/transpiler/passes/calibration/rx_builder.py +3 -3
- qiskit/transpiler/passes/calibration/rzx_builder.py +3 -3
- qiskit/transpiler/passes/layout/apply_layout.py +13 -3
- qiskit/transpiler/passes/layout/sabre_layout.py +10 -8
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +4 -1
- qiskit/transpiler/passes/layout/set_layout.py +2 -2
- qiskit/transpiler/passes/layout/vf2_layout.py +1 -1
- qiskit/transpiler/passes/layout/vf2_utils.py +3 -3
- qiskit/transpiler/passes/optimization/__init__.py +1 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
- qiskit/transpiler/passes/optimization/commutation_analysis.py +7 -10
- qiskit/transpiler/passes/optimization/commutative_cancellation.py +35 -19
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +17 -8
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +6 -6
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +64 -41
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +83 -0
- qiskit/transpiler/passes/optimization/template_matching/backward_match.py +1 -1
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +2 -2
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -1
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -2
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
- qiskit/transpiler/passes/routing/layout_transformation.py +2 -1
- qiskit/transpiler/passes/routing/sabre_swap.py +35 -26
- qiskit/transpiler/passes/routing/star_prerouting.py +80 -105
- qiskit/transpiler/passes/routing/stochastic_swap.py +1 -3
- qiskit/transpiler/passes/scheduling/alap.py +1 -2
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -2
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +2 -2
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +1 -1
- qiskit/transpiler/passes/scheduling/asap.py +1 -2
- qiskit/transpiler/passes/scheduling/base_scheduler.py +5 -5
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +3 -3
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -14
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +7 -6
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -3
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +211 -36
- qiskit/transpiler/passes/synthesis/plugin.py +2 -2
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +80 -40
- qiskit/transpiler/passes/utils/__init__.py +0 -1
- qiskit/transpiler/passes/utils/check_gate_direction.py +4 -4
- qiskit/transpiler/passes/utils/check_map.py +3 -6
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +3 -4
- qiskit/transpiler/passes/utils/error.py +2 -2
- qiskit/transpiler/passes/utils/fixed_point.py +3 -3
- qiskit/transpiler/passes/utils/gate_direction.py +1 -1
- qiskit/transpiler/passes/utils/gates_basis.py +1 -2
- qiskit/transpiler/passmanager.py +7 -6
- qiskit/transpiler/preset_passmanagers/__init__.py +4 -228
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +73 -18
- qiskit/transpiler/preset_passmanagers/common.py +3 -6
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +518 -0
- qiskit/transpiler/preset_passmanagers/level0.py +1 -1
- qiskit/transpiler/target.py +27 -8
- qiskit/user_config.py +29 -6
- qiskit/utils/classtools.py +3 -3
- qiskit/utils/deprecation.py +3 -2
- qiskit/utils/lazy_tester.py +2 -2
- qiskit/utils/optionals.py +8 -8
- qiskit/visualization/bloch.py +18 -23
- qiskit/visualization/circuit/_utils.py +34 -10
- qiskit/visualization/circuit/circuit_visualization.py +23 -16
- qiskit/visualization/circuit/latex.py +29 -27
- qiskit/visualization/circuit/matplotlib.py +4 -2
- qiskit/visualization/circuit/qcstyle.py +2 -2
- qiskit/visualization/circuit/text.py +9 -15
- qiskit/visualization/dag_visualization.py +2 -2
- qiskit/visualization/pulse_v2/core.py +1 -1
- qiskit/visualization/pulse_v2/events.py +1 -1
- qiskit/visualization/pulse_v2/generators/frame.py +3 -4
- qiskit/visualization/pulse_v2/generators/waveform.py +5 -9
- qiskit/visualization/pulse_v2/layouts.py +1 -5
- qiskit/visualization/pulse_v2/plotters/matplotlib.py +1 -2
- qiskit/visualization/state_visualization.py +5 -6
- qiskit/visualization/timeline/plotters/matplotlib.py +1 -2
- qiskit/visualization/transition_visualization.py +7 -2
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/METADATA +12 -12
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/RECORD +342 -340
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/entry_points.txt +3 -0
- qiskit/transpiler/passes/utils/block_to_matrix.py +0 -47
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/WHEEL +0 -0
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/top_level.txt +0 -0
@@ -371,7 +371,7 @@ class MatplotlibDrawer:
|
|
371
371
|
# Once the scaling factor has been determined, the global phase, register names
|
372
372
|
# and numbers, wires, and gates are drawn
|
373
373
|
if self._global_phase:
|
374
|
-
plt_mod.text(xl, yt, "Global Phase:
|
374
|
+
plt_mod.text(xl, yt, f"Global Phase: {pi_check(self._global_phase, output='mpl')}")
|
375
375
|
self._draw_regs_wires(num_folds, xmax, max_x_index, qubits_dict, clbits_dict, glob_data)
|
376
376
|
self._draw_ops(
|
377
377
|
self._nodes,
|
@@ -893,7 +893,7 @@ class MatplotlibDrawer:
|
|
893
893
|
this_clbit_dict = {}
|
894
894
|
for clbit in clbits_dict.values():
|
895
895
|
y = clbit["y"] - fold_num * (glob_data["n_lines"] + 1)
|
896
|
-
if y not in this_clbit_dict
|
896
|
+
if y not in this_clbit_dict:
|
897
897
|
this_clbit_dict[y] = {
|
898
898
|
"val": 1,
|
899
899
|
"wire_label": clbit["wire_label"],
|
@@ -1584,6 +1584,8 @@ class MatplotlibDrawer:
|
|
1584
1584
|
flow_text = " For"
|
1585
1585
|
elif isinstance(node.op, SwitchCaseOp):
|
1586
1586
|
flow_text = "Switch"
|
1587
|
+
else:
|
1588
|
+
flow_text = node.op.name
|
1587
1589
|
|
1588
1590
|
# Some spacers. op_spacer moves 'Switch' back a bit for alignment,
|
1589
1591
|
# expr_spacer moves the expr over to line up with 'Switch' and
|
@@ -72,7 +72,7 @@ class StyleDict(dict):
|
|
72
72
|
|
73
73
|
def __setitem__(self, key: Any, value: Any) -> None:
|
74
74
|
# allow using field abbreviations
|
75
|
-
if key in self.ABBREVIATIONS
|
75
|
+
if key in self.ABBREVIATIONS:
|
76
76
|
key = self.ABBREVIATIONS[key]
|
77
77
|
|
78
78
|
if key not in self.VALID_FIELDS:
|
@@ -85,7 +85,7 @@ class StyleDict(dict):
|
|
85
85
|
|
86
86
|
def __getitem__(self, key: Any) -> Any:
|
87
87
|
# allow using field abbreviations
|
88
|
-
if key in self.ABBREVIATIONS
|
88
|
+
if key in self.ABBREVIATIONS:
|
89
89
|
key = self.ABBREVIATIONS[key]
|
90
90
|
|
91
91
|
return super().__getitem__(key)
|
@@ -739,13 +739,7 @@ class TextDrawing:
|
|
739
739
|
self._wire_map = {}
|
740
740
|
self.cregbundle = cregbundle
|
741
741
|
|
742
|
-
|
743
|
-
self.encoding = encoding
|
744
|
-
else:
|
745
|
-
if sys.stdout.encoding:
|
746
|
-
self.encoding = sys.stdout.encoding
|
747
|
-
else:
|
748
|
-
self.encoding = "utf8"
|
742
|
+
self.encoding = encoding or sys.stdout.encoding or "utf8"
|
749
743
|
|
750
744
|
self._nest_depth = 0 # nesting depth for control flow ops
|
751
745
|
self._expr_text = "" # expression text to display
|
@@ -765,7 +759,7 @@ class TextDrawing:
|
|
765
759
|
"background: #fff0;"
|
766
760
|
"line-height: 1.1;"
|
767
761
|
'font-family: "Courier New",Courier,monospace">'
|
768
|
-
"
|
762
|
+
f"{self.single_string()}</pre>"
|
769
763
|
)
|
770
764
|
|
771
765
|
def __repr__(self):
|
@@ -786,8 +780,9 @@ class TextDrawing:
|
|
786
780
|
)
|
787
781
|
except (UnicodeEncodeError, UnicodeDecodeError):
|
788
782
|
warn(
|
789
|
-
"The encoding
|
790
|
-
"
|
783
|
+
f"The encoding {self.encoding} has a limited charset."
|
784
|
+
" Consider a different encoding in your "
|
785
|
+
"environment. UTF-8 is being used instead",
|
791
786
|
RuntimeWarning,
|
792
787
|
)
|
793
788
|
self.encoding = "utf-8"
|
@@ -867,7 +862,7 @@ class TextDrawing:
|
|
867
862
|
lines = []
|
868
863
|
|
869
864
|
if self.global_phase:
|
870
|
-
lines.append("global phase:
|
865
|
+
lines.append(f"global phase: {pi_check(self.global_phase, ndigits=5)}")
|
871
866
|
|
872
867
|
for layer_group in layer_groups:
|
873
868
|
wires = list(zip(*layer_group))
|
@@ -894,10 +889,9 @@ class TextDrawing:
|
|
894
889
|
|
895
890
|
self._wire_map = get_wire_map(self._circuit, (self.qubits + self.clbits), self.cregbundle)
|
896
891
|
wire_labels = []
|
897
|
-
for wire in self._wire_map:
|
892
|
+
for wire, index in self._wire_map.items():
|
898
893
|
if isinstance(wire, ClassicalRegister):
|
899
894
|
register = wire
|
900
|
-
index = self._wire_map[wire]
|
901
895
|
else:
|
902
896
|
register, bit_index, reg_index = get_bit_reg_index(self._circuit, wire)
|
903
897
|
index = bit_index if register is None else reg_index
|
@@ -1175,7 +1169,7 @@ class TextDrawing:
|
|
1175
1169
|
|
1176
1170
|
elif isinstance(op, RZZGate):
|
1177
1171
|
# rzz
|
1178
|
-
connection_label = "ZZ
|
1172
|
+
connection_label = f"ZZ{params}"
|
1179
1173
|
gates = [Bullet(conditional=conditional), Bullet(conditional=conditional)]
|
1180
1174
|
add_connected_gate(node, gates, layer, current_cons, gate_wire_map)
|
1181
1175
|
|
@@ -1218,7 +1212,7 @@ class TextDrawing:
|
|
1218
1212
|
add_connected_gate(node, gates, layer, current_cons, gate_wire_map)
|
1219
1213
|
elif base_gate.name == "rzz":
|
1220
1214
|
# crzz
|
1221
|
-
connection_label = "ZZ
|
1215
|
+
connection_label = f"ZZ{params}"
|
1222
1216
|
gates += [Bullet(conditional=conditional), Bullet(conditional=conditional)]
|
1223
1217
|
elif len(rest) > 1:
|
1224
1218
|
top_connect = "┴" if controlled_top else None
|
@@ -152,7 +152,7 @@ def dag_drawer(dag, scale=0.7, filename=None, style="color"):
|
|
152
152
|
n["fillcolor"] = "lightblue"
|
153
153
|
return n
|
154
154
|
else:
|
155
|
-
raise VisualizationError("Unrecognized style
|
155
|
+
raise VisualizationError(f"Unrecognized style {style} for the dag_drawer.")
|
156
156
|
|
157
157
|
edge_attr_func = None
|
158
158
|
|
@@ -202,7 +202,7 @@ def dag_drawer(dag, scale=0.7, filename=None, style="color"):
|
|
202
202
|
n["fillcolor"] = "red"
|
203
203
|
return n
|
204
204
|
else:
|
205
|
-
raise VisualizationError("Invalid style
|
205
|
+
raise VisualizationError(f"Invalid style {style}")
|
206
206
|
|
207
207
|
def edge_attr_func(edge):
|
208
208
|
e = {}
|
@@ -220,7 +220,7 @@ class DrawerCanvas:
|
|
220
220
|
elif isinstance(program, (pulse.Waveform, pulse.SymbolicPulse)):
|
221
221
|
self._waveform_loader(program)
|
222
222
|
else:
|
223
|
-
raise VisualizationError("Data type
|
223
|
+
raise VisualizationError(f"Data type {type(program)} is not supported.")
|
224
224
|
|
225
225
|
# update time range
|
226
226
|
self.set_time_range(0, program.duration, seconds=False)
|
@@ -196,7 +196,7 @@ class ChannelEvents:
|
|
196
196
|
|
197
197
|
def get_frame_changes(self) -> Iterator[PulseInstruction]:
|
198
198
|
"""Return frame change type instructions with total frame change amount."""
|
199
|
-
# TODO parse
|
199
|
+
# TODO parse parametrized FCs correctly
|
200
200
|
|
201
201
|
sorted_frame_changes = sorted(self._frames.items(), key=lambda x: x[0])
|
202
202
|
|
@@ -264,10 +264,9 @@ def gen_raw_operand_values_compact(
|
|
264
264
|
freq_sci_notation = "0.0"
|
265
265
|
else:
|
266
266
|
abs_freq = np.abs(data.frame.freq)
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
)
|
267
|
+
base = data.frame.freq / (10 ** int(np.floor(np.log10(abs_freq))))
|
268
|
+
exponent = int(np.floor(np.log10(abs_freq)))
|
269
|
+
freq_sci_notation = f"{base:.1f}e{exponent:d}"
|
271
270
|
frame_info = f"{data.frame.phase:.2f}\n{freq_sci_notation}"
|
272
271
|
|
273
272
|
text = drawings.TextData(
|
@@ -203,11 +203,10 @@ def gen_ibmq_latex_waveform_name(
|
|
203
203
|
if frac.numerator == 1:
|
204
204
|
angle = rf"\pi/{frac.denominator:d}"
|
205
205
|
else:
|
206
|
-
angle =
|
207
|
-
num=frac.numerator, denom=frac.denominator
|
208
|
-
)
|
206
|
+
angle = rf"{frac.numerator:d}/{frac.denominator:d} \pi"
|
209
207
|
else:
|
210
208
|
# single qubit pulse
|
209
|
+
# pylint: disable-next=consider-using-f-string
|
211
210
|
op_name = r"{{\rm {}}}".format(match_dict["op"])
|
212
211
|
angle_val = match_dict["angle"]
|
213
212
|
if angle_val is None:
|
@@ -217,9 +216,7 @@ def gen_ibmq_latex_waveform_name(
|
|
217
216
|
if frac.numerator == 1:
|
218
217
|
angle = rf"\pi/{frac.denominator:d}"
|
219
218
|
else:
|
220
|
-
angle =
|
221
|
-
num=frac.numerator, denom=frac.denominator
|
222
|
-
)
|
219
|
+
angle = rf"{frac.numerator:d}/{frac.denominator:d} \pi"
|
223
220
|
latex_name = rf"{op_name}({sign}{angle})"
|
224
221
|
else:
|
225
222
|
latex_name = None
|
@@ -490,7 +487,7 @@ def _draw_opaque_waveform(
|
|
490
487
|
fill_objs.append(box_obj)
|
491
488
|
|
492
489
|
# parameter name
|
493
|
-
func_repr = "{
|
490
|
+
func_repr = f"{pulse_shape}({', '.join(pnames)})"
|
494
491
|
|
495
492
|
text_style = {
|
496
493
|
"zorder": formatter["layer.annotate"],
|
@@ -630,8 +627,7 @@ def _parse_waveform(
|
|
630
627
|
meta.update(acq_data)
|
631
628
|
else:
|
632
629
|
raise VisualizationError(
|
633
|
-
"Unsupported instruction {inst} by "
|
634
|
-
"filled envelope.".format(inst=inst.__class__.__name__)
|
630
|
+
f"Unsupported instruction {inst.__class__.__name__} by " "filled envelope."
|
635
631
|
)
|
636
632
|
|
637
633
|
meta.update(
|
@@ -373,11 +373,7 @@ def detail_title(program: Union[pulse.Waveform, pulse.Schedule], device: DrawerB
|
|
373
373
|
|
374
374
|
# add program duration
|
375
375
|
dt = device.dt * 1e9 if device.dt else 1.0
|
376
|
-
title_str.append(
|
377
|
-
"Duration: {dur:.1f} {unit}".format(
|
378
|
-
dur=program.duration * dt, unit="ns" if device.dt else "dt"
|
379
|
-
)
|
380
|
-
)
|
376
|
+
title_str.append(f"Duration: {program.duration * dt:.1f} {'ns' if device.dt else 'dt'}")
|
381
377
|
|
382
378
|
# add device name
|
383
379
|
if device.backend_name != "no-backend":
|
@@ -119,8 +119,7 @@ class Mpl2DPlotter(BasePlotter):
|
|
119
119
|
self.ax.add_patch(box)
|
120
120
|
else:
|
121
121
|
raise VisualizationError(
|
122
|
-
"Data {
|
123
|
-
"by {plotter}".format(name=data, plotter=self.__class__.__name__)
|
122
|
+
f"Data {data} is not supported " f"by {self.__class__.__name__}"
|
124
123
|
)
|
125
124
|
# axis break
|
126
125
|
for pos in axis_config.axis_break_pos:
|
@@ -971,10 +971,10 @@ def plot_state_qsphere(
|
|
971
971
|
if show_state_phases:
|
972
972
|
element_angle = (np.angle(state[i]) + (np.pi * 4)) % (np.pi * 2)
|
973
973
|
if use_degrees:
|
974
|
-
element_text += "\n
|
974
|
+
element_text += f"\n${element_angle * 180 / np.pi:.1f}^\\circ$"
|
975
975
|
else:
|
976
976
|
element_angle = pi_check(element_angle, ndigits=3).replace("pi", "\\pi")
|
977
|
-
element_text += "\n
|
977
|
+
element_text += f"\n${element_angle}$"
|
978
978
|
ax.text(
|
979
979
|
xvalue_text,
|
980
980
|
yvalue_text,
|
@@ -1463,11 +1463,10 @@ def state_drawer(state, output=None, **drawer_args):
|
|
1463
1463
|
return draw_func(state, **drawer_args)
|
1464
1464
|
except KeyError as err:
|
1465
1465
|
raise ValueError(
|
1466
|
-
"""'{}' is not a valid option for drawing {}
|
1466
|
+
f"""'{output}' is not a valid option for drawing {type(state).__name__}
|
1467
|
+
objects. Please choose from:
|
1467
1468
|
'text', 'latex', 'latex_source', 'qsphere', 'hinton',
|
1468
|
-
'bloch', 'city' or 'paulivec'."""
|
1469
|
-
output, type(state).__name__
|
1470
|
-
)
|
1469
|
+
'bloch', 'city' or 'paulivec'."""
|
1471
1470
|
) from err
|
1472
1471
|
|
1473
1472
|
|
@@ -132,8 +132,7 @@ class MplPlotter(BasePlotter):
|
|
132
132
|
|
133
133
|
else:
|
134
134
|
raise VisualizationError(
|
135
|
-
"Data {
|
136
|
-
"".format(name=data, plotter=self.__class__.__name__)
|
135
|
+
f"Data {data} is not supported by {self.__class__.__name__}"
|
137
136
|
)
|
138
137
|
|
139
138
|
def _time_bucket_outline(
|
@@ -18,6 +18,7 @@ from math import sin, cos, acos, sqrt
|
|
18
18
|
import numpy as np
|
19
19
|
|
20
20
|
from qiskit.exceptions import MissingOptionalLibraryError
|
21
|
+
from qiskit.utils.deprecation import deprecate_func
|
21
22
|
|
22
23
|
|
23
24
|
def _normalize(v, tolerance=0.00001):
|
@@ -72,10 +73,10 @@ class _Quaternion:
|
|
72
73
|
return self._multiply_with_quaternion(b)
|
73
74
|
elif isinstance(b, (list, tuple, np.ndarray)):
|
74
75
|
if len(b) != 3:
|
75
|
-
raise
|
76
|
+
raise ValueError(f"Input vector has invalid length {len(b)}")
|
76
77
|
return self._multiply_with_vector(b)
|
77
78
|
else:
|
78
|
-
|
79
|
+
return NotImplemented
|
79
80
|
|
80
81
|
def _multiply_with_quaternion(self, q_2):
|
81
82
|
"""Multiplication of quaternion with quaternion"""
|
@@ -121,6 +122,10 @@ class _Quaternion:
|
|
121
122
|
return np.linalg.norm(v)
|
122
123
|
|
123
124
|
|
125
|
+
@deprecate_func(
|
126
|
+
since="1.2.0",
|
127
|
+
removal_timeline="in the 2.0 release",
|
128
|
+
)
|
124
129
|
def visualize_transition(circuit, trace=False, saveas=None, fpg=100, spg=2):
|
125
130
|
"""
|
126
131
|
Creates animation showing transitions between states of a single
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: qiskit
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.2.0
|
4
4
|
Summary: An open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives.
|
5
5
|
Author-email: Qiskit Development Team <qiskit@us.ibm.com>
|
6
6
|
License: Apache 2.0
|
@@ -28,7 +28,7 @@ Classifier: Topic :: Scientific/Engineering
|
|
28
28
|
Requires-Python: >=3.8
|
29
29
|
Description-Content-Type: text/markdown
|
30
30
|
License-File: LICENSE.txt
|
31
|
-
Requires-Dist: rustworkx>=0.
|
31
|
+
Requires-Dist: rustworkx>=0.15.0
|
32
32
|
Requires-Dist: numpy<3,>=1.17
|
33
33
|
Requires-Dist: scipy>=1.5
|
34
34
|
Requires-Dist: sympy>=1.3
|
@@ -66,8 +66,8 @@ Requires-Dist: seaborn>=0.9.0; extra == "visualization"
|
|
66
66
|
|
67
67
|
**Qiskit** is an open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives.
|
68
68
|
|
69
|
-
This library is the core component of Qiskit, which contains the building blocks for creating and working with quantum circuits, quantum operators, and primitive functions (
|
70
|
-
It also contains a transpiler that supports optimizing quantum circuits and a quantum information toolbox for creating advanced
|
69
|
+
This library is the core component of Qiskit, which contains the building blocks for creating and working with quantum circuits, quantum operators, and primitive functions (Sampler and Estimator).
|
70
|
+
It also contains a transpiler that supports optimizing quantum circuits, and a quantum information toolbox for creating advanced operators.
|
71
71
|
|
72
72
|
For more details on how to use Qiskit, refer to the documentation located here:
|
73
73
|
|
@@ -77,7 +77,7 @@ For more details on how to use Qiskit, refer to the documentation located here:
|
|
77
77
|
## Installation
|
78
78
|
|
79
79
|
> [!WARNING]
|
80
|
-
> Do not try to upgrade an existing Qiskit 0.* environment to Qiskit 1.0 in-place. [Read more](https://docs.quantum.ibm.com/
|
80
|
+
> Do not try to upgrade an existing Qiskit 0.* environment to Qiskit 1.0 in-place. [Read more](https://docs.quantum.ibm.com/migration-guides/qiskit-1.0-installation).
|
81
81
|
|
82
82
|
We encourage installing Qiskit via ``pip``:
|
83
83
|
|
@@ -87,7 +87,7 @@ pip install qiskit
|
|
87
87
|
|
88
88
|
Pip will handle all dependencies automatically and you will always install the latest (and well-tested) version.
|
89
89
|
|
90
|
-
To install from source, follow the instructions in the [documentation](https://docs.quantum.ibm.com/
|
90
|
+
To install from source, follow the instructions in the [documentation](https://docs.quantum.ibm.com/guides/install-qiskit-source).
|
91
91
|
|
92
92
|
## Create your first quantum program in Qiskit
|
93
93
|
|
@@ -145,12 +145,12 @@ print(f" > Expectation values: {result.values}")
|
|
145
145
|
Running this will give the outcome `4`. For fun, try to assign a value of +/- 1 to each single-qubit operator X and Y
|
146
146
|
and see if you can achieve this outcome. (Spoiler alert: this is not possible!)
|
147
147
|
|
148
|
-
Using the Qiskit-provided `qiskit.primitives.Sampler` and `qiskit.primitives.Estimator` will not take you very far.
|
149
|
-
on classical computers and you need to use real quantum hardware to scale to larger quantum circuits.
|
150
|
-
circuit on hardware requires rewriting
|
151
|
-
The tool that does this is the [transpiler](https://docs.quantum.ibm.com/api/qiskit/transpiler)
|
152
|
-
|
153
|
-
|
148
|
+
Using the Qiskit-provided `qiskit.primitives.Sampler` and `qiskit.primitives.Estimator` will not take you very far.
|
149
|
+
The power of quantum computing cannot be simulated on classical computers and you need to use real quantum hardware to scale to larger quantum circuits.
|
150
|
+
However, running a quantum circuit on hardware requires rewriting to the basis gates and connectivity of the quantum hardware.
|
151
|
+
The tool that does this is the [transpiler](https://docs.quantum.ibm.com/api/qiskit/transpiler), and Qiskit includes transpiler passes for synthesis, optimization, mapping, and scheduling.
|
152
|
+
However, it also includes a default compiler, which works very well in most examples.
|
153
|
+
The following code will map the example circuit to the `basis_gates = ['cz', 'sx', 'rz']` and a linear chain of qubits $0 \rightarrow 1 \rightarrow 2$ with the `coupling_map =[[0, 1], [1, 2]]`.
|
154
154
|
|
155
155
|
```python
|
156
156
|
from qiskit import transpile
|