diff --git a/_modules/easy_slurm/jobs.html b/_modules/easy_slurm/jobs.html index b9cd799..e33f1de 100644 --- a/_modules/easy_slurm/jobs.html +++ b/_modules/easy_slurm/jobs.html @@ -218,8 +218,9 @@

Source code for easy_slurm.jobs

 import re
 import stat
 import subprocess
+from pathlib import Path
 from textwrap import dedent, indent
-from typing import Any
+from typing import Any, Sequence
 
 from . import __version__
 from .format import format_with_config
@@ -241,8 +242,7 @@ 

Source code for easy_slurm.jobs

 
[docs]def submit_job( job_dir: str, *, - src: str = "", - assets: str = "", + src: Sequence[str] = (), on_run: str = "", on_run_resume: str = "", setup: str = "", @@ -253,23 +253,20 @@

Source code for easy_slurm.jobs

     submit: bool = True,
     interactive: bool = False,
     resubmit_limit: int = 64,
+    config: dict[str, Any] = {},
 ) -> str:
     """Submits job.
 
-    Creates job directory with frozen assets and submits job to slurm.
+    Creates job directory with frozen src and submits job to slurm.
 
     Args:
         job_dir (str):
             Path to directory to keep all job files including
-            ``src.tar``, ``assets.tar``, and auto-generated ``job.sh``.
-        src (str):
-            Path to directory containing only source code.
+            ``src.tar`` and auto-generated ``job.sh``.
+        src (list[str]):
+            Path to directories containing only source code.
             These will be archived in ``$JOB_DIR/src.tar`` and
-            extracted during job run into ``$SLURM_TMPDIR/src``.
-        assets (str):
-            Path to directory containing additional assets.
-            These will be archived in ``$JOB_DIR/assets.tar`` and
-            extracted during job run into ``$SLURM_TMPDIR/assets``.
+            extracted during job run into ``$SLURM_TMPDIR``.
         on_run (str):
             Bash code executed in "on_run" stage, but only for new jobs
             that are running for the first time.
@@ -307,13 +304,18 @@ 

Source code for easy_slurm.jobs

             Maximum number of times to auto-submit a job for "resume".
             (Not entirely unlike submitting a resume for a job.)
             Default is 64 resubmissions.
+        config (dict[str, Any]):
+            A dictionary of configuration values to use for formatting.
 
     Returns:
         Path to the newly created job directory.
     """
     job_name = sbatch_options.get("job-name", "untitled")
-    job_dir = _expand_path(format_with_config(job_dir, {"job_name": job_name}))
-    create_job_dir(job_dir, src, assets)
+    job_name = format_with_config(job_name, config)
+    job_dir = _expand_path(
+        format_with_config(job_dir, {**config, "job_name": job_name})
+    )
+    create_job_dir(job_dir, src)
 
     _write_script(
         filename=f"{job_dir}/job.sh",
@@ -396,21 +398,13 @@ 

Source code for easy_slurm.jobs

     )
-
[docs]def create_job_dir( - job_dir: str, - src: str, - assets: str, -): +
[docs]def create_job_dir(job_dir: str, src: Sequence[str]): """Creates job directory and freezes all necessary files.""" job_dir = _expand_path(job_dir) - src = _expand_path(src) - assets = _expand_path(assets) + src = [_expand_path(x) for x in src] os.makedirs(job_dir, exist_ok=True) - if src != "": - _create_tar_dir(src, f"{job_dir}/src.tar.gz", "src") - if assets != "": - _create_tar_dir(assets, f"{job_dir}/assets.tar.gz", "assets") + _create_tar_dir(src, f"{job_dir}/src.tar.gz") with open(f"{job_dir}/status", "w") as f: print("status=new", file=f) @@ -445,9 +439,18 @@

Source code for easy_slurm.jobs

     return "" if path == "" else os.path.abspath(os.path.expandvars(path))
 
 
-def _create_tar_dir(src, dst, root_name):
-    transform = rf"s/^\./{root_name}/"
-    cmd = ["tar", "czf", dst, "-C", src, ".", "--transform", transform]
+def _create_tar_dir(src, dst, root_name=None):
+    if not src:
+        src_args = ["-T", "/dev/null"]
+    else:
+        src_args = [
+            arg
+            for srcdir in src
+            for arg in ["-C", Path(srcdir).parent, Path(srcdir).name]
+        ]
+    cmd = ["tar", "czf", dst, *src_args]
+    if root_name is not None:
+        cmd.extend(["--transform", rf"s/^/{root_name}\//"])
     subprocess.run(cmd, check=True)
 
 
diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt
index 60e5611..5ba7d1c 100644
--- a/_sources/index.rst.txt
+++ b/_sources/index.rst.txt
@@ -10,7 +10,7 @@ Easy Slurm allows you to easily manage and submit robust jobs to Slurm using Pyt
 Features
 --------
 
-- **Freezes** source code and assets by copying to separate ``$JOB_DIR``.
+- **Freezes** source code by copying to separate ``$JOB_DIR``.
 - **Auto-submits** another job if current job times out.
 - **Exposes hooks** for custom bash code: ``setup``/``setup_resume``, ``on_run``/``on_run_resume``, and ``teardown``.
 - |Format job names|_ using parameters from config files.
@@ -40,8 +40,7 @@ To submit a job, simply fill in the various parameters shown in the example belo
 
     easy_slurm.submit_job(
         job_dir="$HOME/jobs/{date}-{job_name}",
-        src="./src",
-        assets="./assets",
+        src=["./src", "./assets"],
         setup="""
             virtualenv "$SLURM_TMPDIR/env"
             source "$SLURM_TMPDIR/env/bin/activate"
@@ -51,8 +50,8 @@ To submit a job, simply fill in the various parameters shown in the example belo
             # Runs only on subsequent runs. Call setup and do anything else needed.
             setup
         """,
-        on_run="python main.py",
-        on_run_resume="python main.py --resume",
+        on_run="cd src && python main.py",
+        on_run_resume="cd src && python main.py --resume",
         teardown="""
             # Do any cleanup tasks here.
         """,
@@ -65,7 +64,7 @@ To submit a job, simply fill in the various parameters shown in the example belo
         resubmit_limit=64,  # Automatic resubmission limit.
     )
 
-All job files will be kept in the ``job_dir`` directory. Provide directory paths to ``src`` and ``assets`` -- these will be archived and copied to the ``job_dir`` directory. Also provide Bash code in the hooks, which will be run in the following order:
+All job files will be kept in the ``job_dir`` directory. Provide directory paths to ``src`` -- these will be archived and copied to the ``job_dir`` directory. Also provide Bash code in the hooks, which will be run in the following order:
 
 .. list-table:: Hooks order
    :widths: 50 50
@@ -95,8 +94,7 @@ Jobs can also be fully configured using YAML files. See `examples/simple_yaml`_.
 .. code-block:: yaml
 
     job_dir: "$HOME/jobs/{date}-{job_name}"
-    src: "./src"
-    assets: "./assets"
+    src: ["./src", "./assets"]
     setup: |
       virtualenv "$SLURM_TMPDIR/env"
       source "$SLURM_TMPDIR/env/bin/activate"
@@ -104,8 +102,8 @@ Jobs can also be fully configured using YAML files. See `examples/simple_yaml`_.
     setup_resume: |
       # Runs only on subsequent runs. Call setup and do anything else needed.
       setup
-    on_run: "python main.py"
-    on_run_resume: "python main.py --resume"
+    on_run: "cd src && python main.py"
+    on_run_resume: "cd src && python main.py --resume"
     teardown: |
       # Do any cleanup tasks here.
     sbatch_options:
diff --git a/easy_slurm/format.html b/easy_slurm/format.html
index 49d8df4..91adcef 100644
--- a/easy_slurm/format.html
+++ b/easy_slurm/format.html
@@ -266,7 +266,7 @@ 

easy_slurm.format
-easy_slurm.format.format_with_config(template: str, config: dict[str, Any], silent: bool = False, _now: Optional[datetime.datetime] = None) str[source]#
+easy_slurm.format.format_with_config(template: str, config: dict[str, Any], silent: bool = False, _now: Optional[datetime.datetime] = None) str[source]#

Formats template using given config.

The template syntax is very similar to Python string templates. One useful addition is that nested config keys can be accessed diff --git a/easy_slurm/jobs.html b/easy_slurm/jobs.html index 134eab3..6c2ac5c 100644 --- a/easy_slurm/jobs.html +++ b/easy_slurm/jobs.html @@ -267,65 +267,63 @@

easy_slurm.jobs
-easy_slurm.jobs.create_job_dir(job_dir: str, src: str, assets: str)[source]#
+easy_slurm.jobs.create_job_dir(job_dir: str, src: Sequence[str])[source]#

Creates job directory and freezes all necessary files.

-easy_slurm.jobs.create_job_interactive_script_source(sbatch_options: dict[str, Any], job_dir: str, job_path: str, cleanup_seconds: int) str[source]#
+easy_slurm.jobs.create_job_interactive_script_source(sbatch_options: dict[str, Any], job_dir: str, job_path: str, cleanup_seconds: int) str[source]#

Returns source for interactive job script.

-easy_slurm.jobs.create_job_script_source(sbatch_options: dict[str, Any], on_run: str, on_run_resume: str, setup: str, setup_resume: str, teardown: str, job_dir: str, cleanup_seconds: int, resubmit_limit: int) str[source]#
+easy_slurm.jobs.create_job_script_source(sbatch_options: dict[str, Any], on_run: str, on_run_resume: str, setup: str, setup_resume: str, teardown: str, job_dir: str, cleanup_seconds: int, resubmit_limit: int) str[source]#

Returns source for job script.

-easy_slurm.jobs.submit_job(job_dir: str, *, src: str = '', assets: str = '', on_run: str = '', on_run_resume: str = '', setup: str = '', setup_resume: str = '', teardown: str = '', sbatch_options: dict[str, Any] = {}, cleanup_seconds: int = 120, submit: bool = True, interactive: bool = False, resubmit_limit: int = 64) str[source]#
+easy_slurm.jobs.submit_job(job_dir: str, *, src: Sequence[str] = (), on_run: str = '', on_run_resume: str = '', setup: str = '', setup_resume: str = '', teardown: str = '', sbatch_options: dict[str, Any] = {}, cleanup_seconds: int = 120, submit: bool = True, interactive: bool = False, resubmit_limit: int = 64, config: dict[str, Any] = {}) str[source]#

Submits job.

-

Creates job directory with frozen assets and submits job to slurm.

+

Creates job directory with frozen src and submits job to slurm.

Parameters
    -
  • job_dir (str) – Path to directory to keep all job files including -src.tar, assets.tar, and auto-generated job.sh.

  • -
  • src (str) – Path to directory containing only source code. +

  • job_dir (str) – Path to directory to keep all job files including +src.tar and auto-generated job.sh.

  • +
  • src (list[str]) – Path to directories containing only source code. These will be archived in $JOB_DIR/src.tar and -extracted during job run into $SLURM_TMPDIR/src.

  • -
  • assets (str) – Path to directory containing additional assets. -These will be archived in $JOB_DIR/assets.tar and -extracted during job run into $SLURM_TMPDIR/assets.

  • -
  • on_run (str) – Bash code executed in “on_run” stage, but only for new jobs +extracted during job run into $SLURM_TMPDIR.

  • +
  • on_run (str) – Bash code executed in “on_run” stage, but only for new jobs that are running for the first time. Must be a single command only. Optionally, the command may gracefully handle interrupts.

  • -
  • on_run_resume (str) – Bash code executed in “on_run” stage, but only for jobs that +

  • on_run_resume (str) – Bash code executed in “on_run” stage, but only for jobs that are resuming from previous incomplete runs. Must be a single command only. Optionally, the command may gracefully handle interrupts.

  • -
  • setup (str) – Bash code executed in “setup” stage, but only for new jobs +

  • setup (str) – Bash code executed in “setup” stage, but only for new jobs that are running for the first time.

  • -
  • setup_resume (str) – Bash code executed in “setup” stage, but only for jobs that +

  • setup_resume (str) – Bash code executed in “setup” stage, but only for jobs that are resuming from previous incomplete runs. To reuse the code from setup, simply set this to "setup", which calls the code inside the setup function.

  • -
  • teardown (str) – Bash code executed in “teardown” stage.

  • -
  • sbatch_options (dict[str, Any]) – Dictionary of options to pass to sbatch.

  • -
  • cleanup_seconds (int) – Interrupts a job n seconds before timeout to run cleanup +

  • teardown (str) – Bash code executed in “teardown” stage.

  • +
  • sbatch_options (dict[str, Any]) – Dictionary of options to pass to sbatch.

  • +
  • cleanup_seconds (int) – Interrupts a job n seconds before timeout to run cleanup tasks (teardown, auto-schedule new job). Default is 120 seconds.

  • -
  • submit (bool) – Submit created job to scheduler. Set this to False if +

  • submit (bool) – Submit created job to scheduler. Set this to False if you are manually submitting the created $JOB_DIR later. Default is True.

  • -
  • interactive (bool) – Run as a blocking interactive job. Default is False.

  • -
  • resubmit_limit (int) – Maximum number of times to auto-submit a job for “resume”. +

  • interactive (bool) – Run as a blocking interactive job. Default is False.

  • +
  • resubmit_limit (int) – Maximum number of times to auto-submit a job for “resume”. (Not entirely unlike submitting a resume for a job.) Default is 64 resubmissions.

  • +
  • config (dict[str, Any]) – A dictionary of configuration values to use for formatting.

