Skip to content

Commit 212d940

Browse files
committed
docs: share the vocabulary for the matrix library and expressions
CONTEXT.md gains an interface section (matrix library, operation dropdown, expression shortcut, paste import, preview, guide) and two conventions: blank cells count as 0, and expressions accept only numbers plus whitelisted names and functions. README documents both entry points, the paste rules and the per-cell editing, and notes that a desktop dim change no longer discards data.
1 parent 322b99e commit 212d940

2 files changed

Lines changed: 50 additions & 1 deletion

File tree

CONTEXT.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,22 @@
3535
- **特征值 / 特征向量 (eigenvalue / eigenvector)**:满足 A·v = λ·v 的 λ 与非零向量 v。
3636
- **代数重数 (algebraic multiplicity)**:特征值作为特征多项式根的重数。
3737

38+
## 界面与输入
39+
- **矩阵库 (matrix library)**:命名的矩阵集合。默认 A、B、C、D 四个空槽,可新增 / 改名 / 删除。
40+
改行列时**保留已填数据**(重叠部分留下,多出的格留空,少掉的丢弃)。
41+
- **操作下拉框 (operation dropdown)**:主路径。选「操作 + 左操作数 + 右操作数」,按需出现右操作数。
42+
- **表达式 / 快捷键 (expression)**:用一行文字调用矩阵库里的矩阵,如 `inv(A) * B``det(A)``A^2`
43+
它是操作下拉框的快捷写法,**不是另一套运算**:两条路都经 `engine.dispatch` 走同一个操作实现,
44+
结果(含计算步骤)逐字节一致。函数:`inv` `det` `rank` `rref` `T`/`transpose` `pinv` `lu` `solve` `eigen`
45+
其中 `lu` / `solve` / `eigen` 结果不止一项,只能单独使用。
46+
- **粘贴识别 (paste import)**:多行且每行数字个数一致时采用该形状;否则按当前「行」数换算出列数
47+
(如已设 3 行、粘 12 个数 → 3×4);再不行则尝试方阵,最后给出明确报错。
48+
- **预览 (preview)**:编辑区旁的小字矩阵,显示引擎**实际会使用**的数字;空格自动补的 0 用灰字标出。
49+
- **快捷键指南 (shortcut guide)**:默认折叠的 `<details>`,列出每个写法及它对应的下拉框操作。
50+
3851
## 约定
3952
- 下标从 1 开始展示给用户(R1、x1);代码里从 0 开始。
4053
- 所有分数保持精确,仅在用户切换“小数显示”时才近似。
54+
- 单元格留空按 **0** 计算(读取时补齐,预览里用灰字区分)。
55+
- 单元格内容只认整数 / 小数 / 分数;表达式额外认矩阵名与上面那批函数,其余一律拒绝
56+
(不走 `eval` / `sympify``9**9**9` 这类输入是语法错误而不是卡死)。

README.md

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,37 @@
2323
- **特征值 / 特征向量**(小矩阵精确;≥5×5 自动切数值解,避免 `CRootOf` 与长时间卡顿)
2424
- 所有运算可**开关"显示步骤"**、可**切换小数显示**
2525

26+
## 怎么用(两种方式,结果完全一致)
27+
28+
**① 操作下拉框**(主路径)——选「操作 + 左操作数 + 右操作数」,点计算。
29+
30+
**② 表达式快捷键**——一行写完,回车即算:
31+
32+
```
33+
inv(A) * B - C det(A * B) 3 * inv(A) A^2 A^-1
34+
```
35+
36+
点开界面里的「快捷键指南」有完整对照表(每一行都标了它对应的下拉框操作)。
37+
支持 `+ - *``/ 标量``^n``inv` `det` `rank` `rref` `T`/`transpose` `pinv`
38+
`lu` `solve` `eigen`(后三个结果不止一项,只能单独使用)。
39+
40+
> 表达式不是另写一套算法:两条路都经 `engine.dispatch` 走同一个底层实现,
41+
> 所以结果连计算步骤都逐字节相同。
42+
43+
### 矩阵库与输入
44+
45+
- **命名矩阵**:默认 A、B、C、D 四个空槽,可**新增 / 改名 / 删除**,算式里直接用名字调用。
46+
- **改行列不丢数据**:把 3×3 改成 3×4,已填的 9 个数字原样保留(多出的格留空,少掉的丢弃)。
47+
- **粘贴导入**:从 Excel 或任何文本里直接 `Ctrl+V`
48+
- 带换行的表格 → 按它的原始形状导入;
49+
- 一串空格分隔的数字 → 按你已经设好的「行」数自动换算出列数(3 行 + 12 个数 → 3×4);
50+
- 单个数字 → 只填当前这一格。
51+
- **旁边的小字预览**同步显示引擎**实际会用到**的数字,空格自动补的 `0` 用灰字标出,
52+
一眼能看出哪些格子还没填。
53+
- **单格快速改错**:点进格子自动全选,直接输入即替换;按 `Esc` 撤销这一格的改动。
54+
回车 / 方向键在格间按行优先移动。
55+
- 单元格留空按 **0** 计算。
56+
2657
---
2758

2859
## 🖥 桌面版(推荐日常用)
@@ -81,6 +112,7 @@ python web/app.py # 自动打开浏览器到 http://127.0.0.1:8000
81112
```
82113
la-helper/
83114
├── core/ # 纯算法层(精确有理数,零 GUI / Web 依赖,全可单测)
115+
│ # engine.py 是唯一分发入口;expr.py 是表达式解析器
84116
├── web/ # 网页版:app.py 起服务 + index.html / app.js
85117
├── desktop/ # 桌面版:tkinter GUI + 两个平台的打包脚本
86118
├── tools/ # build_preview.py:把 core/ 打包成 Pyodide 静态预览
@@ -94,7 +126,8 @@ la-helper/
94126
pip install -r requirements-dev.txt
95127
pytest
96128
```
97-
覆盖:core 各模块、`core.engine` 契约、以及输入安全 / 奇异矩阵 / 符号矩阵 / 大矩阵等回归用例。
129+
覆盖:core 各模块、`core.engine` 契约、`core.expr` 表达式(含与下拉框路径的等价性断言、
130+
以及 `9**9**9` 这类输入的拒绝用例)、输入安全 / 奇异矩阵 / 符号矩阵 / 大矩阵等回归用例。
98131

99132
## 安全边界
100133
网页版只监听 `127.0.0.1`,不是面向公网的服务:不要把它暴露到局域网或反向代理之后。

0 commit comments

Comments
 (0)