def test_facto(nb_states_1, nb_letters_1, nb_states_2, nb_letters_2): while True: m1 = generator.helix(nb_states_1, nb_letters_1) m2 = generator.helix(nb_states_2, nb_letters_2) m = product(m1, m2) if m.bireversible(): break # print(m) return len(factor(m)) != 0
def test_factor_inv(nb_states_1, nb_letters_1, nb_states_2, nb_letters_2): while True: m1 = generator.helix(nb_states_1, nb_letters_1) m2 = generator.helix(nb_states_2, nb_letters_2) m = product(m1, m2) if m.bireversible(): break print(m) return factor_inv(m) is not None
def test_all_factors_iso_inv_n(n): c_smart = 0 for _ in range(n): smart = test_all_factors_iso_inv(generator.helix(4, 4)) if smart: c_smart += 1 print("smart", c_smart, "/", n)
def test_all_factors_n(n): c_inv = 0 c_smart = 0 for _ in range(n): inv, smart = test_all_factors(generator.helix(4, 3)) if inv: c_inv += 1 if smart: c_smart += 1 print("inv", c_inv, "/", n) print("smart", c_smart, "/", n)
def test_divide(nb_states, nb_letters): while True: m1 = helix(nb_states, nb_letters) m2 = helix(nb_states, nb_letters) m = product(m1, m2) if m.bireversible(): break ma = divide_right(m, m2) print(ma) if ma == m1: print("C'EST LE BON") prod = product(ma, m2) return True # if prod == m: # return True return False
def perf_func(test_size, funcs): test_set = [] for i in range(1, test_size): for j in range(test_size): if i * j <= test_size: for _ in range(2): test_set.append(generator.helix(i, j)) print("Generated", len(test_set)) print("Test set generated") bars = [] for f in funcs: bars.append(perf_facto(f[0], f[1], len(test_set) // 2, test_set, x)) plt.figure(1) ind = list(range(len(test_set) // 2)) for i in range(len(bars)): plt.subplot(1, 2, i + 1) plt.bar(ind, bars[i], 1) plt.title(funcs[i][0]) plt.show()