Metadata-Version: 2.4
Name: hpc_funcs
Version: 1.0.5
Summary: HPC utility functions
License: MIT
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: jinja2
Requires-Dist: tqdm
Provides-Extra: dev
Requires-Dist: ruff; extra == "dev"
Requires-Dist: ty; extra == "dev"
Requires-Dist: pip; extra == "dev"
Requires-Dist: pre-commit; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: pandas; extra == "dev"
Requires-Dist: twine; extra == "dev"
Requires-Dist: build; extra == "dev"
Requires-Dist: monkeytype; extra == "dev"
Dynamic: license-file

# hpc_funcs

Python utilities for interacting with HPC clusters — shell execution, environment management, LMOD module system, and UGE scheduler.

## Install

```bash
pip install hpc_funcs
```

## Usage

### LMOD

Want to use LMOD to load modules within a python environment? For example in a notebook?

```python
from hpc_funcs import lmod

# Load a module and apply env changes to current process
lmod.use("/folder/with/modules")
lmod.load("program")
```

### UGE (Univa Grid Engine)

UGE is not the most popular scheduler, so having pythonic interface is very convenient.

```python
from hpc_funcs.schedulers.uge import submission, qstat, qacct, qdel

# Generate and submit a job script
script = submission.generate_script(
    cmd="python run.py",
    name="myjob",
    cores=8,
    mem="16G",
    hours=4,
)
script_path = submission.write_script(script, directory="/tmp/jobs")
job_id = submission.submit_script(script_path)

# Monitor status
jobs = qstat.get_qstat_json()

# Fetch accounting info after completion
info = qacct.get_job_accounting(job_id)
```
