Skip to content

property 'state' of 'NodeExecution' object has no setter #845

@octomike

Description

@octomike

What version of Pydra are you using?

1.0a3

What were you trying to do?:

Running a very simple (nested workflow) like this:

from pydra.define import python, workflow


@python.define
def T1(a):
    pass


@python.define
def T2(a):
    pass


@python.define
def Step1():
    pass


@python.define
def Step2():
    pass


@python.define
def Step3(a, b):
    pass


# inner workflow:
@workflow.define
def Inner(a):
    step1 = workflow.add(Step1().split(a=a).combine("a"))
    step2 = workflow.add(Step2().split(("a", "b"), a=a, b=step1.out).combine("a"))
    step3 = workflow.add(Step3(step2.out, b=step1.out))

    return step3.out


# outer workflow
@workflow.define
def Outer(a, iterations):
    initial = workflow.add(T1(a))
    more = workflow.add(T2(initial.out))
    updates = [workflow.add(Inner(more.out), name="iteration0")]
    for i in range(1, iterations):
        updates.append(workflow.add(Inner(more.out), name=f"iteration{i}"))
    return updates[-1].out

What did you expect will happen?

The workflow should try execute.

What actually happened?

Execution crashed with an internal pydra error:

Traceback (most recent call last):
  File "/home/mk/work/src/ANTs-pydra/ants_template_workflow.py", line 262, in <module>
    result = submitter(wf)
  File "/home/mk/work/src/ANTs-pydra/.venv/lib/python3.13/site-packages/pydra/engine/submitter.py", line 265, in __call__
    raise exc
  File "/home/mk/work/src/ANTs-pydra/.venv/lib/python3.13/site-packages/pydra/engine/submitter.py", line 257, in __call__
    self.submit(job, rerun=rerun)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/home/mk/work/src/ANTs-pydra/.venv/lib/python3.13/site-packages/pydra/engine/submitter.py", line 298, in submit
    self.worker.run(job, rerun=rerun)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/home/mk/work/src/ANTs-pydra/.venv/lib/python3.13/site-packages/pydra/workers/debug.py", line 22, in run
    return job.run(rerun=rerun)
           ~~~~~~~^^^^^^^^^^^^^
  File "/home/mk/work/src/ANTs-pydra/.venv/lib/python3.13/site-packages/pydra/engine/job.py", line 333, in run
    self.task._run(self, rerun)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/home/mk/work/src/ANTs-pydra/.venv/lib/python3.13/site-packages/pydra/compose/workflow.py", line 363, in _run
    job.submitter.expand_workflow(job, rerun)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/home/mk/work/src/ANTs-pydra/.venv/lib/python3.13/site-packages/pydra/engine/submitter.py", line 331, in expand_workflow
    self.worker.run(job, rerun=rerun and self.propagate_rerun)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mk/work/src/ANTs-pydra/.venv/lib/python3.13/site-packages/pydra/workers/debug.py", line 22, in run
    return job.run(rerun=rerun)
           ~~~~~~~^^^^^^^^^^^^^
  File "/home/mk/work/src/ANTs-pydra/.venv/lib/python3.13/site-packages/pydra/engine/job.py", line 333, in run
    self.task._run(self, rerun)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/home/mk/work/src/ANTs-pydra/.venv/lib/python3.13/site-packages/pydra/compose/workflow.py", line 363, in _run
    job.submitter.expand_workflow(job, rerun)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/home/mk/work/src/ANTs-pydra/.venv/lib/python3.13/site-packages/pydra/engine/submitter.py", line 326, in expand_workflow
    exec_graph = wf.execution_graph(submitter=self)
  File "/home/mk/work/src/ANTs-pydra/.venv/lib/python3.13/site-packages/pydra/engine/workflow.py", line 290, in execution_graph
    graph = self._create_graph(exec_nodes)
  File "/home/mk/work/src/ANTs-pydra/.venv/lib/python3.13/site-packages/pydra/engine/workflow.py", line 385, in _create_graph
    node.state = state.State(
    ^^^^^^^^^^
AttributeError: property 'state' of 'NodeExecution' object has no setter

A quick fix is to use the internal _state attribute, but I'm sure that's not the intended way.

diff --git a/pydra/engine/workflow.py b/pydra/engine/workflow.py
index c277d502..e1a1f6c7 100644
--- a/pydra/engine/workflow.py
+++ b/pydra/engine/workflow.py
@@ -382,7 +382,7 @@ class Workflow(ty.Generic[WorkflowOutputsType]):
                         new_other_states=other_states, new_combiner=combiner
                     )
                 else:
-                    node.state = state.State(
+                    node._state = state.State(
                         node.name,
                         splitter=None,
                         other_states=other_states,

Let me know if I can provide more details.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions