Repository files navigation

PyRedStoneX

LicensePython VersionC++ StandardC Standard

PyRedStoneX 是一个面向 Python 生态的高性能红石电路逻辑模拟库。它将纯 C 编写的高效率底层红石模拟引擎 RedStoneX 通过 C++ (pybind11) 胶水层进行极致封装,不仅提供了面向对象且极其直观的 Python 接口,还开创性地设计了一套基于二进制兼容性(ABI)的插件开发模式

无论是进行红石电路的大规模逻辑实验、自动化电路验证、教学演示、还是开发自定义组件,PyRedStoneX 都能在保障极速仿真的同时,提供极佳的扩展性与开发友好度。


🗺️ 系统架构

PyRedStoneX 的架构旨在隔离底层红石仿真的高频开销与上层 Python 的业务逻辑,并提供了稳定的 ABI 插件扩展接口:

 ┌────────────────────────────────────────────────────────┐
│ Python 业务层 │
│ - 编写电路拓扑、连接导线/器件、脚本自动化/逻辑测试 │
│ - 使用 Simulator, Source, Line, custom.ANDGate 等 │
└──────────────────────────┬─────────────────────────────┘
│ (通过 pybind11 高效绑定)
┌──────────────────────────▼─────────────────────────────┐
│ C++ 胶水桥接层 │
│ - 统一管理 C++ 对象与底层 C 结构体的生命周期 (_core) │
│ - 线程安全的 C 语言日志回调映射至 Python 打印 (GIL控制) │
│ - 存储动态插件注册表 (ComponentOps Map) │
└──────────────────────────┬─────────────────────────────┘
│ (直接指针传递 / C API 调用)
┌──────────────────────────▼─────────────────────────────┐
│ RedStoneX 底层 C 仿真引擎 │
│ - 基于时间轮(Tick Wheel)与双端队列(Deque)的事件驱动系统│
│ - 极致紧凑的内存布局 (RSXConnectiveObject 结构体) │
│ - 毫秒级支持数十万红石元件高频振荡仿真 │
└──────────────────────────▲─────────────────────────────┘
│ (稳定 ABI 接口注册 / ctypes 动态加载)
┌──────────────────────────┴─────────────────────────────┐
│ C/C++ 动态链接插件库 │
│ - 符合 ComponentOps 接口规范 (.so / .dll) │
│ - 插件创建(create)、销毁(destroy)、属性查询(get_prop) │
│ - 例如: AND/OR/XOR/NOT 逻辑门, VCC/GND, 信号线插件 │
└────────────────────────────────────────────────────────┘

🛠️ 环境依赖与安装

1. 系统依赖要求

在从源码编译安装 PyRedStoneX 之前,请确保您的系统中已经安装了以下工具链:

  • C++ 编译器:支持 C++17 或更高标准。
    • Linux: GCC 8+ 或 Clang 7+
    • macOS: Xcode Command Line Tools
    • Windows: MSVC 2019 或更高版本(安装 C++ 桌面开发工作负载)
  • C 编译器:支持 C11 标准(用于编译底层 RedStoneX 引擎和 C 插件)。
  • CMake:版本在 3.15 或以上。
  • Python:版本在 3.10 或以上,并安装有 Python 头文件(如 Ubuntu 上的 python3-dev)。

2. 从源码安装

PyRedStoneX 使用现代的 scikit-build-corepybind11 进行构建管理。你可以直接通过 pip 自定义编译并安装:

# 克隆主项目及其子模块 (RedStoneX 引擎)
git clone --recursive https://github.com/SpeechlessMatt/PyRedStoneX.git
cd PyRedStoneX
# 以可编辑(Editable)开发模式安装(推荐)
python -m pip install -e .# 或者是标准安装模式
python -m pip install .

提示: --recursive 参数非常重要,用于拉取 extern/RedStoneX 底层 C 语言模拟器依赖。如果已经克隆了未包含子模块的项目,请执行 git submodule update --init --recursive


🚀 快速开始

下面是一个最简示例:创建一个红石信号源、一条导线、一个红石块,然后绑定并运行模拟。

importredstonexasrsx# 1. 创建仿真器实例sim=rsx.Simulator()
# 2. 实例化红石组件source=rsx.Source(limit=4, power=15) # 信号源:可连接4个邻居,初始强度15line=rsx.Line(limit=4) # 红石线:无损/有损充能block=rsx.Block(limit=6) # 实体方块:弱/强充能接收与转发# 3. 连接组件(建立电路拓扑)source.connect(line)
line.connect(block)
# 4. 将对象绑定到仿真器中sim.bind_object(source, line, block)
# 5. 设置仿真断点:在第 1 个 Tick 暂停sim.add_tick_breakpoint(1)
# 6. 开启控制台错误/信息日志(可选)sim.enable_logging(rsx.simulator.LogLevel.INFO)
# 7. 开始运行仿真sim.run()
# 8. 查看第 1 个 Tick 后的信号状态print(f"=== Tick {sim.current_tick} 仿真状态 ===")
print(f"信号源强度: {source.power}") # 应该为 15print(f"红石线强度: {line.power}") # 应该为 15print(f"实体块强度: {block.power}") # 应该为 15(无损线下)

📖 核心 API 及内置组件说明

PyRedStoneX 贴心地封装了红石模拟器中不可或缺的底层逻辑。以下是各个常用内置组件及接口的说明。

1. 基础物理组件

所有仿真对象都继承自底层的 CoreConnectiveObject,它们具有公共属性如 id, uri, power, limit, connect_count 等。

组件类名说明常见构造参数及默认值典型连接模式
Line红石线:用于传输能量。无损传输,传递的信号强度与距离无关。limit=4 (最多邻居连接数)连接 Source / Block / Relay 等
Source信号源:无条件发出红石能量的起始源。limit=4, power=15连接 Line / Block
Block实体方块:接收并传递强/弱充能,充当强阻断或大容量转发媒介。limit=6连接 Line / Torch
Slot插槽/槽位:特殊的虚拟中转槽,一般用来实现复杂器件的方向性接口。parent, power_type=PowerType.NONE内部封装使用
RelaySource红石中继器:单向能量中转。具有 1-Tick 到多个 Tick 的信号延时。power=15, max_delay=4通过 input_slotoutput_slot 连接
ComparatorSource红石比较器:用于比较(Comparison)或做减法(Subtraction)。delay=1通过输入、左右侧和输出 Slot 连接
TorchSource红石火把:提供源源不断的红石信号,若底部被充能,则熄灭。power=15, delay=1通过 bottom_slot 充能,由 power_slot 输出
Custom自定义器件:用于加载和承载来自外部插件生成的 ABI 元件。plugin_name, **kwargs视插件具体实现而定

2. 仿真器控制 (Simulator)

Simulator 对象是控制仿真时序、时间轮推进的核心。

  • run(): 持续运行仿真,直到系统内没有任何待处理的事件或遇到时间断点。
  • step() -> bool: 仿真时间往前推进 1 个 tick。如果发生了事件活动或未来有待处理日程则返回 True,若整个电路完全静止返回 False
  • pause(): 暂停当前正在运行的仿真。
  • resume(): 恢复已暂停的仿真。
  • add_tick_breakpoint(tick: int): 在指定的 tick 刻度增加一个硬件级断点(仿真运行到该 tick 时会立刻自动挂起并返回)。
  • remove_tick_breakpoint(tick: int): 移除指定 tick 上的仿真断点。
  • bind_object(*objects): 向仿真器绑定一个或多个红石元件,使其加入到当前仿真时空中。
  • bind_objects(objects_list): 绑定一组可迭代的元件。
  • enable_logging(level): 开启日志桥接。支持调试等级:DEBUG, INFO, WARN, ERROR

3. 连接性限制 (Connection Restrictions)

由于红石拓扑本身的严格性,底层对连接做了防重、防爆上限控制:

  • 任何器件不能与其自身连接。
  • 两个器件之间只能存在单条逻辑连接,不能重复建立连接。
  • 每个组件的连接数不能超出初始化时指定的 limit。如果强行连接会抛出 ConnectionLimitError 异常,不兼容类型的强行连接则会引发 ConnectiveError

🔌 插件扩展系统 (ABI Plugin Mode)

PyRedStoneX 设计了一套极致轻量、彻底解耦、无需二次编译主框架的共享库插件机制

您可以通过纯 C 语言编写极速逻辑门或特定功能电路器件,编译为 .so.dll 后在 Python 侧直接动态注册:

importosimportredstonexasrsxfromredstonex.registryimportPluginRegistry# 1. 加载动态库插件withPluginRegistry("./plugins/libgate_core.so") asreg:
# 2. 注册 C 回调函数到指定组件名reg.add(
component_name="ANDGate",
create="create_and_gate",
destroy="destroy_logic_gate",
get_property="get_logic_gate_property"
)
# 3. 实例化自定义组件并使用and_gate=rsx.Custom("ANDGate", limit=3, power=15)
sim=rsx.Simulator()
sim.bind_object(and_gate)

💡 欲了解保姆级的插件开发流程、C 语言 API 结构、内存对齐与强制转换规范、完整 C/C++ 示例以及 Python 的面向对象二次优雅包装,请阅读专门编写的指南:docs/plugin_development.md


📂 项目目录结构说明

PyRedStoneX/
├── pyproject.toml # Python 现代打包配置 (scikit-build-core 构建系统后端)
├── MANIFEST.in # 打包源码分发时的文件清单规则
├── CMakeLists.txt # 顶层 C/C++ 编译配置文件(链接 pybind11 并编译 _core 库)
├── README.md # 本说明文件
├── LICENSE # 项目许可证 (GPL-3.0-or-later)
├── CMake/ # CMake 配置辅助模板
│ └── PyRedStoneXConfig.cmake.in
├── docs/ # 官方详尽技术文档
│ └── plugin_development.md # ABI 插件开发保姆级教程 (包含 API 示例及原理规范)
├── src/ # Python 包源码主目录
│ └── redstonex/
│ ├── __init__.py # 暴露 Simulator, Built-in Objects 和 PowerType │ ├── simulator.py # Python 封装的仿真器控制器
│ ├── objects.py # Python 对各原生红石器件类的优雅封装与自动 ID 计数器
│ ├── registry.py # 插件注册中心:使用 ctypes 动态装载并解析共享库符号指针
│ ├── types.py # 红石相关的枚举定义(如充能类型 WEAK / STRONG)
│ ├── utils.py # 实用工具函数
│ ├── _core.pyi # 对 pybind11 导出的编译模块提供 PEP 561 类型注解(IDE友好)
│ └── csrc/
│ └── core.cpp # 核心 C++ pybind11 胶水代码(对接 C 语言引擎与 Python 类)
│ └── include/
│ └── redstonex/
│ └── plugin.h # 专供插件开发者引入的 C 语言统一 ABI 核心头文件
├── extern/ # 外部依赖子模块目录
│ └── RedStoneX/ # 纯 C 语言编写的高性能底层红石仿真引擎
│ ├── CMakeLists.txt # 独立编译红石 C 引擎的配置文件
│ ├── include/ # 仿真器底层 API
│ │ ├── redstonex_components.h # 底层中继器、比较器、火把等算法实现接口
│ │ ├── redstonex_obj.h # 红石元器件基类结构体和基础连接、广播行为
│ │ ├── redstonex_sim.h # 仿真器时钟轮、事件队列和主执行循环定义
│ │ └── redstonex_types.h # 底层公共基本枚举
│ └── src/ # 仿真引擎纯 C 源码实现 (redstonex_sim.c 等)
├── examples/ # 经典开发示例
│ └── gate_plugin/ # 完整的 ABI 逻辑门器件插件工程
│ ├── CMakeLists.txt # 独立编译逻辑门插件共享库的 CMake 脚本
│ ├── pyproject.toml # 插件本地打包设置
│ ├── src/gate_plugin/
│ │ ├── __init__.py # 插件注册和 AND/OR/XOR... 优雅 Python OOP 类定义
│ │ ├── csrc/
│ │ │ └── gate_plugin.c # 逻辑门 C 语言具体逻辑与 ComponentOps 回调实现
│ │ └── include/
│ │ └── gate_plugin.h # 逻辑门结构体与函数声明
│ └── tests/ # 插件逻辑门应用测试(全加器、波纹进位加法器、ALU等)
│ ├── alu_test.py
│ ├── full_adder_test.py
│ └── ripple_carry_adder_test.py
└── tests/ # 核心功能测试脚本目录
├── test.py # 原生红石大回路逻辑仿真测试
├── high_fan_out_benchmark.py # 高扇出极端仿真压力跑测
├── long_chain_benchmark.py # 长红石导线链延时与能量衰减测试
└── high_churn_torch_oscillators_benchmark.py # 高频火把振荡时钟源极端基准测试

📜 开源许可证

本项目采用 GPL-3.0-or-later 许可证开源。底层 RedStoneX 仿真引擎也包含在相应的开源许可中。

在基于本项目进行二次修改、商业化再发布或嵌入到其他软件中时,请务必遵守 GPL-3.0 协议中关于源码公开的相关约束。


🤝 贡献与讨论

  1. 提交 Issue:如果您在安装、开发插件或构建复杂电路时发现任何 bug 或未定义的异常行为,请随时在 GitHub 提交 issue。
  2. 贡献代码 (Pull Request):非常欢迎提交 PR!请遵循以下流程:
    • fork 本仓库。
    • 新建特性分支(例如 feature/logic-custom-delay)。
    • 请确保添加配套的单元测试(可以参考 tests/test.py)。
    • 提交 PR 并简要描述改动的物理机制和性能表现。

再次感谢对 PyRedStoneX 开源社区的支持!让我们用 Python 点亮属于我们的红石科技树! 💡🔴

About

Python package powerd by RedStoneX

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

PyRedStoneX

LicensePython VersionC++ StandardC Standard

PyRedStoneX 是一个面向 Python 生态的高性能红石电路逻辑模拟库。它将纯 C 编写的高效率底层红石模拟引擎 RedStoneX 通过 C++ (pybind11) 胶水层进行极致封装,不仅提供了面向对象且极其直观的 Python 接口,还开创性地设计了一套基于二进制兼容性(ABI)的插件开发模式

无论是进行红石电路的大规模逻辑实验、自动化电路验证、教学演示、还是开发自定义组件,PyRedStoneX 都能在保障极速仿真的同时,提供极佳的扩展性与开发友好度。


🗺️ 系统架构

PyRedStoneX 的架构旨在隔离底层红石仿真的高频开销与上层 Python 的业务逻辑,并提供了稳定的 ABI 插件扩展接口:

 ┌────────────────────────────────────────────────────────┐
│ Python 业务层 │
│ - 编写电路拓扑、连接导线/器件、脚本自动化/逻辑测试 │
│ - 使用 Simulator, Source, Line, custom.ANDGate 等 │
└──────────────────────────┬─────────────────────────────┘
│ (通过 pybind11 高效绑定)
┌──────────────────────────▼─────────────────────────────┐
│ C++ 胶水桥接层 │
│ - 统一管理 C++ 对象与底层 C 结构体的生命周期 (_core) │
│ - 线程安全的 C 语言日志回调映射至 Python 打印 (GIL控制) │
│ - 存储动态插件注册表 (ComponentOps Map) │
└──────────────────────────┬─────────────────────────────┘
│ (直接指针传递 / C API 调用)
┌──────────────────────────▼─────────────────────────────┐
│ RedStoneX 底层 C 仿真引擎 │
│ - 基于时间轮(Tick Wheel)与双端队列(Deque)的事件驱动系统│
│ - 极致紧凑的内存布局 (RSXConnectiveObject 结构体) │
│ - 毫秒级支持数十万红石元件高频振荡仿真 │
└──────────────────────────▲─────────────────────────────┘
│ (稳定 ABI 接口注册 / ctypes 动态加载)
┌──────────────────────────┴─────────────────────────────┐
│ C/C++ 动态链接插件库 │
│ - 符合 ComponentOps 接口规范 (.so / .dll) │
│ - 插件创建(create)、销毁(destroy)、属性查询(get_prop) │
│ - 例如: AND/OR/XOR/NOT 逻辑门, VCC/GND, 信号线插件 │
└────────────────────────────────────────────────────────┘

🛠️ 环境依赖与安装

1. 系统依赖要求

在从源码编译安装 PyRedStoneX 之前,请确保您的系统中已经安装了以下工具链:

  • C++ 编译器:支持 C++17 或更高标准。
    • Linux: GCC 8+ 或 Clang 7+
    • macOS: Xcode Command Line Tools
    • Windows: MSVC 2019 或更高版本(安装 C++ 桌面开发工作负载)
  • C 编译器:支持 C11 标准(用于编译底层 RedStoneX 引擎和 C 插件)。
  • CMake:版本在 3.15 或以上。
  • Python:版本在 3.10 或以上,并安装有 Python 头文件(如 Ubuntu 上的 python3-dev)。

2. 从源码安装

PyRedStoneX 使用现代的 scikit-build-corepybind11 进行构建管理。你可以直接通过 pip 自定义编译并安装:

# 克隆主项目及其子模块 (RedStoneX 引擎)
git clone --recursive https://github.com/SpeechlessMatt/PyRedStoneX.git
cd PyRedStoneX
# 以可编辑(Editable)开发模式安装(推荐)
python -m pip install -e .# 或者是标准安装模式
python -m pip install .

提示: --recursive 参数非常重要,用于拉取 extern/RedStoneX 底层 C 语言模拟器依赖。如果已经克隆了未包含子模块的项目,请执行 git submodule update --init --recursive


🚀 快速开始

下面是一个最简示例:创建一个红石信号源、一条导线、一个红石块,然后绑定并运行模拟。

importredstonexasrsx# 1. 创建仿真器实例sim=rsx.Simulator()
# 2. 实例化红石组件source=rsx.Source(limit=4, power=15) # 信号源:可连接4个邻居,初始强度15line=rsx.Line(limit=4) # 红石线:无损/有损充能block=rsx.Block(limit=6) # 实体方块:弱/强充能接收与转发# 3. 连接组件(建立电路拓扑)source.connect(line)
line.connect(block)
# 4. 将对象绑定到仿真器中sim.bind_object(source, line, block)
# 5. 设置仿真断点:在第 1 个 Tick 暂停sim.add_tick_breakpoint(1)
# 6. 开启控制台错误/信息日志(可选)sim.enable_logging(rsx.simulator.LogLevel.INFO)
# 7. 开始运行仿真sim.run()
# 8. 查看第 1 个 Tick 后的信号状态print(f"=== Tick {sim.current_tick} 仿真状态 ===")
print(f"信号源强度: {source.power}") # 应该为 15print(f"红石线强度: {line.power}") # 应该为 15print(f"实体块强度: {block.power}") # 应该为 15(无损线下)

📖 核心 API 及内置组件说明

PyRedStoneX 贴心地封装了红石模拟器中不可或缺的底层逻辑。以下是各个常用内置组件及接口的说明。

1. 基础物理组件

所有仿真对象都继承自底层的 CoreConnectiveObject,它们具有公共属性如 id, uri, power, limit, connect_count 等。

组件类名说明常见构造参数及默认值典型连接模式
Line红石线:用于传输能量。无损传输,传递的信号强度与距离无关。limit=4 (最多邻居连接数)连接 Source / Block / Relay 等
Source信号源:无条件发出红石能量的起始源。limit=4, power=15连接 Line / Block
Block实体方块:接收并传递强/弱充能,充当强阻断或大容量转发媒介。limit=6连接 Line / Torch
Slot插槽/槽位:特殊的虚拟中转槽,一般用来实现复杂器件的方向性接口。parent, power_type=PowerType.NONE内部封装使用
RelaySource红石中继器:单向能量中转。具有 1-Tick 到多个 Tick 的信号延时。power=15, max_delay=4通过 input_slotoutput_slot 连接
ComparatorSource红石比较器:用于比较(Comparison)或做减法(Subtraction)。delay=1通过输入、左右侧和输出 Slot 连接
TorchSource红石火把:提供源源不断的红石信号,若底部被充能,则熄灭。power=15, delay=1通过 bottom_slot 充能,由 power_slot 输出
Custom自定义器件:用于加载和承载来自外部插件生成的 ABI 元件。plugin_name, **kwargs视插件具体实现而定

2. 仿真器控制 (Simulator)

Simulator 对象是控制仿真时序、时间轮推进的核心。

  • run(): 持续运行仿真,直到系统内没有任何待处理的事件或遇到时间断点。
  • step() -> bool: 仿真时间往前推进 1 个 tick。如果发生了事件活动或未来有待处理日程则返回 True,若整个电路完全静止返回 False
  • pause(): 暂停当前正在运行的仿真。
  • resume(): 恢复已暂停的仿真。
  • add_tick_breakpoint(tick: int): 在指定的 tick 刻度增加一个硬件级断点(仿真运行到该 tick 时会立刻自动挂起并返回)。
  • remove_tick_breakpoint(tick: int): 移除指定 tick 上的仿真断点。
  • bind_object(*objects): 向仿真器绑定一个或多个红石元件,使其加入到当前仿真时空中。
  • bind_objects(objects_list): 绑定一组可迭代的元件。
  • enable_logging(level): 开启日志桥接。支持调试等级:DEBUG, INFO, WARN, ERROR

3. 连接性限制 (Connection Restrictions)

由于红石拓扑本身的严格性,底层对连接做了防重、防爆上限控制:

  • 任何器件不能与其自身连接。
  • 两个器件之间只能存在单条逻辑连接,不能重复建立连接。
  • 每个组件的连接数不能超出初始化时指定的 limit。如果强行连接会抛出 ConnectionLimitError 异常,不兼容类型的强行连接则会引发 ConnectiveError

🔌 插件扩展系统 (ABI Plugin Mode)

PyRedStoneX 设计了一套极致轻量、彻底解耦、无需二次编译主框架的共享库插件机制

您可以通过纯 C 语言编写极速逻辑门或特定功能电路器件,编译为 .so.dll 后在 Python 侧直接动态注册:

importosimportredstonexasrsxfromredstonex.registryimportPluginRegistry# 1. 加载动态库插件withPluginRegistry("./plugins/libgate_core.so") asreg:
# 2. 注册 C 回调函数到指定组件名reg.add(
component_name="ANDGate",
create="create_and_gate",
destroy="destroy_logic_gate",
get_property="get_logic_gate_property"
)
# 3. 实例化自定义组件并使用and_gate=rsx.Custom("ANDGate", limit=3, power=15)
sim=rsx.Simulator()
sim.bind_object(and_gate)

💡 欲了解保姆级的插件开发流程、C 语言 API 结构、内存对齐与强制转换规范、完整 C/C++ 示例以及 Python 的面向对象二次优雅包装,请阅读专门编写的指南:docs/plugin_development.md


📂 项目目录结构说明

PyRedStoneX/
├── pyproject.toml # Python 现代打包配置 (scikit-build-core 构建系统后端)
├── MANIFEST.in # 打包源码分发时的文件清单规则
├── CMakeLists.txt # 顶层 C/C++ 编译配置文件(链接 pybind11 并编译 _core 库)
├── README.md # 本说明文件
├── LICENSE # 项目许可证 (GPL-3.0-or-later)
├── CMake/ # CMake 配置辅助模板
│ └── PyRedStoneXConfig.cmake.in
├── docs/ # 官方详尽技术文档
│ └── plugin_development.md # ABI 插件开发保姆级教程 (包含 API 示例及原理规范)
├── src/ # Python 包源码主目录
│ └── redstonex/
│ ├── __init__.py # 暴露 Simulator, Built-in Objects 和 PowerType │ ├── simulator.py # Python 封装的仿真器控制器
│ ├── objects.py # Python 对各原生红石器件类的优雅封装与自动 ID 计数器
│ ├── registry.py # 插件注册中心:使用 ctypes 动态装载并解析共享库符号指针
│ ├── types.py # 红石相关的枚举定义(如充能类型 WEAK / STRONG)
│ ├── utils.py # 实用工具函数
│ ├── _core.pyi # 对 pybind11 导出的编译模块提供 PEP 561 类型注解(IDE友好)
│ └── csrc/
│ └── core.cpp # 核心 C++ pybind11 胶水代码(对接 C 语言引擎与 Python 类)
│ └── include/
│ └── redstonex/
│ └── plugin.h # 专供插件开发者引入的 C 语言统一 ABI 核心头文件
├── extern/ # 外部依赖子模块目录
│ └── RedStoneX/ # 纯 C 语言编写的高性能底层红石仿真引擎
│ ├── CMakeLists.txt # 独立编译红石 C 引擎的配置文件
│ ├── include/ # 仿真器底层 API
│ │ ├── redstonex_components.h # 底层中继器、比较器、火把等算法实现接口
│ │ ├── redstonex_obj.h # 红石元器件基类结构体和基础连接、广播行为
│ │ ├── redstonex_sim.h # 仿真器时钟轮、事件队列和主执行循环定义
│ │ └── redstonex_types.h # 底层公共基本枚举
│ └── src/ # 仿真引擎纯 C 源码实现 (redstonex_sim.c 等)
├── examples/ # 经典开发示例
│ └── gate_plugin/ # 完整的 ABI 逻辑门器件插件工程
│ ├── CMakeLists.txt # 独立编译逻辑门插件共享库的 CMake 脚本
│ ├── pyproject.toml # 插件本地打包设置
│ ├── src/gate_plugin/
│ │ ├── __init__.py # 插件注册和 AND/OR/XOR... 优雅 Python OOP 类定义
│ │ ├── csrc/
│ │ │ └── gate_plugin.c # 逻辑门 C 语言具体逻辑与 ComponentOps 回调实现
│ │ └── include/
│ │ └── gate_plugin.h # 逻辑门结构体与函数声明
│ └── tests/ # 插件逻辑门应用测试(全加器、波纹进位加法器、ALU等)
│ ├── alu_test.py
│ ├── full_adder_test.py
│ └── ripple_carry_adder_test.py
└── tests/ # 核心功能测试脚本目录
├── test.py # 原生红石大回路逻辑仿真测试
├── high_fan_out_benchmark.py # 高扇出极端仿真压力跑测
├── long_chain_benchmark.py # 长红石导线链延时与能量衰减测试
└── high_churn_torch_oscillators_benchmark.py # 高频火把振荡时钟源极端基准测试

📜 开源许可证

本项目采用 GPL-3.0-or-later 许可证开源。底层 RedStoneX 仿真引擎也包含在相应的开源许可中。

在基于本项目进行二次修改、商业化再发布或嵌入到其他软件中时,请务必遵守 GPL-3.0 协议中关于源码公开的相关约束。


🤝 贡献与讨论

  1. 提交 Issue:如果您在安装、开发插件或构建复杂电路时发现任何 bug 或未定义的异常行为,请随时在 GitHub 提交 issue。
  2. 贡献代码 (Pull Request):非常欢迎提交 PR!请遵循以下流程:
    • fork 本仓库。
    • 新建特性分支(例如 feature/logic-custom-delay)。
    • 请确保添加配套的单元测试(可以参考 tests/test.py)。
    • 提交 PR 并简要描述改动的物理机制和性能表现。

再次感谢对 PyRedStoneX 开源社区的支持!让我们用 Python 点亮属于我们的红石科技树! 💡🔴

About

Python package powerd by RedStoneX

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

