План выполнения: BornBreak
2026-02-07 — План выполнения: BornBreak
Связано с дневником: 2026-02-07
Связано с рефлексией: Пилот‑волна и ML: траектории без мистики
Коротко: LLM‑исполняемый, полностью автоматизируемый план: скелет GitHub‑проекта, поиск сырых датасетов попаданий двухщелевого эксперимента и старт IBM Quantum статистики.
Содержание
- 0. Контекст и принципы исполнения
- 1. Переменные и соглашения
- 2. Фаза A — скелет GitHub‑проекта (структура + README + Python)
- 3. Фаза B — Поиск сырых датасетов попаданий двухщелевого эксперимента
- 4. Фаза C — IBM Quantum статистика (старт “завтра”)
- 5. Критерии готовности (готовность к активной фазе)
- 6. Связи
0. Контекст и принципы исполнения
- Всё должно быть автоматизируемо (только команды/скрипты).
- Каждый шаг описан так, чтобы LLM/агент мог выполнить его без ручных действий.
- Любые внешние зависимости (токены, ключи) задаются через переменные окружения.
1. Переменные и соглашения
Задать один раз перед запуском:
export PROJECT="bornbreak"
export ORG="sapsan14"
export ROOT="/workspace/${PROJECT}"
export PYTHON="python3"
export VENV=".venv"
Проверка:
echo "$PROJECT $ORG $ROOT"
2. Фаза A — скелет GitHub‑проекта (структура + README + Python)
A1. Создать удалённый репозиторий и локальную копию
- Команда:
gh repo create "$ORG/$PROJECT" --public --confirm --clone cd "$PROJECT" - Проверка:
git status -sb - Артефакт: локальный репозиторий в
$ROOT.
A2. Поднять Python‑окружение
- Команды:
$PYTHON -m venv "$VENV" source "$VENV/bin/activate" python -m pip install -U pip - Проверка:
python -V pip -V
A3. Создать структуру проекта
- Команда:
mkdir -p src/bornbreak data/raw data/interim data/processed data/sources \ notebooks scripts reports/figures docs tests touch src/bornbreak/__init__.py - Проверка:
$PYTHON - <<'PY'
from pathlib import Path for root in [“src”, “data”, “scripts”]: print(root) base = Path(root) for p in sorted(base.rglob(”*”)): if p.is_dir() and len(p.relative_to(base).parts) <= 2: print(” ”, p) PY
### A4. Базовые файлы конфигурации и документации
**1) pyproject.toml (зависимости — без фиксации версий):**
```bash
cat > pyproject.toml <<'PYPROJECT'
[project]
name = "bornbreak"
version = "0.1.0"
description = "Searching for quantum non-equilibrium via data + ML"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
"numpy",
"pandas",
"scipy",
"matplotlib",
"seaborn",
"scikit-learn",
"qiskit",
"qiskit-ibm-runtime",
"jupyterlab",
"requests",
]
[project.optional-dependencies]
dev = ["pytest", "ruff", "black"]
PYPROJECT
2) README.md (каркас):
cat > README.md <<'README'
# BornBreak — Searching for Quantum Non-Equilibrium
**Goal:** test for ultra-small deviations from the Born rule using raw
interference data, Bell correlations, and IBM Quantum measurements.
## Pipeline (high level)
1. Collect raw hits / measurement outcomes.
2. Define null model: P0(x) = |psi(x)|^2.
3. Fit deviation model: P(x) = |psi(x)|^2 (1 + eps f_theta(x)).
4. Run interpretable ML to detect residual structure.
5. Report bounds on eps and diagnostic plots.
## Data sources (tracked)
- data/sources/source_registry.md
## Quick start
```bash
python -m venv .venv && source .venv/bin/activate
pip install -U pip
pip install -e .[dev]
README
**3) .gitignore:**
```bash
cat > .gitignore <<'GITIGNORE'
.venv/
__pycache__/
.pytest_cache/
.DS_Store
data/raw/
data/processed/
data/interim/
GITIGNORE
A5. Каркас Python‑модулей
1) src/bornbreak/io.py
cat > src/bornbreak/io.py <<'PY'
from pathlib import Path
import json
import pandas as pd
DATA_ROOT = Path("data")
def read_hits_csv(path: str) -> pd.DataFrame:
"""Load raw hit data (event_id, x, y, t)."""
return pd.read_csv(path)
def write_json(path: str, obj: dict) -> None:
Path(path).parent.mkdir(parents=True, exist_ok=True)
with open(path, "w", encoding="utf-8") as f:
json.dump(obj, f, ensure_ascii=False, indent=2)
PY
2) src/bornbreak/born_rule.py
cat > src/bornbreak/born_rule.py <<'PY'
import numpy as np
def born_probability(psi: np.ndarray) -> np.ndarray:
"""Return |psi|^2 normalized to 1."""
p = np.abs(psi) ** 2
return p / p.sum()
PY
3) src/bornbreak/ibm_quantum.py
cat > src/bornbreak/ibm_quantum.py <<'PY'
import os
from datetime import datetime
from pathlib import Path
from qiskit_ibm_runtime import QiskitRuntimeService, Sampler
def save_account_from_env() -> None:
token = os.environ.get("QISKIT_IBM_TOKEN")
if not token:
raise RuntimeError("QISKIT_IBM_TOKEN is not set")
QiskitRuntimeService.save_account(
channel="ibm_quantum",
token=token,
set_as_default=True,
overwrite=True,
)
def save_counts(path: str, counts: dict, meta: dict) -> None:
Path(path).parent.mkdir(parents=True, exist_ok=True)
meta = dict(meta)
meta["timestamp"] = datetime.utcnow().isoformat() + "Z"
out = {"counts": counts, "meta": meta}
import json
Path(path).write_text(json.dumps(out, ensure_ascii=False, indent=2), encoding="utf-8")
PY
A6. Первый коммит скелета
- Команды:
git add . git commit -m "Initialize BornBreak skeleton" git push -u origin main - Проверка:
git status -sb
3. Фаза B — Поиск сырых датасетов попаданий двухщелевого эксперимента
B1. Реестр источников
- Команда:
cat > data/sources/source_registry.md <<'MD'
Source Registry — raw double-slit hits
| Source | Type | Link | Status | Notes |
|---|---|---|---|---|
| MD |
- **Артефакт:** `data/sources/source_registry.md`
### B2. GitHub‑поиск (автоматически)
- **Команда (поиск репозиториев):**
```bash
gh search repos "double slit dataset" --limit 100 --json nameWithOwner,description,url,updatedAt,stargazerCount > data/sources/github_repos.json
gh search repos "double slit experiment raw data" --limit 100 --json nameWithOwner,description,url,updatedAt,stargazerCount >> data/sources/github_repos.json
- Обработка (фильтр по ключам):
$PYTHON - <<'PY'
import json, re, sys from pathlib import Path
raw = Path(“data/sources/github_repos.json”).read_text() items = [json.loads(line) if line.startswith(”{”) else None for line in raw.splitlines()] items = [i for i in items if isinstance(i, dict)] keys = re.compile(r”raw|hit|single|slit|interfer”, re.I) hits = [i for i in items if keys.search(i.get(“description”) or "")] Path(“data/sources/github_repos_filtered.json”).write_text(json.dumps(hits, indent=2)) print(“filtered:”, len(hits)) PY
### B3. Dryad API (поиск датасетов)
- **Команда:**
```bash
$PYTHON - <<'PY'
import requests, json
from urllib.parse import quote
queries = [
"double slit", "single photon interference", "molecular double slit",
"electron interference", "quantum interference raw data"
]
out = []
for q in queries:
url = f"https://datadryad.org/api/v2/search?query={quote(q)}"
r = requests.get(url, timeout=30)
if r.ok:
out.append({"query": q, "items": r.json()})
open("data/sources/dryad_search.json", "w").write(json.dumps(out, indent=2))
print("done:", len(out))
PY
B4. Проверка кандидатов и локальный сбор
- Команда (клон выбранных репо):
mkdir -p data/sources/repos # Example: # gh repo clone OWNER/REPO data/sources/repos/OWNER__REPO - Задача скрипта (скан на файлы):
$PYTHON - <<'PY'
from pathlib import Path import re
root = Path(“data/sources/repos”) exts = {“.csv”, “.tsv”, “.txt”, “.dat”, “.h5”, “.hdf5”, “.npy”, “.mat”} hits = [] for p in root.rglob(”*”): if p.suffix.lower() in exts: hits.append(str(p)) Path(“data/sources/raw_files_index.txt”).write_text(“\n”.join(hits)) print(“files:”, len(hits)) PY
### B5. Ручная проверка заменяется “авто‑аннотацией”
- **Команда (создать авто‑аннотацию на базе README):**
```bash
$PYTHON - <<'PY'
from pathlib import Path
out = []
for readme in Path("data/sources/repos").rglob("README*"):
text = readme.read_text(errors="ignore")[:2000]
out.append({"readme": str(readme), "preview": text})
Path("data/sources/readme_previews.json").write_text(str(out))
print("readme previews:", len(out))
PY
4. Фаза C — IBM Quantum статистика (старт “завтра”)
C1. Настройка доступа (через токен)
- Команды:
export QISKIT_IBM_TOKEN="PASTE_TOKEN_HERE" $PYTHON - <<'PY'
from bornbreak.ibm_quantum import save_account_from_env save_account_from_env() print(“IBM Quantum token saved”) PY
### C2. Простой эксперимент для базовой статистики
- **Скрипт запуска (создать один раз):**
```bash
cat > scripts/ibm_bornrule_smoke.py <<'PY'
from qiskit import QuantumCircuit
from qiskit_ibm_runtime import QiskitRuntimeService, Sampler
from bornbreak.ibm_quantum import save_counts
service = QiskitRuntimeService()
backend = service.least_busy(simulator=False)
qc = QuantumCircuit(1)
qc.h(0)
qc.measure_all()
sampler = Sampler(backend=backend)
job = sampler.run([qc], shots=4000)
result = job.result()
counts = result.quasi_dists[0].binary_probabilities()
meta = {
"backend": backend.name,
"shots": 4000,
"circuit": "H on |0> then measure",
}
save_counts("data/raw/ibm/ibm_hadamard_counts.json", counts, meta)
print("saved")
PY
C3. Запуск и проверка
- Команда:
$PYTHON scripts/ibm_bornrule_smoke.py - Проверка артефакта:
$PYTHON - <<'PY'
from pathlib import Path for p in Path(“data/raw/ibm”).glob(”*”): if p.is_file(): print(p, p.stat().st_size) PY
### C4. Первичная проверка Born rule
- **Скрипт‑проверка:**
```bash
cat > scripts/check_bornrule.py <<'PY'
from pathlib import Path
import json
path = Path("data/raw/ibm/ibm_hadamard_counts.json")
data = json.loads(path.read_text())
counts = data["counts"]
p0 = counts.get("0", 0.0)
p1 = counts.get("1", 0.0)
print("P(0) ~", p0, "P(1) ~", p1, "sum:", p0 + p1)
PY
5. Критерии готовности (готовность к активной фазе)
- Репозиторий BornBreak создан и пушнут
- Скелет проекта, базовые модули и README готовы
- Автоматизированный поиск GitHub + Dryad выполнен
- Реестр источников заполнен (даже если без “идеального” сырого датасета)
- IBM Quantum smoke‑тест прошёл и сохранил сырую статистику
6. Связи
- Рефлексия: Пилот‑волна и ML
- Расширение: Расширенный пакет BornBreak
- Карта: Квантовая карта безумия
- Пакет литературы + LaTeX‑драфт: Навигационный пакет
- Дневник: 2026-02-07
Теги: #plan #reflect #bornbreak #quantum #born-rule #ml #ibm-quantum #datasets