slurmforge 0.1.0__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.
Files changed (400) hide show
  1. slurmforge-0.1.0/LICENSE +21 -0
  2. slurmforge-0.1.0/PKG-INFO +716 -0
  3. slurmforge-0.1.0/README.md +663 -0
  4. slurmforge-0.1.0/pyproject.toml +74 -0
  5. slurmforge-0.1.0/setup.cfg +4 -0
  6. slurmforge-0.1.0/src/slurmforge/__init__.py +7 -0
  7. slurmforge-0.1.0/src/slurmforge/cli/__init__.py +1 -0
  8. slurmforge-0.1.0/src/slurmforge/cli/common.py +95 -0
  9. slurmforge-0.1.0/src/slurmforge/cli/examples.py +50 -0
  10. slurmforge-0.1.0/src/slurmforge/cli/generate.py +102 -0
  11. slurmforge-0.1.0/src/slurmforge/cli/init.py +148 -0
  12. slurmforge-0.1.0/src/slurmforge/cli/init_wizard.py +80 -0
  13. slurmforge-0.1.0/src/slurmforge/cli/replay.py +102 -0
  14. slurmforge-0.1.0/src/slurmforge/cli/rerun.py +76 -0
  15. slurmforge-0.1.0/src/slurmforge/cli/status.py +85 -0
  16. slurmforge-0.1.0/src/slurmforge/cli/validate.py +108 -0
  17. slurmforge-0.1.0/src/slurmforge/errors.py +29 -0
  18. slurmforge-0.1.0/src/slurmforge/example_configs.py +70 -0
  19. slurmforge-0.1.0/src/slurmforge/examples/__init__.py +1 -0
  20. slurmforge-0.1.0/src/slurmforge/examples/adapter_hpc.yaml +67 -0
  21. slurmforge-0.1.0/src/slurmforge/examples/adapter_minimal.yaml +14 -0
  22. slurmforge-0.1.0/src/slurmforge/examples/adapter_starter.yaml +60 -0
  23. slurmforge-0.1.0/src/slurmforge/examples/command_hpc.yaml +63 -0
  24. slurmforge-0.1.0/src/slurmforge/examples/command_minimal.yaml +9 -0
  25. slurmforge-0.1.0/src/slurmforge/examples/command_starter.yaml +56 -0
  26. slurmforge-0.1.0/src/slurmforge/examples/model_registry.yaml +7 -0
  27. slurmforge-0.1.0/src/slurmforge/examples/registry_hpc.yaml +86 -0
  28. slurmforge-0.1.0/src/slurmforge/examples/registry_starter.yaml +64 -0
  29. slurmforge-0.1.0/src/slurmforge/examples/script_hpc.yaml +104 -0
  30. slurmforge-0.1.0/src/slurmforge/examples/script_starter.yaml +62 -0
  31. slurmforge-0.1.0/src/slurmforge/execution/__init__.py +1 -0
  32. slurmforge-0.1.0/src/slurmforge/execution/artifacts/__init__.py +23 -0
  33. slurmforge-0.1.0/src/slurmforge/execution/artifacts/api.py +18 -0
  34. slurmforge-0.1.0/src/slurmforge/execution/artifacts/cli.py +52 -0
  35. slurmforge-0.1.0/src/slurmforge/execution/artifacts/copier.py +40 -0
  36. slurmforge-0.1.0/src/slurmforge/execution/artifacts/discovery.py +61 -0
  37. slurmforge-0.1.0/src/slurmforge/execution/artifacts/manifest.py +24 -0
  38. slurmforge-0.1.0/src/slurmforge/execution/artifacts/sync.py +125 -0
  39. slurmforge-0.1.0/src/slurmforge/execution/run_plan/__init__.py +18 -0
  40. slurmforge-0.1.0/src/slurmforge/execution/run_plan/api.py +42 -0
  41. slurmforge-0.1.0/src/slurmforge/execution/run_plan/cli.py +32 -0
  42. slurmforge-0.1.0/src/slurmforge/execution/run_plan/helper_bins.py +25 -0
  43. slurmforge-0.1.0/src/slurmforge/execution/run_plan/loader.py +47 -0
  44. slurmforge-0.1.0/src/slurmforge/execution/run_plan/post_run.py +20 -0
  45. slurmforge-0.1.0/src/slurmforge/execution/run_plan/shell_runner.py +44 -0
  46. slurmforge-0.1.0/src/slurmforge/execution/write_attempt_result.py +59 -0
  47. slurmforge-0.1.0/src/slurmforge/execution/write_train_outputs.py +59 -0
  48. slurmforge-0.1.0/src/slurmforge/identity.py +19 -0
  49. slurmforge-0.1.0/src/slurmforge/launcher.py +36 -0
  50. slurmforge-0.1.0/src/slurmforge/model_support/__init__.py +23 -0
  51. slurmforge-0.1.0/src/slurmforge/model_support/argparse_introspect.py +129 -0
  52. slurmforge-0.1.0/src/slurmforge/model_support/catalog/__init__.py +27 -0
  53. slurmforge-0.1.0/src/slurmforge/model_support/catalog/api.py +24 -0
  54. slurmforge-0.1.0/src/slurmforge/model_support/catalog/canonicalize.py +24 -0
  55. slurmforge-0.1.0/src/slurmforge/model_support/catalog/codecs.py +24 -0
  56. slurmforge-0.1.0/src/slurmforge/model_support/catalog/merge.py +50 -0
  57. slurmforge-0.1.0/src/slurmforge/model_support/catalog/models.py +29 -0
  58. slurmforge-0.1.0/src/slurmforge/model_support/catalog/registry_loader.py +62 -0
  59. slurmforge-0.1.0/src/slurmforge/model_support/catalog/resolver.py +176 -0
  60. slurmforge-0.1.0/src/slurmforge/model_support/gpu_estimator.py +324 -0
  61. slurmforge-0.1.0/src/slurmforge/pipeline/__init__.py +29 -0
  62. slurmforge-0.1.0/src/slurmforge/pipeline/checkpoints/__init__.py +23 -0
  63. slurmforge-0.1.0/src/slurmforge/pipeline/checkpoints/api.py +21 -0
  64. slurmforge-0.1.0/src/slurmforge/pipeline/checkpoints/codec.py +22 -0
  65. slurmforge-0.1.0/src/slurmforge/pipeline/checkpoints/discovery.py +37 -0
  66. slurmforge-0.1.0/src/slurmforge/pipeline/checkpoints/models.py +26 -0
  67. slurmforge-0.1.0/src/slurmforge/pipeline/checkpoints/selection.py +46 -0
  68. slurmforge-0.1.0/src/slurmforge/pipeline/checkpoints/store.py +29 -0
  69. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/__init__.py +23 -0
  70. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/api.py +96 -0
  71. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/base.py +83 -0
  72. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/config_pass.py +77 -0
  73. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/diagnostics.py +43 -0
  74. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/engine.py +104 -0
  75. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/flows/__init__.py +6 -0
  76. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/flows/authoring/__init__.py +5 -0
  77. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/flows/authoring/api.py +56 -0
  78. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/flows/authoring/collect.py +35 -0
  79. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/flows/authoring/context.py +32 -0
  80. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/flows/authoring/identity.py +53 -0
  81. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/flows/authoring/spec_builder.py +34 -0
  82. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/flows/replay/__init__.py +5 -0
  83. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/flows/replay/api.py +58 -0
  84. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/flows/replay/collect.py +45 -0
  85. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/flows/replay/context.py +90 -0
  86. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/flows/replay/identity.py +47 -0
  87. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/flows/replay/spec_builder.py +23 -0
  88. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/planning_pass.py +71 -0
  89. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/reporting.py +46 -0
  90. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/reports/__init__.py +39 -0
  91. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/reports/actions.py +23 -0
  92. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/reports/builders.py +87 -0
  93. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/reports/errors.py +19 -0
  94. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/reports/models.py +74 -0
  95. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/reports/summary.py +77 -0
  96. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/reports/validator.py +14 -0
  97. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/requests.py +86 -0
  98. slurmforge-0.1.0/src/slurmforge/pipeline/compiler/state.py +59 -0
  99. slurmforge-0.1.0/src/slurmforge/pipeline/config/__init__.py +13 -0
  100. slurmforge-0.1.0/src/slurmforge/pipeline/config/api.py +49 -0
  101. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/__init__.py +45 -0
  102. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/authoring/__init__.py +16 -0
  103. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/authoring/builders.py +70 -0
  104. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/authoring/expansion.py +66 -0
  105. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/authoring/models.py +16 -0
  106. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/authoring/shared.py +58 -0
  107. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/authoring/validation.py +51 -0
  108. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/batch_contract.py +20 -0
  109. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/catalog.py +30 -0
  110. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/eval.py +114 -0
  111. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/experiment/__init__.py +9 -0
  112. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/experiment/api.py +26 -0
  113. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/experiment/assembler.py +64 -0
  114. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/experiment/hints.py +14 -0
  115. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/experiment/inputs.py +61 -0
  116. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/experiment/sections.py +103 -0
  117. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/output.py +28 -0
  118. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/replay.py +31 -0
  119. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/run/__init__.py +17 -0
  120. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/run/adapter.py +56 -0
  121. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/run/builder.py +67 -0
  122. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/run/external_runtime.py +56 -0
  123. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/run/model.py +47 -0
  124. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/run/shared.py +29 -0
  125. slurmforge-0.1.0/src/slurmforge/pipeline/config/assembly/spec_builder.py +81 -0
  126. slurmforge-0.1.0/src/slurmforge/pipeline/config/codecs/__init__.py +25 -0
  127. slurmforge-0.1.0/src/slurmforge/pipeline/config/codecs/eval.py +82 -0
  128. slurmforge-0.1.0/src/slurmforge/pipeline/config/codecs/experiment.py +54 -0
  129. slurmforge-0.1.0/src/slurmforge/pipeline/config/codecs/model.py +20 -0
  130. slurmforge-0.1.0/src/slurmforge/pipeline/config/codecs/output.py +16 -0
  131. slurmforge-0.1.0/src/slurmforge/pipeline/config/codecs/run.py +48 -0
  132. slurmforge-0.1.0/src/slurmforge/pipeline/config/codecs/runtime.py +10 -0
  133. slurmforge-0.1.0/src/slurmforge/pipeline/config/constants.py +7 -0
  134. slurmforge-0.1.0/src/slurmforge/pipeline/config/mode_detection.py +36 -0
  135. slurmforge-0.1.0/src/slurmforge/pipeline/config/models/__init__.py +23 -0
  136. slurmforge-0.1.0/src/slurmforge/pipeline/config/models/eval.py +32 -0
  137. slurmforge-0.1.0/src/slurmforge/pipeline/config/models/experiment.py +91 -0
  138. slurmforge-0.1.0/src/slurmforge/pipeline/config/models/model.py +13 -0
  139. slurmforge-0.1.0/src/slurmforge/pipeline/config/models/output.py +10 -0
  140. slurmforge-0.1.0/src/slurmforge/pipeline/config/models/run.py +35 -0
  141. slurmforge-0.1.0/src/slurmforge/pipeline/config/models/runtime.py +16 -0
  142. slurmforge-0.1.0/src/slurmforge/pipeline/config/normalize/__init__.py +42 -0
  143. slurmforge-0.1.0/src/slurmforge/pipeline/config/normalize/artifacts.py +27 -0
  144. slurmforge-0.1.0/src/slurmforge/pipeline/config/normalize/cluster.py +33 -0
  145. slurmforge-0.1.0/src/slurmforge/pipeline/config/normalize/env.py +34 -0
  146. slurmforge-0.1.0/src/slurmforge/pipeline/config/normalize/launcher.py +50 -0
  147. slurmforge-0.1.0/src/slurmforge/pipeline/config/normalize/notify.py +37 -0
  148. slurmforge-0.1.0/src/slurmforge/pipeline/config/normalize/resources.py +58 -0
  149. slurmforge-0.1.0/src/slurmforge/pipeline/config/normalize/shared.py +19 -0
  150. slurmforge-0.1.0/src/slurmforge/pipeline/config/normalize/slurm_deps.py +72 -0
  151. slurmforge-0.1.0/src/slurmforge/pipeline/config/normalize/validation.py +40 -0
  152. slurmforge-0.1.0/src/slurmforge/pipeline/config/replay_payload.py +58 -0
  153. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/__init__.py +53 -0
  154. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/api.py +57 -0
  155. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/codecs/__init__.py +20 -0
  156. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/codecs/artifacts.py +14 -0
  157. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/codecs/cluster.py +20 -0
  158. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/codecs/env.py +14 -0
  159. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/codecs/launcher.py +24 -0
  160. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/codecs/notify.py +13 -0
  161. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/codecs/resources.py +17 -0
  162. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/codecs/validation.py +14 -0
  163. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/defaults.py +30 -0
  164. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/models/__init__.py +20 -0
  165. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/models/artifacts.py +43 -0
  166. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/models/cluster.py +21 -0
  167. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/models/env.py +19 -0
  168. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/models/launcher.py +24 -0
  169. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/models/notify.py +10 -0
  170. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/models/resources.py +14 -0
  171. slurmforge-0.1.0/src/slurmforge/pipeline/config/runtime/models/validation.py +11 -0
  172. slurmforge-0.1.0/src/slurmforge/pipeline/config/scalars.py +25 -0
  173. slurmforge-0.1.0/src/slurmforge/pipeline/config/utils.py +67 -0
  174. slurmforge-0.1.0/src/slurmforge/pipeline/config/validation/__init__.py +28 -0
  175. slurmforge-0.1.0/src/slurmforge/pipeline/config/validation/_helpers.py +59 -0
  176. slurmforge-0.1.0/src/slurmforge/pipeline/config/validation/advisory.py +94 -0
  177. slurmforge-0.1.0/src/slurmforge/pipeline/config/validation/api.py +34 -0
  178. slurmforge-0.1.0/src/slurmforge/pipeline/config/validation/authoring.py +41 -0
  179. slurmforge-0.1.0/src/slurmforge/pipeline/config/validation/completeness.py +170 -0
  180. slurmforge-0.1.0/src/slurmforge/pipeline/config/validation/correctness.py +114 -0
  181. slurmforge-0.1.0/src/slurmforge/pipeline/config/validation/definitions.py +234 -0
  182. slurmforge-0.1.0/src/slurmforge/pipeline/config/validation/messages.py +188 -0
  183. slurmforge-0.1.0/src/slurmforge/pipeline/config/validation/replay.py +32 -0
  184. slurmforge-0.1.0/src/slurmforge/pipeline/config/validation/sections.py +132 -0
  185. slurmforge-0.1.0/src/slurmforge/pipeline/config/validation/sweep_rules.py +72 -0
  186. slurmforge-0.1.0/src/slurmforge/pipeline/config/validation/traversal.py +34 -0
  187. slurmforge-0.1.0/src/slurmforge/pipeline/launch/__init__.py +15 -0
  188. slurmforge-0.1.0/src/slurmforge/pipeline/launch/cli_args.py +47 -0
  189. slurmforge-0.1.0/src/slurmforge/pipeline/launch/command_builder.py +43 -0
  190. slurmforge-0.1.0/src/slurmforge/pipeline/launch/strategies.py +69 -0
  191. slurmforge-0.1.0/src/slurmforge/pipeline/launch/types.py +16 -0
  192. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/__init__.py +29 -0
  193. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/api.py +87 -0
  194. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/array_scripts.py +140 -0
  195. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/blocks/__init__.py +1 -0
  196. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/blocks/artifacts.py +67 -0
  197. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/blocks/common.py +25 -0
  198. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/blocks/env_setup.py +59 -0
  199. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/blocks/eval.py +72 -0
  200. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/blocks/finalize.py +22 -0
  201. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/blocks/preamble.py +47 -0
  202. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/blocks/preflight.py +68 -0
  203. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/blocks/train.py +63 -0
  204. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/blocks/train_outputs.py +48 -0
  205. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/commit.py +16 -0
  206. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/context.py +45 -0
  207. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/grouping.py +110 -0
  208. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/layout.py +49 -0
  209. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/manifest_writer.py +57 -0
  210. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/record_writer.py +136 -0
  211. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/reporting.py +55 -0
  212. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/run_assets.py +37 -0
  213. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/shell_builder.py +33 -0
  214. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/slurm_deps.py +17 -0
  215. slurmforge-0.1.0/src/slurmforge/pipeline/materialization/submit_writer.py +72 -0
  216. slurmforge-0.1.0/src/slurmforge/pipeline/planning/__init__.py +35 -0
  217. slurmforge-0.1.0/src/slurmforge/pipeline/planning/api.py +20 -0
  218. slurmforge-0.1.0/src/slurmforge/pipeline/planning/batch.py +62 -0
  219. slurmforge-0.1.0/src/slurmforge/pipeline/planning/batch_validator.py +42 -0
  220. slurmforge-0.1.0/src/slurmforge/pipeline/planning/codecs/__init__.py +32 -0
  221. slurmforge-0.1.0/src/slurmforge/pipeline/planning/codecs/diagnostics.py +23 -0
  222. slurmforge-0.1.0/src/slurmforge/pipeline/planning/codecs/resources.py +74 -0
  223. slurmforge-0.1.0/src/slurmforge/pipeline/planning/codecs/stages.py +99 -0
  224. slurmforge-0.1.0/src/slurmforge/pipeline/planning/contracts.py +58 -0
  225. slurmforge-0.1.0/src/slurmforge/pipeline/planning/enums.py +65 -0
  226. slurmforge-0.1.0/src/slurmforge/pipeline/planning/eval/__init__.py +5 -0
  227. slurmforge-0.1.0/src/slurmforge/pipeline/planning/eval/api.py +53 -0
  228. slurmforge-0.1.0/src/slurmforge/pipeline/planning/eval/command.py +59 -0
  229. slurmforge-0.1.0/src/slurmforge/pipeline/planning/eval/common.py +28 -0
  230. slurmforge-0.1.0/src/slurmforge/pipeline/planning/eval/launcher_merge.py +59 -0
  231. slurmforge-0.1.0/src/slurmforge/pipeline/planning/eval/script.py +79 -0
  232. slurmforge-0.1.0/src/slurmforge/pipeline/planning/external_command.py +34 -0
  233. slurmforge-0.1.0/src/slurmforge/pipeline/planning/fingerprint.py +32 -0
  234. slurmforge-0.1.0/src/slurmforge/pipeline/planning/identity.py +62 -0
  235. slurmforge-0.1.0/src/slurmforge/pipeline/planning/models/__init__.py +15 -0
  236. slurmforge-0.1.0/src/slurmforge/pipeline/planning/models/diagnostics.py +61 -0
  237. slurmforge-0.1.0/src/slurmforge/pipeline/planning/models/resources.py +98 -0
  238. slurmforge-0.1.0/src/slurmforge/pipeline/planning/models/stages.py +94 -0
  239. slurmforge-0.1.0/src/slurmforge/pipeline/planning/replay_builder.py +23 -0
  240. slurmforge-0.1.0/src/slurmforge/pipeline/planning/run/__init__.py +9 -0
  241. slurmforge-0.1.0/src/slurmforge/pipeline/planning/run/api.py +11 -0
  242. slurmforge-0.1.0/src/slurmforge/pipeline/planning/run/assembly.py +12 -0
  243. slurmforge-0.1.0/src/slurmforge/pipeline/planning/run/identity.py +38 -0
  244. slurmforge-0.1.0/src/slurmforge/pipeline/planning/run/plan_factory.py +78 -0
  245. slurmforge-0.1.0/src/slurmforge/pipeline/planning/run/planned_run_factory.py +52 -0
  246. slurmforge-0.1.0/src/slurmforge/pipeline/planning/run/stages.py +47 -0
  247. slurmforge-0.1.0/src/slurmforge/pipeline/planning/snapshot_builder.py +33 -0
  248. slurmforge-0.1.0/src/slurmforge/pipeline/planning/train/__init__.py +23 -0
  249. slurmforge-0.1.0/src/slurmforge/pipeline/planning/train/allocation.py +51 -0
  250. slurmforge-0.1.0/src/slurmforge/pipeline/planning/train/api.py +55 -0
  251. slurmforge-0.1.0/src/slurmforge/pipeline/planning/train/context.py +55 -0
  252. slurmforge-0.1.0/src/slurmforge/pipeline/planning/train/model_resolution.py +94 -0
  253. slurmforge-0.1.0/src/slurmforge/pipeline/planning/train/strategies/__init__.py +3 -0
  254. slurmforge-0.1.0/src/slurmforge/pipeline/planning/train/strategies/adapter.py +61 -0
  255. slurmforge-0.1.0/src/slurmforge/pipeline/planning/train/strategies/base.py +14 -0
  256. slurmforge-0.1.0/src/slurmforge/pipeline/planning/train/strategies/command.py +79 -0
  257. slurmforge-0.1.0/src/slurmforge/pipeline/planning/train/strategies/model_cli.py +26 -0
  258. slurmforge-0.1.0/src/slurmforge/pipeline/planning/train/strategies/scripted.py +87 -0
  259. slurmforge-0.1.0/src/slurmforge/pipeline/planning/train/topology.py +134 -0
  260. slurmforge-0.1.0/src/slurmforge/pipeline/planning/validation/__init__.py +11 -0
  261. slurmforge-0.1.0/src/slurmforge/pipeline/planning/validation/api.py +25 -0
  262. slurmforge-0.1.0/src/slurmforge/pipeline/planning/validation/common.py +28 -0
  263. slurmforge-0.1.0/src/slurmforge/pipeline/planning/validation/errors.py +15 -0
  264. slurmforge-0.1.0/src/slurmforge/pipeline/planning/validation/formatter.py +9 -0
  265. slurmforge-0.1.0/src/slurmforge/pipeline/planning/validation/passes/__init__.py +3 -0
  266. slurmforge-0.1.0/src/slurmforge/pipeline/planning/validation/passes/cli_args.py +53 -0
  267. slurmforge-0.1.0/src/slurmforge/pipeline/planning/validation/passes/resources.py +151 -0
  268. slurmforge-0.1.0/src/slurmforge/pipeline/planning/validation/passes/summary.py +21 -0
  269. slurmforge-0.1.0/src/slurmforge/pipeline/planning/validation/passes/topology.py +115 -0
  270. slurmforge-0.1.0/src/slurmforge/pipeline/planning/validation/policies.py +50 -0
  271. slurmforge-0.1.0/src/slurmforge/pipeline/planning/validator.py +9 -0
  272. slurmforge-0.1.0/src/slurmforge/pipeline/records/__init__.py +3 -0
  273. slurmforge-0.1.0/src/slurmforge/pipeline/records/api.py +57 -0
  274. slurmforge-0.1.0/src/slurmforge/pipeline/records/batch_io.py +42 -0
  275. slurmforge-0.1.0/src/slurmforge/pipeline/records/batch_paths.py +83 -0
  276. slurmforge-0.1.0/src/slurmforge/pipeline/records/codecs/__init__.py +41 -0
  277. slurmforge-0.1.0/src/slurmforge/pipeline/records/codecs/array_assignment.py +31 -0
  278. slurmforge-0.1.0/src/slurmforge/pipeline/records/codecs/metadata.py +27 -0
  279. slurmforge-0.1.0/src/slurmforge/pipeline/records/codecs/run_plan.py +107 -0
  280. slurmforge-0.1.0/src/slurmforge/pipeline/records/codecs/run_snapshot.py +42 -0
  281. slurmforge-0.1.0/src/slurmforge/pipeline/records/io_utils.py +20 -0
  282. slurmforge-0.1.0/src/slurmforge/pipeline/records/models/__init__.py +23 -0
  283. slurmforge-0.1.0/src/slurmforge/pipeline/records/models/array_assignment.py +19 -0
  284. slurmforge-0.1.0/src/slurmforge/pipeline/records/models/dispatch.py +30 -0
  285. slurmforge-0.1.0/src/slurmforge/pipeline/records/models/metadata.py +11 -0
  286. slurmforge-0.1.0/src/slurmforge/pipeline/records/models/run_plan.py +113 -0
  287. slurmforge-0.1.0/src/slurmforge/pipeline/records/models/run_snapshot.py +22 -0
  288. slurmforge-0.1.0/src/slurmforge/pipeline/records/replay_spec/__init__.py +14 -0
  289. slurmforge-0.1.0/src/slurmforge/pipeline/records/replay_spec/builders.py +31 -0
  290. slurmforge-0.1.0/src/slurmforge/pipeline/records/replay_spec/codecs.py +47 -0
  291. slurmforge-0.1.0/src/slurmforge/pipeline/records/replay_spec/model.py +17 -0
  292. slurmforge-0.1.0/src/slurmforge/pipeline/records/snapshot_io.py +19 -0
  293. slurmforge-0.1.0/src/slurmforge/pipeline/sources/__init__.py +28 -0
  294. slurmforge-0.1.0/src/slurmforge/pipeline/sources/api.py +18 -0
  295. slurmforge-0.1.0/src/slurmforge/pipeline/sources/authoring/__init__.py +10 -0
  296. slurmforge-0.1.0/src/slurmforge/pipeline/sources/authoring/collector.py +129 -0
  297. slurmforge-0.1.0/src/slurmforge/pipeline/sources/authoring/loader.py +36 -0
  298. slurmforge-0.1.0/src/slurmforge/pipeline/sources/authoring/models.py +20 -0
  299. slurmforge-0.1.0/src/slurmforge/pipeline/sources/failures.py +49 -0
  300. slurmforge-0.1.0/src/slurmforge/pipeline/sources/inference.py +31 -0
  301. slurmforge-0.1.0/src/slurmforge/pipeline/sources/models.py +115 -0
  302. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/__init__.py +21 -0
  303. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/checkpoint.py +27 -0
  304. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/collector.py +63 -0
  305. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/loaders.py +130 -0
  306. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/models.py +30 -0
  307. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/overrides.py +21 -0
  308. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/relocation.py +91 -0
  309. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/resume_patch.py +34 -0
  310. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/retry_refs.py +39 -0
  311. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/retry_selection.py +82 -0
  312. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/selectors.py +57 -0
  313. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/variants/__init__.py +3 -0
  314. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/variants/batch.py +76 -0
  315. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/variants/retry.py +100 -0
  316. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/variants/run.py +57 -0
  317. slurmforge-0.1.0/src/slurmforge/pipeline/sources/replay/variants/snapshot.py +43 -0
  318. slurmforge-0.1.0/src/slurmforge/pipeline/status/__init__.py +42 -0
  319. slurmforge-0.1.0/src/slurmforge/pipeline/status/api.py +12 -0
  320. slurmforge-0.1.0/src/slurmforge/pipeline/status/builders.py +46 -0
  321. slurmforge-0.1.0/src/slurmforge/pipeline/status/classifier/__init__.py +12 -0
  322. slurmforge-0.1.0/src/slurmforge/pipeline/status/classifier/discovery.py +61 -0
  323. slurmforge-0.1.0/src/slurmforge/pipeline/status/classifier/patterns.py +28 -0
  324. slurmforge-0.1.0/src/slurmforge/pipeline/status/classifier/reader.py +31 -0
  325. slurmforge-0.1.0/src/slurmforge/pipeline/status/classifier/rules.py +70 -0
  326. slurmforge-0.1.0/src/slurmforge/pipeline/status/codecs/__init__.py +15 -0
  327. slurmforge-0.1.0/src/slurmforge/pipeline/status/codecs/api.py +11 -0
  328. slurmforge-0.1.0/src/slurmforge/pipeline/status/codecs/attempt_result.py +77 -0
  329. slurmforge-0.1.0/src/slurmforge/pipeline/status/codecs/execution_status.py +88 -0
  330. slurmforge-0.1.0/src/slurmforge/pipeline/status/codecs/path_fields.py +59 -0
  331. slurmforge-0.1.0/src/slurmforge/pipeline/status/lifecycle.py +144 -0
  332. slurmforge-0.1.0/src/slurmforge/pipeline/status/models.py +57 -0
  333. slurmforge-0.1.0/src/slurmforge/pipeline/status/paths.py +31 -0
  334. slurmforge-0.1.0/src/slurmforge/pipeline/status/reconcile.py +193 -0
  335. slurmforge-0.1.0/src/slurmforge/pipeline/status/slurm.py +107 -0
  336. slurmforge-0.1.0/src/slurmforge/pipeline/status/store.py +62 -0
  337. slurmforge-0.1.0/src/slurmforge/pipeline/train_outputs/__init__.py +21 -0
  338. slurmforge-0.1.0/src/slurmforge/pipeline/train_outputs/api.py +17 -0
  339. slurmforge-0.1.0/src/slurmforge/pipeline/train_outputs/cache.py +63 -0
  340. slurmforge-0.1.0/src/slurmforge/pipeline/train_outputs/codec.py +44 -0
  341. slurmforge-0.1.0/src/slurmforge/pipeline/train_outputs/contract.py +97 -0
  342. slurmforge-0.1.0/src/slurmforge/pipeline/train_outputs/discovery.py +71 -0
  343. slurmforge-0.1.0/src/slurmforge/pipeline/train_outputs/env_writer.py +48 -0
  344. slurmforge-0.1.0/src/slurmforge/pipeline/train_outputs/models.py +20 -0
  345. slurmforge-0.1.0/src/slurmforge/pipeline/train_outputs/paths.py +11 -0
  346. slurmforge-0.1.0/src/slurmforge/pipeline/train_outputs/selection.py +64 -0
  347. slurmforge-0.1.0/src/slurmforge/pipeline/utils/__init__.py +6 -0
  348. slurmforge-0.1.0/src/slurmforge/pipeline/utils/merge.py +14 -0
  349. slurmforge-0.1.0/src/slurmforge/pipeline/utils/schema.py +12 -0
  350. slurmforge-0.1.0/src/slurmforge/resource_io.py +26 -0
  351. slurmforge-0.1.0/src/slurmforge/starter_catalog.py +203 -0
  352. slurmforge-0.1.0/src/slurmforge/starter_projects.py +69 -0
  353. slurmforge-0.1.0/src/slurmforge/starter_templates/README.md.tmpl +42 -0
  354. slurmforge-0.1.0/src/slurmforge/starter_templates/__init__.py +1 -0
  355. slurmforge-0.1.0/src/slurmforge/starter_templates/adapter_train.py.tmpl +49 -0
  356. slurmforge-0.1.0/src/slurmforge/starter_templates/command_train.py.tmpl +46 -0
  357. slurmforge-0.1.0/src/slurmforge/starter_templates/eval.py.tmpl +45 -0
  358. slurmforge-0.1.0/src/slurmforge/starter_templates/hpc_train.py.tmpl +73 -0
  359. slurmforge-0.1.0/src/slurmforge/starter_templates/model_cli_train.py.tmpl +63 -0
  360. slurmforge-0.1.0/src/slurmforge/sweep/__init__.py +33 -0
  361. slurmforge-0.1.0/src/slurmforge/sweep/api.py +23 -0
  362. slurmforge-0.1.0/src/slurmforge/sweep/expansion.py +87 -0
  363. slurmforge-0.1.0/src/slurmforge/sweep/materialize.py +37 -0
  364. slurmforge-0.1.0/src/slurmforge/sweep/models.py +25 -0
  365. slurmforge-0.1.0/src/slurmforge/sweep/overrides.py +24 -0
  366. slurmforge-0.1.0/src/slurmforge/sweep/validation.py +171 -0
  367. slurmforge-0.1.0/src/slurmforge/templates/sbatch_array_group.sh.j2 +42 -0
  368. slurmforge-0.1.0/src/slurmforge/templates/sbatch_notify.sh.j2 +8 -0
  369. slurmforge-0.1.0/src/slurmforge/templating.py +16 -0
  370. slurmforge-0.1.0/src/slurmforge/text_safety.py +22 -0
  371. slurmforge-0.1.0/src/slurmforge.egg-info/PKG-INFO +716 -0
  372. slurmforge-0.1.0/src/slurmforge.egg-info/SOURCES.txt +398 -0
  373. slurmforge-0.1.0/src/slurmforge.egg-info/dependency_links.txt +1 -0
  374. slurmforge-0.1.0/src/slurmforge.egg-info/entry_points.txt +6 -0
  375. slurmforge-0.1.0/src/slurmforge.egg-info/requires.txt +7 -0
  376. slurmforge-0.1.0/src/slurmforge.egg-info/top_level.txt +1 -0
  377. slurmforge-0.1.0/tests/test_argparse_introspect.py +28 -0
  378. slurmforge-0.1.0/tests/test_artifact_sync.py +109 -0
  379. slurmforge-0.1.0/tests/test_checkpoints.py +66 -0
  380. slurmforge-0.1.0/tests/test_config.py +706 -0
  381. slurmforge-0.1.0/tests/test_dispatch.py +270 -0
  382. slurmforge-0.1.0/tests/test_examples_cli.py +185 -0
  383. slurmforge-0.1.0/tests/test_execution_status.py +383 -0
  384. slurmforge-0.1.0/tests/test_gpu_estimator.py +123 -0
  385. slurmforge-0.1.0/tests/test_installed_package.py +359 -0
  386. slurmforge-0.1.0/tests/test_launcher.py +500 -0
  387. slurmforge-0.1.0/tests/test_models.py +311 -0
  388. slurmforge-0.1.0/tests/test_planning.py +436 -0
  389. slurmforge-0.1.0/tests/test_replay.py +334 -0
  390. slurmforge-0.1.0/tests/test_repo_hygiene.py +15 -0
  391. slurmforge-0.1.0/tests/test_retry.py +702 -0
  392. slurmforge-0.1.0/tests/test_run_plan_executor.py +202 -0
  393. slurmforge-0.1.0/tests/test_run_record.py +122 -0
  394. slurmforge-0.1.0/tests/test_runtime.py +101 -0
  395. slurmforge-0.1.0/tests/test_slurm_dependencies.py +59 -0
  396. slurmforge-0.1.0/tests/test_sweep.py +160 -0
  397. slurmforge-0.1.0/tests/test_templating.py +100 -0
  398. slurmforge-0.1.0/tests/test_text_safety.py +23 -0
  399. slurmforge-0.1.0/tests/test_train_modes.py +91 -0
  400. slurmforge-0.1.0/tests/test_train_outputs.py +172 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Xin Li
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 all
13
+ 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 THE
21
+ SOFTWARE.