PyRedStoneX

LicensePython VersionC++ StandardC Standard

PyRedStoneX 是一个面向 Python 生态的高性能红石电路逻辑模拟库。它将纯 C 编写的高效率底层红石模拟引擎 RedStoneX 通过 C++ (pybind11) 胶水层进行极致封装,不仅提供了面向对象且极其直观的 Python 接口,还开创性地设计了一套基于二进制兼容性(ABI)的插件开发模式

无论是进行红石电路的大规模逻辑实验、自动化电路验证、教学演示、还是开发自定义组件,PyRedStoneX 都能在保障极速仿真的同时,提供极佳的扩展性与开发友好度。


🗺️ 系统架构

PyRedStoneX 的架构旨在隔离底层红石仿真的高频开销与上层 Python 的业务逻辑,并提供了稳定的 ABI 插件扩展接口:

 ┌────────────────────────────────────────────────────────┐
│ Python 业务层 │
│ - 编写电路拓扑、连接导线/器件、脚本自动化/逻辑测试 │
│ - 使用 Simulator, Source, Line, custom.ANDGate 等 │
└──────────────────────────┬─────────────────────────────┘
│ (通过 pybind11 高效绑定)
┌──────────────────────────▼─────────────────────────────┐
│ C++ 胶水桥接层 │
│ - 统一管理 C++ 对象与底层 C 结构体的生命周期 (_core) │
│ - 线程安全的 C 语言日志回调映射至 Python 打印 (GIL控制) │
│ - 存储动态插件注册表 (ComponentOps Map) │
└──────────────────────────┬─────────────────────────────┘
│ (直接指针传递 / C API 调用)
┌──────────────────────────▼─────────────────────────────┐
│ RedStoneX 底层 C 仿真引擎 │
│ - 基于时间轮(Tick Wheel)与双端队列(Deque)的事件驱动系统│
│ - 极致紧凑的内存布局 (RSXConnectiveObject 结构体) │
│ - 毫秒级支持数十万红石元件高频振荡仿真 │
└──────────────────────────▲─────────────────────────────┘
│ (稳定 ABI 接口注册 / ctypes 动态加载)
┌──────────────────────────┴─────────────────────────────┐
│ C/C++ 动态链接插件库 │
│ - 符合 ComponentOps 接口规范 (.so / .dll) │
│ - 插件创建(create)、销毁(destroy)、属性查询(get_prop) │
│ - 例如: AND/OR/XOR/NOT 逻辑门, VCC/GND, 信号线插件 │
└────────────────────────────────────────────────────────┘

🛠️ 环境依赖与安装

1. 系统依赖要求

在从源码编译安装 PyRedStoneX 之前,请确保您的系统中已经安装了以下工具链:

  • C++ 编译器:支持 C++17 或更高标准。
    • Linux: GCC 8+ 或 Clang 7+
    • macOS: Xcode Command Line Tools
    • Windows: MSVC 2019 或更高版本(安装 C++ 桌面开发工作负载)
  • C 编译器:支持 C11 标准(用于编译底层 RedStoneX 引擎和 C 插件)。
  • CMake:版本在 3.15 或以上。
  • Python:版本在 3.10 或以上,并安装有 Python 头文件(如 Ubuntu 上的 python3-dev)。

2. 从源码安装

PyRedStoneX 使用现代的 scikit-build-corepybind11 进行构建管理。你可以直接通过 pip 自定义编译并安装:

# 克隆主项目及其子模块 (RedStoneX 引擎)
git clone --recursive https://github.com/SpeechlessMatt/PyRedStoneX.git
cd PyRedStoneX
# 以可编辑(Editable)开发模式安装(推荐)
python -m pip install -e .# 或者是标准安装模式
python -m pip install .

提示: --recursive 参数非常重要,用于拉取 extern/RedStoneX 底层 C 语言模拟器依赖。如果已经克隆了未包含子模块的项目,请执行 git submodule update --init --recursive


🚀 快速开始

下面是一个最简示例:创建一个红石信号源、一条导线、一个红石块,然后绑定并运行模拟。

importredstonexasrsx# 1. 创建仿真器实例sim=rsx.Simulator()
# 2. 实例化红石组件source=rsx.Source(limit=4, power=15) # 信号源:可连接4个邻居,初始强度15line=rsx.Line(limit=4) # 红石线:无损/有损充能block=rsx.Block(limit=6) # 实体方块:弱/强充能接收与转发# 3. 连接组件(建立电路拓扑)source.connect(line)
line.connect(block)
# 4. 将对象绑定到仿真器中sim.bind_object(source, line, block)
# 5. 设置仿真断点:在第 1 个 Tick 暂停sim.add_tick_breakpoint(1)
# 6. 开启控制台错误/信息日志(可选)sim.enable_logging(rsx.simulator.LogLevel.INFO)
# 7. 开始运行仿真sim.run()
# 8. 查看第 1 个 Tick 后的信号状态print(f"=== Tick {sim.current_tick} 仿真状态 ===")
print(f"信号源强度: {source.power}") # 应该为 15print(f"红石线强度: {line.power}") # 应该为 15print(f"实体块强度: {block.power}") # 应该为 15(无损线下)

📖 核心 API 及内置组件说明

PyRedStoneX 贴心地封装了红石模拟器中不可或缺的底层逻辑。以下是各个常用内置组件及接口的说明。

1. 基础物理组件

所有仿真对象都继承自底层的 CoreConnectiveObject,它们具有公共属性如 id, uri, power, limit, connect_count 等。

组件类名说明常见构造参数及默认值典型连接模式
Line红石线:用于传输能量。无损传输,传递的信号强度与距离无关。limit=4 (最多邻居连接数)连接 Source / Block / Relay 等
Source信号源:无条件发出红石能量的起始源。limit=4, power=15连接 Line / Block
Block实体方块:接收并传递强/弱充能,充当强阻断或大容量转发媒介。limit=6连接 Line / Torch
Slot插槽/槽位:特殊的虚拟中转槽,一般用来实现复杂器件的方向性接口。parent, power_type=PowerType.NONE内部封装使用
RelaySource红石中继器:单向能量中转。具有 1-Tick 到多个 Tick 的信号延时。power=15, max_delay=4通过 input_slotoutput_slot 连接
ComparatorSource红石比较器:用于比较(Comparison)或做减法(Subtraction)。delay=1通过输入、左右侧和输出 Slot 连接
TorchSource红石火把:提供源源不断的红石信号,若底部被充能,则熄灭。power=15, delay=1通过 bottom_slot 充能,由 power_slot 输出
Custom自定义器件:用于加载和承载来自外部插件生成的 ABI 元件。plugin_name, **kwargs视插件具体实现而定

2. 仿真器控制 (Simulator)

Simulator 对象是控制仿真时序、时间轮推进的核心。

  • run(): 持续运行仿真,直到系统内没有任何待处理的事件或遇到时间断点。
  • step() -> bool: 仿真时间往前推进 1 个 tick。如果发生了事件活动或未来有待处理日程则返回 True,若整个电路完全静止返回 False
  • pause(): 暂停当前正在运行的仿真。
  • resume(): 恢复已暂停的仿真。
  • add_tick_breakpoint(tick: int): 在指定的 tick 刻度增加一个硬件级断点(仿真运行到该 tick 时会立刻自动挂起并返回)。
  • remove_tick_breakpoint(tick: int): 移除指定 tick 上的仿真断点。
  • bind_object(*objects): 向仿真器绑定一个或多个红石元件,使其加入到当前仿真时空中。
  • bind_objects(objects_list): 绑定一组可迭代的元件。
  • enable_logging(level): 开启日志桥接。支持调试等级:DEBUG, INFO, WARN, ERROR

3. 连接性限制 (Connection Restrictions)

由于红石拓扑本身的严格性,底层对连接做了防重、防爆上限控制:

  • 任何器件不能与其自身连接。
  • 两个器件之间只能存在单条逻辑连接,不能重复建立连接。
  • 每个组件的连接数不能超出初始化时指定的 limit。如果强行连接会抛出 ConnectionLimitError 异常,不兼容类型的强行连接则会引发 ConnectiveError

🔌 插件扩展系统 (ABI Plugin Mode)

PyRedStoneX 设计了一套极致轻量、彻底解耦、无需二次编译主框架的共享库插件机制

您可以通过纯 C 语言编写极速逻辑门或特定功能电路器件,编译为 .so.dll 后在 Python 侧直接动态注册:

importosimportredstonexasrsxfromredstonex.registryimportPluginRegistry# 1. 加载动态库插件withPluginRegistry("./plugins/libgate_core.so") asreg:
# 2. 注册 C 回调函数到指定组件名reg.add(
component_name="ANDGate",
create="create_and_gate",
destroy="destroy_logic_gate",
get_property="get_logic_gate_property"
)
# 3. 实例化自定义组件并使用and_gate=rsx.Custom("ANDGate", limit=3, power=15)
sim=rsx.Simulator()
sim.bind_object(and_gate)

💡 欲了解保姆级的插件开发流程、C 语言 API 结构、内存对齐与强制转换规范、完整 C/C++ 示例以及 Python 的面向对象二次优雅包装,请阅读专门编写的指南:docs/plugin_development.md


📂 项目目录结构说明

PyRedStoneX/
├── pyproject.toml # Python 现代打包配置 (scikit-build-core 构建系统后端)
├── MANIFEST.in # 打包源码分发时的文件清单规则
├── CMakeLists.txt # 顶层 C/C++ 编译配置文件(链接 pybind11 并编译 _core 库)
├── README.md # 本说明文件
├── LICENSE # 项目许可证 (GPL-3.0-or-later)
├── CMake/ # CMake 配置辅助模板
│ └── PyRedStoneXConfig.cmake.in
├── docs/ # 官方详尽技术文档
│ └── plugin_development.md # ABI 插件开发保姆级教程 (包含 API 示例及原理规范)
├── src/ # Python 包源码主目录
│ └── redstonex/
│ ├── __init__.py # 暴露 Simulator, Built-in Objects 和 PowerType │ ├── simulator.py # Python 封装的仿真器控制器
│ ├── objects.py # Python 对各原生红石器件类的优雅封装与自动 ID 计数器
│ ├── registry.py # 插件注册中心:使用 ctypes 动态装载并解析共享库符号指针
│ ├── types.py # 红石相关的枚举定义(如充能类型 WEAK / STRONG)
│ ├── utils.py # 实用工具函数
│ ├── _core.pyi # 对 pybind11 导出的编译模块提供 PEP 561 类型注解(IDE友好)
│ └── csrc/
│ └── core.cpp # 核心 C++ pybind11 胶水代码(对接 C 语言引擎与 Python 类)
│ └── include/
│ └── redstonex/
│ └── plugin.h # 专供插件开发者引入的 C 语言统一 ABI 核心头文件
├── extern/ # 外部依赖子模块目录
│ └── RedStoneX/ # 纯 C 语言编写的高性能底层红石仿真引擎
│ ├── CMakeLists.txt # 独立编译红石 C 引擎的配置文件
│ ├── include/ # 仿真器底层 API
│ │ ├── redstonex_components.h # 底层中继器、比较器、火把等算法实现接口
│ │ ├── redstonex_obj.h # 红石元器件基类结构体和基础连接、广播行为
│ │ ├── redstonex_sim.h # 仿真器时钟轮、事件队列和主执行循环定义
│ │ └── redstonex_types.h # 底层公共基本枚举
│ └── src/ # 仿真引擎纯 C 源码实现 (redstonex_sim.c 等)
├── examples/ # 经典开发示例
│ └── gate_plugin/ # 完整的 ABI 逻辑门器件插件工程
│ ├── CMakeLists.txt # 独立编译逻辑门插件共享库的 CMake 脚本
│ ├── pyproject.toml # 插件本地打包设置
│ ├── src/gate_plugin/
│ │ ├── __init__.py # 插件注册和 AND/OR/XOR... 优雅 Python OOP 类定义
│ │ ├── csrc/
│ │ │ └── gate_plugin.c # 逻辑门 C 语言具体逻辑与 ComponentOps 回调实现
│ │ └── include/
│ │ └── gate_plugin.h # 逻辑门结构体与函数声明
│ └── tests/ # 插件逻辑门应用测试(全加器、波纹进位加法器、ALU等)
│ ├── alu_test.py
│ ├── full_adder_test.py
│ └── ripple_carry_adder_test.py
└── tests/ # 核心功能测试脚本目录
├── test.py # 原生红石大回路逻辑仿真测试
├── high_fan_out_benchmark.py # 高扇出极端仿真压力跑测
├── long_chain_benchmark.py # 长红石导线链延时与能量衰减测试
└── high_churn_torch_oscillators_benchmark.py # 高频火把振荡时钟源极端基准测试

📜 开源许可证

本项目采用 GPL-3.0-or-later 许可证开源。底层 RedStoneX 仿真引擎也包含在相应的开源许可中。

在基于本项目进行二次修改、商业化再发布或嵌入到其他软件中时,请务必遵守 GPL-3.0 协议中关于源码公开的相关约束。


🤝 贡献与讨论

  1. 提交 Issue:如果您在安装、开发插件或构建复杂电路时发现任何 bug 或未定义的异常行为,请随时在 GitHub 提交 issue。
  2. 贡献代码 (Pull Request):非常欢迎提交 PR!请遵循以下流程:
    • fork 本仓库。
    • 新建特性分支(例如 feature/logic-custom-delay)。
    • 请确保添加配套的单元测试(可以参考 tests/test.py)。
    • 提交 PR 并简要描述改动的物理机制和性能表现。

再次感谢对 PyRedStoneX 开源社区的支持!让我们用 Python 点亮属于我们的红石科技树! 💡🔴

About

Python package powerd by RedStoneX

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

