Refactoring: Python/SMT

This commit is contained in:
2026-04-10 14:30:46 +01:00
parent 6bddf4bf38
commit 554b34afcf
12 changed files with 20 additions and 87 deletions

View File

@@ -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):

View File

@@ -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):

View File

@@ -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):

View File

@@ -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:

View File

@@ -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

View File

@@ -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"""

View File

@@ -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):

View File

@@ -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 *

View File

@@ -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

View File

@@ -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:

View File

@@ -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):

View File

@@ -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)