diff --git a/pydra/engine/core.py b/pydra/engine/core.py
index 11111396..7cd8b7b8 100644
--- a/pydra/engine/core.py
+++ b/pydra/engine/core.py
@@ -247,9 +247,9 @@ class TaskBase:
             TODO
 
         """
+        self.state.prepare_states(self.inputs)
+        self.state.prepare_inputs()
         if state_index is not None:
-            if self.state is None:
-                raise Exception("can't use state_index if no splitter is used")
             inputs_copy = deepcopy(self.inputs)
             for key, ind in self.state.inputs_ind[state_index].items():
                 setattr(
@@ -510,6 +510,9 @@ class TaskBase:
     @property
     def done(self):
         """Check whether the tasks has been finalized and all outputs are stored."""
+        # if any of the field is lazy, there is no need to check results
+        if is_lazy(self.inputs):
+            return False
         if self.state:
             # TODO: only check for needed state result
             if self.result() and all(self.result()):
@@ -866,3 +869,11 @@ def is_task(obj):
 def is_workflow(obj):
     """Check whether an object is a :class:`Workflow` instance."""
     return isinstance(obj, Workflow)
+
+
+def is_lazy(obj):
+    """Check whether an object has any field that is a Lazy Field"""
+    for f in attr_fields(obj):
+        if isinstance(getattr(obj, f.name), LazyField):
+            return True
+    return False
diff --git a/pydra/engine/task.py b/pydra/engine/task.py
index 6f1d2ebe..0519b78e 100644
--- a/pydra/engine/task.py
+++ b/pydra/engine/task.py
@@ -44,7 +44,7 @@ import inspect
 import typing as ty
 from pathlib import Path
 
-from .core import TaskBase
+from .core import TaskBase, is_lazy
 from ..utils.messenger import AuditFlag
 from .specs import (
     File,
@@ -215,17 +215,17 @@ class ShellCommandTask(TaskBase):
             return super(ShellCommandTask, cls).__new__(cls)
 
         if len(container_info) == 3:
-            type_cont, image, bind = container_info
+            type, image, bind = container_info
         elif len(container_info) == 2:
-            type_cont, image, bind = container_info + (None,)
+            type, image, bind = container_info + (None,)
         else:
             raise Exception(
                 f"container_info has to have 2 or 3 elements, but {container_info} provided"
             )
 
-        if type_cont == "docker":
+        if type == "docker":
             return DockerTask(image=image, bindings=bind, *args, **kwargs)
-        elif type_cont == "singularity":
+        elif type == "singularity":
             return SingularityTask(image=image, bindings=bind, *args, **kwargs)
         else:
             raise Exception(
@@ -288,7 +288,20 @@ class ShellCommandTask(TaskBase):
 
     @property
     def command_args(self):
-        """Get command line arguments."""
+        """Get command line arguments, returns a list if task has a state"""
+        if is_lazy(self.inputs):
+            raise Exception("can't return cmdline, self.inputs has LazyFields")
+        if self.state:
+            command_args_list = []
+            self.state.prepare_states(self.inputs)
+            for ii, el in enumerate(self.state.states_ind):
+                command_args_list.append(self._command_args_single(el, ind=ii))
+            return command_args_list
+        else:
+            return self._command_args_single(self.inputs)
+
+    def _command_args_single(self, state_ind, ind=None):
+        """Get command line arguments for a single state"""
         pos_args = []  # list for (position, command arg)
         for f in attr_fields(self.inputs):
             if f.name == "executable":
@@ -311,13 +324,16 @@ class ShellCommandTask(TaskBase):
             # if f.metadata.get("copyfile") in [True, False]:
             #    value = str(self.inputs.map_copyfiles[f.name])
             # else:
-            value = getattr(self.inputs, f.name)
+            if self.state and f"{self.name}.{f.name}" in state_ind:
+                value = getattr(self.inputs, f.name)[state_ind[f"{self.name}.{f.name}"]]
+            else:
+                value = getattr(self.inputs, f.name)
             if is_local_file(f):
                 value = str(value)
             # changing path to the cpath (the directory should be mounted)
             if getattr(self, "bind_paths", None) and is_local_file(f):
                 lpath = Path(value)
-                cdir = self.bind_paths[lpath.parent][0]
+                cdir = self.bind_paths(ind=ind)[lpath.parent][0]
                 cpath = cdir.joinpath(lpath.name)
                 value = str(cpath)
             if f.type is bool:
@@ -338,21 +354,32 @@ class ShellCommandTask(TaskBase):
             cmd_args += el[1]
         return cmd_args
 
-    @command_args.setter
-    def command_args(self, args: ty.Dict):
-        self.inputs = attr.evolve(self.inputs, **args)
-
     @property
     def cmdline(self):
-        """Get the actual command line that will be submitted."""
+        """ Get the actual command line that will be submitted
+            Returns a list if the task has a state.
+        """
+        if is_lazy(self.inputs):
+            raise Exception("can't return cmdline, self.inputs has LazyFields")
         orig_inputs = attr.asdict(self.inputs)
         modified_inputs = template_update(self.inputs)
         if modified_inputs is not None:
             self.inputs = attr.evolve(self.inputs, **modified_inputs)
         if isinstance(self, ContainerTask):
-            cmdline = " ".join(self.container_args + self.command_args)
+            if self.state:
+                cmdline = []
+                for con, com in zip(self.container_args, self.command_args):
+                    cmdline.append(" ".join(con + com))
+            else:
+                cmdline = " ".join(self.container_args + self.command_args)
         else:
-            cmdline = " ".join(self.command_args)
+            if self.state:
+                cmdline = []
+                for el in self.command_args:
+                    cmdline.append(" ".join(el))
+            else:
+                cmdline = " ".join(self.command_args)
+
         self.inputs = attr.evolve(self.inputs, **orig_inputs)
         return cmdline
 
@@ -428,23 +455,27 @@ class ContainerTask(ShellCommandTask):
             **kwargs,
         )
 
-    @property
-    def container_args(self):
+    def container_check(self, container_type):
         """Get container-specific CLI arguments."""
         if self.inputs.container is None:
             raise AttributeError("Container software is not specified")
-        cargs = [self.inputs.container]
+        elif self.inputs.container != container_type:
+            raise AttributeError(
+                f"Container type should be {container_type}, but {self.inputs.container} given"
+            )
         if self.inputs.image is None:
             raise AttributeError("Container image is not specified")
-        return cargs
 
-    @property
-    def bind_paths(self):
+    def bind_paths(self, ind=None):
         """Return bound mount points: ``dict(lpath: (cpath, mode))``."""
         bind_paths = {}
         output_dir_cpath = None
         if self.inputs.bindings is None:
             self.inputs.bindings = []
+        if ind is None:
+            output_dir = self.output_dir
+        else:
+            output_dir = self.output_dir[ind]
         for binding in self.inputs.bindings:
             if len(binding) == 3:
                 lpath, cpath, mode = binding
@@ -454,17 +485,17 @@ class ContainerTask(ShellCommandTask):
                 raise Exception(
                     f"binding should have length 2, 3, or 4, it has {len(binding)}"
                 )
-            if Path(lpath) == self.output_dir:
+            if Path(lpath) == output_dir:
                 output_dir_cpath = cpath
             if mode is None:
                 mode = "rw"  # default
             bind_paths[Path(lpath)] = (Path(cpath), mode)
         # output_dir is added to the bindings if not part of self.inputs.bindings
         if not output_dir_cpath:
-            bind_paths[self.output_dir] = (self.output_cpath, "rw")
+            bind_paths[output_dir] = (self.output_cpath, "rw")
         return bind_paths
 
-    def binds(self, opt):
+    def binds(self, opt, ind=None):
         """
         Specify mounts to bind from local filesystems to container and working directory.
 
@@ -472,9 +503,8 @@ class ContainerTask(ShellCommandTask):
 
         """
         bargs = []
-        for (key, val) in self.bind_paths.items():
+        for (key, val) in self.bind_paths(ind).items():
             bargs.extend([opt, "{0}:{1}:{2}".format(key, val[0], val[1])])
-        # TODO: would need changes for singularity
         return bargs
 
 
@@ -542,16 +572,36 @@ class DockerTask(ContainerTask):
 
     @property
     def container_args(self):
-        """Get container-specific CLI arguments."""
-        cargs = super().container_args
-        assert self.inputs.container == "docker"
-        cargs.append("run")
+        """Get container-specific CLI arguments, returns a list if the task has a state"""
+        if is_lazy(self.inputs):
+            raise Exception("can't return container_args, self.inputs has LazyFields")
+        self.container_check("docker")
+        if self.state:
+            self.state.prepare_states(self.inputs)
+            cargs_list = []
+            for ii, el in enumerate(self.state.states_ind):
+                if f"{self.name}.image" in el:
+                    cargs_list.append(
+                        self._container_args_single(
+                            self.inputs.image[el[f"{self.name}.image"]], ind=ii
+                        )
+                    )
+                else:
+                    cargs_list.append(
+                        self._container_args_single(self.inputs.image, ind=ii)
+                    )
+            return cargs_list
+        else:
+            return self._container_args_single(self.inputs.image)
+
+    def _container_args_single(self, image, ind=None):
+        cargs = ["docker", "run"]
         if self.inputs.container_xargs is not None:
             cargs.extend(self.inputs.container_xargs)
 
-        cargs.extend(self.binds("-v"))
+        cargs.extend(self.binds("-v", ind))
         cargs.extend(["-w", str(self.output_cpath)])
-        cargs.append(self.inputs.image)
+        cargs.append(image)
 
         return cargs
 
@@ -615,14 +665,35 @@ class SingularityTask(ContainerTask):
     @property
     def container_args(self):
         """Get container-specific CLI arguments."""
-        cargs = super().container_args
-        assert self.inputs.container == "singularity"
-        cargs.append("exec")
+        if is_lazy(self.inputs):
+            raise Exception("can't return container_args, self.inputs has LazyFields")
+        self.container_check("singularity")
+        if self.state:
+            self.state.prepare_states(self.inputs)
+            cargs_list = []
+            for ii, el in enumerate(self.state.states_ind):
+                if f"{self.name}.image" in el:
+                    cargs_list.append(
+                        self._container_args_single(
+                            self.inputs.image[el[f"{self.name}.image"]], ind=ii
+                        )
+                    )
+                else:
+                    cargs_list.append(
+                        self._container_args_single(self.inputs.image, ind=ii)
+                    )
+            return cargs_list
+        else:
+            return self._container_args_single(self.inputs.image)
+
+    def _container_args_single(self, image, ind=None):
+        cargs = ["singularity", "exec"]
+
         if self.inputs.container_xargs is not None:
             cargs.extend(self.inputs.container_xargs)
-        cargs.append(self.inputs.image)
+        cargs.append(image)
 
         # insert bindings before image
         idx = len(cargs) - 1
-        cargs[idx:-1] = self.binds("-B")
+        cargs[idx:-1] = self.binds("-B", ind)
         return cargs

TODO for Shell Task and ContainerTask
There are some issues tak don't have to be fixed right away, but should be done soon:
(will be updated)

- [x] cmdline for Shell: doesn't make sense for tasks with splitter

- [x] inputs for Containers: 
      - checking if has image and it's proper image, raising exceptions; 
      - bindings: allowing for tuple (not only list), tuple should be 3 or 2 elements (without `ro`)
      - checking if the local directory exists

- [x] adding an option to `Task` that converts it to the `DockerTask`: see @satra comments in #144 

- [x] provide option to have position for arguments
diff --git a/pydra/engine/tests/test_dockertask.py b/pydra/engine/tests/test_dockertask.py
index 6a823007..4841cf2a 100644
--- a/pydra/engine/tests/test_dockertask.py
+++ b/pydra/engine/tests/test_dockertask.py
@@ -352,6 +352,12 @@ def test_docker_st_1(plugin):
     )
     assert docky.state.splitter == "docky.executable"
 
+    for ii, el in enumerate(docky.cmdline):
+        assert (
+            el
+            == f"docker run --rm -v {docky.output_dir[ii]}:/output_pydra:rw -w /output_pydra {docky.inputs.image} {cmd[ii]}"
+        )
+
     res = docky(plugin=plugin)
     assert res[0].output.stdout == "/output_pydra\n"
     assert res[1].output.stdout == "root\n"
@@ -370,6 +376,12 @@ def test_docker_st_2(plugin):
     )
     assert docky.state.splitter == "docky.image"
 
+    for ii, el in enumerate(docky.cmdline):
+        assert (
+            el
+            == f"docker run --rm -v {docky.output_dir[ii]}:/output_pydra:rw -w /output_pydra {docky.inputs.image[ii]} {' '.join(cmd)}"
+        )
+
     res = docky(plugin=plugin)
     assert "Debian" in res[0].output.stdout
     assert "Ubuntu" in res[1].output.stdout
@@ -409,6 +421,17 @@ def test_docker_st_4(plugin):
     assert docky.state.combiner == ["docky.image"]
     assert docky.state.splitter_final == "docky.executable"
 
+    for ii, el in enumerate(docky.cmdline):
+        i, j = ii // 2, ii % 2
+        if j == 0:
+            cmd_str = "whoami"
+        else:
+            cmd_str = " ".join(["cat", "/etc/issue"])
+        assert (
+            el
+            == f"docker run --rm -v {docky.output_dir[ii]}:/output_pydra:rw -w /output_pydra {docky.inputs.image[i]} {cmd_str}"
+        )
+
     res = docky(plugin=plugin)
 
     # checking the first command
@@ -458,6 +481,10 @@ def test_wf_docker_1(plugin, tmpdir):
     )
     wf.set_output([("out", wf.docky_echo.lzout.stdout)])
 
+    with pytest.raises(Exception) as excinfo:
+        wf.docky_echo.cmdline
+    assert "can't return cmdline" in str(excinfo.value)
+
     with Submitter(plugin=plugin) as sub:
         wf(submitter=sub)
 
diff --git a/pydra/engine/tests/test_shelltask.py b/pydra/engine/tests/test_shelltask.py
index 0a5d6541..7284a4cd 100644
--- a/pydra/engine/tests/test_shelltask.py
+++ b/pydra/engine/tests/test_shelltask.py
@@ -122,8 +122,7 @@ def test_shell_cmd_3(plugin):
 
     # all args given as executable
     shelly = ShellCommandTask(name="shelly", executable=cmd).split("executable")
-    # TODO: doesnt make sense for tasks with splitter
-    #    assert shelly.cmdline == " ".join(cmd)
+    assert shelly.cmdline == ["pwd", "whoami"]
     res = shelly(plugin=plugin)
     assert res[0].output.stdout == f"{str(shelly.output_dir[0])}\n"
     if "USER" in os.environ:
@@ -147,8 +146,7 @@ def test_shell_cmd_4(plugin):
     )
     assert shelly.inputs.executable == "echo"
     assert shelly.inputs.args == ["nipype", "pydra"]
-    # this doesnt work, cmdline gives echo nipype pydra
-    # assert shelly.cmdline == "echo pydra"
+    assert shelly.cmdline == ["echo nipype", "echo pydra"]
     res = shelly(plugin=plugin)
 
     assert res[0].output.stdout == "nipype\n"
@@ -173,8 +171,7 @@ def test_shell_cmd_5(plugin):
     )
     assert shelly.inputs.executable == "echo"
     assert shelly.inputs.args == ["nipype", "pydra"]
-    # this doesnt work, cmdline gives echo nipype pydra
-    # assert shelly.cmdline == "echo pydra"
+    assert shelly.cmdline == ["echo nipype", "echo pydra"]
     res = shelly(plugin=plugin)
 
     assert res[0][0].output.stdout == "nipype\n"
@@ -194,8 +191,12 @@ def test_shell_cmd_6(plugin):
     )
     assert shelly.inputs.executable == ["echo", ["echo", "-n"]]
     assert shelly.inputs.args == ["nipype", "pydra"]
-    # this doesnt work, cmdline gives echo nipype pydra
-    # assert shelly.cmdline == "echo pydra"
+    assert shelly.cmdline == [
+        "echo nipype",
+        "echo pydra",
+        "echo -n nipype",
+        "echo -n pydra",
+    ]
     res = shelly(plugin=plugin)
 
     assert res[0].output.stdout == "nipype\n"
@@ -234,8 +235,7 @@ def test_shell_cmd_7(plugin):
     )
     assert shelly.inputs.executable == ["echo", ["echo", "-n"]]
     assert shelly.inputs.args == ["nipype", "pydra"]
-    # this doesnt work, cmdline gives echo nipype pydra
-    # assert shelly.cmdline == "echo pydra"
+
     res = shelly(plugin=plugin)
 
     assert res[0][0].output.stdout == "nipype\n"
@@ -2251,9 +2251,7 @@ def test_fsl():
 
     # TODO: not sure why this has to be string
     in_file = Path(os.path.dirname(os.path.abspath(__file__))) / "data" / "foo.nii"
-    out_file = (
-        Path(os.path.dirname(os.path.abspath(__file__))) / "data" / "foo_brain.nii"
-    )
+
     # separate command into exec + args
     shelly = ShellCommandTask(
         name="bet_task", executable="bet", in_file=in_file, input_spec=bet_input_spec
diff --git a/pydra/engine/tests/test_task.py b/pydra/engine/tests/test_task.py
index ce78efe6..45b47cd5 100644
--- a/pydra/engine/tests/test_task.py
+++ b/pydra/engine/tests/test_task.py
@@ -351,7 +351,7 @@ def test_shell_cmd(tmpdir):
 
 
 def test_container_cmds(tmpdir):
-    containy = ContainerTask(name="containy", executable="pwd")
+    containy = DockerTask(name="containy", executable="pwd")
     with pytest.raises(AttributeError):
         containy.cmdline
     containy.inputs.container = "docker"

pip install -e .[dev]
parse_log_pytest
pytest
pytest pytest-cov pytest-xdist
apt-get update apt-get install -y gcc
3.9
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
asttokens==3.0.0
attrs==25.3.0
black==25.1.0
bleach==6.2.0
cachetools==5.5.2
certifi==2025.1.31
cfgv==3.4.0
charset-normalizer==3.4.1
ci-info==0.3.0
click==8.1.8
cloudpickle==3.1.1
codecov==2.1.13
comm==0.2.2
coverage==7.8.0
debugpy==1.8.13
decorator==5.2.1
defusedxml==0.7.1
distlib==0.3.9
entrypoints==0.4
etelemetry==0.3.1
exceptiongroup @ file:///croot/exceptiongroup_1706031385326/work
execnet==2.1.1
executing==2.2.0
fastjsonschema==2.21.1
filelock==3.18.0
frozendict==2.4.6
identify==2.6.9
idna==3.10
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
ipykernel==6.9.2
ipython==8.18.1
ipython-genutils==0.2.0
ipywidgets==8.1.5
jedi==0.19.2
Jinja2==3.0.0
json5==0.10.0
jsonschema==4.23.0
jsonschema-specifications==2024.10.1
jupyter==1.1.1
jupyter-client==6.1.12
jupyter-console==6.4.2
jupyter-contrib-nbextensions==0.5.1
jupyter-highlight-selected-word==0.2.0
jupyter_contrib_core==0.4.2
jupyter_core==5.7.2
jupyter_latex_envs==1.4.6
jupyter_nbextensions_configurator==0.4.1
jupyterlab==2.3.2
jupyterlab-server==1.2.0
jupyterlab_widgets==3.0.13
lxml==5.3.1
MarkupSafe==3.0.2
matplotlib-inline==0.1.7
mistune==0.8.4
mypy-extensions==1.0.0
nbconvert==5.6.1
nbformat==5.10.4
nest-asyncio==1.6.0
nodeenv==1.9.1
notebook==5.7.16
numpy==2.0.2
packaging @ file:///croot/packaging_1734472117206/work
pandocfilters==1.5.1
parso==0.8.4
pathspec==0.12.1
pexpect==4.9.0
platformdirs==4.3.7
pluggy @ file:///croot/pluggy_1733169602837/work
pre_commit==4.2.0
prometheus_client==0.21.1
prompt_toolkit==3.0.50
psutil==7.0.0
ptyprocess==0.7.0
pure_eval==0.2.3
-e git+https://github.com/nipype/pydra.git@6d6340500696f68390de551bd168b54d3f88dc21#egg=pydra
Pygments==2.19.1
PyLD==2.0.4
pytest @ file:///croot/pytest_1738938843180/work
pytest-cov==6.0.0
pytest-env==1.1.5
pytest-xdist==3.6.1
python-dateutil==2.9.0.post0
PyYAML==6.0.2
pyzmq==26.3.0
referencing==0.36.2
requests==2.32.3
rpds-py==0.24.0
Send2Trash==1.8.3
six==1.17.0
stack-data==0.6.3
terminado==0.13.3
testpath==0.6.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
tornado==4.5.3
traitlets==5.14.3
typing_extensions==4.13.0
urllib3==2.3.0
virtualenv==20.29.3
wcwidth==0.2.13
webencodings==0.5.1
widgetsnbextension==4.0.13

name: pydra
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - exceptiongroup=1.2.0=py39h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - packaging=24.2=py39h06a4308_0
  - pip=25.0=py39h06a4308_0
  - pluggy=1.5.0=py39h06a4308_0
  - pytest=8.3.4=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py39h06a4308_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - asttokens==3.0.0
      - attrs==25.3.0
      - black==25.1.0
      - bleach==6.2.0
      - cachetools==5.5.2
      - certifi==2025.1.31
      - cfgv==3.4.0
      - charset-normalizer==3.4.1
      - ci-info==0.3.0
      - click==8.1.8
      - cloudpickle==3.1.1
      - codecov==2.1.13
      - comm==0.2.2
      - coverage==7.8.0
      - debugpy==1.8.13
      - decorator==5.2.1
      - defusedxml==0.7.1
      - distlib==0.3.9
      - entrypoints==0.4
      - etelemetry==0.3.1
      - execnet==2.1.1
      - executing==2.2.0
      - fastjsonschema==2.21.1
      - filelock==3.18.0
      - frozendict==2.4.6
      - identify==2.6.9
      - idna==3.10
      - ipykernel==6.9.2
      - ipython==8.18.1
      - ipython-genutils==0.2.0
      - ipywidgets==8.1.5
      - jedi==0.19.2
      - jinja2==3.0.0
      - json5==0.10.0
      - jsonschema==4.23.0
      - jsonschema-specifications==2024.10.1
      - jupyter==1.1.1
      - jupyter-client==6.1.12
      - jupyter-console==6.4.2
      - jupyter-contrib-core==0.4.2
      - jupyter-contrib-nbextensions==0.5.1
      - jupyter-core==5.7.2
      - jupyter-highlight-selected-word==0.2.0
      - jupyter-latex-envs==1.4.6
      - jupyter-nbextensions-configurator==0.4.1
      - jupyterlab==2.3.2
      - jupyterlab-server==1.2.0
      - jupyterlab-widgets==3.0.13
      - lxml==5.3.1
      - markupsafe==3.0.2
      - matplotlib-inline==0.1.7
      - mistune==0.8.4
      - mypy-extensions==1.0.0
      - nbconvert==5.6.1
      - nbformat==5.10.4
      - nest-asyncio==1.6.0
      - nodeenv==1.9.1
      - notebook==5.7.16
      - numpy==2.0.2
      - pandocfilters==1.5.1
      - parso==0.8.4
      - pathspec==0.12.1
      - pexpect==4.9.0
      - platformdirs==4.3.7
      - pre-commit==4.2.0
      - prometheus-client==0.21.1
      - prompt-toolkit==3.0.50
      - psutil==7.0.0
      - ptyprocess==0.7.0
      - pure-eval==0.2.3
      - pydra==0.2.2+43.g6d634050
      - pygments==2.19.1
      - pyld==2.0.4
      - pytest-cov==6.0.0
      - pytest-env==1.1.5
      - pytest-xdist==3.6.1
      - python-dateutil==2.9.0.post0
      - pyyaml==6.0.2
      - pyzmq==26.3.0
      - referencing==0.36.2
      - requests==2.32.3
      - rpds-py==0.24.0
      - send2trash==1.8.3
      - six==1.17.0
      - stack-data==0.6.3
      - terminado==0.13.3
      - testpath==0.6.0
      - tornado==4.5.3
      - traitlets==5.14.3
      - typing-extensions==4.13.0
      - urllib3==2.3.0
      - virtualenv==20.29.3
      - wcwidth==0.2.13
      - webencodings==0.5.1
      - widgetsnbextension==4.0.13
prefix: /opt/conda/envs/pydra

pydra/engine/tests/test_shelltask.py::test_shell_cmd_3[cf] pydra/engine/tests/test_shelltask.py::test_shell_cmd_4[cf] pydra/engine/tests/test_shelltask.py::test_shell_cmd_5[cf] pydra/engine/tests/test_shelltask.py::test_shell_cmd_6[cf]
pydra/engine/tests/test_shelltask.py::test_shell_cmd_1[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_1[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_1_strip[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_1_strip[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_2[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_2[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_2a[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_2a[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_2b[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_2b[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_7[cf] pydra/engine/tests/test_shelltask.py::test_wf_shell_cmd_1[cf] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_1[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_1[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_2[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_2[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_3[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_3[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_3a[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_3a[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_3b_exception[cf] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_3c[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_3c[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_4[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_4[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_4a[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_4a[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_4b_exception[cf] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_4c_exception[cf] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_4d_exception[cf] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_5_nosubm[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_5_nosubm[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_5a_exception[cf] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_6[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_6[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_6a_exception[cf] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_6b[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_6b[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_7[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_7[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_7a[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_7a[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_copyfile_1[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_copyfile_1[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_copyfile_1a[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_copyfile_1a[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_state_1[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_state_1[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_state_2[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_state_2[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_state_3[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_state_3[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_copyfile_state_1[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_inputspec_copyfile_state_1[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_wf_shell_cmd_2[cf] pydra/engine/tests/test_shelltask.py::test_wf_shell_cmd_2a[cf] pydra/engine/tests/test_shelltask.py::test_wf_shell_cmd_3[cf] pydra/engine/tests/test_shelltask.py::test_wf_shell_cmd_3a[cf] pydra/engine/tests/test_shelltask.py::test_wf_shell_cmd_state_1[cf] pydra/engine/tests/test_shelltask.py::test_wf_shell_cmd_ndst_1[cf] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_1[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_1[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_1a[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_1a[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_1b_exception[cf] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_2[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_2[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_2a_exception[cf] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_3[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_3[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_4[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_4[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_5[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_5[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_state_outputspec_1[cf-result_no_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_state_outputspec_1[cf-result_submitter] pydra/engine/tests/test_shelltask.py::test_shell_cmd_outputspec_wf_1[cf] pydra/engine/tests/test_task.py::test_output pydra/engine/tests/test_task.py::test_annotated_func pydra/engine/tests/test_task.py::test_annotated_func_multreturn pydra/engine/tests/test_task.py::test_annotated_func_multreturn_exception pydra/engine/tests/test_task.py::test_halfannotated_func pydra/engine/tests/test_task.py::test_halfannotated_func_multreturn pydra/engine/tests/test_task.py::test_notannotated_func pydra/engine/tests/test_task.py::test_notannotated_func_returnlist pydra/engine/tests/test_task.py::test_halfannotated_func_multrun_returnlist pydra/engine/tests/test_task.py::test_notannotated_func_multreturn pydra/engine/tests/test_task.py::test_exception_func pydra/engine/tests/test_task.py::test_audit_prov pydra/engine/tests/test_task.py::test_audit_all pydra/engine/tests/test_task.py::test_shell_cmd pydra/engine/tests/test_task.py::test_container_cmds pydra/engine/tests/test_task.py::test_docker_cmd pydra/engine/tests/test_task.py::test_singularity_cmd pydra/engine/tests/test_task.py::test_functask_callable pydra/engine/tests/test_task.py::test_taskhooks
pydra/engine/core.py pydra/engine/task.py
pydra/engine/core.py pydra/engine/task.py