PyRedStoneX

LicensePython VersionC++ StandardC Standard

PyRedStoneX 是一个面向 Python 生态的高性能红石电路逻辑模拟库。它将纯 C 编写的高效率底层红石模拟引擎 RedStoneX 通过 C++ (pybind11) 胶水层进行极致封装,不仅提供了面向对象且极其直观的 Python 接口,还开创性地设计了一套基于二进制兼容性(ABI)的插件开发模式

无论是进行红石电路的大规模逻辑实验、自动化电路验证、教学演示、还是开发自定义组件,PyRedStoneX 都能在保障极速仿真的同时,提供极佳的扩展性与开发友好度。


🗺️ 系统架构

PyRedStoneX 的架构旨在隔离底层红石仿真的高频开销与上层 Python 的业务逻辑,并提供了稳定的 ABI 插件扩展接口:

 ┌────────────────────────────────────────────────────────┐
│ Python 业务层 │
│ - 编写电路拓扑、连接导线/器件、脚本自动化/逻辑测试 │
│ - 使用 Simulator, Source, Line, custom.ANDGate 等 │
└──────────────────────────┬─────────────────────────────┘
│ (通过 pybind11 高效绑定)
┌──────────────────────────▼─────────────────────────────┐
│ C++ 胶水桥接层 │
│ - 统一管理 C++ 对象与底层 C 结构体的生命周期 (_core) │
│ - 线程安全的 C 语言日志回调映射至 Python 打印 (GIL控制) │
│ - 存储动态插件注册表 (ComponentOps Map) │
└──────────────────────────┬─────────────────────────────┘
│ (直接指针传递 / C API 调用)
┌──────────────────────────▼─────────────────────────────┐
│ RedStoneX 底层 C 仿真引擎 │
│ - 基于时间轮(Tick Wheel)与双端队列(Deque)的事件驱动系统│
│ - 极致紧凑的内存布局 (RSXConnectiveObject 结构体) │
│ - 毫秒级支持数十万红石元件高频振荡仿真 │
└──────────────────────────▲─────────────────────────────┘
│ (稳定 ABI 接口注册 / ctypes 动态加载)
┌──────────────────────────┴─────────────────────────────┐
│ C/C++ 动态链接插件库 │
│ - 符合 ComponentOps 接口规范 (.so / .dll) │
│ - 插件创建(create)、销毁(destroy)、属性查询(get_prop) │
│ - 例如: AND/OR/XOR/NOT 逻辑门, VCC/GND, 信号线插件 │
└────────────────────────────────────────────────────────┘

🛠️ 环境依赖与安装

1. 系统依赖要求

在从源码编译安装 PyRedStoneX 之前,请确保您的系统中已经安装了以下工具链:

  • C++ 编译器:支持 C++17 或更高标准。
    • Linux: GCC 8+ 或 Clang 7+
    • macOS: Xcode Command Line Tools
    • Windows: MSVC 2019 或更高版本(安装 C++ 桌面开发工作负载)
  • C 编译器:支持 C11 标准(用于编译底层 RedStoneX 引擎和 C 插件)。
  • CMake:版本在 3.15 或以上。
  • Python:版本在 3.10 或以上,并安装有 Python 头文件(如 Ubuntu 上的 python3-dev)。

2. 从源码安装

PyRedStoneX 使用现代的 scikit-build-corepybind11 进行构建管理。你可以直接通过 pip 自定义编译并安装:

# 克隆主项目及其子模块 (RedStoneX 引擎)
git clone --recursive https://github.com/SpeechlessMatt/PyRedStoneX.git
cd PyRedStoneX
# 以可编辑(Editable)开发模式安装(推荐)
python -m pip install -e .# 或者是标准安装模式
python -m pip install .

提示: --recursive 参数非常重要,用于拉取 extern/RedStoneX 底层 C 语言模拟器依赖。如果已经克隆了未包含子模块的项目,请执行 git submodule update --init --recursive


🚀 快速开始

下面是一个最简示例:创建一个红石信号源、一条导线、一个红石块,然后绑定并运行模拟。

importredstonexasrsx# 1. 创建仿真器实例sim=rsx.Simulator()
# 2. 实例化红石组件source=rsx.Source(limit=4, power=15) # 信号源:可连接4个邻居,初始强度15line=rsx.Line(limit=4) # 红石线:无损/有损充能block=rsx.Block(limit=6) # 实体方块:弱/强充能接收与转发# 3. 连接组件(建立电路拓扑)source.connect(line)
line.connect(block)
# 4. 将对象绑定到仿真器中sim.bind_object(source, line, block)
# 5. 设置仿真断点:在第 1 个 Tick 暂停sim.add_tick_breakpoint(1)
# 6. 开启控制台错误/信息日志(可选)sim.enable_logging(rsx.simulator.LogLevel.INFO)
# 7. 开始运行仿真sim.run()
# 8. 查看第 1 个 Tick 后的信号状态print(f"=== Tick {sim.current_tick} 仿真状态 ===")
print(f"信号源强度: {source.power}") # 应该为 15print(f"红石线强度: {line.power}") # 应该为 15print(f"实体块强度: {block.power}") # 应该为 15(无损线下)

📖 核心 API 及内置组件说明

PyRedStoneX 贴心地封装了红石模拟器中不可或缺的底层逻辑。以下是各个常用内置组件及接口的说明。

1. 基础物理组件

所有仿真对象都继承自底层的 CoreConnectiveObject,它们具有公共属性如 id, uri, power, limit, connect_count 等。

组件类名说明常见构造参数及默认值典型连接模式
Line红石线:用于传输能量。无损传输,传递的信号强度与距离无关。limit=4 (最多邻居连接数)连接 Source / Block / Relay 等
Source信号源:无条件发出红石能量的起始源。limit=4, power=15连接 Line / Block
Block实体方块:接收并传递强/弱充能,充当强阻断或大容量转发媒介。limit=6连接 Line / Torch
Slot插槽/槽位:特殊的虚拟中转槽,一般用来实现复杂器件的方向性接口。parent, power_type=PowerType.NONE内部封装使用
RelaySource红石中继器:单向能量中转。具有 1-Tick 到多个 Tick 的信号延时。power=15, max_delay=4通过 input_slotoutput_slot 连接
ComparatorSource红石比较器:用于比较(Comparison)或做减法(Subtraction)。delay=1通过输入、左右侧和输出 Slot 连接
TorchSource红石火把:提供源源不断的红石信号,若底部被充能,则熄灭。power=15, delay=1通过 bottom_slot 充能,由 power_slot 输出
Custom自定义器件:用于加载和承载来自外部插件生成的 ABI 元件。plugin_name, **kwargs视插件具体实现而定

2. 仿真器控制 (Simulator)

Simulator 对象是控制仿真时序、时间轮推进的核心。

  • run(): 持续运行仿真,直到系统内没有任何待处理的事件或遇到时间断点。
  • step() -> bool: 仿真时间往前推进 1 个 tick。如果发生了事件活动或未来有待处理日程则返回 True,若整个电路完全静止返回 False
  • pause(): 暂停当前正在运行的仿真。
  • resume(): 恢复已暂停的仿真。
  • add_tick_breakpoint(tick: int): 在指定的 tick 刻度增加一个硬件级断点(仿真运行到该 tick 时会立刻自动挂起并返回)。
  • remove_tick_breakpoint(tick: int): 移除指定 tick 上的仿真断点。
  • bind_object(*objects): 向仿真器绑定一个或多个红石元件,使其加入到当前仿真时空中。
  • bind_objects(objects_list): 绑定一组可迭代的元件。
  • enable_logging(level): 开启日志桥接。支持调试等级:DEBUG, INFO, WARN, ERROR

3. 连接性限制 (Connection Restrictions)

由于红石拓扑本身的严格性,底层对连接做了防重、防爆上限控制:

  • 任何器件不能与其自身连接。
  • 两个器件之间只能存在单条逻辑连接,不能重复建立连接。
  • 每个组件的连接数不能超出初始化时指定的 limit。如果强行连接会抛出 ConnectionLimitError 异常,不兼容类型的强行连接则会引发 ConnectiveError

🔌 插件扩展系统 (ABI Plugin Mode)

PyRedStoneX 设计了一套极致轻量、彻底解耦、无需二次编译主框架的共享库插件机制

您可以通过纯 C 语言编写极速逻辑门或特定功能电路器件,编译为 .so.dll 后在 Python 侧直接动态注册:

importosimportredstonexasrsxfromredstonex.registryimportPluginRegistry# 1. 加载动态库插件withPluginRegistry("./plugins/libgate_core.so") asreg:
# 2. 注册 C 回调函数到指定组件名reg.add(
component_name="ANDGate",
create="create_and_gate",
destroy="destroy_logic_gate",
get_property="get_logic_gate_property"
)
# 3. 实例化自定义组件并使用and_gate=rsx.Custom("ANDGate", limit=3, power=15)
sim=rsx.Simulator()
sim.bind_object(and_gate)

💡 欲了解保姆级的插件开发流程、C 语言 API 结构、内存对齐与强制转换规范、完整 C/C++ 示例以及 Python 的面向对象二次优雅包装,请阅读专门编写的指南:docs/plugin_development.md


📂 项目目录结构说明

PyRedStoneX/
├── pyproject.toml # Python 现代打包配置 (scikit-build-core 构建系统后端)
├── MANIFEST.in # 打包源码分发时的文件清单规则
├── CMakeLists.txt # 顶层 C/C++ 编译配置文件(链接 pybind11 并编译 _core 库)
├── README.md # 本说明文件
├── LICENSE # 项目许可证 (GPL-3.0-or-later)
├── CMake/ # CMake 配置辅助模板
│ └── PyRedStoneXConfig.cmake.in
├── docs/ # 官方详尽技术文档
│ └── plugin_development.md # ABI 插件开发保姆级教程 (包含 API 示例及原理规范)
├── src/ # Python 包源码主目录
│ └── redstonex/
│ ├── __init__.py # 暴露 Simulator, Built-in Objects 和 PowerType │ ├── simulator.py # Python 封装的仿真器控制器
│ ├── objects.py # Python 对各原生红石器件类的优雅封装与自动 ID 计数器
│ ├── registry.py # 插件注册中心:使用 ctypes 动态装载并解析共享库符号指针
│ ├── types.py # 红石相关的枚举定义(如充能类型 WEAK / STRONG)
│ ├── utils.py # 实用工具函数
│ ├── _core.pyi # 对 pybind11 导出的编译模块提供 PEP 561 类型注解(IDE友好)
│ └── csrc/
│ └── core.cpp # 核心 C++ pybind11 胶水代码(对接 C 语言引擎与 Python 类)
│ └── include/
│ └── redstonex/
│ └── plugin.h # 专供插件开发者引入的 C 语言统一 ABI 核心头文件
├── extern/ # 外部依赖子模块目录
│ └── RedStoneX/ # 纯 C 语言编写的高性能底层红石仿真引擎
│ ├── CMakeLists.txt # 独立编译红石 C 引擎的配置文件
│ ├── include/ # 仿真器底层 API
│ │ ├── redstonex_components.h # 底层中继器、比较器、火把等算法实现接口
│ │ ├── redstonex_obj.h # 红石元器件基类结构体和基础连接、广播行为
│ │ ├── redstonex_sim.h # 仿真器时钟轮、事件队列和主执行循环定义
│ │ └── redstonex_types.h # 底层公共基本枚举
│ └── src/ # 仿真引擎纯 C 源码实现 (redstonex_sim.c 等)
├── examples/ # 经典开发示例
│ └── gate_plugin/ # 完整的 ABI 逻辑门器件插件工程
│ ├── CMakeLists.txt # 独立编译逻辑门插件共享库的 CMake 脚本
│ ├── pyproject.toml # 插件本地打包设置
│ ├── src/gate_plugin/
│ │ ├── __init__.py # 插件注册和 AND/OR/XOR... 优雅 Python OOP 类定义
│ │ ├── csrc/
│ │ │ └── gate_plugin.c # 逻辑门 C 语言具体逻辑与 ComponentOps 回调实现
│ │ └── include/
│ │ └── gate_plugin.h # 逻辑门结构体与函数声明
│ └── tests/ # 插件逻辑门应用测试(全加器、波纹进位加法器、ALU等)
│ ├── alu_test.py
│ ├── full_adder_test.py
│ └── ripple_carry_adder_test.py
└── tests/ # 核心功能测试脚本目录
├── test.py # 原生红石大回路逻辑仿真测试
├── high_fan_out_benchmark.py # 高扇出极端仿真压力跑测
├── long_chain_benchmark.py # 长红石导线链延时与能量衰减测试
└── high_churn_torch_oscillators_benchmark.py # 高频火把振荡时钟源极端基准测试

📜 开源许可证

本项目采用 GPL-3.0-or-later 许可证开源。底层 RedStoneX 仿真引擎也包含在相应的开源许可中。

在基于本项目进行二次修改、商业化再发布或嵌入到其他软件中时,请务必遵守 GPL-3.0 协议中关于源码公开的相关约束。


🤝 贡献与讨论

  1. 提交 Issue:如果您在安装、开发插件或构建复杂电路时发现任何 bug 或未定义的异常行为,请随时在 GitHub 提交 issue。
  2. 贡献代码 (Pull Request):非常欢迎提交 PR!请遵循以下流程:
    • fork 本仓库。
    • 新建特性分支(例如 feature/logic-custom-delay)。
    • 请确保添加配套的单元测试(可以参考 tests/test.py)。
    • 提交 PR 并简要描述改动的物理机制和性能表现。

再次感谢对 PyRedStoneX 开源社区的支持!让我们用 Python 点亮属于我们的红石科技树! 💡🔴

About

Python package powerd by RedStoneX

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

