From 6468b571b543a1eea070e27ab516385c0859b7e1 Mon Sep 17 00:00:00 2001 From: Bradley Dice Date: Mon, 11 Jan 2021 23:02:56 -0600 Subject: [PATCH 1/2] Remove index parameter (resolves #418). --- flow/project.py | 57 ++++++++++++++++++++----------------------------- 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/flow/project.py b/flow/project.py index 94c32cfb7..cf5c980fe 100644 --- a/flow/project.py +++ b/flow/project.py @@ -1127,17 +1127,18 @@ def isdisjoint(self, group): """ return set(self).isdisjoint(set(group)) - def _generate_id(self, jobs, operation_name=None, index=0): + def _generate_id(self, aggregate, operation_name=None): """Generate a unique id which identifies this group and job(s). + The generated value is used to identify interactions with the + scheduler. + Parameters ---------- - jobs : sequence of :class:`signac.contrib.job.Job` - Jobs defining the unique id. + aggregate : tuple of :class:`signac.contrib.job.Job` + The aggregate of signac jobs. operation_name : str Operation name defining the unique id. (Default value = None) - index : int - Index for the :class:`~._JobOperation`. (Default value = 0) Returns ------- @@ -1145,7 +1146,7 @@ def _generate_id(self, jobs, operation_name=None, index=0): The unique id. """ - project = jobs[0]._project + project = aggregate[0]._project # The full name is designed to be truly unique for each job-group. if operation_name is None: @@ -1153,12 +1154,11 @@ def _generate_id(self, jobs, operation_name=None, index=0): else: op_string = operation_name - aggregate_id = get_aggregate_id(jobs) - full_name = "{}%{}%{}%{}".format( + aggregate_id = get_aggregate_id(aggregate) + full_name = "{}%{}%{}".format( project.root_directory(), aggregate_id, op_string, - index, ) # The job_op_id is a hash computed from the unique full name. job_op_id = md5(full_name.encode("utf-8")).hexdigest() @@ -1166,23 +1166,20 @@ def _generate_id(self, jobs, operation_name=None, index=0): # The actual job id is then constructed from a readable part and the # job_op_id, ensuring that the job-op is still somewhat identifiable, # but guaranteed to be unique. The readable name is based on the - # project id, aggregate id, operation name, and the index number. All - # names and the id itself are restricted in length to guarantee that - # the id does not get too long. + # project id, aggregate id, and operation name. All names and the id + # itself are restricted in length to guarantee that the id does not get + # too long. max_len = self.MAX_LEN_ID - len(job_op_id) if max_len < len(job_op_id): raise ValueError(f"Value for MAX_LEN_ID is too small ({self.MAX_LEN_ID}).") separator = getattr(project._environment, "JOB_ID_SEPARATOR", "/") - readable_name = ( - "{project}{sep}{aggregate_id}{sep}{op_string}{sep}{index:04d}{sep}".format( - sep=separator, - project=str(project)[:12], - aggregate_id=aggregate_id, - op_string=op_string[:12], - index=index, - )[:max_len] - ) + readable_name = "{project}{sep}{aggregate_id}{sep}{op_string}{sep}".format( + sep=separator, + project=str(project)[:12], + aggregate_id=aggregate_id, + op_string=op_string[:12], + )[:max_len] # By appending the unique job_op_id, we ensure that each id is truly unique. return readable_name + job_op_id @@ -1193,7 +1190,6 @@ def _create_submission_job_operation( default_directives, jobs, ignore_conditions_on_execution=IgnoreConditions.NONE, - index=0, ): """Create a _JobOperation object from the :class:`~.FlowGroup`. @@ -1215,8 +1211,6 @@ def _create_submission_job_operation( Specify if preconditions and/or postconditions are to be ignored while checking eligibility during execution (after submission). The default is :class:`IgnoreConditions.NONE`. - index : int - Index for the :class:`~._JobOperation`. (Default value = 0) Returns ------- @@ -1279,7 +1273,7 @@ def _get_run_ops(ignore_ops, additional_ignores_flag): ) submission_job_operation = _SubmissionJobOperation( - self._generate_id(jobs, index=index), + self._generate_id(jobs), self.name, jobs, cmd=unevaluated_cmd, @@ -1297,7 +1291,6 @@ def _create_run_job_operations( default_directives, jobs, ignore_conditions=IgnoreConditions.NONE, - index=0, ): """Create _JobOperation object(s) from the :class:`~.FlowGroup`. @@ -1319,8 +1312,6 @@ def _create_run_job_operations( Specify if preconditions and/or postconditions are to be ignored when determining eligibility check. The default is :class:`IgnoreConditions.NONE`. - index : int - Index for the :class:`~._JobOperation`. (Default value = 0) Returns ------- @@ -1347,7 +1338,7 @@ def _create_run_job_operations( jobs=jobs, ) job_op = _JobOperation( - self._generate_id(jobs, operation_name, index=index), + self._generate_id(jobs, operation_name), operation_name, jobs, cmd=unevaluated_cmd, @@ -2055,7 +2046,7 @@ def _generate_selected_aggregate_groups( Parameters ---------- - selected_aggregates : iterable of aggregates + selected_aggregates : sequence of tuples of :class:`~signac.contrib.job.Job` Aggregates to select. selected_groups : set of :class:`~.FlowGroup` Groups to select. @@ -2551,7 +2542,7 @@ def _fetch_status( else: raise RuntimeError( "Configuration value status_parallelization is invalid. " - "Valid choices are 'thread', 'parallel', or 'none'." + "Valid choices are 'thread', 'process', or 'none'." ) except RuntimeError as error: if "can't start new thread" not in error.args: @@ -3538,7 +3529,7 @@ def _get_submission_operations( Parameters ---------- - aggregates : sequence of aggregates + aggregates : sequence of tuples of :class:`~signac.contrib.job.Job` The aggregates to consider for submission. default_directives : dict The default directives to use for the operations. This is to allow @@ -3583,7 +3574,6 @@ def _get_submission_operations( entrypoint=self._entrypoint, default_directives=default_directives, jobs=aggregate, - index=0, ignore_conditions_on_execution=ignore_conditions_on_execution, ) @@ -4527,7 +4517,6 @@ def next_operations(self, *jobs, ignore_conditions=IgnoreConditions.NONE): jobs=aggregate, default_directives={}, ignore_conditions=ignore_conditions, - index=0, ): yield JobOperation( operation.id, From 1bf68fbbbc76239720a51e42f7c91c0da0d25dbd Mon Sep 17 00:00:00 2001 From: Bradley Dice Date: Mon, 11 Jan 2021 23:08:28 -0600 Subject: [PATCH 2/2] Update template reference data. --- tests/template_reference_data.tar.gz | Bin 16524 -> 16365 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/template_reference_data.tar.gz b/tests/template_reference_data.tar.gz index f79eaa3a99df59d47b378192e5105896151a8410..f62d42d67785bd834a98f562bad23809b7c4bd7f 100644 GIT binary patch literal 16365 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 b5OEPMYauoN*FUa~FmzvxL!0FoC(Hi>*O}ED literal 16524 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