gitronics 0.6.1__tar.gz → 0.6.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 (81) hide show
  1. {gitronics-0.6.1 → gitronics-0.6.3}/Cargo.lock +1 -1
  2. {gitronics-0.6.1 → gitronics-0.6.3}/Cargo.toml +1 -1
  3. {gitronics-0.6.1 → gitronics-0.6.3}/PKG-INFO +1 -1
  4. gitronics-0.6.3/README.md +186 -0
  5. gitronics-0.6.3/docs/assets/anatomy-light.svg +56 -0
  6. gitronics-0.6.3/docs/assets/anatomy.svg +56 -0
  7. gitronics-0.6.3/docs/assets/flow-light.svg +61 -0
  8. gitronics-0.6.3/docs/assets/flow.svg +61 -0
  9. gitronics-0.6.3/docs/assets/flow_readme.svg +69 -0
  10. gitronics-0.6.3/docs/assets/hero.svg +116 -0
  11. gitronics-0.6.3/docs/assets/inheritance-light.svg +69 -0
  12. gitronics-0.6.3/docs/assets/inheritance.svg +69 -0
  13. gitronics-0.6.3/docs/assets/logo.svg +30 -0
  14. gitronics-0.6.3/docs/assets/mapping-light.svg +59 -0
  15. gitronics-0.6.3/docs/assets/mapping.svg +59 -0
  16. gitronics-0.6.3/docs/assets/stylesheets/extra.css +21 -0
  17. {gitronics-0.6.1 → gitronics-0.6.3}/docs/best_practices.md +1 -6
  18. {gitronics-0.6.1 → gitronics-0.6.3}/docs/getting_started/assessments.md +1 -1
  19. {gitronics-0.6.1 → gitronics-0.6.3}/docs/getting_started/building_a_model.md +6 -0
  20. {gitronics-0.6.1 → gitronics-0.6.3}/docs/getting_started/concepts.md +6 -0
  21. {gitronics-0.6.1 → gitronics-0.6.3}/docs/getting_started/configuration_file.md +12 -0
  22. {gitronics-0.6.1 → gitronics-0.6.3}/docs/getting_started/file_types.md +3 -4
  23. {gitronics-0.6.1 → gitronics-0.6.3}/docs/index.md +7 -1
  24. {gitronics-0.6.1 → gitronics-0.6.3}/docs/usage/build.md +2 -2
  25. {gitronics-0.6.1 → gitronics-0.6.3}/mkdocs.yml +5 -2
  26. {gitronics-0.6.1 → gitronics-0.6.3}/src/utils.rs +0 -1
  27. gitronics-0.6.1/README.md +0 -112
  28. gitronics-0.6.1/docs/assets/logo.png +0 -0
  29. {gitronics-0.6.1 → gitronics-0.6.3}/.github/workflows/ci.yml +0 -0
  30. {gitronics-0.6.1 → gitronics-0.6.3}/.github/workflows/docs.yml +0 -0
  31. {gitronics-0.6.1 → gitronics-0.6.3}/.github/workflows/release.yml +0 -0
  32. {gitronics-0.6.1 → gitronics-0.6.3}/.gitignore +0 -0
  33. {gitronics-0.6.1 → gitronics-0.6.3}/.vscode/settings.json +0 -0
  34. {gitronics-0.6.1 → gitronics-0.6.3}/LICENSE +0 -0
  35. {gitronics-0.6.1 → gitronics-0.6.3}/docs/examples.md +0 -0
  36. {gitronics-0.6.1 → gitronics-0.6.3}/docs/getting_started/card_id_numbers.md +0 -0
  37. {gitronics-0.6.1 → gitronics-0.6.3}/docs/getting_started/migrating.md +0 -0
  38. {gitronics-0.6.1 → gitronics-0.6.3}/docs/getting_started/new_project.md +0 -0
  39. {gitronics-0.6.1 → gitronics-0.6.3}/docs/getting_started/project_structure.md +0 -0
  40. {gitronics-0.6.1 → gitronics-0.6.3}/docs/getting_started.md +0 -0
  41. {gitronics-0.6.1 → gitronics-0.6.3}/docs/hooks/version_from_git.py +0 -0
  42. {gitronics-0.6.1 → gitronics-0.6.3}/docs/installation.md +0 -0
  43. {gitronics-0.6.1 → gitronics-0.6.3}/docs/requirements.txt +0 -0
  44. {gitronics-0.6.1 → gitronics-0.6.3}/docs/usage/migrate.md +0 -0
  45. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/assessment_specific/filler_model_3.mcnp +0 -0
  46. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/assessment_specific/filler_model_3.metadata +0 -0
  47. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/assessment_specific/small_override.yaml +0 -0
  48. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/configurations/valid_configuration.yaml +0 -0
  49. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/output/.gitignore +0 -0
  50. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/reference_model/data_cards/fine_mesh.tally +0 -0
  51. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/reference_model/data_cards/materials.mat +0 -0
  52. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/reference_model/data_cards/my_transform.transform +0 -0
  53. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/reference_model/data_cards/volumetric_source.source +0 -0
  54. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/reference_model/envelope_structure.mcnp +0 -0
  55. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/reference_model/envelope_structure.metadata +0 -0
  56. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/reference_model/filler_models/filler_model_1.mcnp +0 -0
  57. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/reference_model/filler_models/filler_model_1.metadata +0 -0
  58. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/reference_model/filler_models/filler_model_2.mcnp +0 -0
  59. {gitronics-0.6.1 → gitronics-0.6.3}/example_project/reference_model/filler_models/filler_model_2.metadata +0 -0
  60. {gitronics-0.6.1 → gitronics-0.6.3}/pyproject.toml +0 -0
  61. {gitronics-0.6.1 → gitronics-0.6.3}/python/gitronics/__init__.py +0 -0
  62. {gitronics-0.6.1 → gitronics-0.6.3}/python/gitronics/__main__.py +0 -0
  63. {gitronics-0.6.1 → gitronics-0.6.3}/python/gitronics/gitronics.pyi +0 -0
  64. {gitronics-0.6.1 → gitronics-0.6.3}/python/tests/test_build_model.py +0 -0
  65. {gitronics-0.6.1 → gitronics-0.6.3}/python/tests/test_cli_works.py +0 -0
  66. {gitronics-0.6.1 → gitronics-0.6.3}/resources/simple_model.mcnp +0 -0
  67. {gitronics-0.6.1 → gitronics-0.6.3}/src/build_model.rs +0 -0
  68. {gitronics-0.6.1 → gitronics-0.6.3}/src/build_report.rs +0 -0
  69. {gitronics-0.6.1 → gitronics-0.6.3}/src/cli.rs +0 -0
  70. {gitronics-0.6.1 → gitronics-0.6.3}/src/lib.rs +0 -0
  71. {gitronics-0.6.1 → gitronics-0.6.3}/src/main.rs +0 -0
  72. {gitronics-0.6.1 → gitronics-0.6.3}/src/migrate_model.rs +0 -0
  73. {gitronics-0.6.1 → gitronics-0.6.3}/src/model_config.rs +0 -0
  74. {gitronics-0.6.1 → gitronics-0.6.3}/src/project_manager/load_metadata.rs +0 -0
  75. {gitronics-0.6.1 → gitronics-0.6.3}/src/project_manager/load_model_config.rs +0 -0
  76. {gitronics-0.6.1 → gitronics-0.6.3}/src/project_manager/load_project_files.rs +0 -0
  77. {gitronics-0.6.1 → gitronics-0.6.3}/src/project_manager.rs +0 -0
  78. {gitronics-0.6.1 → gitronics-0.6.3}/src/python.rs +0 -0
  79. {gitronics-0.6.1 → gitronics-0.6.3}/src/report.css +0 -0
  80. {gitronics-0.6.1 → gitronics-0.6.3}/src/types.rs +0 -0
  81. {gitronics-0.6.1 → gitronics-0.6.3}/tests/test_example_project.rs +0 -0
@@ -390,7 +390,7 @@ dependencies = [
390
390
 
391
391
  [[package]]
392
392
  name = "gitronics"
393
- version = "0.6.1"
393
+ version = "0.6.3"
394
394
  dependencies = [
395
395
  "chrono",
396
396
  "clap",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "gitronics"
3
- version = "0.6.1"
3
+ version = "0.6.3"
4
4
  edition = "2024"
5
5
  description = "Build MCNP neutronics models from modular components"
6
6
  license = "EUPL-1.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitronics
3
- Version: 0.6.1
3
+ Version: 0.6.3
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -0,0 +1,186 @@
1
+ <div align="center">
2
+ <img src="docs/assets/hero.svg" alt="Gitronics — assemble MCNP neutronics models from modular, version-controlled components" width="100%">
3
+ </div>
4
+
5
+ <p align="center">
6
+ <a href="https://github.com/Fusion4Energy/gitronics/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/Fusion4Energy/gitronics/actions/workflows/ci.yml/badge.svg"></a>
7
+ <a href="https://pypi.org/project/gitronics/"><img alt="PyPI" src="https://img.shields.io/pypi/v/gitronics?color=F5A623&label=pypi"></a>
8
+ <a href="https://pypi.org/project/gitronics/"><img alt="Python" src="https://img.shields.io/pypi/pyversions/gitronics?color=F5A623"></a>
9
+ <a href="https://github.com/Fusion4Energy/gitronics/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/badge/license-EUPL--1.2-38D9C0"></a>
10
+ <a href="https://fusion4energy.github.io/gitronics/latest/"><img alt="Docs" src="https://img.shields.io/badge/docs-fusion4energy.github.io-4A5768"></a>
11
+ <a href="https://doi.org/10.1016/j.fusengdes.2025.115248"><img alt="Publication" src="https://img.shields.io/badge/DOI-10.1016%2Fj.fusengdes.2025.115248-blue"></a>
12
+ </p>
13
+
14
+ <p align="center">
15
+ <b>Docs:</b> <a href="https://fusion4energy.github.io/gitronics/latest/">fusion4energy.github.io/gitronics</a>
16
+ &nbsp;·&nbsp;
17
+ <a href="https://fusion4energy.github.io/gitronics/latest/getting_started/">Getting Started</a>
18
+ &nbsp;·&nbsp;
19
+ <a href="https://fusion4energy.github.io/gitronics/latest/examples/">Examples</a>
20
+ </p>
21
+
22
+ ---
23
+
24
+ ## What is Gitronics?
25
+
26
+ Large [MCNP](https://mcnp.lanl.gov/) neutronics models are traditionally kept in a **single, enormous input file**. That makes them nearly impossible to review, hard to develop in parallel, and painful to turn into variants.
27
+
28
+ **Gitronics** is a methodology — and a small, fast tool — for maintaining an MCNP model as a collection of **independent, version-controlled files** that are assembled on demand:
29
+
30
+ ```bash
31
+ gitronics build configurations/baseline.yaml -o output/
32
+ ```
33
+
34
+ Each file describes one part of the model (a piece of geometry, a set of materials, a source, a group of tallies). A [YAML](https://yaml.org/) configuration declares which pieces to combine and where — so a single `gitronics build` produces one self-contained `assembled.mcnp`.
35
+
36
+ > The Gitronics methodology already maintains some of the most complex neutronics models of the [ITER](https://www.iter.org/) fusion reactor and the [JT-60SA](https://www.jt60sa.org/) tokamak.
37
+
38
+ ---
39
+
40
+ ## Why it's different
41
+
42
+ | Monolithic MCNP input | Gitronics project |
43
+ | --- | --- |
44
+ | One giant file — `git diff` is meaningless | Each component in its own file — diffs are reviewable |
45
+ | Variants = copy the whole file and edit | Variants = swap components via config inheritance, zero duplication |
46
+ | One person edits at a time | Teams develop sub-models independently, in parallel |
47
+ | "Which model produced this result?" | Every build stamps the **git commit hash + timestamp** into the header |
48
+
49
+ The order of every card in the output is **deterministic**, so two builds of the same configuration are byte-for-byte comparable.
50
+
51
+ ---
52
+
53
+ ## How it works
54
+
55
+ <div align="center">
56
+ <img src="docs/assets/flow_readme.svg" alt="Envelope structure, filler models, and data cards are combined by a YAML configuration through 'gitronics build' into a single assembled.mcnp file plus an HTML report" width="100%">
57
+ </div>
58
+
59
+ `gitronics build` reads a configuration, loads every referenced component, inserts the correct `FILL` cards into the envelope cells, runs validation checks (duplicate IDs, missing cards, …), and writes a single MCNP input plus an HTML build report.
60
+
61
+ A project is organized like this:
62
+
63
+ ```text
64
+ my_project/
65
+ ├── reference_model/
66
+ │ ├── envelope_structure.mcnp ← level-0 cells (the "shell")
67
+ │ ├── filler_models/ ← per-universe MCNP snippets
68
+ │ │ ├── universe_101.mcnp
69
+ │ │ └── universe_101.metadata
70
+ │ └── data_cards/
71
+ │ ├── materials/
72
+ │ ├── sources/
73
+ │ └── tallies/
74
+ ├── configurations/
75
+ │ └── baseline.yaml ← declares which fillers go where
76
+ └── output/
77
+ └── assembled.mcnp ← produced by `gitronics build`
78
+ ```
79
+
80
+ A configuration file simply maps envelope cells to the fillers and data cards that belong in them:
81
+
82
+ ```yaml
83
+ project_roots: [..]
84
+
85
+ envelope_structure: envelope_structure
86
+ source: volumetric_source
87
+ materials: [materials]
88
+ tallies: [fine_mesh]
89
+
90
+ envelopes:
91
+ blanket_sector_01_r1_c01: universe_101
92
+ blanket_sector_01_r1_c02: universe_103
93
+ divertor_cassette_18: null # intentionally left empty
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Installation
99
+
100
+ Gitronics ships as a Python package with a compiled Rust core. Pre-built wheels are on [PyPI](https://pypi.org/project/gitronics/) — no Rust toolchain required.
101
+
102
+ ```bash
103
+ pip install gitronics
104
+ ```
105
+
106
+ **Requirements:** Python **3.9+** on Linux, macOS (Intel & Apple Silicon), or Windows x86-64.
107
+
108
+ <details>
109
+ <summary>Build from source</summary>
110
+
111
+ Requires the stable [Rust toolchain](https://rustup.rs/) and [maturin](https://github.com/PyO3/maturin) ≥ 1.0.
112
+
113
+ ```bash
114
+ git clone https://github.com/Fusion4Energy/gitronics
115
+ cd gitronics
116
+ pip install maturin
117
+ maturin develop --release
118
+ ```
119
+ </details>
120
+
121
+ ---
122
+
123
+ ## Quick start
124
+
125
+ Build the bundled example project:
126
+
127
+ ```bash
128
+ cd example_project
129
+ gitronics build configurations/valid_configuration.yaml --output-path output/
130
+ ```
131
+
132
+ You'll find the assembled model in `output/assembled.mcnp`, with a header recording exactly how it was built:
133
+
134
+ ```text
135
+ C ============================================================
136
+ C Built by gitronics v0.1.0
137
+ C Configuration : configurations/valid_configuration.yaml
138
+ C Git commit : v0.5.18-3-g04d555a
139
+ C Date / time : 2026-06-23 12:34:51
140
+ C ============================================================
141
+ ```
142
+
143
+ ### Migrate an existing model
144
+
145
+ Already have a monolithic MCNP input? Split it into a ready-to-build Gitronics project:
146
+
147
+ ```bash
148
+ gitronics migrate my_big_model.mcnp -o project/
149
+ ```
150
+
151
+ ### Python API
152
+
153
+ The same workflow is available from Python — handy for automation and parametric studies:
154
+
155
+ ```python
156
+ import gitronics
157
+
158
+ # Equivalent to: gitronics build configurations/baseline.yaml -o output/
159
+ gitronics.run(["gitronics", "build", "configurations/baseline.yaml", "-o", "output/"])
160
+ ```
161
+
162
+ ---
163
+
164
+ ## Documentation
165
+
166
+ The full guide lives at **[fusion4energy.github.io/gitronics](https://fusion4energy.github.io/gitronics/latest/)**:
167
+
168
+ - [Concepts](https://fusion4energy.github.io/gitronics/latest/getting_started/concepts/) — the vocabulary of a Gitronics project
169
+ - [Project Structure](https://fusion4energy.github.io/gitronics/latest/getting_started/project_structure/) & [File Types](https://fusion4energy.github.io/gitronics/latest/getting_started/file_types/)
170
+ - [Configuration File](https://fusion4energy.github.io/gitronics/latest/getting_started/configuration_file/) — inheritance, overrides, and variants
171
+ - [Building a Model](https://fusion4energy.github.io/gitronics/latest/getting_started/building_a_model/) & [Migrating](https://fusion4energy.github.io/gitronics/latest/getting_started/migrating/)
172
+ - [Best Practices](https://fusion4energy.github.io/gitronics/latest/best_practices/)
173
+
174
+ ---
175
+
176
+ ## Citing Gitronics
177
+
178
+ If Gitronics supports your work, please cite:
179
+
180
+ > Cubi, A., et al. *Novel modular and Git-based approach for the management and development of radiation transport models.* Fusion Engineering and Design, 2025. [doi:10.1016/j.fusengdes.2025.115248](https://doi.org/10.1016/j.fusengdes.2025.115248)
181
+
182
+ ---
183
+
184
+ ## License
185
+
186
+ Distributed under the [EUPL-1.2](LICENSE) license.
@@ -0,0 +1,56 @@
1
+ <svg width="100%" viewBox="0 0 820 472" role="img"
2
+ aria-label="How an envelope cell is filled: an envelope cell in envelope_structure.mcnp carries a $ @env:blanket_01 placeholder, and a filler model defines a universe with U=101. During gitronics build the placeholder becomes a FILL=101 card in assembled.mcnp, with the transformation taken from the filler's metadata."
3
+ xmlns="http://www.w3.org/2000/svg" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">
4
+ <defs>
5
+ <linearGradient id="amber" x1="0" y1="0" x2="1" y2="1">
6
+ <stop offset="0%" stop-color="#FFD173"/>
7
+ <stop offset="100%" stop-color="#F5A623"/>
8
+ </linearGradient>
9
+ </defs>
10
+
11
+ <rect x="0" y="0" width="820" height="472" rx="18" fill="#FFFFFF"/>
12
+ <rect x="1" y="1" width="818" height="470" rx="17" fill="none" stroke="#E2E6EC" stroke-width="1.5"/>
13
+
14
+ <!-- eyebrows -->
15
+ <text x="24" y="42" fill="#6B7684" font-size="12" font-weight="700" letter-spacing="1">ENVELOPE CELL &#183; placeholder</text>
16
+ <text x="424" y="42" fill="#6B7684" font-size="12" font-weight="700" letter-spacing="1">FILLER MODEL &#183; universe</text>
17
+
18
+ <!-- envelope card -->
19
+ <rect x="24" y="54" width="372" height="128" rx="12" fill="#F5F7FA" stroke="#D7DDE6"/>
20
+ <circle cx="48" cy="82" r="5" fill="#F5A623"/>
21
+ <text x="64" y="87" fill="#6B7684" font-size="14">envelope_structure.mcnp</text>
22
+ <line x1="40" y1="100" x2="380" y2="100" stroke="#E4E9F0"/>
23
+ <text x="44" y="130" font-size="15" fill="#2B3440">21055 0 1 -2 8 -7 -6 -5</text>
24
+ <text x="44" y="158" font-size="15"><tspan fill="#8A93A0">&#160;&#160;&#160;&#160;&#160;imp:n=1&#160;&#160;</tspan><tspan fill="#B26A00" font-weight="700">$ @env:blanket_01</tspan></text>
25
+
26
+ <!-- filler card -->
27
+ <rect x="424" y="54" width="372" height="128" rx="12" fill="#F5F7FA" stroke="#D7DDE6"/>
28
+ <circle cx="448" cy="82" r="5" fill="#0E8C7C"/>
29
+ <text x="464" y="87" fill="#6B7684" font-size="14">blanket_v3.mcnp</text>
30
+ <line x1="440" y1="100" x2="780" y2="100" stroke="#E4E9F0"/>
31
+ <text x="444" y="130" font-size="15" fill="#2B3440">1001 14 -7.89 1001 -1002</text>
32
+ <text x="444" y="158" font-size="15"><tspan fill="#8A93A0">&#160;&#160;&#160;&#160;&#160;imp:n=1&#160;&#160;</tspan><tspan fill="#0E8C7C" font-weight="700">U=101</tspan></text>
33
+
34
+ <!-- merge lines into the build pill -->
35
+ <g fill="none" stroke="#A8B0BC" stroke-width="2.4">
36
+ <path d="M 210 182 C 210 205 302 210 344 210"/>
37
+ <path d="M 610 182 C 610 205 518 210 476 210"/>
38
+ </g>
39
+ <rect x="345" y="194" width="130" height="32" rx="16" fill="url(#amber)"/>
40
+ <text x="410" y="215" fill="#20160A" font-size="13" font-weight="700" text-anchor="middle">gitronics build</text>
41
+
42
+ <!-- single arrow down into the assembled card -->
43
+ <line x1="410" y1="226" x2="410" y2="274" stroke="#A8B0BC" stroke-width="2.4"/>
44
+ <path d="M 403 270 L 410 282 L 417 270 Z" fill="#A8B0BC"/>
45
+
46
+ <!-- assembled card (lowered for arrowhead clearance) -->
47
+ <rect x="70" y="288" width="680" height="128" rx="12" fill="#FFF8EC" stroke="#E7C98A"/>
48
+ <circle cx="94" cy="316" r="5" fill="#F5A623"/>
49
+ <text x="110" y="321" fill="#6B7684" font-size="14">assembled.mcnp</text>
50
+ <line x1="86" y1="334" x2="734" y2="334" stroke="#EFE0C0"/>
51
+ <text x="94" y="364" font-size="15" fill="#2B3440">21055 0 1 -2 8 -7 -6 -5</text>
52
+ <text x="94" y="392" font-size="15"><tspan fill="#8A93A0">&#160;&#160;&#160;&#160;&#160;imp:n=1&#160;&#160;</tspan><tspan fill="#B26A00" font-weight="700">FILL=101</tspan><tspan fill="#8A93A0" font-size="13"> (transform from .metadata)</tspan></text>
53
+
54
+ <!-- caption -->
55
+ <text x="410" y="450" fill="#8A93A0" font-size="13" text-anchor="middle">Gitronics replaces the placeholder with a FILL card during build &#8212; the geometry files stay independent.</text>
56
+ </svg>
@@ -0,0 +1,56 @@
1
+ <svg width="100%" viewBox="0 0 820 472" role="img"
2
+ aria-label="How an envelope cell is filled: an envelope cell in envelope_structure.mcnp carries a $ @env:blanket_01 placeholder, and a filler model defines a universe with U=101. During gitronics build the placeholder becomes a FILL=101 card in assembled.mcnp, with the transformation taken from the filler's metadata."
3
+ xmlns="http://www.w3.org/2000/svg" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">
4
+ <defs>
5
+ <linearGradient id="amber" x1="0" y1="0" x2="1" y2="1">
6
+ <stop offset="0%" stop-color="#FFD173"/>
7
+ <stop offset="100%" stop-color="#F5A623"/>
8
+ </linearGradient>
9
+ </defs>
10
+
11
+ <rect x="0" y="0" width="820" height="472" rx="18" fill="#0B0E15"/>
12
+ <rect x="1" y="1" width="818" height="470" rx="17" fill="none" stroke="#1C2634" stroke-width="1.5"/>
13
+
14
+ <!-- eyebrows -->
15
+ <text x="24" y="42" fill="#8A97A8" font-size="12" font-weight="700" letter-spacing="1">ENVELOPE CELL &#183; placeholder</text>
16
+ <text x="424" y="42" fill="#8A97A8" font-size="12" font-weight="700" letter-spacing="1">FILLER MODEL &#183; universe</text>
17
+
18
+ <!-- envelope card -->
19
+ <rect x="24" y="54" width="372" height="128" rx="12" fill="#0E1622" stroke="#293646"/>
20
+ <circle cx="48" cy="82" r="5" fill="#F5A623"/>
21
+ <text x="64" y="87" fill="#8A97A8" font-size="14">envelope_structure.mcnp</text>
22
+ <line x1="40" y1="100" x2="380" y2="100" stroke="#1E2836"/>
23
+ <text x="44" y="130" font-size="15" fill="#C7D0DD">21055 0 1 -2 8 -7 -6 -5</text>
24
+ <text x="44" y="158" font-size="15"><tspan fill="#9AA6B8">&#160;&#160;&#160;&#160;&#160;imp:n=1&#160;&#160;</tspan><tspan fill="#FFC24B">$ @env:blanket_01</tspan></text>
25
+
26
+ <!-- filler card -->
27
+ <rect x="424" y="54" width="372" height="128" rx="12" fill="#0E1622" stroke="#293646"/>
28
+ <circle cx="448" cy="82" r="5" fill="#38D9C0"/>
29
+ <text x="464" y="87" fill="#8A97A8" font-size="14">blanket_v3.mcnp</text>
30
+ <line x1="440" y1="100" x2="780" y2="100" stroke="#1E2836"/>
31
+ <text x="444" y="130" font-size="15" fill="#C7D0DD">1001 14 -7.89 1001 -1002</text>
32
+ <text x="444" y="158" font-size="15"><tspan fill="#9AA6B8">&#160;&#160;&#160;&#160;&#160;imp:n=1&#160;&#160;</tspan><tspan fill="#38D9C0">U=101</tspan></text>
33
+
34
+ <!-- merge lines into the build pill -->
35
+ <g fill="none" stroke="#4A5768" stroke-width="2.4">
36
+ <path d="M 210 182 C 210 205 302 210 344 210"/>
37
+ <path d="M 610 182 C 610 205 518 210 476 210"/>
38
+ </g>
39
+ <rect x="345" y="194" width="130" height="32" rx="16" fill="url(#amber)"/>
40
+ <text x="410" y="215" fill="#20160A" font-size="13" font-weight="700" text-anchor="middle">gitronics build</text>
41
+
42
+ <!-- single arrow down into the assembled card -->
43
+ <line x1="410" y1="226" x2="410" y2="274" stroke="#4A5768" stroke-width="2.4"/>
44
+ <path d="M 403 270 L 410 282 L 417 270 Z" fill="#4A5768"/>
45
+
46
+ <!-- assembled card (lowered for arrowhead clearance) -->
47
+ <rect x="70" y="288" width="680" height="128" rx="12" fill="#100E08" stroke="#4A3B18"/>
48
+ <circle cx="94" cy="316" r="5" fill="#F5A623"/>
49
+ <text x="110" y="321" fill="#8A97A8" font-size="14">assembled.mcnp</text>
50
+ <line x1="86" y1="334" x2="734" y2="334" stroke="#241d0e"/>
51
+ <text x="94" y="364" font-size="15" fill="#C7D0DD">21055 0 1 -2 8 -7 -6 -5</text>
52
+ <text x="94" y="392" font-size="15"><tspan fill="#9AA6B8">&#160;&#160;&#160;&#160;&#160;imp:n=1&#160;&#160;</tspan><tspan fill="#FFC24B" font-weight="700">FILL=101</tspan><tspan fill="#6E7A8A" font-size="13"> (transform from .metadata)</tspan></text>
53
+
54
+ <!-- caption -->
55
+ <text x="410" y="450" fill="#5C6675" font-size="13" text-anchor="middle">Gitronics replaces the placeholder with a FILL card during build &#8212; the geometry files stay independent.</text>
56
+ </svg>
@@ -0,0 +1,61 @@
1
+ <svg width="100%" viewBox="0 0 820 600" role="img"
2
+ aria-label="Gitronics build pipeline: modular components (envelope structure, filler models, data cards) and a YAML configuration are combined by gitronics build into a single assembled.mcnp deck plus an HTML build report."
3
+ xmlns="http://www.w3.org/2000/svg" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">
4
+ <defs>
5
+ <linearGradient id="amber" x1="0" y1="0" x2="1" y2="1">
6
+ <stop offset="0%" stop-color="#FFD173"/>
7
+ <stop offset="100%" stop-color="#F5A623"/>
8
+ </linearGradient>
9
+ </defs>
10
+
11
+ <rect x="0" y="0" width="820" height="600" rx="20" fill="#FFFFFF"/>
12
+ <rect x="1" y="1" width="818" height="598" rx="19" fill="none" stroke="#E2E6EC" stroke-width="1.5"/>
13
+
14
+ <!-- Stage 1: modular components -->
15
+ <rect x="70" y="34" width="680" height="204" rx="14" fill="#F5F7FA" stroke="#D7DDE6"/>
16
+ <text x="96" y="70" fill="#6B7684" font-size="15" font-weight="700" letter-spacing="2">MODULAR COMPONENTS</text>
17
+ <g font-size="17">
18
+ <rect x="96" y="86" width="628" height="40" rx="8" fill="#EDF1F6" stroke="#DCE3EC"/>
19
+ <circle cx="122" cy="106" r="5" fill="#F5A623"/>
20
+ <text x="142" y="112" fill="#2B3440">envelope_structure.mcnp</text>
21
+ <rect x="96" y="134" width="628" height="40" rx="8" fill="#EDF1F6" stroke="#DCE3EC"/>
22
+ <circle cx="122" cy="154" r="5" fill="#F5A623"/>
23
+ <text x="142" y="160" fill="#2B3440">filler_models/*.mcnp</text>
24
+ <rect x="96" y="182" width="628" height="40" rx="8" fill="#EDF1F6" stroke="#DCE3EC"/>
25
+ <circle cx="122" cy="202" r="5" fill="#0E8C7C"/>
26
+ <text x="142" y="208" fill="#2B3440">data_cards/ &#183; materials &#183; source &#183; tallies</text>
27
+ </g>
28
+
29
+ <!-- arrow 1 -->
30
+ <line x1="410" y1="238" x2="410" y2="262" stroke="#A8B0BC" stroke-width="2.6"/>
31
+ <path d="M 403 258 L 410 268 L 417 258 Z" fill="#A8B0BC"/>
32
+
33
+ <!-- Stage 2: configuration -->
34
+ <rect x="220" y="268" width="380" height="62" rx="12" fill="#EAF6F3" stroke="#BFE3DC"/>
35
+ <text x="410" y="306" fill="#0E8C7C" font-size="17" text-anchor="middle">configurations/baseline.yaml</text>
36
+
37
+ <!-- arrow 2 -->
38
+ <line x1="410" y1="330" x2="410" y2="354" stroke="#A8B0BC" stroke-width="2.6"/>
39
+ <path d="M 403 350 L 410 360 L 417 350 Z" fill="#A8B0BC"/>
40
+
41
+ <!-- Stage 3: build engine -->
42
+ <rect x="290" y="360" width="240" height="78" rx="16" fill="url(#amber)"/>
43
+ <text x="410" y="407" fill="#20160A" font-size="24" font-weight="800" text-anchor="middle">gitronics build</text>
44
+
45
+ <!-- split arrows to outputs -->
46
+ <line x1="410" y1="438" x2="410" y2="460" stroke="#A8B0BC" stroke-width="2.6"/>
47
+ <line x1="245" y1="460" x2="575" y2="460" stroke="#A8B0BC" stroke-width="2.6"/>
48
+ <line x1="245" y1="460" x2="245" y2="478" stroke="#A8B0BC" stroke-width="2.6"/>
49
+ <line x1="575" y1="460" x2="575" y2="478" stroke="#A8B0BC" stroke-width="2.6"/>
50
+ <path d="M 238 474 L 245 484 L 252 474 Z" fill="#A8B0BC"/>
51
+ <path d="M 568 474 L 575 484 L 582 474 Z" fill="#A8B0BC"/>
52
+
53
+ <!-- Stage 4: outputs -->
54
+ <rect x="90" y="486" width="310" height="68" rx="12" fill="#FFF8EC" stroke="#E7C98A"/>
55
+ <text x="245" y="526" fill="#B26A00" font-size="18" font-weight="700" text-anchor="middle">assembled.mcnp</text>
56
+ <rect x="420" y="486" width="310" height="68" rx="12" fill="#F5F7FA" stroke="#D7DDE6"/>
57
+ <text x="575" y="526" fill="#2B3440" font-size="18" text-anchor="middle">build_report.html</text>
58
+
59
+ <!-- footer -->
60
+ <text x="410" y="584" fill="#8A93A0" font-size="14" text-anchor="middle">Every build stamps the git commit hash and timestamp into the model header.</text>
61
+ </svg>
@@ -0,0 +1,61 @@
1
+ <svg width="100%" viewBox="0 0 820 600" role="img"
2
+ aria-label="Gitronics build pipeline: modular components (envelope structure, filler models, data cards) and a YAML configuration are combined by gitronics build into a single assembled.mcnp deck plus an HTML build report."
3
+ xmlns="http://www.w3.org/2000/svg" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">
4
+ <defs>
5
+ <linearGradient id="amber" x1="0" y1="0" x2="1" y2="1">
6
+ <stop offset="0%" stop-color="#FFD173"/>
7
+ <stop offset="100%" stop-color="#F5A623"/>
8
+ </linearGradient>
9
+ </defs>
10
+
11
+ <rect x="0" y="0" width="820" height="600" rx="20" fill="#0B0E15"/>
12
+ <rect x="1" y="1" width="818" height="598" rx="19" fill="none" stroke="#1C2634" stroke-width="1.5"/>
13
+
14
+ <!-- Stage 1: modular components -->
15
+ <rect x="70" y="34" width="680" height="204" rx="14" fill="#0E1622" stroke="#293646"/>
16
+ <text x="96" y="70" fill="#8A97A8" font-size="15" font-weight="700" letter-spacing="2">MODULAR COMPONENTS</text>
17
+ <g font-size="17">
18
+ <rect x="96" y="86" width="628" height="40" rx="8" fill="#131C2A" stroke="#22303F"/>
19
+ <circle cx="122" cy="106" r="5" fill="#F5A623"/>
20
+ <text x="142" y="112" fill="#D6DEEA">envelope_structure.mcnp</text>
21
+ <rect x="96" y="134" width="628" height="40" rx="8" fill="#131C2A" stroke="#22303F"/>
22
+ <circle cx="122" cy="154" r="5" fill="#F5A623"/>
23
+ <text x="142" y="160" fill="#D6DEEA">filler_models/*.mcnp</text>
24
+ <rect x="96" y="182" width="628" height="40" rx="8" fill="#131C2A" stroke="#22303F"/>
25
+ <circle cx="122" cy="202" r="5" fill="#38D9C0"/>
26
+ <text x="142" y="208" fill="#D6DEEA">data_cards/ &#183; materials &#183; source &#183; tallies</text>
27
+ </g>
28
+
29
+ <!-- arrow 1 -->
30
+ <line x1="410" y1="238" x2="410" y2="262" stroke="#4A5768" stroke-width="2.6"/>
31
+ <path d="M 403 258 L 410 268 L 417 258 Z" fill="#4A5768"/>
32
+
33
+ <!-- Stage 2: configuration -->
34
+ <rect x="220" y="268" width="380" height="62" rx="12" fill="#101C1A" stroke="#2E4A46"/>
35
+ <text x="410" y="306" fill="#8FE7DA" font-size="17" text-anchor="middle">configurations/baseline.yaml</text>
36
+
37
+ <!-- arrow 2 -->
38
+ <line x1="410" y1="330" x2="410" y2="354" stroke="#4A5768" stroke-width="2.6"/>
39
+ <path d="M 403 350 L 410 360 L 417 350 Z" fill="#4A5768"/>
40
+
41
+ <!-- Stage 3: build engine -->
42
+ <rect x="290" y="360" width="240" height="78" rx="16" fill="url(#amber)"/>
43
+ <text x="410" y="407" fill="#20160A" font-size="24" font-weight="800" text-anchor="middle">gitronics build</text>
44
+
45
+ <!-- split arrows to outputs -->
46
+ <line x1="410" y1="438" x2="410" y2="460" stroke="#4A5768" stroke-width="2.6"/>
47
+ <line x1="245" y1="460" x2="575" y2="460" stroke="#4A5768" stroke-width="2.6"/>
48
+ <line x1="245" y1="460" x2="245" y2="478" stroke="#4A5768" stroke-width="2.6"/>
49
+ <line x1="575" y1="460" x2="575" y2="478" stroke="#4A5768" stroke-width="2.6"/>
50
+ <path d="M 238 474 L 245 484 L 252 474 Z" fill="#4A5768"/>
51
+ <path d="M 568 474 L 575 484 L 582 474 Z" fill="#4A5768"/>
52
+
53
+ <!-- Stage 4: outputs -->
54
+ <rect x="90" y="486" width="310" height="68" rx="12" fill="#12100A" stroke="#4A3B18"/>
55
+ <text x="245" y="526" fill="#FFC24B" font-size="18" font-weight="700" text-anchor="middle">assembled.mcnp</text>
56
+ <rect x="420" y="486" width="310" height="68" rx="12" fill="#0E1622" stroke="#293646"/>
57
+ <text x="575" y="526" fill="#B9C3D1" font-size="18" text-anchor="middle">build_report.html</text>
58
+
59
+ <!-- footer -->
60
+ <text x="410" y="584" fill="#5C6675" font-size="14" text-anchor="middle">Every build stamps the git commit hash and timestamp into the model header.</text>
61
+ </svg>
@@ -0,0 +1,69 @@
1
+ <svg width="100%" viewBox="0 0 1200 300" role="img"
2
+ aria-label="Build flow: envelope structure, filler models, and data cards are combined by a YAML configuration through gitronics build into a single assembled.mcnp file plus an HTML report"
3
+ xmlns="http://www.w3.org/2000/svg" font-family="ui-sans-serif, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif">
4
+ <defs>
5
+ <linearGradient id="amber2" x1="0" y1="0" x2="1" y2="1">
6
+ <stop offset="0%" stop-color="#FFD173"/>
7
+ <stop offset="100%" stop-color="#F5A623"/>
8
+ </linearGradient>
9
+ </defs>
10
+
11
+ <rect x="0" y="0" width="1200" height="300" rx="20" fill="#0B0E15"/>
12
+ <rect x="1" y="1" width="1198" height="298" rx="19" fill="none" stroke="#1C2634" stroke-width="1.5"/>
13
+
14
+ <!-- INPUT stack -->
15
+ <text x="60" y="52" fill="#8A97A8" font-size="13" font-weight="700" letter-spacing="2">MODULAR COMPONENTS</text>
16
+ <g font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="15">
17
+ <rect x="60" y="70" width="250" height="46" rx="10" fill="#111A27" stroke="#2A3646"/>
18
+ <circle cx="84" cy="93" r="5" fill="#FFC24B"/>
19
+ <text x="100" y="98" fill="#D6DEEA">envelope_structure.mcnp</text>
20
+ <rect x="60" y="126" width="250" height="46" rx="10" fill="#111A27" stroke="#2A3646"/>
21
+ <circle cx="84" cy="149" r="5" fill="#FFC24B"/>
22
+ <text x="100" y="154" fill="#D6DEEA">filler_models/*.mcnp</text>
23
+ <rect x="60" y="182" width="250" height="46" rx="10" fill="#111A27" stroke="#2A3646"/>
24
+ <circle cx="84" cy="205" r="5" fill="#38D9C0"/>
25
+ <text x="100" y="210" fill="#D6DEEA">data_cards/*</text>
26
+ </g>
27
+
28
+ <!-- config node -->
29
+ <text x="392" y="52" fill="#8A97A8" font-size="13" font-weight="700" letter-spacing="2">CONFIG</text>
30
+ <rect x="392" y="112" width="160" height="76" rx="12" fill="#101C1A" stroke="#2E4A46"/>
31
+ <text x="472" y="146" fill="#8FE7DA" font-size="14" font-weight="700" text-anchor="middle" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">baseline</text>
32
+ <text x="472" y="167" fill="#5FA69C" font-size="13" text-anchor="middle" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">.yaml</text>
33
+
34
+ <!-- arrows components -> config -->
35
+ <g stroke="#37424F" stroke-width="2" fill="none">
36
+ <path d="M 310 93 C 350 93 356 150 390 150"/>
37
+ <path d="M 310 149 L 390 150"/>
38
+ <path d="M 310 205 C 350 205 356 150 390 150"/>
39
+ </g>
40
+
41
+ <!-- arrow config -> build -->
42
+ <g stroke="#4A5768" stroke-width="2.4" fill="none">
43
+ <path d="M 552 150 L 636 150"/>
44
+ </g>
45
+ <path d="M 632 144 L 644 150 L 632 156 Z" fill="#4A5768"/>
46
+
47
+ <!-- build engine -->
48
+ <rect x="648" y="106" width="196" height="88" rx="14" fill="url(#amber2)"/>
49
+ <text x="746" y="146" fill="#20160A" font-size="18" font-weight="800" text-anchor="middle" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">gitronics</text>
50
+ <text x="746" y="172" fill="#3A2A10" font-size="16" font-weight="700" text-anchor="middle" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">build</text>
51
+
52
+ <!-- arrow build -> outputs -->
53
+ <g stroke="#4A5768" stroke-width="2.4" fill="none">
54
+ <path d="M 844 150 L 928 150"/>
55
+ </g>
56
+ <path d="M 924 144 L 936 150 L 924 156 Z" fill="#4A5768"/>
57
+
58
+ <!-- outputs -->
59
+ <text x="940" y="52" fill="#8A97A8" font-size="13" font-weight="700" letter-spacing="2">DETERMINISTIC OUTPUT</text>
60
+ <g font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="15">
61
+ <rect x="940" y="106" width="210" height="46" rx="10" fill="#12100A" stroke="#4A3B18"/>
62
+ <text x="964" y="134" fill="#FFC24B">assembled.mcnp</text>
63
+ <rect x="940" y="162" width="210" height="46" rx="10" fill="#111A27" stroke="#2A3646"/>
64
+ <text x="964" y="190" fill="#B9C3D1">build_report.html</text>
65
+ </g>
66
+
67
+ <!-- footer note -->
68
+ <text x="60" y="272" fill="#5C6675" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">Every build stamps the git commit hash + timestamp into the model header &#8212; reproducible by design.</text>
69
+ </svg>