Refactoring: Python/SMT
This commit is contained in:
@@ -55,10 +55,7 @@ class ContextAutomaton(object):
|
|||||||
return self._states[self._init_state]
|
return self._states[self._init_state]
|
||||||
|
|
||||||
def is_state(self, name):
|
def is_state(self, name):
|
||||||
if name in self._states:
|
return name in self._states
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def get_state_id(self, name):
|
def get_state_id(self, name):
|
||||||
try:
|
try:
|
||||||
@@ -78,10 +75,7 @@ class ContextAutomaton(object):
|
|||||||
print(state)
|
print(state)
|
||||||
|
|
||||||
def is_valid_rs_set(self, elements):
|
def is_valid_rs_set(self, elements):
|
||||||
if set(elements).issubset(self._reaction_system.background_set):
|
return set(elements).issubset(self._reaction_system.background_set)
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def is_valid_context(self, context):
|
def is_valid_context(self, context):
|
||||||
return self.is_valid_rs_set(context)
|
return self.is_valid_rs_set(context)
|
||||||
@@ -95,7 +89,7 @@ class ContextAutomaton(object):
|
|||||||
return new_set
|
return new_set
|
||||||
|
|
||||||
def add_transition(self, src, context_set, dst):
|
def add_transition(self, src, context_set, dst):
|
||||||
if not type(context_set) is set and not type(context_set) is list:
|
if not isinstance(context_set, (set, list)):
|
||||||
print("Contexts set must be of type set or list")
|
print("Contexts set must be of type set or list")
|
||||||
|
|
||||||
if not self.is_valid_context(context_set):
|
if not self.is_valid_context(context_set):
|
||||||
|
|||||||
@@ -9,12 +9,9 @@ class ContextAutomatonWithConcentrations(ContextAutomaton):
|
|||||||
super(ContextAutomatonWithConcentrations, self).__init__(reaction_system)
|
super(ContextAutomatonWithConcentrations, self).__init__(reaction_system)
|
||||||
|
|
||||||
def is_valid_context(self, context):
|
def is_valid_context(self, context):
|
||||||
if set([e for e, lvl in context]).issubset(
|
return set(e for e, lvl in context).issubset(
|
||||||
self._reaction_system.background_set
|
self._reaction_system.background_set
|
||||||
):
|
)
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def context2str(self, ctx):
|
def context2str(self, ctx):
|
||||||
if len(ctx) == 0:
|
if len(ctx) == 0:
|
||||||
@@ -26,7 +23,7 @@ class ContextAutomatonWithConcentrations(ContextAutomaton):
|
|||||||
return s
|
return s
|
||||||
|
|
||||||
def add_transition(self, src, context_set, dst):
|
def add_transition(self, src, context_set, dst):
|
||||||
if not type(context_set) is set and not type(context_set) is list:
|
if not isinstance(context_set, (set, list)):
|
||||||
print("Contexts set must be of type set or list")
|
print("Contexts set must be of type set or list")
|
||||||
|
|
||||||
if not self.is_valid_context(context_set):
|
if not self.is_valid_context(context_set):
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ class ExtendedContextAutomaton(ContextAutomaton):
|
|||||||
|
|
||||||
ctx_reactants, ctx_inhibitors, ctx_products = ctx_reaction
|
ctx_reactants, ctx_inhibitors, ctx_products = ctx_reaction
|
||||||
|
|
||||||
if not type(ctx_products) is set and not type(ctx_products) is list:
|
if not isinstance(ctx_products, (set, list)):
|
||||||
print("Contexts set (context products) must be of type set or list")
|
print("Contexts set (context products) must be of type set or list")
|
||||||
|
|
||||||
if not self.is_valid_rs_set(ctx_reactants):
|
if not self.is_valid_rs_set(ctx_reactants):
|
||||||
|
|||||||
@@ -43,11 +43,8 @@ class ReactionSystem(object):
|
|||||||
self.add_bg_set_entity(e)
|
self.add_bg_set_entity(e)
|
||||||
|
|
||||||
def is_in_background_set(self, entity):
|
def is_in_background_set(self, entity):
|
||||||
"""Checks if the given name is valid wrt the background set="""
|
"""Checks if the given name is valid wrt the background set"""
|
||||||
if entity in self.background_set:
|
return entity in self.background_set
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def get_entity_id(self, name):
|
def get_entity_id(self, name):
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ class ReactionSystemWithConcentrations(ReactionSystem):
|
|||||||
def add_bg_set_entity(self, e):
|
def add_bg_set_entity(self, e):
|
||||||
name = ""
|
name = ""
|
||||||
def_max_conc = -1
|
def_max_conc = -1
|
||||||
if type(e) is tuple and len(e) == 2:
|
if isinstance(e, tuple) and len(e) == 2:
|
||||||
name, def_max_conc = e
|
name, def_max_conc = e
|
||||||
elif type(e) is str:
|
elif isinstance(e, str):
|
||||||
name = e
|
name = e
|
||||||
print("\nWARNING: no maximal concentration level specified for:", e, "\n")
|
print("\nWARNING: no maximal concentration level specified for:", e, "\n")
|
||||||
else:
|
else:
|
||||||
@@ -46,18 +46,10 @@ class ReactionSystemWithConcentrations(ReactionSystem):
|
|||||||
def is_valid_entity_with_concentration(self, e):
|
def is_valid_entity_with_concentration(self, e):
|
||||||
"""Sanity check for entities with concentration"""
|
"""Sanity check for entities with concentration"""
|
||||||
|
|
||||||
if type(e) is tuple:
|
if isinstance(e, (tuple, list)) and len(e) == 2 and isinstance(e[1], int):
|
||||||
if len(e) == 2 and type(e[1]) is int:
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if type(e) is list:
|
raise RuntimeError("Invalid entity+concentration: " + repr(e))
|
||||||
if len(e) == 2 and type(e[1]) is int:
|
|
||||||
return True
|
|
||||||
|
|
||||||
print("FATAL. Invalid entity+concentration: {:s}".format(e))
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
def get_state_ids(self, state):
|
def get_state_ids(self, state):
|
||||||
"""Returns entities of the given state without levels"""
|
"""Returns entities of the given state without levels"""
|
||||||
@@ -415,33 +407,4 @@ class ReactionSystemWithConcentrations(ReactionSystem):
|
|||||||
return rs
|
return rs
|
||||||
|
|
||||||
|
|
||||||
class ReactionSystemWithAutomaton(object):
|
|
||||||
def __init__(self, reaction_system, context_automaton):
|
|
||||||
self.rs = reaction_system
|
|
||||||
self.ca = context_automaton
|
|
||||||
|
|
||||||
def show(self, soft=False):
|
|
||||||
self.rs.show(soft)
|
|
||||||
self.ca.show()
|
|
||||||
|
|
||||||
def is_with_concentrations(self):
|
|
||||||
if not isinstance(self.rs, ReactionSystemWithConcentrations):
|
|
||||||
return False
|
|
||||||
if not isinstance(self.ca, ContextAutomatonWithConcentrations):
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
def sanity_check(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def get_ordinary_reaction_system_with_automaton(self):
|
|
||||||
if not self.is_with_concentrations():
|
|
||||||
raise RuntimeError("Not RS/CA with concentrations")
|
|
||||||
|
|
||||||
ors = self.rs.get_reaction_system()
|
|
||||||
oca = self.ca.get_automaton_with_flat_contexts(ors)
|
|
||||||
|
|
||||||
return ReactionSystemWithAutomaton(ors, oca)
|
|
||||||
|
|
||||||
|
|
||||||
# EOF
|
# EOF
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ class ReactionSystemWithConcentrationsParam(ReactionSystem):
|
|||||||
def add_bg_set_entity(self, e):
|
def add_bg_set_entity(self, e):
|
||||||
name = ""
|
name = ""
|
||||||
def_max_conc = -1
|
def_max_conc = -1
|
||||||
if type(e) is tuple and len(e) == 2:
|
if isinstance(e, tuple) and len(e) == 2:
|
||||||
name, def_max_conc = e
|
name, def_max_conc = e
|
||||||
elif type(e) is str:
|
elif isinstance(e, str):
|
||||||
name = e
|
name = e
|
||||||
print("\nWARNING: no maximal concentration level specified for:", e, "\n")
|
print("\nWARNING: no maximal concentration level specified for:", e, "\n")
|
||||||
else:
|
else:
|
||||||
@@ -80,18 +80,10 @@ class ReactionSystemWithConcentrationsParam(ReactionSystem):
|
|||||||
def is_valid_entity_with_concentration(self, e):
|
def is_valid_entity_with_concentration(self, e):
|
||||||
"""Sanity check for entities with concentration"""
|
"""Sanity check for entities with concentration"""
|
||||||
|
|
||||||
if type(e) is tuple:
|
if isinstance(e, (tuple, list)) and len(e) == 2 and isinstance(e[1], int):
|
||||||
if len(e) == 2 and type(e[1]) is int:
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if type(e) is list:
|
raise RuntimeError("Invalid entity+concentration: " + repr(e))
|
||||||
if len(e) == 2 and type(e[1]) is int:
|
|
||||||
return True
|
|
||||||
|
|
||||||
print("FATAL. Invalid entity+concentration: {:s}".format(e))
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
def is_valid_concentration_for_entity(self, entity, level):
|
def is_valid_concentration_for_entity(self, entity, level):
|
||||||
"""Checks the concentration level for entity"""
|
"""Checks the concentration level for entity"""
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
from rs import *
|
from rs import *
|
||||||
from smt import *
|
from smt import *
|
||||||
import rs_examples
|
|
||||||
from logics import *
|
from logics import *
|
||||||
from rsltl_shortcuts import *
|
from rsltl_shortcuts import *
|
||||||
|
|
||||||
from itertools import chain, combinations
|
from itertools import chain, combinations
|
||||||
|
|
||||||
import sys
|
|
||||||
import resource
|
import resource
|
||||||
|
|
||||||
def powerset(iterable,N=None):
|
def powerset(iterable,N=None):
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import argparse
|
|||||||
from rs import *
|
from rs import *
|
||||||
from smt import *
|
from smt import *
|
||||||
import sys
|
import sys
|
||||||
import rs_examples
|
|
||||||
import rs_testing
|
import rs_testing
|
||||||
|
|
||||||
from colour import *
|
from colour import *
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# from smt.smt_checker import SmtChecker
|
|
||||||
from smt.smt_checker_rs import SmtCheckerRS
|
from smt.smt_checker_rs import SmtCheckerRS
|
||||||
from smt.smt_checker_rsc import SmtCheckerRSC
|
from smt.smt_checker_rsc import SmtCheckerRSC
|
||||||
from smt.smt_checker_rsc_param import SmtCheckerRSCParam
|
from smt.smt_checker_rsc_param import SmtCheckerRSCParam
|
||||||
|
|||||||
@@ -267,7 +267,7 @@ class SmtCheckerRS(object):
|
|||||||
):
|
):
|
||||||
"""Main testing function"""
|
"""Main testing function"""
|
||||||
|
|
||||||
if not type(state) is tuple:
|
if not isinstance(state, tuple):
|
||||||
state = (state, [])
|
state = (state, [])
|
||||||
|
|
||||||
if print_time:
|
if print_time:
|
||||||
|
|||||||
@@ -11,9 +11,6 @@ from colour import *
|
|||||||
|
|
||||||
from logics import rsLTL_Encoder
|
from logics import rsLTL_Encoder
|
||||||
|
|
||||||
# def simplify(x):
|
|
||||||
# return x
|
|
||||||
|
|
||||||
|
|
||||||
class SmtCheckerRSC(object):
|
class SmtCheckerRSC(object):
|
||||||
def __init__(self, rsca):
|
def __init__(self, rsca):
|
||||||
|
|||||||
@@ -14,9 +14,6 @@ from logics import ParamConstr_Encoder
|
|||||||
|
|
||||||
from rs.reaction_system_with_concentrations_param import ParameterObj, is_param
|
from rs.reaction_system_with_concentrations_param import ParameterObj, is_param
|
||||||
|
|
||||||
# def simplify(x):
|
|
||||||
# return x
|
|
||||||
|
|
||||||
|
|
||||||
def z3_max(a, b):
|
def z3_max(a, b):
|
||||||
return If(a > b, a, b)
|
return If(a > b, a, b)
|
||||||
|
|||||||
Reference in New Issue
Block a user