simstack 0.2.0__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.
- simstack/__init__.py +0 -0
- simstack/_version.py +34 -0
- simstack/core/__init__.py +0 -0
- simstack/core/artifacts.py +447 -0
- simstack/core/asnyc_helper.py +14 -0
- simstack/core/config_file.py +60 -0
- simstack/core/context.py +167 -0
- simstack/core/data.py +139 -0
- simstack/core/definitions.py +21 -0
- simstack/core/engine.py +116 -0
- simstack/core/find_simstack_modules.py +43 -0
- simstack/core/hash.py +177 -0
- simstack/core/model_table.py +199 -0
- simstack/core/node.py +911 -0
- simstack/core/node_runner.py +254 -0
- simstack/core/node_table.py +380 -0
- simstack/core/recompute_artifacts.py +120 -0
- simstack/core/reset_db.py +12 -0
- simstack/core/resources.py +101 -0
- simstack/core/run_node.py +69 -0
- simstack/core/runner.py +435 -0
- simstack/core/simstack_result.py +41 -0
- simstack/core/submit_node.py +143 -0
- simstack/core/task_id.py +22 -0
- simstack/data/__init__.py +0 -0
- simstack/methods/__init__.py +0 -0
- simstack/methods/get_file.py +10 -0
- simstack/methods/multiple_executor.py +307 -0
- simstack/models/__init__.py +37 -0
- simstack/models/array_list.py +48 -0
- simstack/models/array_storage.py +54 -0
- simstack/models/artifact_models.py +127 -0
- simstack/models/base_types.py +208 -0
- simstack/models/charts_artifact.py +411 -0
- simstack/models/dataset.py +432 -0
- simstack/models/dataset_metadata.py +303 -0
- simstack/models/file_instance.py +77 -0
- simstack/models/file_list.py +321 -0
- simstack/models/files.py +229 -0
- simstack/models/log_entry_model.py +37 -0
- simstack/models/models.py +40 -0
- simstack/models/node_registry.py +105 -0
- simstack/models/pandas_model.py +210 -0
- simstack/models/parameters.py +388 -0
- simstack/models/pickle_models.py +311 -0
- simstack/models/runner_model.py +39 -0
- simstack/models/simple_table.py +32 -0
- simstack/models/simstack_model.py +97 -0
- simstack/models/slurm_info.py +17 -0
- simstack/models/table_artifact.py +87 -0
- simstack/util/__init__.py +0 -0
- simstack/util/async_zip_utils.py +18 -0
- simstack/util/cleaned_json_schema.py +20 -0
- simstack/util/config_reader.py +273 -0
- simstack/util/custom_model_dump.py +75 -0
- simstack/util/db.py +457 -0
- simstack/util/db_logger.py +117 -0
- simstack/util/default_from_dict.py +57 -0
- simstack/util/directory_iterator.py +216 -0
- simstack/util/file_hashing.py +68 -0
- simstack/util/files.py +396 -0
- simstack/util/find_python_files.py +33 -0
- simstack/util/generate_ui_schema.py +80 -0
- simstack/util/geometry_utils.py +118 -0
- simstack/util/get_module_path.py +26 -0
- simstack/util/git_pull.py +65 -0
- simstack/util/git_repository_status.py +93 -0
- simstack/util/import_module.py +65 -0
- simstack/util/importer.py +163 -0
- simstack/util/make_graph.py +107 -0
- simstack/util/make_table.py +827 -0
- simstack/util/minimal_route_finder.py +72 -0
- simstack/util/mock_db.py +144 -0
- simstack/util/module_path_checker.py +38 -0
- simstack/util/path_manager.py +234 -0
- simstack/util/project_root_finder.py +36 -0
- simstack/util/queue_watcher.py +262 -0
- simstack/util/route_finder.py +74 -0
- simstack/util/runner_util.py +162 -0
- simstack/util/safe_code_executor.py +194 -0
- simstack/util/sample_config.py +98 -0
- simstack/util/sensitive_content_filter.py +48 -0
- simstack/util/setup_logging.py +49 -0
- simstack/util/submit_to_watchdog.py +106 -0
- simstack/util/ui_tools.py +213 -0
- simstack-0.2.0.dist-info/METADATA +361 -0
- simstack-0.2.0.dist-info/RECORD +91 -0
- simstack-0.2.0.dist-info/WHEEL +5 -0
- simstack-0.2.0.dist-info/entry_points.txt +10 -0
- simstack-0.2.0.dist-info/licenses/LICENSE +21 -0
- simstack-0.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: simstack
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: A python based workflow engineering platform with a react-js UI
|
|
5
|
+
Author-email: Wolfgang Wenzel <wolfgang.wenzel@kit.edu>, Timo Strunk <timo.strunk@nanomatch.de>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://gitlab.kit.edu/kit/ag_wenzel/simstack-model/
|
|
8
|
+
Requires-Python: >=3.12
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Requires-Dist: odmantic<2,>=1.0.2
|
|
12
|
+
Requires-Dist: cloudpickle<4,>=3.1.1
|
|
13
|
+
Requires-Dist: coolname<3,>=2.2.0
|
|
14
|
+
Requires-Dist: nest-asyncio<2,>=1.6.0
|
|
15
|
+
Requires-Dist: numpy>=2.3.0
|
|
16
|
+
Requires-Dist: pandas>=2.3.3
|
|
17
|
+
Dynamic: license-file
|
|
18
|
+
|
|
19
|
+
## 1. Install Simstack II — 3-step lightning setup ⚡️
|
|
20
|
+
|
|
21
|
+
> **Goal:** create an isolated **`simstack`** environment, pull the model code, and satisfy every dependency in a single
|
|
22
|
+
> coffee break.
|
|
23
|
+
|
|
24
|
+
| What you’ll do | Why it matters |
|
|
25
|
+
|-----------------------------------------|----------------------------------------------------|
|
|
26
|
+
| 1 Create a project specific environment | Keeps your system Python pristine |
|
|
27
|
+
| 2 Install simstack |
|
|
28
|
+
| 3 Clone relevant simstack base packages | Gives you ready-made tasks, sample data, and tests |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
### Step 1 — Spin up the `simstack` environment 🐍
|
|
33
|
+
|
|
34
|
+
Choose your favorite Python **env manager**
|
|
35
|
+
|
|
36
|
+
The most modern managers are **pixi** for conda-style and **uv** for pip-style.
|
|
37
|
+
|
|
38
|
+
<details open>
|
|
39
|
+
<summary><strong>⬤ Recommended – Mamba (10× faster)</strong></summary>
|
|
40
|
+
|
|
41
|
+
Install **Mamba** if you don’t have it
|
|
42
|
+
See mamba [documentation](https://mamba.readthedocs.io/en/latest/) for Windows, Linux and macOS.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
mamba create -n simstack python=3.12 -y
|
|
46
|
+
mamba activate simstack
|
|
47
|
+
```
|
|
48
|
+
</details>
|
|
49
|
+
|
|
50
|
+
<details>
|
|
51
|
+
<summary><strong>⬤ micromamba – single-file binary</strong></summary>
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
micromamba create -n simstack python=3.12 -y
|
|
55
|
+
micromamba activate simstack
|
|
56
|
+
```
|
|
57
|
+
</details>
|
|
58
|
+
|
|
59
|
+
<details>
|
|
60
|
+
<summary><strong>⬤ Classic conda</strong></summary>
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
conda create -n simstack python=3.12 -y
|
|
64
|
+
conda activate simstack
|
|
65
|
+
```
|
|
66
|
+
</details>
|
|
67
|
+
|
|
68
|
+
**Heads-up**: Simstack II works with Python ≥ 3.12 (CPython 64-bit).
|
|
69
|
+
Older versions (<3.12) may miss tomllib support and fail at runtime.
|
|
70
|
+
|
|
71
|
+
### Step 2 — Install simstack 📦
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# activate the (simstack) env
|
|
75
|
+
python -m pip install --upgrade pip
|
|
76
|
+
pip install simstack
|
|
77
|
+
|
|
78
|
+
Just type `tree` in the terminal, if the **installation** succeeds, you should see a directory structure like the folder tree shown below.
|
|
79
|
+
|
|
80
|
+
### Step 3 — Clone subrepos for existing simstack packages 📦
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# activate the (simstack) env
|
|
84
|
+
python -m pip install --upgrade pip
|
|
85
|
+
pip install simstack
|
|
86
|
+
|
|
87
|
+
Just type `tree` in the terminal, if the **installation** succeeds, you should see a directory structure like the folder tree shown below.
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
### Step 2 — Install dependencies 📦
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# activate the (simstack) env
|
|
95
|
+
python -m pip install --upgrade pip
|
|
96
|
+
pip install simstack
|
|
97
|
+
|
|
98
|
+
Just type `tree` in the terminal, if the **installation** succeeds, you should see a directory structure like the folder tree shown below.
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
## 2. Configure Simstack II with `simstack.toml` ⚙️
|
|
105
|
+
|
|
106
|
+
Simstack II reads a single **TOML** file (`simstack.toml`) to learn
|
|
107
|
+
|
|
108
|
+
* which **resources** (local & remote) exist,
|
|
109
|
+
* how to reach your **MongoDB** backend,
|
|
110
|
+
* and where each host should place logs / artifacts.
|
|
111
|
+
|
|
112
|
+
> **Where should the file live?**
|
|
113
|
+
> Save it next in the folder simstack-model in both your local and HPC accounts.
|
|
114
|
+
> The CLI searches those paths automatically.
|
|
115
|
+
|
|
116
|
+
### 2.1 Minimal template
|
|
117
|
+
|
|
118
|
+
```toml
|
|
119
|
+
#######################################
|
|
120
|
+
# Global / shared parameters
|
|
121
|
+
#######################################
|
|
122
|
+
[parameters.common]
|
|
123
|
+
resources = ["local", "int-nano", "horeka", "justus", "self", "exchange", "uploads"]
|
|
124
|
+
database = "celso_data" # default DB
|
|
125
|
+
test_database = "celso_test_data" # used by `simstack selftest`
|
|
126
|
+
connection_string = "mongodb://<user>:<pass>@<host>:27017/" # ⬚ change!
|
|
127
|
+
|
|
128
|
+
#######################################
|
|
129
|
+
# Host-specific overrides
|
|
130
|
+
#######################################
|
|
131
|
+
# 1) Your own machine --------------------------------
|
|
132
|
+
[parameters.local]
|
|
133
|
+
ssh-key = "~/.ssh/id_rsa" # private key
|
|
134
|
+
resource = "local" # → maps to runners.local
|
|
135
|
+
workdir = "~/simstack/workflows" # absolute path
|
|
136
|
+
python_path = ["~/simstack/simstack-model",
|
|
137
|
+
"~/simstack/simstack-model/src"]
|
|
138
|
+
|
|
139
|
+
# 2) Remote upload node -----------------------------
|
|
140
|
+
[parameters.uploads]
|
|
141
|
+
ssh-key = "~/.ssh/id_rsa"
|
|
142
|
+
resource = "self"
|
|
143
|
+
workdir = "~/simstack/workflows"
|
|
144
|
+
python_path = ["~/simstack/simstack-model",
|
|
145
|
+
"~/simstack/simstack-model/src"]
|
|
146
|
+
|
|
147
|
+
# 3) Example HPC login node -------------------------
|
|
148
|
+
[parameters.int-nano]
|
|
149
|
+
ssh-key = "~/.ssh/id_rsa"
|
|
150
|
+
workdir = "/home/<user>/simstack"
|
|
151
|
+
python_path = ["/home/<user>/simstack/simstack-model",
|
|
152
|
+
"/home/<user>/simstack/simstack-model/src"]
|
|
153
|
+
environment_start = "mamba activate simstack" # run before each task
|
|
154
|
+
|
|
155
|
+
#######################################
|
|
156
|
+
# Internal web-server (rarely touched)
|
|
157
|
+
#######################################
|
|
158
|
+
[server]
|
|
159
|
+
port = 8000
|
|
160
|
+
SECRET_KEY = "<32-byte hex or env-var>" # ⬚ never commit real keys
|
|
161
|
+
upload_dir = "/srv/simstack/uploads" # Windows paths OK too
|
|
162
|
+
|
|
163
|
+
#######################################
|
|
164
|
+
# Canonical DNS names for hosts
|
|
165
|
+
#######################################
|
|
166
|
+
[hosts]
|
|
167
|
+
local = "localhost"
|
|
168
|
+
int-nano = "int-nano.int.kit.edu"
|
|
169
|
+
justus = "justus.int.kit.edu"
|
|
170
|
+
horeka = "horeka.int.kit.edu"
|
|
171
|
+
|
|
172
|
+
#######################################
|
|
173
|
+
# Directed data routes
|
|
174
|
+
#######################################
|
|
175
|
+
[[routes]]
|
|
176
|
+
source = "local" # where the artifact lives
|
|
177
|
+
target = "int-nano" # where you want it
|
|
178
|
+
host = "local" # node that **pushes** the data
|
|
179
|
+
|
|
180
|
+
[[routes]]
|
|
181
|
+
source = "int-nano"
|
|
182
|
+
target = "local"
|
|
183
|
+
host = "local"
|
|
184
|
+
|
|
185
|
+
# …repeat as needed
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## 3 Prepare *PYTHONPATH* locally & on every HPC account 📂
|
|
189
|
+
|
|
190
|
+
Add **both** the project root and its `src/` directory to `PYTHONPATH` so every Simstack II task can resolve imports no matter where it runs.
|
|
191
|
+
|
|
192
|
+
### 3.1 Create a helper script once (call it `set_pythonpath.sh`):
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
#!/usr/bin/env bash
|
|
196
|
+
# -----------------------------
|
|
197
|
+
# Adds the current repo + src/ to PYTHONPATH
|
|
198
|
+
# Call with: source set_pythonpath.sh
|
|
199
|
+
# -----------------------------
|
|
200
|
+
this_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
201
|
+
export PYTHONPATH="$this_dir:$this_dir/src${PYTHONPATH+:$PYTHONPATH}"
|
|
202
|
+
echo "PYTHONPATH = $PYTHONPATH"
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### 3.2 Make it executable & load it whenever you open a new shell:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
chmod +x set_pythonpath.sh # one-time
|
|
209
|
+
source /path/to/set_pythonpath.sh # every session, or add to ~/.bashrc
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 3.3 Copy the script to each HPC account (e.g. int-nano, horeka, …):
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
scp set_pythonpath.sh user@int-nano.int.kit.edu:~/simstack/
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## 4. Ready, Set, Workflow! 🏁
|
|
219
|
+
|
|
220
|
+
**Mission**: prime Simstack II so your very first workflow launches without a hiccup—DB seeded, nodes known, runner humming.
|
|
221
|
+
|
|
222
|
+
### 🥇 Step 1 — Initialize the database
|
|
223
|
+
|
|
224
|
+
Simstack keeps its model and node catalogue in MongoDB. Populate (or refresh) the tables whenever you pull a new commit:
|
|
225
|
+
|
|
226
|
+
```python!
|
|
227
|
+
# from the repo root
|
|
228
|
+
cd src/simstack/utils # ⇢ utility scripts live here
|
|
229
|
+
python model_table.py # 🚀 inserts/updates the “Models” collection
|
|
230
|
+
python node_table.py # 🚀 inserts/updates the “Nodes” collection
|
|
231
|
+
```
|
|
232
|
+
### 🥈 Step 2 — Re‑register nodes (WaNos) 🔄
|
|
233
|
+
|
|
234
|
+
Any time you change a **node definition**—be it locally or on an HPC cluster—you must (re)announce it to the control plane:
|
|
235
|
+
|
|
236
|
+
```python!
|
|
237
|
+
# ▸ Local workstation
|
|
238
|
+
python src/simstack/core/node.py # instantaneous
|
|
239
|
+
|
|
240
|
+
# ▸ On int‑nano (or another cluster head node)
|
|
241
|
+
ssh user@int-nano.int.kit.edu
|
|
242
|
+
python ~/simstack/src/simstack/core/node.py
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Why **WaNos**? Workflow Aware Nodes—nodes that tell Simstack exactly what they’re capable of.
|
|
246
|
+
|
|
247
|
+
### 🥉 Step 3 — Fire up the runner on int‑nano 🚀
|
|
248
|
+
|
|
249
|
+
```python!
|
|
250
|
+
ssh user@int-nano.int.kit.edu # 1️⃣ log in
|
|
251
|
+
source ~/simstack/set_pythonpath.sh # 2️⃣ expose src/ to PYTHONPATH
|
|
252
|
+
python src/simstack/core/runner.py --resource int-nano # 3️⃣ start runner
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
You should see something like:
|
|
256
|
+
```bash!
|
|
257
|
+
2025-04-24 11:26:58 - ConfigReader - INFO - Initializing ConfigReader with resource: local on database celso_data
|
|
258
|
+
2025-04-24 11:26:58 - ConfigReader - INFO - workdir: /home/celso/Desktop/Project/KIT/simstack/Files/simstack_workflows
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
The runner now listens for jobs assigned to the int-nano resource and inherits the correct PYTHONPATH so your code imports flawlessly.
|
|
262
|
+
|
|
263
|
+
```bash!
|
|
264
|
+
[Runner‑int‑nano] ⚡️ connected to broker
|
|
265
|
+
[Runner‑int‑nano] 💤 waiting for tasks (Ctrl‑C to exit)
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### 5. Hands‑On: binary_operations.py 🧮
|
|
269
|
+
|
|
270
|
+
Your environment is up, let's run a real Simstack workflow on your local machine.
|
|
271
|
+
|
|
272
|
+
### 5.1 What the code does
|
|
273
|
+
|
|
274
|
+
```python!
|
|
275
|
+
# simplified excerpt
|
|
276
|
+
a, b, c = 5, 10, 2 # sample inputs
|
|
277
|
+
add_result = a + b # → 15
|
|
278
|
+
multiply_result = add_result * c # → 30
|
|
279
|
+
print(multiply_result)
|
|
280
|
+
```
|
|
281
|
+
*Under the hood it uses the FloatData ODM model so the result is automatically stored in MongoDB with an ObjectId.*
|
|
282
|
+
|
|
283
|
+
### 5.2 Run it 🚀
|
|
284
|
+
|
|
285
|
+
```bash!
|
|
286
|
+
# stay inside your (simstack) env
|
|
287
|
+
cd simstack-model/examples # 1️⃣ go to examples directory
|
|
288
|
+
python binary_operations.py # 2️⃣ execute workflow script
|
|
289
|
+
```
|
|
290
|
+
Expected terminal output (the ObjectId will differ):
|
|
291
|
+
|
|
292
|
+
```bash!
|
|
293
|
+
id=ObjectId('680f3c149f39611649075d6a') value=30.0
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
🎉 **Congrats!** You’ve just:
|
|
297
|
+
|
|
298
|
+
**1.** Sent inputs through Simstack’s data‑model layer
|
|
299
|
+
|
|
300
|
+
**2.** Executed the adder ➜ multiplier chain
|
|
301
|
+
|
|
302
|
+
**3.** Persisted the final result in your configured MongoDB instance
|
|
303
|
+
|
|
304
|
+
Try changing the numbers in AddMultiplyInput(a, b, c) and re‑running to see different results. Feel free to explore other examples in the same folder or craft your own!
|
|
305
|
+
|
|
306
|
+
### 5.4 — Run *node_example.py* on **int-nano** via Slurm 🏎️💨
|
|
307
|
+
|
|
308
|
+
> **Mission:** Run `node_example.py` workflow in **int-nano** HPC cluster and let Simstack II generate & submit the Slurm job for you.
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
#### 🔑 Prerequisites
|
|
312
|
+
|
|
313
|
+
1. **Runner up & listening on int-nano**
|
|
314
|
+
```bash
|
|
315
|
+
# on the int-nano login node
|
|
316
|
+
ssh user@int-nano.int.kit.edu
|
|
317
|
+
source ~/simstack/set_pythonpath.sh # expose src/ to PYTHONPATH
|
|
318
|
+
python src/simstack/core/runner.py --resource int-nano
|
|
319
|
+
|
|
320
|
+
Leave this terminal open—your runner will watch the message broker for tasks targeting int-nano.
|
|
321
|
+
|
|
322
|
+
`node_example.py` available on your workstation (it lives in simstack-model/examples).
|
|
323
|
+
|
|
324
|
+
Slurm access on int-nano (the runner will create and submit the sbatch scripts for you).
|
|
325
|
+
|
|
326
|
+
### 🚀 Launch the workflow from your local machine
|
|
327
|
+
|
|
328
|
+
```python!
|
|
329
|
+
# still in (simstack) and inside simstack-model/examples on the local machine
|
|
330
|
+
python node_example.py
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
That single command does three things behind the scenes:
|
|
334
|
+
|
|
335
|
+
1. **Creates a task document** in MongoDB with resource="int-nano", queue="slurm".
|
|
336
|
+
|
|
337
|
+
2. **Signals the int-nano runner**, which in turn
|
|
338
|
+
|
|
339
|
+
* auto-generates an `id_num.err`, `id_num.out`, and `slurm_script.sh` file inside <workdir>/adder/ (see your simstack.toml)
|
|
340
|
+
* submits it with sbatch.
|
|
341
|
+
|
|
342
|
+
3. **Streams status** back to your local terminal until completion.
|
|
343
|
+
|
|
344
|
+
### 🖥️ Expected local console output
|
|
345
|
+
|
|
346
|
+
```bash!
|
|
347
|
+
task_id: 680f4ac265bb513834eeb92a created in read_db Task adder with 680f4ac265bb513834eeb92a is waiting for results
|
|
348
|
+
2025-04-28 11:30:47 - simstack.core.node - INFO - Task adder with task_id: 680f4ac265bb513834eeb92a completed remotely
|
|
349
|
+
2025-04-28 11:30:47 - simstack.core.node - INFO - Task adder with task_id: 680f4ac265bb513834eeb92a found with status TaskStatus.COMPLETED
|
|
350
|
+
2025-04-28 11:30:47 - simstack.core.node - INFO - Task adder with task_id: 680f4ac265bb513834eeb92a loaded outputs
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
Once you see TaskStatus.COMPLETED, the Slurm job finished on int-nano and the result document was synced back to your MongoDB.
|
|
354
|
+
|
|
355
|
+
Now you’ve successfully:
|
|
356
|
+
|
|
357
|
+
* Spun up a remote runner on int-nano.
|
|
358
|
+
* Queued a Slurm job without writing a single sbatch file yourself.
|
|
359
|
+
* Retrieved the output transparently through Simstack II’s data layer.
|
|
360
|
+
|
|
361
|
+
Tweak the numbers in the script, re-run, and watch new adder.sbatch files—and fresh Slurm job-IDs—appear in your adder/ folder. Enjoy the speed-up! ⚡️
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
simstack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
simstack/_version.py,sha256=Dg8AmJomLVpjKL6prJylOONZAPRtB86LOce7dorQS_A,704
|
|
3
|
+
simstack/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
simstack/core/artifacts.py,sha256=63R5qgX5vQ3KKK__zdgcjeVO4rYC1DX05OtH-bRRTuM,17654
|
|
5
|
+
simstack/core/asnyc_helper.py,sha256=Qm_S3aYValevB1QmdpRV8uDBPUMTgahKGbFIMgYnXLU,232
|
|
6
|
+
simstack/core/config_file.py,sha256=I-WCvZfHSE_PafFaQrhGwqWZEblE0GWNIARzpXyJhdY,1846
|
|
7
|
+
simstack/core/context.py,sha256=H95_JIp-Wnzqc1IY31PzlbYUnkyVz6c8C7tJmJyOVRs,6132
|
|
8
|
+
simstack/core/data.py,sha256=wFoK8ITNIitu5N5RbFhNBEqJW3sJ47R7IPdi3ocgUYQ,5125
|
|
9
|
+
simstack/core/definitions.py,sha256=HH7CapgG4cbI8igfrOwrMY20XXo_I-_bazFbbAEjAFM,451
|
|
10
|
+
simstack/core/engine.py,sha256=8svvcYcCwvN-Ok14ZceyER9HIDS87IqBnEMUw1d0UCc,4196
|
|
11
|
+
simstack/core/find_simstack_modules.py,sha256=L76sPM6b_VdUfAX3oQfPzv7rYJT0ETVHrWBPqZrr85I,1354
|
|
12
|
+
simstack/core/hash.py,sha256=MefH2TqbpV9I2CcmeUQImu67ohVePoatykYSY-lBRmw,5846
|
|
13
|
+
simstack/core/model_table.py,sha256=Zqom7BP8jc-J179bnP4zGkkzgja1Exhm4SMfi_sXX7Q,7735
|
|
14
|
+
simstack/core/node.py,sha256=VGFcYXO-TpmZtjZT9WmEz6qcvnXPKSzhMTWvb78OjUY,38442
|
|
15
|
+
simstack/core/node_runner.py,sha256=I6YqqHBv0djzbfKybhlKwvpz30ZGNvHcPoX1rNrKG90,10048
|
|
16
|
+
simstack/core/node_table.py,sha256=OzUoEUzGFCRbzkYIcBprgtVqdfU8EC-hGr1H2AUSEXI,15189
|
|
17
|
+
simstack/core/recompute_artifacts.py,sha256=VY1xLgnqiN6aYB7zwajj8-7A0jRghFdZ_xQIl-sEixE,4742
|
|
18
|
+
simstack/core/reset_db.py,sha256=VRersUYZBbolPJ_LJz-Rc_m8x8Z5UCNmW45SPqSpw-E,198
|
|
19
|
+
simstack/core/resources.py,sha256=lYPvukjdK03q0QWZeqcpCRGYYd0c3V3qU0tPK6Ftfuk,3350
|
|
20
|
+
simstack/core/run_node.py,sha256=uYbJNKS5o26x5NsFhuL7f1InNL3Fn1qRZsF8G5MSKnw,2346
|
|
21
|
+
simstack/core/runner.py,sha256=8e_B_VwEYlFR-Nanr4tlsN06pdyGNicvz4vhXRZTXRY,17153
|
|
22
|
+
simstack/core/simstack_result.py,sha256=EGMBN9qcoBAmaKYLVirwVhuB0cLTRqB8Qy2V6FfmXEo,1782
|
|
23
|
+
simstack/core/submit_node.py,sha256=Vxtyjnlf6SSTnF63OwrZREbnMEPI6iaEvcCWCE1Y_Jw,6718
|
|
24
|
+
simstack/core/task_id.py,sha256=HZGngrWl2JQlQm9xTRHzA2cubdcNLxWKiuBjz7S8Nn8,613
|
|
25
|
+
simstack/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
+
simstack/methods/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
+
simstack/methods/get_file.py,sha256=nmn8GxbImt159FtIGNhXUIijHOivMgtuusu73XkFSKM,336
|
|
28
|
+
simstack/methods/multiple_executor.py,sha256=6nj-smUCUCod6OP0tvROe5xSI1OaXWpEyLlWE2m-s2c,10640
|
|
29
|
+
simstack/models/__init__.py,sha256=6SD6oMLVP8drIfCqOZgFZj6pGShYhgZfkpLA-OCjDYI,753
|
|
30
|
+
simstack/models/array_list.py,sha256=X4FL7PXOAmYlU45Uh76w9n_QQyf7BSQGdw1pe-0qCYs,1411
|
|
31
|
+
simstack/models/array_storage.py,sha256=wAK7Hq8Lccb5mOsfugH0fQXa7ZZppIpL-ogCLmD7Mxk,1511
|
|
32
|
+
simstack/models/artifact_models.py,sha256=pbNKeIJOYFBMibN0qgaUn0oxOBLZHksv1iTuSQvQJbU,4109
|
|
33
|
+
simstack/models/base_types.py,sha256=TWhbLd9ueX-SD9LZXFeR14k0E7ED-gvh4HCni60Ai78,5047
|
|
34
|
+
simstack/models/charts_artifact.py,sha256=0AFh8F5Wd47toWnXjotzXtgWvWKwyb17-lwGPGzPY1Q,13574
|
|
35
|
+
simstack/models/dataset.py,sha256=r6TZomcZWVxkI7n6Pi22gdjoa9qCzqP7YIZdKnB05nU,14947
|
|
36
|
+
simstack/models/dataset_metadata.py,sha256=b-6PI7BEwl9W1bJRgYsSIVSoKKkv5KsGwBPSQNHjawA,11377
|
|
37
|
+
simstack/models/file_instance.py,sha256=H-bCUlZc74JK07taMxDUyCUZQPJIGJDb16D3_C40ZSE,2907
|
|
38
|
+
simstack/models/file_list.py,sha256=ENE9EdIlJSwpJQdNb3c66Sncm-0U_AW14nROeCtRLdc,10059
|
|
39
|
+
simstack/models/files.py,sha256=T_IKrtVW0tAcMuKBeqVBacLf70DnGbEumD_RMaFmwnA,8814
|
|
40
|
+
simstack/models/log_entry_model.py,sha256=YMr48-LCWPLNRhquTAGjpuJT79WF0iXaWND34Gy5CLM,1027
|
|
41
|
+
simstack/models/models.py,sha256=ZR-7GhG-k2a4cGy8NDRc5JLuUVHE0JEgJbTHTsWY6vc,1123
|
|
42
|
+
simstack/models/node_registry.py,sha256=LoimDvEmegMBx7Z7An9ZFxSUJNuTCTsu-3DWlAVvo-Y,4632
|
|
43
|
+
simstack/models/pandas_model.py,sha256=eWxPYqNmg8gqSE6-hi01A68dyPnZqiOk0MOtwdp53GA,6787
|
|
44
|
+
simstack/models/parameters.py,sha256=FOv85MjuUkKgl9fg-C3nxvnGFJhdv5eusMDspM9YtnE,13649
|
|
45
|
+
simstack/models/pickle_models.py,sha256=Zzcr9Rm-qO2SVXsRMyloA-QsJ1Bn8irySnoA6WP4Ogs,10958
|
|
46
|
+
simstack/models/runner_model.py,sha256=SC9bycwToarhThq2v1hXu_MRbpsuznis-OEXETDjVII,1043
|
|
47
|
+
simstack/models/simple_table.py,sha256=17Z3bgQb6hDZe-2QNtETUrJjkirSLqgehLeN1G96_dM,865
|
|
48
|
+
simstack/models/simstack_model.py,sha256=-obr3Fltf3Q43bxcAgzqBM9w8v7wFjujcj1D88la4YU,3464
|
|
49
|
+
simstack/models/slurm_info.py,sha256=YT2qbIPfJDmYsy8YpcGrDYAQRmvkS0TI00eL9TrTUeo,304
|
|
50
|
+
simstack/models/table_artifact.py,sha256=-LuJKQGFNWgZiemQf5-Ifofn3drmY7-nAD0awvHhB6M,4212
|
|
51
|
+
simstack/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
|
+
simstack/util/async_zip_utils.py,sha256=qW6fZPCdRqQNCl2lCBH_FSV7AyiMiy-4VendkdgK0MI,588
|
|
53
|
+
simstack/util/cleaned_json_schema.py,sha256=d_rZnlsiyy2Q90j2OVMILNze08PD3jl8OJ9yjn0ECIU,706
|
|
54
|
+
simstack/util/config_reader.py,sha256=rV493AI1DkQtM9tdIalvcBh_6hP-q2rEarRxzQI2Nsg,9826
|
|
55
|
+
simstack/util/custom_model_dump.py,sha256=M1GsS20y_9E6DMGRfNlyhxQHEn2pkUtIgFCo0IwMXn0,2726
|
|
56
|
+
simstack/util/db.py,sha256=7r4xlNWGbm5z4r94QSsr6DpT-GeX7ZecY685p20S5W4,15398
|
|
57
|
+
simstack/util/db_logger.py,sha256=BqlI0z11j5bedAVIm5-Zh7nzNZkef4_MHD9VAxLlDBM,3991
|
|
58
|
+
simstack/util/default_from_dict.py,sha256=IqjQwFSm9YYE8jFJxD-9IZPDgzaRU5YGOfQie4tKJoc,2111
|
|
59
|
+
simstack/util/directory_iterator.py,sha256=j7W7PjlUZbKkuCocjTSegKlaCBy1WigXd6hZv58AtGg,6609
|
|
60
|
+
simstack/util/file_hashing.py,sha256=VvTdeoyQljbB0KT35GGWaw4N93MpQG4Jf_-qnOrHILQ,1743
|
|
61
|
+
simstack/util/files.py,sha256=B2TlgKLo01MGHFO3OPwuAop9shGfLYJUXBDp2NECAzo,13736
|
|
62
|
+
simstack/util/find_python_files.py,sha256=MkEqkQYmiXdYsbGi3Y9Dj2FMS2QatqR5J57eQm-ep0s,982
|
|
63
|
+
simstack/util/generate_ui_schema.py,sha256=AcvWH36XaeYBvt9axzaN6Gj8RYpknAXxPwvNr4ftWhU,3320
|
|
64
|
+
simstack/util/geometry_utils.py,sha256=XcvamOKUXcggm-9od558k4Oyr977cKcxz9QVSS4tTDc,3631
|
|
65
|
+
simstack/util/get_module_path.py,sha256=F-srkX8wRfK9i6cQgtopMPPeoD4OyYE7pXR_XaNpcjY,997
|
|
66
|
+
simstack/util/git_pull.py,sha256=by_JoLhxzZxWG111XE04PQkP8itf6gSAOGI65hy8wyg,2149
|
|
67
|
+
simstack/util/git_repository_status.py,sha256=0DgmyQUVPPqI6MHwOL3Jjudkak3jSxxVYRVWX5IxQ7s,3218
|
|
68
|
+
simstack/util/import_module.py,sha256=5-jmKFYSmK-13F9gH9xnhO--0RhSgtBdyAqXbe0nhXY,2053
|
|
69
|
+
simstack/util/importer.py,sha256=6K5wg-xwnqZqZmjmnr2lNr5AamflZxtgTebghUc1fDk,6245
|
|
70
|
+
simstack/util/make_graph.py,sha256=1Zih7EQY5W_7jTi1RUllRUv-YbcMeXwOONo-vq9wTH8,3630
|
|
71
|
+
simstack/util/make_table.py,sha256=sAfVdbB2kmLky_LXYn6vWSCoX_XbjouBE85YgWR6xTw,31955
|
|
72
|
+
simstack/util/minimal_route_finder.py,sha256=OJbasiYgnltASAu1TaCCEnPoFvoPrTiIaU8JIi0efTI,2041
|
|
73
|
+
simstack/util/mock_db.py,sha256=8uufj-qhUAV7HJvhIWPRER6CfrZu5SFK9MIc3BTwNao,4853
|
|
74
|
+
simstack/util/module_path_checker.py,sha256=9NJHtLIACrbFVC5stMlskKb2et2rUqccoL8aDwkfItI,1415
|
|
75
|
+
simstack/util/path_manager.py,sha256=LAjaEDpUVnBEcPZmbHT21nPboYwrvQq8GoOeBfHvm38,7745
|
|
76
|
+
simstack/util/project_root_finder.py,sha256=0ZH72NrfvjDpCQxB6TTyjCQMv2X_BlzbAALFBdsYPaE,1215
|
|
77
|
+
simstack/util/queue_watcher.py,sha256=5I2zI5Pofw9tXt832Etz6dTfJkzYEVg-SgCAK6Ce6o8,8841
|
|
78
|
+
simstack/util/route_finder.py,sha256=NNylq4lztd2qJ8kqs8DBsCOyj3FOCrmh2EU0EA4pR7Y,2112
|
|
79
|
+
simstack/util/runner_util.py,sha256=BiO3kZVQjEd7WdIikrne39s1DcLkHzgq4pPndSUna2Q,5627
|
|
80
|
+
simstack/util/safe_code_executor.py,sha256=1F9WZWW3qby3zWdHHVi2cb6NG9ZeZWL_3pizTF1OHd0,6467
|
|
81
|
+
simstack/util/sample_config.py,sha256=Q1cwrzoPghV5ff3VRdN1YhkLirixXlf6OGjaR06JFdI,3541
|
|
82
|
+
simstack/util/sensitive_content_filter.py,sha256=RHeLtBAPrwKYUL2fn9HzjjHw_YlDkNhRdi2ISw-8a1g,1695
|
|
83
|
+
simstack/util/setup_logging.py,sha256=AYI17k8zBMCSglhdwio-1BsaUdWs3N3S4euvOupEpD0,1629
|
|
84
|
+
simstack/util/submit_to_watchdog.py,sha256=R6cH4R2KY8UKyjcn4u7Z6u0LxH50NYeS7LXlRN85cpM,2937
|
|
85
|
+
simstack/util/ui_tools.py,sha256=iSO6z6kNnJZQ6kqbKAv8pjuUB4hde95iQpynnfvE9js,7109
|
|
86
|
+
simstack-0.2.0.dist-info/licenses/LICENSE,sha256=H5wo5y-DywFxjVbYr5YHwNpTTfI1eh0ztz-xQwU92mw,1080
|
|
87
|
+
simstack-0.2.0.dist-info/METADATA,sha256=zmDQyyz6ZOI1kkRLlHs8VmkELI-WJ71qFWz5bt-hYgo,12478
|
|
88
|
+
simstack-0.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
89
|
+
simstack-0.2.0.dist-info/entry_points.txt,sha256=779MFBByo0AjijU-rFcYeYaQLY45TmKEnUm6-DoAgqg,439
|
|
90
|
+
simstack-0.2.0.dist-info/top_level.txt,sha256=-tfARSqXVVKmSYiL_cknn5ZEvohMhvoWXOavCmWFN9A,9
|
|
91
|
+
simstack-0.2.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
[console_scripts]
|
|
2
|
+
create_model_table = simstack.core.model_table:create_model_table_main
|
|
3
|
+
create_node_table = simstack.core.node_table:create_node_table_main
|
|
4
|
+
run_node = simstack.core.run_node:run_node_main
|
|
5
|
+
simstack_runner = simstack.core.runner:runner_main
|
|
6
|
+
simstack_write_sample_config = simstack.util.sample_config:sample_config_writer_entrypoint
|
|
7
|
+
|
|
8
|
+
[simstack.modules]
|
|
9
|
+
applicatio_modules = simstack.methods
|
|
10
|
+
example_modules = simstack.models
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Wolfgang Wenzel
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the “Software”), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
simstack
|