We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Assertion error with mutually exclusive argument groups
Suppressed mutually exclusive argument groups triggers an argparse bug: https://github.com/python/cpython/issues/62090. This causes issues when running `--help` on toil-wdl-runner.

┆Issue is synchronized with this [Jira Story](https://ucsc-cgl.atlassian.net/browse/TOIL-1471)
┆Issue Number: TOIL-1471


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/toil/options/cwl.py`
Content:
```
1 import os
2 from argparse import ArgumentParser
3 
4 from configargparse import SUPPRESS
5 
6 from toil.version import baseVersion
7 
8 
9 def add_cwl_options(parser: ArgumentParser, suppress: bool = True) -> None:
10     """
11     Add CWL options to the parser. This only adds nonpositional CWL arguments.
12 
13     :param parser: Parser to add options to
14     :param suppress: Suppress help output
15     :return: None
16     """
17     suppress_help = SUPPRESS if suppress else None
18     parser.add_argument("--not-strict", action="store_true", help=suppress_help)
19     parser.add_argument(
20         "--enable-dev",
21         action="store_true",
22         help=suppress_help or suppress_help or "Enable loading and running development versions of CWL",
23     )
24     parser.add_argument(
25         "--enable-ext",
26         action="store_true",
27         help=suppress_help or "Enable loading and running 'cwltool:' extensions to the CWL standards.",
28         default=False,
29     )
30     parser.add_argument("--quiet", dest="quiet", action="store_true", default=False, help=suppress_help)
31     parser.add_argument("--basedir", type=str, help=suppress_help)  # TODO: Might be hard-coded?
32     parser.add_argument("--outdir", type=str, default=None, help=suppress_help)
33     parser.add_argument("--version", action="version", version=baseVersion,
34                         help=suppress_help or "show program's version number and exit")
35     parser.add_argument(
36         "--log-dir",
37         type=str,
38         default="",
39         help=suppress_help or "Log your tools stdout/stderr to this location outside of container",
40     )
41     dockergroup = parser.add_mutually_exclusive_group()
42     dockergroup.add_argument(
43         "--user-space-docker-cmd",
44         help=suppress_help or "(Linux/OS X only) Specify a user space docker command (like "
45                               "udocker or dx-docker) that will be used to call 'pull' and 'run'",
46     )
47     dockergroup.add_argument(
48         "--singularity",
49         action="store_true",
50         default=False,
51         help=suppress_help or "Use Singularity runtime for running containers. "
52                               "Requires Singularity v2.6.1+ and Linux with kernel version v3.18+ or "
53                               "with overlayfs support backported.",
54     )
55     dockergroup.add_argument(
56         "--podman",
57         action="store_true",
58         default=False,
59         help=suppress_help or "Use Podman runtime for running containers. ",
60     )
61     dockergroup.add_argument(
62         "--no-container",
63         action="store_true",
64         help=suppress_help or "Do not execute jobs in a "
65                               "Docker container, even when `DockerRequirement` "
66                               "is specified under `hints`.",
67     )
68     dockergroup.add_argument(
69         "--leave-container",
70         action="store_false",
71         default=True,
72         help=suppress_help or "Do not delete Docker container used by jobs after they exit",
73         dest="rm_container",
74     )
75     extra_dockergroup = parser.add_argument_group()
76     extra_dockergroup.add_argument(
77         "--custom-net",
78         help=suppress_help or "Specify docker network name to pass to docker run command",
79     )
80     cidgroup = parser.add_argument_group(
81         "Options for recording the Docker container identifier into a file."
82     )
83     cidgroup.add_argument(
84         # Disabled as containerid is now saved by default
85         "--record-container-id",
86         action="store_true",
87         default=False,
88         help=suppress_help or SUPPRESS,
89         dest="record_container_id",
90     )
91 
92     cidgroup.add_argument(
93         "--cidfile-dir",
94         type=str,
95         help=suppress_help or "Store the Docker container ID into a file in the specified directory.",
96         default=None,
97         dest="cidfile_dir",
98     )
99 
100     cidgroup.add_argument(
101         "--cidfile-prefix",
102         type=str,
103         help=suppress_help or "Specify a prefix to the container ID filename. "
104                               "Final file name will be followed by a timestamp. "
105                               "The default is no prefix.",
106         default=None,
107         dest="cidfile_prefix",
108     )
109 
110     parser.add_argument(
111         "--preserve-environment",
112         type=str,
113         nargs="+",
114         help=suppress_help or "Preserve specified environment variables when running"
115                               " CommandLineTools",
116         metavar=("VAR1 VAR2"),
117         default=("PATH",),
118         dest="preserve_environment",
119     )
120     parser.add_argument(
121         "--preserve-entire-environment",
122         action="store_true",
123         help=suppress_help or "Preserve all environment variable when running CommandLineTools.",
124         default=False,
125         dest="preserve_entire_environment",
126     )
127     parser.add_argument(
128         "--destBucket",
129         type=str,
130         help=suppress_help or "Specify a cloud bucket endpoint for output files.",
131     )
132     parser.add_argument("--beta-dependency-resolvers-configuration", default=None, help=suppress_help)
133     parser.add_argument("--beta-dependencies-directory", default=None, help=suppress_help)
134     parser.add_argument("--beta-use-biocontainers", default=None, action="store_true", help=suppress_help)
135     parser.add_argument("--beta-conda-dependencies", default=None, action="store_true", help=suppress_help)
136     parser.add_argument(
137         "--tmpdir-prefix",
138         type=str,
139         help=suppress_help or "Path prefix for temporary directories",
140         default=None,
141     )
142     parser.add_argument(
143         "--tmp-outdir-prefix",
144         type=str,
145         help=suppress_help or "Path prefix for intermediate output directories",
146         default=None,
147     )
148     parser.add_argument(
149         "--force-docker-pull",
150         action="store_true",
151         default=False,
152         dest="force_docker_pull",
153         help=suppress_help or "Pull latest docker image even if it is locally present",
154     )
155     parser.add_argument(
156         "--no-match-user",
157         action="store_true",
158         default=False,
159         help=suppress_help or "Disable passing the current uid to `docker run --user`",
160     )
161     parser.add_argument(
162         "--no-read-only",
163         action="store_true",
164         default=False,
165         help=suppress_help or "Do not set root directory in the container as read-only",
166     )
167     parser.add_argument(
168         "--strict-memory-limit",
169         action="store_true",
170         help=suppress_help or "When running with "
171                               "software containers and the Docker engine, pass either the "
172                               "calculated memory allocation from ResourceRequirements or the "
173                               "default of 1 gigabyte to Docker's --memory option.",
174     )
175     parser.add_argument(
176         "--strict-cpu-limit",
177         action="store_true",
178         help=suppress_help or "When running with "
179                               "software containers and the Docker engine, pass either the "
180                               "calculated cpu allocation from ResourceRequirements or the "
181                               "default of 1 core to Docker's --cpu option. "
182                               "Requires docker version >= v1.13.",
183     )
184     parser.add_argument(
185         "--relax-path-checks",
186         action="store_true",
187         default=False,
188         help=suppress_help or "Relax requirements on path names to permit "
189                               "spaces and hash characters.",
190         dest="relax_path_checks",
191     )
192     parser.add_argument(
193         "--default-container",
194         help=suppress_help or "Specify a default docker container that will be "
195                               "used if the workflow fails to specify one.",
196     )
197     parser.add_argument(
198         "--disable-validate",
199         dest="do_validate",
200         action="store_false",
201         default=True,
202         help=suppress_help or SUPPRESS,
203     )
204     parser.add_argument(
205         "--fast-parser",
206         dest="fast_parser",
207         action="store_true",
208         default=False,
209         help=suppress_help or SUPPRESS,
210     )
211     checkgroup = parser.add_mutually_exclusive_group()
212     checkgroup.add_argument(
213         "--compute-checksum",
214         action="store_true",
215         default=True,
216         help=suppress_help or "Compute checksum of contents while collecting outputs",
217         dest="compute_checksum",
218     )
219     checkgroup.add_argument(
220         "--no-compute-checksum",
221         action="store_false",
222         help=suppress_help or "Do not compute checksum of contents while collecting outputs",
223         dest="compute_checksum",
224     )
225 
226     parser.add_argument(
227         "--eval-timeout",
228         help=suppress_help or "Time to wait for a Javascript expression to evaluate before giving "
229                               "an error, default 20s.",
230         type=float,
231         default=20,
232     )
233     parser.add_argument(
234         "--overrides",
235         type=str,
236         default=None,
237         help=suppress_help or "Read process requirement overrides from file.",
238     )
239 
240     parser.add_argument(
241         "--mpi-config-file",
242         type=str,
243         default=None,
244         help=suppress_help or "Platform specific configuration for MPI (parallel "
245                               "launcher, its flag etc). See the cwltool README "
246                               "section 'Running MPI-based tools' for details of the format: "
247                               "https://github.com/common-workflow-language/cwltool#running-mpi-based-tools-that-need-to-be-launched",
248     )
249     parser.add_argument(
250         "--bypass-file-store",
251         action="store_true",
252         default=False,
253         help=suppress_help or "Do not use Toil's file store and assume all "
254                               "paths are accessible in place from all nodes.",
255         dest="bypass_file_store",
256     )
257     parser.add_argument(
258         "--reference-inputs",
259         action="store_true",
260         default=False,
261         help=suppress_help or "Do not copy remote inputs into Toil's file "
262         "store and assume they are accessible in place from "
263         "all nodes.",
264         dest="reference_inputs",
265     )
266     parser.add_argument(
267         "--disable-streaming",
268         action="store_true",
269         default=False,
270         help=suppress_help or "Disable file streaming for files that have 'streamable' flag True",
271         dest="disable_streaming",
272     )
273 
274     provgroup = parser.add_argument_group(
275         "Options for recording provenance information of the execution"
276     )
277     provgroup.add_argument(
278         "--provenance",
279         help=suppress_help or "Save provenance to specified folder as a "
280                               "Research Object that captures and aggregates "
281                               "workflow execution and data products.",
282         type=str,
283     )
284 
285     provgroup.add_argument(
286         "--enable-user-provenance",
287         default=False,
288         action="store_true",
289         help=suppress_help or "Record user account info as part of provenance.",
290         dest="user_provenance",
291     )
292     provgroup.add_argument(
293         "--disable-user-provenance",
294         default=False,
295         action="store_false",
296         help=suppress_help or "Do not record user account info in provenance.",
297         dest="user_provenance",
298     )
299     provgroup.add_argument(
300         "--enable-host-provenance",
301         default=False,
302         action="store_true",
303         help=suppress_help or "Record host info as part of provenance.",
304         dest="host_provenance",
305     )
306     provgroup.add_argument(
307         "--disable-host-provenance",
308         default=False,
309         action="store_false",
310         help=suppress_help or "Do not record host info in provenance.",
311         dest="host_provenance",
312     )
313     provgroup.add_argument(
314         "--orcid",
315         help=suppress_help or "Record user ORCID identifier as part of "
316                               "provenance, e.g. https://orcid.org/0000-0002-1825-0097 "
317                               "or 0000-0002-1825-0097. Alternatively the environment variable "
318                               "ORCID may be set.",
319         dest="orcid",
320         default=os.environ.get("ORCID", ""),
321         type=str,
322     )
323     provgroup.add_argument(
324         "--full-name",
325         help=suppress_help or "Record full name of user as part of provenance, "
326                               "e.g. Josiah Carberry. You may need to use shell quotes to preserve "
327                               "spaces. Alternatively the environment variable CWL_FULL_NAME may "
328                               "be set.",
329         dest="cwl_full_name",
330         default=os.environ.get("CWL_FULL_NAME", ""),
331         type=str,
332     )
333
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/src/toil/options/cwl.py b/src/toil/options/cwl.py
--- a/src/toil/options/cwl.py
+++ b/src/toil/options/cwl.py
@@ -38,7 +38,10 @@
         default="",
         help=suppress_help or "Log your tools stdout/stderr to this location outside of container",
     )