Returns
@@ -336,7 +334,7 @@

easy_slurm.jobs
-easy_slurm.jobs.submit_job_dir(job_dir: str, interactive: bool)[source]#
+easy_slurm.jobs.submit_job_dir(job_dir: str, interactive: bool)[source]#

Submits a $JOB_DIR created by easy_slurm to slurm.

Note that submit_job already does this for the user, except when it is called with submit=False.

diff --git a/index.html b/index.html index c2d6fb9..7f01ac5 100644 --- a/index.html +++ b/index.html @@ -353,7 +353,7 @@

Easy Slurm

Features#

-

All job files will be kept in the job_dir directory. Provide directory paths to src and assets – these will be archived and copied to the job_dir directory. Also provide Bash code in the hooks, which will be run in the following order:

+

All job files will be kept in the job_dir directory. Provide directory paths to src – these will be archived and copied to the job_dir directory. Also provide Bash code in the hooks, which will be run in the following order:

@@ -428,8 +427,7 @@

Usage

YAML#

Jobs can also be fully configured using YAML files. See examples/simple_yaml.

job_dir: "$HOME/jobs/{date}-{job_name}"
-src: "./src"
-assets: "./assets"
+src: ["./src", "./assets"]
 setup: |
   virtualenv "$SLURM_TMPDIR/env"
   source "$SLURM_TMPDIR/env/bin/activate"
@@ -437,8 +435,8 @@ 

