ProjectQ - В какой части объекта управляемого строба забиты контрольные биты - PullRequest
0 голосов
/ 13 февраля 2019

Я пытался разложить объекты projectQ, и мне удалось разложить неуправляемые ворота и поврежденные ворота.Но я заметил, что объект контролируемой версии шлюза в точности совпадает с объектом этого шлюза.

Код, генерирующий эти объекты:

  eng = MainEngine()
  q = eng.allocate_qubit()
  p = eng.allocate_qubit()
  c = eng.allocate_qubit()
  X | q
  CNOT | (p,q)

Это объект XGate

{'_control_qubits': [],
 '_engine': <__main__.MainEngine object at 0x7fc323e4d198>,
 '_qubits': ([<projectq.types._qubit.WeakQubitRef object at 0x7fc30b0a3ef0>],),
 'gate': <projectq.ops._gates.XGate object at 0x7fc316778048>,
 'tags': []}

И это ворота CNOT, которые совпадают с ControlledGate (XGate)

{'_control_qubits': [],
 '_engine': <__main__.MainEngine object at 0x7fc323e4d198>,
 '_qubits': ([<projectq.types._qubit.WeakQubitRef object at 0x7fc30b0b1080>],),
 'gate': <projectq.ops._gates.XGate object at 0x7fc316778048>,
 'tags': []}

Оба не имеют контрольных кубитов, и кажется, что контрольные ворота потеряли контрольный кубит,

Есть идеи, где хранится контрольный кубит?

1 Ответ

0 голосов
/ 26 февраля 2019

Управляющие кубиты добавляются к команде только после того, как она получена ControlEngine дальше по цепочке после MainEngine.Подробнее о реализации см. «3.2.1 Реализация мета-инструкций» здесь .

Для реализации такого механизма тестирования, как этот, можно использовать для проверки правильности добавления управляющих кубитов.после MainEngine вы можете сделать следующее:

test_eng = Testing(BasicEngine) # Or CommandPrinter
eng = projectq.MainEngine(engine_list=[test_eng])
...