1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/quingo-pyqcas

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Симулятор архитектуры управления квантовыми вычислительными системами на Python (PyQCAS)

Python-совместимый симулятор eQASM без моделирования поведения времени.

PyQCAS первоначально назывался как PyCACTUS.

Установка

pip install pyqcas

Использование

from pyqcas.quantum_coprocessor import Quantum_coprocessor
qcas = Quantum_coprocessor()
qcas.upload_program(<путь_к_eqasm_file>)
qcas.execute()
result = qcas.read_result()

Возвращаемый результат представляет собой двоичный блок данных, хранящийся в памяти qcas.

Для отслеживания прогресса симуляции можно использовать следующий метод:

qcas.set_verbose(True)

Для просмотра трассировки выполнения можно установить уровень логгирования:

qcas.set_log_level(log_level=logging.DEBUG)

Разрешенные уровни логгирования включают DEBUG, INFO, WARNING, ERROR, CRITICAL.

Краткое описание eQASM:

PyQCAS поддерживает набор команд eQASM с расширением для работы с плавающей запятой. Формальное определение архитектуры eQASM можно найти по адресу eQASM Specification.

Следующие правила применимы к eQASM:

  • Все символы являются регистронезависимыми, и допускается наличие лишних пробелов между идентификаторами.
  • Хэш-маркер (#) начинает строковый комментарий.

Обзор команд eQASM представлен в следующей таблице: ВАЖНО, будучи функциональным симулятором, PyQCAS не моделирует время выполнения квантовых инструкций. Все инструкции QWAIT(R) и предварительные интервалы квантовых пакетов игнорируются во время симуляции.Для операций Q_Op в квантовом пакете, PyQCAS также предварительно определяет набор квантовых операций следующим образом:

Название Количество целевых кубитов Описание
H 1 Гейт Хадамара
X 1 ( R_x(\pi) )
Y 1 ( R_y(\pi) )
Z 1 ( R_z(\pi) )
S 1 ( R_z(\frac{\pi}{2}) )
Sdg 1 ( R_z(-\frac{\pi}{2}) )
T 1 ( R_z(\frac{\pi}{4}) )
Tdg 1 ( R_z(-\frac{\pi}{4}) )
1 ( R_x(\frac{\pi \theta}{180}) )
1 ( R_y(\frac{\pi \theta}{180}) )
1 ( R_z(\frac{\pi \theta}{180}) )
X-mθ 1 ( R_x(-\frac{\pi \theta}{180}) )
Y-mθ 1 ( R_y(-\frac{\pi \theta}{180}) )
Z-mθ 1 ( R_z(-\frac{\pi \theta}{180}) )
RXθ 1 То же самое что Xθ
RYθ 1 То же самое что Yθ
RZθ 1 То же самое что Zθ
CZ 2 Управляемый фазовый гейт
measure 1 Измерение

Примечание: (\theta) — это значение с плавающей запятой в диапазоне ([0, 180]), десятичная точка в котором заменена символом (_). Например, X175_5 представляет собой ( R_x(\frac{\pi \cdot 175.5}{180}) ), а Xm175_5 — ( R_x(-\frac{\pi \cdot 175.5}{180}) ).Так как eQASM не поддерживает значения с плавающей запятой, которые могут потребоваться для квантового программирования, PyQCAS также поддерживает расширение с использованием следующих команд FP:

Формат Официальное определение Объяснение
FCVT.W.S rd, fs R[rd](31:0) = integer(F[fs]) Преобразует 32-битное число с плавающей запятой в регистре fs в Yöntem 32-битное знаковое целое число и сохраняет его в регистре rd.
FCVT.S.W fd, rs F[fd] = float(R[rs](31:0)) Преобразует 32-битное знаковое целое число в регистре rs в 32-битное число с плавающей запятой и сохраняет его в регистре fd.
FLW fd, imm(rs) F[fd] <- memory(R[rs] + imm) Загружает 32-битное число с плавающей запятой из адреса памяти imm + rs и сохраняет его в регистре плавающей запятой fd.
FSW fs, imm(rs) F[fs] -> memory(R[rs] + imm) Сохраняет 32-битное число с плавающей запятой из регистра плавающей запятой fs в адрес памяти imm + rs.
FADD.S fd, fs, ft F[fd] = F[fs] + F[ft] Добавление с плавающей запятой.
Формат Официальное определение Объяснение
FCVT.W.S rd, fs R[rd](31:0) = integer(F[fs]) Преобразует 32-битное число с плавающей запятой в регистре fs в 32-битное знаковое целое число и сохраняет его в регистре rd.
FCVT.S.W fd, rs F[fd] = float(R[rs](31:0)) Преобразует 32-битное знаковое целое число в регистре rs в 32-битное число с плавающей запятой и сохраняет его в регистре fd.
FLW fd, imm(rs) F[fd] <- memory(R[rs] + imm) Загружает 32-битное число с плавающей запятой из адреса памяти imm + rs и сохраняет его в регистре плавающей запятой fd.
FSW fs, imm(rs) F[fs] -> memory(R[rs] + imm) Сохраняет 32-битное число с плавающей запятой из регистра плавающей запятой fs в адрес памяти imm + rs.
FADD.S fd, fs, ft F[fd] = F[fs] + F[ft] Добавляет два числа с плавающей запятой и сохраняет результат в регистр fd.
Mnemonic Description Comment
---------------------------------- ------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------
FLT. S rd, fs, ft R[rd] = F[fs] < F[ft] Устанавливает rd, когда значение в регистре fs меньше значения в регистре ft.
FLE. S rd, fs, ft R[rd] = F[fs] <= F[ft] Устанавливает rd, когда значение в регистре fs меньше либо равно значению в регистре ft.
FMV. X. W rd, fs R[rd] = F[fs] Перемещает одиночное точность значение из FPU регистра fs, представленное в соответствии с IEEE 754-2008, в нижние 32 бита GPR rd.
FSUB. S fd, fs, ft F[fd] = F[fs] - F[ft] Вычитание с плавающей запятой.
FMUL. S fd, fs, ft F[fd] = F[fs] * F[ft] Умножение с плавающей запятой.
FDIV. S fd, fs, ft F[fd] = F[fs] / F[ft] Деление с плавающей запятой.
FEQ. S rd, fs, ft R[rd] = F[fs] == F[ft] Устанавливает значение rd, если fs равно ft.
| `FMV.W.X fd, rs`                       | `F[fd] = R[rs]`                                      | Перемещает одиночное-точности значение, закодированное в соответствии с IEEE 754-2008, из нижних 32 бит GPR `rs` в FPU регистр `fd`. НОТЭ: это прямое, битовое перемещение.  

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/quingo-pyqcas.git
git@api.gitlife.ru:oschina-mirror/quingo-pyqcas.git
oschina-mirror
quingo-pyqcas
quingo-pyqcas
master