feat(phase1): implement all Phase 1 polymer architectures#90
Merged
Peariforme merged 3 commits intomasterfrom Mar 4, 2026
Merged
feat(phase1): implement all Phase 1 polymer architectures#90Peariforme merged 3 commits intomasterfrom
Peariforme merged 3 commits intomasterfrom
Conversation
…4.2) ## Nouveaux builders ### LinearBuilder (linear.rs) - US-1.1.1: `random_copolymer(&[f64])` — copolymère statistique avec seed - US-1.1.2: `alternating_copolymer()` — séquence A-B-A-B cyclique - US-1.1.3: `block_copolymer(&[usize])` — diblock/triblock/multiblock - US-1.1.4: `gradient_copolymer(&GradientProfile)` — gradient linéaire ou sigmoïde - US-1.2.5: `cyclic_homopolymer()` — ring closure premier↔dernier atome - US-1.3.3: `with_end_groups()` — préfixe/suffixe BigSMILES inclus dans SMILES + Mn ### BranchedBuilder (branched.rs) - US-1.2.1: `comb_polymer(branch_every)` — peigne régulier backbone+branch - US-1.2.2: `graft_copolymer(graft_fraction, seed)` — greffage aléatoire reproductible - US-1.2.3: `star_polymer(arms)` — étoile 3–12 bras - US-1.2.4: `dendrimer(generation, branching_factor)` — dendrimère G1–G6 ### EnsembleBuilder (ensemble.rs) - `random_copolymer_ensemble`, `alternating_copolymer_ensemble`, `block_copolymer_ensemble`, `gradient_copolymer_ensemble` ## PolymerChain enrichi (US-1.3.1, US-1.3.2) - Nouveau champ `composition: Vec<MonomerUnit>` (fraction molaire par unité) - Nouveau champ `architecture: Architecture` (Linear/Star/Comb/Dendrimer/Cyclic/Gradient/Graft) - API builder fluent: `.with_composition()` et `.with_architecture()` ## CLI (US-1.4.1, US-1.4.2) - `polysim analyze` : `--arch random|alternating|block|gradient` - `polysim generate` : idem + `--gradient-profile linear|sigmoid`, `--gradient-f-start`, `--gradient-f-end` ## Tests: 35 nouveaux tests (tous verts) - `tests/copolymer.rs` : 17 tests random/alternating/block + ensembles - `tests/branched.rs` : 9 tests comb/graft/star/dendrimer - `tests/gradient_cyclic.rs` : 9 tests gradient/cyclic/end-groups Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Vérifie que make_cyclic_smiles ne corrompt pas les atomes bi-lettres comme Cl lors de l'insertion du ring closure. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Polymer Builder Benchmarks
Details
| Benchmark suite | Current: 9fd7da6 | Previous: 8c70235 | Ratio |
|---|---|---|---|
homopolymer/polyethylene/10 |
1664 ns/iter (± 25) |
1633 ns/iter (± 52) |
1.02 |
homopolymer/polyethylene/100 |
12314 ns/iter (± 228) |
12032 ns/iter (± 61) |
1.02 |
homopolymer/polyethylene/1000 |
110712 ns/iter (± 460) |
108414 ns/iter (± 509) |
1.02 |
homopolymer/polyethylene/10000 |
1091913 ns/iter (± 25560) |
1086121 ns/iter (± 88852) |
1.01 |
homopolymer/polystyrene/10 |
8534 ns/iter (± 154) |
8556 ns/iter (± 187) |
1.00 |
homopolymer/polystyrene/100 |
86462 ns/iter (± 343) |
88491 ns/iter (± 396) |
0.98 |
homopolymer/polystyrene/1000 |
847806 ns/iter (± 10543) |
867454 ns/iter (± 3955) |
0.98 |
molecular_weight/average_mass/polyethylene/10 |
1283 ns/iter (± 4) |
1339 ns/iter (± 41) |
0.96 |
molecular_weight/average_mass/polyethylene/100 |
9674 ns/iter (± 46) |
10176 ns/iter (± 67) |
0.95 |
molecular_weight/average_mass/polyethylene/1000 |
88714 ns/iter (± 3158) |
88282 ns/iter (± 2771) |
1.00 |
molecular_weight/average_mass/polystyrene/10 |
7580 ns/iter (± 285) |
7643 ns/iter (± 394) |
0.99 |
molecular_weight/average_mass/polystyrene/100 |
74696 ns/iter (± 407) |
74917 ns/iter (± 659) |
1.00 |
molecular_weight/monoisotopic_mass/polyethylene/10 |
1353 ns/iter (± 8) |
1377 ns/iter (± 17) |
0.98 |
molecular_weight/monoisotopic_mass/polyethylene/100 |
10103 ns/iter (± 244) |
10377 ns/iter (± 153) |
0.97 |
molecular_weight/monoisotopic_mass/polyethylene/1000 |
90793 ns/iter (± 711) |
87936 ns/iter (± 291) |
1.03 |
molecular_weight/by_target_mn/polyethylene/282 |
2941 ns/iter (± 18) |
2938 ns/iter (± 211) |
1.00 |
molecular_weight/by_target_mn/polyethylene/2825 |
13756 ns/iter (± 259) |
13699 ns/iter (± 28) |
1.00 |
molecular_weight/by_target_mn/polyethylene/28255 |
114147 ns/iter (± 422) |
112938 ns/iter (± 1712) |
1.01 |
This comment was automatically generated by workflow using github-action-benchmark.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Résumé
Implémentation complète de la Phase 1 : Polymer Architectures — 14 user stories, 177 tests verts.
Nouveaux builders
LinearBuilder (
linear.rs)random_copolymer(&[f64])— copolymère statistique avec seedalternating_copolymer()— séquence A-B-A-B-…block_copolymer(&[usize])— diblock / triblock / multiblockgradient_copolymer(&GradientProfile)— gradient linéaire ou sigmoïdecyclic_homopolymer()— ring closure premier ↔ dernier atomeBranchedBuilder (
branched.rs)comb_polymer(branch_every)— peigne régulier backbone + branchgraft_copolymer(fraction, seed)— greffage aléatoire reproductiblestar_polymer(arms)— étoile 3–12 brasdendrimer(generation, branching_factor)— dendrimère G1–G6EnsembleBuilder (
ensemble.rs)random_copolymer_ensemble,alternating_copolymer_ensemble,block_copolymer_ensemble,gradient_copolymer_ensemblePolymerChain enrichi
composition: Vec<MonomerUnit>— fraction molaire par unité de répétitionarchitecture: Architecture— Linear / Star / Comb / Dendrimer / Cyclic / Gradient / GraftCLI
polysim analyze --arch random|alternating|block|gradientpolysim generate+--gradient-profile linear|sigmoid,--gradient-f-start,--gradient-f-endCloses
Closes #9
Closes #10
Closes #11
Closes #12
Closes #13
Closes #14
Closes #15
Closes #16
Closes #17
Closes #18
Closes #19
Closes #20
Closes #21
Closes #22
Plan de test
cargo test: 177 tests, 0 écheccargo clippy: aucun warningcargo fmt --check: formatage conformemake_cyclic_smilesavec atomes bi-lettres (Cl)🤖 Generated with Claude Code