PyRedStoneX

LicensePython VersionC++ StandardC Standard

PyRedStoneX 是一个面向 Python 生态的高性能红石电路逻辑模拟库。它将纯 C 编写的高效率底层红石模拟引擎 RedStoneX 通过 C++ (pybind11) 胶水层进行极致封装,不仅提供了面向对象且极其直观的 Python 接口,还开创性地设计了一套基于二进制兼容性(ABI)的插件开发模式

无论是进行红石电路的大规模逻辑实验、自动化电路验证、教学演示、还是开发自定义组件,PyRedStoneX 都能在保障极速仿真的同时,提供极佳的扩展性与开发友好度。


🗺️ 系统架构

PyRedStoneX 的架构旨在隔离底层红石仿真的高频开销与上层 Python 的业务逻辑,并提供了稳定的 ABI 插件扩展接口:

 ┌────────────────────────────────────────────────────────┐
│ Python 业务层 │
│ - 编写电路拓扑、连接导线/器件、脚本自动化/逻辑测试 │
│ - 使用 Simulator, Source, Line, custom.ANDGate 等 │
└──────────────────────────┬─────────────────────────────┘
│ (通过 pybind11 高效绑定)
┌──────────────────────────▼─────────────────────────────┐
│ C++ 胶水桥接层 │
│ - 统一管理 C++ 对象与底层 C 结构体的生命周期 (_core) │
│ - 线程安全的 C 语言日志回调映射至 Python 打印 (GIL控制) │
│ - 存储动态插件注册表 (ComponentOps Map) │
└──────────────────────────┬─────────────────────────────┘
│ (直接指针传递 / C API 调用)
┌──────────────────────────▼─────────────────────────────┐
│ RedStoneX 底层 C 仿真引擎 │
│ - 基于时间轮(Tick Wheel)与双端队列(Deque)的事件驱动系统│
│ - 极致紧凑的内存布局 (RSXConnectiveObject 结构体) │
│ - 毫秒级支持数十万红石元件高频振荡仿真 │
└──────────────────────────▲─────────────────────────────┘
│ (稳定 ABI 接口注册 / ctypes 动态加载)
┌──────────────────────────┴─────────────────────────────┐
│ C/C++ 动态链接插件库 │
│ - 符合 ComponentOps 接口规范 (.so / .dll) │
│ - 插件创建(create)、销毁(destroy)、属性查询(get_prop) │
│ - 例如: AND/OR/XOR/NOT 逻辑门, VCC/GND, 信号线插件 │
└────────────────────────────────────────────────────────┘

🛠️ 环境依赖与安装

1. 系统依赖要求

在从源码编译安装 PyRedStoneX 之前,请确保您的系统中已经安装了以下工具链:

  • C++ 编译器:支持 C++17 或更高标准。
    • Linux: GCC 8+ 或 Clang 7+
    • macOS: Xcode Command Line Tools
    • Windows: MSVC 2019 或更高版本(安装 C++ 桌面开发工作负载)
  • C 编译器:支持 C11 标准(用于编译底层 RedStoneX 引擎和 C 插件)。
  • CMake:版本在 3.15 或以上。
  • Python:版本在 3.10 或以上,并安装有 Python 头文件(如 Ubuntu 上的 python3-dev)。

2. 从源码安装

PyRedStoneX 使用现代的 scikit-build-corepybind11 进行构建管理。你可以直接通过 pip 自定义编译并安装:

# 克隆主项目及其子模块 (RedStoneX 引擎)
git clone --recursive https://github.com/SpeechlessMatt/PyRedStoneX.git
cd PyRedStoneX
# 以可编辑(Editable)开发模式安装(推荐)
python -m pip install -e .# 或者是标准安装模式
python -m pip install .

提示: --recursive 参数非常重要,用于拉取 extern/RedStoneX 底层 C 语言模拟器依赖。如果已经克隆了未包含子模块的项目,请执行 git submodule update --init --recursive


🚀 快速开始

下面是一个最简示例:创建一个红石信号源、一条导线、一个红石块,然后绑定并运行模拟。

importredstonexasrsx# 1. 创建仿真器实例sim=rsx.Simulator()
# 2. 实例化红石组件source=rsx.Source(limit=4, power=15) # 信号源:可连接4个邻居,初始强度15line=rsx.Line(limit=4) # 红石线:无损/有损充能block=rsx.Block(limit=6) # 实体方块:弱/强充能接收与转发# 3. 连接组件(建立电路拓扑)source.connect(line)
line.connect(block)
# 4. 将对象绑定到仿真器中sim.bind_object(source, line, block)
# 5. 设置仿真断点:在第 1 个 Tick 暂停sim.add_tick_breakpoint(1)
# 6. 开启控制台错误/信息日志(可选)sim.enable_logging(rsx.simulator.LogLevel.INFO)
# 7. 开始运行仿真sim.run()
# 8. 查看第 1 个 Tick 后的信号状态print(f"=== Tick {sim.current_tick} 仿真状态 ===")
print(f"信号源强度: {source.power}") # 应该为 15print(f"红石线强度: {line.power}") # 应该为 15print(f"实体块强度: {block.power}") # 应该为 15(无损线下)

📖 核心 API 及内置组件说明

PyRedStoneX 贴心地封装了红石模拟器中不可或缺的底层逻辑。以下是各个常用内置组件及接口的说明。

1. 基础物理组件

所有仿真对象都继承自底层的 CoreConnectiveObject,它们具有公共属性如 id, uri, power, limit, connect_count 等。

组件类名说明常见构造参数及默认值典型连接模式
Line红石线:用于传输能量。无损传输,传递的信号强度与距离无关。limit=4 (最多邻居连接数)连接 Source / Block / Relay 等
Source信号源:无条件发出红石能量的起始源。limit=4, power=15连接 Line / Block
Block实体方块:接收并传递强/弱充能,充当强阻断或大容量转发媒介。limit=6连接 Line / Torch
Slot插槽/槽位:特殊的虚拟中转槽,一般用来实现复杂器件的方向性接口。parent, power_type=PowerType.NONE内部封装使用
RelaySource红石中继器:单向能量中转。具有 1-Tick 到多个 Tick 的信号延时。power=15, max_delay=4通过 input_slotoutput_slot 连接
ComparatorSource红石比较器:用于比较(Comparison)或做减法(Subtraction)。delay=1通过输入、左右侧和输出 Slot 连接
TorchSource红石火把:提供源源不断的红石信号,若底部被充能,则熄灭。power=15, delay=1通过 bottom_slot 充能,由 power_slot 输出
Custom自定义器件:用于加载和承载来自外部插件生成的 ABI 元件。plugin_name, **kwargs视插件具体实现而定

2. 仿真器控制 (Simulator)

Simulator 对象是控制仿真时序、时间轮推进的核心。

  • run(): 持续运行仿真,直到系统内没有任何待处理的事件或遇到时间断点。
  • step() -> bool: 仿真时间往前推进 1 个 tick。如果发生了事件活动或未来有待处理日程则返回 True,若整个电路完全静止返回 False
  • pause(): 暂停当前正在运行的仿真。
  • resume(): 恢复已暂停的仿真。
  • add_tick_breakpoint(tick: int): 在指定的 tick 刻度增加一个硬件级断点(仿真运行到该 tick 时会立刻自动挂起并返回)。
  • remove_tick_breakpoint(tick: int): 移除指定 tick 上的仿真断点。
  • bind_object(*objects): 向仿真器绑定一个或多个红石元件,使其加入到当前仿真时空中。
  • bind_objects(objects_list): 绑定一组可迭代的元件。
  • enable_logging(level): 开启日志桥接。支持调试等级:DEBUG, INFO, WARN, ERROR

3. 连接性限制 (Connection Restrictions)

由于红石拓扑本身的严格性,底层对连接做了防重、防爆上限控制:

  • 任何器件不能与其自身连接。
  • 两个器件之间只能存在单条逻辑连接,不能重复建立连接。
  • 每个组件的连接数不能超出初始化时指定的 limit。如果强行连接会抛出 ConnectionLimitError 异常,不兼容类型的强行连接则会引发 ConnectiveError

🔌 插件扩展系统 (ABI Plugin Mode)

PyRedStoneX 设计了一套极致轻量、彻底解耦、无需二次编译主框架的共享库插件机制

您可以通过纯 C 语言编写极速逻辑门或特定功能电路器件,编译为 .so.dll 后在 Python 侧直接动态注册:

importosimportredstonexasrsxfromredstonex.registryimportPluginRegistry# 1. 加载动态库插件withPluginRegistry("./plugins/libgate_core.so") asreg:
# 2. 注册 C 回调函数到指定组件名reg.add(
component_name="ANDGate",
create="create_and_gate",
destroy="destroy_logic_gate",
get_property="get_logic_gate_property"
)
# 3. 实例化自定义组件并使用and_gate=rsx.Custom("ANDGate", limit=3, power=15)
sim=rsx.Simulator()
sim.bind_object(and_gate)

💡 欲了解保姆级的插件开发流程、C 语言 API 结构、内存对齐与强制转换规范、完整 C/C++ 示例以及 Python 的面向对象二次优雅包装,请阅读专门编写的指南:docs/plugin_development.md


📂 项目目录结构说明

PyRedStoneX/
├── pyproject.toml # Python 现代打包配置 (scikit-build-core 构建系统后端)
├── MANIFEST.in # 打包源码分发时的文件清单规则
├── CMakeLists.txt # 顶层 C/C++ 编译配置文件(链接 pybind11 并编译 _core 库)
├── README.md # 本说明文件
├── LICENSE # 项目许可证 (GPL-3.0-or-later)
├── CMake/ # CMake 配置辅助模板
│ └── PyRedStoneXConfig.cmake.in
├── docs/ # 官方详尽技术文档
│ └── plugin_development.md # ABI 插件开发保姆级教程 (包含 API 示例及原理规范)
├── src/ # Python 包源码主目录
│ └── redstonex/
│ ├── __init__.py # 暴露 Simulator, Built-in Objects 和 PowerType │ ├── simulator.py # Python 封装的仿真器控制器
│ ├── objects.py # Python 对各原生红石器件类的优雅封装与自动 ID 计数器
│ ├── registry.py # 插件注册中心:使用 ctypes 动态装载并解析共享库符号指针
│ ├── types.py # 红石相关的枚举定义(如充能类型 WEAK / STRONG)
│ ├── utils.py # 实用工具函数
│ ├── _core.pyi # 对 pybind11 导出的编译模块提供 PEP 561 类型注解(IDE友好)
│ └── csrc/
│ └── core.cpp # 核心 C++ pybind11 胶水代码(对接 C 语言引擎与 Python 类)
│ └── include/
│ └── redstonex/
│ └── plugin.h # 专供插件开发者引入的 C 语言统一 ABI 核心头文件
├── extern/ # 外部依赖子模块目录
│ └── RedStoneX/ # 纯 C 语言编写的高性能底层红石仿真引擎
│ ├── CMakeLists.txt # 独立编译红石 C 引擎的配置文件
│ ├── include/ # 仿真器底层 API
│ │ ├── redstonex_components.h # 底层中继器、比较器、火把等算法实现接口
│ │ ├── redstonex_obj.h # 红石元器件基类结构体和基础连接、广播行为
│ │ ├── redstonex_sim.h # 仿真器时钟轮、事件队列和主执行循环定义
│ │ └── redstonex_types.h # 底层公共基本枚举
│ └── src/ # 仿真引擎纯 C 源码实现 (redstonex_sim.c 等)
├── examples/ # 经典开发示例
│ └── gate_plugin/ # 完整的 ABI 逻辑门器件插件工程
│ ├── CMakeLists.txt # 独立编译逻辑门插件共享库的 CMake 脚本
│ ├── pyproject.toml # 插件本地打包设置
│ ├── src/gate_plugin/
│ │ ├── __init__.py # 插件注册和 AND/OR/XOR... 优雅 Python OOP 类定义
│ │ ├── csrc/
│ │ │ └── gate_plugin.c # 逻辑门 C 语言具体逻辑与 ComponentOps 回调实现
│ │ └── include/
│ │ └── gate_plugin.h # 逻辑门结构体与函数声明
│ └── tests/ # 插件逻辑门应用测试(全加器、波纹进位加法器、ALU等)
│ ├── alu_test.py
│ ├── full_adder_test.py
│ └── ripple_carry_adder_test.py
└── tests/ # 核心功能测试脚本目录
├── test.py # 原生红石大回路逻辑仿真测试
├── high_fan_out_benchmark.py # 高扇出极端仿真压力跑测
├── long_chain_benchmark.py # 长红石导线链延时与能量衰减测试
└── high_churn_torch_oscillators_benchmark.py # 高频火把振荡时钟源极端基准测试

📜 开源许可证

本项目采用 GPL-3.0-or-later 许可证开源。底层 RedStoneX 仿真引擎也包含在相应的开源许可中。

在基于本项目进行二次修改、商业化再发布或嵌入到其他软件中时,请务必遵守 GPL-3.0 协议中关于源码公开的相关约束。


🤝 贡献与讨论

  1. 提交 Issue:如果您在安装、开发插件或构建复杂电路时发现任何 bug 或未定义的异常行为,请随时在 GitHub 提交 issue。
  2. 贡献代码 (Pull Request):非常欢迎提交 PR!请遵循以下流程:
    • fork 本仓库。
    • 新建特性分支(例如 feature/logic-custom-delay)。
    • 请确保添加配套的单元测试(可以参考 tests/test.py)。
    • 提交 PR 并简要描述改动的物理机制和性能表现。

再次感谢对 PyRedStoneX 开源社区的支持!让我们用 Python 点亮属于我们的红石科技树! 💡🔴

About

Python package powerd by RedStoneX

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

