diff --git a/pyiron_workflow/workflow.py b/pyiron_workflow/workflow.py index 8b0a707bd..24c2032b2 100644 --- a/pyiron_workflow/workflow.py +++ b/pyiron_workflow/workflow.py @@ -225,10 +225,8 @@ def __init__( automate_execution: bool = True, **kwargs, ): - self._inputs_map = None - self._outputs_map = None - self.inputs_map = inputs_map - self.outputs_map = outputs_map + self._inputs_map = self._sanitize_map(inputs_map) + self._outputs_map = self._sanitize_map(outputs_map) self._inputs = None self._outputs = None self.automate_execution: bool = automate_execution @@ -264,34 +262,36 @@ def _after_node_setup( @property def inputs_map(self) -> bidict | None: - self._deduplicate_nones(self._inputs_map) + if self._inputs_map is not None: + self._deduplicate_nones(self._inputs_map) return self._inputs_map @inputs_map.setter def inputs_map(self, new_map: dict | bidict | None): - self._deduplicate_nones(new_map) - if new_map is not None: - new_map = bidict(new_map) - self._inputs_map = new_map + self._inputs_map = self._sanitize_map(new_map) @property def outputs_map(self) -> bidict | None: - self._deduplicate_nones(self._outputs_map) + if self._outputs_map is not None: + self._deduplicate_nones(self._outputs_map) return self._outputs_map @outputs_map.setter def outputs_map(self, new_map: dict | bidict | None): - self._deduplicate_nones(new_map) + self._outputs_map = self._sanitize_map(new_map) + + def _sanitize_map(self, new_map: dict | bidict | None) -> bidict | None: if new_map is not None: + if isinstance(new_map, dict): + self._deduplicate_nones(new_map) new_map = bidict(new_map) - self._outputs_map = new_map + return new_map @staticmethod - def _deduplicate_nones(some_map: dict | bidict | None) -> dict | bidict | None: - if some_map is not None: - for k, v in some_map.items(): - if v is None: - some_map[k] = (None, f"{k} disabled") + def _deduplicate_nones(some_map: dict | bidict): + for k, v in some_map.items(): + if v is None: + some_map[k] = (None, f"{k} disabled") @property def inputs(self) -> Inputs: