in dora/shep.py [0:0]
def maybe_submit_lazy(self, sheep: Sheep, slurm_config: SlurmConfig, rules: SubmitRules):
"""
Decides whether to schedule a new job for the given sheep, based on the rules
given in `rules`.
Jobs are actually only scheduled once the `commit()` method is called.
"""
if sheep.job is not None:
state = sheep.state()
if state == 'COMPLETED':
if rules.replace_done:
logger.debug(f"Ignoring previously completed job {sheep.job.job_id}")
sheep.job = None
elif state in ["FAILED", "CANCELLED", "OUT_OF_MEMORY", "TIMEOUT", "MISSING"]:
logger.debug(f"Previous job {sheep.job.job_id} failed or was canceled")
if rules.retry:
sheep.job = None
else:
if rules.replace:
logger.debug(f"Cancelling previous job {sheep.job.job_id} with status {state}")
self.cancel_lazy(sheep.job)
sheep.job = None
if sheep.job is None:
if not self._in_job_array:
self._to_submit.append(_JobArray(slurm_config))
assert slurm_config == self._to_submit[-1].slurm_config
self._to_submit[-1].sheeps.append(sheep)