qiskit 1.3.0__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 -0
- qiskit/__init__.py +146 -0
- qiskit/_accelerate.pyd +0 -0
- qiskit/_numpy_compat.py +73 -0
- qiskit/assembler/__init__.py +42 -0
- qiskit/assembler/assemble_circuits.py +451 -0
- qiskit/assembler/assemble_schedules.py +367 -0
- qiskit/assembler/disassemble.py +310 -0
- qiskit/assembler/run_config.py +77 -0
- qiskit/circuit/__init__.py +1313 -0
- qiskit/circuit/_classical_resource_map.py +148 -0
- qiskit/circuit/_standard_gates_commutations.py +3849 -0
- qiskit/circuit/_utils.py +167 -0
- qiskit/circuit/add_control.py +274 -0
- qiskit/circuit/annotated_operation.py +279 -0
- qiskit/circuit/barrier.py +50 -0
- qiskit/circuit/bit.py +94 -0
- qiskit/circuit/classical/__init__.py +41 -0
- qiskit/circuit/classical/expr/__init__.py +238 -0
- qiskit/circuit/classical/expr/constructors.py +556 -0
- qiskit/circuit/classical/expr/expr.py +397 -0
- qiskit/circuit/classical/expr/visitors.py +300 -0
- qiskit/circuit/classical/types/__init__.py +109 -0
- qiskit/circuit/classical/types/ordering.py +222 -0
- qiskit/circuit/classical/types/types.py +117 -0
- qiskit/circuit/classicalfunction/__init__.py +140 -0
- qiskit/circuit/classicalfunction/boolean_expression.py +129 -0
- qiskit/circuit/classicalfunction/classical_element.py +54 -0
- qiskit/circuit/classicalfunction/classical_function_visitor.py +155 -0
- qiskit/circuit/classicalfunction/classicalfunction.py +173 -0
- qiskit/circuit/classicalfunction/exceptions.py +35 -0
- qiskit/circuit/classicalfunction/types.py +18 -0
- qiskit/circuit/classicalfunction/utils.py +91 -0
- qiskit/circuit/classicalregister.py +57 -0
- qiskit/circuit/commutation_checker.py +106 -0
- qiskit/circuit/commutation_library.py +20 -0
- qiskit/circuit/controlflow/__init__.py +28 -0
- qiskit/circuit/controlflow/_builder_utils.py +207 -0
- qiskit/circuit/controlflow/break_loop.py +56 -0
- qiskit/circuit/controlflow/builder.py +691 -0
- qiskit/circuit/controlflow/continue_loop.py +58 -0
- qiskit/circuit/controlflow/control_flow.py +84 -0
- qiskit/circuit/controlflow/for_loop.py +217 -0
- qiskit/circuit/controlflow/if_else.py +511 -0
- qiskit/circuit/controlflow/switch_case.py +417 -0
- qiskit/circuit/controlflow/while_loop.py +171 -0
- qiskit/circuit/controlledgate.py +274 -0
- qiskit/circuit/delay.py +123 -0
- qiskit/circuit/duration.py +95 -0
- qiskit/circuit/equivalence.py +94 -0
- qiskit/circuit/equivalence_library.py +18 -0
- qiskit/circuit/exceptions.py +19 -0
- qiskit/circuit/gate.py +263 -0
- qiskit/circuit/instruction.py +697 -0
- qiskit/circuit/instructionset.py +179 -0
- qiskit/circuit/library/__init__.py +668 -0
- qiskit/circuit/library/arithmetic/__init__.py +34 -0
- qiskit/circuit/library/arithmetic/adders/__init__.py +18 -0
- qiskit/circuit/library/arithmetic/adders/adder.py +210 -0
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +123 -0
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +129 -0
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +95 -0
- qiskit/circuit/library/arithmetic/exact_reciprocal.py +88 -0
- qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
- qiskit/circuit/library/arithmetic/integer_comparator.py +243 -0
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +196 -0
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +189 -0
- qiskit/circuit/library/arithmetic/multipliers/__init__.py +17 -0
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +145 -0
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +192 -0
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +108 -0
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +353 -0
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +277 -0
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +317 -0
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +335 -0
- qiskit/circuit/library/arithmetic/quadratic_form.py +198 -0
- qiskit/circuit/library/arithmetic/weighted_adder.py +337 -0
- qiskit/circuit/library/basis_change/__init__.py +15 -0
- qiskit/circuit/library/basis_change/qft.py +313 -0
- qiskit/circuit/library/blueprintcircuit.py +280 -0
- qiskit/circuit/library/boolean_logic/__init__.py +18 -0
- qiskit/circuit/library/boolean_logic/inner_product.py +155 -0
- qiskit/circuit/library/boolean_logic/quantum_and.py +200 -0
- qiskit/circuit/library/boolean_logic/quantum_or.py +202 -0
- qiskit/circuit/library/boolean_logic/quantum_xor.py +165 -0
- qiskit/circuit/library/data_preparation/__init__.py +57 -0
- qiskit/circuit/library/data_preparation/_z_feature_map.py +115 -0
- qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
- qiskit/circuit/library/data_preparation/initializer.py +107 -0
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +656 -0
- qiskit/circuit/library/data_preparation/state_preparation.py +336 -0
- qiskit/circuit/library/fourier_checking.py +158 -0
- qiskit/circuit/library/generalized_gates/__init__.py +30 -0
- qiskit/circuit/library/generalized_gates/diagonal.py +159 -0
- qiskit/circuit/library/generalized_gates/gms.py +174 -0
- qiskit/circuit/library/generalized_gates/gr.py +215 -0
- qiskit/circuit/library/generalized_gates/isometry.py +370 -0
- qiskit/circuit/library/generalized_gates/linear_function.py +318 -0
- qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +143 -0
- qiskit/circuit/library/generalized_gates/mcmt.py +316 -0
- qiskit/circuit/library/generalized_gates/pauli.py +85 -0
- qiskit/circuit/library/generalized_gates/permutation.py +194 -0
- qiskit/circuit/library/generalized_gates/rv.py +96 -0
- qiskit/circuit/library/generalized_gates/uc.py +213 -0
- qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +164 -0
- qiskit/circuit/library/generalized_gates/ucrx.py +32 -0
- qiskit/circuit/library/generalized_gates/ucry.py +32 -0
- qiskit/circuit/library/generalized_gates/ucrz.py +32 -0
- qiskit/circuit/library/generalized_gates/unitary.py +215 -0
- qiskit/circuit/library/graph_state.py +169 -0
- qiskit/circuit/library/grover_operator.py +579 -0
- qiskit/circuit/library/hamiltonian_gate.py +142 -0
- qiskit/circuit/library/hidden_linear_function.py +161 -0
- qiskit/circuit/library/iqp.py +175 -0
- qiskit/circuit/library/n_local/__init__.py +45 -0
- qiskit/circuit/library/n_local/efficient_su2.py +277 -0
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +515 -0
- qiskit/circuit/library/n_local/excitation_preserving.py +297 -0
- qiskit/circuit/library/n_local/n_local.py +1472 -0
- qiskit/circuit/library/n_local/pauli_two_design.py +243 -0
- qiskit/circuit/library/n_local/qaoa_ansatz.py +366 -0
- qiskit/circuit/library/n_local/real_amplitudes.py +306 -0
- qiskit/circuit/library/n_local/two_local.py +289 -0
- qiskit/circuit/library/overlap.py +182 -0
- qiskit/circuit/library/pauli_evolution.py +186 -0
- qiskit/circuit/library/phase_estimation.py +175 -0
- qiskit/circuit/library/phase_oracle.py +153 -0
- qiskit/circuit/library/quantum_volume.py +167 -0
- qiskit/circuit/library/standard_gates/__init__.py +142 -0
- qiskit/circuit/library/standard_gates/dcx.py +78 -0
- qiskit/circuit/library/standard_gates/ecr.py +130 -0
- qiskit/circuit/library/standard_gates/equivalence_library.py +1800 -0
- qiskit/circuit/library/standard_gates/global_phase.py +85 -0
- qiskit/circuit/library/standard_gates/h.py +258 -0
- qiskit/circuit/library/standard_gates/i.py +76 -0
- qiskit/circuit/library/standard_gates/iswap.py +134 -0
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +405 -0
- qiskit/circuit/library/standard_gates/p.py +441 -0
- qiskit/circuit/library/standard_gates/r.py +117 -0
- qiskit/circuit/library/standard_gates/rx.py +303 -0
- qiskit/circuit/library/standard_gates/rxx.py +183 -0
- qiskit/circuit/library/standard_gates/ry.py +298 -0
- qiskit/circuit/library/standard_gates/ryy.py +183 -0
- qiskit/circuit/library/standard_gates/rz.py +319 -0
- qiskit/circuit/library/standard_gates/rzx.py +229 -0
- qiskit/circuit/library/standard_gates/rzz.py +196 -0
- qiskit/circuit/library/standard_gates/s.py +428 -0
- qiskit/circuit/library/standard_gates/swap.py +288 -0
- qiskit/circuit/library/standard_gates/sx.py +315 -0
- qiskit/circuit/library/standard_gates/t.py +179 -0
- qiskit/circuit/library/standard_gates/u.py +403 -0
- qiskit/circuit/library/standard_gates/u1.py +501 -0
- qiskit/circuit/library/standard_gates/u2.py +149 -0
- qiskit/circuit/library/standard_gates/u3.py +436 -0
- qiskit/circuit/library/standard_gates/x.py +1529 -0
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +235 -0
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +239 -0
- qiskit/circuit/library/standard_gates/y.py +262 -0
- qiskit/circuit/library/standard_gates/z.py +348 -0
- qiskit/circuit/library/templates/__init__.py +92 -0
- qiskit/circuit/library/templates/clifford/__init__.py +33 -0
- qiskit/circuit/library/templates/clifford/clifford_2_1.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +35 -0
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +35 -0
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +38 -0
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +38 -0
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +38 -0
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +42 -0
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +42 -0
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +41 -0
- qiskit/circuit/library/templates/nct/__init__.py +67 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +34 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +35 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +37 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +45 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +44 -0
- qiskit/circuit/library/templates/rzx/__init__.py +25 -0
- qiskit/circuit/library/templates/rzx/rzx_cy.py +47 -0
- qiskit/circuit/library/templates/rzx/rzx_xz.py +54 -0
- qiskit/circuit/library/templates/rzx/rzx_yz.py +45 -0
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +69 -0
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +59 -0
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +59 -0
- qiskit/circuit/measure.py +44 -0
- qiskit/circuit/operation.py +67 -0
- qiskit/circuit/parameter.py +178 -0
- qiskit/circuit/parameterexpression.py +692 -0
- qiskit/circuit/parametertable.py +119 -0
- qiskit/circuit/parametervector.py +120 -0
- qiskit/circuit/quantumcircuit.py +6829 -0
- qiskit/circuit/quantumcircuitdata.py +136 -0
- qiskit/circuit/quantumregister.py +75 -0
- qiskit/circuit/random/__init__.py +15 -0
- qiskit/circuit/random/utils.py +358 -0
- qiskit/circuit/register.py +233 -0
- qiskit/circuit/reset.py +34 -0
- qiskit/circuit/singleton.py +606 -0
- qiskit/circuit/store.py +97 -0
- qiskit/circuit/tools/__init__.py +16 -0
- qiskit/circuit/tools/pi_check.py +190 -0
- qiskit/circuit/twirling.py +145 -0
- qiskit/compiler/__init__.py +33 -0
- qiskit/compiler/assembler.py +681 -0
- qiskit/compiler/scheduler.py +109 -0
- qiskit/compiler/sequencer.py +71 -0
- qiskit/compiler/transpiler.py +533 -0
- qiskit/converters/__init__.py +74 -0
- qiskit/converters/circuit_to_dag.py +78 -0
- qiskit/converters/circuit_to_dagdependency.py +51 -0
- qiskit/converters/circuit_to_dagdependency_v2.py +47 -0
- qiskit/converters/circuit_to_gate.py +107 -0
- qiskit/converters/circuit_to_instruction.py +155 -0
- qiskit/converters/dag_to_circuit.py +79 -0
- qiskit/converters/dag_to_dagdependency.py +55 -0
- qiskit/converters/dag_to_dagdependency_v2.py +44 -0
- qiskit/converters/dagdependency_to_circuit.py +46 -0
- qiskit/converters/dagdependency_to_dag.py +54 -0
- qiskit/dagcircuit/__init__.py +44 -0
- qiskit/dagcircuit/collect_blocks.py +391 -0
- qiskit/dagcircuit/dagcircuit.py +24 -0
- qiskit/dagcircuit/dagdependency.py +646 -0
- qiskit/dagcircuit/dagdependency_v2.py +641 -0
- qiskit/dagcircuit/dagdepnode.py +160 -0
- qiskit/dagcircuit/dagnode.py +176 -0
- qiskit/dagcircuit/exceptions.py +42 -0
- qiskit/exceptions.py +153 -0
- qiskit/passmanager/__init__.py +240 -0
- qiskit/passmanager/base_tasks.py +230 -0
- qiskit/passmanager/compilation_status.py +74 -0
- qiskit/passmanager/exceptions.py +19 -0
- qiskit/passmanager/flow_controllers.py +116 -0
- qiskit/passmanager/passmanager.py +333 -0
- qiskit/primitives/__init__.py +481 -0
- qiskit/primitives/backend_estimator.py +486 -0
- qiskit/primitives/backend_estimator_v2.py +434 -0
- qiskit/primitives/backend_sampler.py +222 -0
- qiskit/primitives/backend_sampler_v2.py +339 -0
- qiskit/primitives/base/__init__.py +20 -0
- qiskit/primitives/base/base_estimator.py +252 -0
- qiskit/primitives/base/base_primitive.py +45 -0
- qiskit/primitives/base/base_primitive_job.py +78 -0
- qiskit/primitives/base/base_result.py +65 -0
- qiskit/primitives/base/base_sampler.py +204 -0
- qiskit/primitives/base/estimator_result.py +46 -0
- qiskit/primitives/base/sampler_result.py +45 -0
- qiskit/primitives/base/validation.py +231 -0
- qiskit/primitives/containers/__init__.py +26 -0
- qiskit/primitives/containers/bindings_array.py +389 -0
- qiskit/primitives/containers/bit_array.py +741 -0
- qiskit/primitives/containers/data_bin.py +173 -0
- qiskit/primitives/containers/estimator_pub.py +222 -0
- qiskit/primitives/containers/object_array.py +94 -0
- qiskit/primitives/containers/observables_array.py +279 -0
- qiskit/primitives/containers/primitive_result.py +53 -0
- qiskit/primitives/containers/pub_result.py +51 -0
- qiskit/primitives/containers/sampler_pub.py +193 -0
- qiskit/primitives/containers/sampler_pub_result.py +74 -0
- qiskit/primitives/containers/shape.py +129 -0
- qiskit/primitives/estimator.py +172 -0
- qiskit/primitives/primitive_job.py +81 -0
- qiskit/primitives/sampler.py +162 -0
- qiskit/primitives/statevector_estimator.py +174 -0
- qiskit/primitives/statevector_sampler.py +292 -0
- qiskit/primitives/utils.py +247 -0
- qiskit/providers/__init__.py +803 -0
- qiskit/providers/backend.py +667 -0
- qiskit/providers/backend_compat.py +472 -0
- qiskit/providers/basic_provider/__init__.py +45 -0
- qiskit/providers/basic_provider/basic_provider.py +101 -0
- qiskit/providers/basic_provider/basic_provider_job.py +65 -0
- qiskit/providers/basic_provider/basic_provider_tools.py +218 -0
- qiskit/providers/basic_provider/basic_simulator.py +821 -0
- qiskit/providers/basic_provider/exceptions.py +30 -0
- qiskit/providers/exceptions.py +45 -0
- qiskit/providers/fake_provider/__init__.py +105 -0
- qiskit/providers/fake_provider/backends_v1/__init__.py +22 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +37 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +43 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +50 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +41 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +44 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +1 -0
- qiskit/providers/fake_provider/fake_1q.py +91 -0
- qiskit/providers/fake_provider/fake_backend.py +165 -0
- qiskit/providers/fake_provider/fake_openpulse_2q.py +391 -0
- qiskit/providers/fake_provider/fake_openpulse_3q.py +340 -0
- qiskit/providers/fake_provider/fake_pulse_backend.py +49 -0
- qiskit/providers/fake_provider/fake_qasm_backend.py +77 -0
- qiskit/providers/fake_provider/generic_backend_v2.py +1035 -0
- qiskit/providers/fake_provider/utils/__init__.py +15 -0
- qiskit/providers/fake_provider/utils/backend_converter.py +150 -0
- qiskit/providers/fake_provider/utils/json_decoder.py +109 -0
- qiskit/providers/job.py +147 -0
- qiskit/providers/jobstatus.py +30 -0
- qiskit/providers/models/__init__.py +89 -0
- qiskit/providers/models/backendconfiguration.py +1040 -0
- qiskit/providers/models/backendproperties.py +517 -0
- qiskit/providers/models/backendstatus.py +94 -0
- qiskit/providers/models/jobstatus.py +66 -0
- qiskit/providers/models/pulsedefaults.py +305 -0
- qiskit/providers/options.py +273 -0
- qiskit/providers/provider.py +95 -0
- qiskit/providers/providerutils.py +110 -0
- qiskit/pulse/__init__.py +158 -0
- qiskit/pulse/builder.py +2254 -0
- qiskit/pulse/calibration_entries.py +381 -0
- qiskit/pulse/channels.py +227 -0
- qiskit/pulse/configuration.py +245 -0
- qiskit/pulse/exceptions.py +45 -0
- qiskit/pulse/filters.py +309 -0
- qiskit/pulse/instruction_schedule_map.py +424 -0
- qiskit/pulse/instructions/__init__.py +67 -0
- qiskit/pulse/instructions/acquire.py +150 -0
- qiskit/pulse/instructions/delay.py +71 -0
- qiskit/pulse/instructions/directives.py +154 -0
- qiskit/pulse/instructions/frequency.py +135 -0
- qiskit/pulse/instructions/instruction.py +270 -0
- qiskit/pulse/instructions/phase.py +152 -0
- qiskit/pulse/instructions/play.py +99 -0
- qiskit/pulse/instructions/reference.py +100 -0
- qiskit/pulse/instructions/snapshot.py +82 -0
- qiskit/pulse/library/__init__.py +97 -0
- qiskit/pulse/library/continuous.py +430 -0
- qiskit/pulse/library/pulse.py +148 -0
- qiskit/pulse/library/samplers/__init__.py +15 -0
- qiskit/pulse/library/samplers/decorators.py +295 -0
- qiskit/pulse/library/samplers/strategies.py +71 -0
- qiskit/pulse/library/symbolic_pulses.py +1988 -0
- qiskit/pulse/library/waveform.py +136 -0
- qiskit/pulse/macros.py +262 -0
- qiskit/pulse/parameter_manager.py +445 -0
- qiskit/pulse/parser.py +314 -0
- qiskit/pulse/reference_manager.py +58 -0
- qiskit/pulse/schedule.py +1854 -0
- qiskit/pulse/transforms/__init__.py +106 -0
- qiskit/pulse/transforms/alignments.py +406 -0
- qiskit/pulse/transforms/base_transforms.py +71 -0
- qiskit/pulse/transforms/canonicalization.py +498 -0
- qiskit/pulse/transforms/dag.py +122 -0
- qiskit/pulse/utils.py +149 -0
- qiskit/qasm/libs/dummy/stdgates.inc +75 -0
- qiskit/qasm/libs/qelib1.inc +266 -0
- qiskit/qasm/libs/stdgates.inc +82 -0
- qiskit/qasm2/__init__.py +654 -0
- qiskit/qasm2/exceptions.py +27 -0
- qiskit/qasm2/export.py +372 -0
- qiskit/qasm2/parse.py +452 -0
- qiskit/qasm3/__init__.py +367 -0
- qiskit/qasm3/ast.py +738 -0
- qiskit/qasm3/exceptions.py +27 -0
- qiskit/qasm3/experimental.py +70 -0
- qiskit/qasm3/exporter.py +1299 -0
- qiskit/qasm3/printer.py +577 -0
- qiskit/qobj/__init__.py +75 -0
- qiskit/qobj/common.py +81 -0
- qiskit/qobj/converters/__init__.py +18 -0
- qiskit/qobj/converters/lo_config.py +177 -0
- qiskit/qobj/converters/pulse_instruction.py +897 -0
- qiskit/qobj/pulse_qobj.py +709 -0
- qiskit/qobj/qasm_qobj.py +708 -0
- qiskit/qobj/utils.py +46 -0
- qiskit/qpy/__init__.py +1822 -0
- qiskit/qpy/binary_io/__init__.py +36 -0
- qiskit/qpy/binary_io/circuits.py +1475 -0
- qiskit/qpy/binary_io/schedules.py +635 -0
- qiskit/qpy/binary_io/value.py +1025 -0
- qiskit/qpy/common.py +350 -0
- qiskit/qpy/exceptions.py +53 -0
- qiskit/qpy/formats.py +401 -0
- qiskit/qpy/interface.py +377 -0
- qiskit/qpy/type_keys.py +572 -0
- qiskit/quantum_info/__init__.py +162 -0
- qiskit/quantum_info/analysis/__init__.py +17 -0
- qiskit/quantum_info/analysis/average.py +47 -0
- qiskit/quantum_info/analysis/distance.py +102 -0
- qiskit/quantum_info/analysis/make_observable.py +44 -0
- qiskit/quantum_info/analysis/z2_symmetries.py +484 -0
- qiskit/quantum_info/operators/__init__.py +28 -0
- qiskit/quantum_info/operators/base_operator.py +145 -0
- qiskit/quantum_info/operators/channel/__init__.py +29 -0
- qiskit/quantum_info/operators/channel/chi.py +191 -0
- qiskit/quantum_info/operators/channel/choi.py +218 -0
- qiskit/quantum_info/operators/channel/kraus.py +337 -0
- qiskit/quantum_info/operators/channel/ptm.py +204 -0
- qiskit/quantum_info/operators/channel/quantum_channel.py +348 -0
- qiskit/quantum_info/operators/channel/stinespring.py +296 -0
- qiskit/quantum_info/operators/channel/superop.py +377 -0
- qiskit/quantum_info/operators/channel/transformations.py +475 -0
- qiskit/quantum_info/operators/custom_iterator.py +48 -0
- qiskit/quantum_info/operators/dihedral/__init__.py +18 -0
- qiskit/quantum_info/operators/dihedral/dihedral.py +509 -0
- qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +216 -0
- qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
- qiskit/quantum_info/operators/dihedral/random.py +64 -0
- qiskit/quantum_info/operators/linear_op.py +25 -0
- qiskit/quantum_info/operators/measures.py +418 -0
- qiskit/quantum_info/operators/mixins/__init__.py +52 -0
- qiskit/quantum_info/operators/mixins/adjoint.py +52 -0
- qiskit/quantum_info/operators/mixins/group.py +171 -0
- qiskit/quantum_info/operators/mixins/linear.py +84 -0
- qiskit/quantum_info/operators/mixins/multiply.py +62 -0
- qiskit/quantum_info/operators/mixins/tolerances.py +72 -0
- qiskit/quantum_info/operators/op_shape.py +525 -0
- qiskit/quantum_info/operators/operator.py +865 -0
- qiskit/quantum_info/operators/operator_utils.py +76 -0
- qiskit/quantum_info/operators/predicates.py +183 -0
- qiskit/quantum_info/operators/random.py +154 -0
- qiskit/quantum_info/operators/scalar_op.py +254 -0
- qiskit/quantum_info/operators/symplectic/__init__.py +23 -0
- qiskit/quantum_info/operators/symplectic/base_pauli.py +719 -0
- qiskit/quantum_info/operators/symplectic/clifford.py +1030 -0
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
- qiskit/quantum_info/operators/symplectic/pauli.py +753 -0
- qiskit/quantum_info/operators/symplectic/pauli_list.py +1230 -0
- qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
- qiskit/quantum_info/operators/symplectic/random.py +117 -0
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1196 -0
- qiskit/quantum_info/operators/utils/__init__.py +20 -0
- qiskit/quantum_info/operators/utils/anti_commutator.py +36 -0
- qiskit/quantum_info/operators/utils/commutator.py +36 -0
- qiskit/quantum_info/operators/utils/double_commutator.py +76 -0
- qiskit/quantum_info/quaternion.py +156 -0
- qiskit/quantum_info/random.py +26 -0
- qiskit/quantum_info/states/__init__.py +28 -0
- qiskit/quantum_info/states/densitymatrix.py +845 -0
- qiskit/quantum_info/states/measures.py +288 -0
- qiskit/quantum_info/states/quantum_state.py +503 -0
- qiskit/quantum_info/states/random.py +157 -0
- qiskit/quantum_info/states/stabilizerstate.py +773 -0
- qiskit/quantum_info/states/statevector.py +958 -0
- qiskit/quantum_info/states/utils.py +247 -0
- qiskit/result/__init__.py +73 -0
- qiskit/result/counts.py +189 -0
- qiskit/result/distributions/__init__.py +17 -0
- qiskit/result/distributions/probability.py +100 -0
- qiskit/result/distributions/quasi.py +154 -0
- qiskit/result/exceptions.py +40 -0
- qiskit/result/mitigation/__init__.py +13 -0
- qiskit/result/mitigation/base_readout_mitigator.py +79 -0
- qiskit/result/mitigation/correlated_readout_mitigator.py +277 -0
- qiskit/result/mitigation/local_readout_mitigator.py +328 -0
- qiskit/result/mitigation/utils.py +217 -0
- qiskit/result/models.py +234 -0
- qiskit/result/postprocess.py +239 -0
- qiskit/result/result.py +392 -0
- qiskit/result/sampled_expval.py +75 -0
- qiskit/result/utils.py +295 -0
- qiskit/scheduler/__init__.py +40 -0
- qiskit/scheduler/config.py +37 -0
- qiskit/scheduler/lowering.py +187 -0
- qiskit/scheduler/methods/__init__.py +15 -0
- qiskit/scheduler/methods/basic.py +140 -0
- qiskit/scheduler/schedule_circuit.py +69 -0
- qiskit/scheduler/sequence.py +104 -0
- qiskit/synthesis/__init__.py +220 -0
- qiskit/synthesis/arithmetic/__init__.py +16 -0
- qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
- qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +102 -0
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +99 -0
- qiskit/synthesis/clifford/__init__.py +19 -0
- qiskit/synthesis/clifford/clifford_decompose_ag.py +178 -0
- qiskit/synthesis/clifford/clifford_decompose_bm.py +46 -0
- qiskit/synthesis/clifford/clifford_decompose_full.py +64 -0
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +58 -0
- qiskit/synthesis/clifford/clifford_decompose_layers.py +447 -0
- qiskit/synthesis/cnotdihedral/__init__.py +17 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +52 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +141 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +266 -0
- qiskit/synthesis/discrete_basis/__init__.py +16 -0
- qiskit/synthesis/discrete_basis/commutator_decompose.py +241 -0
- qiskit/synthesis/discrete_basis/gate_sequence.py +415 -0
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +163 -0
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +217 -0
- qiskit/synthesis/evolution/__init__.py +21 -0
- qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
- qiskit/synthesis/evolution/lie_trotter.py +117 -0
- qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
- qiskit/synthesis/evolution/pauli_network.py +80 -0
- qiskit/synthesis/evolution/product_formula.py +311 -0
- qiskit/synthesis/evolution/qdrift.py +138 -0
- qiskit/synthesis/evolution/suzuki_trotter.py +215 -0
- qiskit/synthesis/linear/__init__.py +26 -0
- qiskit/synthesis/linear/cnot_synth.py +69 -0
- qiskit/synthesis/linear/linear_circuits_utils.py +128 -0
- qiskit/synthesis/linear/linear_depth_lnn.py +276 -0
- qiskit/synthesis/linear/linear_matrix_utils.py +27 -0
- qiskit/synthesis/linear_phase/__init__.py +17 -0
- qiskit/synthesis/linear_phase/cnot_phase_synth.py +206 -0
- qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +262 -0
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +58 -0
- qiskit/synthesis/multi_controlled/__init__.py +24 -0
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +356 -0
- qiskit/synthesis/one_qubit/__init__.py +15 -0
- qiskit/synthesis/one_qubit/one_qubit_decompose.py +288 -0
- qiskit/synthesis/permutation/__init__.py +18 -0
- qiskit/synthesis/permutation/permutation_full.py +78 -0
- qiskit/synthesis/permutation/permutation_lnn.py +54 -0
- qiskit/synthesis/permutation/permutation_reverse_lnn.py +93 -0
- qiskit/synthesis/permutation/permutation_utils.py +16 -0
- qiskit/synthesis/qft/__init__.py +16 -0
- qiskit/synthesis/qft/qft_decompose_full.py +97 -0
- qiskit/synthesis/qft/qft_decompose_lnn.py +79 -0
- qiskit/synthesis/stabilizer/__init__.py +16 -0
- qiskit/synthesis/stabilizer/stabilizer_circuit.py +149 -0
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +194 -0
- qiskit/synthesis/two_qubit/__init__.py +19 -0
- qiskit/synthesis/two_qubit/local_invariance.py +63 -0
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +700 -0
- qiskit/synthesis/two_qubit/xx_decompose/__init__.py +19 -0
- qiskit/synthesis/two_qubit/xx_decompose/circuits.py +300 -0
- qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +324 -0
- qiskit/synthesis/two_qubit/xx_decompose/embodiments.py +163 -0
- qiskit/synthesis/two_qubit/xx_decompose/paths.py +412 -0
- qiskit/synthesis/two_qubit/xx_decompose/polytopes.py +262 -0
- qiskit/synthesis/two_qubit/xx_decompose/utilities.py +40 -0
- qiskit/synthesis/two_qubit/xx_decompose/weyl.py +133 -0
- qiskit/synthesis/unitary/__init__.py +13 -0
- qiskit/synthesis/unitary/aqc/__init__.py +177 -0
- qiskit/synthesis/unitary/aqc/approximate.py +116 -0
- qiskit/synthesis/unitary/aqc/aqc.py +175 -0
- qiskit/synthesis/unitary/aqc/cnot_structures.py +300 -0
- qiskit/synthesis/unitary/aqc/cnot_unit_circuit.py +103 -0
- qiskit/synthesis/unitary/aqc/cnot_unit_objective.py +299 -0
- qiskit/synthesis/unitary/aqc/elementary_operations.py +108 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/__init__.py +164 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/fast_grad_utils.py +237 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +226 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/layer.py +370 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/pmatrix.py +312 -0
- qiskit/synthesis/unitary/qsd.py +288 -0
- qiskit/transpiler/__init__.py +1290 -0
- qiskit/transpiler/basepasses.py +221 -0
- qiskit/transpiler/coupling.py +500 -0
- qiskit/transpiler/exceptions.py +59 -0
- qiskit/transpiler/instruction_durations.py +281 -0
- qiskit/transpiler/layout.py +737 -0
- qiskit/transpiler/passes/__init__.py +312 -0
- qiskit/transpiler/passes/analysis/__init__.py +23 -0
- qiskit/transpiler/passes/analysis/count_ops.py +30 -0
- qiskit/transpiler/passes/analysis/count_ops_longest_path.py +26 -0
- qiskit/transpiler/passes/analysis/dag_longest_path.py +24 -0
- qiskit/transpiler/passes/analysis/depth.py +33 -0
- qiskit/transpiler/passes/analysis/num_qubits.py +26 -0
- qiskit/transpiler/passes/analysis/num_tensor_factors.py +26 -0
- qiskit/transpiler/passes/analysis/resource_estimation.py +41 -0
- qiskit/transpiler/passes/analysis/size.py +36 -0
- qiskit/transpiler/passes/analysis/width.py +27 -0
- qiskit/transpiler/passes/basis/__init__.py +19 -0
- qiskit/transpiler/passes/basis/basis_translator.py +137 -0
- qiskit/transpiler/passes/basis/decompose.py +131 -0
- qiskit/transpiler/passes/basis/translate_parameterized.py +175 -0
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +88 -0
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +109 -0
- qiskit/transpiler/passes/calibration/__init__.py +17 -0
- qiskit/transpiler/passes/calibration/base_builder.py +79 -0
- qiskit/transpiler/passes/calibration/builders.py +20 -0
- qiskit/transpiler/passes/calibration/exceptions.py +22 -0
- qiskit/transpiler/passes/calibration/pulse_gate.py +100 -0
- qiskit/transpiler/passes/calibration/rx_builder.py +164 -0
- qiskit/transpiler/passes/calibration/rzx_builder.py +411 -0
- qiskit/transpiler/passes/calibration/rzx_templates.py +51 -0
- qiskit/transpiler/passes/layout/__init__.py +26 -0
- qiskit/transpiler/passes/layout/_csp_custom_solver.py +65 -0
- qiskit/transpiler/passes/layout/apply_layout.py +123 -0
- qiskit/transpiler/passes/layout/csp_layout.py +132 -0
- qiskit/transpiler/passes/layout/dense_layout.py +202 -0
- qiskit/transpiler/passes/layout/disjoint_utils.py +219 -0
- qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
- qiskit/transpiler/passes/layout/full_ancilla_allocation.py +117 -0
- qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
- qiskit/transpiler/passes/layout/sabre_layout.py +487 -0
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +225 -0
- qiskit/transpiler/passes/layout/set_layout.py +69 -0
- qiskit/transpiler/passes/layout/trivial_layout.py +66 -0
- qiskit/transpiler/passes/layout/vf2_layout.py +263 -0
- qiskit/transpiler/passes/layout/vf2_post_layout.py +419 -0
- qiskit/transpiler/passes/layout/vf2_utils.py +260 -0
- qiskit/transpiler/passes/optimization/__init__.py +43 -0
- qiskit/transpiler/passes/optimization/_gate_extension.py +80 -0
- qiskit/transpiler/passes/optimization/collect_1q_runs.py +31 -0
- qiskit/transpiler/passes/optimization/collect_2q_blocks.py +35 -0
- qiskit/transpiler/passes/optimization/collect_and_collapse.py +115 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +104 -0
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +80 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +227 -0
- qiskit/transpiler/passes/optimization/commutation_analysis.py +44 -0
- qiskit/transpiler/passes/optimization/commutative_cancellation.py +82 -0
- qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +140 -0
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +149 -0
- qiskit/transpiler/passes/optimization/cx_cancellation.py +65 -0
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +162 -0
- qiskit/transpiler/passes/optimization/elide_permutations.py +91 -0
- qiskit/transpiler/passes/optimization/hoare_opt.py +420 -0
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +95 -0
- qiskit/transpiler/passes/optimization/normalize_rx_angle.py +149 -0
- qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +268 -0
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +254 -0
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
- qiskit/transpiler/passes/optimization/optimize_annotated.py +448 -0
- qiskit/transpiler/passes/optimization/optimize_cliffords.py +89 -0
- qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +71 -0
- qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py +41 -0
- qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
- qiskit/transpiler/passes/optimization/remove_identity_equiv.py +69 -0
- qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
- qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +47 -0
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +40 -0
- qiskit/transpiler/passes/optimization/template_matching/__init__.py +19 -0
- qiskit/transpiler/passes/optimization/template_matching/backward_match.py +749 -0
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +452 -0
- qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py +77 -0
- qiskit/transpiler/passes/optimization/template_matching/template_matching.py +370 -0
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +638 -0
- qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
- qiskit/transpiler/passes/routing/__init__.py +22 -0
- qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
- qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
- qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
- qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
- qiskit/transpiler/passes/routing/basic_swap.py +166 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/__init__.py +25 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_block.py +60 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +395 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +145 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
- qiskit/transpiler/passes/routing/layout_transformation.py +119 -0
- qiskit/transpiler/passes/routing/lookahead_swap.py +390 -0
- qiskit/transpiler/passes/routing/sabre_swap.py +447 -0
- qiskit/transpiler/passes/routing/star_prerouting.py +392 -0
- qiskit/transpiler/passes/routing/stochastic_swap.py +532 -0
- qiskit/transpiler/passes/routing/utils.py +35 -0
- qiskit/transpiler/passes/scheduling/__init__.py +27 -0
- qiskit/transpiler/passes/scheduling/alap.py +153 -0
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +81 -0
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +255 -0
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +78 -0
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +107 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +250 -0
- qiskit/transpiler/passes/scheduling/asap.py +175 -0
- qiskit/transpiler/passes/scheduling/base_scheduler.py +310 -0
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +312 -0
- qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +256 -0
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +452 -0
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +82 -0
- qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
- qiskit/transpiler/passes/scheduling/scheduling/alap.py +127 -0
- qiskit/transpiler/passes/scheduling/scheduling/asap.py +131 -0
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +94 -0
- qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +165 -0
- qiskit/transpiler/passes/synthesis/__init__.py +20 -0
- qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +854 -0
- qiskit/transpiler/passes/synthesis/hls_plugins.py +1559 -0
- qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
- qiskit/transpiler/passes/synthesis/plugin.py +734 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +297 -0
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +1076 -0
- qiskit/transpiler/passes/utils/__init__.py +33 -0
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +41 -0
- qiskit/transpiler/passes/utils/check_gate_direction.py +52 -0
- qiskit/transpiler/passes/utils/check_map.py +78 -0
- qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
- qiskit/transpiler/passes/utils/control_flow.py +65 -0
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +93 -0
- qiskit/transpiler/passes/utils/dag_fixed_point.py +36 -0
- qiskit/transpiler/passes/utils/error.py +69 -0
- qiskit/transpiler/passes/utils/filter_op_nodes.py +65 -0
- qiskit/transpiler/passes/utils/fixed_point.py +48 -0
- qiskit/transpiler/passes/utils/gate_direction.py +86 -0
- qiskit/transpiler/passes/utils/gates_basis.py +51 -0
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +163 -0
- qiskit/transpiler/passes/utils/minimum_point.py +118 -0
- qiskit/transpiler/passes/utils/remove_barriers.py +49 -0
- qiskit/transpiler/passes/utils/remove_final_measurements.py +114 -0
- qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
- qiskit/transpiler/passmanager.py +490 -0
- qiskit/transpiler/passmanager_config.py +216 -0
- qiskit/transpiler/preset_passmanagers/__init__.py +73 -0
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +1045 -0
- qiskit/transpiler/preset_passmanagers/common.py +649 -0
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +626 -0
- qiskit/transpiler/preset_passmanagers/level0.py +113 -0
- qiskit/transpiler/preset_passmanagers/level1.py +120 -0
- qiskit/transpiler/preset_passmanagers/level2.py +119 -0
- qiskit/transpiler/preset_passmanagers/level3.py +119 -0
- qiskit/transpiler/preset_passmanagers/plugin.py +353 -0
- qiskit/transpiler/target.py +1319 -0
- qiskit/transpiler/timing_constraints.py +59 -0
- qiskit/user_config.py +262 -0
- qiskit/utils/__init__.py +89 -0
- qiskit/utils/classtools.py +146 -0
- qiskit/utils/deprecate_pulse.py +119 -0
- qiskit/utils/deprecation.py +490 -0
- qiskit/utils/lazy_tester.py +363 -0
- qiskit/utils/multiprocessing.py +56 -0
- qiskit/utils/optionals.py +347 -0
- qiskit/utils/parallel.py +191 -0
- qiskit/utils/units.py +143 -0
- qiskit/version.py +84 -0
- qiskit/visualization/__init__.py +288 -0
- qiskit/visualization/array.py +204 -0
- qiskit/visualization/bloch.py +778 -0
- qiskit/visualization/circuit/__init__.py +15 -0
- qiskit/visualization/circuit/_utils.py +675 -0
- qiskit/visualization/circuit/circuit_visualization.py +727 -0
- qiskit/visualization/circuit/latex.py +661 -0
- qiskit/visualization/circuit/matplotlib.py +2029 -0
- qiskit/visualization/circuit/qcstyle.py +278 -0
- qiskit/visualization/circuit/styles/__init__.py +13 -0
- qiskit/visualization/circuit/styles/bw.json +202 -0
- qiskit/visualization/circuit/styles/clifford.json +202 -0
- qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
- qiskit/visualization/circuit/styles/iqp.json +214 -0
- qiskit/visualization/circuit/styles/textbook.json +202 -0
- qiskit/visualization/circuit/text.py +1844 -0
- qiskit/visualization/circuit_visualization.py +19 -0
- qiskit/visualization/counts_visualization.py +481 -0
- qiskit/visualization/dag_visualization.py +316 -0
- qiskit/visualization/exceptions.py +21 -0
- qiskit/visualization/gate_map.py +1485 -0
- qiskit/visualization/library.py +37 -0
- qiskit/visualization/pass_manager_visualization.py +308 -0
- qiskit/visualization/pulse_v2/__init__.py +21 -0
- qiskit/visualization/pulse_v2/core.py +901 -0
- qiskit/visualization/pulse_v2/device_info.py +173 -0
- qiskit/visualization/pulse_v2/drawings.py +253 -0
- qiskit/visualization/pulse_v2/events.py +254 -0
- qiskit/visualization/pulse_v2/generators/__init__.py +40 -0
- qiskit/visualization/pulse_v2/generators/barrier.py +76 -0
- qiskit/visualization/pulse_v2/generators/chart.py +208 -0
- qiskit/visualization/pulse_v2/generators/frame.py +436 -0
- qiskit/visualization/pulse_v2/generators/snapshot.py +133 -0
- qiskit/visualization/pulse_v2/generators/waveform.py +645 -0
- qiskit/visualization/pulse_v2/interface.py +458 -0
- qiskit/visualization/pulse_v2/layouts.py +387 -0
- qiskit/visualization/pulse_v2/plotters/__init__.py +17 -0
- qiskit/visualization/pulse_v2/plotters/base_plotter.py +53 -0
- qiskit/visualization/pulse_v2/plotters/matplotlib.py +201 -0
- qiskit/visualization/pulse_v2/stylesheet.py +312 -0
- qiskit/visualization/pulse_v2/types.py +242 -0
- qiskit/visualization/state_visualization.py +1518 -0
- qiskit/visualization/timeline/__init__.py +21 -0
- qiskit/visualization/timeline/core.py +480 -0
- qiskit/visualization/timeline/drawings.py +260 -0
- qiskit/visualization/timeline/generators.py +506 -0
- qiskit/visualization/timeline/interface.py +436 -0
- qiskit/visualization/timeline/layouts.py +115 -0
- qiskit/visualization/timeline/plotters/__init__.py +16 -0
- qiskit/visualization/timeline/plotters/base_plotter.py +58 -0
- qiskit/visualization/timeline/plotters/matplotlib.py +192 -0
- qiskit/visualization/timeline/stylesheet.py +301 -0
- qiskit/visualization/timeline/types.py +148 -0
- qiskit/visualization/transition_visualization.py +369 -0
- qiskit/visualization/utils.py +49 -0
- qiskit-1.3.0.dist-info/LICENSE.txt +203 -0
- qiskit-1.3.0.dist-info/METADATA +222 -0
- qiskit-1.3.0.dist-info/RECORD +836 -0
- qiskit-1.3.0.dist-info/WHEEL +5 -0
- qiskit-1.3.0.dist-info/entry_points.txt +76 -0
- qiskit-1.3.0.dist-info/top_level.txt +1 -0
qiskit/result/utils.py
ADDED
@@ -0,0 +1,295 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2018.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
|
14
|
+
"""Utility functions for working with Results."""
|
15
|
+
|
16
|
+
from typing import Sequence, Union, Optional, Dict, List
|
17
|
+
from collections import Counter
|
18
|
+
from copy import deepcopy
|
19
|
+
|
20
|
+
import numpy as np
|
21
|
+
|
22
|
+
from qiskit.exceptions import QiskitError
|
23
|
+
from qiskit.result.result import Result
|
24
|
+
from qiskit.result.counts import Counts
|
25
|
+
from qiskit.result.distributions.probability import ProbDistribution
|
26
|
+
from qiskit.result.distributions.quasi import QuasiDistribution
|
27
|
+
|
28
|
+
from qiskit.result.postprocess import _bin_to_hex
|
29
|
+
|
30
|
+
from qiskit._accelerate import results as results_rs # pylint: disable=no-name-in-module
|
31
|
+
|
32
|
+
|
33
|
+
def marginal_counts(
|
34
|
+
result: Union[dict, Result],
|
35
|
+
indices: Optional[List[int]] = None,
|
36
|
+
inplace: bool = False,
|
37
|
+
format_marginal: bool = False,
|
38
|
+
marginalize_memory: Optional[bool] = True,
|
39
|
+
) -> Union[Dict[str, int], Result]:
|
40
|
+
"""Marginalize counts from an experiment over some indices of interest.
|
41
|
+
|
42
|
+
Args:
|
43
|
+
result: result to be marginalized
|
44
|
+
(a Result object or a dict(str, int) of counts).
|
45
|
+
indices: The bit positions of interest
|
46
|
+
to marginalize over. If ``None`` (default), do not marginalize at all.
|
47
|
+
inplace: Default: False. Operates on the original Result
|
48
|
+
argument if True, leading to loss of original Job Result.
|
49
|
+
It has no effect if ``result`` is a dict.
|
50
|
+
format_marginal: Default: False. If True, takes the output of
|
51
|
+
marginalize and formats it with placeholders between cregs and
|
52
|
+
for non-indices.
|
53
|
+
marginalize_memory: If True, then also marginalize the memory field (if present).
|
54
|
+
If False, remove the memory field from the result.
|
55
|
+
If None, leave the memory field as is.
|
56
|
+
|
57
|
+
Returns:
|
58
|
+
Result or dict(str, int): A Result object or a dictionary with
|
59
|
+
the observed counts, marginalized to only account for frequency
|
60
|
+
of observations of bits of interest.
|
61
|
+
|
62
|
+
Raises:
|
63
|
+
QiskitError: in case of invalid indices to marginalize over.
|
64
|
+
"""
|
65
|
+
if isinstance(result, Result):
|
66
|
+
if not inplace:
|
67
|
+
result = deepcopy(result)
|
68
|
+
for i, experiment_result in enumerate(result.results):
|
69
|
+
counts = result.get_counts(i)
|
70
|
+
new_counts = _marginalize(counts, indices)
|
71
|
+
new_counts_hex = {}
|
72
|
+
for k, v in new_counts.items():
|
73
|
+
new_counts_hex[_bin_to_hex(k)] = v
|
74
|
+
experiment_result.data.counts = new_counts_hex
|
75
|
+
|
76
|
+
if indices is not None:
|
77
|
+
experiment_result.header.memory_slots = len(indices)
|
78
|
+
csize = getattr(experiment_result.header, "creg_sizes", None)
|
79
|
+
if csize is not None:
|
80
|
+
experiment_result.header.creg_sizes = _adjust_creg_sizes(csize, indices)
|
81
|
+
|
82
|
+
if getattr(experiment_result.data, "memory", None) is not None and indices is not None:
|
83
|
+
if marginalize_memory is False:
|
84
|
+
delattr(experiment_result.data, "memory")
|
85
|
+
elif marginalize_memory is None:
|
86
|
+
pass # leave as is
|
87
|
+
else:
|
88
|
+
sorted_indices = sorted(
|
89
|
+
indices, reverse=True
|
90
|
+
) # same convention as for the counts
|
91
|
+
experiment_result.data.memory = results_rs.marginal_memory(
|
92
|
+
experiment_result.data.memory, sorted_indices, return_hex=True
|
93
|
+
)
|
94
|
+
return result
|
95
|
+
else:
|
96
|
+
marg_counts = _marginalize(result, indices)
|
97
|
+
if format_marginal and indices is not None:
|
98
|
+
marg_counts = _format_marginal(result, marg_counts, indices)
|
99
|
+
return marg_counts
|
100
|
+
|
101
|
+
|
102
|
+
def _adjust_creg_sizes(creg_sizes, indices):
|
103
|
+
"""Helper to reduce creg_sizes to match indices"""
|
104
|
+
|
105
|
+
# Zero out creg_sizes list
|
106
|
+
new_creg_sizes = [[creg[0], 0] for creg in creg_sizes]
|
107
|
+
indices_sort = sorted(indices)
|
108
|
+
|
109
|
+
# Get creg num values and then convert to the cumulative last index per creg.
|
110
|
+
# e.g. [2, 1, 3] => [1, 2, 5]
|
111
|
+
creg_nums = [x for _, x in creg_sizes]
|
112
|
+
creg_limits = [sum(creg_nums[0:x:1]) - 1 for x in range(0, len(creg_nums) + 1)][1:]
|
113
|
+
|
114
|
+
# Now iterate over indices and find which creg that index is in.
|
115
|
+
# When found increment the creg size
|
116
|
+
creg_idx = 0
|
117
|
+
for ind in indices_sort:
|
118
|
+
for idx in range(creg_idx, len(creg_limits)):
|
119
|
+
if ind <= creg_limits[idx]:
|
120
|
+
creg_idx = idx
|
121
|
+
new_creg_sizes[idx][1] += 1
|
122
|
+
break
|
123
|
+
# Throw away any cregs with 0 size
|
124
|
+
new_creg_sizes = [creg for creg in new_creg_sizes if creg[1] != 0]
|
125
|
+
return new_creg_sizes
|
126
|
+
|
127
|
+
|
128
|
+
def marginal_memory(
|
129
|
+
memory: Union[List[str], np.ndarray],
|
130
|
+
indices: Optional[List[int]] = None,
|
131
|
+
int_return: bool = False,
|
132
|
+
hex_return: bool = False,
|
133
|
+
avg_data: bool = False,
|
134
|
+
parallel_threshold: int = 1000,
|
135
|
+
) -> Union[List[str], np.ndarray]:
|
136
|
+
"""Marginalize shot memory
|
137
|
+
|
138
|
+
This function is multithreaded and will launch a thread pool with threads equal to the number
|
139
|
+
of CPUs by default. You can tune the number of threads with the ``RAYON_NUM_THREADS``
|
140
|
+
environment variable. For example, setting ``RAYON_NUM_THREADS=4`` would limit the thread pool
|
141
|
+
to 4 threads.
|
142
|
+
|
143
|
+
Args:
|
144
|
+
memory: The input memory list, this is either a list of hexadecimal strings to be marginalized
|
145
|
+
representing measure level 2 memory or a numpy array representing level 0 measurement
|
146
|
+
memory (single or avg) or level 1 measurement memory (single or avg).
|
147
|
+
indices: The bit positions of interest to marginalize over. If
|
148
|
+
``None`` (default), do not marginalize at all.
|
149
|
+
int_return: If set to ``True`` the output will be a list of integers.
|
150
|
+
By default the return type is a bit string. This and ``hex_return``
|
151
|
+
are mutually exclusive and can not be specified at the same time. This option only has an
|
152
|
+
effect with memory level 2.
|
153
|
+
hex_return: If set to ``True`` the output will be a list of hexadecimal
|
154
|
+
strings. By default the return type is a bit string. This and
|
155
|
+
``int_return`` are mutually exclusive and can not be specified
|
156
|
+
at the same time. This option only has an effect with memory level 2.
|
157
|
+
avg_data: If a 2 dimensional numpy array is passed in for ``memory`` this can be set to
|
158
|
+
``True`` to indicate it's a avg level 0 data instead of level 1
|
159
|
+
single data.
|
160
|
+
parallel_threshold: The number of elements in ``memory`` to start running in multiple
|
161
|
+
threads. If ``len(memory)`` is >= this value, the function will run in multiple
|
162
|
+
threads. By default this is set to 1000.
|
163
|
+
|
164
|
+
Returns:
|
165
|
+
marginal_memory: The list of marginalized memory
|
166
|
+
|
167
|
+
Raises:
|
168
|
+
ValueError: if both ``int_return`` and ``hex_return`` are set to ``True``
|
169
|
+
"""
|
170
|
+
if int_return and hex_return:
|
171
|
+
raise ValueError("Either int_return or hex_return can be specified but not both")
|
172
|
+
|
173
|
+
if isinstance(memory, np.ndarray):
|
174
|
+
if int_return:
|
175
|
+
raise ValueError("int_return option only works with memory list input")
|
176
|
+
if hex_return:
|
177
|
+
raise ValueError("hex_return option only works with memory list input")
|
178
|
+
if indices is None:
|
179
|
+
return memory.copy()
|
180
|
+
if memory.ndim == 1:
|
181
|
+
return results_rs.marginal_measure_level_1_avg(memory, indices)
|
182
|
+
if memory.ndim == 2:
|
183
|
+
if avg_data:
|
184
|
+
return results_rs.marginal_measure_level_0_avg(memory, indices)
|
185
|
+
else:
|
186
|
+
return results_rs.marginal_measure_level_1(memory, indices)
|
187
|
+
if memory.ndim == 3:
|
188
|
+
return results_rs.marginal_measure_level_0(memory, indices)
|
189
|
+
raise ValueError("Invalid input memory array")
|
190
|
+
return results_rs.marginal_memory(
|
191
|
+
memory,
|
192
|
+
indices,
|
193
|
+
return_int=int_return,
|
194
|
+
return_hex=hex_return,
|
195
|
+
parallel_threshold=parallel_threshold,
|
196
|
+
)
|
197
|
+
|
198
|
+
|
199
|
+
def marginal_distribution(
|
200
|
+
counts: dict,
|
201
|
+
indices: Optional[Sequence[int]] = None,
|
202
|
+
format_marginal: bool = False,
|
203
|
+
) -> Dict[str, int]:
|
204
|
+
"""Marginalize counts from an experiment over some indices of interest.
|
205
|
+
|
206
|
+
Unlike :func:`~.marginal_counts` this function respects the order of
|
207
|
+
the input ``indices``. If the input ``indices`` list is specified then the order
|
208
|
+
the bit indices are specified will be the output order of the bitstrings
|
209
|
+
in the marginalized output.
|
210
|
+
|
211
|
+
Args:
|
212
|
+
counts: result to be marginalized
|
213
|
+
indices: The bit positions of interest
|
214
|
+
to marginalize over. If ``None`` (default), do not marginalize at all.
|
215
|
+
format_marginal: Default: False. If True, takes the output of
|
216
|
+
marginalize and formats it with placeholders between cregs and
|
217
|
+
for non-indices.
|
218
|
+
Returns:
|
219
|
+
dict(str, int): A marginalized dictionary
|
220
|
+
Raises:
|
221
|
+
QiskitError: If any value in ``indices`` is invalid or the ``counts`` dict
|
222
|
+
is invalid.
|
223
|
+
"""
|
224
|
+
num_clbits = len(max(counts.keys()).replace(" ", ""))
|
225
|
+
if indices is not None and (len(indices) == 0 or not set(indices).issubset(range(num_clbits))):
|
226
|
+
raise QiskitError(f"indices must be in range [0, {num_clbits - 1}].")
|
227
|
+
|
228
|
+
if isinstance(counts, Counts):
|
229
|
+
res = results_rs.marginal_counts(counts, indices)
|
230
|
+
elif isinstance(counts, (ProbDistribution, QuasiDistribution)):
|
231
|
+
res = results_rs.marginal_distribution(counts, indices)
|
232
|
+
else:
|
233
|
+
first_value = next(iter(counts.values()))
|
234
|
+
if isinstance(first_value, (int, np.integer)):
|
235
|
+
res = results_rs.marginal_counts(counts, indices)
|
236
|
+
elif isinstance(first_value, (float, np.floating)):
|
237
|
+
res = results_rs.marginal_distribution(counts, indices)
|
238
|
+
else:
|
239
|
+
raise QiskitError("Values of counts must be an int or float")
|
240
|
+
|
241
|
+
if format_marginal and indices is not None:
|
242
|
+
return _format_marginal(counts, res, indices)
|
243
|
+
return res
|
244
|
+
|
245
|
+
|
246
|
+
def _marginalize(counts, indices=None):
|
247
|
+
"""Get the marginal counts for the given set of indices"""
|
248
|
+
num_clbits = len(next(iter(counts)).replace(" ", ""))
|
249
|
+
# Check if we do not need to marginalize and if so, trim
|
250
|
+
# whitespace and '_' and return
|
251
|
+
if (indices is None) or set(range(num_clbits)) == set(indices):
|
252
|
+
ret = {}
|
253
|
+
for key, val in counts.items():
|
254
|
+
key = _remove_space_underscore(key)
|
255
|
+
ret[key] = val
|
256
|
+
return ret
|
257
|
+
|
258
|
+
if not indices or not set(indices).issubset(set(range(num_clbits))):
|
259
|
+
raise QiskitError(f"indices must be in range [0, {num_clbits - 1}].")
|
260
|
+
|
261
|
+
# Sort the indices to keep in descending order
|
262
|
+
# Since bitstrings have qubit-0 as least significant bit
|
263
|
+
indices = sorted(indices, reverse=True)
|
264
|
+
|
265
|
+
# Build the return list
|
266
|
+
new_counts = Counter()
|
267
|
+
for key, val in counts.items():
|
268
|
+
new_key = "".join([_remove_space_underscore(key)[-idx - 1] for idx in indices])
|
269
|
+
new_counts[new_key] += val
|
270
|
+
return dict(new_counts)
|
271
|
+
|
272
|
+
|
273
|
+
def _format_marginal(counts, marg_counts, indices):
|
274
|
+
"""Take the output of marginalize and add placeholders for
|
275
|
+
multiple cregs and non-indices."""
|
276
|
+
format_counts = {}
|
277
|
+
counts_template = next(iter(counts))
|
278
|
+
counts_len = len(counts_template.replace(" ", ""))
|
279
|
+
indices_rev = sorted(indices, reverse=True)
|
280
|
+
|
281
|
+
for count in marg_counts:
|
282
|
+
index_dict = dict(zip(indices_rev, count))
|
283
|
+
count_bits = "".join(
|
284
|
+
[index_dict[index] if index in index_dict else "_" for index in range(counts_len)]
|
285
|
+
)[::-1]
|
286
|
+
for index, bit in enumerate(counts_template):
|
287
|
+
if bit == " ":
|
288
|
+
count_bits = count_bits[:index] + " " + count_bits[index:]
|
289
|
+
format_counts[count_bits] = marg_counts[count]
|
290
|
+
return format_counts
|
291
|
+
|
292
|
+
|
293
|
+
def _remove_space_underscore(bitstring):
|
294
|
+
"""Removes all spaces and underscores from bitstring"""
|
295
|
+
return bitstring.replace(" ", "").replace("_", "")
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2019.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""
|
14
|
+
===========================================
|
15
|
+
Circuit Scheduler (:mod:`qiskit.scheduler`)
|
16
|
+
===========================================
|
17
|
+
|
18
|
+
.. currentmodule:: qiskit.scheduler
|
19
|
+
|
20
|
+
A circuit scheduler compiles a circuit program to a pulse program.
|
21
|
+
|
22
|
+
Core API
|
23
|
+
========
|
24
|
+
|
25
|
+
.. autoclass:: ScheduleConfig
|
26
|
+
|
27
|
+
.. currentmodule:: qiskit.scheduler.schedule_circuit
|
28
|
+
.. autofunction:: schedule_circuit
|
29
|
+
.. currentmodule:: qiskit.scheduler
|
30
|
+
|
31
|
+
Pulse scheduling methods
|
32
|
+
========================
|
33
|
+
|
34
|
+
.. currentmodule:: qiskit.scheduler.methods
|
35
|
+
.. autofunction:: as_soon_as_possible
|
36
|
+
.. autofunction:: as_late_as_possible
|
37
|
+
.. currentmodule:: qiskit.scheduler
|
38
|
+
"""
|
39
|
+
from qiskit.scheduler import schedule_circuit
|
40
|
+
from qiskit.scheduler.config import ScheduleConfig
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2019.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""Scheduling container classes."""
|
14
|
+
|
15
|
+
from typing import List
|
16
|
+
|
17
|
+
from qiskit.pulse.instruction_schedule_map import InstructionScheduleMap
|
18
|
+
from qiskit.pulse.utils import format_meas_map
|
19
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
|
20
|
+
|
21
|
+
|
22
|
+
class ScheduleConfig:
|
23
|
+
"""Configuration for pulse scheduling."""
|
24
|
+
|
25
|
+
@deprecate_pulse_dependency(moving_to_dynamics=True)
|
26
|
+
def __init__(self, inst_map: InstructionScheduleMap, meas_map: List[List[int]], dt: float):
|
27
|
+
"""
|
28
|
+
Container for information needed to schedule a QuantumCircuit into a pulse Schedule.
|
29
|
+
|
30
|
+
Args:
|
31
|
+
inst_map: The schedule definition of all gates supported on a backend.
|
32
|
+
meas_map: A list of groups of qubits which have to be measured together.
|
33
|
+
dt: Sample duration.
|
34
|
+
"""
|
35
|
+
self.inst_map = inst_map
|
36
|
+
self.meas_map = format_meas_map(meas_map)
|
37
|
+
self.dt = dt
|
@@ -0,0 +1,187 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""Lower gates to schedules. The relative timing within gates is respected. This
|
14
|
+
module handles the translation, but does not handle timing.
|
15
|
+
"""
|
16
|
+
from collections import namedtuple
|
17
|
+
from typing import Dict, List, Optional, Union
|
18
|
+
|
19
|
+
from qiskit.circuit.barrier import Barrier
|
20
|
+
from qiskit.circuit.delay import Delay
|
21
|
+
from qiskit.circuit.duration import convert_durations_to_dt
|
22
|
+
from qiskit.circuit.measure import Measure
|
23
|
+
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
24
|
+
from qiskit.exceptions import QiskitError
|
25
|
+
from qiskit.pulse import Schedule
|
26
|
+
from qiskit.pulse import instructions as pulse_inst
|
27
|
+
from qiskit.pulse.channels import AcquireChannel, MemorySlot, DriveChannel
|
28
|
+
from qiskit.pulse.exceptions import PulseError
|
29
|
+
from qiskit.pulse.macros import measure
|
30
|
+
from qiskit.scheduler.config import ScheduleConfig
|
31
|
+
from qiskit.providers import BackendV1, BackendV2
|
32
|
+
|
33
|
+
CircuitPulseDef = namedtuple(
|
34
|
+
"CircuitPulseDef",
|
35
|
+
["schedule", "qubits"], # The schedule which implements the quantum circuit command
|
36
|
+
) # The labels of the qubits involved in the command according to the circuit
|
37
|
+
|
38
|
+
|
39
|
+
def lower_gates(
|
40
|
+
circuit: QuantumCircuit,
|
41
|
+
schedule_config: ScheduleConfig,
|
42
|
+
backend: Optional[Union[BackendV1, BackendV2]] = None,
|
43
|
+
) -> List[CircuitPulseDef]:
|
44
|
+
"""
|
45
|
+
Return a list of Schedules and the qubits they operate on, for each element encountered in the
|
46
|
+
input circuit.
|
47
|
+
|
48
|
+
Without concern for the final schedule, extract and return a list of Schedules and the qubits
|
49
|
+
they operate on, for each element encountered in the input circuit. Measures are grouped when
|
50
|
+
possible, so ``qc.measure(q0, c0)`` or ``qc.measure(q1, c1)`` will generate a synchronous
|
51
|
+
measurement pulse.
|
52
|
+
|
53
|
+
Args:
|
54
|
+
circuit: The quantum circuit to translate.
|
55
|
+
schedule_config: Backend specific parameters used for building the Schedule.
|
56
|
+
backend: Pass in the backend used to build the Schedule, the backend could be BackendV1
|
57
|
+
or BackendV2
|
58
|
+
|
59
|
+
Returns:
|
60
|
+
A list of CircuitPulseDefs: the pulse definition for each circuit element.
|
61
|
+
|
62
|
+
Raises:
|
63
|
+
QiskitError: If circuit uses a command that isn't defined in config.inst_map.
|
64
|
+
"""
|
65
|
+
from qiskit.pulse.transforms.base_transforms import target_qobj_transform
|
66
|
+
|
67
|
+
circ_pulse_defs = []
|
68
|
+
|
69
|
+
inst_map = schedule_config.inst_map
|
70
|
+
qubit_mem_slots = {} # Map measured qubit index to classical bit index
|
71
|
+
|
72
|
+
# convert the unit of durations from SI to dt before lowering
|
73
|
+
circuit = convert_durations_to_dt(circuit, dt_in_sec=schedule_config.dt, inplace=False)
|
74
|
+
|
75
|
+
def get_measure_schedule(qubit_mem_slots: Dict[int, int]) -> CircuitPulseDef:
|
76
|
+
"""Create a schedule to measure the qubits queued for measuring."""
|
77
|
+
sched = Schedule()
|
78
|
+
# Exclude acquisition on these qubits, since they are handled by the user calibrations
|
79
|
+
acquire_excludes = {}
|
80
|
+
if Measure().name in circuit.calibrations.keys():
|
81
|
+
qubits = tuple(sorted(qubit_mem_slots.keys()))
|
82
|
+
params = ()
|
83
|
+
for qubit in qubits:
|
84
|
+
try:
|
85
|
+
meas_q = circuit.calibrations[Measure().name][((qubit,), params)]
|
86
|
+
meas_q = target_qobj_transform(meas_q)
|
87
|
+
acquire_q = meas_q.filter(channels=[AcquireChannel(qubit)])
|
88
|
+
mem_slot_index = [
|
89
|
+
chan.index for chan in acquire_q.channels if isinstance(chan, MemorySlot)
|
90
|
+
][0]
|
91
|
+
if mem_slot_index != qubit_mem_slots[qubit]:
|
92
|
+
raise KeyError(
|
93
|
+
"The measurement calibration is not defined on "
|
94
|
+
"the requested classical bits"
|
95
|
+
)
|
96
|
+
sched |= meas_q
|
97
|
+
del qubit_mem_slots[qubit]
|
98
|
+
acquire_excludes[qubit] = mem_slot_index
|
99
|
+
except KeyError:
|
100
|
+
pass
|
101
|
+
|
102
|
+
if qubit_mem_slots:
|
103
|
+
qubits = list(qubit_mem_slots.keys())
|
104
|
+
qubit_mem_slots.update(acquire_excludes)
|
105
|
+
meas_sched = measure(
|
106
|
+
qubits=qubits,
|
107
|
+
backend=backend,
|
108
|
+
inst_map=inst_map,
|
109
|
+
meas_map=schedule_config.meas_map,
|
110
|
+
qubit_mem_slots=qubit_mem_slots,
|
111
|
+
)
|
112
|
+
meas_sched = target_qobj_transform(meas_sched)
|
113
|
+
meas_sched = meas_sched.exclude(
|
114
|
+
channels=[AcquireChannel(qubit) for qubit in acquire_excludes]
|
115
|
+
)
|
116
|
+
sched |= meas_sched
|
117
|
+
qubit_mem_slots.clear()
|
118
|
+
return CircuitPulseDef(
|
119
|
+
schedule=sched,
|
120
|
+
qubits=[chan.index for chan in sched.channels if isinstance(chan, AcquireChannel)],
|
121
|
+
)
|
122
|
+
|
123
|
+
qubit_indices = {bit: idx for idx, bit in enumerate(circuit.qubits)}
|
124
|
+
clbit_indices = {bit: idx for idx, bit in enumerate(circuit.clbits)}
|
125
|
+
|
126
|
+
for instruction in circuit.data:
|
127
|
+
inst_qubits = [qubit_indices[qubit] for qubit in instruction.qubits]
|
128
|
+
|
129
|
+
if any(q in qubit_mem_slots for q in inst_qubits):
|
130
|
+
# If we are operating on a qubit that was scheduled to be measured, process that first
|
131
|
+
circ_pulse_defs.append(get_measure_schedule(qubit_mem_slots))
|
132
|
+
|
133
|
+
if isinstance(instruction.operation, Barrier):
|
134
|
+
circ_pulse_defs.append(
|
135
|
+
CircuitPulseDef(schedule=instruction.operation, qubits=inst_qubits)
|
136
|
+
)
|
137
|
+
elif isinstance(instruction.operation, Delay):
|
138
|
+
sched = Schedule(name=instruction.operation.name)
|
139
|
+
for qubit in inst_qubits:
|
140
|
+
for channel in [DriveChannel]:
|
141
|
+
sched += pulse_inst.Delay(
|
142
|
+
duration=instruction.operation.duration, channel=channel(qubit)
|
143
|
+
)
|
144
|
+
circ_pulse_defs.append(CircuitPulseDef(schedule=sched, qubits=inst_qubits))
|
145
|
+
elif isinstance(instruction.operation, Measure):
|
146
|
+
if len(inst_qubits) != 1 and len(instruction.clbits) != 1:
|
147
|
+
raise QiskitError(
|
148
|
+
f"Qubit '{inst_qubits}' or classical bit '{instruction.clbits}' errored because the "
|
149
|
+
"circuit Measure instruction only takes one of "
|
150
|
+
"each."
|
151
|
+
)
|
152
|
+
qubit_mem_slots[inst_qubits[0]] = clbit_indices[instruction.clbits[0]]
|
153
|
+
else:
|
154
|
+
try:
|
155
|
+
gate_cals = circuit.calibrations[instruction.operation.name]
|
156
|
+
schedule = gate_cals[
|
157
|
+
(
|
158
|
+
tuple(inst_qubits),
|
159
|
+
tuple(
|
160
|
+
p if getattr(p, "parameters", None) else float(p)
|
161
|
+
for p in instruction.operation.params
|
162
|
+
),
|
163
|
+
)
|
164
|
+
]
|
165
|
+
schedule = target_qobj_transform(schedule)
|
166
|
+
circ_pulse_defs.append(CircuitPulseDef(schedule=schedule, qubits=inst_qubits))
|
167
|
+
continue
|
168
|
+
except KeyError:
|
169
|
+
pass # Calibration not defined for this operation
|
170
|
+
|
171
|
+
try:
|
172
|
+
schedule = inst_map.get(
|
173
|
+
instruction.operation, inst_qubits, *instruction.operation.params
|
174
|
+
)
|
175
|
+
schedule = target_qobj_transform(schedule)
|
176
|
+
circ_pulse_defs.append(CircuitPulseDef(schedule=schedule, qubits=inst_qubits))
|
177
|
+
except PulseError as ex:
|
178
|
+
raise QiskitError(
|
179
|
+
f"Operation '{instruction.operation.name}' on qubit(s) {inst_qubits} "
|
180
|
+
"not supported by the backend command definition. Did you remember to "
|
181
|
+
"transpile your input circuit for the same backend?"
|
182
|
+
) from ex
|
183
|
+
|
184
|
+
if qubit_mem_slots:
|
185
|
+
circ_pulse_defs.append(get_measure_schedule(qubit_mem_slots))
|
186
|
+
|
187
|
+
return circ_pulse_defs
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2019.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""Scheduling methods."""
|
14
|
+
|
15
|
+
from qiskit.scheduler.methods.basic import as_soon_as_possible, as_late_as_possible
|