コード例 #1
0
def extendR(targetSys, s, inputs, E, mqNum):
    newRList = []
    for i in range(len(inputs)):
        newTrace = s.tws + [TimedWord(inputs[i], 0)]
        element, mqNum = fillTableRow(newTrace, E, targetSys, mqNum)
        newRList.append(element)
    return newRList, mqNum
コード例 #2
0
def getMinCtxList(complementRTA, upperGuard):
    # 获得每个状态对应的连接状态 {"0":["0","1","2"]}
    stateDict = {}
    for s in complementRTA.states:
        stateDict[s.stateName] = []
        for t in complementRTA.trans:
            if t.source == s.stateName:
                if t.target not in stateDict[s.stateName]:
                    stateDict[s.stateName].append(t.target)
    # 获得最短反例路径
    ctxList = []
    shortestPath = findShortestPath(stateDict, complementRTA.initState,
                                    complementRTA.errorState)
    if len(shortestPath) == 0:
        pass
    else:
        # 计算最短反例
        compareTrace = []
        compareTrace += getStateTrace(complementRTA, shortestPath)
        firstState = shortestPath[-1]
        secondState = shortestPath[-2]
        for tran in complementRTA.trans:
            if tran.source == secondState and tran.target == firstState:
                timeList = getTimeList(tran.guards, upperGuard)
                # timeList = [getRandomTime(tran.guards, upperGuard, precision)]
                for time in timeList:
                    tiw = TimedWord(tran.input, time)
                    tempTrace = compareTrace + [tiw]
                    ctxList.append(tempTrace)
                break
    return ctxList
コード例 #3
0
def getTwsConnection(source, target, a, hypothesisRTA):
    tw = None
    for tran in hypothesisRTA.trans:
        if tran.source == source and tran.target == target and tran.isPass(a):
            tw = TimedWord(tran.input, tran.evidence)
            break
    return tw
コード例 #4
0
def stwsTOtws(stws, symbolList):
    tws = []
    if not stws:
        return []
    else:
        for stw in stws:
            tw = TimedWord(symbolList[stw].input,
                           symbolList[stw].representation)
            tws.append(tw)
        return tws
コード例 #5
0
def sampleGeneration(hypothesis, upperGuard, stateNum):
    sample = []
    length = math.ceil(abs(random.normalvariate(0, 2 * stateNum + 1)))
    for i in range(length):
        input = hypothesis.inputs[random.randint(0,
                                                 len(hypothesis.inputs) - 1)]
        time = random.randint(0, upperGuard * 2 - 1) / 2
        temp = TimedWord(input, time)
        sample.append(temp)
    return sample
コード例 #6
0
def initSymbol(tws, input, upperGuard, sampleNum, targetSys, mqNum):
    guard = timeInterval_upper.Guard("[0," + str(upperGuard) + ")")
    evidences = {}
    evidencesNum = list(set(np.random.uniform(0, upperGuard, sampleNum)))
    for i in range(len(evidencesNum)):
        evidencesNum[i] = evidencesNum[i]
    evidencesNum.sort()
    for i in evidencesNum:
        trace = tws + [TimedWord(input, i)]
        tempValue = TQs(trace, targetSys)
        mqNum += 1
        evidences[i] = tempValue
    representation = np.random.choice(evidencesNum)
    return SymbolTimedWord(input, guard, evidences, representation), mqNum
コード例 #7
0
def getStateTrace(complementRTA, shortestPath):
    trace = []
    tempPath = shortestPath[:-1]
    if len(tempPath) == 1:
        return trace
    else:
        i = 0
        while i < len(tempPath) - 1:
            for tran in complementRTA.trans:
                if tran.source == tempPath[i] and tran.target == tempPath[i +
                                                                          1]:
                    time = getRandomTime(tran.guards)
                    tiw = TimedWord(tran.input, time)
                    trace.append(tiw)
                    break
            i += 1
        return trace
コード例 #8
0
def dealCtx(table, ctx, inputs, targetSys, mqNum):
    tws = ctx.tws
    # 处理每个状态对应的最小tw序列
    stateDict = {}  # {elementId:repreList}
    for s in table.S:
        stateDict[s.elementId] = stwsTOtws(s.stws, table.symbolList)
    # 处理table的所有element {elementId: realElement}
    tableElement = {}
    for s in table.S:
        tableElement[s.elementId] = s
    for r in table.R:
        tableElement[r.elementId] = r
    # 处理valueList对应的状态名ElementId
    valueList_name_dict = {}
    for s in table.S:
        stateName = s.elementId
        valueList_name_dict[makeStr(s.valueList)] = stateName
    # 处理反例tw对应的符号和状态
    symbolTups = []  # [(symbolId, elementId)]
    elementId = 0
    for i in tws:
        symbols = tableElement[elementId].symbols
        for symbol in symbols:
            realSymbol = table.symbolList[symbol]
            if realSymbol.input == i.input and realSymbol.guard.isInInterval(
                    i.time):
                symbolId = symbol
                # 找到elementId
                stws = tableElement[elementId].stws + [symbolId]
                for key, value in tableElement.items():
                    if value.stws == stws:
                        elementId = key
                        break
                elementId = valueList_name_dict[makeStr(
                    tableElement[elementId].valueList)]
                symbolTups.append((symbolId, elementId))
                break
    # 获得flag
    state = symbolTups[-1][1]
    tempTws = stateDict[state]
    flag = TQs(tempTws, targetSys)
    mqNum += 1
    # breakPoint处理,即找到出错处
    for i in range(len(tws) - 1, -1, -1):
        # u = tws[:i]
        a = tws[i]
        v = tws[i + 1:]
        repA = table.symbolList[symbolTups[i][0]]
        twA = TimedWord(repA.input, repA.representation)
        if i == 0:
            tws1 = [] + [twA] + v
            tws2 = [] + [a] + v
        else:
            tws1 = stateDict[symbolTups[i - 1][1]] + [twA] + v
            tws2 = stateDict[symbolTups[i - 1][1]] + [a] + v
        if TQs(tws1, targetSys) != flag:
            mqNum += 1
            table, mqNum = addE(v, table, targetSys, mqNum)
            break
        elif TQs(tws2, targetSys) != flag:
            mqNum += 2
            aSymbolId = symbolTups[i][0]
            if i == 0:
                trace = [] + [a] + v
            else:
                trace = stateDict[symbolTups[i - 1][1]] + [a] + v
            value = TQs(trace, targetSys)
            table.symbolList[aSymbolId].evidences[a.time] = value
            ### 处理兼容
            # 获得对应要处理的elementId
            if i == 0:
                targetId = 0
            else:
                targetId = symbolTups[i - 1][1]
            # 开始处理兼容性
            if isEvComp(targetId, table):
                table, mqNum = addE(v, table, targetSys, mqNum)
            else:
                while not isEvComp(targetId, table):
                    table = makeEvComp(targetId, table, inputs)
                table, mqNum = addR(targetId, table, targetSys, mqNum)
            break
    return table, mqNum