Skip to content

Commit

Permalink
remove AtomMappingScorer references for now
Browse files Browse the repository at this point in the history
will still ducktype fine

this isn't in a released gufe, so can't use (yet)
  • Loading branch information
richardjgowers committed May 7, 2024
1 parent 307d66f commit a031c32
Show file tree
Hide file tree
Showing 13 changed files with 33 additions and 30 deletions.
4 changes: 2 additions & 2 deletions src/konnektor/network_planners/NetworkPlanner.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import logging
from typing import Iterable

from gufe import AtomMapper, AtomMappingScorer
from gufe import AtomMapper
from gufe import LigandNetwork, Component

log = logging.getLogger(__name__)
Expand All @@ -12,7 +12,7 @@

class NetworkPlanner(abc.ABC):

def __init__(self, mapper: AtomMapper, scorer: AtomMappingScorer):
def __init__(self, mapper: AtomMapper, scorer):
"""This class is an implementation for the LigandNetworkPlanner interface.
It defines the std. class for a Konnektor LigandNetworkPlanner
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import logging
from typing import Iterable

from gufe import AtomMapper, AtomMappingScorer
from gufe import AtomMapper
from gufe import LigandNetwork, Component

from .._networkx_implementations._abstract_network_generator import _AbstractNetworkGenerator
Expand All @@ -15,7 +15,7 @@ class NetworkConcatenator(NetworkPlanner):
progress: bool = False
nprocesses: int

def __init__(self, mapper: AtomMapper, scorer: AtomMappingScorer,
def __init__(self, mapper: AtomMapper, scorer,
network_generator: _AbstractNetworkGenerator,
nprocesses: int = 1,
_initial_edge_lister=None):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import logging
from typing import Iterable

from gufe import AtomMapper, AtomMappingScorer, LigandNetwork
from gufe import AtomMapper, LigandNetwork
from ._abstract_network_concatenator import NetworkConcatenator
from .._networkx_implementations import MstNetworkGenerator

Expand All @@ -12,7 +12,7 @@
# Todo: check this algorithm again

class MstConcatenate(NetworkConcatenator):
def __init__(self, mapper: AtomMapper, scorer: AtomMappingScorer, n_connecting_edges: int = 3, nprocesses: int = 1):
def __init__(self, mapper: AtomMapper, scorer, n_connecting_edges: int = 3, nprocesses: int = 1):
"""
This concatenator is connnecting two Networks with a kruskal like approach up to the number of connecting edges.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Union, List, Iterable

from gufe import Component, LigandNetwork, AtomMapper, AtomMappingScorer
from gufe import Component, LigandNetwork, AtomMapper
from konnektor.network_planners._networkx_implementations import CyclicNetworkGenerator as nx_CNG

from ._abstract_network_generator import NetworkGenerator
Expand All @@ -11,7 +11,7 @@

class CyclicNetworkGenerator(NetworkGenerator):

