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
@@ -11,316 +11,17 @@
|
|
11
11
|
# that they have been altered from the originals.
|
12
12
|
|
13
13
|
"""The Pauli expansion circuit module."""
|
14
|
-
|
15
|
-
from __future__ import annotations
|
16
|
-
|
17
|
-
from collections.abc import Sequence, Mapping
|
18
|
-
from typing import Optional, Callable, List, Union, Dict, Tuple
|
14
|
+
from typing import Optional, Callable, List, Union, Sequence, Dict, Tuple
|
19
15
|
from functools import reduce
|
20
16
|
import numpy as np
|
21
17
|
|
22
18
|
from qiskit.circuit import QuantumCircuit
|
23
|
-
from qiskit.circuit import Parameter, ParameterVector
|
19
|
+
from qiskit.circuit import Parameter, ParameterVector
|
24
20
|
from qiskit.circuit.library.standard_gates import HGate
|
25
|
-
from qiskit.utils.deprecation import deprecate_func
|
26
|
-
from qiskit._accelerate.circuit_library import pauli_feature_map as _fast_map
|
27
21
|
|
28
22
|
from ..n_local.n_local import NLocal
|
29
23
|
|
30
24
|
|
31
|
-
def _normalize_entanglement(
|
32
|
-
entanglement: str | Mapping[int, Sequence[Sequence[int]]]
|
33
|
-
) -> str | dict[int, list[tuple[int]]]:
|
34
|
-
if isinstance(entanglement, str):
|
35
|
-
return entanglement
|
36
|
-
|
37
|
-
return {
|
38
|
-
num_paulis: [tuple(connections) for connections in ent]
|
39
|
-
for num_paulis, ent in entanglement.items()
|
40
|
-
}
|
41
|
-
|
42
|
-
|
43
|
-
def pauli_feature_map(
|
44
|
-
feature_dimension: int,
|
45
|
-
reps: int = 2,
|
46
|
-
entanglement: (
|
47
|
-
str
|
48
|
-
| Mapping[int, Sequence[Sequence[int]]]
|
49
|
-
| Callable[[int], str | Mapping[int, Sequence[Sequence[int]]]]
|
50
|
-
) = "full",
|
51
|
-
alpha: float = 2.0,
|
52
|
-
paulis: list[str] | None = None,
|
53
|
-
data_map_func: Callable[[Parameter], ParameterExpression] | None = None,
|
54
|
-
parameter_prefix: str = "x",
|
55
|
-
insert_barriers: bool = False,
|
56
|
-
name: str = "PauliFeatureMap",
|
57
|
-
) -> QuantumCircuit:
|
58
|
-
r"""The Pauli expansion circuit.
|
59
|
-
|
60
|
-
The Pauli expansion circuit is a data encoding circuit that transforms input data
|
61
|
-
:math:`\vec{x} \in \mathbb{R}^n`, where :math:`n` is the ``feature_dimension``, as
|
62
|
-
|
63
|
-
.. math::
|
64
|
-
|
65
|
-
U_{\Phi(\vec{x})}=\exp\left(i\sum_{S \in \mathcal{I}}
|
66
|
-
\phi_S(\vec{x})\prod_{i\in S} P_i\right).
|
67
|
-
|
68
|
-
Here, :math:`S` is a set of qubit indices that describes the connections in the feature map,
|
69
|
-
:math:`\mathcal{I}` is a set containing all these index sets, and
|
70
|
-
:math:`P_i \in \{I, X, Y, Z\}`. Per default the data-mapping
|
71
|
-
:math:`\phi_S` is
|
72
|
-
|
73
|
-
.. math::
|
74
|
-
|
75
|
-
\phi_S(\vec{x}) = \begin{cases}
|
76
|
-
x_i \text{ if } S = \{i\} \\
|
77
|
-
\prod_{j \in S} (\pi - x_j) \text{ if } |S| > 1
|
78
|
-
\end{cases}.
|
79
|
-
|
80
|
-
The possible connections can be set using the ``entanglement`` and ``paulis`` arguments.
|
81
|
-
For example, for single-qubit :math:`Z` rotations and two-qubit :math:`YY` interactions
|
82
|
-
between all qubit pairs, we can set::
|
83
|
-
|
84
|
-
|
85
|
-
circuit = pauli_feature_map(..., paulis=["Z", "YY"], entanglement="full")
|
86
|
-
|
87
|
-
which will produce blocks of the form
|
88
|
-
|
89
|
-
.. code-block:: text
|
90
|
-
|
91
|
-
┌───┐┌─────────────┐┌──────────┐ ┌───────────┐
|
92
|
-
┤ H ├┤ P(2.0*x[0]) ├┤ RX(pi/2) ├──■──────────────────────────────────────■──┤ RX(-pi/2) ├
|
93
|
-
├───┤├─────────────┤├──────────┤┌─┴─┐┌────────────────────────────────┐┌─┴─┐├───────────┤
|
94
|
-
┤ H ├┤ P(2.0*x[1]) ├┤ RX(pi/2) ├┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├┤ RX(-pi/2) ├
|
95
|
-
└───┘└─────────────┘└──────────┘└───┘└────────────────────────────────┘└───┘└───────────┘
|
96
|
-
|
97
|
-
The circuit contains ``reps`` repetitions of this transformation.
|
98
|
-
|
99
|
-
Please refer to :func:`.z_feature_map` for the case of single-qubit Pauli-:math:`Z` rotations
|
100
|
-
and to :func:`.zz_feature_map` for the single- and two-qubit Pauli-:math:`Z` rotations.
|
101
|
-
|
102
|
-
Examples:
|
103
|
-
|
104
|
-
>>> prep = pauli_feature_map(2, reps=1, paulis=["ZZ"])
|
105
|
-
>>> print(prep)
|
106
|
-
┌───┐
|
107
|
-
q_0: ┤ H ├──■──────────────────────────────────────■──
|
108
|
-
├───┤┌─┴─┐┌────────────────────────────────┐┌─┴─┐
|
109
|
-
q_1: ┤ H ├┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├
|
110
|
-
└───┘└───┘└────────────────────────────────┘└───┘
|
111
|
-
|
112
|
-
>>> prep = pauli_feature_map(2, reps=1, paulis=["Z", "XX"])
|
113
|
-
>>> print(prep)
|
114
|
-
┌───┐┌─────────────┐┌───┐ ┌───┐
|
115
|
-
q_0: ┤ H ├┤ P(2.0*x[0]) ├┤ H ├──■──────────────────────────────────────■──┤ H ├
|
116
|
-
├───┤├─────────────┤├───┤┌─┴─┐┌────────────────────────────────┐┌─┴─┐├───┤
|
117
|
-
q_1: ┤ H ├┤ P(2.0*x[1]) ├┤ H ├┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├┤ H ├
|
118
|
-
└───┘└─────────────┘└───┘└───┘└────────────────────────────────┘└───┘└───┘
|
119
|
-
|
120
|
-
>>> prep = pauli_feature_map(2, reps=1, paulis=["ZY"])
|
121
|
-
>>> print(prep)
|
122
|
-
┌───┐┌──────────┐ ┌───────────┐
|
123
|
-
q_0: ┤ H ├┤ RX(pi/2) ├──■──────────────────────────────────────■──┤ RX(-pi/2) ├
|
124
|
-
├───┤└──────────┘┌─┴─┐┌────────────────────────────────┐┌─┴─┐└───────────┘
|
125
|
-
q_1: ┤ H ├────────────┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├─────────────
|
126
|
-
└───┘ └───┘└────────────────────────────────┘└───┘
|
127
|
-
|
128
|
-
>>> from qiskit.circuit.library import EfficientSU2
|
129
|
-
>>> prep = pauli_feature_map(3, reps=3, paulis=["Z", "YY", "ZXZ"])
|
130
|
-
>>> wavefunction = EfficientSU2(3)
|
131
|
-
>>> classifier = prep.compose(wavefunction)
|
132
|
-
>>> classifier.num_parameters
|
133
|
-
27
|
134
|
-
>>> classifier.count_ops()
|
135
|
-
OrderedDict([('cx', 39), ('rx', 36), ('u1', 21), ('h', 15), ('ry', 12), ('rz', 12)])
|
136
|
-
|
137
|
-
References:
|
138
|
-
|
139
|
-
[1] Havlicek et al. Supervised learning with quantum enhanced feature spaces,
|
140
|
-
`Nature 567, 209-212 (2019) <https://www.nature.com/articles/s41586-019-0980-2>`__.
|
141
|
-
"""
|
142
|
-
# create parameter vector used in the Pauli feature map
|
143
|
-
parameters = ParameterVector(parameter_prefix, feature_dimension)
|
144
|
-
|
145
|
-
# the Rust implementation expects the entanglement to be a str or list[tuple[int]] (or the
|
146
|
-
# callable to return these types), therefore we normalize the entanglement here
|
147
|
-
if callable(entanglement):
|
148
|
-
normalized = lambda offset: _normalize_entanglement(entanglement(offset))
|
149
|
-
else:
|
150
|
-
normalized = _normalize_entanglement(entanglement)
|
151
|
-
|
152
|
-
# construct from Rust
|
153
|
-
circuit = QuantumCircuit._from_circuit_data(
|
154
|
-
_fast_map(
|
155
|
-
feature_dimension,
|
156
|
-
paulis=paulis,
|
157
|
-
entanglement=normalized,
|
158
|
-
reps=reps,
|
159
|
-
parameters=parameters,
|
160
|
-
data_map_func=data_map_func,
|
161
|
-
alpha=alpha,
|
162
|
-
insert_barriers=insert_barriers,
|
163
|
-
),
|
164
|
-
name=name,
|
165
|
-
)
|
166
|
-
|
167
|
-
return circuit
|
168
|
-
|
169
|
-
|
170
|
-
def z_feature_map(
|
171
|
-
feature_dimension: int,
|
172
|
-
reps: int = 2,
|
173
|
-
entanglement: (
|
174
|
-
str | Sequence[Sequence[int]] | Callable[[int], str | Sequence[Sequence[int]]]
|
175
|
-
) = "full",
|
176
|
-
alpha: float = 2.0,
|
177
|
-
data_map_func: Callable[[Parameter], ParameterExpression] | None = None,
|
178
|
-
parameter_prefix: str = "x",
|
179
|
-
insert_barriers: bool = False,
|
180
|
-
name: str = "ZFeatureMap",
|
181
|
-
) -> QuantumCircuit:
|
182
|
-
"""The first order Pauli Z-evolution circuit.
|
183
|
-
|
184
|
-
On 3 qubits and with 2 repetitions the circuit is represented by:
|
185
|
-
|
186
|
-
.. code-block:: text
|
187
|
-
|
188
|
-
┌───┐┌─────────────┐┌───┐┌─────────────┐
|
189
|
-
┤ H ├┤ P(2.0*x[0]) ├┤ H ├┤ P(2.0*x[0]) ├
|
190
|
-
├───┤├─────────────┤├───┤├─────────────┤
|
191
|
-
┤ H ├┤ U(2.0*x[1]) ├┤ H ├┤ P(2.0*x[1]) ├
|
192
|
-
├───┤├─────────────┤├───┤├─────────────┤
|
193
|
-
┤ H ├┤ P(2.0*x[2]) ├┤ H ├┤ P(2.0*x[2]) ├
|
194
|
-
└───┘└─────────────┘└───┘└─────────────┘
|
195
|
-
|
196
|
-
This is a sub-class of :class:`~qiskit.circuit.library.PauliFeatureMap` where the Pauli
|
197
|
-
strings are fixed as `['Z']`. As a result the first order expansion will be a circuit without
|
198
|
-
entangling gates.
|
199
|
-
|
200
|
-
Examples:
|
201
|
-
|
202
|
-
>>> prep = z_feature_map(3, reps=3, insert_barriers=True)
|
203
|
-
>>> print(prep)
|
204
|
-
┌───┐ ░ ┌─────────────┐ ░ ┌───┐ ░ ┌─────────────┐ ░ ┌───┐ ░ ┌─────────────┐
|
205
|
-
q_0: ┤ H ├─░─┤ P(2.0*x[0]) ├─░─┤ H ├─░─┤ P(2.0*x[0]) ├─░─┤ H ├─░─┤ P(2.0*x[0]) ├
|
206
|
-
├───┤ ░ ├─────────────┤ ░ ├───┤ ░ ├─────────────┤ ░ ├───┤ ░ ├─────────────┤
|
207
|
-
q_1: ┤ H ├─░─┤ P(2.0*x[1]) ├─░─┤ H ├─░─┤ P(2.0*x[1]) ├─░─┤ H ├─░─┤ P(2.0*x[1]) ├
|
208
|
-
├───┤ ░ ├─────────────┤ ░ ├───┤ ░ ├─────────────┤ ░ ├───┤ ░ ├─────────────┤
|
209
|
-
q_2: ┤ H ├─░─┤ P(2.0*x[2]) ├─░─┤ H ├─░─┤ P(2.0*x[2]) ├─░─┤ H ├─░─┤ P(2.0*x[2]) ├
|
210
|
-
└───┘ ░ └─────────────┘ ░ └───┘ ░ └─────────────┘ ░ └───┘ ░ └─────────────┘
|
211
|
-
|
212
|
-
>>> data_map = lambda x: x[0]*x[0] + 1 # note: input is an array
|
213
|
-
>>> prep = z_feature_map(3, reps=1, data_map_func=data_map)
|
214
|
-
>>> print(prep)
|
215
|
-
┌───┐┌──────────────────────┐
|
216
|
-
q_0: ┤ H ├┤ P(2.0*x[0]**2 + 2.0) ├
|
217
|
-
├───┤├──────────────────────┤
|
218
|
-
q_1: ┤ H ├┤ P(2.0*x[1]**2 + 2.0) ├
|
219
|
-
├───┤├──────────────────────┤
|
220
|
-
q_2: ┤ H ├┤ P(2.0*x[2]**2 + 2.0) ├
|
221
|
-
└───┘└──────────────────────┘
|
222
|
-
|
223
|
-
>>> from qiskit.circuit.library import TwoLocal
|
224
|
-
>>> ry = TwoLocal(3, "ry", "cz", reps=1).decompose()
|
225
|
-
>>> classifier = z_feature_map(3, reps=1) + ry
|
226
|
-
>>> print(classifier)
|
227
|
-
┌───┐┌─────────────┐┌──────────┐ ┌──────────┐
|
228
|
-
q_0: ┤ H ├┤ P(2.0*x[0]) ├┤ RY(θ[0]) ├─■──■─┤ RY(θ[3]) ├────────────
|
229
|
-
├───┤├─────────────┤├──────────┤ │ │ └──────────┘┌──────────┐
|
230
|
-
q_1: ┤ H ├┤ P(2.0*x[1]) ├┤ RY(θ[1]) ├─■──┼──────■──────┤ RY(θ[4]) ├
|
231
|
-
├───┤├─────────────┤├──────────┤ │ │ ├──────────┤
|
232
|
-
q_2: ┤ H ├┤ P(2.0*x[2]) ├┤ RY(θ[2]) ├────■──────■──────┤ RY(θ[5]) ├
|
233
|
-
└───┘└─────────────┘└──────────┘ └──────────┘
|
234
|
-
|
235
|
-
"""
|
236
|
-
return pauli_feature_map(
|
237
|
-
feature_dimension=feature_dimension,
|
238
|
-
reps=reps,
|
239
|
-
entanglement=entanglement,
|
240
|
-
alpha=alpha,
|
241
|
-
paulis=["z"],
|
242
|
-
data_map_func=data_map_func,
|
243
|
-
parameter_prefix=parameter_prefix,
|
244
|
-
insert_barriers=insert_barriers,
|
245
|
-
name=name,
|
246
|
-
)
|
247
|
-
|
248
|
-
|
249
|
-
def zz_feature_map(
|
250
|
-
feature_dimension: int,
|
251
|
-
reps: int = 2,
|
252
|
-
entanglement: (
|
253
|
-
str | Sequence[Sequence[int]] | Callable[[int], str | Sequence[Sequence[int]]]
|
254
|
-
) = "full",
|
255
|
-
alpha: float = 2.0,
|
256
|
-
data_map_func: Callable[[Parameter], ParameterExpression] | None = None,
|
257
|
-
parameter_prefix: str = "x",
|
258
|
-
insert_barriers: bool = False,
|
259
|
-
name: str = "ZZFeatureMap",
|
260
|
-
) -> QuantumCircuit:
|
261
|
-
r"""Second-order Pauli-Z evolution circuit.
|
262
|
-
|
263
|
-
For 3 qubits and 1 repetition and linear entanglement the circuit is represented by:
|
264
|
-
|
265
|
-
.. code-block:: text
|
266
|
-
|
267
|
-
┌───┐┌────────────────┐
|
268
|
-
┤ H ├┤ P(2.0*φ(x[0])) ├──■───────────────────────────■───────────────────────────────────
|
269
|
-
├───┤├────────────────┤┌─┴─┐┌─────────────────────┐┌─┴─┐
|
270
|
-
┤ H ├┤ P(2.0*φ(x[1])) ├┤ X ├┤ P(2.0*φ(x[0],x[1])) ├┤ X ├──■───────────────────────────■──
|
271
|
-
├───┤├────────────────┤└───┘└─────────────────────┘└───┘┌─┴─┐┌─────────────────────┐┌─┴─┐
|
272
|
-
┤ H ├┤ P(2.0*φ(x[2])) ├─────────────────────────────────┤ X ├┤ P(2.0*φ(x[1],x[2])) ├┤ X ├
|
273
|
-
└───┘└────────────────┘ └───┘└─────────────────────┘└───┘
|
274
|
-
|
275
|
-
where :math:`\varphi` is a classical non-linear function, which defaults to :math:`\varphi(x) = x`
|
276
|
-
if and :math:`\varphi(x,y) = (\pi - x)(\pi - y)`.
|
277
|
-
|
278
|
-
Examples:
|
279
|
-
|
280
|
-
>>> from qiskit.circuit.library import ZZFeatureMap
|
281
|
-
>>> prep = zz_feature_map(2, reps=1)
|
282
|
-
>>> print(prep)
|
283
|
-
┌───┐┌─────────────┐
|
284
|
-
q_0: ┤ H ├┤ P(2.0*x[0]) ├──■──────────────────────────────────────■──
|
285
|
-
├───┤├─────────────┤┌─┴─┐┌────────────────────────────────┐┌─┴─┐
|
286
|
-
q_1: ┤ H ├┤ P(2.0*x[1]) ├┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├
|
287
|
-
└───┘└─────────────┘└───┘└────────────────────────────────┘└───┘
|
288
|
-
|
289
|
-
>>> from qiskit.circuit.library import EfficientSU2
|
290
|
-
>>> classifier = zz_feature_map(3) + EfficientSU2(3)
|
291
|
-
>>> classifier.num_parameters
|
292
|
-
15
|
293
|
-
>>> classifier.parameters # 'x' for the data preparation, 'θ' for the SU2 parameters
|
294
|
-
ParameterView([
|
295
|
-
ParameterVectorElement(x[0]), ParameterVectorElement(x[1]),
|
296
|
-
ParameterVectorElement(x[2]), ParameterVectorElement(θ[0]),
|
297
|
-
ParameterVectorElement(θ[1]), ParameterVectorElement(θ[2]),
|
298
|
-
ParameterVectorElement(θ[3]), ParameterVectorElement(θ[4]),
|
299
|
-
ParameterVectorElement(θ[5]), ParameterVectorElement(θ[6]),
|
300
|
-
ParameterVectorElement(θ[7]), ParameterVectorElement(θ[8]),
|
301
|
-
ParameterVectorElement(θ[9]), ParameterVectorElement(θ[10]),
|
302
|
-
ParameterVectorElement(θ[11]), ParameterVectorElement(θ[12]),
|
303
|
-
ParameterVectorElement(θ[13]), ParameterVectorElement(θ[14]),
|
304
|
-
ParameterVectorElement(θ[15]), ParameterVectorElement(θ[16]),
|
305
|
-
ParameterVectorElement(θ[17]), ParameterVectorElement(θ[18]),
|
306
|
-
ParameterVectorElement(θ[19]), ParameterVectorElement(θ[20]),
|
307
|
-
ParameterVectorElement(θ[21]), ParameterVectorElement(θ[22]),
|
308
|
-
ParameterVectorElement(θ[23])
|
309
|
-
])
|
310
|
-
"""
|
311
|
-
return pauli_feature_map(
|
312
|
-
feature_dimension=feature_dimension,
|
313
|
-
reps=reps,
|
314
|
-
entanglement=entanglement,
|
315
|
-
alpha=alpha,
|
316
|
-
paulis=["z", "zz"],
|
317
|
-
data_map_func=data_map_func,
|
318
|
-
parameter_prefix=parameter_prefix,
|
319
|
-
insert_barriers=insert_barriers,
|
320
|
-
name=name,
|
321
|
-
)
|
322
|
-
|
323
|
-
|
324
25
|
class PauliFeatureMap(NLocal):
|
325
26
|
r"""The Pauli Expansion circuit.
|
326
27
|
|
@@ -353,13 +54,13 @@ class PauliFeatureMap(NLocal):
|
|
353
54
|
|
354
55
|
which will produce blocks of the form
|
355
56
|
|
356
|
-
..
|
57
|
+
.. parsed-literal::
|
357
58
|
|
358
|
-
|
359
|
-
┤ H ├┤
|
360
|
-
|
361
|
-
┤ H ├┤
|
362
|
-
|
59
|
+
┌───┐┌──────────────┐┌──────────┐ ┌───────────┐
|
60
|
+
┤ H ├┤ U1(2.0*x[0]) ├┤ RX(pi/2) ├──■───────────────────────────────────────■──┤ RX(-pi/2) ├
|
61
|
+
├───┤├──────────────┤├──────────┤┌─┴─┐┌─────────────────────────────────┐┌─┴─┐├───────────┤
|
62
|
+
┤ H ├┤ U1(2.0*x[1]) ├┤ RX(pi/2) ├┤ X ├┤ U1(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├┤ RX(-pi/2) ├
|
63
|
+
└───┘└──────────────┘└──────────┘└───┘└─────────────────────────────────┘└───┘└───────────┘
|
363
64
|
|
364
65
|
The circuit contains ``reps`` repetitions of this transformation.
|
365
66
|
|
@@ -369,28 +70,28 @@ class PauliFeatureMap(NLocal):
|
|
369
70
|
Examples:
|
370
71
|
|
371
72
|
>>> prep = PauliFeatureMap(2, reps=1, paulis=['ZZ'])
|
372
|
-
>>> print(prep
|
73
|
+
>>> print(prep)
|
373
74
|
┌───┐
|
374
|
-
q_0: ┤ H
|
375
|
-
|
376
|
-
q_1: ┤ H ├┤ X ├┤
|
377
|
-
|
75
|
+
q_0: ┤ H ├──■───────────────────────────────────────■──
|
76
|
+
├───┤┌─┴─┐┌─────────────────────────────────┐┌─┴─┐
|
77
|
+
q_1: ┤ H ├┤ X ├┤ U1(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├
|
78
|
+
└───┘└───┘└─────────────────────────────────┘└───┘
|
378
79
|
|
379
80
|
>>> prep = PauliFeatureMap(2, reps=1, paulis=['Z', 'XX'])
|
380
|
-
>>> print(prep
|
381
|
-
|
382
|
-
q_0: ┤ H ├┤
|
383
|
-
|
384
|
-
q_1: ┤ H ├┤
|
385
|
-
|
81
|
+
>>> print(prep)
|
82
|
+
┌───┐┌──────────────┐┌───┐ ┌───┐
|
83
|
+
q_0: ┤ H ├┤ U1(2.0*x[0]) ├┤ H ├──■───────────────────────────────────────■──┤ H ├
|
84
|
+
├───┤├──────────────┤├───┤┌─┴─┐┌─────────────────────────────────┐┌─┴─┐├───┤
|
85
|
+
q_1: ┤ H ├┤ U1(2.0*x[1]) ├┤ H ├┤ X ├┤ U1(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├┤ H ├
|
86
|
+
└───┘└──────────────┘└───┘└───┘└─────────────────────────────────┘└───┘└───┘
|
386
87
|
|
387
88
|
>>> prep = PauliFeatureMap(2, reps=1, paulis=['ZY'])
|
388
|
-
>>> print(prep
|
389
|
-
┌───┐┌──────────┐
|
390
|
-
q_0: ┤ H ├┤ RX(pi/2)
|
391
|
-
|
392
|
-
q_1: ┤ H ├────────────┤ X ├┤
|
393
|
-
└───┘
|
89
|
+
>>> print(prep)
|
90
|
+
┌───┐┌──────────┐ ┌───────────┐
|
91
|
+
q_0: ┤ H ├┤ RX(pi/2) ├──■───────────────────────────────────────■──┤ RX(-pi/2) ├
|
92
|
+
├───┤└──────────┘┌─┴─┐┌─────────────────────────────────┐┌─┴─┐└───────────┘
|
93
|
+
q_1: ┤ H ├────────────┤ X ├┤ U1(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├─────────────
|
94
|
+
└───┘ └───┘└─────────────────────────────────┘└───┘
|
394
95
|
|
395
96
|
>>> from qiskit.circuit.library import EfficientSU2
|
396
97
|
>>> prep = PauliFeatureMap(3, reps=3, paulis=['Z', 'YY', 'ZXZ'])
|
@@ -403,18 +104,13 @@ class PauliFeatureMap(NLocal):
|
|
403
104
|
|
404
105
|
References:
|
405
106
|
|
107
|
+
|
108
|
+
|
406
109
|
[1] Havlicek et al. Supervised learning with quantum enhanced feature spaces,
|
407
110
|
`Nature 567, 209-212 (2019) <https://www.nature.com/articles/s41586-019-0980-2>`__.
|
111
|
+
|
408
112
|
"""
|
409
113
|
|
410
|
-
@deprecate_func(
|
411
|
-
since="1.3",
|
412
|
-
additional_msg=(
|
413
|
-
"Use the pauli_feature_map function as a replacement. Note that this will no longer "
|
414
|
-
"return a BlueprintCircuit, but just a plain QuantumCircuit."
|
415
|
-
),
|
416
|
-
pending=True,
|
417
|
-
)
|
418
114
|
def __init__(
|
419
115
|
self,
|
420
116
|
feature_dimension: Optional[int] = None,
|
@@ -465,7 +161,6 @@ class PauliFeatureMap(NLocal):
|
|
465
161
|
name=name,
|
466
162
|
)
|
467
163
|
|
468
|
-
self._prefix = parameter_prefix
|
469
164
|
self._data_map_func = data_map_func or self_product
|
470
165
|
self._paulis = paulis or ["Z", "ZZ"]
|
471
166
|
self._alpha = alpha
|
@@ -522,11 +217,6 @@ class PauliFeatureMap(NLocal):
|
|
522
217
|
|
523
218
|
@property
|
524
219
|
def entanglement_blocks(self):
|
525
|
-
"""The blocks in the entanglement layers.
|
526
|
-
|
527
|
-
Returns:
|
528
|
-
The blocks in the entanglement layers.
|
529
|
-
"""
|
530
220
|
return [self.pauli_block(pauli) for pauli in self._paulis]
|
531
221
|
|
532
222
|
@entanglement_blocks.setter
|
@@ -585,10 +275,7 @@ class PauliFeatureMap(NLocal):
|
|
585
275
|
if pauli == "X":
|
586
276
|
circuit.h(i)
|
587
277
|
elif pauli == "Y":
|
588
|
-
if inverse
|
589
|
-
circuit.sxdg(i)
|
590
|
-
else:
|
591
|
-
circuit.sx(i)
|
278
|
+
circuit.rx(-np.pi / 2 if inverse else np.pi / 2, i)
|
592
279
|
|
593
280
|
def cx_chain(circuit, inverse=False):
|
594
281
|
num_cx = len(indices) - 1
|
@@ -14,7 +14,6 @@
|
|
14
14
|
|
15
15
|
from typing import Callable, Optional
|
16
16
|
import numpy as np
|
17
|
-
from qiskit.utils.deprecation import deprecate_func
|
18
17
|
|
19
18
|
from .pauli_feature_map import PauliFeatureMap
|
20
19
|
|
@@ -24,15 +23,15 @@ class ZFeatureMap(PauliFeatureMap):
|
|
24
23
|
|
25
24
|
On 3 qubits and with 2 repetitions the circuit is represented by:
|
26
25
|
|
27
|
-
..
|
26
|
+
.. parsed-literal::
|
28
27
|
|
29
|
-
|
30
|
-
┤ H ├┤
|
31
|
-
|
32
|
-
┤ H ├┤
|
33
|
-
|
34
|
-
┤ H ├┤
|
35
|
-
|
28
|
+
┌───┐┌──────────────┐┌───┐┌──────────────┐
|
29
|
+
┤ H ├┤ U1(2.0*x[0]) ├┤ H ├┤ U1(2.0*x[0]) ├
|
30
|
+
├───┤├──────────────┤├───┤├──────────────┤
|
31
|
+
┤ H ├┤ U1(2.0*x[1]) ├┤ H ├┤ U1(2.0*x[1]) ├
|
32
|
+
├───┤├──────────────┤├───┤├──────────────┤
|
33
|
+
┤ H ├┤ U1(2.0*x[2]) ├┤ H ├┤ U1(2.0*x[2]) ├
|
34
|
+
└───┘└──────────────┘└───┘└──────────────┘
|
36
35
|
|
37
36
|
This is a sub-class of :class:`~qiskit.circuit.library.PauliFeatureMap` where the Pauli
|
38
37
|
strings are fixed as `['Z']`. As a result the first order expansion will be a circuit without
|
@@ -41,48 +40,38 @@ class ZFeatureMap(PauliFeatureMap):
|
|
41
40
|
Examples:
|
42
41
|
|
43
42
|
>>> prep = ZFeatureMap(3, reps=3, insert_barriers=True)
|
44
|
-
>>> print(prep
|
45
|
-
┌───┐ ░
|
46
|
-
q_0: ┤ H ├─░─┤
|
47
|
-
├───┤ ░
|
48
|
-
q_1: ┤ H ├─░─┤
|
49
|
-
├───┤ ░
|
50
|
-
q_2: ┤ H ├─░─┤
|
51
|
-
└───┘ ░
|
43
|
+
>>> print(prep)
|
44
|
+
┌───┐ ░ ┌──────────────┐ ░ ┌───┐ ░ ┌──────────────┐ ░ ┌───┐ ░ ┌──────────────┐
|
45
|
+
q_0: ┤ H ├─░─┤ U1(2.0*x[0]) ├─░─┤ H ├─░─┤ U1(2.0*x[0]) ├─░─┤ H ├─░─┤ U1(2.0*x[0]) ├
|
46
|
+
├───┤ ░ ├──────────────┤ ░ ├───┤ ░ ├──────────────┤ ░ ├───┤ ░ ├──────────────┤
|
47
|
+
q_1: ┤ H ├─░─┤ U1(2.0*x[1]) ├─░─┤ H ├─░─┤ U1(2.0*x[1]) ├─░─┤ H ├─░─┤ U1(2.0*x[1]) ├
|
48
|
+
├───┤ ░ ├──────────────┤ ░ ├───┤ ░ ├──────────────┤ ░ ├───┤ ░ ├──────────────┤
|
49
|
+
q_2: ┤ H ├─░─┤ U1(2.0*x[2]) ├─░─┤ H ├─░─┤ U1(2.0*x[2]) ├─░─┤ H ├─░─┤ U1(2.0*x[2]) ├
|
50
|
+
└───┘ ░ └──────────────┘ ░ └───┘ ░ └──────────────┘ ░ └───┘ ░ └──────────────┘
|
52
51
|
|
53
52
|
>>> data_map = lambda x: x[0]*x[0] + 1 # note: input is an array
|
54
53
|
>>> prep = ZFeatureMap(3, reps=1, data_map_func=data_map)
|
55
|
-
>>> print(prep
|
56
|
-
|
57
|
-
q_0: ┤ H ├┤
|
58
|
-
|
59
|
-
q_1: ┤ H ├┤
|
60
|
-
|
61
|
-
q_2: ┤ H ├┤
|
62
|
-
|
63
|
-
|
64
|
-
>>>
|
65
|
-
>>>
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
q_2: ┤ H ├┤ P(2.0*x[2]) ├┤ RY(θ[2]) ├────■──────■──────┤ RY(θ[5]) ├
|
74
|
-
└───┘└─────────────┘└──────────┘ └──────────┘
|
54
|
+
>>> print(prep)
|
55
|
+
┌───┐┌───────────────────────┐
|
56
|
+
q_0: ┤ H ├┤ U1(2.0*x[0]**2 + 2.0) ├
|
57
|
+
├───┤├───────────────────────┤
|
58
|
+
q_1: ┤ H ├┤ U1(2.0*x[1]**2 + 2.0) ├
|
59
|
+
├───┤├───────────────────────┤
|
60
|
+
q_2: ┤ H ├┤ U1(2.0*x[2]**2 + 2.0) ├
|
61
|
+
└───┘└───────────────────────┘
|
62
|
+
|
63
|
+
>>> classifier = ZFeatureMap(3, reps=1) + RY(3, reps=1)
|
64
|
+
>>> print(classifier)
|
65
|
+
┌───┐┌──────────────┐┌──────────┐ ┌──────────┐
|
66
|
+
q_0: ┤ H ├┤ U1(2.0*x[0]) ├┤ RY(θ[0]) ├─■──■─┤ RY(θ[3]) ├────────────
|
67
|
+
├───┤├──────────────┤├──────────┤ │ │ └──────────┘┌──────────┐
|
68
|
+
q_1: ┤ H ├┤ U1(2.0*x[1]) ├┤ RY(θ[1]) ├─■──┼──────■──────┤ RY(θ[4]) ├
|
69
|
+
├───┤├──────────────┤├──────────┤ │ │ ├──────────┤
|
70
|
+
q_2: ┤ H ├┤ U1(2.0*x[2]) ├┤ RY(θ[2]) ├────■──────■──────┤ RY(θ[5]) ├
|
71
|
+
└───┘└──────────────┘└──────────┘ └──────────┘
|
75
72
|
|
76
73
|
"""
|
77
74
|
|
78
|
-
@deprecate_func(
|
79
|
-
since="1.3",
|
80
|
-
additional_msg=(
|
81
|
-
"Use the z_feature_map function as a replacement. Note that this will no longer "
|
82
|
-
"return a BlueprintCircuit, but just a plain QuantumCircuit."
|
83
|
-
),
|
84
|
-
pending=True,
|
85
|
-
)
|
86
75
|
def __init__(
|
87
76
|
self,
|
88
77
|
feature_dimension: int,
|