Example #1
0
def find_in_G_x0(w):
    global err_in_g_x0_py
    g1i = np.zeros(11, dtype = np.uint32)

    if mm_op15_norm_A(w) != ORDER_TAGS[OFS_NORM_A]:
        err_in_g_x0_py = 1
        return None        
    w3 = mm_op15_eval_A_rank_mod3(w, ORDER_TAGS[OFS_DIAG_VA])
    w3 &= 0xffffffffffff
    if w3 == 0: 
        err_in_g_x0_py = 2
        return None
    w_type4 = gen_leech3to2_type4(w3)
    if w_type4 == 0: 
        err_in_g_x0_py = 3
        return None
    wA = np.array(w[:2*24], copy = True)
    len_g1 = gen_leech2_reduce_type4(w_type4, g1i)
    assert 0 <= len_g1 <= 6 
    res = mm_op15_word_tag_A(wA, g1i, len_g1, 1)
    assert res == 0
    perm_num = mm_op15_watermark_A_perm_num(
        ORDER_TAGS[OFS_WATERMARK_PERM:], wA)
    if perm_num < 0: 
        err_in_g_x0_py = 4
        return None
    if perm_num > 0:
        g1i[len_g1] = 0xA0000000 + perm_num 
        res = mm_op15_word_tag_A(wA, g1i[len_g1:], 1, 1)
        assert res  == 0
        len_g1 += 1
    v_y = mm_aux_mmv_extract_sparse_signs(15, wA, 
        ORDER_TAGS[OFS_TAGS_Y:], 11)
    if v_y < 0:
        err_in_g_x0_py = 5
        return None
    y = leech2matrix_solve_eqn(ORDER_TAGS[OFS_SOLVE_Y:], 11, v_y)
    if y > 0:
        g1i[len_g1] = 0xC0000000 + y
        res = mm_op15_word_tag_A(wA, g1i[len_g1:], 1, 1)
        assert res  == 0
        len_g1 += 1
    if (wA != ORDER_VECTOR[:2*24]).all():
        err_in_g_x0_py = 6
        return None
    #print("g1i", g1i[:len_g1])
    return g1i[:len_g1]
def get_axes():
    global AXES
    if len(AXES):
        return AXES
    for i, g1 in enumerate(sample_axes.g_strings):
        g2 = sample_axes.g_beautifiers[i]
        g = MM0(g1) * MM0(g2)
        g_class = sample_axes.g_classes[i]
        axis = Axis(g, g_class)
        axis.mark = sample_axes.g_marks[i]
        axis.group = sample_axes.groups[i]
        axis.powers = sample_axes.powers[i]
        axis.stage = sample_axes.g_stages[i]
        axis.v15 = v_axis15 * MM0(sample_axes.g_strings[i])
        axis.norm15 = mm_op15_norm_A(axis.v15.data)
        AXES[g_class] = axis
    return AXES
def norm_A_mod15(i):
    """Return norm(A) mod 15 for entry i in the list in sample_axes.py

    The lists in file sample_axes.py refer to a collection of 12-axes 
    of different types.
   
    """
    global norms_A_mod15
    try:
        return norms_A_mod15[i]
    except:
        norms_A_mod15 = []
        sample_axes = import_sample_axes()
        V15 = MMV(15)
        for g in sample_axes.g_strings:
            v = v_axis * MM0(g)
            norms_A_mod15.append(mm_op15_norm_A(v.data))
        return norms_A_mod15[i]
Example #4
0
def make_order_tags(order_vector, tags_y, tags_x, tag_sign):
    ov = order_vector.data
    tags_y = np.array(tags_y, dtype=np.uint32)
    tags_x = np.array(tags_x, dtype=np.uint32)
    tag_sign = np.array(tag_sign, dtype=np.uint32)
    watermark_perm = np.zeros(24, dtype=np.uint32)
    ok = mm_op15_watermark_A(ov, watermark_perm)
    assert ok >= 0

    solve_yt = np.zeros(11, dtype=np.uint64)
    assert len(tags_y) == 11
    nrows = 0
    for y in tags_y:
        eqn = map_y(y)
        nrows += leech2matrix_add_eqn(solve_yt, nrows, 11, eqn)
    assert nrows == 11, nrows
    solve_y = list(bitmatrix64_t(solve_yt, 11))
    assert len(solve_y) == 11
    assert mm_aux_mmv_extract_sparse_signs(15, ov, tags_y, 11) == 0

    solve_xt = np.zeros(24, dtype=np.uint64)
    assert len(tags_x) == 24
    nrows = 0
    for i, x in enumerate(tags_x):
        eqn = map_x(x)
        nrows += leech2matrix_add_eqn(solve_xt, nrows, 24, eqn)
    assert nrows == 24, nrows
    solve_x = list(bitmatrix64_t(solve_xt, 24))

    # Concatenate computed lists to the global numpy array 'ORDER_TAGS'
    order_tags = np.array(sum(
        map(list, [[mm_op15_norm_A(ov), 0], watermark_perm, tags_y, solve_y,
                   tags_x, solve_x, tag_sign]), []),
                          dtype=np.uint32)
    assert len(order_tags) == 97, len(order_tags)
    t0 = mm_aux_mmv_extract_sparse_signs(15, ov, order_tags[OFS_TAGS_X:], 24)
    assert t0 == 0
    return order_tags