def _get_scope_name_dict()

in mmdnn/conversion/rewriter/folder.py [0:0]


    def _get_scope_name_dict(self, node_list, top_level=0, top_scope=None, sub_level=2, sub_scope=None):
        scope_node_names = collections.OrderedDict()

        def _insert_scope_node_names_dict(scope_no, node_name):
            if scope_node_names.get(scope_no, None):
                scope_node_names[scope_no].append(node_name)
            else:
                scope_node_names[scope_no] = list([node_name])

        def _get_scope_name_dict_by_cond(cond_top, cond_sub):
            for node_name in node_list:
                node = self._graph.get_node(node_name)
                if not node.get_attr('scope'):
                    continue
                node_scope = node.get_attr('scope')
                if cond_top(top_scope, node_scope) and cond_sub(sub_scope, node_scope):
                    if 'True' in cond_top.__name__ and 'True' not in cond_sub.__name__:
                        scope_no = node_scope.split('/')[sub_level]
                    elif 'True' not in cond_top.__name__ and 'True' in cond_sub.__name__:
                        scope_no = node_scope.split('/')[top_level]
                    else:  # both not equal True
                        scope_no = node_scope.split(
                            '/')[top_level] + '_' + node_scope.split('/')[sub_level]
                    _insert_scope_node_names_dict(scope_no, node.name)

        def cond_x_in_y(x, y): return x in y

        def cond_True(x, y): return True

        # Obtain nodes where the scope name that satisfies top_level is top_scope and sub_level is sub_scope
        if top_scope and sub_scope:
            _get_scope_name_dict_by_cond(cond_x_in_y, cond_x_in_y)
        # Obtain nodes where the scope name that satisfies in sub_level is sub_scope
        elif not top_scope and sub_scope:
            _get_scope_name_dict_by_cond(cond_True, cond_x_in_y)
        # Obtain nodes where the scope name that satisfies in top_level is top_scope
        elif top_scope and not sub_scope:
            _get_scope_name_dict_by_cond(cond_x_in_y, cond_True)
        # Obtain all nodes grouped by sub_level sub_scope
        elif top_scope is None and sub_scope is None:
            top_scopes = self.scope_level_name_map[top_level]
            for top_scope in top_scopes:  # this top_scope will replace the input top_scope
                _get_scope_name_dict_by_cond(cond_x_in_y, cond_True)

        return scope_node_names