Skip to content

Commit ec56014

Browse files
author
OpenMC Wrapper Contributors
committed
refactor: rename project from openmc-wrapper to promptmc
- Rename package directory from openmc_wrapper to promptmc - Update pyproject.toml: name, CLI entry point, authors - Update package name and imports in __init__.py - Update all imports in source files (cli.py, assistant.py, batch.py, parallel.py, resources.py) - Update all test imports - Update README.md: title, references, and description - Update CHANGELOG.md: CLI command references - Update CLI name from openmc-wrapper to promptmc - Update command output references in assistant.py
1 parent 266f8aa commit ec56014

32 files changed

Lines changed: 103 additions & 103 deletions

README.md

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
# OpenMC Wrapper
1+
# PromptMC
22

33
Production-grade Python wrapper for OpenMC Monte Carlo particle transport simulations.
44

55
## Overview
66

77
OpenMC is powerful, but getting started can be challenging: you need to write XML configuration files, understand dozens of parameters, and manage simulation workflows manually.
88

9-
**OpenMC Wrapper solves this by:**
9+
**PromptMC solves this by:**
1010

1111
- **Describing simulations in plain English** — Tell it what you want (`"make a shielding calculation with 1M particles"`) and get a validated plan
1212
- **Generating production-ready XML** — Automatically creates `settings.xml` with sensible defaults based on your description
1313
- **Validating before you run** — Schema validation catches errors before OpenMC even starts
1414
- **Managing workflows** — Batch runs, parallel execution, progress tracking, and resource limits
1515
- **Observability built-in** — Distributed tracing and metrics via OpenTelemetry
1616

17-
Whether you're new to Monte Carlo or an experienced researcher, OpenMC Wrapper reduces friction and lets you focus on physics, not configuration.
17+
Whether you're new to Monte Carlo or an experienced researcher, PromptMC reduces friction and lets you focus on physics, not configuration.
1818

1919
### Architecture
2020

@@ -37,7 +37,7 @@ Whether you're new to Monte Carlo or an experienced researcher, OpenMC Wrapper r
3737
### Key Features
3838

3939
- **OpenMC Integration**: Python API wrapper and subprocess invocation support
40-
- **Natural-Language Interface**: `openmc-wrapper ask` turns plain-English requests into OpenMC plans and settings files
40+
- **Natural-Language Interface**: `promptmc ask` turns plain-English requests into OpenMC plans and settings files
4141
- **Optional LLM Planning**: Use OpenAI-compatible models via `--llm` for richer natural-language interpretation
4242
- **Parallel Execution**: Thread, process, and MPI-based parallel simulation execution
4343
- **Batch Runner**: Run parameter sweeps from YAML/JSON specifications
@@ -69,8 +69,8 @@ Whether you're new to Monte Carlo or an experienced researcher, OpenMC Wrapper r
6969

7070
```bash
7171
# Clone the repository
72-
git clone https://github.com/your-org/openmc-wrapper.git
73-
cd openmc-wrapper
72+
git clone https://github.com/your-org/promptmc.git
73+
cd promptmc
7474

7575
# Install with Poetry
7676
poetry install
@@ -82,7 +82,7 @@ poetry shell
8282
### Install as a Package (when published)
8383

8484
```bash
85-
pip install openmc-wrapper
85+
pip install promptmc
8686
```
8787

8888
## Quick Start
@@ -93,14 +93,14 @@ The easiest way to start is to describe what you want in plain English:
9393

9494
```bash
9595
# Ask for a plan without writing files
96-
openmc-wrapper ask "make a concrete shielding calculation with 1 million particles"
96+
promptmc ask "make a concrete shielding calculation with 1 million particles"
9797

9898
# Generate settings.xml directly from natural language
99-
openmc-wrapper ask "set up a reactor pin cell criticality run with 50k particles" --write
99+
promptmc ask "set up a reactor pin cell criticality run with 50k particles" --write
100100

101101
# Use an OpenAI-compatible LLM for richer interpretation
102102
export OPENAI_API_KEY="..."
103-
openmc-wrapper ask "I need a high-statistics shielding model for a 14 MeV source" --llm --write
103+
promptmc ask "I need a high-statistics shielding model for a 14 MeV source" --llm --write
104104
```
105105

106106
`ask` is offline-first. Without an API key, it uses a deterministic local planner that maps
@@ -117,7 +117,7 @@ validated XML files for production workflows.
117117
#### Example Output
118118

119119
```bash
120-
$ openmc-wrapper ask "make a concrete shielding calculation with 1 million particles"
120+
$ promptmc ask "make a concrete shielding calculation with 1 million particles"
121121

