def clean_complex_attrs()

in smallpond/execution/task.py [0:0]


    def clean_complex_attrs(self):

        self._np_randgen = None
        self._py_randgen = None
        self.perf_profile = None

        def is_primitive(obj: Any):
            return isinstance(obj, (bool, str, int, float))

        def is_primitive_iterable(obj: Any):
            if isinstance(obj, dict):
                return all(is_primitive(key) and is_primitive(value) for key, value in obj.items())
            elif isinstance(obj, Iterable):
                return all(is_primitive(elem) for elem in obj)
            return False

        if hasattr(self, "__dict__"):
            complex_attrs = [
                attr for attr, obj in vars(self).items() if not (attr in self._pristine_attrs or is_primitive(obj) or is_primitive_iterable(obj))
            ]
            if complex_attrs:
                logger.debug(f"removing complex attributes not explicitly declared in __slots__: {complex_attrs}")
                for attr in complex_attrs:
                    delattr(self, attr)