qiskit 1.3.0rc2__cp39-abi3-win32.whl → 1.3.2__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.
Files changed (93) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/_accelerate.pyd +0 -0
  3. qiskit/circuit/__init__.py +2 -0
  4. qiskit/circuit/add_control.py +110 -92
  5. qiskit/circuit/controlledgate.py +2 -0
  6. qiskit/circuit/library/__init__.py +1 -0
  7. qiskit/circuit/library/arithmetic/adders/adder.py +25 -0
  8. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  9. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +1 -1
  10. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  11. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +9 -0
  12. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +1 -0
  13. qiskit/circuit/library/basis_change/qft.py +3 -0
  14. qiskit/circuit/library/boolean_logic/inner_product.py +2 -0
  15. qiskit/circuit/library/boolean_logic/quantum_and.py +4 -0
  16. qiskit/circuit/library/boolean_logic/quantum_or.py +4 -0
  17. qiskit/circuit/library/boolean_logic/quantum_xor.py +2 -0
  18. qiskit/circuit/library/fourier_checking.py +2 -0
  19. qiskit/circuit/library/generalized_gates/gms.py +1 -0
  20. qiskit/circuit/library/generalized_gates/gr.py +4 -0
  21. qiskit/circuit/library/generalized_gates/mcmt.py +1 -0
  22. qiskit/circuit/library/generalized_gates/permutation.py +5 -1
  23. qiskit/circuit/library/generalized_gates/unitary.py +1 -1
  24. qiskit/circuit/library/graph_state.py +2 -0
  25. qiskit/circuit/library/grover_operator.py +7 -3
  26. qiskit/circuit/library/hidden_linear_function.py +2 -0
  27. qiskit/circuit/library/iqp.py +5 -0
  28. qiskit/circuit/library/n_local/efficient_su2.py +7 -2
  29. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +3 -0
  30. qiskit/circuit/library/n_local/excitation_preserving.py +14 -8
  31. qiskit/circuit/library/n_local/n_local.py +10 -5
  32. qiskit/circuit/library/n_local/pauli_two_design.py +5 -2
  33. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -0
  34. qiskit/circuit/library/n_local/real_amplitudes.py +10 -4
  35. qiskit/circuit/library/overlap.py +1 -0
  36. qiskit/circuit/library/phase_estimation.py +2 -0
  37. qiskit/circuit/library/quantum_volume.py +3 -0
  38. qiskit/circuit/operation.py +1 -0
  39. qiskit/circuit/parameter.py +1 -0
  40. qiskit/circuit/parameterexpression.py +1 -1
  41. qiskit/circuit/quantumcircuit.py +13 -19
  42. qiskit/circuit/random/utils.py +2 -0
  43. qiskit/converters/dag_to_circuit.py +1 -0
  44. qiskit/primitives/statevector_estimator.py +1 -0
  45. qiskit/providers/fake_provider/__init__.py +1 -0
  46. qiskit/pulse/builder.py +8 -0
  47. qiskit/pulse/library/symbolic_pulses.py +1 -0
  48. qiskit/qasm2/export.py +2 -2
  49. qiskit/qasm3/__init__.py +1 -0
  50. qiskit/qasm3/exporter.py +6 -3
  51. qiskit/qpy/__init__.py +5 -5
  52. qiskit/quantum_info/operators/channel/chi.py +9 -9
  53. qiskit/quantum_info/operators/channel/choi.py +9 -9
  54. qiskit/quantum_info/operators/channel/ptm.py +9 -9
  55. qiskit/quantum_info/operators/channel/quantum_channel.py +3 -3
  56. qiskit/quantum_info/operators/channel/stinespring.py +9 -9
  57. qiskit/quantum_info/operators/channel/superop.py +5 -9
  58. qiskit/quantum_info/operators/symplectic/pauli_list.py +8 -8
  59. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +10 -1
  60. qiskit/quantum_info/states/densitymatrix.py +17 -15
  61. qiskit/quantum_info/states/stabilizerstate.py +7 -6
  62. qiskit/quantum_info/states/statevector.py +15 -6
  63. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -0
  64. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -0
  65. qiskit/synthesis/evolution/product_formula.py +0 -6
  66. qiskit/synthesis/evolution/suzuki_trotter.py +22 -5
  67. qiskit/transpiler/__init__.py +22 -1
  68. qiskit/transpiler/layout.py +3 -0
  69. qiskit/transpiler/passes/basis/decompose.py +24 -4
  70. qiskit/transpiler/passes/optimization/inverse_cancellation.py +2 -0
  71. qiskit/transpiler/passes/routing/star_prerouting.py +1 -0
  72. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +1 -0
  73. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +1 -0
  74. qiskit/transpiler/passes/synthesis/hls_plugins.py +137 -30
  75. qiskit/transpiler/passes/utils/filter_op_nodes.py +2 -1
  76. qiskit/transpiler/passes/utils/remove_barriers.py +1 -0
  77. qiskit/transpiler/preset_passmanagers/__init__.py +5 -5
  78. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +19 -22
  79. qiskit/transpiler/target.py +1 -1
  80. qiskit/visualization/__init__.py +6 -0
  81. qiskit/visualization/circuit/circuit_visualization.py +1 -0
  82. qiskit/visualization/counts_visualization.py +2 -0
  83. qiskit/visualization/dag_visualization.py +1 -0
  84. qiskit/visualization/gate_map.py +7 -3
  85. qiskit/visualization/pulse_v2/interface.py +4 -1
  86. qiskit/visualization/state_visualization.py +13 -2
  87. qiskit/visualization/timeline/interface.py +6 -3
  88. {qiskit-1.3.0rc2.dist-info → qiskit-1.3.2.dist-info}/METADATA +26 -26
  89. {qiskit-1.3.0rc2.dist-info → qiskit-1.3.2.dist-info}/RECORD +93 -93
  90. {qiskit-1.3.0rc2.dist-info → qiskit-1.3.2.dist-info}/WHEEL +1 -1
  91. {qiskit-1.3.0rc2.dist-info → qiskit-1.3.2.dist-info}/entry_points.txt +1 -1
  92. {qiskit-1.3.0rc2.dist-info → qiskit-1.3.2.dist-info}/LICENSE.txt +0 -0
  93. {qiskit-1.3.0rc2.dist-info → qiskit-1.3.2.dist-info}/top_level.txt +0 -0
