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
.
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}) ) |
Xθ | 1 | ( R_x(\frac{\pi \theta}{180}) ) |
Yθ | 1 | ( R_y(\frac{\pi \theta}{180}) ) |
Zθ | 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 )