| def remove_tree_from_wm(wme_table): | |
| """ | |
| Given a wme_table filled by SoarUtils.update_wm_from_tree, removes all wmes from working memory | |
| Intermediate nodes are sml.Identifiers, which are removed from the table | |
| Leaves are SoarWME's which are kept in the table but .remove_from_wm() is called on them | |
| """ | |
| items_to_remove = set() | |
| for path, wme in wme_table.items(): | |
| if isinstance(wme, sml.Identifier): | |
| items_to_remove.add(path) | |
| else: | |
| wme.remove_from_wm() | |
| for path in items_to_remove: | |
| del wme_table[path] | |