def batch_graph(self) -> BatchMolGraph: r""" Constructs a :class:`~chemprop.features.BatchMolGraph` with the graph featurization of all the molecules. .. note:: The :class:`~chemprop.features.BatchMolGraph` is cached in after the first time it is computed and is simply accessed upon subsequent calls to :meth:`batch_graph`. This means that if the underlying set of :class:`MoleculeDatapoint`\ s changes, then the returned :class:`~chemprop.features.BatchMolGraph` will be incorrect for the underlying data. :return: A :class:`~chemprop.features.BatchMolGraph` containing the graph featurization of all the molecules. """ if self._batch_graph is None: mol_graphs = [] for d in self._data: if d.smiles in SMILES_TO_GRAPH: mol_graph = SMILES_TO_GRAPH[d.smiles] else: mol_graph = MolGraph(d.mol, d.atom_features) if cache_graph(): SMILES_TO_GRAPH[d.smiles] = mol_graph mol_graphs.append(mol_graph) self._batch_graph = BatchMolGraph(mol_graphs) return self._batch_graph
def batch_graph(self) -> List[BatchMolGraph]: r""" Constructs a :class:`~chemprop.features.BatchMolGraph` with the graph featurization of all the molecules. .. note:: The :class:`~chemprop.features.BatchMolGraph` is cached in after the first time it is computed and is simply accessed upon subsequent calls to :meth:`batch_graph`. This means that if the underlying set of :class:`MoleculeDatapoint`\ s changes, then the returned :class:`~chemprop.features.BatchMolGraph` will be incorrect for the underlying data. :return: A list of :class:`~chemprop.features.BatchMolGraph` containing the graph featurization of all the molecules in each :class:`MoleculeDatapoint`. """ if self._batch_graph is None: self._batch_graph = [] mol_graphs = [] for d in self._data: mol_graphs_list = [] for s, m in zip(d.smiles, d.mol): if s in SMILES_TO_GRAPH: mol_graph = SMILES_TO_GRAPH[s] else: if len(d.smiles) > 1 and (d.atom_features is not None or d.bond_features is not None): raise NotImplementedError( "Atom descriptors are currently only supported with one molecule " "per input (i.e., number_of_molecules = 1).") mol_graph = MolGraph( m, d.atom_features, d.bond_features, overwrite_default_atom_features=d. overwrite_default_atom_features, overwrite_default_bond_features=d. overwrite_default_bond_features, ) if cache_graph(): SMILES_TO_GRAPH[s] = mol_graph mol_graphs_list.append(mol_graph) mol_graphs.append(mol_graphs_list) self._batch_graph = [ BatchMolGraph([g[i] for g in mol_graphs]) for i in range(len(mol_graphs[0])) ] return self._batch_graph
def batch_graph(self, cache: bool = False) -> BatchMolGraph: """ Returns a BatchMolGraph with the graph featurization of the molecules. :param cache: Whether to store the graph featurizations in the global cache. :return: A BatchMolGraph. """ if self._batch_graph is None: mol_graphs = [] for d in self._data: if d.smiles in SMILES_TO_GRAPH: mol_graph = SMILES_TO_GRAPH[d.smiles] else: mol_graph = MolGraph(d.mol) if cache: SMILES_TO_GRAPH[d.smiles] = mol_graph mol_graphs.append(mol_graph) self._batch_graph = BatchMolGraph(mol_graphs) return self._batch_graph