|
1 | 1 | import torch |
2 | 2 | import os |
3 | 3 | import math |
4 | | -import pkg_resources |
| 4 | +import importlib.metadata as importlib_metadata |
| 5 | +from packaging import version |
5 | 6 | import numpy as np |
6 | 7 | from typing import Any, Dict, List, Tuple, Optional, Union |
7 | 8 | from rdkit import Chem |
|
18 | 19 |
|
19 | 20 | from pyhealth import BASE_CACHE_PATH as CACHE_PATH |
20 | 21 |
|
| 22 | + |
| 23 | +def _import_ogb(min_version: str = "1.3.5") -> None: |
| 24 | + """Import ogb components and validate version.""" |
| 25 | + try: |
| 26 | + installed = importlib_metadata.version("ogb") |
| 27 | + except importlib_metadata.PackageNotFoundError as exc: |
| 28 | + raise ImportError(f"Please install ogb>={min_version}.") from exc |
| 29 | + |
| 30 | + if version.parse(installed) < version.parse(min_version): |
| 31 | + raise ImportError( |
| 32 | + f"ogb>={min_version} required, but found {installed}." |
| 33 | + ) |
| 34 | + |
| 35 | + from ogb.utils import smiles2graph |
| 36 | + from ogb.graphproppred.mol_encoder import AtomEncoder, BondEncoder |
| 37 | + |
| 38 | + globals().update( |
| 39 | + { |
| 40 | + "smiles2graph": smiles2graph, |
| 41 | + "AtomEncoder": AtomEncoder, |
| 42 | + "BondEncoder": BondEncoder, |
| 43 | + } |
| 44 | + ) |
| 45 | + |
| 46 | + |
21 | 47 | def graph_batch_from_smiles(smiles_list, device=torch.device("cpu")): |
22 | 48 | edge_idxes, edge_feats, node_feats, lstnode, batch = [], [], [], 0, [] |
23 | 49 |
|
@@ -309,19 +335,14 @@ def __init__( |
309 | 335 | ): |
310 | 336 | super(MoleRecLayer, self).__init__() |
311 | 337 |
|
312 | | - dependencies = ["ogb>=1.3.5"] |
313 | | - |
314 | 338 | # test whether the ogb and torch_scatter packages are ready |
315 | 339 | try: |
316 | | - pkg_resources.require(dependencies) |
317 | | - global smiles2graph, AtomEncoder, BondEncoder |
318 | | - from ogb.utils import smiles2graph |
319 | | - from ogb.graphproppred.mol_encoder import AtomEncoder, BondEncoder |
320 | | - except Exception as e: |
| 340 | + _import_ogb("1.3.5") |
| 341 | + except Exception: |
321 | 342 | print( |
322 | 343 | "Please follow the error message and install the [ogb>=1.3.5] packages first." |
323 | 344 | ) |
324 | | - print(e) |
| 345 | + raise |
325 | 346 |
|
326 | 347 | self.hidden_size = hidden_size |
327 | 348 | self.coef, self.target_ddi = coef, target_ddi |
@@ -569,18 +590,13 @@ def __init__( |
569 | 590 | else: |
570 | 591 | self.mode = "multilabel" |
571 | 592 |
|
572 | | - dependencies = ["ogb>=1.3.5"] |
573 | | - |
574 | 593 | try: |
575 | | - pkg_resources.require(dependencies) |
576 | | - global smiles2graph, AtomEncoder, BondEncoder |
577 | | - from ogb.utils import smiles2graph |
578 | | - from ogb.graphproppred.mol_encoder import AtomEncoder, BondEncoder |
579 | | - except Exception as e: |
| 594 | + _import_ogb("1.3.5") |
| 595 | + except Exception: |
580 | 596 | print( |
581 | 597 | "Please follow the error message and install the [ogb>=1.3.5] packages first." |
582 | 598 | ) |
583 | | - print(e) |
| 599 | + raise |
584 | 600 |
|
585 | 601 | self.embedding_dim = embedding_dim |
586 | 602 | self.hidden_dim = hidden_dim |
|
0 commit comments