PyRedStoneX

LicensePython VersionC++ StandardC Standard

PyRedStoneX 是一个面向 Python 生态的高性能红石电路逻辑模拟库。它将纯 C 编写的高效率底层红石模拟引擎 RedStoneX 通过 C++ (pybind11) 胶水层进行极致封装,不仅提供了面向对象且极其直观的 Python 接口,还开创性地设计了一套基于二进制兼容性(ABI)的插件开发模式

无论是进行红石电路的大规模逻辑实验、自动化电路验证、教学演示、还是开发自定义组件,PyRedStoneX 都能在保障极速仿真的同时,提供极佳的扩展性与开发友好度。


🗺️ 系统架构

PyRedStoneX 的架构旨在隔离底层红石仿真的高频开销与上层 Python 的业务逻辑,并提供了稳定的 ABI 插件扩展接口:

 ┌────────────────────────────────────────────────────────┐
│ Python 业务层 │
│ - 编写电路拓扑、连接导线/器件、脚本自动化/逻辑测试 │
│ - 使用 Simulator, Source, Line, custom.ANDGate 等 │
└──────────────────────────┬─────────────────────────────┘
│ (通过 pybind11 高效绑定)
┌──────────────────────────▼─────────────────────────────┐
│ C++ 胶水桥接层 │
│ - 统一管理 C++ 对象与底层 C 结构体的生命周期 (_core) │
│ - 线程安全的 C 语言日志回调映射至 Python 打印 (GIL控制) │
│ - 存储动态插件注册表 (ComponentOps Map) │
└──────────────────────────┬─────────────────────────────┘
│ (直接指针传递 / C API 调用)
┌──────────────────────────▼─────────────────────────────┐
│ RedStoneX 底层 C 仿真引擎 │
│ - 基于时间轮(Tick Wheel)与双端队列(Deque)的事件驱动系统│
│ - 极致紧凑的内存布局 (RSXConnectiveObject 结构体) │
│ - 毫秒级支持数十万红石元件高频振荡仿真 │
└──────────────────────────▲─────────────────────────────┘
│ (稳定 ABI 接口注册 / ctypes 动态加载)
┌──────────────────────────┴─────────────────────────────┐
│ C/C++ 动态链接插件库 │
│ - 符合 ComponentOps 接口规范 (.so / .dll) │
│ - 插件创建(create)、销毁(destroy)、属性查询(get_prop) │
│ - 例如: AND/OR/XOR/NOT 逻辑门, VCC/GND, 信号线插件 │
└────────────────────────────────────────────────────────┘

🛠️ 环境依赖与安装

1. 系统依赖要求

在从源码编译安装 PyRedStoneX 之前,请确保您的系统中已经安装了以下工具链:

  • C++ 编译器:支持 C++17 或更高标准。
    • Linux: GCC 8+ 或 Clang 7+
    • macOS: Xcode Command Line Tools
    • Windows: MSVC 2019 或更高版本(安装 C++ 桌面开发工作负载)
  • C 编译器:支持 C11 标准(用于编译底层 RedStoneX 引擎和 C 插件)。
  • CMake:版本在 3.15 或以上。
  • Python:版本在 3.10 或以上,并安装有 Python 头文件(如 Ubuntu 上的 python3-dev)。

2. 从源码安装

PyRedStoneX 使用现代的 scikit-build-corepybind11 进行构建管理。你可以直接通过 pip 自定义编译并安装:

# 克隆主项目及其子模块 (RedStoneX 引擎)
git clone --recursive https://github.com/SpeechlessMatt/PyRedStoneX.git
cd PyRedStoneX
# 以可编辑(Editable)开发模式安装(推荐)
python -m pip install -e .# 或者是标准安装模式
python -m pip install .

提示: --recursive 参数非常重要,用于拉取 extern/RedStoneX 底层 C 语言模拟器依赖。如果已经克隆了未包含子模块的项目,请执行 git submodule update --init --recursive


🚀 快速开始

下面是一个最简示例:创建一个红石信号源、一条导线、一个红石块,然后绑定并运行模拟。

importredstonexasrsx# 1. 创建仿真器实例sim=rsx.Simulator()
# 2. 实例化红石组件source=rsx.Source(limit=4, power=15) # 信号源:可连接4个邻居,初始强度15line=rsx.Line(limit=4) # 红石线:无损/有损充能block=rsx.Block(limit=6) # 实体方块:弱/强充能接收与转发# 3. 连接组件(建立电路拓扑)source.connect(line)
line.connect(block)
# 4. 将对象绑定到仿真器中sim.bind_object(source, line, block)
# 5. 设置仿真断点:在第 1 个 Tick 暂停sim.add_tick_breakpoint(1)
# 6. 开启控制台错误/信息日志(可选)sim.enable_logging(rsx.simulator.LogLevel.INFO)
# 7. 开始运行仿真sim.run()
# 8. 查看第 1 个 Tick 后的信号状态print(f"=== Tick {sim.current_tick} 仿真状态 ===")
print(f"信号源强度: {source.power}") # 应该为 15print(f"红石线强度: {line.power}") # 应该为 15print(f"实体块强度: {block.power}") # 应该为 15(无损线下)

📖 核心 API 及内置组件说明

PyRedStoneX 贴心地封装了红石模拟器中不可或缺的底层逻辑。以下是各个常用内置组件及接口的说明。

1. 基础物理组件

所有仿真对象都继承自底层的 CoreConnectiveObject,它们具有公共属性如 id, uri, power, limit, connect_count 等。

组件类名说明常见构造参数及默认值典型连接模式
Line红石线:用于传输能量。无损传输,传递的信号强度与距离无关。limit=4 (最多邻居连接数)连接 Source / Block / Relay 等
Source信号源:无条件发出红石能量的起始源。limit=4, power=15连接 Line / Block
Block实体方块:接收并传递强/弱充能,充当强阻断或大容量转发媒介。limit=6连接 Line / Torch
Slot插槽/槽位:特殊的虚拟中转槽,一般用来实现复杂器件的方向性接口。parent, power_type=PowerType.NONE内部封装使用
RelaySource红石中继器:单向能量中转。具有 1-Tick 到多个 Tick 的信号延时。power=15, max_delay=4通过 input_slotoutput_slot 连接
ComparatorSource红石比较器:用于比较(Comparison)或做减法(Subtraction)。delay=1通过输入、左右侧和输出 Slot 连接
TorchSource红石火把:提供源源不断的红石信号,若底部被充能,则熄灭。power=15, delay=1通过 bottom_slot 充能,由 power_slot 输出
Custom自定义器件:用于加载和承载来自外部插件生成的 ABI 元件。plugin_name, **kwargs视插件具体实现而定

2. 仿真器控制 (Simulator)

Simulator 对象是控制仿真时序、时间轮推进的核心。

  • run(): 持续运行仿真,直到系统内没有任何待处理的事件或遇到时间断点。
  • step() -> bool: 仿真时间往前推进 1 个 tick。如果发生了事件活动或未来有待处理日程则返回 True,若整个电路完全静止返回 False
  • pause(): 暂停当前正在运行的仿真。
  • resume(): 恢复已暂停的仿真。
  • add_tick_breakpoint(tick: int): 在指定的 tick 刻度增加一个硬件级断点(仿真运行到该 tick 时会立刻自动挂起并返回)。
  • remove_tick_breakpoint(tick: int): 移除指定 tick 上的仿真断点。
  • bind_object(*objects): 向仿真器绑定一个或多个红石元件,使其加入到当前仿真时空中。
  • bind_objects(objects_list): 绑定一组可迭代的元件。
  • enable_logging(level): 开启日志桥接。支持调试等级:DEBUG, INFO, WARN, ERROR

3. 连接性限制 (Connection Restrictions)

由于红石拓扑本身的严格性,底层对连接做了防重、防爆上限控制:

  • 任何器件不能与其自身连接。
  • 两个器件之间只能存在单条逻辑连接,不能重复建立连接。
  • 每个组件的连接数不能超出初始化时指定的 limit。如果强行连接会抛出 ConnectionLimitError 异常,不兼容类型的强行连接则会引发 ConnectiveError

🔌 插件扩展系统 (ABI Plugin Mode)

PyRedStoneX 设计了一套极致轻量、彻底解耦、无需二次编译主框架的共享库插件机制

您可以通过纯 C 语言编写极速逻辑门或特定功能电路器件,编译为 .so.dll 后在 Python 侧直接动态注册:

importosimportredstonexasrsxfromredstonex.registryimportPluginRegistry# 1. 加载动态库插件withPluginRegistry("./plugins/libgate_core.so") asreg:
# 2. 注册 C 回调函数到指定组件名reg.add(
component_name="ANDGate",
create="create_and_gate",
destroy="destroy_logic_gate",
get_property="get_logic_gate_property"
)
# 3. 实例化自定义组件并使用and_gate=rsx.Custom("ANDGate", limit=3, power=15)
sim=rsx.Simulator()
sim.bind_object(and_gate)

💡 欲了解保姆级的插件开发流程、C 语言 API 结构、内存对齐与强制转换规范、完整 C/C++ 示例以及 Python 的面向对象二次优雅包装,请阅读专门编写的指南:docs/plugin_development.md


📂 项目目录结构说明

PyRedStoneX/
├── pyproject.toml # Python 现代打包配置 (scikit-build-core 构建系统后端)
├── MANIFEST.in # 打包源码分发时的文件清单规则
├── CMakeLists.txt # 顶层 C/C++ 编译配置文件(链接 pybind11 并编译 _core 库)
├── README.md # 本说明文件
├── LICENSE # 项目许可证 (GPL-3.0-or-later)
├── CMake/ # CMake 配置辅助模板
│ └── PyRedStoneXConfig.cmake.in
├── docs/ # 官方详尽技术文档
│ └── plugin_development.md # ABI 插件开发保姆级教程 (包含 API 示例及原理规范)
├── src/ # Python 包源码主目录
│ └── redstonex/
│ ├── __init__.py # 暴露 Simulator, Built-in Objects 和 PowerType │ ├── simulator.py # Python 封装的仿真器控制器
│ ├── objects.py # Python 对各原生红石器件类的优雅封装与自动 ID 计数器
│ ├── registry.py # 插件注册中心:使用 ctypes 动态装载并解析共享库符号指针
│ ├── types.py # 红石相关的枚举定义(如充能类型 WEAK / STRONG)
│ ├── utils.py # 实用工具函数
│ ├── _core.pyi # 对 pybind11 导出的编译模块提供 PEP 561 类型注解(IDE友好)
│ └── csrc/
│ └── core.cpp # 核心 C++ pybind11 胶水代码(对接 C 语言引擎与 Python 类)
│ └── include/
│ └── redstonex/
│ └── plugin.h # 专供插件开发者引入的 C 语言统一 ABI 核心头文件
├── extern/ # 外部依赖子模块目录
│ └── RedStoneX/ # 纯 C 语言编写的高性能底层红石仿真引擎
│ ├── CMakeLists.txt # 独立编译红石 C 引擎的配置文件
│ ├── include/ # 仿真器底层 API
│ │ ├── redstonex_components.h # 底层中继器、比较器、火把等算法实现接口
│ │ ├── redstonex_obj.h # 红石元器件基类结构体和基础连接、广播行为
│ │ ├── redstonex_sim.h # 仿真器时钟轮、事件队列和主执行循环定义
│ │ └── redstonex_types.h # 底层公共基本枚举
│ └── src/ # 仿真引擎纯 C 源码实现 (redstonex_sim.c 等)
├── examples/ # 经典开发示例
│ └── gate_plugin/ # 完整的 ABI 逻辑门器件插件工程
│ ├── CMakeLists.txt # 独立编译逻辑门插件共享库的 CMake 脚本
│ ├── pyproject.toml # 插件本地打包设置
│ ├── src/gate_plugin/
│ │ ├── __init__.py # 插件注册和 AND/OR/XOR... 优雅 Python OOP 类定义
│ │ ├── csrc/
│ │ │ └── gate_plugin.c # 逻辑门 C 语言具体逻辑与 ComponentOps 回调实现
│ │ └── include/
│ │ └── gate_plugin.h # 逻辑门结构体与函数声明
│ └── tests/ # 插件逻辑门应用测试(全加器、波纹进位加法器、ALU等)
│ ├── alu_test.py
│ ├── full_adder_test.py
│ └── ripple_carry_adder_test.py
└── tests/ # 核心功能测试脚本目录
├── test.py # 原生红石大回路逻辑仿真测试
├── high_fan_out_benchmark.py # 高扇出极端仿真压力跑测
├── long_chain_benchmark.py # 长红石导线链延时与能量衰减测试
└── high_churn_torch_oscillators_benchmark.py # 高频火把振荡时钟源极端基准测试

📜 开源许可证

本项目采用 GPL-3.0-or-later 许可证开源。底层 RedStoneX 仿真引擎也包含在相应的开源许可中。

在基于本项目进行二次修改、商业化再发布或嵌入到其他软件中时,请务必遵守 GPL-3.0 协议中关于源码公开的相关约束。


🤝 贡献与讨论

  1. 提交 Issue:如果您在安装、开发插件或构建复杂电路时发现任何 bug 或未定义的异常行为,请随时在 GitHub 提交 issue。
  2. 贡献代码 (Pull Request):非常欢迎提交 PR!请遵循以下流程:
    • fork 本仓库。
    • 新建特性分支(例如 feature/logic-custom-delay)。
    • 请确保添加配套的单元测试(可以参考 tests/test.py)。
    • 提交 PR 并简要描述改动的物理机制和性能表现。

再次感谢对 PyRedStoneX 开源社区的支持!让我们用 Python 点亮属于我们的红石科技树! 💡🔴

About

Python package powerd by RedStoneX

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

