Skip to content

feat(phase1): implement all Phase 1 polymer architectures#90

Merged
Peariforme merged 3 commits intomasterfrom
feat/copolymer
Mar 4, 2026
Merged

feat(phase1): implement all Phase 1 polymer architectures#90
Peariforme merged 3 commits intomasterfrom
feat/copolymer

Conversation

@Peariforme
Copy link
Copy Markdown
Owner

@Peariforme Peariforme commented Mar 4, 2026

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 seed
  • alternating_copolymer() — séquence A-B-A-B-…
  • block_copolymer(&[usize]) — diblock / triblock / multiblock
  • gradient_copolymer(&GradientProfile) — gradient linéaire ou sigmoïde
  • cyclic_homopolymer() — ring closure premier ↔ dernier atome

BranchedBuilder (branched.rs)

  • comb_polymer(branch_every) — peigne régulier backbone + branch
  • graft_copolymer(fraction, seed) — greffage aléatoire reproductible
  • star_polymer(arms) — étoile 3–12 bras
  • 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

  • composition: Vec<MonomerUnit> — fraction molaire par unité de répétition
  • architecture: Architecture — Linear / Star / Comb / Dendrimer / Cyclic / Gradient / Graft
  • End groups (préfixe/suffixe BigSMILES) inclus dans le SMILES et le Mn

CLI

  • polysim analyze --arch random|alternating|block|gradient
  • polysim generate + --gradient-profile linear|sigmoid, --gradient-f-start, --gradient-f-end

Closes

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 échec
  • cargo clippy : aucun warning
  • cargo fmt --check : formatage conforme
  • Test de régression make_cyclic_smiles avec atomes bi-lettres (Cl)
  • Tests de reproductibilité (seed) pour random / gradient / graft
  • Tests de convergence de composition

🤖 Generated with Claude Code

Peariforme and others added 3 commits March 4, 2026 10:25
…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>
Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@Peariforme Peariforme merged commit 3980055 into master Mar 4, 2026
8 checks passed
@Peariforme Peariforme deleted the feat/copolymer branch March 4, 2026 09:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment