renkin 0.1.0 → 0.1.1

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 (4) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +125 -227
  3. package/package.json +3 -10
  4. package/renkin_bg.wasm +0 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 kent-tokyo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,28 +1,67 @@
1
- # RENKIN — Retrosynthesis Engine
1
+ # RENKIN — **R**etrosynthetic **E**xploration **N**etwork for **K**nowledge-**I**nformed **N**avigation
2
2
 
3
3
  > **Computer-Aided Synthesis Planning (CASP) · Pure Rust · WebAssembly · Python**
4
4
  > Named after 錬金 (れんきん, *renkin*) — Japanese for alchemy: just as alchemists transformed base metals into gold, RENKIN transforms target molecules back into cheap starting materials.
5
5
 
6
+ [![CI](https://github.com/kent-tokyo/renkin/actions/workflows/ci.yml/badge.svg)](https://github.com/kent-tokyo/renkin/actions/workflows/ci.yml)
6
7
  [![Crates.io](https://img.shields.io/crates/v/renkin)](https://crates.io/crates/renkin)
8
+ [![PyPI](https://img.shields.io/pypi/v/renkin)](https://pypi.org/project/renkin/)
9
+ [![npm](https://img.shields.io/npm/v/renkin)](https://www.npmjs.com/package/renkin)
7
10
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
8
- [![WASM](https://img.shields.io/badge/WASM-ready-brightgreen)](https://github.com/kent-tokyo/renkin/tree/master/demo)
11
+ [![WASM](https://img.shields.io/badge/WASM-ready-brightgreen)](https://kent-tokyo.github.io/renkin/playground/)
9
12
  [![Pure Rust](https://img.shields.io/badge/Pure-Rust-orange?logo=rust)](https://www.rust-lang.org)
10
13
 
11
- [日本語版 README](./README_ja.md)
14
+ [日本語版 README](./README_ja.md) · [**Documentation**](https://kent-tokyo.github.io/renkin/) · [**Live Demo →**](https://kent-tokyo.github.io/renkin/playground/)
12
15
 
13
16
  ---
14
17
 
15
18
  ## What is RENKIN?
16
19
 
17
- RENKIN is an open-source **retrosynthesis engine** for **computer-aided synthesis planning (CASP)** that automatically discovers optimal chemical reaction routes from a target molecule back to cheap, commercially available starting materials — a core problem in **drug discovery** and **medicinal chemistry**.
20
+ RENKIN is an open-source **retrosynthesis engine** for **computer-aided synthesis planning (CASP)** that automatically discovers optimal chemical reaction routes from a target molecule back to cheap, commercially available starting materials.
18
21
 
19
- Built entirely in Rust with the [`chematic`](https://docs.rs/chematic/) cheminformatics crate, RENKIN solves the fundamental speed and dependency problems of existing Python-based CASP tools (AiZynthFinder, ASKCOS, Retro\*, etc.). It ships as:
22
+ Built entirely in Rust with the [`chematic`](https://docs.rs/chematic/) cheminformatics crate. Zero C/C++ dependencies.
20
23
 
21
- - **CLI**single binary, `cargo build --release`
22
- - **Python package** — `import renkin` via PyO3 + maturin
23
- - **WASM module** — 493 KB bundle, runs in the browser with no server
24
+ **[→ Try the Live Playground](https://kent-tokyo.github.io/renkin/playground/)** — runs entirely in WebAssembly, no installation needed.
25
+ **[→ Full Documentation](https://kent-tokyo.github.io/renkin/)** — API reference, examples, benchmark.
24
26
 
25
- All from a single pure-Rust codebase with zero C/C++ dependencies.
27
+ ---
28
+
29
+ ## Installation
30
+
31
+ ```bash
32
+ pip install renkin # Python
33
+ cargo add renkin # Rust
34
+ npm install renkin # JavaScript / Node.js
35
+ ```
36
+
37
+ ---
38
+
39
+ ## Quick Start
40
+
41
+ ```python
42
+ import renkin
43
+
44
+ result = renkin.find_routes(
45
+ "CC(=O)Oc1ccccc1C(=O)O", # Aspirin
46
+ depth=5,
47
+ max_routes=3,
48
+ )
49
+
50
+ for route in result["routes"]:
51
+ for step in route["steps"]:
52
+ print(f" {step['target']} → {' + '.join(step['precursors'])} [{step['rule']}]")
53
+ ```
54
+
55
+ ```javascript
56
+ import init, { find_routes } from './pkg/renkin.js';
57
+ await init();
58
+ const result = JSON.parse(find_routes("CC(=O)Oc1ccccc1C(=O)O", 5, 3, 0));
59
+ ```
60
+
61
+ ```bash
62
+ ./target/release/renkin --target "CC(=O)Oc1ccccc1C(=O)O" --depth 5 \
63
+ --templates data/templates_extracted.smi
64
+ ```
26
65
 
27
66
  ---
28
67
 
@@ -30,16 +69,48 @@ All from a single pure-Rust codebase with zero C/C++ dependencies.
30
69
 
31
70
  | Feature | Detail |
32
71
  |---|---|
33
- | **Pure Rust** | Zero C/C++ dependencies. Cross-platform with `cargo build` alone |
34
- | **A\* / AND-OR Tree Search** | Retro\*-equivalent algorithm proven more efficient than MCTS for retrosynthesis |
35
- | **SA Score heuristic** | `chematic::chem::sa_score` guides search toward synthetically accessible precursors |
36
- | **Beam search** | `--beam-width N` limits heap size for memory-bounded exploration |
37
- | **Graph-based Ar–Ar cleavage** | Bridge-bond detection via DFS correctly handles biaryl (Suzuki) disconnections |
38
- | **Parallel rule application** | `rayon` parallelises SMIRKS rule evaluation; sequential fallback on WASM |
39
- | **Python bindings** | `maturin` extension `import renkin; renkin.find_routes(...)` |
40
- | **WASM-ready** | 493 KB bundle via `wasm-pack`; browser demo with 2D structure rendering |
41
- | **~400 building blocks** | Curated commercial starting materials covering esters, amines, halides, heterocycles, amino acids, sulfonyl chlorides, boronic acids and more |
42
- | **Benchmark CLI** | `renkin-bench --input targets.smi` produces a JSON success/timing report |
72
+ | **Pure Rust** | Zero C/C++ dependencies — cross-platform with `cargo build` alone |
73
+ | **A\* / AND-OR Tree Search** | Retro\*-equivalent algorithm, proven more efficient than MCTS |
74
+ | **SA Score heuristic** | Admissible h = Σ(1 + 0.5·(sa−1)/9) guides toward accessible precursors |
75
+ | **Beam search** | `--beam-width N` for memory-bounded exploration |
76
+ | **314 reaction rules** | 31 hand-crafted + 283 auto-extracted from USPTO-50k via rdchiral |
77
+ | **Auto template extraction** | `scripts/extract_templates.py` rdchiral + chematic-compatible simplification |
78
+ | **Graph-based biaryl cleavage** | Bridge-bond DFS for correct Suzuki disconnection |
79
+ | **Parallel rule application** | `rayon` on non-WASM; sequential fallback on wasm32 |
80
+ | **Python** | `pip install renkin` pre-built wheels for Linux/macOS/Windows |
81
+ | **WASM** | ~500 KB bundle runs in the browser at near-native speed |
82
+ | **463 building blocks** | Aryl halides, boronic acids, heterocycles, amines, acids, amino acids |
83
+
84
+ ---
85
+
86
+ ## Benchmark
87
+
88
+ USPTO-50k test set (4,907 molecules, full evaluation):
89
+
90
+ | Config | Solved | Rate | BBs | Rules | depth |
91
+ |---|---|---|---|---|---|
92
+ | v0.1.0 initial | 366/4907 | 7.5% | 463 | 31 | 3 |
93
+ | + auto templates (top-300) | 1363/4907 | 27.8% | 463 | 222 | 3 |
94
+ | + depth=5, top-500 templates | **2315/4907** | **47.2%** | 463 | 314 | 5 |
95
+
96
+ Surpasses ASKCOS (41%) and reaches AiZynthFinder lower bound (45%) with only 463 curated BBs.
97
+ Competitor reference: AiZynthFinder 45–53% (depth≤5, 6M BBs, 50k templates).
98
+ [Full benchmark details →](https://kent-tokyo.github.io/renkin/benchmark/)
99
+
100
+ ---
101
+
102
+ ## Competitive Landscape
103
+
104
+ | Tool | Language | License | WASM | Zero-dep | Algorithm | Template source | Stock |
105
+ |---|---|---|---|---|---|---|---|
106
+ | **ASKCOS** | Python | CC BY-NC | No | No (Docker, 64 GB) | MCTS + A\* | USPTO (ML) | ZINC |
107
+ | **AiZynthFinder** | Python | MIT | No | No (conda + model) | MCTS | USPTO (ML, ~50k) | eMolecules (~6M) |
108
+ | **SYNTHIA** | Closed | Proprietary | No | No | SMARTS + AND/OR | Manual curated | Sigma-Aldrich |
109
+ | **IBM RXN** | Closed | Cloud SaaS | No | No | Transformer | USPTO | — |
110
+ | **Retro\*** | Python | MIT | No | No (unmaintained) | A\* + AND/OR | USPTO (ML) | eMolecules |
111
+ | **★ RENKIN** | **Rust** | **MIT** | **Yes** | **Yes** | **A\* + AND/OR** | Hand-curated + rdchiral (314) | 463+ |
112
+
113
+ **RENKIN's goal**: match or exceed neural-network-based tools using only curated rules and auto-extracted SMIRKS templates — no GPU, no training data, no black boxes. At 47.2% USPTO-50k (surpassing ASKCOS and reaching AiZynthFinder's lower bound), RENKIN demonstrates that a transparent, rule-based engine in pure Rust can compete with deep-learning approaches. And it runs anywhere: browser, CLI, Python — single `cargo build`.
43
114
 
44
115
  ---
45
116
 
@@ -51,9 +122,9 @@ Target SMILES
51
122
 
52
123
  ┌─────────────────────────┐
53
124
  │ chem_env.rs │ ← chematic wrapper
54
- │ - SMILES parse │ SMARTS VF2 building-block check
55
- │ - SMIRKS retro rules │ fragment sanitization
56
- │ - Building block check │ HashMap O(1) pre-filter
125
+ │ - SMILES parse │ canonical-SMILES HashSet BB lookup (O(1))
126
+ │ - 314 retro rules │ fragment sanitization + ring-leak filter
127
+ │ - Building block check │ VF2 fallback for small sets
57
128
  └────────────┬────────────┘
58
129
  │ par_iter (rayon / sequential on WASM)
59
130
 
@@ -77,193 +148,30 @@ Target SMILES
77
148
 
78
149
  ---
79
150
 
80
- ## Technology Stack
81
-
82
- - **Language**: Rust (Edition 2024)
83
- - **Cheminformatics**: [`chematic`](https://crates.io/crates/chematic) v0.4.9+
84
- - `chematic-smiles` — SMILES parsing & canonical SMILES
85
- - `chematic-smarts` — VF2 substructure matching (building block identity)
86
- - `chematic-rxn` — SMIRKS reaction application (`run_reactants`)
87
- - `chematic-chem` — SA Score, molecular weight, aromaticity descriptors
88
- - **Search**: A\* + AND/OR Tree (Retro\* equivalent)
89
- - **Parallelism**: [`rayon`](https://crates.io/crates/rayon) — parallel SMIRKS rule application
90
- - **Python**: [`PyO3`](https://pyo3.rs) + [`maturin`](https://www.maturin.rs)
91
- - **WASM**: [`wasm-bindgen`](https://rustwasm.github.io/wasm-bindgen/) + [`wasm-pack`](https://rustwasm.github.io/wasm-pack/)
92
-
93
- ---
94
-
95
- ## Installation
96
-
97
- ### As a library
98
-
99
- ```toml
100
- # Cargo.toml
101
- [dependencies]
102
- renkin = "0.1"
103
- ```
104
-
105
- ### CLI (from source)
106
-
107
- ```bash
108
- git clone https://github.com/kent-tokyo/renkin
109
- cd renkin
110
- cargo build --release
111
- ```
112
-
113
- ### Python
114
-
115
- ```bash
116
- pip install maturin
117
- git clone https://github.com/kent-tokyo/renkin && cd renkin
118
- python -m venv .venv && source .venv/bin/activate
119
- maturin develop --features python
120
- ```
121
-
122
- ---
123
-
124
- ## Getting Started
125
-
126
- ### CLI
127
-
128
- ```bash
129
- # Retrosynthesis (Aspirin, depth 3)
130
- ./target/release/renkin --target "CC(=O)Oc1ccccc1C(=O)O" --depth 3
131
-
132
- # With beam search (top-50 nodes)
133
- ./target/release/renkin --target "CC(=O)Oc1ccccc1C(=O)O" --depth 5 --beam-width 50
134
- ```
135
-
136
- ```
137
- --target / -t Target molecule SMILES
138
- --depth / -d Max retrosynthesis depth (default: 5)
139
- --max-routes / -n Max routes to return (default: 5)
140
- --beam-width / -w Beam search width, 0 = unlimited A* (default: 0)
141
- --building-blocks Path to .smi file of commercial starting materials
142
- ```
143
-
144
- ### Python
145
-
146
- ```python
147
- import renkin, json
148
-
149
- routes = json.loads(renkin.find_routes(
150
- "CC(=O)Oc1ccccc1C(=O)O", # Aspirin
151
- depth=3,
152
- max_routes=5,
153
- ))
154
- print(routes["routes_found"]) # number of routes found
155
- for r in routes["routes"]:
156
- print(r["depth"], [s["rule"] for s in r["steps"]])
157
- ```
158
-
159
- ### WASM
160
-
161
- ```bash
162
- wasm-pack build --target web --no-default-features
163
- # Output: pkg/ (npm-ready package)
164
- # Browser demo: python3 -m http.server 8080 → http://localhost:8080/demo/
165
- ```
166
-
167
- ```javascript
168
- import init, { find_routes } from './pkg/renkin.js';
169
- await init();
170
-
171
- const result = JSON.parse(find_routes(
172
- "CC(=O)Oc1ccccc1C(=O)O", // target SMILES
173
- 3, // depth
174
- 5, // max_routes
175
- 0, // beam_width (0 = unlimited A*)
176
- ));
177
- console.log(result.routes_found);
178
- ```
179
-
180
- ### Benchmark
181
-
182
- ```bash
183
- # Input: one SMILES per line, optional name after whitespace
184
- ./scripts/run_benchmark.sh --input data/benchmark_targets.smi --depth 5
185
- ```
186
-
187
- ```json
188
- {
189
- "total": 42, "solved": 37, "success_rate": 0.88,
190
- "avg_depth": 1.05, "avg_time_ms": 2.5,
191
- "results": [...]
192
- }
193
- ```
194
-
195
- ---
196
-
197
- ## CLI Output Example
198
-
199
- ```json
200
- {
201
- "target": "CC(=O)Oc1ccccc1C(=O)O",
202
- "routes_found": 2,
203
- "routes": [
204
- {
205
- "steps": [
206
- {
207
- "rule": "ester_cleavage",
208
- "target": "CC(=O)Oc1ccccc1C(=O)O",
209
- "precursors": ["CC(=O)O", "Oc1ccccc1C(=O)O"]
210
- }
211
- ],
212
- "depth": 1
213
- }
214
- ]
215
- }
216
- ```
217
-
218
- **depth: 0** means the target itself is a commercially available starting material (buy directly).
219
-
220
- ---
221
-
222
- ## Retro-Rules (14 total)
223
-
224
- | Rule | Reaction type | Strategy |
225
- |---|---|---|
226
- | `ester_cleavage` | Ester → acid + alcohol | SMIRKS |
227
- | `amide_cleavage` | Amide → acid + amine | SMIRKS |
228
- | `friedel_crafts_acylation_retro` | Ar-C(=O)R → Ar-H + acyl chloride | SMIRKS |
229
- | `aryl_carboxylation_retro` | Ar-COOH → Ar-H + CO₂ surrogate | SMIRKS |
230
- | `aryl_amine_retro` | Ar-N → Ar-H + amine | SMIRKS |
231
- | `buchwald_hartwig_retro` | Ar-N → Ar-Br + amine | SMIRKS |
232
- | `aryl_ether_retro` | Ar-O → Ar-OH + fragment | SMIRKS |
233
- | `suzuki_retro` | Ar-Ar → Ar-Br + Ar-H | Graph (bridge-bond DFS) |
234
- | `cc_single_cleavage` | C–C → two fragments | SMIRKS |
235
- | `wittig_retro` | C=C → C=O + C=O | SMIRKS |
236
- | `reductive_amination_retro` | C–N → C=O + amine | SMIRKS |
237
- | `cn_aliphatic_cleavage` | C–N → two fragments | SMIRKS |
238
- | `co_aliphatic_cleavage` | C–O → two fragments | SMIRKS |
239
- | `alcohol_oxidation_retro` | C–OH → C=O | SMIRKS |
240
-
241
- `suzuki_retro` uses a graph-based bridge-bond algorithm instead of SMIRKS to correctly handle symmetric biaryls (biphenyl, 4-fluorobiphenyl, etc.) without the BFS leakage artifacts that affect SMIRKS-based approaches.
242
-
243
- ---
244
-
245
151
  ## Project Structure
246
152
 
247
153
  ```
248
154
  renkin/
249
155
  ├── Cargo.toml
250
156
  ├── src/
251
- │ ├── lib.rs # public library (DEFAULT_BUILDING_BLOCKS, re-exports)
252
- │ ├── main.rs # CLI binary
253
- │ ├── bin/
254
- │ └── benchmark.rs # renkin-bench binary
255
- │ ├── chem_env.rs # chematic wrapper parse, retro rules, BB check
256
- │ ├── score.rs # SA Score heuristic + step cost
257
- │ ├── search.rs # A* / AND-OR tree engine + beam pruning
258
- ├── python.rs # PyO3 bindings (--features python)
259
- │ └── wasm.rs # wasm-bindgen bindings (cfg = wasm32)
157
+ │ ├── lib.rs # public library
158
+ │ ├── main.rs # CLI binary (--templates flag)
159
+ │ ├── bin/benchmark.rs # renkin-bench binary (--templates flag)
160
+ ├── chem_env.rs # 314 retro rules, BB check, template loader
161
+ │ ├── score.rs # SA Score heuristic + step cost
162
+ │ ├── search.rs # A* / AND-OR tree engine + beam pruning
163
+ │ ├── python.rs # PyO3 bindings (--features python)
164
+ └── wasm.rs # wasm-bindgen bindings (cfg = wasm32)
260
165
  ├── data/
261
- │ ├── building_blocks.smi # Commercial starting materials (~400 entries)
262
- └── benchmark_targets.smi # 42-molecule benchmark set
263
- ├── demo/
264
- │ └── index.html # Browser WASM demo with 2D structure rendering
265
- └── scripts/
266
- └── run_benchmark.sh # Benchmark runner with human-readable summary
166
+ │ ├── building_blocks.smi # 463 curated commercial starting materials
167
+ ├── templates_extracted.smi # 283 auto-extracted SMIRKS templates (top-500)
168
+ ├── benchmark_targets.smi # internal benchmark set
169
+ │ └── bench_chunks/ # USPTO-50k per-chunk results
170
+ ├── scripts/
171
+ │ ├── extract_templates.py # rdchiral template extraction pipeline
172
+ │ └── run_benchmark_chunks.sh # resumable chunked benchmark runner
173
+ ├── docs/ # MkDocs source → kent-tokyo.github.io/renkin/
174
+ └── mkdocs.yml
267
175
  ```
268
176
 
269
177
  ---
@@ -272,31 +180,21 @@ renkin/
272
180
 
273
181
  - [x] **Phase 1** — SMIRKS retro-reaction rules + fragment sanitization
274
182
  - [x] **Phase 2** — A\* / AND-OR tree search, closed list, degenerate-route filter
275
- - [x] **Phase 3** — SA Score heuristic + beam search (`--beam-width`)
276
- - [x] **Phase 4** — Parallel rule application (`rayon`; sequential fallback on WASM)
277
- - [x] **Phase 5** — Python bindings (PyO3 + maturin)
278
- - [x] **Phase 6** — WASM build (493 KB, `pkg/` npm-ready)
279
- - [x] **Phase 7** — Benchmark CLI (`renkin-bench`)
280
- - [x] **Phase 8** — 21 unit tests, SMIRKS rules 514, building blocks ~30→~400
281
- - [x] **Phase 9** — Browser WASM demo (SmilesDrawer 2D rendering), benchmark target set
282
- - [x] **Phase 10** — Graph-based biaryl cleavage (suzuki_retro), O(1) BB HashMap index
283
- - [ ] **Phase 11** — Formal benchmark vs. AiZynthFinder / Retro\* on USPTO-50k
284
- - [ ] **Phase 12** — PyPI / npm publish
285
-
286
- ---
287
-
288
- ## Competitive Landscape
289
-
290
- | Tool | Language | Algorithm | WASM | Zero-dep build |
291
- |---|---|---|---|---|
292
- | **ASKCOS** | Python | MCTS / A\* | No | No (Docker, 64 GB RAM) |
293
- | **AiZynthFinder** | Python | MCTS primary | No | No (conda, model download) |
294
- | **IBM RXN** | Closed | Transformer | No | No (cloud only) |
295
- | **SYNTHIA** | Closed | SMARTS + AND/OR | No | No (proprietary) |
296
- | **Retro\*** | Python | A\* + AND/OR | No | No (unmaintained) |
297
- | **★ RENKIN** | **Rust** | **A\* + AND/OR** | **Yes** | **Yes (`cargo build`)** |
298
-
299
- All existing open CASP tools are Python-based. RENKIN fills the vacant niche: Rust-native, WASM-deployable, zero-dependency, A\* search.
183
+ - [x] **Phase 3** — SA Score heuristic + beam search
184
+ - [x] **Phase 4** — Parallel rule application (rayon; sequential fallback on WASM)
185
+ - [x] **Phase 5** — Python bindings (PyO3 + maturin) · `pip install renkin`
186
+ - [x] **Phase 6** — WASM build · `npm install renkin`
187
+ - [x] **Phase 7** — Benchmark CLI (`renkin-bench`) + initial USPTO-50k evaluation
188
+ - [x] **Phase 8** — Unit tests · rules → 31 · building blocks → 463
189
+ - [x] **Phase 9** — WASM browser playground + i18n (EN/JA/ZH)
190
+ - [x] **Phase 10** — Graph-based biaryl cleavage · O(1) canonical-SMILES BB index
191
+ - [x] **Phase 11** — Published to crates.io / PyPI / npm · GitHub Actions CI/CD
192
+ - [x] **Phase 12** — MkDocs documentation site · GitHub Pages playground
193
+ - [x] **Phase 13** — Formal USPTO-50k benchmark: **7.5%** (depth=3, 31 rules)
194
+ - [x] **Phase 14** — Auto template extraction (rdchiral): **27.8%** (depth=3, 222 rules)
195
+ - [x] **Phase 17** — chematic 0.4.12: Bug #13 (BFS leakage) + Bug #14 (canonical SMILES) fixed
196
+ - [ ] **Phase 15** — Stereochemistry support (CIP SMIRKS)
197
+ - [ ] **Phase 16** — Large-scale building block DB integration
300
198
 
301
199
  ---
302
200
 
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "renkin",
3
3
  "type": "module",
4
4
  "description": "Ultra-fast retrosynthesis engine for computer-aided synthesis planning (CASP) — pure Rust, WASM-ready, Python bindings via PyO3",
5
- "version": "0.1.0",
5
+ "version": "0.1.1",
6
6
  "license": "MIT",
7
7
  "repository": {
8
8
  "type": "git",
@@ -19,18 +19,11 @@
19
19
  "sideEffects": [
20
20
  "./snippets/*"
21
21
  ],
22
- "bugs": {
23
- "url": "https://github.com/kent-tokyo/renkin/issues"
24
- },
25
22
  "keywords": [
26
23
  "retrosynthesis",
27
24
  "cheminformatics",
28
25
  "chemistry",
29
26
  "wasm",
30
- "webassembly",
31
- "drug-discovery",
32
- "casp",
33
- "smiles",
34
- "synthesis-planning"
27
+ "drug-discovery"
35
28
  ]
36
- }
29
+ }
package/renkin_bg.wasm CHANGED
Binary file