122122
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
123123
┃ Natural-Language OpenMC Plan ┃
@@ -130,7 +130,7 @@ $ openmc-wrapper ask "make a concrete shielding calculation with 1 million parti
130130
│ Batches │ 10 │
131131
│ Inactive │ 0 │
132132
│ Confidence │ 85% │
133-
│ Command │ openmc-wrapper template shielding --output │
133+
│ Command │ promptmc template shielding --output │
134134
│ │ settings.xml --particles 1000000 --batches 10 │
135135
└────────────────┴────────────────────────────────────────────────┘
136136

@@ -154,56 +154,56 @@ Next steps
154154

155155
```bash
156156
# Natural-language planning
157-
openmc-wrapper ask "criticality run for a small reactor with 100k particles"
157+
promptmc ask "criticality run for a small reactor with 100k particles"
158158

159159
# Natural-language generation
160-
openmc-wrapper ask "make a shielding calculation with 1M particles" --write --output settings.xml
160+
promptmc ask "make a shielding calculation with 1M particles" --write --output settings.xml
161161

162162
# Check OpenMC installation
163-
openmc-wrapper info
163+
promptmc info
164164

165165
# Get system info and tuning recommendations
166-
openmc-wrapper system-info
166+
promptmc system-info
167167

168168
# List available configuration templates
169-
openmc-wrapper list-templates
169+
promptmc list-templates
170170

171171
# Generate settings.xml from a template
172-
openmc-wrapper template criticality --output settings.xml --particles 10000
173-
openmc-wrapper template fixed_source --output settings.xml --particles 50000
172+
promptmc template criticality --output settings.xml --particles 10000
173+
promptmc template fixed_source --output settings.xml --particles 50000
174174

175175
# Generate a configuration file (basic)
176-
openmc-wrapper configure --output config.xml --particles 10000 --batches 10
176+
promptmc configure --output config.xml --particles 10000 --batches 10
177177

178178
# Validate XML structure
179-
openmc-wrapper validate input.xml
179+
promptmc validate input.xml
180180

181181
# Validate XML structure + schema (Pydantic)
182-
openmc-wrapper validate input.xml --schema
182+
promptmc validate input.xml --schema
183183

184184
# Run schema-only check
185-
openmc-wrapper schema-check settings.xml
186-
openmc-wrapper schema-check ./input_dir/
185+
promptmc schema-check settings.xml
186+
promptmc schema-check ./input_dir/
187187

188188
# Run a simulation (auto-detects API or subprocess)
189-
openmc-wrapper run input.xml --threads 4
190-
openmc-wrapper run input.xml --mode api
191-
openmc-wrapper run input.xml --mode subprocess
189+
promptmc run input.xml --threads 4
190+
promptmc run input.xml --mode api
191+
promptmc run input.xml --mode subprocess
192192

193193
# Run a batch of simulations from a YAML spec
194-
openmc-wrapper batch examples/batch_spec.yaml --parallel threads --workers 4
194+
promptmc batch examples/batch_spec.yaml --parallel threads --workers 4
195195

196196
# Analyze simulation results
197-
openmc-wrapper analyze ./output --json results.json
197+
promptmc analyze ./output --json results.json
198198

199199
# Get optimization recommendations
200-
openmc-wrapper optimize --threads 4 --particles 10000 --batches 100
200+
promptmc optimize --threads 4 --particles 10000 --batches 100
201201

202202
# List loaded plugins
203-
openmc-wrapper list-plugins
203+
promptmc list-plugins
204204

205205
# Enable verbose output
206-
openmc-wrapper --verbose run input.xml
206+
promptmc --verbose run input.xml
207207
```
208208

209209
### Python API Usage
@@ -282,7 +282,7 @@ mypy src/
282282
### Project Structure
283283

284284
```
285-
openmc-wrapper/
285+
promptmc/
286286
├── src/openmc_wrapper/
287287
│ ├── __init__.py # Package initialization
288288
│ ├── cli.py # CLI (13 commands)
@@ -336,7 +336,7 @@ openmc-wrapper/
336336
Telemetry is exported to console by default with no configuration required:
337337

338338
```bash
339-
openmc-wrapper run input.xml
339+
promptmc run input.xml
340340
# Telemetry output appears in console
341341
```
342342

@@ -346,14 +346,14 @@ Set the `OTEL_EXPORTER_OTLP_ENDPOINT` environment variable to export to an OTLP-
346346

347347
```bash
348348
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317"
349-
openmc-wrapper run input.xml
349+
promptmc run input.xml
350350
```
351351

352352
### Disable Console Export
353353

354354
```bash
355355
export OTEL_CONSOLE_EXPORT="false"
356-
openmc-wrapper run input.xml
356+
promptmc run input.xml
357357
```
358358

359359
## Roadmap to v1.0
@@ -393,7 +393,7 @@ openmc-wrapper run input.xml
393393

394394
I studied nuclear engineering at MIT over 20 years ago and used MCNP 4 for my senior thesis project. I left during my senior year without graduating. Since then, I've been a software engineer at Google for the past 10 years.
395395

396-
This project is a personal exploration of agentic programming — using AI agents to build software. OpenMC Wrapper seemed like the perfect test case: it combines my background in nuclear physics with modern software engineering practices. The goal was to see how much of a production-grade tool could be built through agentic coding, from architecture design to implementation, testing, and documentation.
396+
This project is a personal exploration of agentic programming — using AI agents to build software. PromptMC seemed like the perfect test case: it combines my background in nuclear physics with modern software engineering practices. The goal was to see how much of a production-grade tool could be built through agentic coding, from architecture design to implementation, testing, and documentation.
397397

398398
The result is a fully functional, well-tested tool that I hope will be useful to the OpenMC community — whether you're a student learning Monte Carlo methods or a researcher running production simulations.
399399

@@ -430,6 +430,6 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
430430

431431
## Support
432432

433-
- Documentation: [GitHub Repository](https://github.com/rjonace/openmc-wrapper)
434-
- Issues: [GitHub Issues](https://github.com/rjonace/openmc-wrapper/issues)
435-
- Discussions: [GitHub Discussions](https://github.com/rjonace/openmc-wrapper/discussions)
433+
- Documentation: [GitHub Repository](https://github.com/rjonace/promptmc)
434+
- Issues: [GitHub Issues](https://github.com/rjonace/promptmc/issues)
435+
- Discussions: [GitHub Discussions](https://github.com/rjonace/promptmc/discussions)

pyproject.toml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
[tool.poetry]
2-
name = "openmc-wrapper"
2+
name = "promptmc"
33
version = "1.0.0"
44
description = "Production-grade Python wrapper for OpenMC Monte Carlo particle transport code"
5-
authors = ["OpenMC Wrapper Contributors"]
5+
authors = ["PromptMC Contributors"]
66
license = "MIT"
77
readme = "README.md"
8-
packages = [{include = "openmc_wrapper", from = "src"}]
8+
packages = [{include = "promptmc", from = "src"}]
99

1010
[tool.poetry.dependencies]
1111
python = "^3.9"
@@ -28,7 +28,7 @@ pre-commit = "^3.7.0"
2828
bandit = "^1.7.9"
2929

3030
[tool.poetry.scripts]
31-
openmc-wrapper = "openmc_wrapper.cli:app"
31+
promptmc = "promptmc.cli:app"
3232

3333
[build-system]
3434
requires = ["poetry-core"]
@@ -57,9 +57,9 @@ ignore = [
5757
]
5858

5959
[tool.ruff.lint.per-file-ignores]
60-
"src/openmc_wrapper/cli.py" = ["ARG001"]
61-
"src/openmc_wrapper/templates.py" = ["ARG002"]
62-
"src/openmc_wrapper/openmc_integration.py" = ["ARG002"]
60+
"src/promptmc/cli.py" = ["ARG001"]
61+
"src/promptmc/templates.py" = ["ARG002"]
62+
"src/promptmc/openmc_integration.py" = ["ARG002"]
6363
"tests/*" = ["ARG001", "ARG002"]
6464

6565
[tool.ruff.format]
@@ -87,7 +87,7 @@ python_files = ["test_*.py"]
8787
python_classes = ["Test*"]
8888
python_functions = ["test_*"]
8989
addopts = [
90-
"--cov=openmc_wrapper",
90+
"--cov=promptmc",
9191
"--cov-report=term-missing",
9292
"--cov-report=html",
9393
"--strict-markers",

src/openmc_wrapper/__init__.py

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/promptmc/__init__.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
"""PromptMC - Production-grade Python wrapper for OpenMC Monte Carlo simulations."""
2+
3+
__version__ = "1.0.0"
4+
__author__ = "PromptMC Contributors"
5+
__license__ = "MIT"
6+
7+
from promptmc.telemetry import TelemetryManager
8+
9+
__all__ = ["__version__", "TelemetryManager"]
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from pathlib import Path
1212
from typing import Any, Optional
1313

14-
from openmc_wrapper.templates import TemplateType, get_template
14+
from promptmc.templates import TemplateType, get_template
1515

1616
SUPPORTED_TEMPLATE_TYPES = {
1717
TemplateType.CRITICALITY,
@@ -37,7 +37,7 @@ class NaturalLanguagePlan:
3737

3838
def command(self, output_path: str | Path = "settings.xml") -> str:
3939
parts = [
40-
"openmc-wrapper",
40+
"promptmc",
4141
"template",
4242
self.template_type.value,
4343
"--output",
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
import yaml
1212

13-
from openmc_wrapper.parallel import (
13+
from promptmc.parallel import (
1414
JobResult,
1515
ParallelConfig,
1616
ParallelExecutor,
Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,26 @@
1111
from rich.panel import Panel
1212
from rich.table import Table
1313

14-
from openmc_wrapper import __version__
15-
from openmc_wrapper.assistant import NaturalLanguageAssistant
16-
from openmc_wrapper.batch import BatchRunner, load_batch_spec
17-
from openmc_wrapper.errors import configure_logging
18-
from openmc_wrapper.openmc_integration import (
14+
from promptmc import __version__
15+
from promptmc.assistant import NaturalLanguageAssistant
16+
from promptmc.batch import BatchRunner, load_batch_spec
17+
from promptmc.errors import configure_logging
18+
from promptmc.openmc_integration import (
1919
ExecutionMode,
2020
OpenMCIntegration,
2121
OpenMCNotFoundError,
2222
OpenMCValidationError,
2323
)
24-
from openmc_wrapper.parallel import ParallelConfig, ParallelMode
25-
from openmc_wrapper.performance import OptimizationAdvisor, SystemProfiler
26-
from openmc_wrapper.plugins import get_plugin_registry
27-
from openmc_wrapper.schema import SchemaValidator, format_validation_report
28-
from openmc_wrapper.telemetry import get_telemetry_manager
29-
from openmc_wrapper.templates import TemplateType, get_template, list_templates
30-
from openmc_wrapper.visualization import ResultParser, ResultVisualizer
24+
from promptmc.parallel import ParallelConfig, ParallelMode
25+
from promptmc.performance import OptimizationAdvisor, SystemProfiler
26+
from promptmc.plugins import get_plugin_registry
27+
from promptmc.schema import SchemaValidator, format_validation_report
28+
from promptmc.telemetry import get_telemetry_manager
29+
from promptmc.templates import TemplateType, get_template, list_templates
30+
from promptmc.visualization import ResultParser, ResultVisualizer
3131

3232
app = typer.Typer(
33-
name="openmc-wrapper",
33+
name="promptmc",
3434
help="Production-grade Python wrapper for OpenMC Monte Carlo simulations",
3535
add_completion=False,
3636
)
@@ -41,7 +41,7 @@
4141
def version_callback(value: bool) -> None:
4242
"""Show version and exit."""
4343
if value:
44-
console.print(f"[bold green]openmc-wrapper[/bold green] version [cyan]{__version__}[/cyan]")
44+
console.print(f"[bold green]promptmc[/bold green] version [cyan]{__version__}[/cyan]")
4545
raise typer.Exit()
4646

4747

@@ -67,7 +67,7 @@ def main(
6767
exists=True,
6868
),
6969
) -> None:
70-
"""OpenMC Wrapper – production-grade Python wrapper for OpenMC Monte Carlo simulations."""
70+
"""PromptMC – production-grade Python wrapper for OpenMC Monte Carlo simulations."""
7171
if verbose:
7272
configure_logging()
7373
console.print("[dim]Verbose mode enabled[/dim]")
@@ -510,7 +510,7 @@ def ask(
510510
result_path = plan.render(output)
511511
console.print(f"[green]✓[/green] Wrote settings file: [cyan]{result_path}[/cyan]")
512512
console.print(
513-
"[dim]Next: validate with `openmc-wrapper validate "
513+
"[dim]Next: validate with `promptmc validate "
514514
f"{result_path} --schema`[/dim]"
515515
)
516516

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from enum import Enum
1111
from pathlib import Path
1212

13-
from openmc_wrapper.openmc_integration import OpenMCIntegration
13+
from promptmc.openmc_integration import OpenMCIntegration
1414

1515

1616
class ParallelMode(Enum):

0 commit comments

Comments
 (0)