hpc-runner 0.1.1__py3-none-any.whl → 0.2.1__py3-none-any.whl
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.
- hpc_runner/_version.py +2 -2
- hpc_runner/cli/cancel.py +1 -1
- hpc_runner/cli/config.py +2 -2
- hpc_runner/cli/main.py +17 -13
- hpc_runner/cli/monitor.py +30 -0
- hpc_runner/cli/run.py +223 -67
- hpc_runner/cli/status.py +6 -5
- hpc_runner/core/__init__.py +30 -0
- hpc_runner/core/descriptors.py +87 -33
- hpc_runner/core/exceptions.py +9 -0
- hpc_runner/core/job.py +272 -93
- hpc_runner/core/job_info.py +104 -0
- hpc_runner/core/result.py +4 -0
- hpc_runner/schedulers/base.py +148 -30
- hpc_runner/schedulers/detection.py +22 -4
- hpc_runner/schedulers/local/scheduler.py +119 -2
- hpc_runner/schedulers/sge/args.py +161 -94
- hpc_runner/schedulers/sge/parser.py +106 -13
- hpc_runner/schedulers/sge/scheduler.py +727 -171
- hpc_runner/schedulers/sge/templates/batch.sh.j2 +82 -0
- hpc_runner/schedulers/sge/templates/interactive.sh.j2 +78 -0
- hpc_runner/tui/__init__.py +5 -0
- hpc_runner/tui/app.py +436 -0
- hpc_runner/tui/components/__init__.py +17 -0
- hpc_runner/tui/components/detail_panel.py +187 -0
- hpc_runner/tui/components/filter_bar.py +174 -0
- hpc_runner/tui/components/filter_popup.py +345 -0
- hpc_runner/tui/components/job_table.py +260 -0
- hpc_runner/tui/providers/__init__.py +5 -0
- hpc_runner/tui/providers/jobs.py +197 -0
- hpc_runner/tui/screens/__init__.py +7 -0
- hpc_runner/tui/screens/confirm.py +67 -0
- hpc_runner/tui/screens/job_details.py +210 -0
- hpc_runner/tui/screens/log_viewer.py +170 -0
- hpc_runner/tui/snapshot.py +153 -0
- hpc_runner/tui/styles/monitor.tcss +567 -0
- hpc_runner-0.2.1.dist-info/METADATA +285 -0
- hpc_runner-0.2.1.dist-info/RECORD +56 -0
- hpc_runner/schedulers/sge/templates/job.sh.j2 +0 -39
- hpc_runner-0.1.1.dist-info/METADATA +0 -46
- hpc_runner-0.1.1.dist-info/RECORD +0 -38
- {hpc_runner-0.1.1.dist-info → hpc_runner-0.2.1.dist-info}/WHEEL +0 -0
- {hpc_runner-0.1.1.dist-info → hpc_runner-0.2.1.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: hpc-runner
|
|
3
|
+
Version: 0.2.1
|
|
4
|
+
Summary: Unified HPC job submission across multiple schedulers
|
|
5
|
+
Project-URL: Homepage, https://github.com/sjalloq/hpc-runner
|
|
6
|
+
Project-URL: Repository, https://github.com/sjalloq/hpc-runner
|
|
7
|
+
Author: Shareef Jalloq
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
Keywords: cluster,hpc,job-submission,pbs,sge,slurm
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: System :: Clustering
|
|
21
|
+
Classifier: Topic :: System :: Distributed Computing
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Requires-Dist: jinja2>=3.0
|
|
24
|
+
Requires-Dist: rich-click>=1.7
|
|
25
|
+
Requires-Dist: textual>=6.11
|
|
26
|
+
Requires-Dist: tomli>=2.0; python_version < '3.11'
|
|
27
|
+
Provides-Extra: all
|
|
28
|
+
Requires-Dist: build; extra == 'all'
|
|
29
|
+
Requires-Dist: hatch-vcs; extra == 'all'
|
|
30
|
+
Requires-Dist: mypy; extra == 'all'
|
|
31
|
+
Requires-Dist: pytest-cov; extra == 'all'
|
|
32
|
+
Requires-Dist: pytest>=7.0; extra == 'all'
|
|
33
|
+
Requires-Dist: ruff; extra == 'all'
|
|
34
|
+
Requires-Dist: twine; extra == 'all'
|
|
35
|
+
Provides-Extra: dev
|
|
36
|
+
Requires-Dist: build; extra == 'dev'
|
|
37
|
+
Requires-Dist: hatch-vcs; extra == 'dev'
|
|
38
|
+
Requires-Dist: mypy; extra == 'dev'
|
|
39
|
+
Requires-Dist: pytest-cov; extra == 'dev'
|
|
40
|
+
Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
41
|
+
Requires-Dist: ruff; extra == 'dev'
|
|
42
|
+
Requires-Dist: twine; extra == 'dev'
|
|
43
|
+
Description-Content-Type: text/markdown
|
|
44
|
+
|
|
45
|
+
# hpc-runner
|
|
46
|
+
|
|
47
|
+
**Unified HPC job submission across multiple schedulers**
|
|
48
|
+
|
|
49
|
+
Write your jobs once, run them on any cluster - SGE, Slurm, PBS, or locally for testing.
|
|
50
|
+
|
|
51
|
+
## Features
|
|
52
|
+
|
|
53
|
+
- **Unified CLI** - Same commands work across SGE, Slurm, PBS
|
|
54
|
+
- **Python API** - Programmatic job submission with dependencies and pipelines
|
|
55
|
+
- **Auto-detection** - Automatically finds your cluster's scheduler
|
|
56
|
+
- **Interactive TUI** - Monitor jobs with a terminal dashboard
|
|
57
|
+
- **Job Dependencies** - Chain jobs with afterok, afterany, afternotok
|
|
58
|
+
- **Array Jobs** - Batch processing with throttling support
|
|
59
|
+
- **Virtual Environment Handling** - Automatic venv activation on compute nodes
|
|
60
|
+
- **Module Integration** - Load environment modules in job scripts
|
|
61
|
+
- **Dry-run Mode** - Preview generated scripts before submission
|
|
62
|
+
|
|
63
|
+
## Installation
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pip install hpc-runner
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Or with uv:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
uv pip install hpc-runner
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Quick Start
|
|
76
|
+
|
|
77
|
+
### CLI
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Basic job submission
|
|
81
|
+
hpc run python train.py
|
|
82
|
+
|
|
83
|
+
# With resources
|
|
84
|
+
hpc run --cpu 4 --mem 16G --time 4:00:00 "python train.py"
|
|
85
|
+
|
|
86
|
+
# GPU job
|
|
87
|
+
hpc run --queue gpu --cpu 4 --mem 32G "python train.py --epochs 100"
|
|
88
|
+
|
|
89
|
+
# Preview without submitting
|
|
90
|
+
hpc run --dry-run --cpu 8 "make -j8"
|
|
91
|
+
|
|
92
|
+
# Interactive session
|
|
93
|
+
hpc run --interactive bash
|
|
94
|
+
|
|
95
|
+
# Array job
|
|
96
|
+
hpc run --array 1-100 "python process.py --task-id \$SGE_TASK_ID"
|
|
97
|
+
|
|
98
|
+
# Wait for completion
|
|
99
|
+
hpc run --wait python long_job.py
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Python API
|
|
103
|
+
|
|
104
|
+
```python
|
|
105
|
+
from hpc_runner import Job
|
|
106
|
+
|
|
107
|
+
# Create and submit a job
|
|
108
|
+
job = Job(
|
|
109
|
+
command="python train.py",
|
|
110
|
+
cpu=4,
|
|
111
|
+
mem="16G",
|
|
112
|
+
time="4:00:00",
|
|
113
|
+
queue="gpu",
|
|
114
|
+
)
|
|
115
|
+
result = job.submit()
|
|
116
|
+
|
|
117
|
+
# Wait for completion
|
|
118
|
+
status = result.wait()
|
|
119
|
+
print(f"Exit code: {result.returncode}")
|
|
120
|
+
|
|
121
|
+
# Read output
|
|
122
|
+
print(result.read_stdout())
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Job Dependencies
|
|
126
|
+
|
|
127
|
+
```python
|
|
128
|
+
from hpc_runner import Job
|
|
129
|
+
|
|
130
|
+
# First job
|
|
131
|
+
preprocess = Job(command="python preprocess.py", cpu=8, mem="32G")
|
|
132
|
+
result1 = preprocess.submit()
|
|
133
|
+
|
|
134
|
+
# Second job runs after first succeeds
|
|
135
|
+
train = Job(command="python train.py", cpu=4, mem="48G", queue="gpu")
|
|
136
|
+
train.after(result1, type="afterok")
|
|
137
|
+
result2 = train.submit()
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Pipelines
|
|
141
|
+
|
|
142
|
+
```python
|
|
143
|
+
from hpc_runner import Pipeline
|
|
144
|
+
|
|
145
|
+
with Pipeline("ml_workflow") as p:
|
|
146
|
+
p.add("python preprocess.py", name="preprocess", cpu=8)
|
|
147
|
+
p.add("python train.py", name="train", depends_on=["preprocess"], queue="gpu")
|
|
148
|
+
p.add("python evaluate.py", name="evaluate", depends_on=["train"])
|
|
149
|
+
|
|
150
|
+
results = p.submit()
|
|
151
|
+
p.wait()
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Scheduler Support
|
|
155
|
+
|
|
156
|
+
| Scheduler | Status | Notes |
|
|
157
|
+
|-----------|--------|-------|
|
|
158
|
+
| SGE | Fully implemented | qsub, qstat, qdel, qrsh |
|
|
159
|
+
| Local | Fully implemented | Run as subprocess (for testing) |
|
|
160
|
+
| Slurm | Planned | sbatch, squeue, scancel |
|
|
161
|
+
| PBS | Planned | qsub, qstat, qdel |
|
|
162
|
+
|
|
163
|
+
### Auto-detection Priority
|
|
164
|
+
|
|
165
|
+
1. `HPC_SCHEDULER` environment variable
|
|
166
|
+
2. SGE (`SGE_ROOT` or `qstat` available)
|
|
167
|
+
3. Slurm (`sbatch` available)
|
|
168
|
+
4. PBS (`qsub` with PBS)
|
|
169
|
+
5. Local fallback
|
|
170
|
+
|
|
171
|
+
## Configuration
|
|
172
|
+
|
|
173
|
+
hpc-runner uses TOML configuration files. Location priority:
|
|
174
|
+
|
|
175
|
+
1. `--config /path/to/config.toml`
|
|
176
|
+
2. `./hpc-tools.toml`
|
|
177
|
+
3. `./pyproject.toml` under `[tool.hpc-tools]`
|
|
178
|
+
4. Git repository root `hpc-tools.toml`
|
|
179
|
+
5. `~/.config/hpc-tools/config.toml`
|
|
180
|
+
6. Package defaults
|
|
181
|
+
|
|
182
|
+
### Example Configuration
|
|
183
|
+
|
|
184
|
+
```toml
|
|
185
|
+
[defaults]
|
|
186
|
+
cpu = 1
|
|
187
|
+
mem = "4G"
|
|
188
|
+
time = "1:00:00"
|
|
189
|
+
inherit_env = true
|
|
190
|
+
|
|
191
|
+
[schedulers.sge]
|
|
192
|
+
parallel_environment = "smp"
|
|
193
|
+
memory_resource = "mem_free"
|
|
194
|
+
purge_modules = true
|
|
195
|
+
|
|
196
|
+
[types.gpu]
|
|
197
|
+
queue = "gpu"
|
|
198
|
+
resources = [{name = "gpu", value = 1}]
|
|
199
|
+
|
|
200
|
+
[types.interactive]
|
|
201
|
+
queue = "interactive"
|
|
202
|
+
time = "8:00:00"
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Use named job types:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
hpc run --job-type gpu "python train.py"
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## TUI Monitor
|
|
212
|
+
|
|
213
|
+
Launch the interactive job monitor:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
hpc monitor
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Key bindings:
|
|
220
|
+
- `q` - Quit
|
|
221
|
+
- `r` - Refresh
|
|
222
|
+
- `u` - Toggle user filter (my jobs / all)
|
|
223
|
+
- `/` - Search
|
|
224
|
+
- `Enter` - View job details
|
|
225
|
+
- `Tab` - Switch tabs
|
|
226
|
+
|
|
227
|
+
## CLI Reference
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
hpc run [OPTIONS] COMMAND
|
|
231
|
+
|
|
232
|
+
Options:
|
|
233
|
+
--job-name TEXT Job name
|
|
234
|
+
--cpu INTEGER Number of CPUs
|
|
235
|
+
--mem TEXT Memory (e.g., 16G, 4096M)
|
|
236
|
+
--time TEXT Time limit (e.g., 4:00:00)
|
|
237
|
+
--queue TEXT Queue/partition name
|
|
238
|
+
--directory PATH Working directory
|
|
239
|
+
--module TEXT Module to load (repeatable)
|
|
240
|
+
--array TEXT Array spec (e.g., 1-100, 1-100%5)
|
|
241
|
+
--depend TEXT Job dependencies
|
|
242
|
+
--inherit-env Inherit environment (default: true)
|
|
243
|
+
--no-inherit-env Don't inherit environment
|
|
244
|
+
--interactive Run interactively (qrsh/srun)
|
|
245
|
+
--local Run locally (no scheduler)
|
|
246
|
+
--dry-run Show script without submitting
|
|
247
|
+
--wait Wait for completion
|
|
248
|
+
--keep-script Keep job script for debugging
|
|
249
|
+
-h, --help Show help
|
|
250
|
+
|
|
251
|
+
Other commands:
|
|
252
|
+
hpc status [JOB_ID] Check job status
|
|
253
|
+
hpc cancel JOB_ID Cancel a job
|
|
254
|
+
hpc monitor Interactive TUI
|
|
255
|
+
hpc config show Show active configuration
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## Development
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
# Setup environment
|
|
262
|
+
source sourceme
|
|
263
|
+
source sourceme --clean # Clean rebuild
|
|
264
|
+
|
|
265
|
+
# Run tests
|
|
266
|
+
pytest
|
|
267
|
+
pytest -v
|
|
268
|
+
pytest -k "test_job"
|
|
269
|
+
|
|
270
|
+
# Type checking
|
|
271
|
+
mypy src/hpc_runner
|
|
272
|
+
|
|
273
|
+
# Linting
|
|
274
|
+
ruff check src/hpc_runner
|
|
275
|
+
ruff format src/hpc_runner
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## Documentation
|
|
279
|
+
|
|
280
|
+
- [Programmatic API Reference](docs/programmatic_api.md)
|
|
281
|
+
- [TUI Styling Guide](docs/TEXTUAL_STYLING_COOKBOOK.md)
|
|
282
|
+
|
|
283
|
+
## License
|
|
284
|
+
|
|
285
|
+
MIT License - see LICENSE file for details.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
hpc_runner/__init__.py,sha256=1xnewzCt8FVqseOG5PRmLbiMz0I8V8_TrTyIjW0Q8_A,1414
|
|
2
|
+
hpc_runner/_version.py,sha256=vYqoJTG51NOUmYyL0xt8asRK8vUT4lGAdal_EZ59mvw,704
|
|
3
|
+
hpc_runner/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
hpc_runner/cli/__init__.py,sha256=SkyeG7kzxbBGgO9fU96VvHjMjLaSdGI3KFVcqeUAYtg,25
|
|
5
|
+
hpc_runner/cli/cancel.py,sha256=8qRkPjlSGs6OGs7-_ilwpUlWpGQe7ch8aB_rEWiiLAI,901
|
|
6
|
+
hpc_runner/cli/config.py,sha256=dxNNOyuUyzuk9UUUaELp5WkhHrkZnXGi7zQkJdUl4YA,2920
|
|
7
|
+
hpc_runner/cli/main.py,sha256=Did1C3P0Cz7VjuR_a4a0dgHD9u_an_kxaBLNcMWYHR4,2061
|
|
8
|
+
hpc_runner/cli/monitor.py,sha256=aqr39IqwEUz_eczDLMw1dyfs_Gz6mtqKM2eMHI80f4g,698
|
|
9
|
+
hpc_runner/cli/run.py,sha256=fGK0gwIiQdUl0i2aC5FnwSs9MmuKF6ZZFgg7pn2NitU,9646
|
|
10
|
+
hpc_runner/cli/status.py,sha256=LMKvfIiR2U-r8kZOLw1L1-Xfli0mCtX-sSqI6_gy0i0,1957
|
|
11
|
+
hpc_runner/core/__init__.py,sha256=C6R3f_AWv5KOfZ3p2iJiht2B2r1LC62atHWntz51o9c,643
|
|
12
|
+
hpc_runner/core/config.py,sha256=UTbJnIveShGAS_YtS_tRT8H-_Jzq1qGidg3qSQZL6_Q,5184
|
|
13
|
+
hpc_runner/core/descriptors.py,sha256=xaoK3-YbVUcBdeumaY4JZ9noq-d5fqglIwZQqsWvYzU,3307
|
|
14
|
+
hpc_runner/core/exceptions.py,sha256=Z5JIzbpznCCx-wT4uZtHtwxstKZGIAxMubCJV64QzOc,889
|
|
15
|
+
hpc_runner/core/job.py,sha256=N_7HpDzxJipbJU0nVHOoYuaVAGjEXfMzgxJ9ve54mok,11052
|
|
16
|
+
hpc_runner/core/job_array.py,sha256=7VHoZHRzN5JvzWZ_e5pAMeTrNB7-OZw06A8548oK8_c,1595
|
|
17
|
+
hpc_runner/core/job_info.py,sha256=QE4iHH3uqYp4KdvZmBtfFUUaZfmPLkrF6LtlK4RuSJM,2858
|
|
18
|
+
hpc_runner/core/resources.py,sha256=ng1biVsXgGy6AWG50I50aC4LWB1pd60qFLpj5FjIpQc,1275
|
|
19
|
+
hpc_runner/core/result.py,sha256=UGw6ZRmdGI4oVD5ENzrSK72Igx7QNo-OJX9hLVyldp8,4914
|
|
20
|
+
hpc_runner/core/types.py,sha256=a6Yq7vhcpBwgA_hGZwGXiZgCy8wG87FIXBT3LN5qHw8,251
|
|
21
|
+
hpc_runner/schedulers/__init__.py,sha256=v55_DYgiigiFjXJhI7_XFtvxHoyDFWOntWRB9-HWMrM,1623
|
|
22
|
+
hpc_runner/schedulers/base.py,sha256=vhugT9lFrSZb8BMDO_x-h4nSF2oLg2nOvd347g3qfUY,6223
|
|
23
|
+
hpc_runner/schedulers/detection.py,sha256=b5_qdyroMQsvIf_DYY_RDoje6ozKLA3RS-fWWNR9qUU,1467
|
|
24
|
+
hpc_runner/schedulers/local/__init__.py,sha256=bM0RT5SBxs7TsGDUeUi--Z_vlVt9dgokJcftX92VE58,147
|
|
25
|
+
hpc_runner/schedulers/local/scheduler.py,sha256=tTq_5uZEIYCjK3PmPjI_iBAPijwUlTmSaLNoy4_AB5c,13310
|
|
26
|
+
hpc_runner/schedulers/local/templates/job.sh.j2,sha256=pv_R20o5G3LU-DIEIC7gpt7fYIZJmzkrIQEwmVkUWUI,522
|
|
27
|
+
hpc_runner/schedulers/sge/__init__.py,sha256=aR_jJD-YA0HOYPaBwW_CEwi3PASXY2x9sOfmrj6-cjM,144
|
|
28
|
+
hpc_runner/schedulers/sge/args.py,sha256=LBRj4UUDJ5jR8tEoCVF4ivjEKjqDI6LMvFsFzTgtOwk,6553
|
|
29
|
+
hpc_runner/schedulers/sge/parser.py,sha256=P6bG7II2icqSrnzgxGanPITV12X1zMvWYV04L6RIH2c,8381
|
|
30
|
+
hpc_runner/schedulers/sge/scheduler.py,sha256=-vz58MQzaJD97TqE4KfrnR3drLhQgHy8bpjpNwpHt2s,31998
|
|
31
|
+
hpc_runner/schedulers/sge/templates/batch.sh.j2,sha256=au-Hr7o55J1SutLLlpcTBJhRvQYHM4d9bSHk95u3nv4,1696
|
|
32
|
+
hpc_runner/schedulers/sge/templates/interactive.sh.j2,sha256=CY_hcmWoK8EuBNHmP7_lrfMf_i5BjZn8YY9Fi4ousZI,1622
|
|
33
|
+
hpc_runner/templates/__init__.py,sha256=kiaaYBS4QXfGie83SS0rfmZtlbyRUkGkR_yw04oExNQ,137
|
|
34
|
+
hpc_runner/templates/engine.py,sha256=XDW9C51rz9O2rcB3mpjVHQ0qkeG4386gXa8fwaDYsxs,1393
|
|
35
|
+
hpc_runner/tui/__init__.py,sha256=xuet6Iz1ZL6Ys5h95DMcuiapZNo8QA-sFU3R0NflbgE,136
|
|
36
|
+
hpc_runner/tui/app.py,sha256=rsiA2ViNGkfo6pWf2lvVRM3LVM1MunLB8CcNMLHRzso,16466
|
|
37
|
+
hpc_runner/tui/snapshot.py,sha256=sAcxdGaKsFXQMByPip-o1YwFaU-MLf_jGwDlZvEYTxY,5194
|
|
38
|
+
hpc_runner/tui/components/__init__.py,sha256=cS1VT2uhaWDq18-FvT9Hje_Uev7pI8WGFgWVNERfJMQ,303
|
|
39
|
+
hpc_runner/tui/components/detail_panel.py,sha256=3sRxO8J6ceBUctKm-LSF_aujIa63TEdWZJt2v08ae28,6983
|
|
40
|
+
hpc_runner/tui/components/filter_bar.py,sha256=v3YqUnieTzipJCaUHsVIcXc1VwTM3TorYBW-H6Ai5vo,4965
|
|
41
|
+
hpc_runner/tui/components/filter_popup.py,sha256=_car5ic8SS32183XWvbvVX8q1paNoX2Un-Ohy3z2vwo,10428
|
|
42
|
+
hpc_runner/tui/components/job_table.py,sha256=3gqYey0L9i2WInKl7Hknh31_E_PEPSKdFvVwSsG7uuY,9444
|
|
43
|
+
hpc_runner/tui/providers/__init__.py,sha256=iLzT7HR2ETSf6MxDw64yVn99kiHqzEDOHqNU7XLAEME,100
|
|
44
|
+
hpc_runner/tui/providers/jobs.py,sha256=YjhufHvBJu6QICIZLs5FhFBAcQMEyEhw-heSzYxYwvo,6340
|
|
45
|
+
hpc_runner/tui/screens/__init__.py,sha256=EoyZZGr_fruzDuDXtsKXyY5QhHbEFVbm820eiRtciBc,221
|
|
46
|
+
hpc_runner/tui/screens/confirm.py,sha256=ZBjrqcIk6f_5KGLzsSCfewZdyERnR0x2W2A34KYlkbI,2101
|
|
47
|
+
hpc_runner/tui/screens/job_details.py,sha256=B7KiZunhfM7QW3xVvmEBQnOB5CQfxYpH9Td0JC6M29A,7488
|
|
48
|
+
hpc_runner/tui/screens/log_viewer.py,sha256=II6B2Vj4KY-nx1wWWq_5K2gsmi6dSyQm-suaEzauEcM,5888
|
|
49
|
+
hpc_runner/tui/styles/monitor.tcss,sha256=-XJ_mF02AlaEuX81N6tkYKhKYDcBKYTDKXejJO5efkI,11349
|
|
50
|
+
hpc_runner/workflow/__init__.py,sha256=Y5h7wfnlWcav_f2USZaP6r5m7I5KFam8eEJGo4UqJ0w,221
|
|
51
|
+
hpc_runner/workflow/dependency.py,sha256=PjhgCurnlfcKYO_arlUDLCKOpwqq324l09Sj0v-iwOU,639
|
|
52
|
+
hpc_runner/workflow/pipeline.py,sha256=MYV95Kp-5m2YVxYDk_zIYUsyt31ctl7jnVA10F2OJgg,5540
|
|
53
|
+
hpc_runner-0.2.1.dist-info/METADATA,sha256=llf8Y-8fTDy3v0JfLXeBQkR7sG2Wjvs5cxh3xTAewEM,7015
|
|
54
|
+
hpc_runner-0.2.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
55
|
+
hpc_runner-0.2.1.dist-info/entry_points.txt,sha256=Ou3LsalLkY9mNOrUwyCDN8Q4PekM1K5h52hAU6fADk8,48
|
|
56
|
+
hpc_runner-0.2.1.dist-info/RECORD,,
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Generated by hpc-tools (SGE scheduler)
|
|
3
|
-
|
|
4
|
-
{% for directive in directives %}
|
|
5
|
-
{{ directive }}
|
|
6
|
-
{% endfor %}
|
|
7
|
-
|
|
8
|
-
# Exit on error
|
|
9
|
-
set -e
|
|
10
|
-
|
|
11
|
-
# Source module system if available
|
|
12
|
-
if [ -f /etc/profile.d/modules.sh ]; then
|
|
13
|
-
. /etc/profile.d/modules.sh
|
|
14
|
-
elif [ -f /usr/share/Modules/init/bash ]; then
|
|
15
|
-
. /usr/share/Modules/init/bash
|
|
16
|
-
fi
|
|
17
|
-
|
|
18
|
-
{% if job.modules_path %}
|
|
19
|
-
# Additional module paths
|
|
20
|
-
{% for path in job.modules_path %}
|
|
21
|
-
module use {{ path }}
|
|
22
|
-
{% endfor %}
|
|
23
|
-
{% endif %}
|
|
24
|
-
|
|
25
|
-
{% if job.modules %}
|
|
26
|
-
# Load modules
|
|
27
|
-
{% for mod in job.modules %}
|
|
28
|
-
module load {{ mod }}
|
|
29
|
-
{% endfor %}
|
|
30
|
-
{% endif %}
|
|
31
|
-
|
|
32
|
-
{% if job.workdir %}
|
|
33
|
-
# Change to working directory
|
|
34
|
-
cd {{ job.workdir }}
|
|
35
|
-
{% endif %}
|
|
36
|
-
|
|
37
|
-
# Execute command
|
|
38
|
-
{{ job.command }}
|
|
39
|
-
exit $?
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: hpc-runner
|
|
3
|
-
Version: 0.1.1
|
|
4
|
-
Summary: Unified HPC job submission across multiple schedulers
|
|
5
|
-
Project-URL: Homepage, https://github.com/sjalloq/hpc-runner
|
|
6
|
-
Project-URL: Repository, https://github.com/sjalloq/hpc-runner
|
|
7
|
-
Author: Shareef Jalloq
|
|
8
|
-
License-Expression: MIT
|
|
9
|
-
Keywords: cluster,hpc,job-submission,pbs,sge,slurm
|
|
10
|
-
Classifier: Development Status :: 3 - Alpha
|
|
11
|
-
Classifier: Environment :: Console
|
|
12
|
-
Classifier: Intended Audience :: Developers
|
|
13
|
-
Classifier: Intended Audience :: Science/Research
|
|
14
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
-
Classifier: Operating System :: POSIX :: Linux
|
|
16
|
-
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
-
Classifier: Topic :: System :: Clustering
|
|
21
|
-
Classifier: Topic :: System :: Distributed Computing
|
|
22
|
-
Requires-Python: >=3.10
|
|
23
|
-
Requires-Dist: jinja2>=3.0
|
|
24
|
-
Requires-Dist: rich-click>=1.7
|
|
25
|
-
Requires-Dist: tomli>=2.0; python_version < '3.11'
|
|
26
|
-
Provides-Extra: all
|
|
27
|
-
Requires-Dist: build; extra == 'all'
|
|
28
|
-
Requires-Dist: hatch-vcs; extra == 'all'
|
|
29
|
-
Requires-Dist: mypy; extra == 'all'
|
|
30
|
-
Requires-Dist: pytest-cov; extra == 'all'
|
|
31
|
-
Requires-Dist: pytest>=7.0; extra == 'all'
|
|
32
|
-
Requires-Dist: ruff; extra == 'all'
|
|
33
|
-
Requires-Dist: twine; extra == 'all'
|
|
34
|
-
Provides-Extra: dev
|
|
35
|
-
Requires-Dist: build; extra == 'dev'
|
|
36
|
-
Requires-Dist: hatch-vcs; extra == 'dev'
|
|
37
|
-
Requires-Dist: mypy; extra == 'dev'
|
|
38
|
-
Requires-Dist: pytest-cov; extra == 'dev'
|
|
39
|
-
Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
40
|
-
Requires-Dist: ruff; extra == 'dev'
|
|
41
|
-
Requires-Dist: twine; extra == 'dev'
|
|
42
|
-
Description-Content-Type: text/markdown
|
|
43
|
-
|
|
44
|
-
# hpc-tools
|
|
45
|
-
|
|
46
|
-
A collection of tools aimed at abstracting the intricacies of HPC job schedulers from the user. Having writen tools like this in every job I've had, I thought it about time to write one to rule them all. With some help from my mate Claude.
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
hpc_runner/__init__.py,sha256=1xnewzCt8FVqseOG5PRmLbiMz0I8V8_TrTyIjW0Q8_A,1414
|
|
2
|
-
hpc_runner/_version.py,sha256=m8HxkqoKGw_wAJtc4ZokpJKNLXqp4zwnNhbnfDtro7w,704
|
|
3
|
-
hpc_runner/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
hpc_runner/cli/__init__.py,sha256=SkyeG7kzxbBGgO9fU96VvHjMjLaSdGI3KFVcqeUAYtg,25
|
|
5
|
-
hpc_runner/cli/cancel.py,sha256=__Ftt1Em3Z2n3DRGRtI24lZWmwB6PAmTk5S_m9Sbyk0,913
|
|
6
|
-
hpc_runner/cli/config.py,sha256=CtOhCS9Rabho2cHY0kqV-MMMCUNrz9l_a3KTZBgH77I,2929
|
|
7
|
-
hpc_runner/cli/main.py,sha256=_afdoXkzb_0nTy9gZyQnUc3lQpWSm4s8jfFTIuJKU5c,1728
|
|
8
|
-
hpc_runner/cli/run.py,sha256=DWJaHrvTqw5wLxECpAFHNmCSGzYtYdqcwIIYdJMc32E,4457
|
|
9
|
-
hpc_runner/cli/status.py,sha256=4HFjXmmvU55pjMmGRAuoEk2PxIR8vZXiynV2IAeLBLU,1978
|
|
10
|
-
hpc_runner/core/__init__.py,sha256=euMbzZ7GCDlU3rcYW2NwTINgphwWab1j7WXWK0qaxjs,50
|
|
11
|
-
hpc_runner/core/config.py,sha256=UTbJnIveShGAS_YtS_tRT8H-_Jzq1qGidg3qSQZL6_Q,5184
|
|
12
|
-
hpc_runner/core/descriptors.py,sha256=jVi59YwdpiOi-i6gDgVC7MZmXE7wlzID9r3y32-yrBs,1820
|
|
13
|
-
hpc_runner/core/exceptions.py,sha256=SofeFRW6-KmR55HqsGCke2tgmGlKxqigzxL9ZS6CLJQ,590
|
|
14
|
-
hpc_runner/core/job.py,sha256=ba5iB_kV_zZ6cPKAvTAYR3JhYmrtH6H-kAziLL8NCiQ,5058
|
|
15
|
-
hpc_runner/core/job_array.py,sha256=7VHoZHRzN5JvzWZ_e5pAMeTrNB7-OZw06A8548oK8_c,1595
|
|
16
|
-
hpc_runner/core/resources.py,sha256=ng1biVsXgGy6AWG50I50aC4LWB1pd60qFLpj5FjIpQc,1275
|
|
17
|
-
hpc_runner/core/result.py,sha256=f1RSpfXUxkc3No3EkgWAckHMa0OiVfgdNvbUAbzPjbg,4701
|
|
18
|
-
hpc_runner/core/types.py,sha256=a6Yq7vhcpBwgA_hGZwGXiZgCy8wG87FIXBT3LN5qHw8,251
|
|
19
|
-
hpc_runner/schedulers/__init__.py,sha256=v55_DYgiigiFjXJhI7_XFtvxHoyDFWOntWRB9-HWMrM,1623
|
|
20
|
-
hpc_runner/schedulers/base.py,sha256=HOKLKR6xzZqknV72O47_jdAbf4vDL5-TfeL67L5uDo8,2272
|
|
21
|
-
hpc_runner/schedulers/detection.py,sha256=Xx-oGSycsho4Y_VH8AB7j1IN3ak8AdjK4pvxJjCDYaE,873
|
|
22
|
-
hpc_runner/schedulers/local/__init__.py,sha256=bM0RT5SBxs7TsGDUeUi--Z_vlVt9dgokJcftX92VE58,147
|
|
23
|
-
hpc_runner/schedulers/local/scheduler.py,sha256=tvSyakrGrKUCS1vjnp94iN2AgQItnLv5OlAS-C5lv7U,8942
|
|
24
|
-
hpc_runner/schedulers/local/templates/job.sh.j2,sha256=pv_R20o5G3LU-DIEIC7gpt7fYIZJmzkrIQEwmVkUWUI,522
|
|
25
|
-
hpc_runner/schedulers/sge/__init__.py,sha256=aR_jJD-YA0HOYPaBwW_CEwi3PASXY2x9sOfmrj6-cjM,144
|
|
26
|
-
hpc_runner/schedulers/sge/args.py,sha256=WX7ndhZ7_fYmdHPCW9fFzX297SGUuPouOqrUnm5uFk4,4286
|
|
27
|
-
hpc_runner/schedulers/sge/parser.py,sha256=qQnkVPXqVNO8CstZ-ZzFN4R9Te23kgTWGGznmiAC4II,5119
|
|
28
|
-
hpc_runner/schedulers/sge/scheduler.py,sha256=HpG1C9p4BEMO_Lr9WvvR6-IDbKT9UxoAKFjwXXFEFJ0,10683
|
|
29
|
-
hpc_runner/schedulers/sge/templates/job.sh.j2,sha256=MQBciPCjdm5tTWLCikpoNAqtEr-Et7C-NY-Oa0unvos,715
|
|
30
|
-
hpc_runner/templates/__init__.py,sha256=kiaaYBS4QXfGie83SS0rfmZtlbyRUkGkR_yw04oExNQ,137
|
|
31
|
-
hpc_runner/templates/engine.py,sha256=XDW9C51rz9O2rcB3mpjVHQ0qkeG4386gXa8fwaDYsxs,1393
|
|
32
|
-
hpc_runner/workflow/__init__.py,sha256=Y5h7wfnlWcav_f2USZaP6r5m7I5KFam8eEJGo4UqJ0w,221
|
|
33
|
-
hpc_runner/workflow/dependency.py,sha256=PjhgCurnlfcKYO_arlUDLCKOpwqq324l09Sj0v-iwOU,639
|
|
34
|
-
hpc_runner/workflow/pipeline.py,sha256=MYV95Kp-5m2YVxYDk_zIYUsyt31ctl7jnVA10F2OJgg,5540
|
|
35
|
-
hpc_runner-0.1.1.dist-info/METADATA,sha256=fgg-u9jTGySLbrlWTu8NlqUVA6za0dZRPz3dGnsb54E,1919
|
|
36
|
-
hpc_runner-0.1.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
37
|
-
hpc_runner-0.1.1.dist-info/entry_points.txt,sha256=Ou3LsalLkY9mNOrUwyCDN8Q4PekM1K5h52hAU6fADk8,48
|
|
38
|
-
hpc_runner-0.1.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|