PyQCISim — это симулятор на основе Python, разработанный Zhihao Wu и Xiang Fu из QUANTA@NUDT.
На самом деле PyQCISim представляет собой скорее парсер QCIS, чем симулятор. PyQCISim реализует парсер QCIS, который переводит файлы QCIS во внутреннее представление квантовых операций. Эти квантовые операции затем отправляются другому симулятору для моделирования эволюции квантового состояния. В настоящее время в качестве бэкенда используется симулятор матрицы плотности с открытым исходным кодом QuantumSim. В будущем будут добавлены другие симуляторы квантовых состояний.
pip install pyqcisim
Клонируйте (или скачайте) этот репозиторий на свой компьютер и установите его с помощью следующих команд:
git clone https://gitee.com/hpcl_quanta/pyqcisim
cd pyqcisim
pip install -e .
Обратите внимание: если на вашем компьютере также установлен python2, вам может потребоваться заменить pip
на pip3
.
Проверьте установку в корневом каталоге pyqcisim:
pytest -ra
Успешная установка должна увидеть все пройденные тесты.
Обратите внимание, если на вашем компьютере также установлен python2, вам может потребоваться заменить pytest
на pytest-3
.
Вы можете использовать файл pyqcisim/simulate_qcis.py
, чтобы напрямую смоделировать файл QCIS:
python <путь-к-pyqcisim/simulate_qcis.py> <файл-qcis>
Вы можете использовать следующую команду, чтобы увидеть различные параметры:
python <путь-к-pyqcisim/simulate_qcis.py> --help
Сначала импортируйте симулятор, создайте экземпляр PyQCISim
и скомпилируйте данную программу QCIS:
from pyqcisim.simulator import *
pyqcisim = PyQCISim()
prog = """
X qA
X qB
CNOT qA qB
M qA
M qB
"""
pyqcisim.compile(prog)
Затем вы можете начать моделировать программу, используя либо режим one_shot
:
msmt_results = pyqcisim.simulate()
print("msmt_results: ", msmt_results)
либо режим final_state
:
final_state = pyqcisim.simulate(mode="final_state")
print("final_state: ", final_state)
Эти два режима имеют некоторые отличия:
one_shot
num_shots
при вызове simulate()
.(['qA', 'qB'], {'00': 0, '01': 1000, '10': 0, '11': 0})
final_state
M qB
в приведенном выше коде:
{'classical': {'qA': 1}, 'quantum': (['qB'], array([1.+0.j, 0.+0.j]))}
Если у вас есть какие-либо предложения или вы столкнулись с какими-либо проблемами при использовании PyQCISim, пожалуйста, не стесняйтесь опубликовать вопрос на https://gitee.com/hpcl_quanta/pyqcisim/issues, или отправьте электронное письмо Xiang Fu (xiangfu at quanta dot org dot cn).
Обратите внимание, что PyQCISim поддерживает расширенный набор инструкций QCIS, поддерживаемых current quantumcomputer.ac.cn. Пользователь должен обратить внимание на инструкции, не поддерживаемые quantumcomputer.ac.cn.
Далее мы используем следующие соглашения:
[qubit]
, [control_qubit]
, [target_qubit]
являются IDENTIFIERами[theta]
$\in [-\pi, \pi]$[phi]
$\in [-\pi, \pi]$| ------------------------------------ | ------------------------------------------ | | X [qubit] | $R_x(\pi)$ | | Y [qubit] | $R_y(\pi)$ | | Z [qubit] | $R_z(\pi)$ | | H [qubit] | $\frac{1}{\sqrt{2}}[[1, 1], [1, -1]]$ | | S [qubit] | $e^{\frac{\pi}{4}}R_z(\frac{\pi}{2})$ | | SD [qubit] | $e^{-\frac{\pi}{4}}R_z(-\frac{\pi}{2})$ | | T [qubit] | $e^{\frac{\pi}{8}}R_z(\frac{\pi}{4})$ | | TD [qubit] | $e^{-\frac{\pi}{8}}R_z(-\frac{\pi}{4})$ | | X2P [qubit] | $R_x(\frac{\pi}{2})$ | | X2M [qubit] | $R_x(-\frac{\pi}{2})$ | | Y2P [qubit] | $R_y(\frac{\pi}{2})$ | | Y2M [qubit] | $R_y(-\frac{\pi}{2})$ | | RX [qubit] [theta] | $R_x(\theta)$ | | RY [qubit] [theta] | $R_y(\theta)$ | | RZ [qubit] [theta] | $R_z(\theta)$ | | XY [qubit] [phi] | $R_{\hat{n}}(\pi), \hat{n}=[\cos{\phi}, \sin{\phi}, 0]$ | | XY2P [qubit] [phi] | $R_{\hat{n}}(\frac{\pi}{2}), \hat{n}=[\cos{\phi}, \sin{\phi}, 0]$ | | XY2M [qubit] [phi] | $R_{\hat{n}}(-\frac{\pi}{2}), \hat{n}=[\cos{\phi}, \sin{\phi}, 0]$ | | RXY [qubit] [phi] [theta] | $R_{\hat{n}}(\theta), \hat{n}=[\cos{\phi}, \sin{\phi}, 0]$ | | XYARB [qubit] [phi] [theta] | То же, что и RYX | | Z2P [qubit] | $R_z(\frac{\pi}{2})$ | | Z2M [quбит] | $R_z(-\frac{\pi}{2})$ | | Z4P [quбит] | $R_z(\frac{\pi}{4})$ | | Z4M [quбит] | $R_z(-\frac{\pi}{4})$ |
Формат инструкции | Описание |
---|---|
CZ [control_qubit] [target_qubit] | Операция Control-Z |
CNOT [control_qubit] [target_qubit] | Операция Control-NOT |
SWP [control_qubit] [target_qubit] | Операция SWAP |
SSWP [control_qubit] [target_qubit] | $\sqrt{\text{SWAP}}$ операция |
ISWP [control_qubit] [target_qubit] | $i$ SWAP операция |
SISWP [control_qubit] [target_qubit] | $\sqrt{i \text{SWAP}}$ операция |
Формат инструкции | Описание | Примечание |
---|---|---|
Инструкции измерения | Нет данных | Нет данных |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )