def METHOD_NAME(small_precisions, big_precisions):
    assert(max(small_precisions) <= min(big_precisions))
    precisions = small_precisions + big_precisions
    str_name = "_".join(map(str, precisions))
    small_max_prec = max(small_precisions)
    max_prec = max(precisions)
    arg_names = list(map(lambda x: f"%arg{x}" , range(len(precisions))))
    arg_types = list(map(lambda x: f"!FHE.eint<{x}>" , precisions))
    max_type = f"!FHE.eint<{max_prec}>"
    small_max_type = f"!FHE.eint<{small_max_prec}>"
    str_args = ", ".join(map(lambda x: f"{x[0]}: {x[1]}", zip(arg_names, arg_types)))
    print(f"description: multi_precision_double_layered_{str_name}")
    print( "program: |")
    print(f"  func.func @main({str_args}) -> {max_type} {{")
    print(f"    %0 = \"FHE.zero\"() : () -> {small_max_type}")
    for i in range(len(small_precisions)): 
        current_precision = precisions[i]
        current_type = arg_types[i]
        current_arg = arg_names[i]
        identity_lut = get_identity_lut(current_precision)
        print(f"    %lut{i} = arith.constant dense<{identity_lut}> : tensor<{len(identity_lut)}xi64>")
        print(f"    %bs{i} = \"FHE.apply_lookup_table\"({current_arg}, %lut{i}): ({current_type}, tensor<{len(identity_lut)}xi64>) -> ({small_max_type})")
        print(f"    %{i+1} = \"FHE.add_eint\"(%{i}, %bs{i}) : ({small_max_type}, {small_max_type}) -> ({small_max_type})")
    identity_lut = get_identity_lut(current_precision)
    print(f"    %lut{i+1} = arith.constant dense<{identity_lut}> : tensor<{len(identity_lut)}xi64>")
    print(f"    %{i+2} = \"FHE.apply_lookup_table\"(%{i+1}, %lut{i+1}): ({small_max_type}, tensor<{len(identity_lut)}xi64>) -> ({max_type})")
    for j in range(len(big_precisions)): 
        current_precision = precisions[i+1+j]
        current_type = arg_types[i+1+j]
        current_arg = arg_names[i+1+j]
        identity_lut = get_identity_lut(current_precision)
        print(f"    %lut{i+2+j} = arith.constant dense<{identity_lut}> : tensor<{len(identity_lut)}xi64>")
        print(f"    %bs{i+2+j} = \"FHE.apply_lookup_table\"({current_arg}, %lut{i+2+j}): ({current_type}, tensor<{len(identity_lut)}xi64>) -> ({max_type})")
        print(f"    %{i+2+j+1} = \"FHE.add_eint\"(%{i+2+j}, %bs{i+2+j}) : ({max_type}, {max_type}) -> ({max_type})")
    print(f"    return %{i+2+j+1} : {max_type}")
    print("  }")
    print(f"p-error: {P_ERROR}")
    print("tests:")
    for i in range(8):
        print("  - inputs:")
        inputs = get_double_layered_inputs(small_precisions, big_precisions)
        for input in inputs:
            print(f"    - scalar: {input}")
        print("    outputs:")
        print(f"    - scalar: {sum(inputs)}")
    print("---")