def __init__(self, mapper: AtomMapper, scorer: AtomMappingScorer,
def __init__(self, mapper: AtomMapper, scorer,
node_present_in_cycles: int = 2, cycle_sizes: Union[int, List[int]] = 3,
nprocesses: int = 1, _initial_edge_lister: NetworkGenerator = None):
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from typing import Iterable

import numpy as np
from gufe import Component, LigandNetwork, AtomMapper, AtomMappingScorer
from gufe import Component, LigandNetwork, AtomMapper
from tqdm.auto import tqdm

from ._abstract_network_generator import NetworkGenerator
Expand All @@ -12,7 +12,7 @@
#Todo: is graph connectivity ensured?

class HeuristicMaximalNetworkGenerator(NetworkGenerator):
def __init__(self, mapper: AtomMapper, scorer: AtomMappingScorer, n_samples: int = 100, progress: bool = False,
def __init__(self, mapper: AtomMapper, scorer, n_samples: int = 100, progress: bool = False,
nprocesses: int = 1):
"""
The Heuristic Maximal Network planner builds for given set of compounds a set of edges per node build graph under the assumption each component can be connected to another.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import itertools
from typing import Iterable

from gufe import AtomMapper, AtomMappingScorer
from gufe import AtomMapper
from gufe import LigandNetwork, Component
from tqdm.auto import tqdm

Expand All @@ -11,7 +11,7 @@


class MaximalNetworkGenerator(NetworkGenerator):
def __init__(self, mapper: AtomMapper, scorer: AtomMappingScorer, progress: bool = False, nprocesses: int = 1):
def __init__(self, mapper: AtomMapper, scorer, progress: bool = False, nprocesses: int = 1):
"""
The Maximal Network planner builds for given set of compounds a fully connected graph under the assumption each component can be connected to another.
The edges of this graph are realized as atom mappings of pairwise components. If not all mappings can be created, it will ignore the mapping failure, and return a nearly fully connected graph.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Iterable

from gufe import LigandNetwork, Component, AtomMapper, AtomMappingScorer
from gufe import LigandNetwork, Component, AtomMapper
from konnektor.network_planners._networkx_implementations import MstNetworkGenerator

from ._abstract_network_generator import NetworkGenerator
Expand All @@ -9,7 +9,7 @@

class MinimalSpanningTreeNetworkGenerator(NetworkGenerator):

def __init__(self, mapper: AtomMapper, scorer: AtomMappingScorer,
def __init__(self, mapper: AtomMapper, scorer,
nprocesses: int = 1, _initial_edge_lister: NetworkGenerator = None):
"""
The minimal spanning tree ligand network planner, builds an MST for a given set of ligands. The edges of the the graph,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Iterable

from gufe import Component, LigandNetwork, AtomMapper, AtomMappingScorer
from gufe import Component, LigandNetwork, AtomMapper
from konnektor.network_planners._networkx_implementations import NNodeEdgesNetworkGenerator

from ._abstract_network_generator import NetworkGenerator
Expand All @@ -9,7 +9,7 @@

class NNodeEdgesNetworkGenerator(NetworkGenerator):

def __init__(self, mapper: AtomMapper, scorer: AtomMappingScorer,
def __init__(self, mapper: AtomMapper, scorer,
target_node_connectivity: int = 3,
nprocesses: int = 1,
_initial_edge_lister: NetworkGenerator = None):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Iterable

from gufe import Component, LigandNetwork, AtomMapper, AtomMappingScorer
from gufe import Component, LigandNetwork, AtomMapper
from konnektor.network_planners._networkx_implementations import MstNetworkGenerator

from ._abstract_network_generator import NetworkGenerator
Expand All @@ -9,7 +9,7 @@

class RedundantMinimalSpanningTreeNetworkGenerator(NetworkGenerator):

def __init__(self, mapper: AtomMapper, scorer: AtomMappingScorer, n_redundancy: int = 2, nprocesses: int = 1,
def __init__(self, mapper: AtomMapper, scorer, n_redundancy: int = 2, nprocesses: int = 1,
_initial_edge_lister: NetworkGenerator = None):
"""Plan a Network which connects all ligands n times with minimal cost.
This planner uses n_redundancy times the MST algorithm on the full
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Iterable

from gufe import Component, LigandNetwork, AtomMapper, AtomMappingScorer
from gufe import Component, LigandNetwork, AtomMapper
from konnektor.network_planners._networkx_implementations import RadialNetworkGenerator

from ._abstract_network_generator import NetworkGenerator
Expand All @@ -9,7 +9,7 @@

class StarNetworkGenerator(NetworkGenerator):

def __init__(self, mapper: AtomMapper, scorer: AtomMappingScorer,
def __init__(self, mapper: AtomMapper, scorer,
nprocesses: int = 1, _initial_edge_lister: NetworkGenerator = None):
"""
The Star Ligand Network Planner or Radial Ligand Network Planner, set's one ligand into the center of a graph and connects all other ligands to it.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from tqdm import tqdm
from typing import Iterable

from gufe import Component, LigandNetwork, AtomMapper, AtomMappingScorer
from gufe import Component, LigandNetwork, AtomMapper

# Clustering
from scikit_mol.fingerprints import RDKitFingerprintTransformer, MorganFingerprintTransformer
Expand All @@ -29,7 +29,7 @@ def __init__(self,
concatenator: MstConcatenate = MstConcatenate,
clusterer: ComponentsDiversityClustering = ComponentsDiversityClustering(
featurize=RDKitFingerprintTransformer(), cluster=KMeans(n_clusters=3)),
mapper: AtomMapper = None, scorer: AtomMappingScorer = None,
mapper: AtomMapper = None, scorer = None,
nprocesses: int = 1, progress: bool = False
):
''' Implements the general concept of multidimensional networks.
Expand Down Expand Up @@ -150,7 +150,7 @@ def __init__(self,
clusterer: ComponentsDiversityClustering = ComponentsDiversityClustering(
featurize=MorganFingerprintTransformer(), cluster=HDBSCAN(metric="jaccard", min_cluster_size=3, alpha=1/2048)),
mapper: AtomMapper = None,
scorer: AtomMappingScorer = None,
scorer = None,
nprocesses: int = 1, progress: bool = False
):
''' The StarrySkyNetworkGenerator is an advanced network algorithm,
Expand Down
6 changes: 3 additions & 3 deletions src/konnektor/tests/test_toy_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from rdkit import Chem
from rdkit.Chem import AllChem

from gufe import AtomMapper, AtomMapping, AtomMappingScorer, SmallMoleculeComponent, LigandNetwork
from gufe import AtomMapper, AtomMapping, SmallMoleculeComponent, LigandNetwork
from konnektor.utils.toy_data import genMapper, genScorer, build_random_dataset, build_random_mst_network, build_random_fully_connected_network

def test_genMapper():
Expand All @@ -28,7 +28,7 @@ def test_genScorer():
n_scores = 10
scorer = genScorer(n_scores=n_scores, rand_seed=42)

assert isinstance(scorer, AtomMappingScorer)
# assert isinstance(scorer, AtomMappingScorer)
assert len(scorer.vals) ==n_scores
assert scorer.i == 0

Expand Down Expand Up @@ -67,7 +67,7 @@ def test_build_random_dataset():
assert len(compounds) == n_compounds
assert all(isinstance(c, SmallMoleculeComponent) for c in compounds)
assert isinstance(mapper, AtomMapper)
assert isinstance(scorer, AtomMappingScorer)
# assert isinstance(scorer, AtomMappingScorer)
assert len(scorer.vals) == n_compounds

def test_build_random_mst_network():
Expand Down
11 changes: 7 additions & 4 deletions src/konnektor/utils/toy_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from rdkit.Chem import AllChem
from gufe import SmallMoleculeComponent, LigandNetwork

from gufe import LigandAtomMapping, AtomMapper, AtomMappingScorer, AtomMapping
from gufe import LigandAtomMapping, AtomMapper, AtomMapping
import numpy as np


Expand Down Expand Up @@ -32,7 +32,7 @@ def _to_dict(self):
return vars(self)


class genScorer(AtomMappingScorer):
class genScorer: # (AtomMappingScorer):
def __init__(self, n_scores: int, rand_seed: int = None):
"""
Builds a scorer that contains a predefined sequence of scores, n_scores long and each score is initially randomly uniformly picked between 1 and 0.
Expand All @@ -54,6 +54,10 @@ def __init__(self, n_scores: int, rand_seed: int = None):
self.n_scores = n_scores
self.i = 0

def __call__(self, mapping):
# todo: remove once subclassed from gufe
return self.get_score(mapping)

def get_score(self, mapping: AtomMapping) -> float:
"""
return the score, at position self.i
Expand All @@ -74,8 +78,7 @@ def get_score(self, mapping: AtomMapping) -> float:
return v


def build_random_dataset(n_compounds: int = 20, rand_seed: int = None) -> (
Iterable[SmallMoleculeComponent], AtomMapper, AtomMappingScorer):
def build_random_dataset(n_compounds: int = 20, rand_seed: int = None):
"""
This function builds a random dataset of n_compounds artificial molecules.
Additionally the generic scorer and mapper matching the compounds is returned.
Expand Down

0 comments on commit a031c32

Please sign in to comment.