qiskit 1.1.2__cp38-abi3-win32.whl → 1.2.0rc1__cp38-abi3-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qiskit/VERSION.txt +1 -1
- qiskit/__init__.py +27 -24
- qiskit/_accelerate.pyd +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 +1 -1
- 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 +392 -384
- 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 +41 -127
- 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 +32 -24
- qiskit/providers/fake_provider/fake_backend.py +10 -3
- qiskit/providers/fake_provider/fake_openpulse_2q.py +154 -146
- qiskit/providers/fake_provider/fake_openpulse_3q.py +226 -217
- qiskit/providers/fake_provider/fake_qasm_backend.py +5 -1
- qiskit/providers/fake_provider/generic_backend_v2.py +80 -50
- qiskit/providers/models/__init__.py +11 -0
- 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 +578 -481
- 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/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 +14 -16
- 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 +82 -63
- 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 +11 -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 +1 -1
- 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 +11 -11
- 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 +117 -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 +19 -67
- 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 +5 -12
- 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.0rc1.dist-info}/METADATA +26 -26
- {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/RECORD +340 -338
- {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/WHEEL +1 -1
- {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.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.0rc1.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/top_level.txt +0 -0
@@ -213,17 +213,22 @@ class QCircuitImage:
|
|
213
213
|
self._latex.append([" "] * (self._img_depth + 1))
|
214
214
|
|
215
215
|
# display the bit/register labels
|
216
|
-
for wire in self._wire_map:
|
216
|
+
for wire, index in self._wire_map.items():
|
217
217
|
if isinstance(wire, ClassicalRegister):
|
218
218
|
register = wire
|
219
|
-
|
219
|
+
wire_label = get_wire_label(
|
220
|
+
"latex", register, index, layout=self._layout, cregbundle=self._cregbundle
|
221
|
+
)
|
220
222
|
else:
|
221
223
|
register, bit_index, reg_index = get_bit_reg_index(self._circuit, wire)
|
222
|
-
|
224
|
+
wire_label = get_wire_label(
|
225
|
+
"latex",
|
226
|
+
register,
|
227
|
+
bit_index if register is None else reg_index,
|
228
|
+
layout=self._layout,
|
229
|
+
cregbundle=self._cregbundle,
|
230
|
+
)
|
223
231
|
|
224
|
-
wire_label = get_wire_label(
|
225
|
-
"latex", register, index, layout=self._layout, cregbundle=self._cregbundle
|
226
|
-
)
|
227
232
|
wire_label += " : "
|
228
233
|
if self._initial_state:
|
229
234
|
wire_label += "\\ket{{0}}" if isinstance(wire, Qubit) else "0"
|
@@ -234,7 +239,7 @@ class QCircuitImage:
|
|
234
239
|
self._latex[pos][1] = "\\lstick{/_{_{" + str(register.size) + "}}} \\cw"
|
235
240
|
wire_label = f"\\mathrm{{{wire_label}}}"
|
236
241
|
else:
|
237
|
-
pos =
|
242
|
+
pos = index
|
238
243
|
self._latex[pos][0] = "\\nghost{" + wire_label + " & " + "\\lstick{" + wire_label
|
239
244
|
|
240
245
|
def _get_image_depth(self):
|
@@ -410,7 +415,7 @@ class QCircuitImage:
|
|
410
415
|
cwire_list = []
|
411
416
|
|
412
417
|
if len(wire_list) == 1 and not node.cargs:
|
413
|
-
self._latex[wire_list[0]][column] = "\\gate{
|
418
|
+
self._latex[wire_list[0]][column] = f"\\gate{{{gate_text}}}"
|
414
419
|
|
415
420
|
elif isinstance(op, ControlledGate):
|
416
421
|
num_cols_op = self._build_ctrl_gate(op, gate_text, wire_list, column)
|
@@ -438,20 +443,20 @@ class QCircuitImage:
|
|
438
443
|
self._latex[wire_min][col] = (
|
439
444
|
f"\\multigate{{{wire_max - wire_min}}}{{{gate_text}}}_"
|
440
445
|
+ "<" * (len(str(wire_ind)) + 2)
|
441
|
-
+ "{
|
446
|
+
+ f"{{{wire_ind}}}"
|
442
447
|
)
|
443
448
|
for wire in range(wire_min + 1, wire_max + 1):
|
444
449
|
if wire < cwire_start:
|
445
|
-
ghost_box = "\\ghost{
|
450
|
+
ghost_box = f"\\ghost{{{gate_text}}}"
|
446
451
|
if wire in wire_list:
|
447
452
|
wire_ind = wire_list.index(wire)
|
448
453
|
else:
|
449
|
-
ghost_box = "\\cghost{
|
454
|
+
ghost_box = f"\\cghost{{{gate_text}}}"
|
450
455
|
if wire in cwire_list:
|
451
456
|
wire_ind = cwire_list.index(wire)
|
452
457
|
if wire in wire_list + cwire_list:
|
453
458
|
self._latex[wire][col] = (
|
454
|
-
ghost_box + "_" + "<" * (len(str(wire_ind)) + 2) + "{
|
459
|
+
ghost_box + "_" + "<" * (len(str(wire_ind)) + 2) + f"{{{wire_ind}}}"
|
455
460
|
)
|
456
461
|
else:
|
457
462
|
self._latex[wire][col] = ghost_box
|
@@ -479,7 +484,7 @@ class QCircuitImage:
|
|
479
484
|
elif isinstance(op.base_gate, (U1Gate, PhaseGate)):
|
480
485
|
num_cols_op = self._build_symmetric_gate(op, gate_text, wire_list, col)
|
481
486
|
else:
|
482
|
-
self._latex[wireqargs[0]][col] = "\\gate{
|
487
|
+
self._latex[wireqargs[0]][col] = f"\\gate{{{gate_text}}}"
|
483
488
|
else:
|
484
489
|
# Treat special cases of swap and rzz gates
|
485
490
|
if isinstance(op.base_gate, (SwapGate, RZZGate)):
|
@@ -522,7 +527,7 @@ class QCircuitImage:
|
|
522
527
|
)
|
523
528
|
self._latex[wire_last][col] = "\\control \\qw"
|
524
529
|
# Put side text to the right between bottom wire in wire_list and the one above it
|
525
|
-
self._latex[wire_max - 1][col + 1] = "\\dstick{\\hspace{2.0em}
|
530
|
+
self._latex[wire_max - 1][col + 1] = f"\\dstick{{\\hspace{{2.0em}}{gate_text}}} \\qw"
|
526
531
|
return 4 # num_cols for side text gates
|
527
532
|
|
528
533
|
def _build_measure(self, node, col):
|
@@ -539,11 +544,9 @@ class QCircuitImage:
|
|
539
544
|
idx_str = str(self._circuit.find_bit(node.cargs[0]).registers[0][1])
|
540
545
|
else:
|
541
546
|
wire2 = self._wire_map[node.cargs[0]]
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
idx_str,
|
546
|
-
str(wire2 - wire1),
|
547
|
+
self._latex[wire2][col] = (
|
548
|
+
f"\\dstick{{_{{_{{\\hspace{{{cond_offset}em}}{idx_str}}}}}}} "
|
549
|
+
f"\\cw \\ar @{{<=}} [-{str(wire2 - wire1)},0]"
|
547
550
|
)
|
548
551
|
else:
|
549
552
|
wire2 = self._wire_map[node.cargs[0]]
|
@@ -568,7 +571,7 @@ class QCircuitImage:
|
|
568
571
|
if node.op.label is not None:
|
569
572
|
pos = indexes[0]
|
570
573
|
label = node.op.label.replace(" ", "\\,")
|
571
|
-
self._latex[pos][col] = "\\cds{0}{^{\\mathrm{
|
574
|
+
self._latex[pos][col] = f"\\cds{{0}}{{^{{\\mathrm{{{label}}}}}}}"
|
572
575
|
|
573
576
|
def _add_controls(self, wire_list, ctrlqargs, ctrl_state, col):
|
574
577
|
"""Add one or more controls to a gate"""
|
@@ -610,21 +613,20 @@ class QCircuitImage:
|
|
610
613
|
)
|
611
614
|
gap = cwire - max(wire_list)
|
612
615
|
control = "\\control" if op.condition[1] else "\\controlo"
|
613
|
-
self._latex[cwire][
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
)
|
616
|
+
self._latex[cwire][
|
617
|
+
col
|
618
|
+
] = f"{control} \\cw^({meas_offset}){{^{{\\mathtt{{{label}}}}}}} \\cwx[-{str(gap)}]"
|
619
|
+
|
618
620
|
# If condition is a register and cregbundle is false
|
619
621
|
else:
|
620
622
|
# First sort the val_bits in the order of the register bits in the circuit
|
621
623
|
cond_wires = []
|
622
624
|
cond_bits = []
|
623
|
-
for wire in self._wire_map:
|
625
|
+
for wire, index in self._wire_map.items():
|
624
626
|
reg, _, reg_index = get_bit_reg_index(self._circuit, wire)
|
625
627
|
if reg == cond_reg:
|
626
628
|
cond_bits.append(reg_index)
|
627
|
-
cond_wires.append(
|
629
|
+
cond_wires.append(index)
|
628
630
|
|
629
631
|
gap = cond_wires[0] - max(wire_list)
|
630
632
|
prev_wire = cond_wires[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
|
|
@@ -174,13 +174,10 @@ def dag_drawer(dag, scale=0.7, filename=None, style="color"):
|
|
174
174
|
label = register_bit_labels.get(
|
175
175
|
node.wire, f"q_{dag.find_bit(node.wire).index}"
|
176
176
|
)
|
177
|
-
|
177
|
+
else:
|
178
178
|
label = register_bit_labels.get(
|
179
179
|
node.wire, f"c_{dag.find_bit(node.wire).index}"
|
180
180
|
)
|
181
|
-
else:
|
182
|
-
label = str(node.wire.name)
|
183
|
-
|
184
181
|
n["label"] = label
|
185
182
|
n["color"] = "black"
|
186
183
|
n["style"] = "filled"
|
@@ -190,28 +187,24 @@ def dag_drawer(dag, scale=0.7, filename=None, style="color"):
|
|
190
187
|
label = register_bit_labels.get(
|
191
188
|
node.wire, f"q[{dag.find_bit(node.wire).index}]"
|
192
189
|
)
|
193
|
-
|
190
|
+
else:
|
194
191
|
label = register_bit_labels.get(
|
195
192
|
node.wire, f"c[{dag.find_bit(node.wire).index}]"
|
196
193
|
)
|
197
|
-
else:
|
198
|
-
label = str(node.wire.name)
|
199
194
|
n["label"] = label
|
200
195
|
n["color"] = "black"
|
201
196
|
n["style"] = "filled"
|
202
197
|
n["fillcolor"] = "red"
|
203
198
|
return n
|
204
199
|
else:
|
205
|
-
raise VisualizationError("Invalid style
|
200
|
+
raise VisualizationError(f"Invalid style {style}")
|
206
201
|
|
207
202
|
def edge_attr_func(edge):
|
208
203
|
e = {}
|
209
204
|
if isinstance(edge, Qubit):
|
210
205
|
label = register_bit_labels.get(edge, f"q_{dag.find_bit(edge).index}")
|
211
|
-
elif isinstance(edge, Clbit):
|
212
|
-
label = register_bit_labels.get(edge, f"c_{dag.find_bit(edge).index}")
|
213
206
|
else:
|
214
|
-
label =
|
207
|
+
label = register_bit_labels.get(edge, f"c_{dag.find_bit(edge).index}")
|
215
208
|
e["label"] = label
|
216
209
|
return e
|
217
210
|
|
@@ -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.0rc1
|
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,29 +28,29 @@ 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.
|
32
|
-
Requires-Dist: numpy<3,>=1.17
|
33
|
-
Requires-Dist: scipy>=1.5
|
34
|
-
Requires-Dist: sympy>=1.3
|
35
|
-
Requires-Dist: dill>=0.3
|
36
|
-
Requires-Dist: python-dateutil>=2.8.0
|
37
|
-
Requires-Dist: stevedore>=3.0.0
|
31
|
+
Requires-Dist: rustworkx >=0.15.0
|
32
|
+
Requires-Dist: numpy <3,>=1.17
|
33
|
+
Requires-Dist: scipy >=1.5
|
34
|
+
Requires-Dist: sympy >=1.3
|
35
|
+
Requires-Dist: dill >=0.3
|
36
|
+
Requires-Dist: python-dateutil >=2.8.0
|
37
|
+
Requires-Dist: stevedore >=3.0.0
|
38
38
|
Requires-Dist: typing-extensions
|
39
|
-
Requires-Dist: symengine>=0.11
|
39
|
+
Requires-Dist: symengine >=0.11
|
40
40
|
Provides-Extra: all
|
41
|
-
Requires-Dist: qiskit[crosstalk-pass,csp-layout-pass,qasm3-import,visualization]; extra ==
|
41
|
+
Requires-Dist: qiskit[crosstalk-pass,csp-layout-pass,qasm3-import,visualization] ; extra == 'all'
|
42
42
|
Provides-Extra: crosstalk-pass
|
43
|
-
Requires-Dist: z3-solver>=4.7; extra ==
|
43
|
+
Requires-Dist: z3-solver >=4.7 ; extra == 'crosstalk-pass'
|
44
44
|
Provides-Extra: csp-layout-pass
|
45
|
-
Requires-Dist: python-constraint>=1.4; extra ==
|
45
|
+
Requires-Dist: python-constraint >=1.4 ; extra == 'csp-layout-pass'
|
46
46
|
Provides-Extra: qasm3-import
|
47
|
-
Requires-Dist: qiskit-qasm3-import>=0.1.0; extra ==
|
47
|
+
Requires-Dist: qiskit-qasm3-import >=0.1.0 ; extra == 'qasm3-import'
|
48
48
|
Provides-Extra: visualization
|
49
|
-
Requires-Dist: matplotlib>=3.3; extra ==
|
50
|
-
Requires-Dist: pydot; extra ==
|
51
|
-
Requires-Dist: Pillow>=4.2.1; extra ==
|
52
|
-
Requires-Dist: pylatexenc>=1.4; extra ==
|
53
|
-
Requires-Dist: seaborn>=0.9.0; extra ==
|
49
|
+
Requires-Dist: matplotlib >=3.3 ; extra == 'visualization'
|
50
|
+
Requires-Dist: pydot ; extra == 'visualization'
|
51
|
+
Requires-Dist: Pillow >=4.2.1 ; extra == 'visualization'
|
52
|
+
Requires-Dist: pylatexenc >=1.4 ; extra == 'visualization'
|
53
|
+
Requires-Dist: seaborn >=0.9.0 ; extra == 'visualization'
|
54
54
|
|
55
55
|
# Qiskit
|
56
56
|
|
@@ -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
|
|
@@ -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
|