PyRedStoneX

LicensePython VersionC++ StandardC Standard

PyRedStoneX 是一个面向 Python 生态的高性能红石电路逻辑模拟库。它将纯 C 编写的高效率底层红石模拟引擎 RedStoneX 通过 C++ (pybind11) 胶水层进行极致封装,不仅提供了面向对象且极其直观的 Python 接口,还开创性地设计了一套基于二进制兼容性(ABI)的插件开发模式

无论是进行红石电路的大规模逻辑实验、自动化电路验证、教学演示、还是开发自定义组件,PyRedStoneX 都能在保障极速仿真的同时,提供极佳的扩展性与开发友好度。


🗺️ 系统架构

PyRedStoneX 的架构旨在隔离底层红石仿真的高频开销与上层 Python 的业务逻辑,并提供了稳定的 ABI 插件扩展接口:

 ┌────────────────────────────────────────────────────────┐
│ Python 业务层 │
│ - 编写电路拓扑、连接导线/器件、脚本自动化/逻辑测试 │
│ - 使用 Simulator, Source, Line, custom.ANDGate 等 │
└──────────────────────────┬─────────────────────────────┘
│ (通过 pybind11 高效绑定)
┌──────────────────────────▼─────────────────────────────┐
│ C++ 胶水桥接层 │
│ - 统一管理 C++ 对象与底层 C 结构体的生命周期 (_core) │
│ - 线程安全的 C 语言日志回调映射至 Python 打印 (GIL控制) │
│ - 存储动态插件注册表 (ComponentOps Map) │
└──────────────────────────┬─────────────────────────────┘
│ (直接指针传递 / C API 调用)
┌──────────────────────────▼─────────────────────────────┐
│ RedStoneX 底层 C 仿真引擎 │
│ - 基于时间轮(Tick Wheel)与双端队列(Deque)的事件驱动系统│
│ - 极致紧凑的内存布局 (RSXConnectiveObject 结构体) │
│ - 毫秒级支持数十万红石元件高频振荡仿真 │
└──────────────────────────▲─────────────────────────────┘
│ (稳定 ABI 接口注册 / ctypes 动态加载)
┌──────────────────────────┴─────────────────────────────┐
│ C/C++ 动态链接插件库 │
│ - 符合 ComponentOps 接口规范 (.so / .dll) │
│ - 插件创建(create)、销毁(destroy)、属性查询(get_prop) │
│ - 例如: AND/OR/XOR/NOT 逻辑门, VCC/GND, 信号线插件 │
└────────────────────────────────────────────────────────┘

🛠️ 环境依赖与安装

1. 系统依赖要求

在从源码编译安装 PyRedStoneX 之前,请确保您的系统中已经安装了以下工具链:

  • C++ 编译器:支持 C++17 或更高标准。
    • Linux: GCC 8+ 或 Clang 7+
    • macOS: Xcode Command Line Tools
    • Windows: MSVC 2019 或更高版本(安装 C++ 桌面开发工作负载)
  • C 编译器:支持 C11 标准(用于编译底层 RedStoneX 引擎和 C 插件)。
  • CMake:版本在 3.15 或以上。
  • Python:版本在 3.10 或以上,并安装有 Python 头文件(如 Ubuntu 上的 python3-dev)。

2. 从源码安装

PyRedStoneX 使用现代的 scikit-build-corepybind11 进行构建管理。你可以直接通过 pip 自定义编译并安装:

# 克隆主项目及其子模块 (RedStoneX 引擎)
git clone --recursive https://github.com/SpeechlessMatt/PyRedStoneX.git
cd PyRedStoneX
# 以可编辑(Editable)开发模式安装(推荐)
python -m pip install -e .# 或者是标准安装模式
python -m pip install .

提示: --recursive 参数非常重要,用于拉取 extern/RedStoneX 底层 C 语言模拟器依赖。如果已经克隆了未包含子模块的项目,请执行 git submodule update --init --recursive


🚀 快速开始

下面是一个最简示例:创建一个红石信号源、一条导线、一个红石块,然后绑定并运行模拟。

importredstonexasrsx# 1. 创建仿真器实例sim=rsx.Simulator()
# 2. 实例化红石组件source=rsx.Source(limit=4, power=15) # 信号源:可连接4个邻居,初始强度15line=rsx.Line(limit=4) # 红石线:无损/有损充能block=rsx.Block(limit=6) # 实体方块:弱/强充能接收与转发# 3. 连接组件(建立电路拓扑)source.connect(line)
line.connect(block)
# 4. 将对象绑定到仿真器中sim.bind_object(source, line, block)
# 5. 设置仿真断点:在第 1 个 Tick 暂停sim.add_tick_breakpoint(1)
# 6. 开启控制台错误/信息日志(可选)sim.enable_logging(rsx.simulator.LogLevel.INFO)
# 7. 开始运行仿真sim.run()
# 8. 查看第 1 个 Tick 后的信号状态print(f"=== Tick {sim.current_tick} 仿真状态 ===")
print(f"信号源强度: {source.power}") # 应该为 15print(f"红石线强度: {line.power}") # 应该为 15print(f"实体块强度: {block.power}") # 应该为 15(无损线下)

📖 核心 API 及内置组件说明

PyRedStoneX 贴心地封装了红石模拟器中不可或缺的底层逻辑。以下是各个常用内置组件及接口的说明。

1. 基础物理组件

所有仿真对象都继承自底层的 CoreConnectiveObject,它们具有公共属性如 id, uri, power, limit, connect_count 等。

组件类名说明常见构造参数及默认值典型连接模式
Line红石线:用于传输能量。无损传输,传递的信号强度与距离无关。limit=4 (最多邻居连接数)连接 Source / Block / Relay 等
Source信号源:无条件发出红石能量的起始源。limit=4, power=15连接 Line / Block
Block实体方块:接收并传递强/弱充能,充当强阻断或大容量转发媒介。limit=6连接 Line / Torch
Slot插槽/槽位:特殊的虚拟中转槽,一般用来实现复杂器件的方向性接口。parent, power_type=PowerType.NONE内部封装使用
RelaySource红石中继器:单向能量中转。具有 1-Tick 到多个 Tick 的信号延时。power=15, max_delay=4通过 input_slotoutput_slot 连接
ComparatorSource红石比较器:用于比较(Comparison)或做减法(Subtraction)。delay=1通过输入、左右侧和输出 Slot 连接
TorchSource红石火把:提供源源不断的红石信号,若底部被充能,则熄灭。power=15, delay=1通过 bottom_slot 充能,由 power_slot 输出
Custom自定义器件:用于加载和承载来自外部插件生成的 ABI 元件。plugin_name, **kwargs视插件具体实现而定

2. 仿真器控制 (Simulator)

Simulator 对象是控制仿真时序、时间轮推进的核心。

  • run(): 持续运行仿真,直到系统内没有任何待处理的事件或遇到时间断点。
  • step() -> bool: 仿真时间往前推进 1 个 tick。如果发生了事件活动或未来有待处理日程则返回 True,若整个电路完全静止返回 False
  • pause(): 暂停当前正在运行的仿真。
  • resume(): 恢复已暂停的仿真。
  • add_tick_breakpoint(tick: int): 在指定的 tick 刻度增加一个硬件级断点(仿真运行到该 tick 时会立刻自动挂起并返回)。
  • remove_tick_breakpoint(tick: int): 移除指定 tick 上的仿真断点。
  • bind_object(*objects): 向仿真器绑定一个或多个红石元件,使其加入到当前仿真时空中。
  • bind_objects(objects_list): 绑定一组可迭代的元件。
  • enable_logging(level): 开启日志桥接。支持调试等级:DEBUG, INFO, WARN, ERROR

3. 连接性限制 (Connection Restrictions)

由于红石拓扑本身的严格性,底层对连接做了防重、防爆上限控制:

  • 任何器件不能与其自身连接。
  • 两个器件之间只能存在单条逻辑连接,不能重复建立连接。
  • 每个组件的连接数不能超出初始化时指定的 limit。如果强行连接会抛出 ConnectionLimitError 异常,不兼容类型的强行连接则会引发 ConnectiveError

🔌 插件扩展系统 (ABI Plugin Mode)

PyRedStoneX 设计了一套极致轻量、彻底解耦、无需二次编译主框架的共享库插件机制

您可以通过纯 C 语言编写极速逻辑门或特定功能电路器件,编译为 .so.dll 后在 Python 侧直接动态注册:

importosimportredstonexasrsxfromredstonex.registryimportPluginRegistry# 1. 加载动态库插件withPluginRegistry("./plugins/libgate_core.so") asreg:
# 2. 注册 C 回调函数到指定组件名reg.add(
component_name="ANDGate",
create="create_and_gate",
destroy="destroy_logic_gate",
get_property="get_logic_gate_property"
)
# 3. 实例化自定义组件并使用and_gate=rsx.Custom("ANDGate", limit=3, power=15)
sim=rsx.Simulator()
sim.bind_object(and_gate)

💡 欲了解保姆级的插件开发流程、C 语言 API 结构、内存对齐与强制转换规范、完整 C/C++ 示例以及 Python 的面向对象二次优雅包装,请阅读专门编写的指南:docs/plugin_development.md


📂 项目目录结构说明

PyRedStoneX/
├── pyproject.toml # Python 现代打包配置 (scikit-build-core 构建系统后端)
├── MANIFEST.in # 打包源码分发时的文件清单规则
├── CMakeLists.txt # 顶层 C/C++ 编译配置文件(链接 pybind11 并编译 _core 库)
├── README.md # 本说明文件
├── LICENSE # 项目许可证 (GPL-3.0-or-later)
├── CMake/ # CMake 配置辅助模板
│ └── PyRedStoneXConfig.cmake.in
├── docs/ # 官方详尽技术文档
│ └── plugin_development.md # ABI 插件开发保姆级教程 (包含 API 示例及原理规范)
├── src/ # Python 包源码主目录
│ └── redstonex/
│ ├── __init__.py # 暴露 Simulator, Built-in Objects 和 PowerType │ ├── simulator.py # Python 封装的仿真器控制器
│ ├── objects.py # Python 对各原生红石器件类的优雅封装与自动 ID 计数器
│ ├── registry.py # 插件注册中心:使用 ctypes 动态装载并解析共享库符号指针
│ ├── types.py # 红石相关的枚举定义(如充能类型 WEAK / STRONG)
│ ├── utils.py # 实用工具函数
│ ├── _core.pyi # 对 pybind11 导出的编译模块提供 PEP 561 类型注解(IDE友好)
│ └── csrc/
│ └── core.cpp # 核心 C++ pybind11 胶水代码(对接 C 语言引擎与 Python 类)
│ └── include/
│ └── redstonex/
│ └── plugin.h # 专供插件开发者引入的 C 语言统一 ABI 核心头文件
├── extern/ # 外部依赖子模块目录
│ └── RedStoneX/ # 纯 C 语言编写的高性能底层红石仿真引擎
│ ├── CMakeLists.txt # 独立编译红石 C 引擎的配置文件
│ ├── include/ # 仿真器底层 API
│ │ ├── redstonex_components.h # 底层中继器、比较器、火把等算法实现接口
│ │ ├── redstonex_obj.h # 红石元器件基类结构体和基础连接、广播行为
│ │ ├── redstonex_sim.h # 仿真器时钟轮、事件队列和主执行循环定义
│ │ └── redstonex_types.h # 底层公共基本枚举
│ └── src/ # 仿真引擎纯 C 源码实现 (redstonex_sim.c 等)
├── examples/ # 经典开发示例
│ └── gate_plugin/ # 完整的 ABI 逻辑门器件插件工程
│ ├── CMakeLists.txt # 独立编译逻辑门插件共享库的 CMake 脚本
│ ├── pyproject.toml # 插件本地打包设置
│ ├── src/gate_plugin/
│ │ ├── __init__.py # 插件注册和 AND/OR/XOR... 优雅 Python OOP 类定义
│ │ ├── csrc/
│ │ │ └── gate_plugin.c # 逻辑门 C 语言具体逻辑与 ComponentOps 回调实现
│ │ └── include/
│ │ └── gate_plugin.h # 逻辑门结构体与函数声明
│ └── tests/ # 插件逻辑门应用测试(全加器、波纹进位加法器、ALU等)
│ ├── alu_test.py
│ ├── full_adder_test.py
│ └── ripple_carry_adder_test.py
└── tests/ # 核心功能测试脚本目录
├── test.py # 原生红石大回路逻辑仿真测试
├── high_fan_out_benchmark.py # 高扇出极端仿真压力跑测
├── long_chain_benchmark.py # 长红石导线链延时与能量衰减测试
└── high_churn_torch_oscillators_benchmark.py # 高频火把振荡时钟源极端基准测试

📜 开源许可证

本项目采用 GPL-3.0-or-later 许可证开源。底层 RedStoneX 仿真引擎也包含在相应的开源许可中。

在基于本项目进行二次修改、商业化再发布或嵌入到其他软件中时,请务必遵守 GPL-3.0 协议中关于源码公开的相关约束。


🤝 贡献与讨论

  1. 提交 Issue:如果您在安装、开发插件或构建复杂电路时发现任何 bug 或未定义的异常行为,请随时在 GitHub 提交 issue。
  2. 贡献代码 (Pull Request):非常欢迎提交 PR!请遵循以下流程:
    • fork 本仓库。
    • 新建特性分支(例如 feature/logic-custom-delay)。
    • 请确保添加配套的单元测试(可以参考 tests/test.py)。
    • 提交 PR 并简要描述改动的物理机制和性能表现。

再次感谢对 PyRedStoneX 开源社区的支持!让我们用 Python 点亮属于我们的红石科技树! 💡🔴

About

Python package powerd by RedStoneX

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

