reactorcheck 0.2.0__tar.gz → 0.2.2__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.
- reactorcheck-0.2.2/.github/workflows/ci.yml +164 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/.github/workflows/release.yml +5 -5
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/.gitignore +1 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/CHANGELOG.md +26 -3
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/CITATION.cff +2 -1
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/CONTRIBUTING.md +8 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/PKG-INFO +30 -16
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/README.md +29 -15
- reactorcheck-0.2.2/docs/public-data-sources.md +249 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/pyproject.toml +1 -1
- reactorcheck-0.2.2/scripts/validate_public_reactor_data.py +280 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/__init__.py +1 -1
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/io.py +73 -1
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/species.py +7 -1
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/tests/gui_widget_smoke.py +24 -4
- reactorcheck-0.2.2/tests/test_project_metadata.py +60 -0
- reactorcheck-0.2.2/tests/test_public_data_regressions.py +191 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/tests/test_version.py +1 -1
- reactorcheck-0.2.0/.github/workflows/ci.yml +0 -72
- reactorcheck-0.2.0/tests/test_project_metadata.py +0 -30
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/LICENSE +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/docs/assets/composition-result.png +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/docs/assets/example-result.png +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/docs/assets/social-preview.png +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/docs/dependency-licenses.md +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/docs/interchange.md +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/docs/scientific-definitions.md +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/examples/synthetic_composition.csv +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/examples/synthetic_composition.xlsx +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/examples/synthetic_composition_config.json +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/examples/synthetic_config.json +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/examples/synthetic_reactor.csv +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/schemas/reactorcheck-interchange.experimental.schema.json +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/scripts/generate_example_assets.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/__main__.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/calculations.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/cli.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/composition.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/gui.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/gui_controller.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/models.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/plotting.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/py.typed +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/qc.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/service.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/steady.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/src/reactorcheck/units.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/tests/conftest.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/tests/test_calculations.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/tests/test_composition.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/tests/test_io_cli_gui.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/tests/test_service.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/tests/test_species.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/tests/test_steady.py +0 -0
- {reactorcheck-0.2.0 → reactorcheck-0.2.2}/tests/test_units.py +0 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
concurrency:
|
|
14
|
+
group: reactorcheck-ci-${{ github.event.pull_request.number || github.ref }}
|
|
15
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
required:
|
|
19
|
+
name: CI / required
|
|
20
|
+
# Public fork code must never execute on persistent self-hosted research hardware.
|
|
21
|
+
if: >-
|
|
22
|
+
github.event_name != 'pull_request' ||
|
|
23
|
+
github.event.pull_request.head.repo.full_name == github.repository
|
|
24
|
+
runs-on: [self-hosted, dgx-spark]
|
|
25
|
+
timeout-minutes: 60
|
|
26
|
+
env:
|
|
27
|
+
PIP_NO_CACHE_DIR: "1"
|
|
28
|
+
REACTORCHECK_CI_VENV: reactorcheck-ci-${{ github.run_id }}-${{ github.run_attempt }}
|
|
29
|
+
REACTORCHECK_WHEEL_VENV: reactorcheck-wheel-${{ github.run_id }}-${{ github.run_attempt }}
|
|
30
|
+
REACTORCHECK_CI_OUTPUT: reactorcheck-output-${{ github.run_id }}-${{ github.run_attempt }}
|
|
31
|
+
steps:
|
|
32
|
+
- name: Check out source
|
|
33
|
+
uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5
|
|
34
|
+
with:
|
|
35
|
+
clean: true
|
|
36
|
+
fetch-depth: 0
|
|
37
|
+
persist-credentials: false
|
|
38
|
+
- name: Set up Python
|
|
39
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
40
|
+
with:
|
|
41
|
+
python-version: "3.13"
|
|
42
|
+
- name: Configure shared Tk and Xvfb runtime
|
|
43
|
+
env:
|
|
44
|
+
REACTORCHECK_GUI_RUNTIME: /opt/catalysttwin-actions/shared-gui-runtime
|
|
45
|
+
run: |
|
|
46
|
+
set -eu
|
|
47
|
+
runtime="$REACTORCHECK_GUI_RUNTIME"
|
|
48
|
+
bin_dir="$runtime/usr/bin"
|
|
49
|
+
lib_dir="$runtime/usr/lib/aarch64-linux-gnu"
|
|
50
|
+
tk_dir="$runtime/usr/share/tcltk/tk8.6"
|
|
51
|
+
test -d "$bin_dir"
|
|
52
|
+
test -d "$lib_dir"
|
|
53
|
+
test -d "$tk_dir"
|
|
54
|
+
export PATH="$bin_dir:$PATH"
|
|
55
|
+
export LD_LIBRARY_PATH="$lib_dir${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
|
56
|
+
export TK_LIBRARY="$tk_dir"
|
|
57
|
+
printf '%s\n' "$bin_dir" >> "$GITHUB_PATH"
|
|
58
|
+
{
|
|
59
|
+
printf 'LD_LIBRARY_PATH=%s\n' "$LD_LIBRARY_PATH"
|
|
60
|
+
printf 'TK_LIBRARY=%s\n' "$TK_LIBRARY"
|
|
61
|
+
} >> "$GITHUB_ENV"
|
|
62
|
+
command -v Xvfb
|
|
63
|
+
command -v xvfb-run
|
|
64
|
+
python -c 'import tkinter; print(tkinter.TkVersion)'
|
|
65
|
+
- name: Create isolated environments
|
|
66
|
+
run: |
|
|
67
|
+
python -m venv "$RUNNER_TEMP/$REACTORCHECK_CI_VENV"
|
|
68
|
+
python -m venv "$RUNNER_TEMP/$REACTORCHECK_WHEEL_VENV"
|
|
69
|
+
mkdir -p "$RUNNER_TEMP/$REACTORCHECK_CI_OUTPUT"
|
|
70
|
+
- name: Install project in the isolated environment
|
|
71
|
+
run: |
|
|
72
|
+
"$RUNNER_TEMP/$REACTORCHECK_CI_VENV/bin/python" -m pip install --upgrade pip
|
|
73
|
+
"$RUNNER_TEMP/$REACTORCHECK_CI_VENV/bin/python" -m pip install -e ".[dev]"
|
|
74
|
+
"$RUNNER_TEMP/$REACTORCHECK_CI_VENV/bin/python" -m pip check
|
|
75
|
+
- name: Check formatting
|
|
76
|
+
run: >-
|
|
77
|
+
"$RUNNER_TEMP/$REACTORCHECK_CI_VENV/bin/python" -m ruff format --check .
|
|
78
|
+
- name: Lint
|
|
79
|
+
run: >-
|
|
80
|
+
"$RUNNER_TEMP/$REACTORCHECK_CI_VENV/bin/python" -m ruff check .
|
|
81
|
+
- name: Type check
|
|
82
|
+
run: >-
|
|
83
|
+
"$RUNNER_TEMP/$REACTORCHECK_CI_VENV/bin/python" -m mypy src
|
|
84
|
+
- name: Unit, integration, and scientific tests
|
|
85
|
+
run: >-
|
|
86
|
+
"$RUNNER_TEMP/$REACTORCHECK_CI_VENV/bin/python" -m pytest
|
|
87
|
+
- name: Build and validate distributions
|
|
88
|
+
run: |
|
|
89
|
+
"$RUNNER_TEMP/$REACTORCHECK_CI_VENV/bin/python" -m build
|
|
90
|
+
"$RUNNER_TEMP/$REACTORCHECK_CI_VENV/bin/python" -m twine check dist/*
|
|
91
|
+
- name: Verify clean wheel on ARM64
|
|
92
|
+
run: |
|
|
93
|
+
"$RUNNER_TEMP/$REACTORCHECK_WHEEL_VENV/bin/python" -m pip install --upgrade pip
|
|
94
|
+
"$RUNNER_TEMP/$REACTORCHECK_WHEEL_VENV/bin/python" -m pip install dist/*.whl
|
|
95
|
+
"$RUNNER_TEMP/$REACTORCHECK_WHEEL_VENV/bin/python" -m pip check
|
|
96
|
+
"$RUNNER_TEMP/$REACTORCHECK_WHEEL_VENV/bin/python" - <<'PY'
|
|
97
|
+
import importlib.metadata
|
|
98
|
+
import platform
|
|
99
|
+
import reactorcheck
|
|
100
|
+
|
|
101
|
+
machine = platform.machine().lower()
|
|
102
|
+
assert machine in {"aarch64", "arm64"}, machine
|
|
103
|
+
assert reactorcheck.__version__ == importlib.metadata.version("reactorcheck")
|
|
104
|
+
print(machine, reactorcheck.__version__, reactorcheck.__file__)
|
|
105
|
+
PY
|
|
106
|
+
- name: Exercise installed CLI and example workflow
|
|
107
|
+
run: |
|
|
108
|
+
"$RUNNER_TEMP/$REACTORCHECK_WHEEL_VENV/bin/reactorcheck" --help
|
|
109
|
+
"$RUNNER_TEMP/$REACTORCHECK_WHEEL_VENV/bin/reactorcheck" --version
|
|
110
|
+
"$RUNNER_TEMP/$REACTORCHECK_WHEEL_VENV/bin/reactorcheck" analyze \
|
|
111
|
+
examples/synthetic_composition.csv \
|
|
112
|
+
--config examples/synthetic_composition_config.json \
|
|
113
|
+
--output "$RUNNER_TEMP/$REACTORCHECK_CI_OUTPUT/installed.xlsx" \
|
|
114
|
+
--plot "$RUNNER_TEMP/$REACTORCHECK_CI_OUTPUT/installed.png"
|
|
115
|
+
test -s "$RUNNER_TEMP/$REACTORCHECK_CI_OUTPUT/installed.xlsx"
|
|
116
|
+
test -s "$RUNNER_TEMP/$REACTORCHECK_CI_OUTPUT/installed.png"
|
|
117
|
+
- name: Exercise installed GUI wiring
|
|
118
|
+
run: |
|
|
119
|
+
xvfb-run -a "$RUNNER_TEMP/$REACTORCHECK_WHEEL_VENV/bin/python" \
|
|
120
|
+
tests/gui_widget_smoke.py \
|
|
121
|
+
examples/synthetic_composition.csv \
|
|
122
|
+
examples/synthetic_composition_config.json \
|
|
123
|
+
"$RUNNER_TEMP/$REACTORCHECK_CI_OUTPUT/gui-wired.xlsx"
|
|
124
|
+
test -s "$RUNNER_TEMP/$REACTORCHECK_CI_OUTPUT/gui-wired.xlsx"
|
|
125
|
+
- name: Remove isolated environments and generated files
|
|
126
|
+
if: always()
|
|
127
|
+
run: |
|
|
128
|
+
python - <<'PY'
|
|
129
|
+
import os
|
|
130
|
+
from pathlib import Path
|
|
131
|
+
import shutil
|
|
132
|
+
|
|
133
|
+
runner_temp = Path(os.environ["RUNNER_TEMP"]).resolve()
|
|
134
|
+
workspace = Path(os.environ["GITHUB_WORKSPACE"]).resolve()
|
|
135
|
+
for variable in (
|
|
136
|
+
"REACTORCHECK_CI_VENV",
|
|
137
|
+
"REACTORCHECK_WHEEL_VENV",
|
|
138
|
+
"REACTORCHECK_CI_OUTPUT",
|
|
139
|
+
):
|
|
140
|
+
target = (runner_temp / os.environ[variable]).resolve()
|
|
141
|
+
if runner_temp not in target.parents:
|
|
142
|
+
raise RuntimeError(f"Refusing to clean outside runner temp: {target}")
|
|
143
|
+
shutil.rmtree(target, ignore_errors=True)
|
|
144
|
+
for relative in (
|
|
145
|
+
"build",
|
|
146
|
+
"dist",
|
|
147
|
+
".mypy_cache",
|
|
148
|
+
".pytest_cache",
|
|
149
|
+
".ruff_cache",
|
|
150
|
+
".coverage",
|
|
151
|
+
"htmlcov",
|
|
152
|
+
):
|
|
153
|
+
target = (workspace / relative).resolve()
|
|
154
|
+
if workspace not in target.parents:
|
|
155
|
+
raise RuntimeError(f"Refusing to clean outside workspace: {target}")
|
|
156
|
+
if target.is_dir():
|
|
157
|
+
shutil.rmtree(target)
|
|
158
|
+
elif target.exists():
|
|
159
|
+
target.unlink()
|
|
160
|
+
for target in workspace.rglob("__pycache__"):
|
|
161
|
+
if workspace in target.resolve().parents:
|
|
162
|
+
shutil.rmtree(target)
|
|
163
|
+
PY
|
|
164
|
+
test -z "$(git status --porcelain)"
|
|
@@ -11,8 +11,8 @@ jobs:
|
|
|
11
11
|
permissions:
|
|
12
12
|
contents: read
|
|
13
13
|
steps:
|
|
14
|
-
- uses: actions/checkout@
|
|
15
|
-
- uses: actions/setup-python@
|
|
14
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
15
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
16
16
|
with:
|
|
17
17
|
python-version: "3.12"
|
|
18
18
|
cache: pip
|
|
@@ -42,7 +42,7 @@ jobs:
|
|
|
42
42
|
examples/synthetic_composition.csv \
|
|
43
43
|
examples/synthetic_composition_config.json \
|
|
44
44
|
/tmp/reactorcheck-release-gui.xlsx
|
|
45
|
-
- uses: actions/upload-artifact@
|
|
45
|
+
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
46
46
|
with:
|
|
47
47
|
name: python-package-distributions
|
|
48
48
|
path: dist/
|
|
@@ -57,8 +57,8 @@ jobs:
|
|
|
57
57
|
permissions:
|
|
58
58
|
id-token: write
|
|
59
59
|
steps:
|
|
60
|
-
- uses: actions/download-artifact@
|
|
60
|
+
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
|
|
61
61
|
with:
|
|
62
62
|
name: python-package-distributions
|
|
63
63
|
path: dist/
|
|
64
|
-
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
64
|
+
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
|
|
@@ -3,7 +3,31 @@
|
|
|
3
3
|
All notable changes follow [Keep a Changelog](https://keepachangelog.com/) and
|
|
4
4
|
versions follow semantic versioning.
|
|
5
5
|
|
|
6
|
-
## [0.2.
|
|
6
|
+
## [0.2.2] - 2026-08-23
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- Added checksum-pinned, opt-in validation against selected public fixed-bed
|
|
11
|
+
reactor and composition datasets without vendoring their source files.
|
|
12
|
+
- Added helium to the explicit species model for user-confirmed internal-standard
|
|
13
|
+
reconstruction.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- Detect structurally consistent comma, semicolon, or tab delimiters instead of
|
|
18
|
+
treating every CSV as comma-delimited.
|
|
19
|
+
- Exclude explicit result and uncertainty headers from conservative species
|
|
20
|
+
mapping suggestions while preserving detector ambiguity for user review.
|
|
21
|
+
- Updated the release workflow to current Node 24 GitHub actions.
|
|
22
|
+
|
|
23
|
+
## [0.2.1] - 2026-08-23
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- Corrected the primary installation and publication-status documentation for
|
|
28
|
+
the public PyPI package. There are no scientific API or calculation changes.
|
|
29
|
+
|
|
30
|
+
## [0.2.0] - 2026-08-23
|
|
7
31
|
|
|
8
32
|
### Added
|
|
9
33
|
|
|
@@ -12,8 +36,7 @@ versions follow semantic versioning.
|
|
|
12
36
|
- Independent raw/normalized treatment and wet/dry water-basis settings.
|
|
13
37
|
- GUI controls, CLI/config support, composition QC, and full reconstruction
|
|
14
38
|
provenance for the mole-fraction workflow.
|
|
15
|
-
- PyPI Trusted Publishing release workflow
|
|
16
|
-
performed.
|
|
39
|
+
- PyPI Trusted Publishing release workflow with clean-wheel and GUI validation.
|
|
17
40
|
|
|
18
41
|
## [0.1.0] - 2026-08-23
|
|
19
42
|
|
|
@@ -2,7 +2,8 @@ cff-version: 1.2.0
|
|
|
2
2
|
message: "If you use ReactorCheck, please cite this software."
|
|
3
3
|
title: "ReactorCheck"
|
|
4
4
|
type: software
|
|
5
|
-
version: 0.2.
|
|
5
|
+
version: 0.2.2
|
|
6
|
+
date-released: 2026-08-23
|
|
6
7
|
license: MIT
|
|
7
8
|
repository-code: "https://github.com/hdkim99/ReactorCheck"
|
|
8
9
|
authors:
|
|
@@ -14,3 +14,11 @@ data, credentials, or personally identifying metadata.
|
|
|
14
14
|
After changing the public composition example, run
|
|
15
15
|
`python scripts/generate_example_assets.py` and inspect both PNG files before
|
|
16
16
|
committing the regenerated XLSX/visual assets.
|
|
17
|
+
|
|
18
|
+
## Self-hosted CI safety
|
|
19
|
+
|
|
20
|
+
The required CI job runs on the persistent `dgx-spark` self-hosted runner.
|
|
21
|
+
Pushes, manual dispatches, and pull requests from this repository may use that
|
|
22
|
+
runner. Pull requests from forks are deliberately skipped so unreviewed fork
|
|
23
|
+
code cannot execute on research hardware. Maintainers must not weaken this gate;
|
|
24
|
+
review fork changes before reproducing them in a same-repository branch.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: reactorcheck
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Unit-aware catalytic reactor analysis from compositions or measured species flows.
|
|
5
5
|
Project-URL: Homepage, https://github.com/hdkim99/ReactorCheck
|
|
6
6
|
Project-URL: Repository, https://github.com/hdkim99/ReactorCheck
|
|
@@ -63,7 +63,7 @@ Description-Content-Type: text/markdown
|
|
|
63
63
|
|
|
64
64
|
[](https://github.com/hdkim99/ReactorCheck/actions/workflows/ci.yml)
|
|
65
65
|
[](https://www.python.org/)
|
|
66
|
-
[](LICENSE)
|
|
66
|
+
[](https://github.com/hdkim99/ReactorCheck/blob/main/LICENSE)
|
|
67
67
|
|
|
68
68
|

|
|
69
69
|
|
|
@@ -83,14 +83,15 @@ settings, and source provenance.
|
|
|
83
83
|
## Install
|
|
84
84
|
|
|
85
85
|
Python 3.10 or newer is required. Tk is needed only for the desktop GUI.
|
|
86
|
-
PyPI publication is prepared but has not been performed; install the current
|
|
87
|
-
public source directly:
|
|
88
86
|
|
|
89
87
|
```bash
|
|
90
|
-
python -m pip install
|
|
88
|
+
python -m pip install reactorcheck
|
|
91
89
|
```
|
|
92
90
|
|
|
93
|
-
|
|
91
|
+
For the bundled example datasets, unreleased development code, or contributions,
|
|
92
|
+
clone the public source and use an editable install instead:
|
|
93
|
+
|
|
94
|
+
## 30-second bundled example (source install)
|
|
94
95
|
|
|
95
96
|
```bash
|
|
96
97
|
git clone https://github.com/hdkim99/ReactorCheck.git
|
|
@@ -104,8 +105,8 @@ reactorcheck-gui
|
|
|
104
105
|
```
|
|
105
106
|
|
|
106
107
|
The synthetic CO hydrogenation example is available as both
|
|
107
|
-
[`CSV`](examples/synthetic_composition.csv) and
|
|
108
|
-
[`XLSX`](examples/synthetic_composition.xlsx). Its hand calculation reconstructs
|
|
108
|
+
[`CSV`](https://github.com/hdkim99/ReactorCheck/blob/main/examples/synthetic_composition.csv) and
|
|
109
|
+
[`XLSX`](https://github.com/hdkim99/ReactorCheck/blob/main/examples/synthetic_composition.xlsx). Its hand calculation reconstructs
|
|
109
110
|
CO/H2/CH3OH/N2 outlet flows of 0.5/1.0/0.5/1.0 mol/h.
|
|
110
111
|
|
|
111
112
|
The backward-compatible direct-flow example remains available:
|
|
@@ -116,7 +117,7 @@ reactorcheck analyze examples/synthetic_reactor.csv \
|
|
|
116
117
|
--output reactorcheck-direct.xlsx
|
|
117
118
|
```
|
|
118
119
|
|
|
119
|
-
## Supported scope in 0.2.
|
|
120
|
+
## Supported scope in 0.2.x
|
|
120
121
|
|
|
121
122
|
| Capability | Status | Notes |
|
|
122
123
|
|---|---|---|
|
|
@@ -131,7 +132,7 @@ reactorcheck analyze examples/synthetic_reactor.csv \
|
|
|
131
132
|
| Rate, mass STY, GHSV, WHSV | Supported | Definitions and units are explicit |
|
|
132
133
|
| Multi-variable steady state + override | Supported | Candidate detection, not physical proof |
|
|
133
134
|
| QC, plot, Excel/CSV export | Supported | Settings and provenance included |
|
|
134
|
-
| Multi-reactant conversion/selectivity basis | Planned | No implicit combined denominator in 0.2 |
|
|
135
|
+
| Multi-reactant conversion/selectivity basis | Planned | No implicit combined denominator in 0.2.x |
|
|
135
136
|
|
|
136
137
|
## Scientific safeguards
|
|
137
138
|
|
|
@@ -145,8 +146,18 @@ single `composition.basis` key is rejected rather than guessed.
|
|
|
145
146
|
Raw composition sums are always retained and checked against a configured
|
|
146
147
|
tolerance. Normalization does not change the internal-standard ratio, a property
|
|
147
148
|
covered by scientific regression tests. See
|
|
148
|
-
[`docs/scientific-definitions.md`](docs/scientific-definitions.md) and the complete
|
|
149
|
-
[`composition configuration`](examples/synthetic_composition_config.json).
|
|
149
|
+
[`docs/scientific-definitions.md`](https://github.com/hdkim99/ReactorCheck/blob/main/docs/scientific-definitions.md) and the complete
|
|
150
|
+
[`composition configuration`](https://github.com/hdkim99/ReactorCheck/blob/main/examples/synthetic_composition_config.json).
|
|
151
|
+
|
|
152
|
+
## Selected public real-data validation
|
|
153
|
+
|
|
154
|
+
ReactorCheck's IO and mapping paths have also been exercised against selected
|
|
155
|
+
public fixed-bed reactor exports: a Zenodo online-GC workbook/processed-flow
|
|
156
|
+
pair and a Mendeley Data dry-composition table. This does not imply validation
|
|
157
|
+
for every instrument or published metric definition. Dataset DOI, license,
|
|
158
|
+
checksums, files/columns used, failures found, scientific boundaries, and the
|
|
159
|
+
opt-in reproduction command are recorded in
|
|
160
|
+
[`docs/public-data-sources.md`](https://github.com/hdkim99/ReactorCheck/blob/main/docs/public-data-sources.md).
|
|
150
161
|
|
|
151
162
|
## Outputs
|
|
152
163
|
|
|
@@ -157,7 +168,7 @@ internal-standard feed, reconstruction equation, and the user's assumption text.
|
|
|
157
168
|
|
|
158
169
|
## Limitations
|
|
159
170
|
|
|
160
|
-
- Version 0.2 uses one configured reference reactant; multi-reactant aggregate
|
|
171
|
+
- Version 0.2.x uses one configured reference reactant; multi-reactant aggregate
|
|
161
172
|
bases and stoichiometric selectivity coefficients are planned, not inferred.
|
|
162
173
|
- Internal-standard reconstruction assumes `F_std,out = F_std,in` exactly as the
|
|
163
174
|
user declares; ReactorCheck cannot prove nonreactivity from composition data.
|
|
@@ -190,6 +201,9 @@ twine check dist/*
|
|
|
190
201
|
```
|
|
191
202
|
|
|
192
203
|
Synthetic example data are MIT-licensed with the project. See
|
|
193
|
-
[CONTRIBUTING.md](CONTRIBUTING.md)
|
|
194
|
-
|
|
195
|
-
|
|
204
|
+
[CONTRIBUTING.md](https://github.com/hdkim99/ReactorCheck/blob/main/CONTRIBUTING.md)
|
|
205
|
+
and [CITATION.cff](https://github.com/hdkim99/ReactorCheck/blob/main/CITATION.cff).
|
|
206
|
+
The 1280×640
|
|
207
|
+
[`social-preview.png`](https://raw.githubusercontent.com/hdkim99/ReactorCheck/main/docs/assets/social-preview.png)
|
|
208
|
+
is the current repository social-preview candidate and is generated from the same
|
|
209
|
+
synthetic composition example shown above.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/hdkim99/ReactorCheck/actions/workflows/ci.yml)
|
|
6
6
|
[](https://www.python.org/)
|
|
7
|
-
[](LICENSE)
|
|
7
|
+
[](https://github.com/hdkim99/ReactorCheck/blob/main/LICENSE)
|
|
8
8
|
|
|
9
9
|

|
|
10
10
|
|
|
@@ -24,14 +24,15 @@ settings, and source provenance.
|
|
|
24
24
|
## Install
|
|
25
25
|
|
|
26
26
|
Python 3.10 or newer is required. Tk is needed only for the desktop GUI.
|
|
27
|
-
PyPI publication is prepared but has not been performed; install the current
|
|
28
|
-
public source directly:
|
|
29
27
|
|
|
30
28
|
```bash
|
|
31
|
-
python -m pip install
|
|
29
|
+
python -m pip install reactorcheck
|
|
32
30
|
```
|
|
33
31
|
|
|
34
|
-
|
|
32
|
+
For the bundled example datasets, unreleased development code, or contributions,
|
|
33
|
+
clone the public source and use an editable install instead:
|
|
34
|
+
|
|
35
|
+
## 30-second bundled example (source install)
|
|
35
36
|
|
|
36
37
|
```bash
|
|
37
38
|
git clone https://github.com/hdkim99/ReactorCheck.git
|
|
@@ -45,8 +46,8 @@ reactorcheck-gui
|
|
|
45
46
|
```
|
|
46
47
|
|
|
47
48
|
The synthetic CO hydrogenation example is available as both
|
|
48
|
-
[`CSV`](examples/synthetic_composition.csv) and
|
|
49
|
-
[`XLSX`](examples/synthetic_composition.xlsx). Its hand calculation reconstructs
|
|
49
|
+
[`CSV`](https://github.com/hdkim99/ReactorCheck/blob/main/examples/synthetic_composition.csv) and
|
|
50
|
+
[`XLSX`](https://github.com/hdkim99/ReactorCheck/blob/main/examples/synthetic_composition.xlsx). Its hand calculation reconstructs
|
|
50
51
|
CO/H2/CH3OH/N2 outlet flows of 0.5/1.0/0.5/1.0 mol/h.
|
|
51
52
|
|
|
52
53
|
The backward-compatible direct-flow example remains available:
|
|
@@ -57,7 +58,7 @@ reactorcheck analyze examples/synthetic_reactor.csv \
|
|
|
57
58
|
--output reactorcheck-direct.xlsx
|
|
58
59
|
```
|
|
59
60
|
|
|
60
|
-
## Supported scope in 0.2.
|
|
61
|
+
## Supported scope in 0.2.x
|
|
61
62
|
|
|
62
63
|
| Capability | Status | Notes |
|
|
63
64
|
|---|---|---|
|
|
@@ -72,7 +73,7 @@ reactorcheck analyze examples/synthetic_reactor.csv \
|
|
|
72
73
|
| Rate, mass STY, GHSV, WHSV | Supported | Definitions and units are explicit |
|
|
73
74
|
| Multi-variable steady state + override | Supported | Candidate detection, not physical proof |
|
|
74
75
|
| QC, plot, Excel/CSV export | Supported | Settings and provenance included |
|
|
75
|
-
| Multi-reactant conversion/selectivity basis | Planned | No implicit combined denominator in 0.2 |
|
|
76
|
+
| Multi-reactant conversion/selectivity basis | Planned | No implicit combined denominator in 0.2.x |
|
|
76
77
|
|
|
77
78
|
## Scientific safeguards
|
|
78
79
|
|
|
@@ -86,8 +87,18 @@ single `composition.basis` key is rejected rather than guessed.
|
|
|
86
87
|
Raw composition sums are always retained and checked against a configured
|
|
87
88
|
tolerance. Normalization does not change the internal-standard ratio, a property
|
|
88
89
|
covered by scientific regression tests. See
|
|
89
|
-
[`docs/scientific-definitions.md`](docs/scientific-definitions.md) and the complete
|
|
90
|
-
[`composition configuration`](examples/synthetic_composition_config.json).
|
|
90
|
+
[`docs/scientific-definitions.md`](https://github.com/hdkim99/ReactorCheck/blob/main/docs/scientific-definitions.md) and the complete
|
|
91
|
+
[`composition configuration`](https://github.com/hdkim99/ReactorCheck/blob/main/examples/synthetic_composition_config.json).
|
|
92
|
+
|
|
93
|
+
## Selected public real-data validation
|
|
94
|
+
|
|
95
|
+
ReactorCheck's IO and mapping paths have also been exercised against selected
|
|
96
|
+
public fixed-bed reactor exports: a Zenodo online-GC workbook/processed-flow
|
|
97
|
+
pair and a Mendeley Data dry-composition table. This does not imply validation
|
|
98
|
+
for every instrument or published metric definition. Dataset DOI, license,
|
|
99
|
+
checksums, files/columns used, failures found, scientific boundaries, and the
|
|
100
|
+
opt-in reproduction command are recorded in
|
|
101
|
+
[`docs/public-data-sources.md`](https://github.com/hdkim99/ReactorCheck/blob/main/docs/public-data-sources.md).
|
|
91
102
|
|
|
92
103
|
## Outputs
|
|
93
104
|
|
|
@@ -98,7 +109,7 @@ internal-standard feed, reconstruction equation, and the user's assumption text.
|
|
|
98
109
|
|
|
99
110
|
## Limitations
|
|
100
111
|
|
|
101
|
-
- Version 0.2 uses one configured reference reactant; multi-reactant aggregate
|
|
112
|
+
- Version 0.2.x uses one configured reference reactant; multi-reactant aggregate
|
|
102
113
|
bases and stoichiometric selectivity coefficients are planned, not inferred.
|
|
103
114
|
- Internal-standard reconstruction assumes `F_std,out = F_std,in` exactly as the
|
|
104
115
|
user declares; ReactorCheck cannot prove nonreactivity from composition data.
|
|
@@ -131,6 +142,9 @@ twine check dist/*
|
|
|
131
142
|
```
|
|
132
143
|
|
|
133
144
|
Synthetic example data are MIT-licensed with the project. See
|
|
134
|
-
[CONTRIBUTING.md](CONTRIBUTING.md)
|
|
135
|
-
|
|
136
|
-
|
|
145
|
+
[CONTRIBUTING.md](https://github.com/hdkim99/ReactorCheck/blob/main/CONTRIBUTING.md)
|
|
146
|
+
and [CITATION.cff](https://github.com/hdkim99/ReactorCheck/blob/main/CITATION.cff).
|
|
147
|
+
The 1280×640
|
|
148
|
+
[`social-preview.png`](https://raw.githubusercontent.com/hdkim99/ReactorCheck/main/docs/assets/social-preview.png)
|
|
149
|
+
is the current repository social-preview candidate and is generated from the same
|
|
150
|
+
synthetic composition example shown above.
|