@@ -33,6 +33,8 @@ branches, and other complex behaviors. That being said, the standard
33
33
  compilation flow follows the structure given below:
34
34
 
35
35
  .. image:: /source_images/transpiling_core_steps.png
36
+ :alt: The transpilation process takes the input circuit, applies the transpilation \
37
+ passes, then produces the output circuit.
36
38
 
37
39
  .. raw:: html
38
40
 
@@ -331,7 +333,8 @@ example 3 qubit :class:`~.Target` above:
331
333
 
332
334
  .. plot::
333
335
  :include-source:
334
-
336
+ :alt: Output from the previous code.
337
+
335
338
  from qiskit.circuit import Parameter, Measure
336
339
  from qiskit.transpiler import Target, InstructionProperties
337
340
  from qiskit.circuit.library import UGate, RZGate, RXGate, RYGate, CXGate, CZGate
@@ -390,6 +393,7 @@ see the individual connectivity, you can pass the operation name to
390
393
  :meth:`.CouplingMap.build_coupling_map`:
391
394
 
392
395
  .. plot::
396
+ :alt: Output from the previous code.
393
397
  :include-source:
394
398
 
395
399
  from qiskit.circuit import Parameter, Measure
@@ -445,6 +449,7 @@ see the individual connectivity, you can pass the operation name to
445
449
  target.build_coupling_map('cx').draw()
446
450
 
447
451
  .. plot::
452
+ :alt: Output from the previous code.
448
453
  :include-source:
449
454
 
450
455
  from qiskit.circuit import Parameter, Measure
@@ -532,6 +537,7 @@ Every quantum circuit run on the target device must be expressed using only thes
532
537
  For example, to run a simple phase estimation circuit:
533
538
 
534
539
  .. plot::
540
+ :alt: Circuit diagram output by the previous code.
535
541
  :include-source:
536
542
 
537
543
  import numpy as np
@@ -557,6 +563,7 @@ the target IBM Quantum device (the :class:`~.GenericBackendV2` class generates
557
563
  a fake backend with a specified number of qubits for test purposes):
558
564
 
559
565
  .. plot::
566
+ :alt: Circuit diagram output by the previous code.
560
567
  :include-source:
561
568
 
562
569
  from qiskit import transpile
@@ -608,6 +615,7 @@ It is important to highlight two special cases:
608
615
  ['id', 'rz', 'sx', 'x', 'cx', 'measure', 'delay']
609
616
 
610
617
  .. plot:
618
+ :alt: Circuit diagram output by the previous code.
611
619
  :include-source:
612
620
 
613
621
  from qiskit.circuit import QuantumCircuit
@@ -628,6 +636,7 @@ It is important to highlight two special cases:
628
636
  this gate must be decomposed. This decomposition is quite costly:
629
637
 
630
638
  .. plot::
639
+ :alt: Circuit diagram output by the previous code.
631
640
  :include-source:
632
641
 
633
642
  from qiskit.circuit import QuantumCircuit
@@ -653,6 +662,7 @@ qubits used in computations. We need to be able to map these virtual qubits in
653
662
  manner to the "physical" qubits in an actual quantum device.
654
663
 
655
664
  .. image:: /source_images/mapping.png
665
+ :alt: Diagram illustrating how virtual qubits are mapped to physical qubits.
656
666
 
657
667
 
658
668
  By default, qiskit will do this mapping for you. The choice of mapping depends on the
@@ -700,6 +710,7 @@ and we can view this layout selection graphically using
700
710
  :func:`qiskit.visualization.plot_circuit_layout`:
701
711
 
702
712
  .. plot::
713
+ :alt: Circuit diagram output by the previous code.
703
714
  :include-source:
704
715
 
705
716
  from qiskit import QuantumCircuit, transpile
@@ -718,6 +729,7 @@ and we can view this layout selection graphically using
718
729
  - **Layout Using Optimization Level 0**
719
730
 
720
731
  .. plot::
732
+ :alt: Output from the previous code.
721
733
  :include-source:
722
734
 
723
735
  from qiskit import QuantumCircuit, transpile
@@ -737,6 +749,7 @@ and we can view this layout selection graphically using
737
749
  - **Layout Using Optimization Level 3**
738
750
 
739
751
  .. plot::
752
+ :alt: Output from the previous code.
740
753
  :include-source:
741
754
 
742
755
  from qiskit import QuantumCircuit, transpile
@@ -760,6 +773,7 @@ keyword argument, where the index labels the virtual qubit in the circuit and th
760
773
  corresponding value is the label for the physical qubit to map onto:
761
774
 
762
775
  .. plot::
776
+ :alt: Output from the previous code.
763
777
  :include-source:
764
778
 
765
779
  from qiskit import QuantumCircuit, transpile
