Skip to content

Optimization level 2 and 3 result in a deeper circuit with 1.3.0rc1 and main branch #13438

@t-imamichi

Description

@t-imamichi

Environment

  • Qiskit version: 1.3.0rc1, main branch
  • Python version: 3.12.7
  • Operating system: 15.1

What is happening?

Transpilation with optimization level 2 and 3 result in a deeper circuit than optimization level 1.
The circuit of level 2 is deeper than that of level 1.
The circuit of level 3 is deeper than that of level 2.
This does not happen with Qiskit 1.2.4.

How can we reproduce the issue?

from qiskit import generate_preset_pass_manager, QuantumCircuit

qc = QuantumCircuit(2)
qc.cz(0, 1)
qc.sx([0, 1])
qc.cz(0, 1)

for level in [1, 2, 3]:
    pm = generate_preset_pass_manager(optimization_level=level, basis_gates=["rz", "rzz", "sx", "x", "rx"])
    qc2 = pm.run(qc)
    print('optimization level', level)
    print(qc2)
    print()
# 1.2.4
optimization level 1
global phase: π
     ┌─────────┐           ┌─────────┐┌─────────┐
q_0: ┤ Rz(π/2) ├─■─────────┤ Rx(π/2) ├┤ Rz(π/2) ├─■─────────
     ├─────────┤ │ZZ(-π/2) ├─────────┤├─────────┤ │ZZ(-π/2)
q_1: ┤ Rz(π/2) ├─■─────────┤ Rx(π/2) ├┤ Rz(π/2) ├─■─────────
     └─────────┘           └─────────┘└─────────┘

optimization level 2
global phase: π
     ┌─────────┐           ┌─────────┐┌─────────┐
q_0: ┤ Rz(π/2) ├─■─────────┤ Rx(π/2) ├┤ Rz(π/2) ├─■─────────
     ├─────────┤ │ZZ(-π/2) ├─────────┤├─────────┤ │ZZ(-π/2)
q_1: ┤ Rz(π/2) ├─■─────────┤ Rx(π/2) ├┤ Rz(π/2) ├─■─────────
     └─────────┘           └─────────┘└─────────┘

optimization level 3
global phase: π
     ┌─────────┐           ┌─────────┐┌─────────┐
q_0: ┤ Rz(π/2) ├─■─────────┤ Rx(π/2) ├┤ Rz(π/2) ├─■─────────
     ├─────────┤ │ZZ(-π/2) ├─────────┤├─────────┤ │ZZ(-π/2)
q_1: ┤ Rz(π/2) ├─■─────────┤ Rx(π/2) ├┤ Rz(π/2) ├─■─────────
     └─────────┘           └─────────┘└─────────┘
# 1.3.0rc1 and main branch
optimization level 1
global phase: 7π/4
               ┌──────────┐   ┌────┐            ┌──────────┐
q_0: ─■────────┤ Rz(-π/2) ├───┤ √X ├───■────────┤ Rz(-π/2) ├
      │ZZ(π/2) ├──────────┤┌──┴────┴─┐ │ZZ(π/2) ├──────────┤
q_1: ─■────────┤ Rz(-π/2) ├┤ Rx(π/2) ├─■────────┤ Rz(-π/2) ├
               └──────────┘└─────────┘          └──────────┘

optimization level 2
global phase: 3π/2
                                                     ┌──────────┐ ┌─────────┐ ┌─────────┐              ┌──────────┐  ┌─────────┐┌─────────┐
q_0: ──────────────────────────────────────■─────────┤ Rz(-π/2) ├─┤ Rx(π/2) ├─┤ Rz(π/2) ├───■──────────┤ Rz(-π/2) ├──┤ Rx(π/2) ├┤ Rz(π/2) ├
     ┌──────────┐┌─────────┐┌────────────┐ │ZZ(π/2) ┌┴──────────┴┐├─────────┤┌┴─────────┴─┐ │ZZ(π/2) ┌─┴──────────┴─┐└┬───────┬┘└─────────┘
q_1: ┤ Rz(-π/2) ├┤ Rx(π/2) ├┤ Rz(1.6719) ├─■────────┤ Rz(1.4697) ├┤ Rx(π/2) ├┤ Rz(1.6719) ├─■────────┤ Rz(-0.10111) ├─┤ Rx(π) ├────────────
     └──────────┘└─────────┘└────────────┘          └────────────┘└─────────┘└────────────┘          └──────────────┘ └───────┘

optimization level 3
global phase: π
     ┌─────────────┐┌────┐  ┌───────┐   ┌────┐┌────────────┐                                      ┌──────────┐┌─────────┐   ┌────┐  ┌──────────┐»
q_0: ┤ Rz(-1.9513) ├┤ √X ├──┤ Rz(π) ├───┤ √X ├┤ Rz(11.376) ├─────────────────────────────■────────┤ Rz(-π/2) ├┤ Rz(π/2) ├───┤ √X ├──┤ Rz(3π/2) ├»
     └─┬─────────┬─┘├────┤┌─┴───────┴──┐├────┤└┬──────────┬┘┌─────────┐┌────┐┌─────────┐ │ZZ(π/2) ├─────────┬┘└──┬────┬─┘┌──┴────┴─┐├──────────┤»
q_1: ──┤ Rz(π/2) ├──┤ √X ├┤ Rz(3.2427) ├┤ √X ├─┤ Rz(5π/2) ├─┤ Rz(π/2) ├┤ √X ├┤ Rz(π/2) ├─■────────┤ Rz(π/2) ├────┤ √X ├──┤ Rz(π/2) ├┤ Rx(-π/2) ├»
       └─────────┘  └────┘└────────────┘└────┘ └──────────┘ └─────────┘└────┘└─────────┘          └─────────┘    └────┘  └─────────┘└──────────┘»
«          ┌────┐    ┌────────┐                                                                        ┌──────────┐┌─────────┐   ┌────┐  ┌──────────┐»
«q_0: ─────┤ √X ├────┤ Rz(3π) ├───────────────────────────────────────────────────────────────■────────┤ Rz(-π/2) ├┤ Rz(π/2) ├───┤ √X ├──┤ Rz(3π/2) ├»
«     ┌────┴────┴───┐└─┬────┬─┘┌────────────┐┌────┐┌────────────┐┌─────────┐┌────┐┌─────────┐ │ZZ(π/2) ├─────────┬┘└──┬────┬─┘┌──┴────┴─┐├──────────┤»
«q_1: ┤ Rz(-3.1314) ├──┤ √X ├──┤ Rz(4.6118) ├┤ √X ├┤ Rz(10.894) ├┤ Rz(π/2) ├┤ √X ├┤ Rz(π/2) ├─■────────┤ Rz(π/2) ├────┤ √X ├──┤ Rz(π/2) ├┤ Rx(-π/2) ├»
«     └─────────────┘  └────┘  └────────────┘└────┘└────────────┘└─────────┘└────┘└─────────┘          └─────────┘    └────┘  └─────────┘└──────────┘»
«       ┌────┐  ┌────────┐
«q_0: ──┤ √X ├──┤ Rz(2π) ├────────────────────────────────
«     ┌─┴────┴─┐└─┬────┬─┘┌──────────┐┌────┐┌────────────┐
«q_1: ┤ Rz(-π) ├──┤ √X ├──┤ Rz(3π/2) ├┤ √X ├┤ Rz(7.7529) ├
«     └────────┘  └────┘  └──────────┘└────┘└────────────┘

What should happen?

Circuits of level 2 and 3 should be the same size as that of level 1 to be compatible with 1.2.4.

Any suggestions?

No response

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingmod: transpilerIssues and PRs related to Transpiler

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions