etoe

Ether Theory of Everything

View the Project on GitHub etoe/etoe

Семантическая трансляция гиператомов и Graphviz

Что установлено по старому коду

Старый набор скриптов реализовывал конвейер из четырёх частей:

  1. atoms.py сканировал файлы в дереве данных и передавал текст в отдельную Lark-грамматику для прежнего формата.
  2. ether_object_parser_transformer.py, ether_object.py, hyperobject.py и hyperatom.py строили изменяемые объектные деревья. Структурные объекты ссылались на выбранные определения через definer.
  3. hyperatoms.py связывал податомы серией индексов по массе, гиперномеру, текстовому идентификатору и имени.
  4. hyperatomic_map.py, hyperatom_tree.py и hyperatomic_graphs.py собирали графы, а graphviz_utilities.py задавал оформление и размеры узлов.

Сильные идеи, которые стоит сохранить: отдельное объектное дерево, ссылки на определения вместо копирования целых поддеревьев, иерархический граф, фильтрация по группе элементов и сохранение DOT для последующей отрисовки.

Недостатки старой реализации, важные при переносе:

Краткий каталог старого набора

Группа файлов Старое назначение Решение в новом проекте
atoms.py, ether_object_grammar.py, ether_object_parser.py, ether_object_parser_transformer.py Обнаружение файлов, грамматика и преобразование текста в объектное дерево Заменено официальным EToEParser и типизированным AST — второй grammar source не нужен
object_descriptor.py, hyperobject.py, ether_object.py, hyperatom.py, abstract_hyperatom.py Базовые классы и иерархия объектных/атомных типов Разделено на неизменяемую исходную AST-запись и семантические dataclass-объекты со стабильными ID
hyperatoms.py, chemical_element.py, chemical_elements.py, chemical_category.py, hypercategory.py Поиск, привязка атомов к элементам, категории и подготовка таблиц Заменено реестром с индексами по ID, символу и массе; дубликаты и неоднозначности не перезаписываются
hyperatomic_map.py, hyperatom_tree.py, hyperatomic_graphs.py, graphviz_utilities.py Сборка карты, деревьев, фильтрованных графов и оформление DOT Заменено детерминированным DOT-экспортом; неоднозначные и отсутствующие ссылки имеют отдельные визуальные узлы
hyperatomic_levels.py, hyperatomic_lists.py, hyperatomic_table.py, hyperatomic_models.py Генерация списков, последовательностей, уровней и таблиц/моделей Частично охватывается экспортом JSON и графом; таблицы/последовательности лучше строить как отдельные представления одного реестра
hyperstate.py, hypergeometry.py, ether_state.py, ether_view.py, hypermode.py, ether_mode.py, hyperinterface.py, hypersequence.py Состояние, геометрия, представление, режимы и последовательности Не переносилось в транслятор: это отдельный слой динамики/визуализации и требует своих спецификаций
ether_object_isolation.py, ether_object_motion.py Модели изоляции и движения Оставлены за границей трансляции до формализации исполняемых правил взаимодействия и эволюции
blender_utilities.py, color_utilities.py, tex_utilities.py, hyperview.py Визуальное оформление, Blender/TeX и масштабирование Граф представляется нейтральным DOT; конкретные рендереры можно подключить поверх реестра
project.py, string_utilities.py, utilities.py, debug_dump.py, install_required_packages.py, test_blender.py Пути, общие функции, отладка, ручная установка и smoke-тесты Blender Не являются частью модели данных; зависимости и тесты нового пакета задаются через pyproject.toml/pytest

Новый конвейер

.etoe source
  -> EToEParser / typed AST (single syntax authority)
  -> HyperatomTranslator
  -> HyperatomRegistry + semantic component references + diagnostics
  -> JSON for downstream simulation / analysis
  -> deterministic Graphviz DOT -> SVG / PNG / PDF

etoe.hyperatom_translation не дублирует грамматику и не меняет исходные .etoe. На каждое верхнеуровневое химическое утверждение создаётся SemanticHyperatom со стабильным ID, канонической записью, исходным файлом, индексом утверждения, символом, атомной массой, вторым числовым суффиксом primary_mass и семантическими компонентами. Поле matter_level различает атомную ступень E5 и молекулярную E6 по типу записи; syntax_depth — это глубина именно написанного выражения, а не претензия на физический атомный уровень.

Каждый компонент сохраняет исходную запись, разделитель, вложенную структуру, массу и происхождение массы. Для обычного числового компонента масса явная; для скобочной группы вроде (5'5) она может быть выведена как сумма известных масс компонентов. mass_balance проверяет соответствие суммы прямых компонентов объявленной массе, но не трактует это как доказательство физической правильности модели.

Разрешение ссылок

Граф также не скрывает неоднозначность. Уникальная ссылка рисуется прямым ребром. Несколько кандидатов показываются через промежуточный ромбовидный узел со штриховыми рёбрами candidate; отсутствующая ссылка отображается отдельным нерешённым узлом. Поэтому граф не выдаёт предположение за установленную связь.

Запуск

Из корня проекта после установки в editable-режиме:

python -m pip install -e .

# Перевести все .etoe в машинно-читаемый JSON
python -m etoe hyperatoms translate \
  --data-root data/atom/element \
  --output build/hyperatoms.semantic.json

# Основная карта гиператомов в SVG
python -m etoe hyperatoms graph \
  --data-root data/atom/element \
  --output build/hyperatoms.svg

# Вариант с шаблонами элементов и химических субэлементов
python -m etoe hyperatoms graph \
  --data-root data/atom/element \
  --include-templates \
  --output build/hyperatoms-with-templates.svg

# DOT без установленного Graphviz; рендеринг SVG/PNG/PDF требует бинарник Graphviz
python -m etoe hyperatoms graph \
  --data-root data/atom/element \
  --output build/hyperatoms.dot

# Ограничить стартовый набор элементов; зависимые узлы включаются по композиционным ссылкам
python -m etoe hyperatoms graph \
  --data-root data/atom/element \
  --symbols Fe,Co,Ni,Cu \
  --output build/iron-group.svg

Graphviz engine задаётся через --layout dot|neato|fdp|sfdp|circo|twopi; формат определяется расширением выходного файла или --format. DOT генерируется стандартной библиотекой Python, без обязательного Python-пакета graphviz или pygraphviz.

Контроль по архивному корпусу

В etoe-0.1.60/data/atom/element обнаружены 123 файла, 457 синтаксических утверждений и 457 семантических записей. После учёта локальных символов Nm и X реестр содержит 293 гиператомные записи, 163 шаблона элемента и 1 запись голого символа элемента. Все 287 записей с объявленной массой и непосредственными компонентами в проверенном корпусе проходят проверку суммы масс. Для текущего корпуса транслятор сообщил 378 неоднозначных и 10 неразрешённых компонентных ссылок; это не означает, что исходные данные обязательно ошибочны — например, несколько шаблонов одного символа могут быть осмысленными альтернативами, а точное совпадение частичного структурного шаблона иногда отсутствует в наборе определений.

Граница достоверности

Этот слой — формализация явно представленной структуры данных для дальнейшей симуляции, визуализации и проверки. Он не вводит неизвестные физические уравнения для взаимодействий, устойчивости или динамики гиператомов и не утверждает, что ÆToE подтверждена экспериментально. Для полноценной динамической модели понадобятся нормативные правила связывания неоднозначных субатомов, семантика всех разделителей/их параметров и определённые законы переходов между состояниями.