Skip to content

ValueError: too many subscripts in einsum for a circuit containing controlled RZXGate #11989

@jiannanWang

Description

@jiannanWang

Environment

  • Qiskit version: 1.0.2
  • Python version: 3.11.8
  • Operating system: Ubuntu 22.04.3 LTS

What is happening?

Running the below code results in the exception copied in the "What should happen" section. I would expect the code to run without error.

This crash happens for num_ctrl_qubits>=9. For num_ctrl_qubits<9, the program hangs for a long time and I need to kill the process.

How can we reproduce the issue?

from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister
from qiskit.circuit.library.standard_gates import RZXGate

qr = QuantumRegister(11, name='qr')
cr = ClassicalRegister(11, name='cr')
qc = QuantumCircuit(qr, cr, name='qc')
qc.append(RZXGate(0.7773868957129396).control(num_ctrl_qubits=9, ctrl_state=0).power(1), qargs=qr, cargs=[])

What should happen?

Traceback (most recent call last):
  File "/mnt/tests/reproduction/reproduce_too_many_subscripts_in_einsum.py", line 7, in <module>
    qc.append(RZXGate(0.7773868957129396).control(num_ctrl_qubits=9, ctrl_state=0).power(1), qargs=qr, cargs=[])
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/anaconda3/envs/qiskit1.0.2/lib/python3.11/site-packages/qiskit/circuit/gate.py", line 81, in power
    return UnitaryGate(Operator(self).power(exponent), label=f"{self.name}^{exponent}")
                       ^^^^^^^^^^^^^^
  File "/root/anaconda3/envs/qiskit1.0.2/lib/python3.11/site-packages/qiskit/quantum_info/operators/operator.py", line 97, in __init__
    self._data = self._init_instruction(data).data
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/anaconda3/envs/qiskit1.0.2/lib/python3.11/site-packages/qiskit/quantum_info/operators/operator.py", line 707, in _init_instruction
    op._append_instruction(instruction)
  File "/root/anaconda3/envs/qiskit1.0.2/lib/python3.11/site-packages/qiskit/quantum_info/operators/operator.py", line 785, in _append_instruction
    self._append_instruction(instruction.operation, qargs=new_qargs)
  File "/root/anaconda3/envs/qiskit1.0.2/lib/python3.11/site-packages/qiskit/quantum_info/operators/operator.py", line 762, in _append_instruction
    op = self.compose(
         ^^^^^^^^^^^^^
  File "/root/anaconda3/envs/qiskit1.0.2/lib/python3.11/site-packages/qiskit/quantum_info/operators/operator.py", line 505, in compose
    Operator._einsum_matmul(tensor, mat, indices, shift, right_mul), final_shape
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/anaconda3/envs/qiskit1.0.2/lib/python3.11/site-packages/qiskit/quantum_info/operators/operator.py", line 693, in _einsum_matmul
    return np.einsum(tensor, indices_tensor, mat, indices_mat)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/anaconda3/envs/qiskit1.0.2/lib/python3.11/site-packages/numpy/core/einsumfunc.py", line 1371, in einsum
    return c_einsum(*operands, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: too many subscripts in einsum

Any suggestions?

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions