looper 1.7.0a1__py3-none-any.whl → 1.7.1__py3-none-any.whl
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.
- looper/_version.py +1 -1
- looper/cli_looper.py +12 -4
- looper/conductor.py +14 -0
- looper/looper.py +3 -2
- {looper-1.7.0a1.dist-info → looper-1.7.1.dist-info}/METADATA +2 -2
- {looper-1.7.0a1.dist-info → looper-1.7.1.dist-info}/RECORD +10 -10
- {looper-1.7.0a1.dist-info → looper-1.7.1.dist-info}/WHEEL +1 -1
- {looper-1.7.0a1.dist-info → looper-1.7.1.dist-info}/LICENSE.txt +0 -0
- {looper-1.7.0a1.dist-info → looper-1.7.1.dist-info}/entry_points.txt +0 -0
- {looper-1.7.0a1.dist-info → looper-1.7.1.dist-info}/top_level.txt +0 -0
looper/_version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "1.7.
|
1
|
+
__version__ = "1.7.1"
|
looper/cli_looper.py
CHANGED
@@ -219,19 +219,27 @@ def build_parser():
|
|
219
219
|
for subparser in [run_subparser, rerun_subparser]:
|
220
220
|
subparser.add_argument(
|
221
221
|
"-u",
|
222
|
-
"--lump",
|
222
|
+
"--lump-s",
|
223
223
|
default=None,
|
224
224
|
metavar="X",
|
225
225
|
type=html_range(min_val=0, max_val=100, step=0.1, value=0),
|
226
|
-
help="
|
226
|
+
help="Lump by size: total input file size (GB) to batch into one job",
|
227
227
|
)
|
228
228
|
subparser.add_argument(
|
229
229
|
"-n",
|
230
|
-
"--
|
230
|
+
"--lump-n",
|
231
231
|
default=None,
|
232
232
|
metavar="N",
|
233
233
|
type=html_range(min_val=1, max_val="num_samples", value=1),
|
234
|
-
help="
|
234
|
+
help="Lump by number: number of samples to batch into one job",
|
235
|
+
)
|
236
|
+
subparser.add_argument(
|
237
|
+
"-j",
|
238
|
+
"--lump-j",
|
239
|
+
default=None,
|
240
|
+
metavar="J",
|
241
|
+
type=int,
|
242
|
+
help="Lump samples into number of jobs.",
|
235
243
|
)
|
236
244
|
|
237
245
|
check_subparser.add_argument(
|
looper/conductor.py
CHANGED
@@ -6,6 +6,7 @@ import os
|
|
6
6
|
import subprocess
|
7
7
|
import time
|
8
8
|
import yaml
|
9
|
+
from math import ceil
|
9
10
|
from copy import copy, deepcopy
|
10
11
|
from json import loads
|
11
12
|
from subprocess import check_output
|
@@ -132,6 +133,7 @@ class SubmissionConductor(object):
|
|
132
133
|
compute_variables=None,
|
133
134
|
max_cmds=None,
|
134
135
|
max_size=None,
|
136
|
+
max_jobs=None,
|
135
137
|
automatic=True,
|
136
138
|
collate=False,
|
137
139
|
):
|
@@ -166,6 +168,8 @@ class SubmissionConductor(object):
|
|
166
168
|
include in a single job script.
|
167
169
|
:param int | float | NoneType max_size: Upper bound on total file
|
168
170
|
size of inputs used by the commands lumped into single job script.
|
171
|
+
:param int | float | NoneType max_jobs: Upper bound on total number of jobs to
|
172
|
+
group samples for submission.
|
169
173
|
:param bool automatic: Whether the submission should be automatic once
|
170
174
|
the pool reaches capacity.
|
171
175
|
:param bool collate: Whether a collate job is to be submitted (runs on
|
@@ -200,6 +204,16 @@ class SubmissionConductor(object):
|
|
200
204
|
"{}".format(self.extra_pipe_args)
|
201
205
|
)
|
202
206
|
|
207
|
+
if max_jobs:
|
208
|
+
if max_jobs == 0 or max_jobs < 0:
|
209
|
+
raise ValueError(
|
210
|
+
"If specified, max job command count must be a positive integer, greater than zero."
|
211
|
+
)
|
212
|
+
|
213
|
+
num_samples = len(self.prj.samples)
|
214
|
+
samples_per_job = num_samples / max_jobs
|
215
|
+
max_cmds = ceil(samples_per_job)
|
216
|
+
|
203
217
|
if not self.collate:
|
204
218
|
self.automatic = automatic
|
205
219
|
if max_cmds is None and max_size is None:
|
looper/looper.py
CHANGED
@@ -404,8 +404,9 @@ class Runner(Executor):
|
|
404
404
|
extra_args=args.command_extra,
|
405
405
|
extra_args_override=args.command_extra_override,
|
406
406
|
ignore_flags=args.ignore_flags,
|
407
|
-
max_cmds=args.
|
408
|
-
max_size=args.
|
407
|
+
max_cmds=args.lump_n,
|
408
|
+
max_size=args.lump_s,
|
409
|
+
max_jobs=args.lump_j,
|
409
410
|
)
|
410
411
|
submission_conductors[piface.pipe_iface_file] = conductor
|
411
412
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: looper
|
3
|
-
Version: 1.7.
|
3
|
+
Version: 1.7.1
|
4
4
|
Summary: A pipeline submission engine that parses sample inputs and submits pipelines for each sample.
|
5
5
|
Home-page: https://github.com/pepkit/looper
|
6
6
|
Author: Nathan Sheffield, Vince Reuter, Michal Stolarczyk, Johanna Klughammer, Andre Rendeiro
|
@@ -23,7 +23,7 @@ Requires-Dist: logmuse >=0.2.0
|
|
23
23
|
Requires-Dist: pandas >=2.0.2
|
24
24
|
Requires-Dist: pephubclient >=0.1.2
|
25
25
|
Requires-Dist: peppy >=0.40.0
|
26
|
-
Requires-Dist: pipestat
|
26
|
+
Requires-Dist: pipestat <0.9.0,>=0.8.0
|
27
27
|
Requires-Dist: pyyaml >=3.12
|
28
28
|
Requires-Dist: rich >=9.10.0
|
29
29
|
Requires-Dist: ubiquerg >=0.5.2
|
@@ -1,13 +1,13 @@
|
|
1
1
|
looper/__init__.py,sha256=f_z9YY4ibOk7eyWoaViH_VaCXMlPQeiftbnibSFj-3E,1333
|
2
2
|
looper/__main__.py,sha256=8CX2ae8mUQNI_Z8pdBT4i5UFqROFX1awyFnuYCKuYXg,238
|
3
|
-
looper/_version.py,sha256=
|
3
|
+
looper/_version.py,sha256=rHqoOqa3LxWXvrBmnnm2LDmV9IlmMEb5qOmw5doj3fk,22
|
4
4
|
looper/cli_divvy.py,sha256=J07x83sqC4jJeu3_yS6KOARPWmwKGAV7JvN33T5zDac,5907
|
5
|
-
looper/cli_looper.py,sha256=
|
6
|
-
looper/conductor.py,sha256=
|
5
|
+
looper/cli_looper.py,sha256=se-EbQ4nucWxMiU0VLnmV0Kss-JMjSmWih6vHaOiLi0,26367
|
6
|
+
looper/conductor.py,sha256=9k0r_vsHCP25MrDjz7GR16_EEdqP9JZELYZJVm6ny1g,30777
|
7
7
|
looper/const.py,sha256=bPj4lTuj2l6gwHROWqj16iHfJFo9ghZAz8THNREWW4U,8558
|
8
8
|
looper/divvy.py,sha256=qa1ebbQTfNupAyDfhfEJ6mbZ_V3zk-D_E-Tck7miJ38,15688
|
9
9
|
looper/exceptions.py,sha256=r6SKKt-m8CXQnXGDnuiwoA6zBJhIZflygBKjX4RCloI,3419
|
10
|
-
looper/looper.py,sha256=
|
10
|
+
looper/looper.py,sha256=U3mNqXRDZRzmFXV26TcPQYKPdY1plPvMraNHTnps4mQ,30448
|
11
11
|
looper/parser_types.py,sha256=d3FHt54f9jo9VZMr5SQkbghcAdABqiYZW2JBGO5EBnw,2327
|
12
12
|
looper/pipeline_interface.py,sha256=y46tB1_73d1FX8N1w4-GGvRBJ7rqhenuUYVtUfIhK5s,14974
|
13
13
|
looper/plugins.py,sha256=MaMdPmK9U_4FkNJE5kccohBbY1i2qj1NTEucubFOJek,5747
|
@@ -55,9 +55,9 @@ looper/schemas/divvy_config_schema.yaml,sha256=7GJfKLc3VX4RGjHnOE1zxwsHXhj_ur9za
|
|
55
55
|
looper/schemas/pipeline_interface_schema_generic.yaml,sha256=D16Rkpj03H9WnvA_N18iNU-hH_HwOuyESJ8Hk5hZSXc,1518
|
56
56
|
looper/schemas/pipeline_interface_schema_project.yaml,sha256=-ZWyA0lKXWik3obuLNVk3IsAZYfbLVbCDvJnD-Fcluo,1567
|
57
57
|
looper/schemas/pipeline_interface_schema_sample.yaml,sha256=x0OwVnijJpvm50DscvvJujdK4UAI7d71pqVemQS-D-0,1564
|
58
|
-
looper-1.7.
|
59
|
-
looper-1.7.
|
60
|
-
looper-1.7.
|
61
|
-
looper-1.7.
|
62
|
-
looper-1.7.
|
63
|
-
looper-1.7.
|
58
|
+
looper-1.7.1.dist-info/LICENSE.txt,sha256=oB6ZGDa4kcznznJKJsLLFFcOZyi8Y6e2Jv0rJozgp-I,1269
|
59
|
+
looper-1.7.1.dist-info/METADATA,sha256=RRHlAK9WkJv1b9KtkZpMXHk2xyATbe5DJWCcRZMq7Wk,1740
|
60
|
+
looper-1.7.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
61
|
+
looper-1.7.1.dist-info/entry_points.txt,sha256=AEL1eb0gPLYvAEUewM35Ng4scXGZIWJK4Mxdj3Hm8Fw,83
|
62
|
+
looper-1.7.1.dist-info/top_level.txt,sha256=I0Yf7djsoQAMzwHBbDiQi9hGtq4Z41_Ma5CX8qXG8Y8,7
|
63
|
+
looper-1.7.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|