I tried to compile a Qiskit circuit to QIR and it failed.
┌─────────────────┐
q: ┤ Initialize(1,0) ├
└─────────────────┘
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[8], line 1
----> 1 to_qir_module(circuit)
File ~/ab/demos/20230404/venv/lib/python3.9/site-packages/qiskit_qir/translate.py:60, in to_qir_module(circuits, profile, **kwargs)
58 module = QiskitModule.from_quantum_circuit(circuit, llvm_module)
59 visitor = BasicQisVisitor(profile, **kwargs)
---> 60 module.accept(visitor)
61 entry_points.append(visitor.entry_point)
62 err = llvm_module.verify()
File ~/ab/demos/20230404/venv/lib/python3.9/site-packages/qiskit_qir/elements.py:104, in QiskitModule.accept(self, visitor)
102 visitor.visit_qiskit_module(self)
103 for element in self._elements:
--> 104 element.accept(visitor)
105 visitor.record_output(self)
106 visitor.finalize()
File ~/ab/demos/20230404/venv/lib/python3.9/site-packages/qiskit_qir/elements.py:38, in _Instruction.accept(self, visitor)
37 def accept(self, visitor):
---> 38 visitor.visit_instruction(self._instruction, self._qargs, self._cargs)
File ~/ab/demos/20230404/venv/lib/python3.9/site-packages/qiskit_qir/visitor.py:355, in BasicQisVisitor.visit_instruction(self, instruction, qargs, cargs, skip_condition)
351 elif instruction.definition:
352 _log.debug(
353 f"About to process composite instruction {instruction.name} with qubits {qargs}"
354 )
--> 355 self.process_composite_instruction(instruction, qargs, cargs)
356 else:
357 raise ValueError(
358 f"Gate {instruction.name} is not supported. \
359 Please transpile using the list of supported gates: {_SUPPORTED_INSTRUCTIONS}."
360 )
File ~/ab/demos/20230404/venv/lib/python3.9/site-packages/qiskit_qir/visitor.py:206, in BasicQisVisitor.process_composite_instruction(self, instruction, qargs, cargs)
202 mapped_clbits = [cargs[subcircuit.clbits.index(i)] for i in i_cargs]
203 _log.debug(
204 f"Processing sub-instruction {inst.name} with mapped qubits {mapped_qbits}"
205 )
--> 206 self.visit_instruction(inst, mapped_qbits, mapped_clbits)
File ~/ab/demos/20230404/venv/lib/python3.9/site-packages/qiskit_qir/visitor.py:355, in BasicQisVisitor.visit_instruction(self, instruction, qargs, cargs, skip_condition)
351 elif instruction.definition:
352 _log.debug(
353 f"About to process composite instruction {instruction.name} with qubits {qargs}"
354 )
--> 355 self.process_composite_instruction(instruction, qargs, cargs)
356 else:
357 raise ValueError(
358 f"Gate {instruction.name} is not supported. \
359 Please transpile using the list of supported gates: {_SUPPORTED_INSTRUCTIONS}."
360 )
File ~/ab/demos/20230404/venv/lib/python3.9/site-packages/qiskit_qir/visitor.py:206, in BasicQisVisitor.process_composite_instruction(self, instruction, qargs, cargs)
202 mapped_clbits = [cargs[subcircuit.clbits.index(i)] for i in i_cargs]
203 _log.debug(
204 f"Processing sub-instruction {inst.name} with mapped qubits {mapped_qbits}"
205 )
--> 206 self.visit_instruction(inst, mapped_qbits, mapped_clbits)
File ~/ab/demos/20230404/venv/lib/python3.9/site-packages/qiskit_qir/visitor.py:357, in BasicQisVisitor.visit_instruction(self, instruction, qargs, cargs, skip_condition)
355 self.process_composite_instruction(instruction, qargs, cargs)
356 else:
--> 357 raise ValueError(
358 f"Gate {instruction.name} is not supported. \
359 Please transpile using the list of supported gates: {_SUPPORTED_INSTRUCTIONS}."
360 )
ValueError: Gate disentangler_dg is not supported. Please transpile using the list of supported gates: ['barrier', 'ccx', 'cx', 'cz', 'h', 'id', 'm', 'measure', 'reset', 'rx', 'ry', 'rz', 's', 'sdg', 'swap', 't', 'tdg', 'x', 'y', 'z', 'delay'].
I suppose this happens because the disentangler_dg is contained within the initialize command above:
┌─────────────────┐
q: ─|0>─┤ disentangler_dg ├
└─────────────────┘
Unfortunately, I'm not familiar with this gate and have a hard time tracking it in the code of qiskit.
Additionally, it is worth noting that the other basis states are compiled just fine: