-- full integration with mol-edit backend
-- added readme
-- added vqe local_computational
This commit is contained in:
2026-05-25 19:17:04 +03:00
parent 76fe1c4294
commit c5ece3ff37
16 changed files with 1134 additions and 163 deletions

198
README.md Normal file
View File

@@ -0,0 +1,198 @@
# 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
```