def from_dict(cls, dict_: StrDict, config: Configuration, molecules: MoleculeDeserializer) -> "State": """ Create a new state from a dictionary, i.e. deserialization :param dict_: the serialized state :type dict_: dict :param config: settings of the tree search algorithm :type config: Configuration :param molecules: the deserialized molecules :type molecules: MoleculeDeserializer :return: a deserialized state :rtype: State """ mols = molecules.get_tree_molecules(dict_["mols"]) return State(mols, config)
def from_dict( cls, dict_: StrDict, tree: SearchTree, config: Configuration, molecules: MoleculeDeserializer, parent: "Node" = None, ) -> "Node": """ Create a new node from a dictionary, i.e. deserialization :param dict_: the serialized node :param tree: the search tree :param config: settings of the tree search algorithm :param molecules: the deserialized molecules :param parent: the parent node :return: a deserialized node """ state = State.from_dict(dict_["state"], config, molecules) node = Node(state=state, owner=tree, config=config, parent=parent) node.is_expanded = dict_["is_expanded"] node.is_expandable = dict_["is_expandable"] node._children_values = dict_["children_values"] node._children_priors = dict_["children_priors"] node._children_visitations = dict_["children_visitations"] node._children_actions = [] for action in dict_["children_actions"]: mol = molecules.get_tree_molecules([action["mol"]])[0] node._children_actions.append( RetroReaction( mol, action["smarts"], action["index"], action.get("metadata", {}), ) ) node._children = [ Node.from_dict(child, tree, config, molecules, parent=node) if child else None for child in dict_["children"] ] return node