-    dockergroup = parser.add_mutually_exclusive_group()
+    # this is as a result of suppressed help statements not working well with mutually_exclusive_groups, which will
+    # cause an assertion error
+    # https://github.com/python/cpython/issues/62090
+    dockergroup = parser.add_mutually_exclusive_group() if not suppress_help else parser.add_argument_group()
     dockergroup.add_argument(
         "--user-space-docker-cmd",
         help=suppress_help or "(Linux/OS X only) Specify a user space docker command (like "
@@ -208,7 +211,8 @@
         default=False,
         help=suppress_help or SUPPRESS,
     )
-    checkgroup = parser.add_mutually_exclusive_group()
+    # same workaround as dockergroup
+    checkgroup = parser.add_mutually_exclusive_group() if not suppress_help else parser.add_argument_group()
     checkgroup.add_argument(
         "--compute-checksum",
         action="store_true",

{"golden_diff": "diff --git a/src/toil/options/cwl.py b/src/toil/options/cwl.py\n--- a/src/toil/options/cwl.py\n+++ b/src/toil/options/cwl.py\n@@ -38,7 +38,10 @@\n         default=\"\",\n         help=suppress_help or \"Log your tools stdout/stderr to this location outside of container\",\n     )\n-    dockergroup = parser.add_mutually_exclusive_group()\n+    # this is as a result of suppressed help statements not working well with mutually_exclusive_groups, which will\n+    # cause an assertion error\n+    # https://github.com/python/cpython/issues/62090\n+    dockergroup = parser.add_mutually_exclusive_group() if not suppress_help else parser.add_argument_group()\n     dockergroup.add_argument(\n         \"--user-space-docker-cmd\",\n         help=suppress_help or \"(Linux/OS X only) Specify a user space docker command (like \"\n@@ -208,7 +211,8 @@\n         default=False,\n         help=suppress_help or SUPPRESS,\n     )\n-    checkgroup = parser.add_mutually_exclusive_group()\n+    # same workaround as dockergroup\n+    checkgroup = parser.add_mutually_exclusive_group() if not suppress_help else parser.add_argument_group()\n     checkgroup.add_argument(\n         \"--compute-checksum\",\n         action=\"store_true\",\n", "issue": "Assertion error with mutually exclusive argument groups\nSuppressed mutually exclusive argument groups triggers an argparse bug: https://github.com/python/cpython/issues/62090. This causes issues when running `--help` on toil-wdl-runner.\n\n\u2506Issue is synchronized with this [Jira Story](https://ucsc-cgl.atlassian.net/browse/TOIL-1471)\n\u2506Issue Number: TOIL-1471\n\n", "before_files": [{"content": "import os\nfrom argparse import ArgumentParser\n\nfrom configargparse import SUPPRESS\n\nfrom toil.version import baseVersion\n\n\ndef add_cwl_options(parser: ArgumentParser, suppress: bool = True) -> None:\n    \"\"\"\n    Add CWL options to the parser. This only adds nonpositional CWL arguments.\n\n    :param parser: Parser to add options to\n    :param suppress: Suppress help output\n    :return: None\n    \"\"\"\n    suppress_help = SUPPRESS if suppress else None\n    parser.add_argument(\"--not-strict\", action=\"store_true\", help=suppress_help)\n    parser.add_argument(\n        \"--enable-dev\",\n        action=\"store_true\",\n        help=suppress_help or suppress_help or \"Enable loading and running development versions of CWL\",\n    )\n    parser.add_argument(\n        \"--enable-ext\",\n        action=\"store_true\",\n        help=suppress_help or \"Enable loading and running 'cwltool:' extensions to the CWL standards.\",\n        default=False,\n    )\n    parser.add_argument(\"--quiet\", dest=\"quiet\", action=\"store_true\", default=False, help=suppress_help)\n    parser.add_argument(\"--basedir\", type=str, help=suppress_help)  # TODO: Might be hard-coded?\n    parser.add_argument(\"--outdir\", type=str, default=None, help=suppress_help)\n    parser.add_argument(\"--version\", action=\"version\", version=baseVersion,\n                        help=suppress_help or \"show program's version number and exit\")\n    parser.add_argument(\n        \"--log-dir\",\n        type=str,\n        default=\"\",\n        help=suppress_help or \"Log your tools stdout/stderr to this location outside of container\",\n    )\n    dockergroup = parser.add_mutually_exclusive_group()\n    dockergroup.add_argument(\n        \"--user-space-docker-cmd\",\n        help=suppress_help or \"(Linux/OS X only) Specify a user space docker command (like \"\n                              \"udocker or dx-docker) that will be used to call 'pull' and 'run'\",\n    )\n    dockergroup.add_argument(\n        \"--singularity\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Use Singularity runtime for running containers. \"\n                              \"Requires Singularity v2.6.1+ and Linux with kernel version v3.18+ or \"\n                              \"with overlayfs support backported.\",\n    )\n    dockergroup.add_argument(\n        \"--podman\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Use Podman runtime for running containers. \",\n    )\n    dockergroup.add_argument(\n        \"--no-container\",\n        action=\"store_true\",\n        help=suppress_help or \"Do not execute jobs in a \"\n                              \"Docker container, even when `DockerRequirement` \"\n                              \"is specified under `hints`.\",\n    )\n    dockergroup.add_argument(\n        \"--leave-container\",\n        action=\"store_false\",\n        default=True,\n        help=suppress_help or \"Do not delete Docker container used by jobs after they exit\",\n        dest=\"rm_container\",\n    )\n    extra_dockergroup = parser.add_argument_group()\n    extra_dockergroup.add_argument(\n        \"--custom-net\",\n        help=suppress_help or \"Specify docker network name to pass to docker run command\",\n    )\n    cidgroup = parser.add_argument_group(\n        \"Options for recording the Docker container identifier into a file.\"\n    )\n    cidgroup.add_argument(\n        # Disabled as containerid is now saved by default\n        \"--record-container-id\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or SUPPRESS,\n        dest=\"record_container_id\",\n    )\n\n    cidgroup.add_argument(\n        \"--cidfile-dir\",\n        type=str,\n        help=suppress_help or \"Store the Docker container ID into a file in the specified directory.\",\n        default=None,\n        dest=\"cidfile_dir\",\n    )\n\n    cidgroup.add_argument(\n        \"--cidfile-prefix\",\n        type=str,\n        help=suppress_help or \"Specify a prefix to the container ID filename. \"\n                              \"Final file name will be followed by a timestamp. \"\n                              \"The default is no prefix.\",\n        default=None,\n        dest=\"cidfile_prefix\",\n    )\n\n    parser.add_argument(\n        \"--preserve-environment\",\n        type=str,\n        nargs=\"+\",\n        help=suppress_help or \"Preserve specified environment variables when running\"\n                              \" CommandLineTools\",\n        metavar=(\"VAR1 VAR2\"),\n        default=(\"PATH\",),\n        dest=\"preserve_environment\",\n    )\n    parser.add_argument(\n        \"--preserve-entire-environment\",\n        action=\"store_true\",\n        help=suppress_help or \"Preserve all environment variable when running CommandLineTools.\",\n        default=False,\n        dest=\"preserve_entire_environment\",\n    )\n    parser.add_argument(\n        \"--destBucket\",\n        type=str,\n        help=suppress_help or \"Specify a cloud bucket endpoint for output files.\",\n    )\n    parser.add_argument(\"--beta-dependency-resolvers-configuration\", default=None, help=suppress_help)\n    parser.add_argument(\"--beta-dependencies-directory\", default=None, help=suppress_help)\n    parser.add_argument(\"--beta-use-biocontainers\", default=None, action=\"store_true\", help=suppress_help)\n    parser.add_argument(\"--beta-conda-dependencies\", default=None, action=\"store_true\", help=suppress_help)\n    parser.add_argument(\n        \"--tmpdir-prefix\",\n        type=str,\n        help=suppress_help or \"Path prefix for temporary directories\",\n        default=None,\n    )\n    parser.add_argument(\n        \"--tmp-outdir-prefix\",\n        type=str,\n        help=suppress_help or \"Path prefix for intermediate output directories\",\n        default=None,\n    )\n    parser.add_argument(\n        \"--force-docker-pull\",\n        action=\"store_true\",\n        default=False,\n        dest=\"force_docker_pull\",\n        help=suppress_help or \"Pull latest docker image even if it is locally present\",\n    )\n    parser.add_argument(\n        \"--no-match-user\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Disable passing the current uid to `docker run --user`\",\n    )\n    parser.add_argument(\n        \"--no-read-only\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Do not set root directory in the container as read-only\",\n    )\n    parser.add_argument(\n        \"--strict-memory-limit\",\n        action=\"store_true\",\n        help=suppress_help or \"When running with \"\n                              \"software containers and the Docker engine, pass either the \"\n                              \"calculated memory allocation from ResourceRequirements or the \"\n                              \"default of 1 gigabyte to Docker's --memory option.\",\n    )\n    parser.add_argument(\n        \"--strict-cpu-limit\",\n        action=\"store_true\",\n        help=suppress_help or \"When running with \"\n                              \"software containers and the Docker engine, pass either the \"\n                              \"calculated cpu allocation from ResourceRequirements or the \"\n                              \"default of 1 core to Docker's --cpu option. \"\n                              \"Requires docker version >= v1.13.\",\n    )\n    parser.add_argument(\n        \"--relax-path-checks\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Relax requirements on path names to permit \"\n                              \"spaces and hash characters.\",\n        dest=\"relax_path_checks\",\n    )\n    parser.add_argument(\n        \"--default-container\",\n        help=suppress_help or \"Specify a default docker container that will be \"\n                              \"used if the workflow fails to specify one.\",\n    )\n    parser.add_argument(\n        \"--disable-validate\",\n        dest=\"do_validate\",\n        action=\"store_false\",\n        default=True,\n        help=suppress_help or SUPPRESS,\n    )\n    parser.add_argument(\n        \"--fast-parser\",\n        dest=\"fast_parser\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or SUPPRESS,\n    )\n    checkgroup = parser.add_mutually_exclusive_group()\n    checkgroup.add_argument(\n        \"--compute-checksum\",\n        action=\"store_true\",\n        default=True,\n        help=suppress_help or \"Compute checksum of contents while collecting outputs\",\n        dest=\"compute_checksum\",\n    )\n    checkgroup.add_argument(\n        \"--no-compute-checksum\",\n        action=\"store_false\",\n        help=suppress_help or \"Do not compute checksum of contents while collecting outputs\",\n        dest=\"compute_checksum\",\n    )\n\n    parser.add_argument(\n        \"--eval-timeout\",\n        help=suppress_help or \"Time to wait for a Javascript expression to evaluate before giving \"\n                              \"an error, default 20s.\",\n        type=float,\n        default=20,\n    )\n    parser.add_argument(\n        \"--overrides\",\n        type=str,\n        default=None,\n        help=suppress_help or \"Read process requirement overrides from file.\",\n    )\n\n    parser.add_argument(\n        \"--mpi-config-file\",\n        type=str,\n        default=None,\n        help=suppress_help or \"Platform specific configuration for MPI (parallel \"\n                              \"launcher, its flag etc). See the cwltool README \"\n                              \"section 'Running MPI-based tools' for details of the format: \"\n                              \"https://github.com/common-workflow-language/cwltool#running-mpi-based-tools-that-need-to-be-launched\",\n    )\n    parser.add_argument(\n        \"--bypass-file-store\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Do not use Toil's file store and assume all \"\n                              \"paths are accessible in place from all nodes.\",\n        dest=\"bypass_file_store\",\n    )\n    parser.add_argument(\n        \"--reference-inputs\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Do not copy remote inputs into Toil's file \"\n        \"store and assume they are accessible in place from \"\n        \"all nodes.\",\n        dest=\"reference_inputs\",\n    )\n    parser.add_argument(\n        \"--disable-streaming\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Disable file streaming for files that have 'streamable' flag True\",\n        dest=\"disable_streaming\",\n    )\n\n    provgroup = parser.add_argument_group(\n        \"Options for recording provenance information of the execution\"\n    )\n    provgroup.add_argument(\n        \"--provenance\",\n        help=suppress_help or \"Save provenance to specified folder as a \"\n                              \"Research Object that captures and aggregates \"\n                              \"workflow execution and data products.\",\n        type=str,\n    )\n\n    provgroup.add_argument(\n        \"--enable-user-provenance\",\n        default=False,\n        action=\"store_true\",\n        help=suppress_help or \"Record user account info as part of provenance.\",\n        dest=\"user_provenance\",\n    )\n    provgroup.add_argument(\n        \"--disable-user-provenance\",\n        default=False,\n        action=\"store_false\",\n        help=suppress_help or \"Do not record user account info in provenance.\",\n        dest=\"user_provenance\",\n    )\n    provgroup.add_argument(\n        \"--enable-host-provenance\",\n        default=False,\n        action=\"store_true\",\n        help=suppress_help or \"Record host info as part of provenance.\",\n        dest=\"host_provenance\",\n    )\n    provgroup.add_argument(\n        \"--disable-host-provenance\",\n        default=False,\n        action=\"store_false\",\n        help=suppress_help or \"Do not record host info in provenance.\",\n        dest=\"host_provenance\",\n    )\n    provgroup.add_argument(\n        \"--orcid\",\n        help=suppress_help or \"Record user ORCID identifier as part of \"\n                              \"provenance, e.g. https://orcid.org/0000-0002-1825-0097 \"\n                              \"or 0000-0002-1825-0097. Alternatively the environment variable \"\n                              \"ORCID may be set.\",\n        dest=\"orcid\",\n        default=os.environ.get(\"ORCID\", \"\"),\n        type=str,\n    )\n    provgroup.add_argument(\n        \"--full-name\",\n        help=suppress_help or \"Record full name of user as part of provenance, \"\n                              \"e.g. Josiah Carberry. You may need to use shell quotes to preserve \"\n                              \"spaces. Alternatively the environment variable CWL_FULL_NAME may \"\n                              \"be set.\",\n        dest=\"cwl_full_name\",\n        default=os.environ.get(\"CWL_FULL_NAME\", \"\"),\n        type=str,\n    )\n", "path": "src/toil/options/cwl.py"}], "after_files": [{"content": "import os\nfrom argparse import ArgumentParser\n\nfrom configargparse import SUPPRESS\n\nfrom toil.version import baseVersion\n\n\ndef add_cwl_options(parser: ArgumentParser, suppress: bool = True) -> None:\n    \"\"\"\n    Add CWL options to the parser. This only adds nonpositional CWL arguments.\n\n    :param parser: Parser to add options to\n    :param suppress: Suppress help output\n    :return: None\n    \"\"\"\n    suppress_help = SUPPRESS if suppress else None\n    parser.add_argument(\"--not-strict\", action=\"store_true\", help=suppress_help)\n    parser.add_argument(\n        \"--enable-dev\",\n        action=\"store_true\",\n        help=suppress_help or suppress_help or \"Enable loading and running development versions of CWL\",\n    )\n    parser.add_argument(\n        \"--enable-ext\",\n        action=\"store_true\",\n        help=suppress_help or \"Enable loading and running 'cwltool:' extensions to the CWL standards.\",\n        default=False,\n    )\n    parser.add_argument(\"--quiet\", dest=\"quiet\", action=\"store_true\", default=False, help=suppress_help)\n    parser.add_argument(\"--basedir\", type=str, help=suppress_help)  # TODO: Might be hard-coded?\n    parser.add_argument(\"--outdir\", type=str, default=None, help=suppress_help)\n    parser.add_argument(\"--version\", action=\"version\", version=baseVersion,\n                        help=suppress_help or \"show program's version number and exit\")\n    parser.add_argument(\n        \"--log-dir\",\n        type=str,\n        default=\"\",\n        help=suppress_help or \"Log your tools stdout/stderr to this location outside of container\",\n    )\n    # this is as a result of suppressed help statements not working well with mutually_exclusive_groups, which will\n    # cause an assertion error\n    # https://github.com/python/cpython/issues/62090\n    dockergroup = parser.add_mutually_exclusive_group() if not suppress_help else parser.add_argument_group()\n    dockergroup.add_argument(\n        \"--user-space-docker-cmd\",\n        help=suppress_help or \"(Linux/OS X only) Specify a user space docker command (like \"\n                              \"udocker or dx-docker) that will be used to call 'pull' and 'run'\",\n    )\n    dockergroup.add_argument(\n        \"--singularity\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Use Singularity runtime for running containers. \"\n                              \"Requires Singularity v2.6.1+ and Linux with kernel version v3.18+ or \"\n                              \"with overlayfs support backported.\",\n    )\n    dockergroup.add_argument(\n        \"--podman\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Use Podman runtime for running containers. \",\n    )\n    dockergroup.add_argument(\n        \"--no-container\",\n        action=\"store_true\",\n        help=suppress_help or \"Do not execute jobs in a \"\n                              \"Docker container, even when `DockerRequirement` \"\n                              \"is specified under `hints`.\",\n    )\n    dockergroup.add_argument(\n        \"--leave-container\",\n        action=\"store_false\",\n        default=True,\n        help=suppress_help or \"Do not delete Docker container used by jobs after they exit\",\n        dest=\"rm_container\",\n    )\n    extra_dockergroup = parser.add_argument_group()\n    extra_dockergroup.add_argument(\n        \"--custom-net\",\n        help=suppress_help or \"Specify docker network name to pass to docker run command\",\n    )\n    cidgroup = parser.add_argument_group(\n        \"Options for recording the Docker container identifier into a file.\"\n    )\n    cidgroup.add_argument(\n        # Disabled as containerid is now saved by default\n        \"--record-container-id\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or SUPPRESS,\n        dest=\"record_container_id\",\n    )\n\n    cidgroup.add_argument(\n        \"--cidfile-dir\",\n        type=str,\n        help=suppress_help or \"Store the Docker container ID into a file in the specified directory.\",\n        default=None,\n        dest=\"cidfile_dir\",\n    )\n\n    cidgroup.add_argument(\n        \"--cidfile-prefix\",\n        type=str,\n        help=suppress_help or \"Specify a prefix to the container ID filename. \"\n                              \"Final file name will be followed by a timestamp. \"\n                              \"The default is no prefix.\",\n        default=None,\n        dest=\"cidfile_prefix\",\n    )\n\n    parser.add_argument(\n        \"--preserve-environment\",\n        type=str,\n        nargs=\"+\",\n        help=suppress_help or \"Preserve specified environment variables when running\"\n                              \" CommandLineTools\",\n        metavar=(\"VAR1 VAR2\"),\n        default=(\"PATH\",),\n        dest=\"preserve_environment\",\n    )\n    parser.add_argument(\n        \"--preserve-entire-environment\",\n        action=\"store_true\",\n        help=suppress_help or \"Preserve all environment variable when running CommandLineTools.\",\n        default=False,\n        dest=\"preserve_entire_environment\",\n    )\n    parser.add_argument(\n        \"--destBucket\",\n        type=str,\n        help=suppress_help or \"Specify a cloud bucket endpoint for output files.\",\n    )\n    parser.add_argument(\"--beta-dependency-resolvers-configuration\", default=None, help=suppress_help)\n    parser.add_argument(\"--beta-dependencies-directory\", default=None, help=suppress_help)\n    parser.add_argument(\"--beta-use-biocontainers\", default=None, action=\"store_true\", help=suppress_help)\n    parser.add_argument(\"--beta-conda-dependencies\", default=None, action=\"store_true\", help=suppress_help)\n    parser.add_argument(\n        \"--tmpdir-prefix\",\n        type=str,\n        help=suppress_help or \"Path prefix for temporary directories\",\n        default=None,\n    )\n    parser.add_argument(\n        \"--tmp-outdir-prefix\",\n        type=str,\n        help=suppress_help or \"Path prefix for intermediate output directories\",\n        default=None,\n    )\n    parser.add_argument(\n        \"--force-docker-pull\",\n        action=\"store_true\",\n        default=False,\n        dest=\"force_docker_pull\",\n        help=suppress_help or \"Pull latest docker image even if it is locally present\",\n    )\n    parser.add_argument(\n        \"--no-match-user\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Disable passing the current uid to `docker run --user`\",\n    )\n    parser.add_argument(\n        \"--no-read-only\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Do not set root directory in the container as read-only\",\n    )\n    parser.add_argument(\n        \"--strict-memory-limit\",\n        action=\"store_true\",\n        help=suppress_help or \"When running with \"\n                              \"software containers and the Docker engine, pass either the \"\n                              \"calculated memory allocation from ResourceRequirements or the \"\n                              \"default of 1 gigabyte to Docker's --memory option.\",\n    )\n    parser.add_argument(\n        \"--strict-cpu-limit\",\n        action=\"store_true\",\n        help=suppress_help or \"When running with \"\n                              \"software containers and the Docker engine, pass either the \"\n                              \"calculated cpu allocation from ResourceRequirements or the \"\n                              \"default of 1 core to Docker's --cpu option. \"\n                              \"Requires docker version >= v1.13.\",\n    )\n    parser.add_argument(\n        \"--relax-path-checks\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Relax requirements on path names to permit \"\n                              \"spaces and hash characters.\",\n        dest=\"relax_path_checks\",\n    )\n    parser.add_argument(\n        \"--default-container\",\n        help=suppress_help or \"Specify a default docker container that will be \"\n                              \"used if the workflow fails to specify one.\",\n    )\n    parser.add_argument(\n        \"--disable-validate\",\n        dest=\"do_validate\",\n        action=\"store_false\",\n        default=True,\n        help=suppress_help or SUPPRESS,\n    )\n    parser.add_argument(\n        \"--fast-parser\",\n        dest=\"fast_parser\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or SUPPRESS,\n    )\n    # same workaround as dockergroup\n    checkgroup = parser.add_mutually_exclusive_group() if not suppress_help else parser.add_argument_group()\n    checkgroup.add_argument(\n        \"--compute-checksum\",\n        action=\"store_true\",\n        default=True,\n        help=suppress_help or \"Compute checksum of contents while collecting outputs\",\n        dest=\"compute_checksum\",\n    )\n    checkgroup.add_argument(\n        \"--no-compute-checksum\",\n        action=\"store_false\",\n        help=suppress_help or \"Do not compute checksum of contents while collecting outputs\",\n        dest=\"compute_checksum\",\n    )\n\n    parser.add_argument(\n        \"--eval-timeout\",\n        help=suppress_help or \"Time to wait for a Javascript expression to evaluate before giving \"\n                              \"an error, default 20s.\",\n        type=float,\n        default=20,\n    )\n    parser.add_argument(\n        \"--overrides\",\n        type=str,\n        default=None,\n        help=suppress_help or \"Read process requirement overrides from file.\",\n    )\n\n    parser.add_argument(\n        \"--mpi-config-file\",\n        type=str,\n        default=None,\n        help=suppress_help or \"Platform specific configuration for MPI (parallel \"\n                              \"launcher, its flag etc). See the cwltool README \"\n                              \"section 'Running MPI-based tools' for details of the format: \"\n                              \"https://github.com/common-workflow-language/cwltool#running-mpi-based-tools-that-need-to-be-launched\",\n    )\n    parser.add_argument(\n        \"--bypass-file-store\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Do not use Toil's file store and assume all \"\n                              \"paths are accessible in place from all nodes.\",\n        dest=\"bypass_file_store\",\n    )\n    parser.add_argument(\n        \"--reference-inputs\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Do not copy remote inputs into Toil's file \"\n        \"store and assume they are accessible in place from \"\n        \"all nodes.\",\n        dest=\"reference_inputs\",\n    )\n    parser.add_argument(\n        \"--disable-streaming\",\n        action=\"store_true\",\n        default=False,\n        help=suppress_help or \"Disable file streaming for files that have 'streamable' flag True\",\n        dest=\"disable_streaming\",\n    )\n\n    provgroup = parser.add_argument_group(\n        \"Options for recording provenance information of the execution\"\n    )\n    provgroup.add_argument(\n        \"--provenance\",\n        help=suppress_help or \"Save provenance to specified folder as a \"\n                              \"Research Object that captures and aggregates \"\n                              \"workflow execution and data products.\",\n        type=str,\n    )\n\n    provgroup.add_argument(\n        \"--enable-user-provenance\",\n        default=False,\n        action=\"store_true\",\n        help=suppress_help or \"Record user account info as part of provenance.\",\n        dest=\"user_provenance\",\n    )\n    provgroup.add_argument(\n        \"--disable-user-provenance\",\n        default=False,\n        action=\"store_false\",\n        help=suppress_help or \"Do not record user account info in provenance.\",\n        dest=\"user_provenance\",\n    )\n    provgroup.add_argument(\n        \"--enable-host-provenance\",\n        default=False,\n        action=\"store_true\",\n        help=suppress_help or \"Record host info as part of provenance.\",\n        dest=\"host_provenance\",\n    )\n    provgroup.add_argument(\n        \"--disable-host-provenance\",\n        default=False,\n        action=\"store_false\",\n        help=suppress_help or \"Do not record host info in provenance.\",\n        dest=\"host_provenance\",\n    )\n    provgroup.add_argument(\n        \"--orcid\",\n        help=suppress_help or \"Record user ORCID identifier as part of \"\n                              \"provenance, e.g. https://orcid.org/0000-0002-1825-0097 \"\n                              \"or 0000-0002-1825-0097. Alternatively the environment variable \"\n                              \"ORCID may be set.\",\n        dest=\"orcid\",\n        default=os.environ.get(\"ORCID\", \"\"),\n        type=str,\n    )\n    provgroup.add_argument(\n        \"--full-name\",\n        help=suppress_help or \"Record full name of user as part of provenance, \"\n                              \"e.g. Josiah Carberry. You may need to use shell quotes to preserve \"\n                              \"spaces. Alternatively the environment variable CWL_FULL_NAME may \"\n                              \"be set.\",\n        dest=\"cwl_full_name\",\n        default=os.environ.get(\"CWL_FULL_NAME\", \"\"),\n        type=str,\n    )\n", "path": "src/toil/options/cwl.py"}]}