Regnets — самоподобные сети
Regnets задаёт топологию модульных нейронных сетей числовыми словами, строит перестановки контактов и вычисляет самоподобные сети в PyTorch. Топологию можно сохранить в JSON и визуализировать в SVG или PNG.
Построение топологий и чтение JSON используют только стандартную библиотеку
Python; вычисление выходов выполняет модуль modular, статическую визуализацию —
topology.viz через Matplotlib. При установке пакета зависимости PyTorch,
Matplotlib и NetworkX устанавливаются вместе с ним.
Установка
Требуется Python 3.13 или новее. После публикации пакета на PyPI:
python -m pip install regnets
Быстрый старт
from topology.lib import cooley_tukey
topology = cooley_tukey((2, 2, 2))
permutations = topology.permutations()
print(len(permutations)) # 4
Основные модули: topology — построение и сохранение топологий, modular и
kernels — модели и ядра PyTorch, topology.viz — визуализация.
Исходный код и подробная документация доступны в
репозитории проекта.
Лицензия проекта — MIT.
Топология
Теоретические материалы по модульным сетям: dorogov.su.
Основной формат хранения и обмена топологиями — JSON версии 1:
числовые слова words, размерности входов p и выходов g каждого слоя,
свободное имя и признак двойственности. Полное описание полей, пример и правила
проверки закреплены в документе дизайна.
from topology.lib import cooley_tukey, good, haar
p = (2,) * 10 # 1024 входа, десять слоёв
topology = cooley_tukey(p)
permutations = topology.permutations()
good_topology = good(p)
haar_topology = haar(p)
frequency_topology = cooley_tukey(p, decimation="frequency")
Стандартные функции возвращают объект Topology со словами и размерностями
модулей. Число слоёв определяется длиной p. Если g не указано, выходная
размерность каждого модуля равна его входной размерности.
Топологию можно создать вручную:
from topology import Topology
topology = Topology(
[
[1, 2, 3],
[-1, 2, 3],
[-1, -2, 3],
[-1, -2, -3],
],
p=(2, 2, 2),
)
Положительное число i + 1 обозначает u_i, отрицательное -(i + 1) — v_i.
Первый элемент слова соответствует младшему разряду. Для n слоёв задаётся
n + 1 слов; выходное поле предыдущего слоя совпадает со входным полем следующего.
Подробные соглашения, примеры индексов и границы поддерживаемых схем описаны в описании модуля топологии.
Сохранение и загрузка топологии
Топологию и размерности модулей можно сохранить в JSON-файл и затем загрузить:
from topology.io import load_topology, save_topology
from topology.lib import cooley_tukey
p = (2, 2, 2)
g = (2, 2, 2)
topology = cooley_tukey(p, g=g)
path = save_topology(topology, "topology.json", name="Моя топология")
loaded = load_topology(path)
assert loaded.name == "Моя топология"
assert loaded.topology == topology
assert (loaded.topology.p, loaded.topology.g) == (p, g)
permutations = loaded.topology.permutations()
name — произвольное имя, которое не влияет на связи. save_topology
записывает JSON версии 1 в UTF-8, перезаписывает существующий файл и
возвращает путь к нему. load_topology проверяет файл и возвращает
спецификацию с топологией и её метаданными.
Если передать сохранению эту спецификацию, исходные имя и флаг dual
сохранятся; необязательный name позволяет заменить имя. При сохранении
самого Topology записывается его текущее состояние с dual: false.
Файл не содержит весов нейронной сети.
Модель PyTorch
from modular import ModularNet, Layer
from kernels import MLP
from topology.lib import cooley_tukey
net = ModularNet(
cooley_tukey((2,) * 8),
layers=Layer(kernel=MLP(hidden=(64, 32)), shared=False, residual=True, in_size=16),
device="cpu",
)
# net(x): [..., 256, 16] → [..., 256, 16]
shared=True разделяет параметры между позициями внутри слоя;
shared=False хранит независимые параметры упакованными тензорами.
Вычисления всех позиций выполняются пакетно. Параметры разных слоёв независимы.
Для скалярных контактов пропустите in_size; для разных слоёв передайте список Layer.
Описание блоков, остаточных связей и сохранения: вычислительная модель.
Исполняемый пример одного синтетического шага обучения на CPU из клонированного
репозитория (после uv sync):
CUDA_VISIBLE_DEVICES='' uv run python examples/modular_cpu.py
SVG и PNG из JSON
from topology.viz import render_topology
render_topology("topology.json") # создаёт topology.svg рядом с JSON
render_topology("topology.json", "network.png", mode="modules")
Отдельная утилита командной строки из клонированного репозитория:
uv run python tools/render_topology.py examples/topology.json -o build/topology.svg
uv run python tools/render_topology.py examples/topology.json -m modules -o build/modules.png
По умолчанию рисуются контакты; -m modules выбирает модули.
Формат выбирается расширением .svg или .png, --dpi задаёт разрешение PNG.
Web App и экспорт используют одно построение графа; браузер для экспорта не нужен.
Подробности: модуль визуализации и CLI.
Web UI
Открыть визуализатор на GitVerse Pages.
Браузерная версия для GitVerse Pages работает без Python-сервера; исходники
находятся в apps/topology_pages. Она сохраняет стандартные и ручные топологии,
оба представления графа, инспектор, поиск, диапазон слоёв и обмен JSON/PNG.
npm ci
npm test
npm run build
python3 -m http.server 8051 --bind 127.0.0.1 --directory build/pages
Сборка включает фиксированную версию Cytoscape из npm, общий CSS и базовые
стили графа из приложения Dash. Обращения к внешнему CDN не нужны.
Для сборки нужен Python 3.12+ со стандартной библиотекой; зависимости Dash
и PyTorch не устанавливаются. Проверки npm test сравнивают браузерные
графы с Python для 112 сочетаний схем, размерностей и диапазонов,
включая двойственные модели.
Инструкция публикации: GitVerse Pages.
Отдельное приложение на Dash и Dash Cytoscape находится в
apps/topology_explorer. Запуск из корня проекта:
uv run --group ui python -m apps.topology_explorer
Откройте http://127.0.0.1:8050. По умолчанию показаны все контакты и связи
сети на 16 входов. Кнопки 16, 64 и 256 строят соответствующие сети целиком.
Можно выбрать стандартную схему, изменить размерности ядер, задать собственные
слова, включить двойственную модель, перейти к контакту по номеру,
переключиться на модули, сохранить JSON
или рисунок PNG. Настройки каждого сеанса хранятся в его странице браузера.
Порядок работы, формат файлов и ограничения описаны в руководстве визуализатора.
Разработка и проверки
Исходники находятся в src, топологии собраны в пакет src/topology.
После клонирования репозитория создайте окружение командой uv sync.
Проверки выполняются из корня проекта:
uv run --group ui python -m pytest -q
uv run --group ui python -m ruff check src apps tests tools examples --extend-select I
uv run --group ui python -m ruff format --check src apps tests tools examples
uv run --group ui python -m pyright src apps tests tools examples
Metadata
Release files for regnets 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| regnets-0.1.0.tar.gz | 46.0 kB | Without provenance | Details for regnets-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| regnets-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for regnets-0.1.0-py3-none-any.whl |
Total release size: 76.3 kB
Release files / regnets-0.1.0.tar.gz
| Download URL | regnets-0.1.0.tar.gz |
|---|---|
| Size | 46.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b695bd6023bf2a16579e23363ef52b1e89da1260a29cf4a3b90a777750dd39bf
|
|
BLAKE2b-256 checksum How to use checksums |
fb08cba57533ba60569813c02cff31a28d22eac047be60599c5e58ee8249ccb7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / regnets-0.1.0-py3-none-any.whl
| Download URL | regnets-0.1.0-py3-none-any.whl |
|---|---|
| Size | 30.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
36ddd6ef71ff7d19e9434bed146536d9315a088cdd7db8072520071acdb39fa6
|
|
BLAKE2b-256 checksum How to use checksums |
e6eafc2d481d6b7f50bed07b22d202a14951593ded4b1e957e10474bbff62e78
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for regnets 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.