PyRedStoneX

LicensePython VersionC++ StandardC Standard

PyRedStoneX 是一个面向 Python 生态的高性能红石电路逻辑模拟库。它将纯 C 编写的高效率底层红石模拟引擎 RedStoneX 通过 C++ (pybind11) 胶水层进行极致封装,不仅提供了面向对象且极其直观的 Python 接口,还开创性地设计了一套基于二进制兼容性(ABI)的插件开发模式

无论是进行红石电路的大规模逻辑实验、自动化电路验证、教学演示、还是开发自定义组件,PyRedStoneX 都能在保障极速仿真的同时,提供极佳的扩展性与开发友好度。


🗺️ 系统架构

PyRedStoneX 的架构旨在隔离底层红石仿真的高频开销与上层 Python 的业务逻辑,并提供了稳定的 ABI 插件扩展接口:

 ┌────────────────────────────────────────────────────────┐
│ Python 业务层 │
│ - 编写电路拓扑、连接导线/器件、脚本自动化/逻辑测试 │
│ - 使用 Simulator, Source, Line, custom.ANDGate 等 │
└──────────────────────────┬─────────────────────────────┘
│ (通过 pybind11 高效绑定)
┌──────────────────────────▼─────────────────────────────┐
│ C++ 胶水桥接层 │
│ - 统一管理 C++ 对象与底层 C 结构体的生命周期 (_core) │
│ - 线程安全的 C 语言日志回调映射至 Python 打印 (GIL控制) │
│ - 存储动态插件注册表 (ComponentOps Map) │
└──────────────────────────┬─────────────────────────────┘
│ (直接指针传递 / C API 调用)
┌──────────────────────────▼─────────────────────────────┐
│ RedStoneX 底层 C 仿真引擎 │
│ - 基于时间轮(Tick Wheel)与双端队列(Deque)的事件驱动系统│
│ - 极致紧凑的内存布局 (RSXConnectiveObject 结构体) │
│ - 毫秒级支持数十万红石元件高频振荡仿真 │
└──────────────────────────▲─────────────────────────────┘
│ (稳定 ABI 接口注册 / ctypes 动态加载)
┌──────────────────────────┴─────────────────────────────┐
│ C/C++ 动态链接插件库 │
│ - 符合 ComponentOps 接口规范 (.so / .dll) │
│ - 插件创建(create)、销毁(destroy)、属性查询(get_prop) │
│ - 例如: AND/OR/XOR/NOT 逻辑门, VCC/GND, 信号线插件 │
└────────────────────────────────────────────────────────┘

🛠️ 环境依赖与安装

1. 系统依赖要求

在从源码编译安装 PyRedStoneX 之前,请确保您的系统中已经安装了以下工具链:

  • C++ 编译器:支持 C++17 或更高标准。
    • Linux: GCC 8+ 或 Clang 7+
    • macOS: Xcode Command Line Tools
    • Windows: MSVC 2019 或更高版本(安装 C++ 桌面开发工作负载)
  • C 编译器:支持 C11 标准(用于编译底层 RedStoneX 引擎和 C 插件)。
  • CMake:版本在 3.15 或以上。
  • Python:版本在 3.10 或以上,并安装有 Python 头文件(如 Ubuntu 上的 python3-dev)。

2. 从源码安装

PyRedStoneX 使用现代的 scikit-build-corepybind11 进行构建管理。你可以直接通过 pip 自定义编译并安装:

# 克隆主项目及其子模块 (RedStoneX 引擎)
git clone --recursive https://github.com/SpeechlessMatt/PyRedStoneX.git
cd PyRedStoneX
# 以可编辑(Editable)开发模式安装(推荐)
python -m pip install -e .# 或者是标准安装模式
python -m pip install .

提示: --recursive 参数非常重要,用于拉取 extern/RedStoneX 底层 C 语言模拟器依赖。如果已经克隆了未包含子模块的项目,请执行 git submodule update --init --recursive


🚀 快速开始

下面是一个最简示例:创建一个红石信号源、一条导线、一个红石块,然后绑定并运行模拟。

importredstonexasrsx# 1. 创建仿真器实例sim=rsx.Simulator()
# 2. 实例化红石组件source=rsx.Source(limit=4, power=15) # 信号源:可连接4个邻居,初始强度15line=rsx.Line(limit=4) # 红石线:无损/有损充能block=rsx.Block(limit=6) # 实体方块:弱/强充能接收与转发# 3. 连接组件(建立电路拓扑)source.connect(line)
line.connect(block)
# 4. 将对象绑定到仿真器中sim.bind_object(source, line, block)
# 5. 设置仿真断点:在第 1 个 Tick 暂停sim.add_tick_breakpoint(1)
# 6. 开启控制台错误/信息日志(可选)sim.enable_logging(rsx.simulator.LogLevel.INFO)
# 7. 开始运行仿真sim.run()
# 8. 查看第 1 个 Tick 后的信号状态print(f"=== Tick {sim.current_tick} 仿真状态 ===")
print(f"信号源强度: {source.power}") # 应该为 15print(f"红石线强度: {line.power}") # 应该为 15print(f"实体块强度: {block.power}") # 应该为 15(无损线下)

📖 核心 API 及内置组件说明

PyRedStoneX 贴心地封装了红石模拟器中不可或缺的底层逻辑。以下是各个常用内置组件及接口的说明。

1. 基础物理组件

所有仿真对象都继承自底层的 CoreConnectiveObject,它们具有公共属性如 id, uri, power, limit, connect_count 等。

组件类名说明常见构造参数及默认值典型连接模式
Line红石线:用于传输能量。无损传输,传递的信号强度与距离无关。limit=4 (最多邻居连接数)连接 Source / Block / Relay 等
Source信号源:无条件发出红石能量的起始源。limit=4, power=15连接 Line / Block
Block实体方块:接收并传递强/弱充能,充当强阻断或大容量转发媒介。limit=6连接 Line / Torch
Slot插槽/槽位:特殊的虚拟中转槽,一般用来实现复杂器件的方向性接口。parent, power_type=PowerType.NONE内部封装使用
RelaySource红石中继器:单向能量中转。具有 1-Tick 到多个 Tick 的信号延时。power=15, max_delay=4通过 input_slotoutput_slot 连接
ComparatorSource红石比较器:用于比较(Comparison)或做减法(Subtraction)。delay=1通过输入、左右侧和输出 Slot 连接
TorchSource红石火把:提供源源不断的红石信号,若底部被充能,则熄灭。power=15, delay=1通过 bottom_slot 充能,由 power_slot 输出
Custom自定义器件:用于加载和承载来自外部插件生成的 ABI 元件。plugin_name, **kwargs视插件具体实现而定

2. 仿真器控制 (Simulator)

Simulator 对象是控制仿真时序、时间轮推进的核心。

  • run(): 持续运行仿真,直到系统内没有任何待处理的事件或遇到时间断点。
  • step() -> bool: 仿真时间往前推进 1 个 tick。如果发生了事件活动或未来有待处理日程则返回 True,若整个电路完全静止返回 False
  • pause(): 暂停当前正在运行的仿真。
  • resume(): 恢复已暂停的仿真。
  • add_tick_breakpoint(tick: int): 在指定的 tick 刻度增加一个硬件级断点(仿真运行到该 tick 时会立刻自动挂起并返回)。
  • remove_tick_breakpoint(tick: int): 移除指定 tick 上的仿真断点。
  • bind_object(*objects): 向仿真器绑定一个或多个红石元件,使其加入到当前仿真时空中。
  • bind_objects(objects_list): 绑定一组可迭代的元件。
  • enable_logging(level): 开启日志桥接。支持调试等级:DEBUG, INFO, WARN, ERROR

3. 连接性限制 (Connection Restrictions)

由于红石拓扑本身的严格性,底层对连接做了防重、防爆上限控制:

  • 任何器件不能与其自身连接。
  • 两个器件之间只能存在单条逻辑连接,不能重复建立连接。
  • 每个组件的连接数不能超出初始化时指定的 limit。如果强行连接会抛出 ConnectionLimitError 异常,不兼容类型的强行连接则会引发 ConnectiveError

🔌 插件扩展系统 (ABI Plugin Mode)

PyRedStoneX 设计了一套极致轻量、彻底解耦、无需二次编译主框架的共享库插件机制

您可以通过纯 C 语言编写极速逻辑门或特定功能电路器件,编译为 .so.dll 后在 Python 侧直接动态注册:

importosimportredstonexasrsxfromredstonex.registryimportPluginRegistry# 1. 加载动态库插件withPluginRegistry("./plugins/libgate_core.so") asreg:
# 2. 注册 C 回调函数到指定组件名reg.add(
component_name="ANDGate",
create="create_and_gate",
destroy="destroy_logic_gate",
get_property="get_logic_gate_property"
)
# 3. 实例化自定义组件并使用and_gate=rsx.Custom("ANDGate", limit=3, power=15)
sim=rsx.Simulator()
sim.bind_object(and_gate)

💡 欲了解保姆级的插件开发流程、C 语言 API 结构、内存对齐与强制转换规范、完整 C/C++ 示例以及 Python 的面向对象二次优雅包装,请阅读专门编写的指南:docs/plugin_development.md


📂 项目目录结构说明

PyRedStoneX/
├── pyproject.toml # Python 现代打包配置 (scikit-build-core 构建系统后端)
├── MANIFEST.in # 打包源码分发时的文件清单规则
├── CMakeLists.txt # 顶层 C/C++ 编译配置文件(链接 pybind11 并编译 _core 库)
├── README.md # 本说明文件
├── LICENSE # 项目许可证 (GPL-3.0-or-later)
├── CMake/ # CMake 配置辅助模板
│ └── PyRedStoneXConfig.cmake.in
├── docs/ # 官方详尽技术文档
│ └── plugin_development.md # ABI 插件开发保姆级教程 (包含 API 示例及原理规范)
├── src/ # Python 包源码主目录
│ └── redstonex/
│ ├── __init__.py # 暴露 Simulator, Built-in Objects 和 PowerType │ ├── simulator.py # Python 封装的仿真器控制器
│ ├── objects.py # Python 对各原生红石器件类的优雅封装与自动 ID 计数器
│ ├── registry.py # 插件注册中心:使用 ctypes 动态装载并解析共享库符号指针
│ ├── types.py # 红石相关的枚举定义(如充能类型 WEAK / STRONG)
│ ├── utils.py # 实用工具函数
│ ├── _core.pyi # 对 pybind11 导出的编译模块提供 PEP 561 类型注解(IDE友好)
│ └── csrc/
│ └── core.cpp # 核心 C++ pybind11 胶水代码(对接 C 语言引擎与 Python 类)
│ └── include/
│ └── redstonex/
│ └── plugin.h # 专供插件开发者引入的 C 语言统一 ABI 核心头文件
├── extern/ # 外部依赖子模块目录
│ └── RedStoneX/ # 纯 C 语言编写的高性能底层红石仿真引擎
│ ├── CMakeLists.txt # 独立编译红石 C 引擎的配置文件
│ ├── include/ # 仿真器底层 API
│ │ ├── redstonex_components.h # 底层中继器、比较器、火把等算法实现接口
│ │ ├── redstonex_obj.h # 红石元器件基类结构体和基础连接、广播行为
│ │ ├── redstonex_sim.h # 仿真器时钟轮、事件队列和主执行循环定义
│ │ └── redstonex_types.h # 底层公共基本枚举
│ └── src/ # 仿真引擎纯 C 源码实现 (redstonex_sim.c 等)
├── examples/ # 经典开发示例
│ └── gate_plugin/ # 完整的 ABI 逻辑门器件插件工程
│ ├── CMakeLists.txt # 独立编译逻辑门插件共享库的 CMake 脚本
│ ├── pyproject.toml # 插件本地打包设置
│ ├── src/gate_plugin/
│ │ ├── __init__.py # 插件注册和 AND/OR/XOR... 优雅 Python OOP 类定义
│ │ ├── csrc/
│ │ │ └── gate_plugin.c # 逻辑门 C 语言具体逻辑与 ComponentOps 回调实现
│ │ └── include/
│ │ └── gate_plugin.h # 逻辑门结构体与函数声明
│ └── tests/ # 插件逻辑门应用测试(全加器、波纹进位加法器、ALU等)
│ ├── alu_test.py
│ ├── full_adder_test.py
│ └── ripple_carry_adder_test.py
└── tests/ # 核心功能测试脚本目录
├── test.py # 原生红石大回路逻辑仿真测试
├── high_fan_out_benchmark.py # 高扇出极端仿真压力跑测
├── long_chain_benchmark.py # 长红石导线链延时与能量衰减测试
└── high_churn_torch_oscillators_benchmark.py # 高频火把振荡时钟源极端基准测试

📜 开源许可证

本项目采用 GPL-3.0-or-later 许可证开源。底层 RedStoneX 仿真引擎也包含在相应的开源许可中。

在基于本项目进行二次修改、商业化再发布或嵌入到其他软件中时,请务必遵守 GPL-3.0 协议中关于源码公开的相关约束。


🤝 贡献与讨论

  1. 提交 Issue:如果您在安装、开发插件或构建复杂电路时发现任何 bug 或未定义的异常行为,请随时在 GitHub 提交 issue。
  2. 贡献代码 (Pull Request):非常欢迎提交 PR!请遵循以下流程:
    • fork 本仓库。
    • 新建特性分支(例如 feature/logic-custom-delay)。
    • 请确保添加配套的单元测试(可以参考 tests/test.py)。
    • 提交 PR 并简要描述改动的物理机制和性能表现。

再次感谢对 PyRedStoneX 开源社区的支持!让我们用 Python 点亮属于我们的红石科技树! 💡🔴

About

Python package powerd by RedStoneX

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages