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.
Files changed (91) hide show
  1. simstack/__init__.py +0 -0
  2. simstack/_version.py +34 -0
  3. simstack/core/__init__.py +0 -0
  4. simstack/core/artifacts.py +447 -0
  5. simstack/core/asnyc_helper.py +14 -0
  6. simstack/core/config_file.py +60 -0
  7. simstack/core/context.py +167 -0
  8. simstack/core/data.py +139 -0
  9. simstack/core/definitions.py +21 -0
  10. simstack/core/engine.py +116 -0
  11. simstack/core/find_simstack_modules.py +43 -0
  12. simstack/core/hash.py +177 -0
  13. simstack/core/model_table.py +199 -0
  14. simstack/core/node.py +911 -0
  15. simstack/core/node_runner.py +254 -0
  16. simstack/core/node_table.py +380 -0
  17. simstack/core/recompute_artifacts.py +120 -0
  18. simstack/core/reset_db.py +12 -0
  19. simstack/core/resources.py +101 -0
  20. simstack/core/run_node.py +69 -0
  21. simstack/core/runner.py +435 -0
  22. simstack/core/simstack_result.py +41 -0
  23. simstack/core/submit_node.py +143 -0
  24. simstack/core/task_id.py +22 -0
  25. simstack/data/__init__.py +0 -0
  26. simstack/methods/__init__.py +0 -0
  27. simstack/methods/get_file.py +10 -0
  28. simstack/methods/multiple_executor.py +307 -0
  29. simstack/models/__init__.py +37 -0
  30. simstack/models/array_list.py +48 -0
  31. simstack/models/array_storage.py +54 -0
  32. simstack/models/artifact_models.py +127 -0
  33. simstack/models/base_types.py +208 -0
  34. simstack/models/charts_artifact.py +411 -0
  35. simstack/models/dataset.py +432 -0
  36. simstack/models/dataset_metadata.py +303 -0
  37. simstack/models/file_instance.py +77 -0
  38. simstack/models/file_list.py +321 -0
  39. simstack/models/files.py +229 -0
  40. simstack/models/log_entry_model.py +37 -0
  41. simstack/models/models.py +40 -0
  42. simstack/models/node_registry.py +105 -0
  43. simstack/models/pandas_model.py +210 -0
  44. simstack/models/parameters.py +388 -0
  45. simstack/models/pickle_models.py +311 -0
  46. simstack/models/runner_model.py +39 -0
  47. simstack/models/simple_table.py +32 -0
  48. simstack/models/simstack_model.py +97 -0
  49. simstack/models/slurm_info.py +17 -0
  50. simstack/models/table_artifact.py +87 -0
  51. simstack/util/__init__.py +0 -0
  52. simstack/util/async_zip_utils.py +18 -0
  53. simstack/util/cleaned_json_schema.py +20 -0
  54. simstack/util/config_reader.py +273 -0
  55. simstack/util/custom_model_dump.py +75 -0
  56. simstack/util/db.py +457 -0
  57. simstack/util/db_logger.py +117 -0
  58. simstack/util/default_from_dict.py +57 -0
  59. simstack/util/directory_iterator.py +216 -0
  60. simstack/util/file_hashing.py +68 -0
  61. simstack/util/files.py +396 -0
  62. simstack/util/find_python_files.py +33 -0
  63. simstack/util/generate_ui_schema.py +80 -0
  64. simstack/util/geometry_utils.py +118 -0
  65. simstack/util/get_module_path.py +26 -0
  66. simstack/util/git_pull.py +65 -0
  67. simstack/util/git_repository_status.py +93 -0
  68. simstack/util/import_module.py +65 -0
  69. simstack/util/importer.py +163 -0
  70. simstack/util/make_graph.py +107 -0
  71. simstack/util/make_table.py +827 -0
  72. simstack/util/minimal_route_finder.py +72 -0
  73. simstack/util/mock_db.py +144 -0
  74. simstack/util/module_path_checker.py +38 -0
  75. simstack/util/path_manager.py +234 -0
  76. simstack/util/project_root_finder.py +36 -0
  77. simstack/util/queue_watcher.py +262 -0
  78. simstack/util/route_finder.py +74 -0
  79. simstack/util/runner_util.py +162 -0
  80. simstack/util/safe_code_executor.py +194 -0
  81. simstack/util/sample_config.py +98 -0
  82. simstack/util/sensitive_content_filter.py +48 -0
  83. simstack/util/setup_logging.py +49 -0
  84. simstack/util/submit_to_watchdog.py +106 -0
  85. simstack/util/ui_tools.py +213 -0
  86. simstack-0.2.0.dist-info/METADATA +361 -0
  87. simstack-0.2.0.dist-info/RECORD +91 -0
  88. simstack-0.2.0.dist-info/WHEEL +5 -0
  89. simstack-0.2.0.dist-info/entry_points.txt +10 -0
  90. simstack-0.2.0.dist-info/licenses/LICENSE +21 -0
  91. 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,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -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