simdref 0.0.5__tar.gz → 0.0.7__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 (103) hide show
  1. {simdref-0.0.5/src/simdref.egg-info → simdref-0.0.7}/PKG-INFO +32 -106
  2. {simdref-0.0.5 → simdref-0.0.7}/README.md +18 -94
  3. {simdref-0.0.5 → simdref-0.0.7}/pyproject.toml +20 -17
  4. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/annotate.py +12 -4
  5. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/cli.py +383 -316
  6. simdref-0.0.5/src/simdref/web.py → simdref-0.0.7/src/simdref/export.py +148 -48
  7. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/ingest_sources.py +3 -3
  8. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/queries.py +8 -2
  9. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/storage.py +99 -11
  10. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/ui_labels.py +7 -6
  11. {simdref-0.0.5 → simdref-0.0.7/src/simdref.egg-info}/PKG-INFO +32 -106
  12. {simdref-0.0.5 → simdref-0.0.7}/src/simdref.egg-info/SOURCES.txt +4 -22
  13. simdref-0.0.7/src/simdref.egg-info/requires.txt +10 -0
  14. simdref-0.0.7/tests/test_annotate_positions.py +146 -0
  15. {simdref-0.0.5 → simdref-0.0.7}/tests/test_auto_update_on_version_change.py +6 -6
  16. simdref-0.0.7/tests/test_cli_bare_query.py +232 -0
  17. {simdref-0.0.5 → simdref-0.0.7}/tests/test_coverage_live.py +4 -1
  18. {simdref-0.0.5 → simdref-0.0.7}/tests/test_coverage_parity.py +5 -1
  19. simdref-0.0.7/tests/test_export.py +214 -0
  20. {simdref-0.0.5 → simdref-0.0.7}/tests/test_issue2_fixes.py +92 -2
  21. simdref-0.0.7/tests/test_issues_23_24_25.py +384 -0
  22. {simdref-0.0.5 → simdref-0.0.7}/tests/test_lsp_web.py +14 -43
  23. {simdref-0.0.5 → simdref-0.0.7}/tests/test_presentation.py +14 -25
  24. {simdref-0.0.5 → simdref-0.0.7}/tests/test_preset_persistence.py +0 -28
  25. simdref-0.0.7/tests/test_storage_payload.py +273 -0
  26. {simdref-0.0.5 → simdref-0.0.7}/tests/test_storage_schema.py +26 -0
  27. {simdref-0.0.5 → simdref-0.0.7}/tests/test_ui_labels_parity.py +4 -39
  28. {simdref-0.0.5 → simdref-0.0.7}/tests/test_version_matches_pyproject.py +5 -1
  29. simdref-0.0.5/src/simdref/profile/__init__.py +0 -25
  30. simdref-0.0.5/src/simdref/profile/adapters/__init__.py +0 -1
  31. simdref-0.0.5/src/simdref/profile/adapters/exegesis.py +0 -65
  32. simdref-0.0.5/src/simdref/profile/adapters/mca.py +0 -84
  33. simdref-0.0.5/src/simdref/profile/adapters/perf.py +0 -284
  34. simdref-0.0.5/src/simdref/profile/adapters/uprof.py +0 -89
  35. simdref-0.0.5/src/simdref/profile/adapters/vtune.py +0 -83
  36. simdref-0.0.5/src/simdref/profile/adapters/xctrace.py +0 -66
  37. simdref-0.0.5/src/simdref/profile/hotloop.py +0 -356
  38. simdref-0.0.5/src/simdref/profile/merge.py +0 -215
  39. simdref-0.0.5/src/simdref/profile/model.py +0 -129
  40. simdref-0.0.5/src/simdref/profile/orchestrate.py +0 -325
  41. simdref-0.0.5/src/simdref/profile/registry.py +0 -62
  42. simdref-0.0.5/src/simdref/templates/__init__.py +0 -0
  43. simdref-0.0.5/src/simdref/templates/app.js +0 -2358
  44. simdref-0.0.5/src/simdref/templates/favicon.svg +0 -5
  45. simdref-0.0.5/src/simdref/templates/index.html +0 -164
  46. simdref-0.0.5/src/simdref/templates/logo.svg +0 -12
  47. simdref-0.0.5/src/simdref/templates/style.css +0 -917
  48. simdref-0.0.5/src/simdref.egg-info/requires.txt +0 -10
  49. simdref-0.0.5/tests/test_cli_bare_query.py +0 -90
  50. simdref-0.0.5/tests/test_search_index_js.py +0 -34
  51. simdref-0.0.5/tests/test_storage_payload.py +0 -56
  52. simdref-0.0.5/tests/test_web_e2e.py +0 -202
  53. {simdref-0.0.5 → simdref-0.0.7}/LICENSE +0 -0
  54. {simdref-0.0.5 → simdref-0.0.7}/setup.cfg +0 -0
  55. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/__init__.py +0 -0
  56. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/__main__.py +0 -0
  57. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/arm_instructions.py +0 -0
  58. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/display.py +0 -0
  59. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/filters.py +0 -0
  60. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/ingest.py +0 -0
  61. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/ingest_catalog.py +0 -0
  62. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/ingest_pdf.py +0 -0
  63. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/lsp.py +0 -0
  64. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/manpages.py +0 -0
  65. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/models.py +0 -0
  66. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/pdfparse/__init__.py +0 -0
  67. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/pdfparse/base.py +0 -0
  68. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/pdfparse/intel.py +0 -0
  69. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/pdfparse/registry.py +0 -0
  70. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/pdfparse/types.py +0 -0
  71. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/pdfrefs.py +0 -0
  72. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/perf.py +0 -0
  73. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/perf_sources/__init__.py +0 -0
  74. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/perf_sources/cores.py +0 -0
  75. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/perf_sources/llvm_mca.py +0 -0
  76. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/perf_sources/llvm_scheduling.py +0 -0
  77. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/perf_sources/merge.py +0 -0
  78. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/riscv.py +0 -0
  79. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/search.py +0 -0
  80. {simdref-0.0.5 → simdref-0.0.7}/src/simdref/tui.py +0 -0
  81. {simdref-0.0.5 → simdref-0.0.7}/src/simdref.egg-info/dependency_links.txt +0 -0
  82. {simdref-0.0.5 → simdref-0.0.7}/src/simdref.egg-info/entry_points.txt +0 -0
  83. {simdref-0.0.5 → simdref-0.0.7}/src/simdref.egg-info/top_level.txt +0 -0
  84. {simdref-0.0.5 → simdref-0.0.7}/tests/test_annotate.py +0 -0
  85. {simdref-0.0.5 → simdref-0.0.7}/tests/test_audit_coverage.py +0 -0
  86. {simdref-0.0.5 → simdref-0.0.7}/tests/test_cli_bootstrap_progress.py +0 -0
  87. {simdref-0.0.5 → simdref-0.0.7}/tests/test_cli_help.py +0 -0
  88. {simdref-0.0.5 → simdref-0.0.7}/tests/test_cli_llm.py +0 -0
  89. {simdref-0.0.5 → simdref-0.0.7}/tests/test_display.py +0 -0
  90. {simdref-0.0.5 → simdref-0.0.7}/tests/test_filters.py +0 -0
  91. {simdref-0.0.5 → simdref-0.0.7}/tests/test_ingest_sources.py +0 -0
  92. {simdref-0.0.5 → simdref-0.0.7}/tests/test_intel_operation_and_url.py +0 -0
  93. {simdref-0.0.5 → simdref-0.0.7}/tests/test_models.py +0 -0
  94. {simdref-0.0.5 → simdref-0.0.7}/tests/test_pdfparse.py +0 -0
  95. {simdref-0.0.5 → simdref-0.0.7}/tests/test_perf.py +0 -0
  96. {simdref-0.0.5 → simdref-0.0.7}/tests/test_perf_sources.py +0 -0
  97. {simdref-0.0.5 → simdref-0.0.7}/tests/test_riscv_docs_pages.py +0 -0
  98. {simdref-0.0.5 → simdref-0.0.7}/tests/test_search.py +0 -0
  99. {simdref-0.0.5 → simdref-0.0.7}/tests/test_search_pushdown.py +0 -0
  100. {simdref-0.0.5 → simdref-0.0.7}/tests/test_source_kind_filter.py +0 -0
  101. {simdref-0.0.5 → simdref-0.0.7}/tests/test_source_validation.py +0 -0
  102. {simdref-0.0.5 → simdref-0.0.7}/tests/test_tui.py +0 -0
  103. {simdref-0.0.5 → simdref-0.0.7}/tests/test_x86_linking.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simdref
3
- Version: 0.0.5
4
- Summary: Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI, LSP, and static web export.
3
+ Version: 0.0.7
4
+ Summary: Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI, and LSP.
5
5
  Author: Marco
6
6
  License: GPL-3.0-or-later
7
7
  Classifier: Development Status :: 3 - Alpha
@@ -10,29 +10,31 @@ Classifier: Intended Audience :: Developers
10
10
  Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
11
11
  Classifier: Operating System :: OS Independent
12
12
  Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
13
14
  Classifier: Programming Language :: Python :: 3.11
14
15
  Classifier: Programming Language :: Python :: 3.12
15
16
  Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
16
18
  Classifier: Topic :: Software Development :: Documentation
17
19
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
- Requires-Python: >=3.11
20
+ Requires-Python: >=3.10
19
21
  Description-Content-Type: text/markdown
20
22
  License-File: LICENSE
21
- Requires-Dist: click<10,>=8.1
23
+ Requires-Dist: click<9,>=8.5
22
24
  Requires-Dist: httpx<1,>=0.28
23
- Requires-Dist: msgpack<2,>=1.0
24
- Requires-Dist: pdfplumber<1,>=0.11
25
- Requires-Dist: PyMuPDF<2,>=1.24
26
- Requires-Dist: PyYAML<7,>=6
27
- Requires-Dist: rapidfuzz<4,>=3.9
28
- Requires-Dist: rich<15,>=13
29
- Requires-Dist: textual<2,>=1.0
30
- Requires-Dist: typer<1,>=0.19
25
+ Requires-Dist: msgpack<2,>=1.2.1
26
+ Requires-Dist: pdfplumber<1,>=0.11.10
27
+ Requires-Dist: PyMuPDF<2,>=1.28
28
+ Requires-Dist: PyYAML<7,>=6.0.3
29
+ Requires-Dist: rapidfuzz<4,>=3.14
30
+ Requires-Dist: rich<16,>=15
31
+ Requires-Dist: textual<9,>=8.2
32
+ Requires-Dist: typer<1,>=0.27
31
33
  Dynamic: license-file
32
34
 
33
35
  # simdref
34
36
 
35
- [![CI](https://github.com/DiamonDinoia/simdref/actions/workflows/ci.yml/badge.svg)](https://github.com/DiamonDinoia/simdref/actions/workflows/ci.yml)
37
+ [![CI](https://github.com/simd-labs/simdref/actions/workflows/ci.yml/badge.svg)](https://github.com/simd-labs/simdref/actions/workflows/ci.yml)
36
38
  [![TestPyPI](https://img.shields.io/pypi/v/simdref?pypiBaseUrl=https%3A%2F%2Ftest.pypi.org&label=TestPyPI)](https://test.pypi.org/project/simdref/)
37
39
  [![Python](https://img.shields.io/pypi/pyversions/simdref?pypiBaseUrl=https%3A%2F%2Ftest.pypi.org)](https://pypi.org/project/simdref/)
38
40
 
@@ -40,90 +42,28 @@ A single searchable reference for SIMD intrinsics and instructions across
40
42
  **x86 (Intel + uops.info)**, **Arm (ACLE / AARCHMRS)**, and **RISC-V
41
43
  (RVV + unified-db)**. Runs as a CLI, a Textual TUI, an LSP server,
42
44
  on-demand manpages (`simdref man` — or run `simdref install-manpages`
43
- so plain `man vpaddd` works), a static web app, and a structured JSON
44
- interface for LLM skills.
45
+ so plain `man vpaddd` works), a JSON site-data export for
46
+ [simdref-web](https://github.com/simd-labs/simdref-web), and a
47
+ structured JSON interface for LLM skills.
45
48
 
46
- [Web App](https://diamondinoia.github.io/simdref/) ·
49
+ [Web App](https://simdref.diamondinoia.com/) ·
47
50
  [TestPyPI](https://test.pypi.org/project/simdref/) ·
48
- [GitHub](https://github.com/DiamonDinoia/simdref) ·
51
+ [GitHub](https://github.com/simd-labs/simdref) ·
49
52
  [Contributing](CONTRIBUTING.md)
50
53
 
51
54
  <!-- Screenshots are hosted on the `docs-assets` branch so the main
52
55
  branch stays lightweight to clone. -->
53
56
 
54
57
  <p align="center">
55
- <img alt="simdref TUI" src="https://raw.githubusercontent.com/DiamonDinoia/simdref/docs-assets/img/tui.svg" width="720">
58
+ <img alt="simdref TUI" src="https://raw.githubusercontent.com/simd-labs/simdref/docs-assets/img/tui.svg" width="720">
56
59
  <br><em>Interactive TUI with ISA filters, ranked results, and measured/modeled performance tables.</em>
57
60
  </p>
58
61
 
59
- ## Install the Claude Code skill
62
+ ## Install the Claude Code and Codex skill
60
63
 
61
- `skills/asm-analysis/` ships a Claude Code skill that drives the
62
- compile → objdump → `simdref annotate` → `simdref profile` → LLM-batch
63
- pipeline automatically. This repo publishes it as a Claude Code plugin,
64
- so the one-liner install is:
65
-
66
- ```
67
- /plugin marketplace add DiamonDinoia/simdref
68
- /plugin install asm-analysis@simdref
69
- ```
70
-
71
- Run those at the Claude Code prompt. The marketplace add fetches this
72
- repo; the install wires up the skill so Claude picks it up automatically
73
- on performance-oriented prompts like *"why is this loop slow"*,
74
- *"vectorise this"*, *"look at the asm"*.
75
-
76
- ### Manual install (no marketplace)
77
-
78
- If you prefer a hand-managed copy:
79
-
80
- ```bash
81
- # symlink from a checkout — always current with main:
82
- git clone https://github.com/DiamonDinoia/simdref.git ~/src/simdref
83
- mkdir -p ~/.claude/skills
84
- ln -sf ~/src/simdref/skills/asm-analysis ~/.claude/skills/asm-analysis
85
-
86
- # or pull a one-off snapshot:
87
- mkdir -p ~/.claude/skills/asm-analysis && \
88
- curl -fsSL https://raw.githubusercontent.com/DiamonDinoia/simdref/main/skills/asm-analysis/SKILL.md \
89
- -o ~/.claude/skills/asm-analysis/SKILL.md
90
- ```
91
-
92
- See [`skills/asm-analysis/SKILL.md`](skills/asm-analysis/SKILL.md) for
93
- the full trigger list and pipeline stages.
94
-
95
- ## Install the Codex skill
96
-
97
- This repo also ships the same pipeline as an OpenAI Codex plugin, so
98
- the one-liner install from a Codex CLI prompt is:
99
-
100
- ```
101
- codex plugin marketplace add DiamonDinoia/simdref
102
- /plugins
103
- ```
104
-
105
- Pick `asm-analysis` in the browser and enable it. Codex picks up the
106
- skill automatically on performance-oriented prompts (*"why is this
107
- loop slow"*, *"vectorise this"*, *"look at the asm"*).
108
-
109
- ### Manual install (no marketplace)
110
-
111
- ```bash
112
- # user-scoped symlink — applies to every repo, always current with main:
113
- git clone https://github.com/DiamonDinoia/simdref.git ~/src/simdref
114
- mkdir -p ~/.agents/skills
115
- ln -sf ~/src/simdref/codex-skills/asm-analysis/skills/asm-analysis \
116
- ~/.agents/skills/asm-analysis
117
-
118
- # or scope the skill to a single repo:
119
- mkdir -p .agents/skills
120
- ln -sf ~/src/simdref/codex-skills/asm-analysis/skills/asm-analysis \
121
- .agents/skills/asm-analysis
122
- ```
123
-
124
- See
125
- [`codex-skills/asm-analysis/skills/asm-analysis/SKILL.md`](codex-skills/asm-analysis/skills/asm-analysis/SKILL.md)
126
- for the trigger list and pipeline stages.
64
+ The `asm-analysis` skill for Claude Code and OpenAI Codex lives in
65
+ [simd-labs/simdref-skill](https://github.com/simd-labs/simdref-skill).
66
+ Follow the install steps in that repo.
127
67
 
128
68
  ## Install
129
69
 
@@ -134,15 +74,6 @@ isa doctor # confirm everything is wired up
134
74
  isa # open the TUI
135
75
  ```
136
76
 
137
- For the bleeding-edge version with the `simdref profile` subcommand
138
- (runtime-profile → asm-annotation pipeline, Stage 2b of the skill),
139
- install from `main`:
140
-
141
- ```bash
142
- pipx install git+https://github.com/DiamonDinoia/simdref.git@main
143
- # or editable: pip install -e git+https://github.com/DiamonDinoia/simdref.git@main#egg=simdref
144
- ```
145
-
146
77
  The package installs two equivalent executables, **`isa`** (short) and
147
78
  **`simdref`** (explicit). The rest of this README uses `isa`.
148
79
 
@@ -174,15 +105,15 @@ isa # open the interactive TUI
174
105
 
175
106
  **Web app** — a self-contained static SPA with filters and performance
176
107
  tables, published to GitHub Pages at
177
- [diamondinoia.github.io/simdref](https://diamondinoia.github.io/simdref/).
178
- Export your own copy:
108
+ [simdref.diamondinoia.com](https://simdref.diamondinoia.com/) and
109
+ built from the `simdref-web` repo. This repo exports the
110
+ JSON data it consumes:
179
111
 
180
112
  ```bash
181
- isa web --web-dir ./web
182
- isa serve --web-dir ./web # gzip-aware local server
113
+ isa export --out-dir ./site-data
183
114
  ```
184
115
 
185
- The [live demo](https://diamondinoia.github.io/simdref/) hosts the same
116
+ The [live demo](https://simdref.diamondinoia.com/) hosts the same
186
117
  build — search across ~122k entries with ISA filters and per-uarch perf
187
118
  tables.
188
119
 
@@ -258,10 +189,6 @@ and `ld` still consume it.
258
189
  | `isa doctor` | Check the installation — pass/fail per component, non-zero exit on failure |
259
190
  | `isa update` | Download the pre-built release catalog (no `llvm-mca` required); `--from-release` for the GitHub Release artifact |
260
191
  | `isa annotate <file.s>` | Annotate a `.s` assembly file with per-instruction summaries and latency/CPI — writes `<file>.sa` |
261
- | `isa profile run` | Compile→record→disassemble→annotate→merge in one shot (perf or llvm-mca) |
262
- | `isa profile ingest` | Convert profiler output (perf / VTune / uProf / xctrace / llvm-mca / exegesis) to normalized samples |
263
- | `isa profile hotloops` | Detect natural loops in a disassembly and rank them by sample weight |
264
- | `isa profile merge` | Attach hotness data to the annotated instruction stream |
265
192
  | `isa llm query <q>` | Strict lookup → JSON/NDJSON/Markdown (see [docs/LLM.md](docs/LLM.md)) |
266
193
  | `isa llm batch` | Resolve many queries from stdin in one invocation (NDJSON out) |
267
194
  | `isa llm list` | Dump the `FilterSpec` or stream matching catalog entries |
@@ -272,8 +199,7 @@ and `ld` still consume it.
272
199
  | Command | Description |
273
200
  | -------------------------------- | ----------------------------------------------------------------------------------------------- |
274
201
  | `isa build` | Full local rebuild from upstream sources, including Intel SDM parsing (`llvm-mca` 18+ required) |
275
- | `isa web` | Export the static web app under `web/` |
276
- | `isa serve` | Serve the exported web app locally (gzip-aware) |
202
+ | `isa export` | Export site data (JSON only) — the release contract for the `simdref-web` repo |
277
203
  | `isa completion install [SHELL]` | Install shell completion into the user's profile |
278
204
  | `isa completion show [SHELL]` | Print the completion script for a shell |
279
205
 
@@ -308,7 +234,7 @@ mixed.
308
234
  ## Development
309
235
 
310
236
  ```bash
311
- git clone https://github.com/DiamonDinoia/simdref.git
237
+ git clone https://github.com/simd-labs/simdref.git
312
238
  cd simdref
313
239
  python3 -m venv .venv
314
240
  .venv/bin/pip install -e .
@@ -1,6 +1,6 @@
1
1
  # simdref
2
2
 
3
- [![CI](https://github.com/DiamonDinoia/simdref/actions/workflows/ci.yml/badge.svg)](https://github.com/DiamonDinoia/simdref/actions/workflows/ci.yml)
3
+ [![CI](https://github.com/simd-labs/simdref/actions/workflows/ci.yml/badge.svg)](https://github.com/simd-labs/simdref/actions/workflows/ci.yml)
4
4
  [![TestPyPI](https://img.shields.io/pypi/v/simdref?pypiBaseUrl=https%3A%2F%2Ftest.pypi.org&label=TestPyPI)](https://test.pypi.org/project/simdref/)
5
5
  [![Python](https://img.shields.io/pypi/pyversions/simdref?pypiBaseUrl=https%3A%2F%2Ftest.pypi.org)](https://pypi.org/project/simdref/)
6
6
 
@@ -8,90 +8,28 @@ A single searchable reference for SIMD intrinsics and instructions across
8
8
  **x86 (Intel + uops.info)**, **Arm (ACLE / AARCHMRS)**, and **RISC-V
9
9
  (RVV + unified-db)**. Runs as a CLI, a Textual TUI, an LSP server,
10
10
  on-demand manpages (`simdref man` — or run `simdref install-manpages`
11
- so plain `man vpaddd` works), a static web app, and a structured JSON
12
- interface for LLM skills.
11
+ so plain `man vpaddd` works), a JSON site-data export for
12
+ [simdref-web](https://github.com/simd-labs/simdref-web), and a
13
+ structured JSON interface for LLM skills.
13
14
 
14
- [Web App](https://diamondinoia.github.io/simdref/) ·
15
+ [Web App](https://simdref.diamondinoia.com/) ·
15
16
  [TestPyPI](https://test.pypi.org/project/simdref/) ·
16
- [GitHub](https://github.com/DiamonDinoia/simdref) ·
17
+ [GitHub](https://github.com/simd-labs/simdref) ·
17
18
  [Contributing](CONTRIBUTING.md)
18
19
 
19
20
  <!-- Screenshots are hosted on the `docs-assets` branch so the main
20
21
  branch stays lightweight to clone. -->
21
22
 
22
23
  <p align="center">
23
- <img alt="simdref TUI" src="https://raw.githubusercontent.com/DiamonDinoia/simdref/docs-assets/img/tui.svg" width="720">
24
+ <img alt="simdref TUI" src="https://raw.githubusercontent.com/simd-labs/simdref/docs-assets/img/tui.svg" width="720">
24
25
  <br><em>Interactive TUI with ISA filters, ranked results, and measured/modeled performance tables.</em>
25
26
  </p>
26
27
 
27
- ## Install the Claude Code skill
28
+ ## Install the Claude Code and Codex skill
28
29
 
29
- `skills/asm-analysis/` ships a Claude Code skill that drives the
30
- compile → objdump → `simdref annotate` → `simdref profile` → LLM-batch
31
- pipeline automatically. This repo publishes it as a Claude Code plugin,
32
- so the one-liner install is:
33
-
34
- ```
35
- /plugin marketplace add DiamonDinoia/simdref
36
- /plugin install asm-analysis@simdref
37
- ```
38
-
39
- Run those at the Claude Code prompt. The marketplace add fetches this
40
- repo; the install wires up the skill so Claude picks it up automatically
41
- on performance-oriented prompts like *"why is this loop slow"*,
42
- *"vectorise this"*, *"look at the asm"*.
43
-
44
- ### Manual install (no marketplace)
45
-
46
- If you prefer a hand-managed copy:
47
-
48
- ```bash
49
- # symlink from a checkout — always current with main:
50
- git clone https://github.com/DiamonDinoia/simdref.git ~/src/simdref
51
- mkdir -p ~/.claude/skills
52
- ln -sf ~/src/simdref/skills/asm-analysis ~/.claude/skills/asm-analysis
53
-
54
- # or pull a one-off snapshot:
55
- mkdir -p ~/.claude/skills/asm-analysis && \
56
- curl -fsSL https://raw.githubusercontent.com/DiamonDinoia/simdref/main/skills/asm-analysis/SKILL.md \
57
- -o ~/.claude/skills/asm-analysis/SKILL.md
58
- ```
59
-
60
- See [`skills/asm-analysis/SKILL.md`](skills/asm-analysis/SKILL.md) for
61
- the full trigger list and pipeline stages.
62
-
63
- ## Install the Codex skill
64
-
65
- This repo also ships the same pipeline as an OpenAI Codex plugin, so
66
- the one-liner install from a Codex CLI prompt is:
67
-
68
- ```
69
- codex plugin marketplace add DiamonDinoia/simdref
70
- /plugins
71
- ```
72
-
73
- Pick `asm-analysis` in the browser and enable it. Codex picks up the
74
- skill automatically on performance-oriented prompts (*"why is this
75
- loop slow"*, *"vectorise this"*, *"look at the asm"*).
76
-
77
- ### Manual install (no marketplace)
78
-
79
- ```bash
80
- # user-scoped symlink — applies to every repo, always current with main:
81
- git clone https://github.com/DiamonDinoia/simdref.git ~/src/simdref
82
- mkdir -p ~/.agents/skills
83
- ln -sf ~/src/simdref/codex-skills/asm-analysis/skills/asm-analysis \
84
- ~/.agents/skills/asm-analysis
85
-
86
- # or scope the skill to a single repo:
87
- mkdir -p .agents/skills
88
- ln -sf ~/src/simdref/codex-skills/asm-analysis/skills/asm-analysis \
89
- .agents/skills/asm-analysis
90
- ```
91
-
92
- See
93
- [`codex-skills/asm-analysis/skills/asm-analysis/SKILL.md`](codex-skills/asm-analysis/skills/asm-analysis/SKILL.md)
94
- for the trigger list and pipeline stages.
30
+ The `asm-analysis` skill for Claude Code and OpenAI Codex lives in
31
+ [simd-labs/simdref-skill](https://github.com/simd-labs/simdref-skill).
32
+ Follow the install steps in that repo.
95
33
 
96
34
  ## Install
97
35
 
@@ -102,15 +40,6 @@ isa doctor # confirm everything is wired up
102
40
  isa # open the TUI
103
41
  ```
104
42
 
105
- For the bleeding-edge version with the `simdref profile` subcommand
106
- (runtime-profile → asm-annotation pipeline, Stage 2b of the skill),
107
- install from `main`:
108
-
109
- ```bash
110
- pipx install git+https://github.com/DiamonDinoia/simdref.git@main
111
- # or editable: pip install -e git+https://github.com/DiamonDinoia/simdref.git@main#egg=simdref
112
- ```
113
-
114
43
  The package installs two equivalent executables, **`isa`** (short) and
115
44
  **`simdref`** (explicit). The rest of this README uses `isa`.
116
45
 
@@ -142,15 +71,15 @@ isa # open the interactive TUI
142
71
 
143
72
  **Web app** — a self-contained static SPA with filters and performance
144
73
  tables, published to GitHub Pages at
145
- [diamondinoia.github.io/simdref](https://diamondinoia.github.io/simdref/).
146
- Export your own copy:
74
+ [simdref.diamondinoia.com](https://simdref.diamondinoia.com/) and
75
+ built from the `simdref-web` repo. This repo exports the
76
+ JSON data it consumes:
147
77
 
148
78
  ```bash
149
- isa web --web-dir ./web
150
- isa serve --web-dir ./web # gzip-aware local server
79
+ isa export --out-dir ./site-data
151
80
  ```
152
81
 
153
- The [live demo](https://diamondinoia.github.io/simdref/) hosts the same
82
+ The [live demo](https://simdref.diamondinoia.com/) hosts the same
154
83
  build — search across ~122k entries with ISA filters and per-uarch perf
155
84
  tables.
156
85
 
@@ -226,10 +155,6 @@ and `ld` still consume it.
226
155
  | `isa doctor` | Check the installation — pass/fail per component, non-zero exit on failure |
227
156
  | `isa update` | Download the pre-built release catalog (no `llvm-mca` required); `--from-release` for the GitHub Release artifact |
228
157
  | `isa annotate <file.s>` | Annotate a `.s` assembly file with per-instruction summaries and latency/CPI — writes `<file>.sa` |
229
- | `isa profile run` | Compile→record→disassemble→annotate→merge in one shot (perf or llvm-mca) |
230
- | `isa profile ingest` | Convert profiler output (perf / VTune / uProf / xctrace / llvm-mca / exegesis) to normalized samples |
231
- | `isa profile hotloops` | Detect natural loops in a disassembly and rank them by sample weight |
232
- | `isa profile merge` | Attach hotness data to the annotated instruction stream |
233
158
  | `isa llm query <q>` | Strict lookup → JSON/NDJSON/Markdown (see [docs/LLM.md](docs/LLM.md)) |
234
159
  | `isa llm batch` | Resolve many queries from stdin in one invocation (NDJSON out) |
235
160
  | `isa llm list` | Dump the `FilterSpec` or stream matching catalog entries |
@@ -240,8 +165,7 @@ and `ld` still consume it.
240
165
  | Command | Description |
241
166
  | -------------------------------- | ----------------------------------------------------------------------------------------------- |
242
167
  | `isa build` | Full local rebuild from upstream sources, including Intel SDM parsing (`llvm-mca` 18+ required) |
243
- | `isa web` | Export the static web app under `web/` |
244
- | `isa serve` | Serve the exported web app locally (gzip-aware) |
168
+ | `isa export` | Export site data (JSON only) — the release contract for the `simdref-web` repo |
245
169
  | `isa completion install [SHELL]` | Install shell completion into the user's profile |
246
170
  | `isa completion show [SHELL]` | Print the completion script for a shell |
247
171
 
@@ -276,7 +200,7 @@ mixed.
276
200
  ## Development
277
201
 
278
202
  ```bash
279
- git clone https://github.com/DiamonDinoia/simdref.git
203
+ git clone https://github.com/simd-labs/simdref.git
280
204
  cd simdref
281
205
  python3 -m venv .venv
282
206
  .venv/bin/pip install -e .
@@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "simdref"
7
- version = "0.0.5"
8
- description = "Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI, LSP, and static web export."
7
+ version = "0.0.7"
8
+ description = "Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI, and LSP."
9
9
  readme = "README.md"
10
- requires-python = ">=3.11"
10
+ requires-python = ">=3.10"
11
11
  license = {text = "GPL-3.0-or-later"}
12
12
  authors = [
13
13
  {name = "Marco"}
@@ -19,23 +19,30 @@ classifiers = [
19
19
  "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
20
20
  "Operating System :: OS Independent",
21
21
  "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.10",
22
23
  "Programming Language :: Python :: 3.11",
23
24
  "Programming Language :: Python :: 3.12",
24
25
  "Programming Language :: Python :: 3.13",
26
+ "Programming Language :: Python :: 3.14",
25
27
  "Topic :: Software Development :: Documentation",
26
28
  "Topic :: Software Development :: Libraries :: Python Modules",
27
29
  ]
30
+ # `requires-python` tracks the non-EOL CPython range; 3.10 goes EOL 2026-10-31.
31
+ # Lower dependency bound is the version CI resolves and tests; anything older is
32
+ # an untested compatibility claim. Upper bound is the next major (next minor for
33
+ # 0.x, where that is the compatibility unit). msgpack floors above its own
34
+ # advisory: 1.2.0 and earlier carry GHSA-6v7p-g79w-8964.
28
35
  dependencies = [
29
- "click>=8.1,<10",
36
+ "click>=8.5,<9",
30
37
  "httpx>=0.28,<1",
31
- "msgpack>=1.0,<2",
32
- "pdfplumber>=0.11,<1",
33
- "PyMuPDF>=1.24,<2",
34
- "PyYAML>=6,<7",
35
- "rapidfuzz>=3.9,<4",
36
- "rich>=13,<15",
37
- "textual>=1.0,<2",
38
- "typer>=0.19,<1",
38
+ "msgpack>=1.2.1,<2",
39
+ "pdfplumber>=0.11.10,<1",
40
+ "PyMuPDF>=1.28,<2",
41
+ "PyYAML>=6.0.3,<7",
42
+ "rapidfuzz>=3.14,<4",
43
+ "rich>=15,<16",
44
+ "textual>=8.2,<9",
45
+ "typer>=0.27,<1",
39
46
  ]
40
47
 
41
48
  [project.scripts]
@@ -45,14 +52,10 @@ simdref-lsp = "simdref.lsp:main"
45
52
 
46
53
  [tool.setuptools]
47
54
  package-dir = {"" = "src"}
48
- include-package-data = true
49
55
 
50
56
  [tool.setuptools.packages.find]
51
57
  where = ["src"]
52
58
 
53
- [tool.setuptools.package-data]
54
- simdref = ["templates/*"]
55
-
56
59
  [tool.ruff]
57
60
  line-length = 100
58
- target-version = "py311"
61
+ target-version = "py310"
@@ -556,6 +556,17 @@ def arch_perf(record: InstructionRecord, arch: str) -> tuple[float | None, float
556
556
  return lat, cpi, kind
557
557
 
558
558
 
559
+ def arch_perf_tag(arch: str, lat: float | None, cpi: float | None, kind: str) -> str:
560
+ """Provenance label for a perf row pinned to *arch*.
561
+
562
+ ``[missing:<arch>]`` when the catalog holds no latency and no CPI for
563
+ *arch*, so an empty row never reads as "measured to cost nothing".
564
+ """
565
+ if lat is None and cpi is None:
566
+ return f"[missing:{arch}]"
567
+ return f"[{arch}, {kind}]"
568
+
569
+
559
570
  def _ports_for(details: dict[str, Any]) -> str | None:
560
571
  measurement = details.get("measurement") or {}
561
572
  ports = measurement.get("ports") or measurement.get("TP_ports")
@@ -629,10 +640,7 @@ def format_annotation(
629
640
  if performance:
630
641
  if arch is not None:
631
642
  lat, cpi, kind = arch_perf(record, arch)
632
- if lat is None and cpi is None:
633
- tag = f"[missing:{arch}]"
634
- else:
635
- tag = f"[{arch}, {kind}]"
643
+ tag = arch_perf_tag(arch, lat, cpi, kind)
636
644
  else:
637
645
  summary = aggregate_perf(record, mode=agg, include_modeled=include_modeled)
638
646
  lat, cpi = summary.latency, summary.cpi