def reliability_uneven2(scheme, sub_stats, tests=0): (distr, matrix) = sub_stats if sum(distr) == 0: return external_reliability(scheme, tests - 1) reliability = 0.0 if tests == 0 or tests > 2 ** scheme.inputs(): tests = 2 ** scheme.inputs() if len(distr) != 2 ** (scheme.inputs()): return 0 for elem in range(scheme.elements()): error_number = 2 ** elem error = num2vec(error_number, scheme.elements()) error_count = 0.0 for test in range(tests): if tests == 2 ** scheme.inputs(): input_num = test else: input_num = random.randrange(2 ** scheme.inputs()) input_values = num2vec(input_num, scheme.inputs()) etalon = scheme.process(input_values) with_err = scheme.process(input_values, error) if etalon != with_err: error_count += distr[input_num] * matrix[vec2num(etalon)][vec2num(with_err)] # print("Input vec: {}, Etalon vec: {}, Err vec: {}, Distr: {} Matrix: {}".format(input_num, vec2num(etalon), vec2num(with_err), distr[input_num], matrix[vec2num(etalon)][vec2num(with_err)])) # print(arr[input_num], '*', matrix[vec2num(etalon)][vec2num(with_err)]) # print('+') reliability += error_count return reliability
def reliability_uneven(scheme, arr, tests=0): """ :param scheme: Input scheme. :param tests: Number of tests. If 0 all possible tests will be performed. :return: Scheme COF characteristics. """ if sum(arr) == 0: return external_reliability(scheme, tests - 1) reliability = 0.0 if tests == 0 or tests > 2 ** scheme.inputs(): tests = 2 ** scheme.inputs() if len(arr) != 2 ** (scheme.inputs()): return 0 for elem in range(scheme.elements()): error_number = 2 ** elem error = num2vec(error_number, scheme.elements()) error_count = 0.0 for test in range(tests): if tests == 2 ** scheme.inputs(): input_num = test else: input_num = random.randrange(2 ** scheme.inputs()) input_values = num2vec(input_num, scheme.inputs()) if error_test(scheme, input_values, error): error_count += arr[input_num] reliability += error_count return reliability