YAML#< setup_resume: | # Runs only on subsequent runs. Call setup and do anything else needed. setup -on_run: "python main.py" -on_run_resume: "python main.py --resume" +on_run: "cd src && python main.py" +on_run_resume: "cd src && python main.py --resume" teardown: | # Do any cleanup tasks here. sbatch_options: diff --git a/searchindex.js b/searchindex.js index a8b0438..87becb3 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["easy_slurm/format","easy_slurm/jobs","index","tutorials/full","tutorials/installation"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["easy_slurm/format.rst","easy_slurm/jobs.rst","index.rst","tutorials/full.rst","tutorials/installation.rst"],objects:{"easy_slurm.format":[[0,1,1,"","format_with_config"]],"easy_slurm.jobs":[[1,1,1,"","create_job_dir"],[1,1,1,"","create_job_interactive_script_source"],[1,1,1,"","create_job_script_source"],[1,1,1,"","submit_job"],[1,1,1,"","submit_job_dir"]],easy_slurm:[[0,0,0,"-","format"],[1,0,0,"-","jobs"]]},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:function"},terms:{"00":[0,2],"000032":0,"0032":[0,2],"01":0,"01_00":0,"01_b":0,"02":[0,2],"03":0,"03_141_b":0,"04":[0,2],"06":0,"0e":[0,2],"1":[0,2],"120":1,"141":0,"141592":0,"1e":[0,2],"2":[0,2],"2020":0,"3":[2,4],"32":[0,2],"3f":0,"64":[1,2],"7":4,"default":1,"do":2,"function":1,"import":[0,2],"int":1,"new":[1,4],"return":[0,1],"true":1,For:[0,1],If:0,Not:1,One:[0,2],The:[0,2],Then:4,These:1,To:[1,2,4],_b:0,_now:0,access:0,account:2,activ:[2,4],addit:[0,1],addition:0,all:[1,2],allow:2,alreadi:1,also:2,ani:[0,1,2],anoth:2,anyth:2,ar:[0,1,2],archiv:[1,2],asset:[1,2],auto:[1,2],automat:2,avail:2,bash:[1,2],batch_siz:[0,2],befor:1,below:[0,2],bin:2,block:1,bool:[0,1],bs:2,built:0,call:[1,2],can:[0,2],cd:4,cleanup:[1,2],cleanup_second:1,clone:4,cluster:2,code:[1,2],com:4,command:1,config:[0,2],configur:2,contain:1,copi:2,creat:[1,2,4],create_job_dir:1,create_job_interactive_script_sourc:1,create_job_script_sourc:1,curl:4,current:2,custom:2,d:[0,2],d_:0,data:0,date:[0,2],date_str:0,datetim:0,debug:2,descript:2,dict:[0,1],dictionari:[1,2],directori:[1,2],doe:1,dure:1,easi:[3,4],easili:2,easy_slurm:2,echo:4,els:2,entir:1,env:[2,4],environ:4,epoch:2,equal:2,exampl:[0,2],except:1,execut:1,expos:2,extract:1,f:0,fals:[0,1],file:[1,2],fill:2,first:[1,2,4],fmt:0,follow:2,format_spec:0,format_with_config:[0,2],freez:[1,2],from:[0,1,2],frozen:1,full:[2,3,4],fulli:2,gener:1,git:4,github:4,given:0,gracefulli:1,guid:3,h:0,handl:1,have:0,help:[2,4],here:2,home:2,how:3,hp:[0,2],http:4,human:2,ignor:0,includ:[1,2],incomplet:1,insid:1,instanc:0,interact:[1,2],interrupt:1,job:[0,2],job_dir:[1,2],job_nam:2,job_path:1,keep:1,kei:0,kept:2,later:1,limit:2,list:4,lr:[0,2],m:[0,2],mai:1,main:2,manag:[2,4],manual:1,maximum:1,must:1,n:1,name:[0,2],namespac:0,necessari:1,need:2,nest:0,newli:1,node:2,none:0,note:1,now:0,number:1,on_run:[1,2],on_run_resum:[1,2],onli:[1,2],option:[0,1],org:4,out:2,packag:4,paramet:[0,1,2],pass:[0,1],path:[1,2,4],pin:4,pip:2,present:0,previou:1,provid:[2,3],py:2,python3:4,python:[0,2,4],r:2,readabl:2,replac:0,repositori:4,requir:[2,4],resubmiss:[1,2],resubmit_limit:[1,2],resum:[1,2],reus:1,robust:2,run:[1,2,4],s:0,s_:0,sbatch:1,sbatch_opt:[1,2],schedul:1,script:1,second:1,see:[0,2],separ:2,set:1,setup:[1,2],setup_resum:[1,2],sh:1,shell:4,shown:2,silent:0,similar:0,simpl:2,simple_yaml:2,simpli:[1,2],singl:1,slurm:[1,3,4],slurm_tmpdir:[1,2],some:0,sourc:[0,1,2],special:0,src:[1,2],ssl:4,stage:1,str:[0,1],string:[0,2],strptime:0,submit:[1,2],submit_job:[1,2],submit_job_dir:1,subsequ:2,support:2,syntax:0,tar:1,task:[1,2],teardown:[1,2],templat:[0,2],thei:0,thi:[1,2,3],through:0,time:[1,2],timeout:1,todo:3,train:2,txt:2,unlik:1,us:[0,2,3],user:1,usernam:2,valu:0,variou:2,veri:0,version:4,via:0,virtual:4,virtualenv:2,when:1,which:[1,2],y:[0,2],yodaembed:4,you:[1,2],your:2},titles:["easy_slurm.format","easy_slurm.jobs","Easy Slurm","Walkthrough","Installation"],titleterms:{easi:2,easy_slurm:[0,1],featur:2,format:[0,2],hook:2,instal:[2,4],job:1,order:2,pip:4,poetri:4,slurm:2,us:4,usag:2,walkthrough:3,yaml:2}}) \ No newline at end of file +Search.setIndex({docnames:["easy_slurm/format","easy_slurm/jobs","index","tutorials/full","tutorials/installation"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["easy_slurm/format.rst","easy_slurm/jobs.rst","index.rst","tutorials/full.rst","tutorials/installation.rst"],objects:{"easy_slurm.format":[[0,1,1,"","format_with_config"]],"easy_slurm.jobs":[[1,1,1,"","create_job_dir"],[1,1,1,"","create_job_interactive_script_source"],[1,1,1,"","create_job_script_source"],[1,1,1,"","submit_job"],[1,1,1,"","submit_job_dir"]],easy_slurm:[[0,0,0,"-","format"],[1,0,0,"-","jobs"]]},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:function"},terms:{"00":[0,2],"000032":0,"0032":[0,2],"01":0,"01_00":0,"01_b":0,"02":[0,2],"03":0,"03_141_b":0,"04":[0,2],"06":0,"0e":[0,2],"1":[0,2],"120":1,"141":0,"141592":0,"1e":[0,2],"2":[0,2],"2020":0,"3":[2,4],"32":[0,2],"3f":0,"64":[1,2],"7":4,"default":1,"do":2,"function":1,"import":[0,2],"int":1,"new":[1,4],"return":[0,1],"true":1,A:1,For:[0,1],If:0,Not:1,One:[0,2],The:[0,2],Then:4,These:1,To:[1,2,4],_b:0,_now:0,access:0,account:2,activ:[2,4],addit:0,addition:0,all:[1,2],allow:2,alreadi:1,also:2,ani:[0,1,2],anoth:2,anyth:2,ar:[0,1,2],archiv:[1,2],asset:2,auto:[1,2],automat:2,avail:2,bash:[1,2],batch_siz:[0,2],befor:1,below:[0,2],bin:2,block:1,bool:[0,1],bs:2,built:0,call:[1,2],can:[0,2],cd:[2,4],cleanup:[1,2],cleanup_second:1,clone:4,cluster:2,code:[1,2],com:4,command:1,config:[0,1,2],configur:[1,2],contain:1,copi:2,creat:[1,2,4],create_job_dir:1,create_job_interactive_script_sourc:1,create_job_script_sourc:1,curl:4,current:2,custom:2,d:[0,2],d_:0,data:0,date:[0,2],date_str:0,datetim:0,debug:2,descript:2,dict:[0,1],dictionari:[1,2],directori:[1,2],doe:1,dure:1,easi:[3,4],easili:2,easy_slurm:2,echo:4,els:2,entir:1,env:[2,4],environ:4,epoch:2,equal:2,exampl:[0,2],except:1,execut:1,expos:2,extract:1,f:0,fals:[0,1],file:[1,2],fill:2,first:[1,2,4],fmt:0,follow:2,format:1,format_spec:0,format_with_config:[0,2],freez:[1,2],from:[0,1,2],frozen:1,full:[2,3,4],fulli:2,gener:1,git:4,github:4,given:0,gracefulli:1,guid:3,h:0,handl:1,have:0,help:[2,4],here:2,home:2,how:3,hp:[0,2],http:4,human:2,ignor:0,includ:[1,2],incomplet:1,insid:1,instanc:0,interact:[1,2],interrupt:1,job:[0,2],job_dir:[1,2],job_nam:2,job_path:1,keep:1,kei:0,kept:2,later:1,limit:2,list:[1,4],lr:[0,2],m:[0,2],mai:1,main:2,manag:[2,4],manual:1,maximum:1,must:1,n:1,name:[0,2],namespac:0,necessari:1,need:2,nest:0,newli:1,node:2,none:0,note:1,now:0,number:1,on_run:[1,2],on_run_resum:[1,2],onli:[1,2],option:[0,1],org:4,out:2,packag:4,paramet:[0,1,2],pass:[0,1],path:[1,2,4],pin:4,pip:2,present:0,previou:1,provid:[2,3],py:2,python3:4,python:[0,2,4],r:2,readabl:2,replac:0,repositori:4,requir:[2,4],resubmiss:[1,2],resubmit_limit:[1,2],resum:[1,2],reus:1,robust:2,run:[1,2,4],s:0,s_:0,sbatch:1,sbatch_opt:[1,2],schedul:1,script:1,second:1,see:[0,2],separ:2,sequenc:1,set:1,setup:[1,2],setup_resum:[1,2],sh:1,shell:4,shown:2,silent:0,similar:0,simpl:2,simple_yaml:2,simpli:[1,2],singl:1,slurm:[1,3,4],slurm_tmpdir:[1,2],some:0,sourc:[0,1,2],special:0,src:[1,2],ssl:4,stage:1,str:[0,1],string:[0,2],strptime:0,submit:[1,2],submit_job:[1,2],submit_job_dir:1,subsequ:2,support:2,syntax:0,tar:1,task:[1,2],teardown:[1,2],templat:[0,2],thei:0,thi:[1,2,3],through:0,time:[1,2],timeout:1,todo:3,train:2,txt:2,unlik:1,us:[0,1,2,3],user:1,usernam:2,valu:[0,1],variou:2,veri:0,version:4,via:0,virtual:4,virtualenv:2,when:1,which:[1,2],y:[0,2],yodaembed:4,you:[1,2],your:2},titles:["easy_slurm.format","easy_slurm.jobs","Easy Slurm","Walkthrough","Installation"],titleterms:{easi:2,easy_slurm:[0,1],featur:2,format:[0,2],hook:2,instal:[2,4],job:1,order:2,pip:4,poetri:4,slurm:2,us:4,usag:2,walkthrough:3,yaml:2}}) \ No newline at end of file

Hooks order#