@@ -807,6 +821,7 @@ In order to highlight this, we run a GHZ circuit 100 times, using a "bad" (disco
807
821
  ``initial_layout`` in a heavy hex coupling map:
808
822
 
809
823
  .. plot::
824
+ :alt: Diagram illustrating the previously described circuit.
810
825
 
811
826
  from qiskit import QuantumCircuit, transpile
812
827
 
@@ -816,6 +831,7 @@ In order to highlight this, we run a GHZ circuit 100 times, using a "bad" (disco
816
831
  ghz.draw(output='mpl')
817
832
 
818
833
  .. plot::
834
+ :alt: Output from the previous code.
819
835
  :include-source:
820
836
 
821
837
  import matplotlib.pyplot as plt
@@ -888,6 +904,7 @@ setting the optimization level higher:
888
904
 
889
905
 
890
906
  .. plot::
907
+ :alt: Diagram illustrating the previously described circuit.
891
908
 
892
909
  import matplotlib.pyplot as plt
893
910
  from qiskit import QuantumCircuit, transpile
@@ -900,6 +917,7 @@ setting the optimization level higher:
900
917
  ghz.draw(output='mpl')
901
918
 
902
919
  .. plot::
920
+ :alt: Output from the previous code.
903
921
  :include-source:
904
922
 
905
923
  import matplotlib.pyplot as plt
@@ -946,6 +964,7 @@ for idle time on the qubits between the execution of instructions. For example,
946
964
  circuit such as:
947
965
 
948
966
  .. plot::
967
+ :alt: Diagram illustrating the previously described circuit.
949
968
 
950
969
  from qiskit import QuantumCircuit
951
970
 
@@ -957,6 +976,7 @@ circuit such as:
957
976
  we can then call :func:`~.transpile` on it with ``scheduling_method`` set:
958
977
 
959
978
  .. plot::
979
+ :alt: Circuit diagram output by the previous code.
960
980
  :include-source:
961
981
 
962
982
  from qiskit import QuantumCircuit, transpile
@@ -976,6 +996,7 @@ account for idle time on each qubit. To get a better idea of the timing of the c
976
996
  also look at it with the :func:`.timeline.draw` function:
977
997
 
978
998
  .. plot::
999
+ :alt: Output from circuit timeline drawer.
979
1000
 
980
1001
  from qiskit.visualization.timeline import draw as timeline_draw
981
1002
 
@@ -455,6 +455,7 @@ class TranspileLayout:
455
455
  let the input circuit be:
456
456
 
457
457
  .. plot::
458
+ :alt: Circuit diagram output by the previous code.
458
459
  :include-source:
459
460
 
460
461
  from qiskit.circuit import QuantumCircuit, QuantumRegister
@@ -470,6 +471,7 @@ class TranspileLayout:
470
471
  Suppose that during the layout stage the transpiler reorders the qubits to be:
471
472
 
472
473
  .. plot::
474
+ :alt: Circuit diagram output by the previous code.
473
475
  :include-source:
474
476
 
475
477
  from qiskit import QuantumCircuit
@@ -498,6 +500,7 @@ class TranspileLayout:
498
500
  becomes:
499
501
 
500
502
  .. plot::
503
+ :alt: Circuit diagram output by the previous code.
501
504
  :include-source:
502
505
 
503
506
  from qiskit import QuantumCircuit
@@ -17,8 +17,10 @@ from __future__ import annotations
17
17
  from collections.abc import Sequence
18
18
  from typing import Type
19
19
  from fnmatch import fnmatch
20
+ import warnings
20
21
 
21
22
  from qiskit.transpiler.basepasses import TransformationPass
23
+ from qiskit.transpiler.passes.utils import control_flow
22
24
  from qiskit.dagcircuit.dagnode import DAGOpNode
23
25
  from qiskit.dagcircuit.dagcircuit import DAGCircuit
24
26
  from qiskit.converters.circuit_to_dag import circuit_to_dag
@@ -58,7 +60,7 @@ class Decompose(TransformationPass):
58
60
  output dag where ``gate`` was expanded.
59
61
  """
60
62
  # We might use HLS to synthesize objects that do not have a definition
61
- hls = HighLevelSynthesis() if self.apply_synthesis else None
63
+ hls = HighLevelSynthesis(qubits_initially_zero=False) if self.apply_synthesis else None
62
64
 
63
65
  # Walk through the DAG and expand each non-basis node
64
66
  for node in dag.op_nodes():
@@ -66,12 +68,18 @@ class Decompose(TransformationPass):
66
68
  if not self._should_decompose(node):
67
69
  continue
68
70
 
69
- if getattr(node.op, "definition", None) is None:
71
+ if node.is_control_flow():
72
+ decomposition = control_flow.map_blocks(self.run, node.op)
73
+ dag.substitute_node(node, decomposition, inplace=True)
74
+
75
+ elif getattr(node.op, "definition", None) is None:
70
76
  # if we try to synthesize, turn the node into a DAGCircuit and run HLS
71
77
  if self.apply_synthesis:
78
+ # note that node_as_dag does not include the condition, which will
79
+ # be propagated in ``substitute_node_with_dag``
72
80
  node_as_dag = _node_to_dag(node)
73
81
  synthesized = hls.run(node_as_dag)
74
- dag.substitute_node_with_dag(node, synthesized)
82
+ dag.substitute_node_with_dag(node, synthesized, propagate_condition=True)
75
83
 
76
84
  # else: no definition and synthesis not enabled, so we do nothing
77
85
  else:
@@ -123,9 +131,21 @@ class Decompose(TransformationPass):
123
131
 
124
132
 
125
133
  def _node_to_dag(node: DAGOpNode) -> DAGCircuit:
134
+ # Control flow is already handled separately, however that does not capture
135
+ # c_if, which we are treating here. We explicitly ignore the condition attribute,
136
+ # which will be handled by ``substitute_node_with_dag``, so we create a copy of the node
137
+ # and set the condition to None. Once ``c_if`` is removed for 2.0, this block can go, too.
138
+ with warnings.catch_warnings():
139
+ warnings.filterwarnings("ignore", category=DeprecationWarning)
140
+ if getattr(node.op, "condition", None) is not None:
141
+ op = node.op.copy()
142
+ op.condition = None
143
+ node = DAGOpNode(op, node.qargs, node.cargs)
144
+
145
+ # create new dag and apply the operation
126
146
  dag = DAGCircuit()
127
147
  dag.add_qubits(node.qargs)
128
148
  dag.add_clbits(node.cargs)
129
-
130
149
  dag.apply_operation_back(node.op, node.qargs, node.cargs)
150
+
131
151
  return dag
@@ -19,6 +19,7 @@ from qiskit.circuit import Gate
19
19
  from qiskit.dagcircuit import DAGCircuit
20
20
  from qiskit.transpiler.basepasses import TransformationPass
21
21
  from qiskit.transpiler.exceptions import TranspilerError
22
+ from qiskit.transpiler.passes.utils import control_flow
22
23
 
23
24
  from qiskit._accelerate.inverse_cancellation import inverse_cancellation
24
25
 
@@ -74,6 +75,7 @@ class InverseCancellation(TransformationPass):
74
75
 
75
76
  super().__init__()
76
77
 
78
+ @control_flow.trivial_recurse
77
79
  def run(self, dag: DAGCircuit):
78
80
  """Run the InverseCancellation pass on `dag`.
79
81
 
@@ -89,6 +89,7 @@ class StarPreRouting(TransformationPass):
89
89
  For example:
90
90
 
91
91
  .. plot::
92
+ :alt: Circuit diagram output by the previous code.
92
93
  :include-source:
93
94
 
94
95
  from qiskit.circuit import QuantumCircuit
@@ -47,6 +47,7 @@ class DynamicalDecoupling(TransformationPass):
47
47
  (including global phase).
48
48
 
49
49
  .. plot::
50
+ :alt: Output from the previous code.
50
51
  :include-source:
51
52
 
52
53
  import numpy as np
@@ -53,6 +53,7 @@ class PadDynamicalDecoupling(BasePadding):
53
53
  (including global phase).
54
54
 
55
55
  .. plot::
56
+ :alt: Output from the previous code.
56
57
  :include-source:
57
58
 
58
59
  import numpy as np