MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / __setattr__

Method __setattr__

imperative/python/megengine/module/module.py:631–682  ·  view source on GitHub ↗
(self, name: str, value)

Source from the content-addressed store, hash-verified

629 return set(loaded), set(skipped)
630
631 def __setattr__(self, name: str, value):
632 is_module_like = _is_module(value) or isinstance(value, (list, tuple, dict))
633 if name != "_modules":
634 modules = self.__dict__.get("_modules")
635 if modules is None and is_module_like:
636 raise AttributeError(
637 "cannot assign module before Module.__init__() call"
638 )
639 if is_module_like:
640 if name not in modules:
641 modules.append(name)
642 else:
643 if modules is not None and name in modules:
644 modules.remove(name)
645
646 def append_name(prefix, name):
647 if prefix is None or prefix == "":
648 return name
649 return prefix + "." + name
650
651 def set_name(parent, prefix, name, obj):
652 if isinstance(obj, Tensor):
653 assert obj.name is not None
654 if obj.name != "":
655 name = obj.name
656 full_name = append_name(prefix, name)
657 if obj._short_name and obj._short_name != name:
658 logger.warning(
659 "try setting the submodule `{}` to `{}`'s new attribute `{}`, its name `{}` will remain unchanged".format(
660 obj._short_name, type(parent), name, obj._short_name
661 )
662 )
663 return
664 if isinstance(obj, Tensor):
665 obj._prefix = prefix
666 obj._name = full_name
667 obj._short_name = name
668 obj._set_name(obj._name)
669 return obj._name
670 elif isinstance(obj, Module):
671 obj._name = full_name
672 obj._short_name = name
673 for k, v in obj._flatten(recursive=False, with_key=True):
674 set_name(obj, full_name, k, v)
675 return obj._name
676 else:
677 assert False
678
679 for k, v in _expand_structure(name, value):
680 prefix = self._name if self._name else self.name
681 set_name(self, prefix, k, v)
682 super().__setattr__(name, value)
683
684 def __setstate__(self, state):
685 if "_short_name" not in state:

Callers

nothing calls this directly

Calls 5

_is_moduleFunction · 0.85
_expand_structureFunction · 0.85
getMethod · 0.45
appendMethod · 0.45
removeMethod · 0.45

Tested by

no test coverage detected