示例#1
0
文件: tool.py 项目: MKlauck/qcomp2020
def is_benchmark_supported(benchmark: Benchmark):
    """returns True if the provided benchmark is supported by the tool and if the given benchmark should appear on the generated benchmark list"""
    if not benchmark.is_prism() or benchmark.is_prism_inf():
        return False
    if benchmark.get_model_type() not in {"ctmc", "dtmc", "mdp"}:
        return False
    if benchmark.get_property_type() not in {
            "prob-reach", "prob-reach-step-bounded"
    }:
        return False
    if (benchmark.is_ctmc()
            and benchmark.get_property_type() == "prob-reach-step-bounded"):
        return False
    return True
示例#2
0
文件: tool.py 项目: MKlauck/qcomp2020
def is_benchmark_supported(benchmark: Benchmark, trackId):
    """returns True if the provided benchmark is supported by the tool and if the given benchmark should appear on the generated benchmark list"""

    if benchmark.is_pta() and benchmark.is_prism():
        # Some PTAs from Prism are not supported because either
        # modest can't apply digital clocks semantic due to open constraints, or
        # modest puts the time as branch-rewards on the models, which are not supported for time-bounded properties
        if benchmark.get_model_short_name() in [
                "firewire-pta", "zeroconf-pta"
        ]:
            return "time-bounded" not in benchmark.get_property_type()
        else:
            return False
    if benchmark.is_prism_inf() and benchmark.is_ctmc():
        # Storm does not support the CTMCs with infinite state-spaces
        return False

    # Time bounded queries on continuous time models can not be solved exactly
    if trackId in ["correct", "floating-point-correct"]:
        if "time-bounded" in benchmark.get_property_type() and (
                benchmark.is_ma() or benchmark.is_ctmc()):
            return False
    return True
示例#3
0
文件: tool.py 项目: MKlauck/qcomp2020
def is_benchmark_supported(benchmark: Benchmark):
    """
	Returns True if the provided benchmark is supported by the tool and
	if the given benchmark should appear on the generated benchmark list
	"""
    # DFTRES only supports Markovian models with purely spurious nondeterminism
    if not (benchmark.is_dtmc() or benchmark.is_ctmc() or benchmark.is_ma()):
        return False
    # User-defined functions (the "call" JANI operator) are not supported
    if "functions" in benchmark.get_jani_features():
        return False
    # Only time-accumulating or time-instant reward queries
    supported_queries = [
        "prob-reach", "prob-reach-time-bounded", "steady-state-prob"
    ]
    if not benchmark.get_property_type() in supported_queries:
        return False
    # No support for real variables yet
    real_vars = [ v for v in benchmark.load_jani_file()["variables"] \
         if v["type"] == "real"]
    if 0 < len(real_vars):
        return False
    # Some MAs have not-obviously-spurious nondeterminism and can't be simulated
    unsupported_models = [
        "bitcoin-attack",
    ]
    # The arithmetic operations of some models aren't supported
    unsupported_models += [
        "majority", "philosophers", "speed-ind", "dpm", "readers-writers"
    ]
    if benchmark.get_model_short_name() in unsupported_models:
        return False
    # All other models are supported
    if ONLY_QCOMP_2020_BENCHMARKS:
        return benchmark.get_identifier() in QComp2020_benchmarks
    else:
        return True