Skip to main content

py-elk

中文 | English

面向 Python 的原生图布局引擎,目标是实现 Eclipse Layout Kernel(ELK)的布局能力,并对齐 JavaScript 版本 elkjs 的公开接口和 ELK JSON 数据格式。

0.1.0 原生 Python 实现。 默认注册 12 个算法、243 个选项、8 个类别,包含完整 Layered 策略及 196 个 Python 模块。差分、独立几何、平台和安装证据分别记录实际适用范围;注册数量不表示所有输入与选项组合均已验证。活动源码与执行方法见当前实施状态。旧 E07/E08 的 0–8 节点等切片边界仅描述历史验收,不再是当前公共入口的能力限制。

PyPI 发行名为 py-visactor-elk,Python 导入名为 pyelk:

python -m pip install py-visactor-elk==0.1.0

实际发布及下载验证状态见 发行说明。

项目目标

E09 实验接口支持 await elk.layout(graph, {"logging": True, "measureExecutionTime": True}):日志树采集自真实处理器调用,根 logging 为保留字段,嵌套业务同名字段保留。executionTime 延续固定 elkjs 的整数 wall 毫秒差乘1000再乘1e-9,不能当作普通秒或CPU时间。运行示例见 diagnostics.py,精确规则见 ADR0008;本轮最终验收仍以状态页和同包证据为准。

  • 在 Python 中实现布局算法;运行布局不依赖 Node.js、Java、浏览器或对 elkjs 的子进程调用。
  • 兼容 elkjs 的 ELK 入口、异步布局调用、元数据查询、选项命名及输入输出字段。
  • 实现 layered 的分层、节点定位、边路由、端口与层级图,以及另外 11 个布局算法;按实际验证范围记录结果。
  • 通过固定版本的 JavaScript 参考实现建立差分测试,持续记录支持范围和数值差异。
  • 适用于流程图、数据流图,以及 py-mermaid 等上层图形项目的布局后端;本项目只计算几何信息,不承担渲染。
  • py-mermaid 后续将布局后端替换成 py-elk,以本项目的 elkjs 0.12.1 为唯一行为基线,不建立旧 ELK 版本的兼容分支。

对齐基线

项目 基线
JavaScript 参考实现 kieler/elkjs
固定版本 elkjs 0.12.1
固定提交 624ae90aa37110033a8af59c5ccbb292708b4317
公开接口依据 该版本 TypeScript 声明
行为依据 该版本实际运行结果;M1 阶段采集参考样例
Python 目标环境 Python 3.11 及以上
发行名 / 导入名 py-visactor-elk / pyelk;GitHub 仓库仍为 py-elk

基线在 2026-11-02 核验。升级参考版本时必须更新基线记录、重新生成样例并审查差异,不直接跟随上游开发分支。

真实默认注册元数据为 12 个算法、243 个选项、8 个类别,均保留在兼容清单。历史切片与当前完整实现的证据分别记录,不由元数据数量推导所有行为均已验证。64 个 elkjs 源文件(含 14 个 Mocha 文件)是来源索引,不是断言通过数。精确外部Java构建仍未核实;当前移植使用独立审查的固定生成worker,见来源说明。

开始开发

以下命令在项目根目录使用 CPython 3.11+ 执行。先创建并激活独立环境,再安装当前本地包;正式发布状态见发行说明。

python -m venv .venv

激活环境后:

python -m pip install -e ".[dev]"
python scripts/iteration/implementation_interfaces.py --source-dir src --out test-runs/start-imports.json
python examples/show_scope.py

开发期按变更选择检查,最终完整验收才使用 scripts/check.py。可选来源检查 scripts/upstream.py fetch/check 需要 Git 和首次下载网络;Node 只用于开发参考采集,不是运行时依赖。独立结构检查不代表算法正确性或发行验收。 已提供真实官方布局采集、完整差分、独立几何、确定性和负控制脚本,新会话见 布局校验手册。

基本调用

以下例子可在当前本地包执行。当前实现、验证范围和宿主差异见状态页及接口合同:

import asyncio
from pyelk import ELK

