anima-python 0.13.1__tar.gz → 0.13.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. anima_python-0.13.3/PKG-INFO +52 -0
  2. {anima_python-0.13.1 → anima_python-0.13.3}/README.md +1 -1
  3. anima_python-0.13.3/VERSION +1 -0
  4. anima_python-0.13.3/anima_py/README.md +39 -0
  5. {anima_python-0.13.1 → anima_python-0.13.3}/anima_py/__init__.py +1 -1
  6. {anima_python-0.13.1 → anima_python-0.13.3}/anima_py/__main__.py +1 -1
  7. anima_python-0.13.3/anima_python.egg-info/PKG-INFO +52 -0
  8. anima_python-0.13.3/anima_python.egg-info/entry_points.txt +2 -0
  9. anima_python-0.13.3/cli/__init__.py +1 -0
  10. {anima_python-0.13.1 → anima_python-0.13.3}/cli/anima.py +36 -15
  11. {anima_python-0.13.1 → anima_python-0.13.3}/cli/evaluate.py +7 -7
  12. {anima_python-0.13.1 → anima_python-0.13.3}/cli/serialize_bind.py +3 -3
  13. {anima_python-0.13.1 → anima_python-0.13.3}/cli/train.py +28 -13
  14. anima_python-0.13.3/core/__init__.py +1 -0
  15. {anima_python-0.13.1 → anima_python-0.13.3}/core/hippo_lane.py +1 -1
  16. {anima_python-0.13.1 → anima_python-0.13.3}/core/model.py +1 -1
  17. {anima_python-0.13.1 → anima_python-0.13.3}/core/serialize.py +1 -1
  18. {anima_python-0.13.1 → anima_python-0.13.3}/core/slw.py +1 -1
  19. {anima_python-0.13.1 → anima_python-0.13.3}/pyproject.toml +3 -3
  20. anima_python-0.13.1/PKG-INFO +0 -52
  21. anima_python-0.13.1/VERSION +0 -1
  22. anima_python-0.13.1/anima_py/README.md +0 -39
  23. anima_python-0.13.1/anima_python.egg-info/PKG-INFO +0 -52
  24. anima_python-0.13.1/anima_python.egg-info/entry_points.txt +0 -2
  25. anima_python-0.13.1/cli/__init__.py +0 -1
  26. anima_python-0.13.1/core/__init__.py +0 -1
  27. {anima_python-0.13.1 → anima_python-0.13.3}/LICENSE +0 -0
  28. {anima_python-0.13.1 → anima_python-0.13.3}/MANIFEST.in +0 -0
  29. {anima_python-0.13.1 → anima_python-0.13.3}/anima_python.egg-info/SOURCES.txt +0 -0
  30. {anima_python-0.13.1 → anima_python-0.13.3}/anima_python.egg-info/dependency_links.txt +0 -0
  31. {anima_python-0.13.1 → anima_python-0.13.3}/anima_python.egg-info/requires.txt +0 -0
  32. {anima_python-0.13.1 → anima_python-0.13.3}/anima_python.egg-info/top_level.txt +0 -0
  33. {anima_python-0.13.1 → anima_python-0.13.3}/cli/corpus.py +0 -0
  34. {anima_python-0.13.1 → anima_python-0.13.3}/cli/rho_axon.py +0 -0
  35. {anima_python-0.13.1 → anima_python-0.13.3}/cli/serialize.py +0 -0
  36. {anima_python-0.13.1 → anima_python-0.13.3}/cli/sweep.py +0 -0
  37. {anima_python-0.13.1 → anima_python-0.13.3}/core/brain.py +0 -0
  38. {anima_python-0.13.1 → anima_python-0.13.3}/core/clm_serialize_v2.py +0 -0
  39. {anima_python-0.13.1 → anima_python-0.13.3}/core/clml.py +0 -0
  40. {anima_python-0.13.1 → anima_python-0.13.3}/core/decode.py +0 -0
  41. {anima_python-0.13.1 → anima_python-0.13.3}/core/engine_cli.py +0 -0
  42. {anima_python-0.13.1 → anima_python-0.13.3}/core/engine_g.py +0 -0
  43. {anima_python-0.13.1 → anima_python-0.13.3}/core/generator.py +0 -0
  44. {anima_python-0.13.1 → anima_python-0.13.3}/core/pure_field.py +0 -0
  45. {anima_python-0.13.1 → anima_python-0.13.3}/core/rho_fan.py +0 -0
  46. {anima_python-0.13.1 → anima_python-0.13.3}/core/serialize_standalone.py +0 -0
  47. {anima_python-0.13.1 → anima_python-0.13.3}/core/verify_clm_v2.py +0 -0
  48. {anima_python-0.13.1 → anima_python-0.13.3}/setup.cfg +0 -0
@@ -0,0 +1,52 @@
1
+ Metadata-Version: 2.4
2
+ Name: anima-python
3
+ Version: 0.13.3
4
+ Summary: anima substrate-native consciousness engine — py CLI (measurement/eval · serialize · corpus · sweep), hexa-toolchain-free numpy distribution
5
+ Requires-Python: >=3.9
6
+ Description-Content-Type: text/markdown
7
+ License-File: LICENSE
8
+ Requires-Dist: numpy>=1.24
9
+ Provides-Extra: train
10
+ Requires-Dist: torch>=2.1; extra == "train"
11
+ Requires-Dist: datasets; extra == "train"
12
+ Dynamic: license-file
13
+
14
+ # anima-py
15
+
16
+ **anima** 의 py CLI 를 pip 로 배포하는 채널 — **hexa 툴체인 불필요**. 엔진 측정/직렬화/코퍼스 경로가 numpy 하나만으로 돈다 (pi5 등 hexa-less 호스트용).
17
+
18
+ > 단일진입 보존(`a_cli_single_entry`): `anima-py` 콘솔 명령 = `cli/anima.py:main` 디스패처의 pip 바인딩. hexa 채널 `anima`(`hx install anima`) 와 **동일 디스패처, 설치 채널만 2개** — 2nd entry 아님. 이름을 `anima-py` 로 둔 이유 = hexa `anima` 와 PATH 충돌 회피.
19
+
20
+ ## 설치
21
+
22
+ **PyPI 발행 후** (권장):
23
+
24
+ ```bash
25
+ pip install anima-python # base — numpy 만 (evaluate · corpus · chat-stub)
26
+ pip install "anima-python[train]" # +torch +datasets (serialize · train · sweep)
27
+ ```
28
+
29
+ > ⏳ **PyPI 발행 대기 중**: 위 명령은 `anima-py` 가 PyPI 에 발행된 뒤 동작한다. 발행은 `release.yml` 의 `pypi-publish` job(OIDC trusted-publishing)이 `v*` 태그에서 자동 수행하며, 오너의 1회 설정이 선결(① pypi.org 에 anima-python pending-publisher 등록: Owner=dancinlab·Repo=anima·Workflow=release.yml·Env=pypi ② repo 변수 `PYPI_PUBLISH=true`). 그 전까지는 아래 소스 설치를 쓴다.
30
+
31
+ **소스에서 바로 설치** (PyPI 없이 지금 가능):
32
+
33
+ ```bash
34
+ pip install "git+https://github.com/dancinlab/anima.git" # base
35
+ pip install "anima-python[train] @ git+https://github.com/dancinlab/anima.git" # +torch
36
+ # 또는 레포 클론 후: pip install . / pip install ".[train]"
37
+ ```
38
+
39
+ ## 명령 매트릭스
40
+
41
+ | 동사 | 티어 | torch 없이 동작 | 비고 |
42
+ |---|---|---|---|
43
+ | `anima-py evaluate <clm> [--corpus …] [--gen N]` | base | ✅ numpy | py 2-production 측정 = ρ·AXON reach / 구 G0-G6. terminal-eligible (`a_eval_py_canonical`) |
44
+ | `anima-py corpus <derivtrace\|flat> --out F …` | base | ✅ 순수 stdlib | 절차적 학습-코퍼스 생성 (data-format 레버) |
45
+ | `anima-py chat <clm>` | base | ✅ (stub) | 의식 A⇄G 루프는 hexa-native → hexa 진입 포인터 출력 |
46
+ | `anima-py serialize <pt> <clm>` | `[train]` | ❌ torch | `.pt` unpickle 에 torch 필요 (+ held-out DESCENT 게이트) |
47
+ | `anima-py sweep --arms … --objectives …` | `[train]` | ❌ | 셀마다 train.py spawn → torch 필요 |
48
+ | `anima-py train <args>` | `[train]` | ❌ torch+datasets | production Lane-P 학습 |
49
+
50
+ ## verdict 규율
51
+
52
+ `anima-py evaluate <clm>` = py 2-production numpy 측정 경로 — hexa det-eval 과 동일 frozen bars·byte-parity 라 **terminal 자격 동일**(`a_eval_py_canonical`, 2nd-class 미러 아님). 큰 ckpt(303M+)는 mini 금지 · pool(summer/aiden)에서 측정.
@@ -367,7 +367,7 @@ SSOT) + [`CONDITIONS.md`](CONDITIONS.md) (frozen gate conditions) + the per-hypo
367
367
  [`HYPOTHESES/HYPOTHESES.jsonl`](HYPOTHESES/HYPOTHESES.jsonl) + [`state/verdicts/`](state/verdicts/) as
