.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/hybrid_choice/generate_jed_run.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_hybrid_choice_generate_jed_run.py: Prepare for server ================== Generate SLURM .run job scripts for batch execution on the JED cluster. This script scans the current directory for Python files whose names start with ``plot_`` and automatically generates corresponding ``.run`` SLURM job scripts. Each generated job script executes the Python file using ``srun`` with a predefined set of SLURM directives suitable for long Bayesian computations on the JED cluster. The goal is to avoid manually writing and maintaining multiple SLURM job files when running a collection of similar Python scripts. Michel Bierlaire Thu Dec 25 2025, 08:13:11 .. GENERATED FROM PYTHON SOURCE LINES 21-117 .. code-block:: Python import os from pathlib import Path # Directory containing the Python scripts (current directory) BASE_DIR = Path(".") JED_DIRECTORY = 'bayesian' # Template for the .run file SLURM_TEMPLATE = """#!/bin/bash -l #SBATCH --chdir {workdir} #SBATCH --nodes 1 #SBATCH --ntasks 1 #SBATCH --cpus-per-task 36 #SBATCH --time 70:00:00 #SBATCH --export=ALL,XLA_FLAGS="--xla_force_host_platform_device_count=36" #SBATCH --job-name={job_name} #SBATCH --output={log_filename} #SBATCH --error={err_filename} source ~/venvs/biogeme/bin/activate echo STARTING AT `date` echo "SLURM_JOB_ID=$SLURM_JOB_ID SLURM_JOB_NAME=$SLURM_JOB_NAME HOSTNAME=$(hostname)" srun python -u {script} echo FINISHED AT `date` """ def is_valid_script(path: Path) -> bool: """Return True if the file should have a ``.run`` job script generated. A file is considered valid if it: - is a regular file, - has the ``.py`` extension, - starts with the prefix ``plot_``, and - is not this script itself. """ return ( path.is_file() and path.suffix == ".py" and path.name.startswith("plot_") and path.name != Path(__file__).name ) def main(): """Generate one SLURM ``.run`` file per eligible Python script. The function: - scans the current directory for Python files matching the naming convention defined in :func:`is_valid_script`, - fills the SLURM template with script-specific parameters (job name, log files, working directory), - writes the resulting ``.run`` files next to the original scripts, and - marks them as executable. If no matching Python files are found, a short message is printed and the function exits without creating any job scripts. """ py_files = [f for f in BASE_DIR.iterdir() if is_valid_script(f)] if not py_files: print("No Python scripts found.") return workdir = f'/home/bierlair/{JED_DIRECTORY}' for py in py_files: job_name = py.stem log_filename = py.with_name(py.stem + "_%j.out") err_filename = py.with_name(py.stem + "_%j.err") run_filename = py.with_suffix(".run") content = SLURM_TEMPLATE.format( workdir=workdir, script=py.name, job_name=job_name, log_filename=log_filename, err_filename=err_filename, ) with open(run_filename, "w") as f: f.write(content) # Make run file executable os.chmod(run_filename, 0o755) print(f"Generated: {run_filename}") if __name__ == "__main__": main() .. _sphx_glr_download_auto_examples_hybrid_choice_generate_jed_run.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: generate_jed_run.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: generate_jed_run.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: generate_jed_run.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_