def dim_fancy_relation(degree): admissible_words = cl.generate_Words(degree) size = 0 for i in range(2, degree - 1): size += (2**(i - 2)) * (2**(degree - i - 2)) A = np.zeros([len(admissible_words), size]) current_column = 0 for i in range(2, degree - 1): deg_i_words = cl.generate_Words(i) for v in deg_i_words: v_word = cl.Word([1], [v]) deg_n_minus_i_words = cl.generate_Words(degree - i) for w in deg_n_minus_i_words: result = v_word.fancy_shuffle(cl.Word([1], [w])) for k in range(len(result.word)): a = admissible_words.index(result.word[k]) A[a, current_column] = result.q[k] current_column += 1 S = np.linalg.svd(A.astype(int))[1] rank = 0 for i in S: if abs(i) > 0.01: rank += 1 return rank #len(A.rref()[1])
def check_if_new_relatiion(relation): relation.simplify() degree = len(relation.word[0]) admissible_words = cl.generate_Words(degree) #Fill the b vector b = np.zeros([len(admissible_words), 1]) for i in range(len(relation.word)): a = admissible_words.index(relation.word[i]) b[a] = relation.q[i] A = np.zeros([len(admissible_words), (degree - 2) * (2**(degree - 3))]) current_column = 0 for n in range(1, degree - 1): deg_n_words = cl.generate_Words(degree - n) deg_n_forests = cl.generate_Fn(n) for j in range(len(deg_n_forests)): for i in range(len(deg_n_words)): result = deg_n_forests[j](cl.Word([1], [deg_n_words[i]])) result.simplify() for k in range(len(result.word)): a = admissible_words.index(result.word[k]) A[a, current_column] = result.q[k] current_column += 1 if len(sp.Matrix(A.astype(int)).rref()[1]) < len( sp.Matrix(np.concatenate((A, b), axis=1).astype(int)).rref()[1]): return True else: return False
def compare_tree_fancy(degree): admissible_words = cl.generate_Words(degree) size = 0 for i in range(2, degree - 1): size += (2**(i - 2)) * (2**(degree - i - 2)) cutoff = size size += (2**(degree - 3)) * ((degree - 1) // 2) A = np.zeros([len(admissible_words), size]) current_column = 0 for i in range(2, degree - 1): deg_i_words = cl.generate_Words(i) for v in deg_i_words: v_word = cl.Word([1], [v]) deg_n_minus_i_words = cl.generate_Words(degree - i) for w in deg_n_minus_i_words: result = v_word.fancy_shuffle(cl.Word([1], [w])) for k in range(len(result.word)): a = admissible_words.index(result.word[k]) A[a, current_column] = result.q[k] current_column += 1 for i in range(1, (degree + 1) // 2): deg_i_words = cl.generate_Words_Hy(i) deg_n_minus_i_words = cl.generate_Words_Hy(degree - i - 1) for v in deg_i_words: v_word = cl.Word([1], [v]) for w in deg_n_minus_i_words: result = kawashima_1(v_word, cl.Word([1], [w])) result.simplify() for k in range(len(result.word)): a = admissible_words.index(result.word[k]) A[a, current_column] = result.q[k] current_column += 1 fancy_matrix = A[:, :cutoff] kaw_matrix = A[:, cutoff:] S = np.linalg.svd(A.astype(int))[1] K = np.linalg.svd(kaw_matrix.astype(int))[1] F = np.linalg.svd(fancy_matrix.astype(int))[1] rank = 0 rank_K = 0 rank_F = 0 for i in S: if abs(i) > 0.01: rank += 1 for i in K: if abs(i) > 0.01: rank_K += 1 for i in F: if abs(i) > 0.01: rank_F += 1 return ("Total dim:", rank, "Kawashima dim:", rank_K, "Fancy dim:", rank_F, "intersect", rank_K + rank_F - rank) # len(A.rref()[1])
def dim_kaw(degree): admissible_words = cl.generate_Words(degree) if degree >= 4: size = (2**(degree - 3)) * ((degree - 1) // 2) + (2**(degree - 4)) * ( (degree - 2) // 2) else: size = (2**(degree - 3)) * ((degree - 1) // 2) A = np.zeros([len(admissible_words), size]) current_column = 0 for i in range(1, (degree + 1) // 2): deg_i_words = cl.generate_Words_Hy(i) deg_n_minus_i_words = cl.generate_Words_Hy(degree - i - 1) for v in deg_i_words: v_word = cl.Word([1], [v]) for w in deg_n_minus_i_words: result = kawashima_1(v_word, cl.Word([1], [w])) result.simplify() for k in range(len(result.word)): a = admissible_words.index(result.word[k]) A[a, current_column] = result.q[k] current_column += 1 if degree >= 4: for i in range(1, (degree) // 2): deg_i_words = cl.generate_Words_Hy(i) deg_n_minus_i_words = cl.generate_Words_Hy(degree - i - 2) for v in deg_i_words: v_word = cl.Word([1], [v]) for w in deg_n_minus_i_words: result = kawashima_2(v_word, cl.Word([1], [w])) result.simplify() for k in range(len(result.word)): a = admissible_words.index(result.word[k]) A[a, current_column] = result.q[k] current_column += 1 S = np.linalg.svd(A.astype(int))[1] #print(len(sp.Matrix(A.astype(int)).rref()[1])) rank = 0 for i in S: if abs(i) > 0.1: rank += 1 return rank
def compare_kaw_fancy(degree): admissible_words = cl.generate_Words(degree) size = 0 for i in range(2, degree - 1): size += (2**(i - 2)) * (2**(degree - i - 2)) if degree >= 4: size += (2**(degree - 3)) * ((degree - 1) // 2) + (2**(degree - 4)) * ( (degree - 2) // 2) else: size += (2**(degree - 3)) * ((degree - 1) // 2) A = np.zeros([len(admissible_words), size]) current_column = 0 for i in range(2, degree - 1): deg_i_words = cl.generate_Words(i) for v in deg_i_words: v_word = cl.Word([1], [v]) deg_n_minus_i_words = cl.generate_Words(degree - i) for w in deg_n_minus_i_words: result = v_word.fancy_shuffle(cl.Word([1], [w])) for k in range(len(result.word)): a = admissible_words.index(result.word[k]) A[a, current_column] = result.q[k] current_column += 1 for i in range(1, (degree + 1) // 2): deg_i_words = cl.generate_Words_Hy(i) deg_n_minus_i_words = cl.generate_Words_Hy(degree - i - 1) for v in deg_i_words: v_word = cl.Word([1], [v]) for w in deg_n_minus_i_words: result = kawashima_1(v_word, cl.Word([1], [w])) result.simplify() for k in range(len(result.word)): a = admissible_words.index(result.word[k]) A[a, current_column] = result.q[k] current_column += 1 if degree >= 4: for i in range(1, (degree) // 2): deg_i_words = cl.generate_Words_Hy(i) deg_n_minus_i_words = cl.generate_Words_Hy(degree - i - 2) for v in deg_i_words: v_word = cl.Word([1], [v]) for w in deg_n_minus_i_words: result = kawashima_2(v_word, cl.Word([1], [w])) result.simplify() for k in range(len(result.word)): a = admissible_words.index(result.word[k]) A[a, current_column] = result.q[k] current_column += 1 S = np.linalg.svd(A.astype(int))[1] rank = 0 for i in S: if abs(i) > 0.1: rank += 1 return rank # len(A.rref()[1])
def table_gen(): #input_list = ["xy","xxy","xyy","xyxy","xxyy","xxxy","xyyy","xxxxy","xyxyy","xyxxy","xyyyy"] five_words = cl.generate_Words(5) cl.generate_table(five_words)