Ether Theory of Everything
Старый набор скриптов реализовывал конвейер из четырёх частей:
atoms.py сканировал файлы в дереве данных и передавал текст в отдельную Lark-грамматику для прежнего формата.ether_object_parser_transformer.py, ether_object.py, hyperobject.py и hyperatom.py строили изменяемые объектные деревья. Структурные объекты ссылались на выбранные определения через definer.hyperatoms.py связывал податомы серией индексов по массе, гиперномеру, текстовому идентификатору и имени.hyperatomic_map.py, hyperatom_tree.py и hyperatomic_graphs.py собирали графы, а graphviz_utilities.py задавал оформление и размеры узлов.Сильные идеи, которые стоит сохранить: отдельное объектное дерево, ссылки на определения вместо копирования целых поддеревьев, иерархический граф, фильтрация по группе элементов и сохранение DOT для последующей отрисовки.
Недостатки старой реализации, важные при переносе:
hyperatoms.py использует изменяемые глобальные/временные индексы, порядок обхода и присваивание в словари; при совпадающих ключах кандидаты могут молча перезаписываться;by_element сохраняет только первое определение символа, хотя один символ может иметь несколько шаблонов химического субэлемента;tag и не защищена общим множеством посещённых узлов; повторный вызов графинга может зависеть от предыдущего;is_completed_hypernumber() вручную перечисляет степени двойки только до 256, хотя иерархическая модель не ограничена этим списком;pygraphviz обязателен даже для логики построения графа, а сохранение и отрисовка объединены в одном процессе;bind_atoms принудительно включает печать (display = True), поэтому библиотечный вызов имеет неожиданный побочный эффект.| Группа файлов | Старое назначение | Решение в новом проекте |
|---|---|---|
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 проверяет соответствие суммы прямых компонентов объявленной массе, но не трактует это как доказательство физической правильности модели.
unique, ambiguous или unresolved. Для встроенных обозначений, которые не имеют определения в каталоге, транслятор не выдумывает объект.Nm и X), распознаются как локальные символы элементного набора, а не автоматически трактуются как молекулы.Граф также не скрывает неоднозначность. Уникальная ссылка рисуется прямым ребром. Несколько кандидатов показываются через промежуточный ромбовидный узел со штриховыми рёбрами 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 подтверждена экспериментально. Для полноценной динамической модели понадобятся нормативные правила связывания неоднозначных субатомов, семантика всех разделителей/их параметров и определённые законы переходов между состояниями.