async def main():
    elk = ELK({"defaultLayoutOptions": {"elk.algorithm": "layered"}})
    graph = {
        "id": "root",
        "children": [
            {"id": "a", "width": 40, "height": 30},
            {"id": "b", "width": 40, "height": 30},
        ],
        "edges": [{"id": "ab", "sources": ["a"], "targets": ["b"]}],
    }
    try:
        print(await elk.knownLayoutAlgorithms())
        result = await elk.layout(graph, {"layoutOptions": {
            "elk.algorithm": "layered", "elk.direction": "RIGHT"
        }})
        print(result)
    finally:
        elk.terminateWorker()

if __name__ == "__main__":
    asyncio.run(main())

保留defaultLayoutOptions、layoutOptions和camelCase方法名;logging/timing仅接受bool,缺省为false,true采集真实执行诊断。实际CPU布局在Python spawn子进程执行,每实例单工作槽、FIFO队列;取消、超时与关闭会回收工作进程。max_pending=16限制运行加排队总数(可配1–64),timeout=None可改为包含排队/启动的总期限秒数;不承诺硬内存配额。默认实例的三项查询返回 12 个算法、243 个选项、8 个类别;按构造参数限制算法注册时,查询反映实例范围。目录注册、解析能力和具体几何效果的验证等级分开记录,不能仅由查询结果推导所有参数组合均已通过。原始输入保持不变,实例空闲时可跨多次asyncio.run复用;详见E08手册。

文档

实现状态

能力 当前状态 计划阶段
骨架、来源锁、元数据分母、规划和检查工具 已建立;限定验证见状态页 M0
ELK JSON 模型、异步 API、参考样例工具 有序模型、九项解析、最小ELK入口与真实oracle;完整M1未完成 M1
平面图 layered 核心流程 E07限定四方向/多组件切片可调用,完整范围待收口 M2
基础输入/选项、API/错误与坐标闭环 72输入的受限实验校验,实际验收见状态页 M3
独立候选、平台/生命周期/基本性能与真实布局安装 实验wheel隔离安装通过;完整验收待完成 M4
正式 Python 包 0.1.0、许可与下载复验 未发布;本地版本0.0.1a0 M5
高级端口/标签/层级、完整 layered 策略与选项 未实现 M6
其他 11 个算法 未实现 M7
全量可靠性与后续正式发行 未验收 M8
py-mermaid 后端适配与集成 后置独立步骤,不阻塞基础包发布 I0–I3

实现状态必须以测试证据更新。名称相同或能够返回坐标,并不代表算法行为或坐标已经与 elkjs 一致。

上游与许可

本仓库是独立的 Python 实现项目,不是 ELK 官方发行版。项目自行编写的代码使用 MIT。ELK 移植文件保留 EPL-2.0 OR GPL-3.0-or-later、来源及版权,Apache 辅助代码保留其许可与归属。发行包使用混合来源表达式 MIT AND (EPL-2.0 OR GPL-3.0-or-later) AND Apache-2.0;具体范围见 第三方通知。

Metadata

Release files for py-visactor-elk 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for py-visactor-elk 0.1.0
File Size Uploaded Provenance Actions
py_visactor_elk-0.1.0.tar.gz 505.2 kB With provenance Details for py_visactor_elk-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for py-visactor-elk 0.1.0
File Interpreter ABI Platform Actions
py_visactor_elk-0.1.0-py3-none-any.whl Python 3 none any Details for py_visactor_elk-0.1.0-py3-none-any.whl

Total release size: 1.2 MB

Release files / py_visactor_elk-0.1.0.tar.gz

Download URL py_visactor_elk-0.1.0.tar.gz
Size 505.2 kB
Tags Source
SHA-256 checksum
How to use checksums
cfe52ad181b0c751954e080480ff7bf3529a07e499b46756135ef64ed149142c
BLAKE2b-256 checksum
How to use checksums
924bb45a6f8d24c1b067577b990ce3454b49c34f220aeaf1ea540110fb653ee2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / py_visactor_elk-0.1.0-py3-none-any.whl

Download URL py_visactor_elk-0.1.0-py3-none-any.whl
Size 647.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
93c9f75e1c3d5b4242e7e1197d3773bd8aa6cfe51223fa6e5777afcadd197411
BLAKE2b-256 checksum
How to use checksums
302df6e83dfeb901cf238a4c524511042deb5db2fd5bc11a4db06a615edc0f59
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Security for py-visactor-elk 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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for py_visactor_elk-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page