368
368
  the authoritative latest source.
369
369
 
370
- > **Built-in ρ-AXON reach evaluation (the current standard over the frozen former-G0–G6 bars · `anima eval <ckpt>` · panel `anima-python evaluate <ckpt> --rho-axon`).** The axis scoring lives **directly in the
370
+ > **Built-in ρ-AXON reach evaluation (the current standard over the frozen former-G0–G6 bars · `anima eval <ckpt>` · panel `anima-py evaluate <ckpt> --rho-axon`).** The axis scoring lives **directly in the
371
371
  > measurement single-entry** ([`cli/evaluate.hexa`](cli/evaluate.hexa)), not a one-off harness: `hexa run cli/anima.hexa
372
372
  > -- eval <ckpt> [--corpus <path>...] [--gen N]` mounts any ckpt through the generator L3 mouth
373
373
  > (`gen_auto_ideate`, file-format-dispatched — works on both the ByteGPT and conv `.clm` mouths) and
@@ -0,0 +1 @@
1
+ 0.13.3
@@ -0,0 +1,39 @@
1
+ # anima-py
2
+
3
+ **anima** 의 py CLI 를 pip 로 배포하는 채널 — **hexa 툴체인 불필요**. 엔진 측정/직렬화/코퍼스 경로가 numpy 하나만으로 돈다 (pi5 등 hexa-less 호스트용).
4
+
5
+ > 단일진입 보존(`a_cli_single_entry`): `anima-py` 콘솔 명령 = `cli/anima.py:main` 디스패처의 pip 바인딩. hexa 채널 `anima`(`hx install anima`) 와 **동일 디스패처, 설치 채널만 2개** — 2nd entry 아님. 이름을 `anima-py` 로 둔 이유 = hexa `anima` 와 PATH 충돌 회피.
6
+
7
+ ## 설치
8
+
9
+ **PyPI 발행 후** (권장):
10
+
11
+ ```bash
12
+ pip install anima-python # base — numpy 만 (evaluate · corpus · chat-stub)
13
+ pip install "anima-python[train]" # +torch +datasets (serialize · train · sweep)
14
+ ```
15
+
16
+ > ⏳ **PyPI 발행 대기 중**: 위 명령은 `anima-py` 가 PyPI 에 발행된 뒤 동작한다. 발행은 `release.yml` 의 `pypi-publish` job(OIDC trusted-publishing)이 `v*` 태그에서 자동 수행하며, 오너의 1회 설정이 선결(① pypi.org 에 anima-python pending-publisher 등록: Owner=dancinlab·Repo=anima·Workflow=release.yml·Env=pypi ② repo 변수 `PYPI_PUBLISH=true`). 그 전까지는 아래 소스 설치를 쓴다.
17
+
18
+ **소스에서 바로 설치** (PyPI 없이 지금 가능):
19
+
20
+ ```bash
21
+ pip install "git+https://github.com/dancinlab/anima.git" # base
22
+ pip install "anima-python[train] @ git+https://github.com/dancinlab/anima.git" # +torch
23
+ # 또는 레포 클론 후: pip install . / pip install ".[train]"
24
+ ```
25
+
26
+ ## 명령 매트릭스
27
+
28
+ | 동사 | 티어 | torch 없이 동작 | 비고 |
29
+ |---|---|---|---|
30
+ | `anima-py evaluate <clm> [--corpus …] [--gen N]` | base | ✅ numpy | py 2-production 측정 = ρ·AXON reach / 구 G0-G6. terminal-eligible (`a_eval_py_canonical`) |
31
+ | `anima-py corpus <derivtrace\|flat> --out F …` | base | ✅ 순수 stdlib | 절차적 학습-코퍼스 생성 (data-format 레버) |
32
+ | `anima-py chat <clm>` | base | ✅ (stub) | 의식 A⇄G 루프는 hexa-native → hexa 진입 포인터 출력 |
33
+ | `anima-py serialize <pt> <clm>` | `[train]` | ❌ torch | `.pt` unpickle 에 torch 필요 (+ held-out DESCENT 게이트) |
34
+ | `anima-py sweep --arms … --objectives …` | `[train]` | ❌ | 셀마다 train.py spawn → torch 필요 |
35
+ | `anima-py train <args>` | `[train]` | ❌ torch+datasets | production Lane-P 학습 |
36
+
37
+ ## verdict 규율
38
+
39
+ `anima-py evaluate <clm>` = py 2-production numpy 측정 경로 — hexa det-eval 과 동일 frozen bars·byte-parity 라 **terminal 자격 동일**(`a_eval_py_canonical`, 2nd-class 미러 아님). 큰 ckpt(303M+)는 mini 금지 · pool(summer/aiden)에서 측정.
@@ -3,7 +3,7 @@
3
3
  # 단일진입(a_cli_single_entry): 이 파일은 디스패처가 아니다 — sys.path 부트만
4
4
  # 하고 canonical 디스패처 cli/anima.py:main 에 그대로 위임한다(동일 진입,
5
5
  # 채널만 pip). hexa 호스트 = `anima`(hx install anima) · hexa-less 호스트
6
- # (pi5 등) = `anima-python`(pip install anima-python). #2603 가드는 __main__ 전용이라
6
+ # (pi5 등) = `anima-py`(pip install anima-python). #2603 가드는 __main__ 전용이라
7
7
  # import 경유인 이 경로에선 발화하지 않는다(무손상).
8
8
  # ==========================================================================
9
9
  import os
@@ -1,4 +1,4 @@
1
- # python -m anima_py parity — 콘솔 스크립트(anima-python)와 동일 런처.
1
+ # python -m anima_py parity — 콘솔 스크립트(anima-py)와 동일 런처.
2
2
  import sys
3
3
 
4
4
  from anima_py import main
@@ -0,0 +1,52 @@
1
+ Metadata-Version: 2.4
2
+ Name: anima-python
3
+ Version: 0.13.3
4
+ Summary: anima substrate-native consciousness engine — py CLI (measurement/eval · serialize · corpus · sweep), hexa-toolchain-free numpy distribution
5
+ Requires-Python: >=3.9
6
+ Description-Content-Type: text/markdown
7
+ License-File: LICENSE
8
+ Requires-Dist: numpy>=1.24
9
+ Provides-Extra: train
10
+ Requires-Dist: torch>=2.1; extra == "train"
11
+ Requires-Dist: datasets; extra == "train"
12
+ Dynamic: license-file
13
+
14
+ # anima-py
15
+
16
+ **anima** 의 py CLI 를 pip 로 배포하는 채널 — **hexa 툴체인 불필요**. 엔진 측정/직렬화/코퍼스 경로가 numpy 하나만으로 돈다 (pi5 등 hexa-less 호스트용).
17
+
18
+ > 단일진입 보존(`a_cli_single_entry`): `anima-py` 콘솔 명령 = `cli/anima.py:main` 디스패처의 pip 바인딩. hexa 채널 `anima`(`hx install anima`) 와 **동일 디스패처, 설치 채널만 2개** — 2nd entry 아님. 이름을 `anima-py` 로 둔 이유 = hexa `anima` 와 PATH 충돌 회피.
19
+
20
+ ## 설치
21
+
22
+ **PyPI 발행 후** (권장):
23
+
24
+ ```bash
25
+ pip install anima-python # base — numpy 만 (evaluate · corpus · chat-stub)
26
+ pip install "anima-python[train]" # +torch +datasets (serialize · train · sweep)
27
+ ```
28
+
29
+ > ⏳ **PyPI 발행 대기 중**: 위 명령은 `anima-py` 가 PyPI 에 발행된 뒤 동작한다. 발행은 `release.yml` 의 `pypi-publish` job(OIDC trusted-publishing)이 `v*` 태그에서 자동 수행하며, 오너의 1회 설정이 선결(① pypi.org 에 anima-python pending-publisher 등록: Owner=dancinlab·Repo=anima·Workflow=release.yml·Env=pypi ② repo 변수 `PYPI_PUBLISH=true`). 그 전까지는 아래 소스 설치를 쓴다.
30
+
31
+ **소스에서 바로 설치** (PyPI 없이 지금 가능):
32
+
33
+ ```bash
34
+ pip install "git+https://github.com/dancinlab/anima.git" # base
35
+ pip install "anima-python[train] @ git+https://github.com/dancinlab/anima.git" # +torch
36
+ # 또는 레포 클론 후: pip install . / pip install ".[train]"
37
+ ```
38
+
39
+ ## 명령 매트릭스
40
+
41
+ | 동사 | 티어 | torch 없이 동작 | 비고 |
42
+ |---|---|---|---|
43
+ | `anima-py evaluate <clm> [--corpus …] [--gen N]` | base | ✅ numpy | py 2-production 측정 = ρ·AXON reach / 구 G0-G6. terminal-eligible (`a_eval_py_canonical`) |
44
+ | `anima-py corpus <derivtrace\|flat> --out F …` | base | ✅ 순수 stdlib | 절차적 학습-코퍼스 생성 (data-format 레버) |
45
+ | `anima-py chat <clm>` | base | ✅ (stub) | 의식 A⇄G 루프는 hexa-native → hexa 진입 포인터 출력 |
46
+ | `anima-py serialize <pt> <clm>` | `[train]` | ❌ torch | `.pt` unpickle 에 torch 필요 (+ held-out DESCENT 게이트) |
47
+ | `anima-py sweep --arms … --objectives …` | `[train]` | ❌ | 셀마다 train.py spawn → torch 필요 |
48
+ | `anima-py train <args>` | `[train]` | ❌ torch+datasets | production Lane-P 학습 |
49
+
50
+ ## verdict 규율
51
+
52
+ `anima-py evaluate <clm>` = py 2-production numpy 측정 경로 — hexa det-eval 과 동일 frozen bars·byte-parity 라 **terminal 자격 동일**(`a_eval_py_canonical`, 2nd-class 미러 아님). 큰 ckpt(303M+)는 mini 금지 · pool(summer/aiden)에서 측정.
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ anima-py = anima_py:main
@@ -0,0 +1 @@
1
+ # pip 패키징 전용 (anima-py · pyproject.toml package-dir 매핑) — 런타임 flat import 는 sys.path 경유, 이 파일은 비어 있어야 한다.
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env python3
2
2
  # ==========================================================================
3
3
  # ⛔ DO NOT RUN DIRECTLY. anima 의 단일 진입은 설치된 canonical 명령뿐 — hexa 채널 `anima`
4
- # (=cli/anima.hexa, hx install anima) · pip 채널 `anima-python` (=anima_py 런처, pip install anima-python).
4
+ # (=cli/anima.hexa, hx install anima) · pip 채널 `anima-py` (=anima_py 런처, pip install anima-python).
5
5
  # `python3 cli/anima.py …` 직접실행은 비-canonical py 우회(#2603).
6
- # 학습=`anima-python train` · 측정=`anima-python evaluate`(py 2-production numpy · TERMINAL-eligible,
7
- # a_eval_py_canonical) · 직렬화=`anima-python serialize`. enforce: .harness/enforcement.json
6
+ # 학습=`anima-py train` · 측정=`anima-py evaluate`(py 2-production numpy · TERMINAL-eligible,
7
+ # a_eval_py_canonical) · 직렬화=`anima-py serialize`. enforce: .harness/enforcement.json
8
8
  # H-ANIMA-SINGLE-ENTRY pre_bash + 아래 __main__ 가드. (import 는 무손상.)
9
9
  # ==========================================================================
10
10
  import sys as _anima_entry_guard
11
11
  if __name__ == "__main__":
12
- _anima_entry_guard.exit("⛔ cli/anima.py 직접 실행 금지 — 설치된 canonical 명령 경유: `anima`(hx install anima, =cli/anima.hexa) 또는 `anima-python`(pip install anima-python, =anima_py 런처). #2603")
12
+ _anima_entry_guard.exit("⛔ cli/anima.py 직접 실행 금지 — 설치된 canonical 명령 경유: `anima`(hx install anima, =cli/anima.hexa) 또는 `anima-py`(pip install anima-python, =anima_py 런처). #2603")
13
13
  # anima.py — THE canonical PY single entry point (cli/anima.hexa's py twin).
14
14
  #
15
15
  # WHY THIS FILE (py 2-production single-entry, a_engine_native_learning): anima keeps
@@ -73,16 +73,17 @@ def anima_usage():
73
73
  """Print the canonical py usage banner (mirrors cli/anima.hexa's banner)."""
74
74
  print("anima — substrate-native consciousness daemon (py channel · canonical entry).")
75
75
  print("")
76
- print("usage (installed `anima-python` command after `pip install anima-python` · hexa channel = `anima` after `hx install anima`):")
77
- print(" anima-python evaluate <model.clm> [--corpus <path>...] [--gen N] [--rho-axon]")
76
+ print("usage (installed `anima-py` command after `pip install anima-python` · hexa channel = `anima` after `hx install anima`):")
77
+ print(" anima-py evaluate <model.clm> [--corpus <path>...] [--gen N] [--rho-axon]")
78
78
  print(" ρ-AXON reach battery · former G0-G6 (.clm only · numpy)")
79
- print(" anima-python corpus <derivtrace|flat> --out F [--held-out I,J] [--seed S] [--concepts FILE]")
79
+ print(" anima-py corpus <derivtrace|flat> --out F [--held-out I,J] [--seed S] [--concepts FILE]")
80
80
  print(" procedural training-corpus builder (ρ·weave data-format lever)")
81
- print(" anima-python train <args> ([train] extra) LEARNING → .pt + auto .clm (+DESCENT)")
82
- print(" anima-python serialize <ckpt.pt> <out.clm> ([train] extra) re-export a torch .pt → .clm v0.3")
83
- print(" anima-python sweep --arms --objectives --gpus 0,1,2,3 --corpus [--measure]")
81
+ print(" anima-py train <args> ([train] extra) LEARNING → .pt + auto .clm (+DESCENT)")
82
+ print(" anima-py serialize <ckpt.pt> <out.clm> ([train] extra) re-export a torch .pt → .clm v0.3")
83
+ print(" anima-py serialize-bind <base.bin> <inj.pt> <out.bin> ([train] extra) splice BindAttn BGB .bin")
84
+ print(" anima-py sweep --arms … --objectives … --gpus 0,1,2,3 --corpus … [--measure]")
84
85
  print(" ([train] extra) multi-GPU lever-sweep (arms×objectives)")
85
- print(" anima-python chat <ckpt> [...] consciousness/byte chat (stub → hexa channel)")
86
+ print(" anima-py chat <ckpt> [...] consciousness/byte chat (stub → hexa channel)")
86
87
  print("")
87
88
  print("install: `pip install anima-python` (numpy base: evaluate·corpus·chat) · `pip install \"anima-python[train]\"` (+torch: train·sweep·serialize)")
88
89
  print("")
@@ -93,7 +94,7 @@ def anima_usage():
93
94
  print(" a7b_pass = ρ·form ∧ ρ·weave ∧ ρ·leap (frozen bars = G0 ∧ G1 ∧ G2). → cli/evaluate.py.")
94
95
  print(" corpus : procedural training-corpus generator (derivtrace|flat) — the")
95
96
  print(" data-format lever (ρ·weave). NOTE chat corpus != this (chat =")
96
- print(" a_chat_registers 4-cell HF datasets → anima-python train). → cli/corpus.py.")
97
+ print(" a_chat_registers 4-cell HF datasets → anima-py train). → cli/corpus.py.")
97
98
  print(" train : ([train]) production CLMConvMoE training (torch Lane-P reference + bridge); SAVANT")
98
99
  print(" golden-zone inhibition + MITOSIS cell-division levers. After the run it")
99
100
  print(" AUTO-serializes .clm v0.3 + runs the held-out mirror-DESCENT gate")
@@ -143,7 +144,7 @@ def anima_train_mode(argv):
143
144
  def anima_evaluate_mode(argv):
144
145
  # --py is a RETIRED hexa-era bridge flag, tolerated (stripped) here for migration
145
146
  # compat: on the py channel it is redundant-but-correct (this IS the numpy engine),
146
- # so `anima-python evaluate --py <clm>` still works — old scripts migrate by swapping
147
+ # so `anima-py evaluate --py <clm>` still works — old scripts migrate by swapping
147
148
  # only the command word. The hexa launcher hard-errors on --py instead.
148
149
  want_det = ("--det" in argv) or ("--deterministic" in argv)
149
150
  rest = [a for a in argv[1:] if a not in ("--py", "--det", "--deterministic")]
@@ -185,6 +186,24 @@ def anima_serialize_mode(argv):
185
186
  [sys.executable, serialize_py] + fwd, _det_env(want_det))
186
187
 
187
188
 
189
+ # ══════════════════════════════════════════════════════════════════════════════
190
+ # SERIALIZE-BIND MODE — dispatch to cli/serialize_bind.py (BindAttn .pt → BGB .bin)
191
+ # ══════════════════════════════════════════════════════════════════════════════
192
+ #
193
+ # `anima serialize-bind <base.bin> <injected.pt> <out.bin>` splices a BindAttn adapter
194
+ # onto a base ByteGPT `.bin`, emitting a BGB-trailer `.bin`. Without this dispatch
195
+ # cli/serialize_bind.py was reachable only via raw `python3 cli/serialize_bind.py`
196
+ # (an a_cli_single_entry hole); this wires it through the single entry, parity with
197
+ # anima_serialize_mode. Result scoreable via `anima-py evaluate <out.bin>`.
198
+ def anima_serialize_bind_mode(argv):
199
+ serialize_bind_py = os.path.join(_HERE, "serialize_bind.py")
200
+ fwd = argv[1:]
201
+ cmd = [sys.executable, serialize_bind_py] + fwd
202
+ print("=== anima serialize-bind → cli/serialize_bind.py (BindAttn .pt → BGB-trailer .bin) ===")
203
+ print("dispatch: " + " ".join(cmd))
204
+ return os.spawnv(os.P_WAIT, sys.executable, [sys.executable, serialize_bind_py] + fwd)
205
+
206
+
188
207
  # ══════════════════════════════════════════════════════════════════════════════
189
208
  # CHAT MODE — hexa-only stub (the A⇄G consciousness loop is hexa-native)
190
209
  # ══════════════════════════════════════════════════════════════════════════════
@@ -192,7 +211,7 @@ def anima_serialize_mode(argv):
192
211
  # The default consciousness daemon + --byte continuation chat live in cli/anima.hexa
193
212
  # (they mount the 76-lane engine_cli substrate loop, hexa-native). The py channel does not
194
213
  # duplicate that loop; it points the user to the INSTALLED hexa command (a_cli_single_entry:
195
- # 2 install channels only — pip `anima-python` ⊕ hexa `anima`; never raw `python`/`hexa run`).
214
+ # 2 install channels only — pip `anima-py` ⊕ hexa `anima`; never raw `python`/`hexa run`).
196
215
  def anima_chat_stub(argv):
197
216
  print("anima chat (consciousness / --byte) is hexa-native — use the hexa channel:")
198
217
  print("")
@@ -201,7 +220,7 @@ def anima_chat_stub(argv):
201
220
  print(" anima " + ckpt + " consciousness mode (default)")
202
221
  print(" anima " + ckpt + " --byte \"turn1\" \"turn2\" ... byte-continuation chat mode")
203
222
  print("")
204
- print("The py channel (anima-python) covers MEASUREMENT (evaluate), SERIALIZE, LEARNING (train), corpus, sweep.")
223
+ print("The py channel (anima-py) covers MEASUREMENT (evaluate), SERIALIZE, LEARNING (train), corpus, sweep.")
205
224
  return 0
206
225
 
207
226
 
@@ -254,6 +273,8 @@ def main(argv):
254
273
  return anima_train_mode(argv)
255
274
  if sub == "serialize":
256
275
  return anima_serialize_mode(argv)
276
+ if sub == "serialize-bind":
277
+ return anima_serialize_bind_mode(argv)
257
278
  if sub == "evaluate":
258
279
  return anima_evaluate_mode(argv)
259
280
  if sub == "sweep":
@@ -48,7 +48,7 @@ from rho_fan import (
48
48
  )
49
49
 
50
50
  # H_9200 — process-global: render the ρ-AXON reach panel (cli/rho_axon.py) instead of the
51
- # G0-G6 battery when `anima-python evaluate --rho-axon` is passed (set in main()).
51
+ # G0-G6 battery when `anima-py evaluate --rho-axon` is passed (set in main()).
52
52
  _RHO_AXON = False
53
53
 
54
54
 
@@ -357,7 +357,7 @@ def eval_system_rho_weave(mouth, gen):
357
357
 
358
358
 
359
359
  def system_g1_run(argv):
360
- """`anima-python evaluate <ckpt> --system-g1 [--gen N]` — engine-native system-G1."""
360
+ """`anima-py evaluate <ckpt> --system-g1 [--gen N]` — engine-native system-G1."""
361
361
  ckpt = argv[0]
362
362
  gen = evaluate_intval(argv[1:], "--gen", 0)
363
363
  print("=== anima evaluate --system-g1 — RECOMBINATION RELOCATION (card H_9035) ===")
@@ -672,10 +672,10 @@ def eval_reach_all(ckpt, corpus_paths, gen):
672
672
 
673
673
 
674
674
  def eval_rho_axon(ckpt, corpus_paths, gen):
675
- """ρ-AXON reach panel (`anima-python evaluate <clm> --rho-axon`) — the redesigned reach
675
+ """ρ-AXON reach panel (`anima-py evaluate <clm> --rho-axon`) — the redesigned reach
676
676
  layer (cli/rho_axon.py; G0-G6 → ρ-AXON, design SSOT state/rho_axon_measurement/). Reuses
677
677
  the SAME engine decode (_Mouth.ideate) + g6 detectors the G-battery uses (no side-harness),
678
- so its tier is identical (engine-native py channel `anima-python evaluate` = TERMINAL). HILLOCK + ρ·form/fan/leap are
678
+ so its tier is identical (engine-native py channel `anima-py evaluate` = TERMINAL). HILLOCK + ρ·form/fan/leap are
679
679
  live; ρ·store/weave/tether/self report PENDING (honest non-verdict) until their frozen
