Metadata-Version: 2.4
Name: homlab-polynomial
Version: 0.1.1
Summary: Collect indexed C terms in polynomials with SymPy.
Author: GGN_2015
License: MIT
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: sympy>=1.10
Dynamic: license-file

# homlab_polynomial

`homlab_polynomial` 提供一个 Python 编程入口，用 SymPy 将包含普通变量 `A` 和三下标变量
`C[x, y, z]` 的字符串表达式整理成按不同 `C[x, y, z]` 分组的形式。

## 安装

```bash
pip install .
```

## 使用

```python
from homlab_polynomial import organize_polynomial

expr = "A*C[1, 2, 3] + 2*C[1,2,3] + A^2*C[0,0,0]"
print(organize_polynomial(expr))
```

输出：

```text
C[0, 0, 0]*(A^2) + C[1, 2, 3]*(A + 2)
```

负指数也支持：

```python
organize_polynomial("A^-10*C[0,0,0] + 2*C[0,0,0]/A")
```

输出：

```text
C[0, 0, 0]*(2*A^(-1) + A^(-10))
```

说明：

- `C[x, y, z]` 的三个下标必须是整数，可以为负数。
- 输入支持用 `^` 表示指数运算，也支持 Python/SymPy 风格的 `**`。
- 默认输出也使用 `^`。如果需要 `**`，可以传入 `output_power_operator="**"`。
- 如果希望每个整理后的项单独占一行，可以传入 `line_break_terms=True`。
- 系数支持有限 Laurent 多项式，因此 `A^-1`、`1/A`、`A^-10` 都可以使用。
- `C[x, y, z]` 项不会带外部负号；负号会保留在括号中的系数多项式里。
- 不含 `C` 的纯 `A` 项会作为最后的余项保留。

如果需要继续做 SymPy 计算，可以使用：

```python
from homlab_polynomial import organize_polynomial_expr

sympy_expr = organize_polynomial_expr("A*C[1,2,3] + C[1,2,3]")
```

## 验算

`organize_polynomial()` 默认会在每次整理后进行随机代入验算。它会给 `A` 和所有出现过的
`C[x, y, z]` 赋非零有理数，检查整理前后的表达式是否一致。

也可以直接调用验算函数：

```python
from homlab_polynomial import verify_simplification

verify_simplification(
    "A*C[1,2,3] + C[1,2,3]",
    "C[1, 2, 3]*(A + 1)",
)
```
