|
|
@@ -0,0 +1,159 @@ |
|
|
|
#!/usr/bin/env python3 |
|
|
|
# -*- coding: utf-8 -*- |
|
|
|
""" |
|
|
|
Created on Thu Mar 19 18:17:38 2020 |
|
|
|
|
|
|
|
@author: ljia |
|
|
|
""" |
|
|
|
|
|
|
|
from enum import Enum, unique |
|
|
|
|
|
|
|
|
|
|
|
class Options(object): |
|
|
|
"""Contains enums for options employed by ged::GEDEnv. |
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
@unique |
|
|
|
class GEDMethod(Enum): |
|
|
|
"""Selects the method. |
|
|
|
""" |
|
|
|
# @todo: what is this? #ifdef GUROBI |
|
|
|
F1 = 1 # Selects ged::F1. |
|
|
|
F2 = 2 # Selects ged::F2. |
|
|
|
COMPACT_MIP = 3 # Selects ged::CompactMIP. |
|
|
|
BLP_NO_EDGE_LABELS = 4 # Selects ged::BLPNoEdgeLabels. |
|
|
|
#endif /* GUROBI */ |
|
|
|
BRANCH = 5 # Selects ged::Branch. |
|
|
|
BRANCH_FAST = 6 # Selects ged::BranchFast. |
|
|
|
BRANCH_TIGHT = 7 # Selects ged::BranchTight. |
|
|
|
BRANCH_UNIFORM = 8 # Selects ged::BranchUniform. |
|
|
|
BRANCH_COMPACT = 9 # Selects ged::BranchCompact. |
|
|
|
PARTITION = 10 # Selects ged::Partition. |
|
|
|
HYBRID = 11 # Selects ged::Hybrid. |
|
|
|
RING = 12 # Selects ged::Ring. |
|
|
|
ANCHOR_AWARE_GED = 13 # Selects ged::AnchorAwareGED. |
|
|
|
WALKS = 14 # Selects ged::Walks. |
|
|
|
IPFP = 15 # Selects ged::IPFP |
|
|
|
BIPARTITE = 16 # Selects ged::Bipartite. |
|
|
|
SUBGRAPH = 17 # Selects ged::Subgraph. |
|
|
|
NODE = 18 # Selects ged::Node. |
|
|
|
RING_ML = 19 # Selects ged::RingML. |
|
|
|
BIPARTITE_ML = 20 # Selects ged::BipartiteML. |
|
|
|
REFINE = 21 # Selects ged::Refine. |
|
|
|
BP_BEAM = 22 # Selects ged::BPBeam. |
|
|
|
SIMULATED_ANNEALING = 23 # Selects ged::SimulatedAnnealing. |
|
|
|
HED = 24 # Selects ged::HED. |
|
|
|
STAR = 25 # Selects ged::Star. |
|
|
|
|
|
|
|
|
|
|
|
@unique |
|
|
|
class EditCosts(Enum): |
|
|
|
"""Selects the edit costs. |
|
|
|
""" |
|
|
|
CHEM_1 = 1 # Selects ged::CHEM1. |
|
|
|
CHEM_2 = 2 # Selects ged::CHEM2. |
|
|
|
CMU = 3 # Selects ged::CMU. |
|
|
|
GREC_1 = 4 # Selects ged::GREC1. |
|
|
|
GREC_2 = 5 # Selects ged::GREC2. |
|
|
|
PROTEIN = 6 # Selects ged::Protein. |
|
|
|
FINGERPRINT = 7 # Selects ged::Fingerprint. |
|
|
|
LETTER = 8 # Selects ged::Letter. |
|
|
|
LETTER2 = 9 # Selects ged:Letter2. |
|
|
|
NON_SYMBOLIC = 10 # Selects ged:NonSymbolic. |
|
|
|
CONSTANT = 11 # Selects ged::Constant. |
|
|
|
|
|
|
|
|
|
|
|
@unique |
|
|
|
class InitType(Enum): |
|
|
|
"""@brief Selects the initialization type of the environment. |
|
|
|
* @details If eager initialization is selected, all edit costs are pre-computed when initializing the environment. |
|
|
|
* Otherwise, they are computed at runtime. If initialization with shuffled copies is selected, shuffled copies of |
|
|
|
* all graphs are created. These copies are used when calling ged::GEDEnv::run_method() with two identical graph IDs. |
|
|
|
* In this case, one of the IDs is internally replaced by the ID of the shuffled copy and the graph is hence |
|
|
|
* compared to an isomorphic but non-identical graph. If initialization without shuffled copies is selected, no shuffled copies |
|
|
|
* are created and calling ged::GEDEnv::run_method() with two identical graph IDs amounts to comparing a graph to itself. |
|
|
|
""" |
|
|
|
LAZY_WITHOUT_SHUFFLED_COPIES = 1 # Lazy initialization, no shuffled graph copies are constructed. |
|
|
|
EAGER_WITHOUT_SHUFFLED_COPIES = 2 # Eager initialization, no shuffled graph copies are constructed. |
|
|
|
LAZY_WITH_SHUFFLED_COPIES = 3 # Lazy initialization, shuffled graph copies are constructed. |
|
|
|
EAGER_WITH_SHUFFLED_COPIES = 4 # Eager initialization, shuffled graph copies are constructed. |
|
|
|
|
|
|
|
|
|
|
|
@unique |
|
|
|
class AlgorithmState(Enum): |
|
|
|
"""can be used to specify the state of an algorithm. |
|
|
|
""" |
|
|
|
CALLED = 1 # The algorithm has been called. |
|
|
|
INITIALIZED = 2 # The algorithm has been initialized. |
|
|
|
CONVERGED = 3 # The algorithm has converged. |
|
|
|
TERMINATED = 4 # The algorithm has terminated. |
|
|
|
|
|
|
|
|
|
|
|
class OptionsStringMap(object): |
|
|
|
|
|
|
|
|
|
|
|
# Map of available computation methods between enum type and string. |
|
|
|
GEDMethod = { |
|
|
|
"BRANCH": Options.GEDMethod.BRANCH, |
|
|
|
"BRANCH_FAST": Options.GEDMethod.BRANCH_FAST, |
|
|
|
"BRANCH_TIGHT": Options.GEDMethod.BRANCH_TIGHT, |
|
|
|
"BRANCH_UNIFORM": Options.GEDMethod.BRANCH_UNIFORM, |
|
|
|
"BRANCH_COMPACT": Options.GEDMethod.BRANCH_COMPACT, |
|
|
|
"PARTITION": Options.GEDMethod.PARTITION, |
|
|
|
"HYBRID": Options.GEDMethod.HYBRID, |
|
|
|
"RING": Options.GEDMethod.RING, |
|
|
|
"ANCHOR_AWARE_GED": Options.GEDMethod.ANCHOR_AWARE_GED, |
|
|
|
"WALKS": Options.GEDMethod.WALKS, |
|
|
|
"IPFP": Options.GEDMethod.IPFP, |
|
|
|
"BIPARTITE": Options.GEDMethod.BIPARTITE, |
|
|
|
"SUBGRAPH": Options.GEDMethod.SUBGRAPH, |
|
|
|
"NODE": Options.GEDMethod.NODE, |
|
|
|
"RING_ML": Options.GEDMethod.RING_ML, |
|
|
|
"BIPARTITE_ML": Options.GEDMethod.BIPARTITE_ML, |
|
|
|
"REFINE": Options.GEDMethod.REFINE, |
|
|
|
"BP_BEAM": Options.GEDMethod.BP_BEAM, |
|
|
|
"SIMULATED_ANNEALING": Options.GEDMethod.SIMULATED_ANNEALING, |
|
|
|
"HED": Options.GEDMethod.HED, |
|
|
|
"STAR": Options.GEDMethod.STAR, |
|
|
|
# ifdef GUROBI |
|
|
|
"F1": Options.GEDMethod.F1, |
|
|
|
"F2": Options.GEDMethod.F2, |
|
|
|
"COMPACT_MIP": Options.GEDMethod.COMPACT_MIP, |
|
|
|
"BLP_NO_EDGE_LABELS": Options.GEDMethod.BLP_NO_EDGE_LABELS |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
# Map of available edit cost functions between enum type and string. |
|
|
|
EditCosts = { |
|
|
|
"CHEM_1": Options.EditCosts.CHEM_1, |
|
|
|
"CHEM_2": Options.EditCosts.CHEM_2, |
|
|
|
"CMU": Options.EditCosts.CMU, |
|
|
|
"GREC_1": Options.EditCosts.GREC_1, |
|
|
|
"GREC_2": Options.EditCosts.GREC_2, |
|
|
|
"LETTER": Options.EditCosts.LETTER, |
|
|
|
"LETTER2": Options.EditCosts.LETTER2, |
|
|
|
"NON_SYMBOLIC": Options.EditCosts.NON_SYMBOLIC, |
|
|
|
"FINGERPRINT": Options.EditCosts.FINGERPRINT, |
|
|
|
"PROTEIN": Options.EditCosts.PROTEIN, |
|
|
|
"CONSTANT": Options.EditCosts.CONSTANT |
|
|
|
} |
|
|
|
|
|
|
|
# Map of available initialization types of the environment between enum type and string. |
|
|
|
InitType = { |
|
|
|
"LAZY_WITHOUT_SHUFFLED_COPIES": Options.InitType.LAZY_WITHOUT_SHUFFLED_COPIES, |
|
|
|
"EAGER_WITHOUT_SHUFFLED_COPIES": Options.InitType.EAGER_WITHOUT_SHUFFLED_COPIES, |
|
|
|
"LAZY_WITH_SHUFFLED_COPIES": Options.InitType.LAZY_WITH_SHUFFLED_COPIES, |
|
|
|
"LAZY_WITH_SHUFFLED_COPIES": Options.InitType.LAZY_WITH_SHUFFLED_COPIES |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@unique |
|
|
|
class AlgorithmState(Enum): |
|
|
|
"""can be used to specify the state of an algorithm. |
|
|
|
""" |
|
|
|
CALLED = 1 # The algorithm has been called. |
|
|
|
INITIALIZED = 2 # The algorithm has been initialized. |
|
|
|
CONVERGED = 3 # The algorithm has converged. |
|
|
|
TERMINATED = 4 # The algorithm has terminated. |
|
|
|
|