Files
vqe_module/README.md
DeOwl c5ece3ff37 v1.0
-- full integration with mol-edit backend
-- added readme
-- added vqe local_computational
2026-05-25 19:17:04 +03:00

199 lines
6.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Quantum Compute Modules
Репозиторий содержит набор модулей для распределённой системы квантовых вычислений. Каждый модуль представляет собой тип эксперимента, который может быть выполнен на локальных вычислительных системах.
## Архитектура модуля
Каждый модуль состоит из двух независимых компонентов:
| Компонент | Назначение |
|-----------|------------|
| **Frontend** | Пользовательский интерфейс. React SPA, компилируется в HTML, встраивается в iframe на центральном сервере. |
| **Executor** | Python модуль, который скачивается и выполняется на локальной вычислительной системе. |
## Frontend
### Режимы работы
Frontend поддерживает два режима отображения:
| Режим | Когда используется | Что показывает |
|-------|-------------------|----------------|
| `List` | В списке задач эксперимента | Краткая информация (карточка) |
| `Editor` | На странице отдельной задачи | Полный редактор с параметрами |
### API взаимодействия (postMessage)
#### Получение данных от системы
```javascript
window.addEventListener("message", (event) => {
const { type, data } = event.data;
if (type === "plugin-data") {
// data.taskData — JSON строка с данными задачи
// data.mode — "List" или "Editor"
// data.theme — "light" или "dark"
// data.simProgress — прогресс выполнения (если есть)
}
if (type === "update") {
// Сигнал обновить UI (после сохранения)
}
});
```
#### Отправка данных в систему
```javascript
// При изменении данных задачи
window.parent.postMessage({
type: "plugin-update",
data: JSON.stringify(taskData), // Данные задачи
qubits_needed: number // Требуемое количество кубит
}, "*");
// Сигнал готовности (отправляется после загрузки)
window.parent.postMessage({ type: "plugin-ready" }, "*");
```
### Обязательные экспорты
React приложение должно экспортировать компоненты с интерфейсом:
```typescript
interface TaskData {
// Определяется для каждого модуля
}
interface TaskEditorProps {
data: TaskData | undefined;
setData: (data: TaskData, qubits_needed: number) => void;
counter: number; // Инкрементируется при обновлении данных извне
simProgress: any; // Прогресс выполнения (conn.send из executor)
}
```
### Сборка
```bash
npm run build
# Результат: dist/index.html — один файл со встроенными CSS/JS
```
## Executor
Python модуль, который скачивается с сервера и выполняется на локальной ВС. Должен содержать две функции:
### prepare_data
Валидация и предобработка данных задачи. Вызывается на сервере перед помещением задачи в очередь.
```python
def prepare_data(data: dict, system_info: dict) -> dict:
```
Результаты, возвращаемые функцией, передаются затем в run_computation.
В случае ошибки в данных, функция должны поднять ошибку.
### run_computation
Выполнение вычислений на локальной ВС.
```python
def run_computation(conn, dev, data):
"""
Args:
conn: Connection объект для отправки прогресса
conn.send(dict) — отправляет сообщение на сервер
(сообщения сохраняются в simulation_result.result_data)
dev: PennyLane устройство
qml.device(dev['name'], wires=dev['wires'])
data: processed_data из prepare_data
Returns: None
"""
```
### Пример executor'а
```python
def prepare_data(data: dict, system_info: dict) -> dict:
# Валидация входных данных
if "my_param" not in data:
return {
"valid": False,
"error_message": "Отсутствует параметр my_param"
}
return {
"valid": True,
"processed_data": data,
"qubits_required": data.get("qubits", 10)
}
def run_computation(conn, dev, data):
import numpy as np
for step in range(data.get("steps", 100)):
# ... вычисления ...
# Отправка прогресса
conn.send({
"step": step,
"current_value": current_value
})
return
```
## Создание нового модуля
### Шаг 1: Создание Frontend
1. Скопируйте шаблон `new_module/` или создайте React приложение с нуля
2. Реализуйте компоненты `ListItem` и `EditorPage`
3. Реализуйте `wrapper.tsx` с обработкой postMessage
4. Соберите проект: `npm run build`
### Шаг 2: Создание Executor
1. Создайте файл `executor.py`
2. Реализуйте функцию `prepare_data`
3. Реализуйте функцию `run_computation`
### Шаг 3: Регистрация модуля
Через API центрального сервера:
```bash
curl -X POST https://quantum-backend/experiment/types \
-F "name=Название модуля" \
-F "description=Описание модуля" \
-F "file_frontend=@dist/index.html" \
-F "file_comp_system=@executor.py"
```
## Список модулей
| Модуль | Описание | Статус |
|--------|----------|--------|
| `vqe` | Расчёт энергии основного состояния молекул | ✅ Готов |
## Шаблон нового модуля
```bash
git clone https://git.deowl.ru/vkrb/vqe_module
cd quantum-modules
cp -r new_module my_module
# Редактируем frontend и executor
# Регистрируем через API
```