qiskit 1.3.0__cp39-abi3-win32.whl → 1.3.0b1__cp39-abi3-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qiskit/VERSION.txt +1 -1
- qiskit/__init__.py +1 -20
- qiskit/_accelerate.pyd +0 -0
- qiskit/assembler/assemble_schedules.py +0 -2
- qiskit/circuit/__init__.py +1 -44
- qiskit/circuit/_standard_gates_commutations.py +0 -585
- qiskit/circuit/barrier.py +0 -2
- qiskit/circuit/controlflow/builder.py +3 -3
- qiskit/circuit/controlflow/if_else.py +5 -13
- qiskit/circuit/controlflow/while_loop.py +2 -10
- qiskit/circuit/delay.py +3 -20
- qiskit/circuit/equivalence.py +214 -13
- qiskit/circuit/gate.py +1 -3
- qiskit/circuit/instruction.py +11 -32
- qiskit/circuit/instructionset.py +0 -2
- qiskit/circuit/library/__init__.py +14 -110
- qiskit/circuit/library/arithmetic/__init__.py +2 -9
- qiskit/circuit/library/arithmetic/adders/__init__.py +0 -1
- qiskit/circuit/library/arithmetic/adders/adder.py +2 -154
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +56 -20
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +1 -14
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +91 -21
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
- qiskit/circuit/library/arithmetic/multipliers/__init__.py +0 -1
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -8
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +3 -94
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +1 -8
- qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
- qiskit/circuit/library/basis_change/qft.py +38 -20
- qiskit/circuit/library/blueprintcircuit.py +0 -64
- qiskit/circuit/library/boolean_logic/__init__.py +4 -4
- qiskit/circuit/library/boolean_logic/inner_product.py +4 -81
- qiskit/circuit/library/boolean_logic/quantum_and.py +4 -107
- qiskit/circuit/library/boolean_logic/quantum_or.py +3 -107
- qiskit/circuit/library/boolean_logic/quantum_xor.py +3 -97
- qiskit/circuit/library/data_preparation/__init__.py +3 -6
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +29 -342
- qiskit/circuit/library/data_preparation/{_z_feature_map.py → z_feature_map.py} +34 -45
- qiskit/circuit/library/data_preparation/zz_feature_map.py +118 -0
- qiskit/circuit/library/fourier_checking.py +11 -72
- qiskit/circuit/library/generalized_gates/__init__.py +1 -1
- qiskit/circuit/library/generalized_gates/diagonal.py +51 -45
- qiskit/circuit/library/generalized_gates/gms.py +14 -67
- qiskit/circuit/library/generalized_gates/gr.py +4 -4
- qiskit/circuit/library/generalized_gates/isometry.py +2 -2
- qiskit/circuit/library/generalized_gates/linear_function.py +6 -12
- qiskit/circuit/library/generalized_gates/mcmt.py +107 -167
- qiskit/circuit/library/generalized_gates/permutation.py +6 -8
- qiskit/circuit/library/generalized_gates/rv.py +9 -8
- qiskit/circuit/library/graph_state.py +10 -93
- qiskit/circuit/library/grover_operator.py +2 -270
- qiskit/circuit/library/hidden_linear_function.py +20 -83
- qiskit/circuit/library/iqp.py +20 -99
- qiskit/circuit/library/n_local/__init__.py +7 -19
- qiskit/circuit/library/n_local/efficient_su2.py +5 -118
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +0 -259
- qiskit/circuit/library/n_local/excitation_preserving.py +6 -130
- qiskit/circuit/library/n_local/n_local.py +5 -406
- qiskit/circuit/library/n_local/pauli_two_design.py +4 -106
- qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -80
- qiskit/circuit/library/n_local/real_amplitudes.py +7 -127
- qiskit/circuit/library/n_local/two_local.py +7 -14
- qiskit/circuit/library/overlap.py +26 -91
- qiskit/circuit/library/pauli_evolution.py +15 -17
- qiskit/circuit/library/phase_estimation.py +4 -80
- qiskit/circuit/library/quantum_volume.py +20 -72
- qiskit/circuit/library/standard_gates/__init__.py +1 -20
- qiskit/circuit/library/standard_gates/dcx.py +1 -2
- qiskit/circuit/library/standard_gates/ecr.py +2 -2
- qiskit/circuit/library/standard_gates/h.py +3 -4
- qiskit/circuit/library/standard_gates/i.py +1 -2
- qiskit/circuit/library/standard_gates/iswap.py +2 -2
- qiskit/circuit/library/standard_gates/p.py +12 -20
- qiskit/circuit/library/standard_gates/r.py +1 -1
- qiskit/circuit/library/standard_gates/rx.py +3 -4
- qiskit/circuit/library/standard_gates/rxx.py +2 -2
- qiskit/circuit/library/standard_gates/ry.py +3 -4
- qiskit/circuit/library/standard_gates/ryy.py +2 -2
- qiskit/circuit/library/standard_gates/rz.py +12 -13
- qiskit/circuit/library/standard_gates/rzx.py +6 -6
- qiskit/circuit/library/standard_gates/rzz.py +1 -1
- qiskit/circuit/library/standard_gates/s.py +4 -4
- qiskit/circuit/library/standard_gates/swap.py +3 -3
- qiskit/circuit/library/standard_gates/sx.py +3 -4
- qiskit/circuit/library/standard_gates/t.py +2 -2
- qiskit/circuit/library/standard_gates/u.py +3 -11
- qiskit/circuit/library/standard_gates/u1.py +15 -65
- qiskit/circuit/library/standard_gates/u2.py +1 -4
- qiskit/circuit/library/standard_gates/u3.py +3 -31
- qiskit/circuit/library/standard_gates/x.py +5 -7
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -2
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -2
- qiskit/circuit/library/standard_gates/y.py +3 -4
- qiskit/circuit/library/standard_gates/z.py +3 -3
- qiskit/circuit/library/templates/clifford/clifford_2_1.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +7 -9
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +9 -10
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +7 -9
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +8 -10
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +14 -16
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +12 -14
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +12 -14
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +10 -12
- qiskit/circuit/library/templates/rzx/rzx_cy.py +10 -11
- qiskit/circuit/library/templates/rzx/rzx_xz.py +15 -16
- qiskit/circuit/library/templates/rzx/rzx_yz.py +10 -12
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +20 -22
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +15 -16
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +15 -17
- qiskit/circuit/parameter.py +0 -4
- qiskit/circuit/parameterexpression.py +34 -167
- qiskit/circuit/quantumcircuit.py +126 -162
- qiskit/circuit/singleton.py +0 -2
- qiskit/circuit/store.py +0 -2
- qiskit/compiler/assembler.py +4 -17
- qiskit/compiler/scheduler.py +0 -2
- qiskit/compiler/sequencer.py +0 -2
- qiskit/compiler/transpiler.py +26 -81
- qiskit/converters/circuit_to_dag.py +2 -2
- qiskit/converters/circuit_to_dagdependency.py +1 -1
- qiskit/converters/circuit_to_dagdependency_v2.py +1 -1
- qiskit/converters/circuit_to_instruction.py +1 -1
- qiskit/converters/dag_to_circuit.py +5 -7
- qiskit/converters/dag_to_dagdependency.py +1 -1
- qiskit/converters/dag_to_dagdependency_v2.py +1 -1
- qiskit/converters/dagdependency_to_circuit.py +1 -5
- qiskit/converters/dagdependency_to_dag.py +1 -6
- qiskit/dagcircuit/collect_blocks.py +3 -3
- qiskit/dagcircuit/dagdependency.py +5 -18
- qiskit/dagcircuit/dagdependency_v2.py +1 -1
- qiskit/dagcircuit/dagnode.py +2 -2
- qiskit/passmanager/__init__.py +2 -2
- qiskit/primitives/backend_estimator.py +2 -5
- qiskit/primitives/backend_sampler_v2.py +18 -61
- qiskit/primitives/base/base_estimator.py +2 -2
- qiskit/primitives/containers/data_bin.py +1 -9
- qiskit/primitives/statevector_sampler.py +1 -1
- qiskit/primitives/utils.py +1 -1
- qiskit/providers/__init__.py +3 -3
- qiskit/providers/backend.py +1 -12
- qiskit/providers/backend_compat.py +3 -23
- qiskit/providers/basic_provider/basic_simulator.py +2 -12
- qiskit/providers/fake_provider/fake_pulse_backend.py +1 -6
- qiskit/providers/fake_provider/generic_backend_v2.py +30 -46
- qiskit/providers/models/pulsedefaults.py +0 -2
- qiskit/pulse/builder.py +18 -59
- qiskit/pulse/calibration_entries.py +1 -4
- qiskit/pulse/channels.py +0 -2
- qiskit/pulse/exceptions.py +0 -2
- qiskit/pulse/instruction_schedule_map.py +6 -21
- qiskit/pulse/instructions/acquire.py +0 -2
- qiskit/pulse/instructions/delay.py +0 -2
- qiskit/pulse/instructions/directives.py +0 -8
- qiskit/pulse/instructions/frequency.py +0 -3
- qiskit/pulse/instructions/instruction.py +0 -2
- qiskit/pulse/instructions/phase.py +0 -3
- qiskit/pulse/instructions/play.py +0 -2
- qiskit/pulse/instructions/reference.py +0 -2
- qiskit/pulse/instructions/snapshot.py +0 -2
- qiskit/pulse/library/pulse.py +0 -2
- qiskit/pulse/library/symbolic_pulses.py +0 -28
- qiskit/pulse/library/waveform.py +0 -2
- qiskit/pulse/macros.py +1 -1
- qiskit/pulse/schedule.py +13 -12
- qiskit/pulse/transforms/alignments.py +3 -5
- qiskit/pulse/transforms/dag.py +0 -7
- qiskit/qasm2/export.py +3 -5
- qiskit/qasm2/parse.py +2 -46
- qiskit/qasm3/__init__.py +0 -1
- qiskit/qasm3/ast.py +15 -123
- qiskit/qasm3/exporter.py +77 -103
- qiskit/qobj/converters/pulse_instruction.py +4 -6
- qiskit/qpy/__init__.py +0 -181
- qiskit/qpy/binary_io/circuits.py +5 -20
- qiskit/qpy/binary_io/schedules.py +4 -3
- qiskit/qpy/binary_io/value.py +13 -310
- qiskit/qpy/common.py +2 -46
- qiskit/qpy/formats.py +0 -7
- qiskit/qpy/interface.py +4 -40
- qiskit/quantum_info/__init__.py +0 -4
- qiskit/quantum_info/operators/channel/transformations.py +21 -28
- qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
- qiskit/quantum_info/operators/operator.py +8 -54
- qiskit/quantum_info/operators/symplectic/base_pauli.py +19 -11
- qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +1 -1
- qiskit/quantum_info/operators/symplectic/pauli.py +0 -2
- qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +2 -23
- qiskit/quantum_info/states/densitymatrix.py +5 -5
- qiskit/quantum_info/states/stabilizerstate.py +1 -1
- qiskit/quantum_info/states/statevector.py +6 -6
- qiskit/result/mitigation/base_readout_mitigator.py +1 -1
- qiskit/result/mitigation/correlated_readout_mitigator.py +1 -9
- qiskit/result/mitigation/local_readout_mitigator.py +1 -9
- qiskit/result/mitigation/utils.py +0 -57
- qiskit/scheduler/config.py +0 -2
- qiskit/scheduler/methods/basic.py +0 -3
- qiskit/scheduler/schedule_circuit.py +0 -2
- qiskit/scheduler/sequence.py +0 -2
- qiskit/synthesis/__init__.py +0 -25
- qiskit/synthesis/clifford/clifford_decompose_bm.py +2 -1
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +2 -3
- qiskit/synthesis/clifford/clifford_decompose_layers.py +1 -2
- qiskit/synthesis/evolution/__init__.py +0 -1
- qiskit/synthesis/evolution/lie_trotter.py +42 -16
- qiskit/synthesis/evolution/product_formula.py +238 -165
- qiskit/synthesis/evolution/qdrift.py +29 -36
- qiskit/synthesis/evolution/suzuki_trotter.py +27 -87
- qiskit/synthesis/multi_controlled/__init__.py +0 -1
- qiskit/synthesis/qft/qft_decompose_full.py +1 -19
- qiskit/synthesis/qft/qft_decompose_lnn.py +1 -2
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +1 -2
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +63 -4
- qiskit/synthesis/two_qubit/weyl.py +97 -0
- qiskit/synthesis/unitary/qsd.py +5 -5
- qiskit/transpiler/__init__.py +14 -21
- qiskit/transpiler/basepasses.py +1 -1
- qiskit/transpiler/passes/__init__.py +0 -2
- qiskit/transpiler/passes/basis/basis_translator.py +565 -9
- qiskit/transpiler/passes/basis/decompose.py +12 -45
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
- qiskit/transpiler/passes/calibration/pulse_gate.py +2 -4
- qiskit/transpiler/passes/calibration/rx_builder.py +7 -11
- qiskit/transpiler/passes/calibration/rzx_builder.py +30 -46
- qiskit/transpiler/passes/layout/disjoint_utils.py +13 -15
- qiskit/transpiler/passes/layout/sabre_layout.py +2 -7
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +0 -5
- qiskit/transpiler/passes/optimization/__init__.py +0 -1
- qiskit/transpiler/passes/optimization/collect_cliffords.py +3 -19
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +1 -1
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
- qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +1 -1
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +131 -48
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +2 -4
- qiskit/transpiler/passes/optimization/elide_permutations.py +32 -9
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +0 -2
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +11 -5
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
- qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +1 -1
- qiskit/transpiler/passes/optimization/template_matching/backward_match.py +5 -5
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +4 -4
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +2 -2
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +1 -1
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
- qiskit/transpiler/passes/routing/sabre_swap.py +3 -7
- qiskit/transpiler/passes/routing/star_prerouting.py +2 -2
- qiskit/transpiler/passes/scheduling/alap.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +2 -2
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -2
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
- qiskit/transpiler/passes/scheduling/asap.py +1 -1
- qiskit/transpiler/passes/scheduling/base_scheduler.py +12 -14
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +4 -9
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +5 -16
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +1 -4
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +2 -6
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -9
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +99 -262
- qiskit/transpiler/passes/synthesis/hls_plugins.py +7 -638
- qiskit/transpiler/passes/synthesis/qubit_tracker.py +132 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -55
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +56 -2
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -5
- qiskit/transpiler/passes/utils/gate_direction.py +275 -12
- qiskit/transpiler/passes/utils/gates_basis.py +30 -7
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +1 -2
- qiskit/transpiler/passmanager_config.py +4 -22
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +14 -40
- qiskit/transpiler/preset_passmanagers/common.py +3 -5
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +42 -125
- qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
- qiskit/transpiler/target.py +16 -74
- qiskit/visualization/circuit/_utils.py +2 -2
- qiskit/visualization/circuit/circuit_visualization.py +2 -3
- qiskit/visualization/circuit/matplotlib.py +1 -1
- qiskit/visualization/dag_visualization.py +1 -1
- qiskit/visualization/pass_manager_visualization.py +14 -3
- qiskit/visualization/pulse_v2/interface.py +1 -3
- qiskit/visualization/timeline/core.py +2 -25
- qiskit/visualization/timeline/interface.py +0 -12
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/METADATA +19 -20
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/RECORD +347 -358
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/WHEEL +1 -1
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/entry_points.txt +0 -19
- qiskit/circuit/library/data_preparation/_zz_feature_map.py +0 -150
- qiskit/circuit/twirling.py +0 -145
- qiskit/synthesis/arithmetic/__init__.py +0 -16
- qiskit/synthesis/arithmetic/adders/__init__.py +0 -17
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +0 -154
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +0 -103
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +0 -161
- qiskit/synthesis/arithmetic/multipliers/__init__.py +0 -16
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +0 -102
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +0 -99
- qiskit/synthesis/evolution/pauli_network.py +0 -80
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +0 -52
- qiskit/transpiler/passes/optimization/remove_identity_equiv.py +0 -69
- qiskit/utils/deprecate_pulse.py +0 -119
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/top_level.txt +0 -0
qiskit/qpy/binary_io/value.py
CHANGED
@@ -15,23 +15,20 @@
|
|
15
15
|
from __future__ import annotations
|
16
16
|
|
17
17
|
import collections.abc
|
18
|
-
import io
|
19
18
|
import struct
|
20
19
|
import uuid
|
21
20
|
|
22
21
|
import numpy as np
|
23
22
|
import symengine
|
23
|
+
from symengine.lib.symengine_wrapper import ( # pylint: disable = no-name-in-module
|
24
|
+
load_basic,
|
25
|
+
)
|
24
26
|
|
25
27
|
|
26
28
|
from qiskit.circuit import CASE_DEFAULT, Clbit, ClassicalRegister
|
27
29
|
from qiskit.circuit.classical import expr, types
|
28
30
|
from qiskit.circuit.parameter import Parameter
|
29
|
-
from qiskit.circuit.parameterexpression import
|
30
|
-
ParameterExpression,
|
31
|
-
op_code_to_method,
|
32
|
-
_OPCode,
|
33
|
-
_SUBS,
|
34
|
-
)
|
31
|
+
from qiskit.circuit.parameterexpression import ParameterExpression
|
35
32
|
from qiskit.circuit.parametervector import ParameterVector, ParameterVectorElement
|
36
33
|
from qiskit.qpy import common, formats, exceptions, type_keys
|
37
34
|
|
@@ -56,132 +53,20 @@ def _write_parameter_vec(file_obj, obj):
|
|
56
53
|
file_obj.write(name_bytes)
|
57
54
|
|
58
55
|
|
59
|
-
def
|
60
|
-
|
61
|
-
|
62
|
-
if inst is None:
|
63
|
-
inst_type = "n"
|
64
|
-
inst_data = b"\x00"
|
65
|
-
elif isinstance(inst, Parameter):
|
66
|
-
inst_type = "p"
|
67
|
-
inst_data = inst.uuid.bytes
|
68
|
-
elif isinstance(inst, complex):
|
69
|
-
inst_type = "c"
|
70
|
-
inst_data = struct.pack("!dd", inst.real, inst.imag)
|
71
|
-
elif isinstance(inst, float):
|
72
|
-
inst_type = "f"
|
73
|
-
inst_data = struct.pack("!Qd", 0, inst)
|
74
|
-
elif isinstance(inst, int):
|
75
|
-
inst_type = "i"
|
76
|
-
inst_data = struct.pack("!Qq", 0, inst)
|
77
|
-
elif isinstance(inst, ParameterExpression):
|
78
|
-
if not r_side:
|
79
|
-
entry = struct.pack(
|
80
|
-
formats.PARAM_EXPR_ELEM_V13_PACK,
|
81
|
-
255,
|
82
|
-
"s".encode("utf8"),
|
83
|
-
b"\x00",
|
84
|
-
"n".encode("utf8"),
|
85
|
-
b"\x00",
|
86
|
-
)
|
87
|
-
else:
|
88
|
-
entry = struct.pack(
|
89
|
-
formats.PARAM_EXPR_ELEM_V13_PACK,
|
90
|
-
255,
|
91
|
-
"n".encode("utf8"),
|
92
|
-
b"\x00",
|
93
|
-
"s".encode("utf8"),
|
94
|
-
b"\x00",
|
95
|
-
)
|
96
|
-
file_obj.write(entry)
|
97
|
-
_write_parameter_expression_v13(file_obj, inst, version)
|
98
|
-
if not r_side:
|
99
|
-
entry = struct.pack(
|
100
|
-
formats.PARAM_EXPR_ELEM_V13_PACK,
|
101
|
-
255,
|
102
|
-
"e".encode("utf8"),
|
103
|
-
b"\x00",
|
104
|
-
"n".encode("utf8"),
|
105
|
-
b"\x00",
|
106
|
-
)
|
107
|
-
else:
|
108
|
-
entry = struct.pack(
|
109
|
-
formats.PARAM_EXPR_ELEM_V13_PACK,
|
110
|
-
255,
|
111
|
-
"n".encode("utf8"),
|
112
|
-
b"\x00",
|
113
|
-
"e".encode("utf8"),
|
114
|
-
b"\x00",
|
115
|
-
)
|
116
|
-
file_obj.write(entry)
|
117
|
-
inst_type = "n"
|
118
|
-
inst_data = b"\x00"
|
56
|
+
def _write_parameter_expression(file_obj, obj, use_symengine, *, version):
|
57
|
+
if use_symengine:
|
58
|
+
expr_bytes = obj._symbol_expr.__reduce__()[1][0]
|
119
59
|
else:
|
120
|
-
|
121
|
-
return inst_type, inst_data
|
122
|
-
|
60
|
+
from sympy import srepr, sympify
|
123
61
|
|
124
|
-
|
125
|
-
with io.BytesIO() as mapping_buf:
|
126
|
-
subs_dict = {k.name: v for k, v in subs.binds.items()}
|
127
|
-
common.write_mapping(
|
128
|
-
mapping_buf, mapping=subs_dict, serializer=dumps_value, version=version
|
129
|
-
)
|
130
|
-
data = mapping_buf.getvalue()
|
131
|
-
entry = struct.pack(
|
132
|
-
formats.PARAM_EXPR_ELEM_V13_PACK,
|
133
|
-
subs.op,
|
134
|
-
"u".encode("utf8"),
|
135
|
-
struct.pack("!QQ", len(data), 0),
|
136
|
-
"n".encode("utf8"),
|
137
|
-
b"\x00",
|
138
|
-
)
|
139
|
-
file_obj.write(entry)
|
140
|
-
file_obj.write(data)
|
141
|
-
return subs.binds
|
142
|
-
|
143
|
-
|
144
|
-
def _write_parameter_expression_v13(file_obj, obj, version):
|
145
|
-
symbol_map = {}
|
146
|
-
for inst in obj._qpy_replay:
|
147
|
-
if isinstance(inst, _SUBS):
|
148
|
-
symbol_map.update(_encode_replay_subs(inst, file_obj, version))
|
149
|
-
continue
|
150
|
-
lhs_type, lhs = _encode_replay_entry(inst.lhs, file_obj, version)
|
151
|
-
rhs_type, rhs = _encode_replay_entry(inst.rhs, file_obj, version, True)
|
152
|
-
entry = struct.pack(
|
153
|
-
formats.PARAM_EXPR_ELEM_V13_PACK,
|
154
|
-
inst.op,
|
155
|
-
lhs_type.encode("utf8"),
|
156
|
-
lhs,
|
157
|
-
rhs_type.encode("utf8"),
|
158
|
-
rhs,
|
159
|
-
)
|
160
|
-
file_obj.write(entry)
|
161
|
-
return symbol_map
|
62
|
+
expr_bytes = srepr(sympify(obj._symbol_expr)).encode(common.ENCODE)
|
162
63
|
|
163
|
-
|
164
|
-
def _write_parameter_expression(file_obj, obj, use_symengine, *, version):
|
165
|
-
extra_symbols = None
|
166
|
-
if version < 13:
|
167
|
-
if use_symengine:
|
168
|
-
expr_bytes = obj._symbol_expr.__reduce__()[1][0]
|
169
|
-
else:
|
170
|
-
from sympy import srepr, sympify
|
171
|
-
|
172
|
-
expr_bytes = srepr(sympify(obj._symbol_expr)).encode(common.ENCODE)
|
173
|
-
else:
|
174
|
-
with io.BytesIO() as buf:
|
175
|
-
extra_symbols = _write_parameter_expression_v13(buf, obj, version)
|
176
|
-
expr_bytes = buf.getvalue()
|
177
|
-
symbol_table_len = len(obj._parameter_symbols)
|
178
|
-
if extra_symbols:
|
179
|
-
symbol_table_len += 2 * len(extra_symbols)
|
180
64
|
param_expr_header_raw = struct.pack(
|
181
|
-
formats.PARAMETER_EXPR_PACK,
|
65
|
+
formats.PARAMETER_EXPR_PACK, len(obj._parameter_symbols), len(expr_bytes)
|
182
66
|
)
|
183
67
|
file_obj.write(param_expr_header_raw)
|
184
68
|
file_obj.write(expr_bytes)
|
69
|
+
|
185
70
|
for symbol, value in obj._parameter_symbols.items():
|
186
71
|
symbol_key = type_keys.Value.assign(symbol)
|
187
72
|
|
@@ -207,49 +92,6 @@ def _write_parameter_expression(file_obj, obj, use_symengine, *, version):
|
|
207
92
|
file_obj.write(elem_header)
|
208
93
|
file_obj.write(symbol_data)
|
209
94
|
file_obj.write(value_data)
|
210
|
-
if extra_symbols:
|
211
|
-
for symbol in extra_symbols:
|
212
|
-
symbol_key = type_keys.Value.assign(symbol)
|
213
|
-
# serialize key
|
214
|
-
if symbol_key == type_keys.Value.PARAMETER_VECTOR:
|
215
|
-
symbol_data = common.data_to_binary(symbol, _write_parameter_vec)
|
216
|
-
else:
|
217
|
-
symbol_data = common.data_to_binary(symbol, _write_parameter)
|
218
|
-
# serialize value
|
219
|
-
value_key, value_data = dumps_value(
|
220
|
-
symbol, version=version, use_symengine=use_symengine
|
221
|
-
)
|
222
|
-
|
223
|
-
elem_header = struct.pack(
|
224
|
-
formats.PARAM_EXPR_MAP_ELEM_V3_PACK,
|
225
|
-
symbol_key,
|
226
|
-
value_key,
|
227
|
-
len(value_data),
|
228
|
-
)
|
229
|
-
file_obj.write(elem_header)
|
230
|
-
file_obj.write(symbol_data)
|
231
|
-
file_obj.write(value_data)
|
232
|
-
for symbol in extra_symbols.values():
|
233
|
-
symbol_key = type_keys.Value.assign(symbol)
|
234
|
-
# serialize key
|
235
|
-
if symbol_key == type_keys.Value.PARAMETER_VECTOR:
|
236
|
-
symbol_data = common.data_to_binary(symbol, _write_parameter_vec)
|
237
|
-
else:
|
238
|
-
symbol_data = common.data_to_binary(symbol, _write_parameter)
|
239
|
-
# serialize value
|
240
|
-
value_key, value_data = dumps_value(
|
241
|
-
symbol, version=version, use_symengine=use_symengine
|
242
|
-
)
|
243
|
-
|
244
|
-
elem_header = struct.pack(
|
245
|
-
formats.PARAM_EXPR_MAP_ELEM_V3_PACK,
|
246
|
-
symbol_key,
|
247
|
-
value_key,
|
248
|
-
len(value_data),
|
249
|
-
)
|
250
|
-
file_obj.write(elem_header)
|
251
|
-
file_obj.write(symbol_data)
|
252
|
-
file_obj.write(value_data)
|
253
95
|
|
254
96
|
|
255
97
|
class _ExprWriter(expr.ExprVisitor[None]):
|
@@ -448,7 +290,7 @@ def _read_parameter_expression_v3(file_obj, vectors, use_symengine):
|
|
448
290
|
|
449
291
|
payload = file_obj.read(data.expr_size)
|
450
292
|
if use_symengine:
|
451
|
-
expr_ =
|
293
|
+
expr_ = load_basic(payload)
|
452
294
|
else:
|
453
295
|
from sympy.parsing.sympy_parser import parse_expr
|
454
296
|
|
@@ -495,141 +337,6 @@ def _read_parameter_expression_v3(file_obj, vectors, use_symengine):
|
|
495
337
|
return ParameterExpression(symbol_map, expr_)
|
496
338
|
|
497
339
|
|
498
|
-
def _read_parameter_expression_v13(file_obj, vectors, version):
|
499
|
-
data = formats.PARAMETER_EXPR(
|
500
|
-
*struct.unpack(formats.PARAMETER_EXPR_PACK, file_obj.read(formats.PARAMETER_EXPR_SIZE))
|
501
|
-
)
|
502
|
-
|
503
|
-
payload = file_obj.read(data.expr_size)
|
504
|
-
|
505
|
-
symbol_map = {}
|
506
|
-
for _ in range(data.map_elements):
|
507
|
-
elem_data = formats.PARAM_EXPR_MAP_ELEM_V3(
|
508
|
-
*struct.unpack(
|
509
|
-
formats.PARAM_EXPR_MAP_ELEM_V3_PACK,
|
510
|
-
file_obj.read(formats.PARAM_EXPR_MAP_ELEM_V3_SIZE),
|
511
|
-
)
|
512
|
-
)
|
513
|
-
symbol_key = type_keys.Value(elem_data.symbol_type)
|
514
|
-
|
515
|
-
if symbol_key == type_keys.Value.PARAMETER:
|
516
|
-
symbol = _read_parameter(file_obj)
|
517
|
-
elif symbol_key == type_keys.Value.PARAMETER_VECTOR:
|
518
|
-
symbol = _read_parameter_vec(file_obj, vectors)
|
519
|
-
else:
|
520
|
-
raise exceptions.QpyError(f"Invalid parameter expression map type: {symbol_key}")
|
521
|
-
|
522
|
-
elem_key = type_keys.Value(elem_data.type)
|
523
|
-
binary_data = file_obj.read(elem_data.size)
|
524
|
-
if elem_key == type_keys.Value.INTEGER:
|
525
|
-
value = struct.unpack("!q", binary_data)
|
526
|
-
elif elem_key == type_keys.Value.FLOAT:
|
527
|
-
value = struct.unpack("!d", binary_data)
|
528
|
-
elif elem_key == type_keys.Value.COMPLEX:
|
529
|
-
value = complex(*struct.unpack(formats.COMPLEX_PACK, binary_data))
|
530
|
-
elif elem_key in (type_keys.Value.PARAMETER, type_keys.Value.PARAMETER_VECTOR):
|
531
|
-
value = symbol._symbol_expr
|
532
|
-
elif elem_key == type_keys.Value.PARAMETER_EXPRESSION:
|
533
|
-
value = common.data_from_binary(
|
534
|
-
binary_data,
|
535
|
-
_read_parameter_expression_v13,
|
536
|
-
vectors=vectors,
|
537
|
-
)
|
538
|
-
else:
|
539
|
-
raise exceptions.QpyError(f"Invalid parameter expression map type: {elem_key}")
|
540
|
-
symbol_map[symbol] = value
|
541
|
-
with io.BytesIO(payload) as buf:
|
542
|
-
return _read_parameter_expr_v13(buf, symbol_map, version, vectors)
|
543
|
-
|
544
|
-
|
545
|
-
def _read_parameter_expr_v13(buf, symbol_map, version, vectors):
|
546
|
-
param_uuid_map = {symbol.uuid: symbol for symbol in symbol_map if isinstance(symbol, Parameter)}
|
547
|
-
name_map = {str(v): k for k, v in symbol_map.items()}
|
548
|
-
data = buf.read(formats.PARAM_EXPR_ELEM_V13_SIZE)
|
549
|
-
stack = []
|
550
|
-
while data:
|
551
|
-
expression_data = formats.PARAM_EXPR_ELEM_V13._make(
|
552
|
-
struct.unpack(formats.PARAM_EXPR_ELEM_V13_PACK, data)
|
553
|
-
)
|
554
|
-
# LHS
|
555
|
-
if expression_data.LHS_TYPE == b"p":
|
556
|
-
stack.append(param_uuid_map[uuid.UUID(bytes=expression_data.LHS)])
|
557
|
-
elif expression_data.LHS_TYPE == b"f":
|
558
|
-
stack.append(struct.unpack("!Qd", expression_data.LHS)[1])
|
559
|
-
elif expression_data.LHS_TYPE == b"n":
|
560
|
-
pass
|
561
|
-
elif expression_data.LHS_TYPE == b"c":
|
562
|
-
stack.append(complex(*struct.unpack("!dd", expression_data.LHS)))
|
563
|
-
elif expression_data.LHS_TYPE == b"i":
|
564
|
-
stack.append(struct.unpack("!Qq", expression_data.LHS)[1])
|
565
|
-
elif expression_data.LHS_TYPE == b"s":
|
566
|
-
data = buf.read(formats.PARAM_EXPR_ELEM_V13_SIZE)
|
567
|
-
continue
|
568
|
-
elif expression_data.LHS_TYPE == b"e":
|
569
|
-
data = buf.read(formats.PARAM_EXPR_ELEM_V13_SIZE)
|
570
|
-
continue
|
571
|
-
elif expression_data.LHS_TYPE == b"u":
|
572
|
-
size = struct.unpack_from("!QQ", expression_data.LHS)[0]
|
573
|
-
subs_map_data = buf.read(size)
|
574
|
-
with io.BytesIO(subs_map_data) as mapping_buf:
|
575
|
-
mapping = common.read_mapping(
|
576
|
-
mapping_buf, deserializer=loads_value, version=version, vectors=vectors
|
577
|
-
)
|
578
|
-
stack.append({name_map[k]: v for k, v in mapping.items()})
|
579
|
-
else:
|
580
|
-
raise exceptions.QpyError(
|
581
|
-
"Unknown ParameterExpression operation type {expression_data.LHS_TYPE}"
|
582
|
-
)
|
583
|
-
# RHS
|
584
|
-
if expression_data.RHS_TYPE == b"p":
|
585
|
-
stack.append(param_uuid_map[uuid.UUID(bytes=expression_data.RHS)])
|
586
|
-
elif expression_data.RHS_TYPE == b"f":
|
587
|
-
stack.append(struct.unpack("!Qd", expression_data.RHS)[1])
|
588
|
-
elif expression_data.RHS_TYPE == b"n":
|
589
|
-
pass
|
590
|
-
elif expression_data.RHS_TYPE == b"c":
|
591
|
-
stack.append(complex(*struct.unpack("!dd", expression_data.RHS)))
|
592
|
-
elif expression_data.RHS_TYPE == b"i":
|
593
|
-
stack.append(struct.unpack("!Qq", expression_data.RHS)[1])
|
594
|
-
elif expression_data.RHS_TYPE == b"s":
|
595
|
-
data = buf.read(formats.PARAM_EXPR_ELEM_V13_SIZE)
|
596
|
-
continue
|
597
|
-
elif expression_data.RHS_TYPE == b"e":
|
598
|
-
data = buf.read(formats.PARAM_EXPR_ELEM_V13_SIZE)
|
599
|
-
continue
|
600
|
-
else:
|
601
|
-
raise exceptions.QpyError(
|
602
|
-
f"Unknown ParameterExpression operation type {expression_data.RHS_TYPE}"
|
603
|
-
)
|
604
|
-
if expression_data.OP_CODE == 255:
|
605
|
-
continue
|
606
|
-
method_str = op_code_to_method(_OPCode(expression_data.OP_CODE))
|
607
|
-
if expression_data.OP_CODE in {0, 1, 2, 3, 4, 13, 15, 18, 19, 20}:
|
608
|
-
rhs = stack.pop()
|
609
|
-
lhs = stack.pop()
|
610
|
-
# Reverse ops for commutative ops, which are add, mul (0 and 2 respectively)
|
611
|
-
# op codes 13 and 15 can never be reversed and 18, 19, 20
|
612
|
-
# are the reversed versions of non-commuative operations
|
613
|
-
# so 1, 3, 4 and 18, 19, 20 handle this explicitly.
|
614
|
-
if (
|
615
|
-
not isinstance(lhs, ParameterExpression)
|
616
|
-
and isinstance(rhs, ParameterExpression)
|
617
|
-
and expression_data.OP_CODE in {0, 2}
|
618
|
-
):
|
619
|
-
if expression_data.OP_CODE == 0:
|
620
|
-
method_str = "__radd__"
|
621
|
-
elif expression_data.OP_CODE == 2:
|
622
|
-
method_str = "__rmul__"
|
623
|
-
stack.append(getattr(rhs, method_str)(lhs))
|
624
|
-
else:
|
625
|
-
stack.append(getattr(lhs, method_str)(rhs))
|
626
|
-
else:
|
627
|
-
lhs = stack.pop()
|
628
|
-
stack.append(getattr(lhs, method_str)())
|
629
|
-
data = buf.read(formats.PARAM_EXPR_ELEM_V13_SIZE)
|
630
|
-
return stack.pop()
|
631
|
-
|
632
|
-
|
633
340
|
def _read_expr(
|
634
341
|
file_obj,
|
635
342
|
clbits: collections.abc.Sequence[Clbit],
|
@@ -960,17 +667,13 @@ def loads_value(
|
|
960
667
|
if type_key == type_keys.Value.PARAMETER_EXPRESSION:
|
961
668
|
if version < 3:
|
962
669
|
return common.data_from_binary(binary_data, _read_parameter_expression)
|
963
|
-
|
670
|
+
else:
|
964
671
|
return common.data_from_binary(
|
965
672
|
binary_data,
|
966
673
|
_read_parameter_expression_v3,
|
967
674
|
vectors=vectors,
|
968
675
|
use_symengine=use_symengine,
|
969
676
|
)
|
970
|
-
else:
|
971
|
-
return common.data_from_binary(
|
972
|
-
binary_data, _read_parameter_expression_v13, vectors=vectors, version=version
|
973
|
-
)
|
974
677
|
if type_key == type_keys.Value.EXPRESSION:
|
975
678
|
return common.data_from_binary(
|
976
679
|
binary_data,
|
qiskit/qpy/common.py
CHANGED
@@ -18,14 +18,9 @@ Common functions across several serialization and deserialization modules.
|
|
18
18
|
import io
|
19
19
|
import struct
|
20
20
|
|
21
|
-
import
|
22
|
-
from symengine.lib.symengine_wrapper import ( # pylint: disable = no-name-in-module
|
23
|
-
load_basic,
|
24
|
-
)
|
21
|
+
from qiskit.qpy import formats
|
25
22
|
|
26
|
-
|
27
|
-
|
28
|
-
QPY_VERSION = 13
|
23
|
+
QPY_VERSION = 12
|
29
24
|
QPY_COMPATIBILITY_VERSION = 10
|
30
25
|
ENCODE = "utf8"
|
31
26
|
|
@@ -309,42 +304,3 @@ def mapping_from_binary(binary_data, deserializer, **kwargs):
|
|
309
304
|
mapping = read_mapping(container, deserializer, **kwargs)
|
310
305
|
|
311
306
|
return mapping
|
312
|
-
|
313
|
-
|
314
|
-
def load_symengine_payload(payload: bytes) -> symengine.Expr:
|
315
|
-
"""Load a symengine expression from it's serialized cereal payload."""
|
316
|
-
# This is a horrible hack to workaround the symengine version checking
|
317
|
-
# it's deserialization does. There were no changes to the serialization
|
318
|
-
# format between 0.11 and 0.13 but the deserializer checks that it can't
|
319
|
-
# load across a major or minor version boundary. This works around it
|
320
|
-
# by just lying about the generating version.
|
321
|
-
symengine_version = symengine.__version__.split(".")
|
322
|
-
major = payload[2]
|
323
|
-
minor = payload[3]
|
324
|
-
if int(symengine_version[1]) != minor:
|
325
|
-
if major != 0:
|
326
|
-
raise exceptions.QpyError(
|
327
|
-
"Qiskit doesn't support loading a symengine payload generated with symengine >= 1.0"
|
328
|
-
)
|
329
|
-
if minor == 9:
|
330
|
-
raise exceptions.QpyError(
|
331
|
-
"Qiskit doesn't support loading a historical QPY file with `use_symengine=True` "
|
332
|
-
"generated in an environment using symengine 0.9.0. If you need to load this file "
|
333
|
-
"you can do so with Qiskit 0.45.x or 0.46.x and re-export the QPY file using "
|
334
|
-
"`use_symengine=False`."
|
335
|
-
)
|
336
|
-
if minor not in (11, 13):
|
337
|
-
raise exceptions.QpyError(
|
338
|
-
f"Incompatible symengine version {major}.{minor} used to generate the QPY "
|
339
|
-
"payload"
|
340
|
-
)
|
341
|
-
minor_version = int(symengine_version[1])
|
342
|
-
if minor_version not in (11, 13):
|
343
|
-
raise exceptions.QpyError(
|
344
|
-
f"Incompatible installed symengine version {symengine.__version__} to load "
|
345
|
-
"this QPY payload"
|
346
|
-
)
|
347
|
-
payload = bytearray(payload)
|
348
|
-
payload[3] = minor_version
|
349
|
-
payload = bytes(payload)
|
350
|
-
return load_basic(payload)
|
qiskit/qpy/formats.py
CHANGED
@@ -259,13 +259,6 @@ PARAMETER = namedtuple("PARAMETER", ["name_size", "uuid"])
|
|
259
259
|
PARAMETER_PACK = "!H16s"
|
260
260
|
PARAMETER_SIZE = struct.calcsize(PARAMETER_PACK)
|
261
261
|
|
262
|
-
# PARAMETEREXPRESSION_ENTRY
|
263
|
-
PARAM_EXPR_ELEM_V13 = namedtuple(
|
264
|
-
"PARAM_EXPR_ELEM_V13", ["OP_CODE", "LHS_TYPE", "LHS", "RHS_TYPE", "RHS"]
|
265
|
-
)
|
266
|
-
PARAM_EXPR_ELEM_V13_PACK = "!Bc16sc16s"
|
267
|
-
PARAM_EXPR_ELEM_V13_SIZE = struct.calcsize(PARAM_EXPR_ELEM_V13_PACK)
|
268
|
-
|
269
262
|
# COMPLEX
|
270
263
|
COMPLEX = namedtuple("COMPLEX", ["real", "imag"])
|
271
264
|
COMPLEX_PACK = "!dd"
|
qiskit/qpy/interface.py
CHANGED
@@ -25,9 +25,8 @@ from qiskit.circuit import QuantumCircuit
|
|
25
25
|
from qiskit.pulse import ScheduleBlock
|
26
26
|
from qiskit.exceptions import QiskitError
|
27
27
|
from qiskit.qpy import formats, common, binary_io, type_keys
|
28
|
-
from qiskit.qpy.exceptions import
|
28
|
+
from qiskit.qpy.exceptions import QpyError
|
29
29
|
from qiskit.version import __version__
|
30
|
-
from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
|
31
30
|
|
32
31
|
|
33
32
|
# pylint: disable=invalid-name
|
@@ -74,11 +73,6 @@ VERSION_PATTERN = (
|
|
74
73
|
VERSION_PATTERN_REGEX = re.compile(VERSION_PATTERN, re.VERBOSE | re.IGNORECASE)
|
75
74
|
|
76
75
|
|
77
|
-
@deprecate_pulse_arg(
|
78
|
-
"programs",
|
79
|
-
deprecation_description="Passing `ScheduleBlock` to `programs`",
|
80
|
-
predicate=lambda p: isinstance(p, ScheduleBlock),
|
81
|
-
)
|
82
76
|
def dump(
|
83
77
|
programs: Union[List[QPY_SUPPORTED_TYPES], QPY_SUPPORTED_TYPES],
|
84
78
|
file_obj: BinaryIO,
|
@@ -126,16 +120,15 @@ def dump(
|
|
126
120
|
programs: QPY supported object(s) to store in the specified file like object.
|
127
121
|
QPY supports :class:`.QuantumCircuit` and :class:`.ScheduleBlock`.
|
128
122
|
Different data types must be separately serialized.
|
129
|
-
Support for :class:`.ScheduleBlock` is deprecated since Qiskit 1.3.0.
|
130
123
|
file_obj: The file like object to write the QPY data too
|
131
124
|
metadata_serializer: An optional JSONEncoder class that
|
132
125
|
will be passed the ``.metadata`` attribute for each program in ``programs`` and will be
|
133
126
|
used as the ``cls`` kwarg on the `json.dump()`` call to JSON serialize that dictionary.
|
134
127
|
use_symengine: If True, all objects containing symbolic expressions will be serialized
|
135
128
|
using symengine's native mechanism. This is a faster serialization alternative,
|
136
|
-
but not supported in all platforms.
|
137
|
-
|
138
|
-
|
129
|
+
but not supported in all platforms. Please check that your target platform is supported
|
130
|
+
by the symengine library before setting this option, as it will be required by qpy to
|
131
|
+
deserialize the payload. For this reason, the option defaults to False.
|
139
132
|
version: The QPY format version to emit. By default this defaults to
|
140
133
|
the latest supported format of :attr:`~.qpy.QPY_VERSION`, however for
|
141
134
|
compatibility reasons if you need to load the generated QPY payload with an older
|
@@ -151,17 +144,6 @@ def dump(
|
|
151
144
|
from the QPY format at that version will persist. This should only be used if
|
152
145
|
compatibility with loading the payload with an older version of Qiskit is necessary.
|
153
146
|
|
154
|
-
.. note::
|
155
|
-
|
156
|
-
If serializing a :class:`.QuantumCircuit` or :class:`.ScheduleBlock` that contain
|
157
|
-
:class:`.ParameterExpression` objects with ``version`` set low with the intent to
|
158
|
-
load the payload using a historical release of Qiskit, it is safest to set the
|
159
|
-
``use_symengine`` flag to ``False``. Versions of Qiskit prior to 1.2.4 cannot load
|
160
|
-
QPY files containing ``symengine``-serialized :class:`.ParameterExpression` objects
|
161
|
-
unless the version of ``symengine`` used between the loading and generating
|
162
|
-
environments matches.
|
163
|
-
|
164
|
-
|
165
147
|
Raises:
|
166
148
|
QpyError: When multiple data format is mixed in the output.
|
167
149
|
TypeError: When invalid data type is input.
|
@@ -215,10 +197,7 @@ def dump(
|
|
215
197
|
file_obj.write(header)
|
216
198
|
common.write_type_key(file_obj, type_key)
|
217
199
|
|
218
|
-
pulse_gates = False
|
219
200
|
for program in programs:
|
220
|
-
if type_key == type_keys.Program.CIRCUIT and program._calibrations_prop:
|
221
|
-
pulse_gates = True
|
222
201
|
writer(
|
223
202
|
file_obj,
|
224
203
|
program,
|
@@ -227,13 +206,6 @@ def dump(
|
|
227
206
|
version=version,
|
228
207
|
)
|
229
208
|
|
230
|
-
if pulse_gates:
|
231
|
-
warnings.warn(
|
232
|
-
category=DeprecationWarning,
|
233
|
-
message="Pulse gates serialization is deprecated as of Qiskit 1.3. "
|
234
|
-
"It will be removed in Qiskit 2.0.",
|
235
|
-
)
|
236
|
-
|
237
209
|
|
238
210
|
def load(
|
239
211
|
file_obj: BinaryIO,
|
@@ -348,14 +320,6 @@ def load(
|
|
348
320
|
loader = binary_io.read_circuit
|
349
321
|
elif type_key == type_keys.Program.SCHEDULE_BLOCK:
|
350
322
|
loader = binary_io.read_schedule_block
|
351
|
-
warnings.warn(
|
352
|
-
category=QPYLoadingDeprecatedFeatureWarning,
|
353
|
-
message="Pulse gates deserialization is deprecated as of Qiskit 1.3 and "
|
354
|
-
"will be removed in Qiskit 2.0. This is part of the deprecation plan for "
|
355
|
-
"the entire Qiskit Pulse package. Once Pulse is removed, `ScheduleBlock` "
|
356
|
-
"sections will be ignored when loading QPY files with pulse data.",
|
357
|
-
)
|
358
|
-
|
359
323
|
else:
|
360
324
|
raise TypeError(f"Invalid payload format data kind '{type_key}'.")
|
361
325
|
|
qiskit/quantum_info/__init__.py
CHANGED
@@ -28,7 +28,6 @@ Operators
|
|
28
28
|
Pauli
|
29
29
|
Clifford
|
30
30
|
ScalarOp
|
31
|
-
SparseObservable
|
32
31
|
SparsePauliOp
|
33
32
|
CNOTDihedral
|
34
33
|
PauliList
|
@@ -114,9 +113,6 @@ Analysis
|
|
114
113
|
"""
|
115
114
|
|
116
115
|
from __future__ import annotations
|
117
|
-
|
118
|
-
from qiskit._accelerate.sparse_observable import SparseObservable
|
119
|
-
|
120
116
|
from .analysis import hellinger_distance, hellinger_fidelity, Z2Symmetries
|
121
117
|
from .operators import (
|
122
118
|
Clifford,
|
@@ -220,39 +220,32 @@ def _kraus_to_choi(data):
|
|
220
220
|
|
221
221
|
def _choi_to_kraus(data, input_dim, output_dim, atol=ATOL_DEFAULT):
|
222
222
|
"""Transform Choi representation to Kraus representation."""
|
223
|
-
import
|
223
|
+
from scipy import linalg as la
|
224
224
|
|
225
225
|
# Check if hermitian matrix
|
226
226
|
if is_hermitian_matrix(data, atol=atol):
|
227
|
-
#
|
228
|
-
#
|
229
|
-
#
|
230
|
-
#
|
231
|
-
#
|
232
|
-
|
233
|
-
|
234
|
-
#
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
math.sqrt(value) * vec.reshape((output_dim, input_dim), order="F")
|
245
|
-
for value, vec in zip(values, vecs.T)
|
246
|
-
if abs(value) > atol
|
247
|
-
]
|
248
|
-
# If we are converting a zero matrix, we need to return a Kraus set with a single
|
249
|
-
# zero-element Kraus matrix
|
227
|
+
# Get eigen-decomposition of Choi-matrix
|
228
|
+
# This should be a call to la.eigh, but there is an OpenBlas
|
229
|
+
# threading issue that is causing segfaults.
|
230
|
+
# Need schur here since la.eig does not
|
231
|
+
# guarantee orthogonality in degenerate subspaces
|
232
|
+
w, v = la.schur(data, output="complex")
|
233
|
+
w = w.diagonal().real
|
234
|
+
# Check eigenvalues are non-negative
|
235
|
+
if len(w[w < -atol]) == 0:
|
236
|
+
# CP-map Kraus representation
|
237
|
+
kraus = []
|
238
|
+
for val, vec in zip(w, v.T):
|
239
|
+
if abs(val) > atol:
|
240
|
+
k = np.sqrt(val) * vec.reshape((output_dim, input_dim), order="F")
|
241
|
+
kraus.append(k)
|
242
|
+
# If we are converting a zero matrix, we need to return a Kraus set
|
243
|
+
# with a single zero-element Kraus matrix
|
250
244
|
if not kraus:
|
251
|
-
kraus
|
245
|
+
kraus.append(np.zeros((output_dim, input_dim), dtype=complex))
|
252
246
|
return kraus, None
|
253
|
-
|
254
|
-
|
255
|
-
mat_u, svals, mat_vh = scipy.linalg.svd(data)
|
247
|
+
# Non-CP-map generalized Kraus representation
|
248
|
+
mat_u, svals, mat_vh = la.svd(data)
|
256
249
|
kraus_l = []
|
257
250
|
kraus_r = []
|
258
251
|
for val, vec_l, vec_r in zip(svals, mat_u.T, mat_vh.conj()):
|