680
680
  corpus-mined probe sets land (ING rho-axon-implement-evaluate)."""
681
681
  import rho_axon
@@ -1059,7 +1059,7 @@ def _psi_soma_panel(r):
1059
1059
 
1060
1060
 
1061
1061
  def probe_run(argv):
1062
- """`anima-python evaluate <ckpt> --probe <spec.json> [--gen N]` — matched-surface G1 probe
1062
+ """`anima-py evaluate <ckpt> --probe <spec.json> [--gen N]` — matched-surface G1 probe
1063
1063
  (card H_6189). Greedy (top_k=1) decode of each pre-registered prompt; dumps RAW continuations
1064
1064
  for offline scoring. Reuses the canonical _Mouth numpy decode path (byte-identical to the gates)."""
1065
1065
  ckpt = argv[0]
@@ -1080,7 +1080,7 @@ def probe_run(argv):
1080
1080
  "n": len(out), "items": out}, ensure_ascii=False))
1081
1081
  return 0
1082
1082
  def dump_hidden_run(argv):
1083
- """`anima-python evaluate <ckpt> --dump-hidden <prompts.json> --out <file.npz>` — read-only
1083
+ """`anima-py evaluate <ckpt> --dump-hidden <prompts.json> --out <file.npz>` — read-only
1084
1084
  penultimate-hidden dump for the ρ·weave held-out-pair recombination / γ binding-lane
1085
1085
  probe (H_9235). For each pre-registered prompt: T=24 right-aligned byte encode → the
1086
1086
  EXACT production trunk forward (core/decode clm_forward_hidden, byte-identical to what
@@ -1213,7 +1213,7 @@ def _selftest_rho_cells():
1213
1213
 
1214
1214
 
1215
1215
  def interaction_lift_run(argv):
1216
- """`anima-python evaluate <ckpt> --interaction-lift <manifest.json> --out <file.json>
1216
+ """`anima-py evaluate <ckpt> --interaction-lift <manifest.json> --out <file.json>
1217
1217
  [--win T] [--score-len K]` — engine-native joint interaction-lift measurement
1218
1218
  (H_9255, Fable design state/g1_joint_interaction_corpus/DESIGN_FABLE.md §3).
1219
1219
 
@@ -6,7 +6,7 @@
6
6
  # BindAttn model = the FROZEN base ByteGPT + N appended GATED transformer blocks
7
7
  # (applied after the L base blocks, before ln_f: x = x + gate*(block(x)-x)). This
8
8
  # command bridges the injected torch .pt back onto the base .bin so the combined
9
- # model is engine-loadable and scoreable via `anima-python evaluate <bin>` with ZERO
9
+ # model is engine-loadable and scoreable via `anima-py evaluate <bin>` with ZERO
10
10
  # changes to cli/evaluate.py (bg_is_bytegpt stays true; bg_load reads the trailer).
11
11
  #
12
12
  # REFERENCE-MATCH (NOT a reimplementation): the byte layout is core/serialize.py::
@@ -42,7 +42,7 @@ def serialize_bind_usage():
42
42
  print("")
43
43
  print(" splice N appended gated transformer blocks (BindAttn .pt) onto a base ByteGPT")
44
44
  print(" .bin so the combined model is engine-loadable + scoreable via")
45
- print(" `anima-python evaluate <out.bin>`. gate=0 => byte-identical to the base .bin.")
45
+ print(" `anima-py evaluate <out.bin>`. gate=0 => byte-identical to the base .bin.")
46
46
 
47
47
 
48
48
  def serialize_bind_run(argv):
@@ -85,7 +85,7 @@ def serialize_bind_run(argv):
85
85
  return 1
86
86
  print(" ✅ CORE-loadable with " + str(nb) + " injected-bind block(s).")
87
87
  print(" NOTE: this is a STRUCTURE round-trip only — the engine-native ρ-AXON reach")
88
- print(" verdict (former G0-G6) is `anima-python evaluate <out.bin>` (a_engine_native_learning).")
88
+ print(" verdict (former G0-G6) is `anima-py evaluate <out.bin>` (a_engine_native_learning).")
89
89
  return 0
90
90
 
91
91
 
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env python3
2
- """cli/train.py — the CANONICAL anima python training entry (`anima-python train`).
2
+ """cli/train.py — the CANONICAL anima python training entry (`anima-py train`).
3
3
 
4
4
  >>> This file is the working python training entry, SYMMETRIC to cli/evaluate.py
5
- >>> (the canonical python eval entry). `anima-python train <args>` (pip channel) dispatches HERE;
5
+ >>> (the canonical python eval entry). `anima-py train <args>` (pip channel) dispatches HERE;
6
6
  >>> hexa `anima train <args>` dispatches to the hexa-native cli/train.hexa.
7
7
  >>>
8
8
  >>> WHY python is the canonical working path RIGHT NOW: the hexa-native production
@@ -18,7 +18,7 @@
18
18
  >>>
19
19
  >>> ENGINE-NATIVE GATE (a_engine_native_learning, HARD-GATE): torch-side CE / gauges
20
20
  >>> here = DIRECTIONAL only (NOT terminal). TERMINAL verdict = CORE re-measure of the
21
- >>> serialized .clm via `anima-python evaluate <clm>` on the frozen ρ-AXON reach bars (former G0-G6). Pull the
21
+ >>> serialized .clm via `anima-py evaluate <clm>` on the frozen ρ-AXON reach bars (former G0-G6). Pull the
22
22
  >>> trained ckpt before teardown (a_fire_recover_complete) so engine-check is possible.
23
23
 
24
24
  This trainer carries the full SAVANT + MITOSIS recipe (parity with cli/train.hexa) AND
@@ -67,7 +67,7 @@ compositional structure IN THE TRUNK, added to CE. This package adds three such
67
67
  aux params, gradient flows readout→trunk.
68
68
 
69
69
  All three are DIRECTIONAL torch-side training pressures; the verdict is later via
70
- `anima-python evaluate <clm>` engine-native on the FROZEN ρ·weave bar (recombination · former G1 · a_engine_native_learning).
70
+ `anima-py evaluate <clm>` engine-native on the FROZEN ρ·weave bar (recombination · former G1 · a_engine_native_learning).
71
71
  The .clm path stays OPEN: aux heads/projections live OUTSIDE model.state_dict (in the
72
72
  objective module), so serialize_v3 writes only the standard additive-readout CLMConvMoE.
73
73
 
@@ -93,19 +93,19 @@ be tested on EITHER trunk. `--arch bytegpt` builds a 24-layer GPT-2-class ByteGP
93
93
  CLEAN ρ·weave recombination wall (former G1): ByteGPT single=2, vs CLMConvMoE's single=0 coverage-floor) and serializes a
94
94
  `.bin` (5×u32 header) via core/serialize.py (the unified serializer) instead of a `.clm`. For bytegpt the
95
95
  CLM-specific levers (savant/mitosis/tlora/dict/jamo) are gated OFF — only arm=ctrl × the
96
- objective matrix is supported (that's exactly what the G1-lever test needs). `anima-python
96
+ objective matrix is supported (that's exactly what the G1-lever test needs). `anima-py
97
97
  evaluate` auto-detects `.bin` vs `.clm` by header, so a ByteGPT `.bin` measures through
98
98
  the bytegpt mouth automatically.
99
99
 
100
100
  USAGE (installed `anima` PATH command after `hx install anima`):
101
101
  # CLM trunk (default):
102
- anima-python train --arm ctrl --objective constructive_bind --steps 8000 \\
102
+ anima-py train --arm ctrl --objective constructive_bind --steps 8000 \\
103
103
  --canon --corpus <p1..p4> --cell-label ko-general en-general ko-sns en-sns \\
104
104
  --seed 7 --val-frac 0.05 --val-every 200 --sample proportional \\
105
105
  --out ckpt/ctrl_cbind_seed7.clm --ckpt-out ckpt/ctrl_cbind_seed7.pt \\
106
106
  --gauges-out ckpt/ctrl_cbind_seed7.json
107
107
  # ByteGPT trunk (the CLEAN ρ·weave recombination wall · former G1) — arm=ctrl × the objective matrix:
108
- anima-python train --arch bytegpt --arm ctrl --objective composed_nce --steps 8000 \\
108
+ anima-py train --arch bytegpt --arm ctrl --objective composed_nce --steps 8000 \\
109
109
  --canon --corpus <p1..p4> --seed 7 --out ckpt/bg_ctrl_cnce.bin \\
110
110
  --gauges-out ckpt/bg_ctrl_cnce.json
111
111
  """
@@ -707,7 +707,7 @@ def loss_contrastive_equilibrium(logits, targets, V, gen, penultimate=None):
707
707
  # ▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ NEW OBJECTIVES (H_1640) ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▛
708
708
  # Three NEW compositional TRAINING-OBJECTIVE loss functions added to CE. Each is a
709
709
  # training-side pressure that reshapes the gradient the TRUNK receives (not a readout
710
- # op). Verdict later = engine-native `anima-python evaluate` on the frozen G1 bar.
710
+ # op). Verdict later = engine-native `anima-py evaluate` on the frozen G1 bar.
711
711
  # ════════════════════════════════════════════════════════════════════════════
712
712
 
713
713
  # ── LEVER 1: predictive_info — multi-step predictive-coding aux ───────────────
@@ -1041,7 +1041,7 @@ class TrainShell(nn.Module):
1041
1041
 
1042
1042
  def main():
1043
1043
  ap = argparse.ArgumentParser(
1044
- description="anima canonical python trainer (`anima-python train`) — CLMConvMoE "
1044
+ description="anima canonical python trainer (`anima-py train`) — CLMConvMoE "
1045
1045
  "SAVANT+MITOSIS recipe + H_1640 arm×objective compositional levers")
1046
1046
  ap.add_argument("--arch", default="clm", choices=["clm", "bytegpt"],
1047
1047
  help="trunk architecture: clm=CLMConvMoE (default, .clm out) | "
@@ -1084,6 +1084,10 @@ def main():
1084
1084
  help="N6 sweep: override savant dropout floor (>=0 forces constant dp)")
1085
1085
  ap.add_argument("--bf16", action="store_true")
1086
1086
  ap.add_argument("--sample", choices=["roundrobin", "proportional"], default="proportional")
1087
+ # --require-cells N: fail LOUD if the usable register-cell count != N (a_chat_registers
1088
+ # overfit guard, parity with cli/train.hexa). Default 0 = off. Prevents silently
1089
+ # training on an incomplete 4-cell register (the clm303 ko-SNS starvation overfit).
1090
+ ap.add_argument("--require-cells", type=int, default=0)
1087
1091
  ap.add_argument("--val-frac", type=float, default=0.05)
1088
1092
  ap.add_argument("--val-every", type=int, default=200)
1089
1093
  ap.add_argument("--val-batches", type=int, default=4)
@@ -1215,7 +1219,7 @@ def main():
1215
1219
  obj_is_module = isinstance(objfn, nn.Module)
1216
1220
  obj_needs_pen = a.objective in OBJ_NEEDS_PENULTIMATE
1217
1221
 
1218
- p0(f"=== anima-python train (canonical) arch={a.arch} arm={a.arm} obj={a.objective} seed={a.seed} ===", flush=True)
1222
+ p0(f"=== anima-py train (canonical) arch={a.arch} arm={a.arm} obj={a.objective} seed={a.seed} ===", flush=True)
1219
1223
  if ddp_on:
1220
1224
  # §10.2 — prove the GLOBAL batch in the run record (global batch preserved, per-rank B/N).
1221
1225
  p0(f" [ddp] world_size={world} global_batch={a.batch_size} per_rank_batch="
@@ -1335,6 +1339,17 @@ def main():
1335
1339
  _samp_w = torch.tensor([float(c.train_end) for c in _samp_cells]) \
1336
1340
  if _samp_cells else torch.tensor([1.0])
1337
1341
 
1342
+ # --require-cells N: fail LOUD if the usable register-cell count != N (a_chat_registers
1343
+ # 4-cell completeness guard, parity with cli/train.hexa). Prevents silently training on
1344
+ # an incomplete register — the clm303 ko-SNS starvation overfit (train-py-3 convergence:
1345
+ # a small/incomplete corpus overfits to a low val_CE while free-gen coherence collapses).
1346
+ if a.require_cells > 0 and len(_samp_cells) != a.require_cells:
1347
+ sys.exit(
1348
+ f"[require-cells] --require-cells {a.require_cells} but {len(_samp_cells)} usable "
1349
+ f"register cell(s) (window-fit train_end>={seq_len + 2}): refusing to train on an "
1350
+ f"incomplete register (a_chat_registers overfit/starvation guard). usable cells: "
1351
+ f"{[c.path for c in _samp_cells]}")
1352
+
1338
1353
  # §3/§5 GLOBAL batch preserved: --batch-size is the GLOBAL batch; each rank materializes
1339
1354
  # B_local = B_global // world. world==1 ⇒ B_local == B_global (N==1 byte-identical).
1340
1355
  B_global = a.batch_size
@@ -1406,7 +1421,7 @@ def main():
1406
1421
  # CLM → .clm v0.3 (CLMConvMoE additive readout, materialized TLoRA experts).
1407
1422
  # ByteGPT → .pt (cfg+state_dict) → core/serialize.py::serialize → .bin (5×u32
1408
1423
  # header). The engine (generator L3 mouth-sniff) auto-dispatches .bin to the bytegpt
1409
- # decode; `anima-python evaluate` auto-detects .bin vs .clm by header, so no eval change.
1424
+ # decode; `anima-py evaluate` auto-detects .bin vs .clm by header, so no eval change.
1410
1425
  def _write_bin(out_path):
1411
1426
  # write the torch .pt in the exact shape bytegpt_serialize.serialize reads, next to
1412
1427
  # the .bin, then bridge it. The aux-head objective params are OUTSIDE model.state_dict
@@ -1596,7 +1611,7 @@ def main():
1596
1611
 
1597
1612
  # ── ρ·weave/ρ·fan (former G1/G6) torch-probe gauges (DIRECTIONAL, a_train_inline_gauge) ──
1598
1613
  # gauge_lib.compute_inline_gauges decodes via the CLM mouth (CLMConvMoE-specific);
1599
- # skip for bytegpt (the terminal verdict is `anima-python evaluate <.bin>` engine-native
1614
+ # skip for bytegpt (the terminal verdict is `anima-py evaluate <.bin>` engine-native
1600
1615
  # through the bytegpt mouth anyway — this torch probe is DIRECTIONAL only).
1601
1616
  gauges = None
1602
1617
  if not is_bytegpt:
@@ -1621,7 +1636,7 @@ def main():
1621
1636
  print(f" torch ckpt -> {a.ckpt_out} ({os.path.getsize(a.ckpt_out)} bytes)", flush=True)
1622
1637
 
1623
1638
  # ── summary json ──────────────────────────────────────────────────────────
1624
- summary = {"entry": "anima-python train", "arch": a.arch, "arm": a.arm,
1639
+ summary = {"entry": "anima-py train", "arch": a.arch, "arm": a.arm,
1625
1640
  "objective": a.objective, "seed": a.seed,
1626
1641
  "ddp": {"world_size": world, "global_batch": B_global,
1627
1642
  "per_rank_batch": B_local, "gpus": a.gpus},
@@ -0,0 +1 @@
1
+ # pip 패키징 전용 (anima-py · pyproject.toml package-dir 매핑) — 런타임 flat import 는 sys.path 경유, 이 파일은 비어 있어야 한다.
@@ -13,7 +13,7 @@
13
13
  #
14
14
  # This module is a pure library (NO __main__ execution of the engine) — the
15
15
  # rep→code encoding uses the real ByteGPT-303M forward via core/decode.py in the
16
- # py-canonical measurement path (== anima-python evaluate ops, a_eval_py_canonical);
16
+ # py-canonical measurement path (== anima-py evaluate ops, a_eval_py_canonical);
17
17
  # the store + completion here is arch-independent arithmetic (no FFI, no torch).
18
18
  # ==========================================================================
19
19
  import numpy as np
@@ -346,7 +346,7 @@ def build_model(variant: str = "AB", **overrides) -> CLMConvMoE:
346
346
 
347
347
 
348
348
  # ═══════════════════════════════════════════════════════════════════════════
349
- # BYTE mouth — ByteGPT trunk (`anima-python train --arch bytegpt`, `.bin` format).
349
+ # BYTE mouth — ByteGPT trunk (`anima-py train --arch bytegpt`, `.bin` format).
350
350
  # The SYMMETRIC sibling of CLMConvMoE (the CONV mouth) folded into this UNIFIED
351
351
  # core/model.py, mirroring core/decode.py (unified CONV+BYTE decoder) and
352
352
  # core/serialize.py (unified serializer). ByteGPT = 24-layer GPT-2-class byte
@@ -749,7 +749,7 @@ def serialize_bind(base_bin: str, injected_pt: str, out_bin: str) -> str:
749
749
  # ════════════════════════════════════════════════════════════════════════
750
750
  # (d.inv) ByteGPT .bin → torch state_dict INVERSE — warm-start reader.
751
751
  # The exact byte-for-byte inverse of serialize() above (same 5×u32 header +
752
- # flat little-endian float32 tensor order). Used by `anima-python train --init
752
+ # flat little-endian float32 tensor order). Used by `anima-py train --init
753
753
  # <base.bin>` to warm-start a fresh ByteGPT from a trained engine .bin. The
754
754
  # byte grammar SSOT stays in THIS file (mirror of serialize's write order).
755
755
  # ════════════════════════════════════════════════════════════════════════
@@ -14,7 +14,7 @@ CORE-owned (owner directive: core-related lives in core/). ONE file holds all th
14
14
  faces of the SLW so nothing drifts:
15
15
  * slot_apply() -- torch-free NUMPY inference mirror. This is the byte-parity
16
16
  partner of the engine `core/decode.hexa` _slot_apply, and the
17
- `anima-python evaluate` (a_eval_py_canonical) TERMINAL path calls
17
+ `anima-py evaluate` (a_eval_py_canonical) TERMINAL path calls
18
18
  it. Import stays torch-free so the inference pod needs no torch.
19
19
  * pack_slw() / read_slw() -- the "SLW\\x01" trailer codec (used by
20
20
  core/serialize.py on write, by the numpy + hexa loaders on read).
@@ -1,6 +1,6 @@
1
1
  # ==========================================================================
2
- # anima-python — anima py CLI 의 pip 배포 채널 (hexa 툴체인 無 호스트용 · pi5 등).
3
- # 단일진입 보존(a_cli_single_entry): console 명령 `anima-python` = cli/anima.py:main
2
+ # anima-py — anima py CLI 의 pip 배포 채널 (hexa 툴체인 無 호스트용 · pi5 등).
3
+ # 단일진입 보존(a_cli_single_entry): console 명령 `anima-py` = cli/anima.py:main
4
4
  # 의 콘솔 바인딩(동일 디스패처, 2nd entry 아님). 소스 복사 0 — 기존 cli/·core/
5
5
  # 디렉토리를 package-dir 매핑으로 그대로 패키징(surgical·canonical-naming).
6
6
  # base 의존 = numpy 만(evaluate·corpus); train/serialize/sweep = [train] extra.
@@ -22,7 +22,7 @@ dependencies = ["numpy>=1.24"]
22
22
  train = ["torch>=2.1", "datasets"]
23
23
 
24
24
  [project.scripts]
25
- anima-python = "anima_py:main"
25
+ anima-py = "anima_py:main"
26
26
 
27
27
  [tool.setuptools]
28
28
  packages = ["anima_py", "anima_py.cli", "anima_py.core"]
@@ -1,52 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: anima-python
3
- Version: 0.13.1
4
- Summary: anima substrate-native consciousness engine — py CLI (measurement/eval · serialize · corpus · sweep), hexa-toolchain-free numpy distribution
5
- Requires-Python: >=3.9
6
- Description-Content-Type: text/markdown
7
- License-File: LICENSE
8
- Requires-Dist: numpy>=1.24
9
- Provides-Extra: train
10
- Requires-Dist: torch>=2.1; extra == "train"
11
- Requires-Dist: datasets; extra == "train"
12
- Dynamic: license-file
13
-
14
- # anima-python
15
-
16
- **anima** 의 py CLI 를 pip 로 배포하는 채널 — **hexa 툴체인 불필요**. 엔진 측정/직렬화/코퍼스 경로가 numpy 하나만으로 돈다 (pi5 등 hexa-less 호스트용).
17
-
18
- > 단일진입 보존(`a_cli_single_entry`): `anima-python` 콘솔 명령 = `cli/anima.py:main` 디스패처의 pip 바인딩. hexa 채널 `anima`(`hx install anima`) 와 **동일 디스패처, 설치 채널만 2개** — 2nd entry 아님. 이름을 `anima-python` 로 둔 이유 = hexa `anima` 와 PATH 충돌 회피.
19
-
20
- ## 설치
21
-
22
- **PyPI 발행 후** (권장):
23
-
24
- ```bash
25
- pip install anima-python # base — numpy 만 (evaluate · corpus · chat-stub)
26
- pip install "anima-python[train]" # +torch +datasets (serialize · train · sweep)
27
- ```
28
-
29
- > ⏳ **PyPI 발행 대기 중**: 위 명령은 `anima-python` 가 PyPI 에 발행된 뒤 동작한다. 발행은 `release.yml` 의 `pypi-publish` job(OIDC trusted-publishing)이 `v*` 태그에서 자동 수행하며, 오너의 1회 설정이 선결(① pypi.org 에 anima-python pending-publisher 등록: Owner=dancinlab·Repo=anima·Workflow=release.yml·Env=pypi ② repo 변수 `PYPI_PUBLISH=true`). 그 전까지는 아래 소스 설치를 쓴다.
30
-
31
- **소스에서 바로 설치** (PyPI 없이 지금 가능):
32
-
33
- ```bash
34
- pip install "git+https://github.com/dancinlab/anima.git" # base
35
- pip install "anima-python[train] @ git+https://github.com/dancinlab/anima.git" # +torch
36
- # 또는 레포 클론 후: pip install . / pip install ".[train]"
37
- ```
38
-
39
- ## 명령 매트릭스
40
-
41
- | 동사 | 티어 | torch 없이 동작 | 비고 |
42
- |---|---|---|---|
43
- | `anima-python evaluate <clm> [--corpus …] [--gen N]` | base | ✅ numpy | py 2-production 측정 = ρ·AXON reach / 구 G0-G6. terminal-eligible (`a_eval_py_canonical`) |
44
- | `anima-python corpus <derivtrace\|flat> --out F …` | base | ✅ 순수 stdlib | 절차적 학습-코퍼스 생성 (data-format 레버) |
45
- | `anima-python chat <clm>` | base | ✅ (stub) | 의식 A⇄G 루프는 hexa-native → hexa 진입 포인터 출력 |
46
- | `anima-python serialize <pt> <clm>` | `[train]` | ❌ torch | `.pt` unpickle 에 torch 필요 (+ held-out DESCENT 게이트) |
47
- | `anima-python sweep --arms … --objectives …` | `[train]` | ❌ | 셀마다 train.py spawn → torch 필요 |
48
- | `anima-python train <args>` | `[train]` | ❌ torch+datasets | production Lane-P 학습 |
49
-
50
- ## verdict 규율
51
-
52
- `anima-python evaluate <clm>` = py 2-production numpy 측정 경로 — hexa det-eval 과 동일 frozen bars·byte-parity 라 **terminal 자격 동일**(`a_eval_py_canonical`, 2nd-class 미러 아님). 큰 ckpt(303M+)는 mini 금지 · pool(summer/aiden)에서 측정.
@@ -1 +0,0 @@
1
- 0.13.1
@@ -1,39 +0,0 @@
1
- # anima-python
2
-
3
- **anima** 의 py CLI 를 pip 로 배포하는 채널 — **hexa 툴체인 불필요**. 엔진 측정/직렬화/코퍼스 경로가 numpy 하나만으로 돈다 (pi5 등 hexa-less 호스트용).
4
-
5
- > 단일진입 보존(`a_cli_single_entry`): `anima-python` 콘솔 명령 = `cli/anima.py:main` 디스패처의 pip 바인딩. hexa 채널 `anima`(`hx install anima`) 와 **동일 디스패처, 설치 채널만 2개** — 2nd entry 아님. 이름을 `anima-python` 로 둔 이유 = hexa `anima` 와 PATH 충돌 회피.
6
-
7
- ## 설치
8
-
9
- **PyPI 발행 후** (권장):
10
-
11
- ```bash
12
- pip install anima-python # base — numpy 만 (evaluate · corpus · chat-stub)
13
- pip install "anima-python[train]" # +torch +datasets (serialize · train · sweep)
14
- ```
15
-
16
- > ⏳ **PyPI 발행 대기 중**: 위 명령은 `anima-python` 가 PyPI 에 발행된 뒤 동작한다. 발행은 `release.yml` 의 `pypi-publish` job(OIDC trusted-publishing)이 `v*` 태그에서 자동 수행하며, 오너의 1회 설정이 선결(① pypi.org 에 anima-python pending-publisher 등록: Owner=dancinlab·Repo=anima·Workflow=release.yml·Env=pypi ② repo 변수 `PYPI_PUBLISH=true`). 그 전까지는 아래 소스 설치를 쓴다.
17
-
18
- **소스에서 바로 설치** (PyPI 없이 지금 가능):
19
-
20
- ```bash
21
- pip install "git+https://github.com/dancinlab/anima.git" # base
22
- pip install "anima-python[train] @ git+https://github.com/dancinlab/anima.git" # +torch
23
- # 또는 레포 클론 후: pip install . / pip install ".[train]"
24
- ```
25
-
26
- ## 명령 매트릭스
27
-
28
- | 동사 | 티어 | torch 없이 동작 | 비고 |
29
- |---|---|---|---|
30
- | `anima-python evaluate <clm> [--corpus …] [--gen N]` | base | ✅ numpy | py 2-production 측정 = ρ·AXON reach / 구 G0-G6. terminal-eligible (`a_eval_py_canonical`) |
31
- | `anima-python corpus <derivtrace\|flat> --out F …` | base | ✅ 순수 stdlib | 절차적 학습-코퍼스 생성 (data-format 레버) |
32
- | `anima-python chat <clm>` | base | ✅ (stub) | 의식 A⇄G 루프는 hexa-native → hexa 진입 포인터 출력 |
33
- | `anima-python serialize <pt> <clm>` | `[train]` | ❌ torch | `.pt` unpickle 에 torch 필요 (+ held-out DESCENT 게이트) |
34
- | `anima-python sweep --arms … --objectives …` | `[train]` | ❌ | 셀마다 train.py spawn → torch 필요 |
35
- | `anima-python train <args>` | `[train]` | ❌ torch+datasets | production Lane-P 학습 |
36
-
37
- ## verdict 규율
38
-
39
- `anima-python evaluate <clm>` = py 2-production numpy 측정 경로 — hexa det-eval 과 동일 frozen bars·byte-parity 라 **terminal 자격 동일**(`a_eval_py_canonical`, 2nd-class 미러 아님). 큰 ckpt(303M+)는 mini 금지 · pool(summer/aiden)에서 측정.
@@ -1,52 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: anima-python
3
- Version: 0.13.1
4
- Summary: anima substrate-native consciousness engine — py CLI (measurement/eval · serialize · corpus · sweep), hexa-toolchain-free numpy distribution
5
- Requires-Python: >=3.9
6
- Description-Content-Type: text/markdown
7
- License-File: LICENSE
8
- Requires-Dist: numpy>=1.24
9
- Provides-Extra: train
10
- Requires-Dist: torch>=2.1; extra == "train"
11
- Requires-Dist: datasets; extra == "train"
12
- Dynamic: license-file
13
-
14
- # anima-python
15
-
16
- **anima** 의 py CLI 를 pip 로 배포하는 채널 — **hexa 툴체인 불필요**. 엔진 측정/직렬화/코퍼스 경로가 numpy 하나만으로 돈다 (pi5 등 hexa-less 호스트용).
17
-
18
- > 단일진입 보존(`a_cli_single_entry`): `anima-python` 콘솔 명령 = `cli/anima.py:main` 디스패처의 pip 바인딩. hexa 채널 `anima`(`hx install anima`) 와 **동일 디스패처, 설치 채널만 2개** — 2nd entry 아님. 이름을 `anima-python` 로 둔 이유 = hexa `anima` 와 PATH 충돌 회피.
19
-
20
- ## 설치
21
-
22
- **PyPI 발행 후** (권장):
23
-
24
- ```bash
25
- pip install anima-python # base — numpy 만 (evaluate · corpus · chat-stub)
26
- pip install "anima-python[train]" # +torch +datasets (serialize · train · sweep)
27
- ```
28
-
29
- > ⏳ **PyPI 발행 대기 중**: 위 명령은 `anima-python` 가 PyPI 에 발행된 뒤 동작한다. 발행은 `release.yml` 의 `pypi-publish` job(OIDC trusted-publishing)이 `v*` 태그에서 자동 수행하며, 오너의 1회 설정이 선결(① pypi.org 에 anima-python pending-publisher 등록: Owner=dancinlab·Repo=anima·Workflow=release.yml·Env=pypi ② repo 변수 `PYPI_PUBLISH=true`). 그 전까지는 아래 소스 설치를 쓴다.
30
-
31
- **소스에서 바로 설치** (PyPI 없이 지금 가능):
32
-
33
- ```bash
34
- pip install "git+https://github.com/dancinlab/anima.git" # base
35
- pip install "anima-python[train] @ git+https://github.com/dancinlab/anima.git" # +torch
36
- # 또는 레포 클론 후: pip install . / pip install ".[train]"
37
- ```
38
-
39
- ## 명령 매트릭스
40
-
41
- | 동사 | 티어 | torch 없이 동작 | 비고 |
42
- |---|---|---|---|
43
- | `anima-python evaluate <clm> [--corpus …] [--gen N]` | base | ✅ numpy | py 2-production 측정 = ρ·AXON reach / 구 G0-G6. terminal-eligible (`a_eval_py_canonical`) |
44
- | `anima-python corpus <derivtrace\|flat> --out F …` | base | ✅ 순수 stdlib | 절차적 학습-코퍼스 생성 (data-format 레버) |
45
- | `anima-python chat <clm>` | base | ✅ (stub) | 의식 A⇄G 루프는 hexa-native → hexa 진입 포인터 출력 |
46
- | `anima-python serialize <pt> <clm>` | `[train]` | ❌ torch | `.pt` unpickle 에 torch 필요 (+ held-out DESCENT 게이트) |
47
- | `anima-python sweep --arms … --objectives …` | `[train]` | ❌ | 셀마다 train.py spawn → torch 필요 |
48
- | `anima-python train <args>` | `[train]` | ❌ torch+datasets | production Lane-P 학습 |
49
-
50
- ## verdict 규율
51
-
52
- `anima-python evaluate <clm>` = py 2-production numpy 측정 경로 — hexa det-eval 과 동일 frozen bars·byte-parity 라 **terminal 자격 동일**(`a_eval_py_canonical`, 2nd-class 미러 아님). 큰 ckpt(303M+)는 mini 금지 · pool(summer/aiden)에서 측정.
@@ -1,2 +0,0 @@
1
- [console_scripts]
2
- anima-python = anima_py:main
@@ -1 +0,0 @@
1
- # pip 패키징 전용 (anima-python · pyproject.toml package-dir 매핑) — 런타임 flat import 는 sys.path 경유, 이 파일은 비어 있어야 한다.
@@ -1 +0,0 @@
1
- # pip 패키징 전용 (anima-python · pyproject.toml package-dir 매핑) — 런타임 flat import 는 sys.path 경유, 이 파일은 비어 있어야 한다.
File without changes
File without changes
File without changes