def increment(a, max_number=None) -> Tuple[any, int]:
        if max_number is None:
            max_number = a + 1

        max_tree_depth = get_max_tree_depth(
            max_number
        )  # as one is already represented by structure with 2 levels

        a_tree = number_to_tree(a, max_tree_depth, fillers, roles)
        a_tree_flattened = flattenize_per_tensor_representation(a_tree)

        keras_increment_network = build_increment_network(
            roles=roles,
            dual_roles=dual_basic_roles_case_1,
            fillers=fillers,
            max_depth=max_tree_depth)

        a_tree_flattened = a_tree_flattened.reshape(
            (1, *a_tree_flattened.shape, 1))
        new_number = keras_increment_network.predict_on_batch(
            [a_tree_flattened])

        new_number = new_number.reshape((*new_number.shape[1:], ))
        return (extract_per_level_tensor_representation_after_unshift(
            new_number, max_tree_depth, SINGLE_ROLE_SHAPE,
            SINGLE_FILLER_SHAPE), max_tree_depth)
 def test_single_sum_2_0(self):
     max_number = 3
     max_tree_depth = get_max_tree_depth(max_number)
     a = 2
     b = 0
     c, d = sum_numbers(a,
                        b,
                        max_tree_depth,
                        roles,
                        dual_basic_roles_case_1,
                        fillers,
                        number_sum_blocks=1)
     self.assertEqual(1, c)
     self.assertEqual(1, d)
 def test_sum_0_3(self):
     max_number = 3
     max_tree_depth = get_max_tree_depth(max_number)
     a = 0
     b = 3
     c, d = sum_numbers(a,
                        b,
                        max_tree_depth,
                        roles,
                        dual_basic_roles_case_1,
                        fillers,
                        number_sum_blocks=max_number)
     self.assertEqual(0, c)
     self.assertEqual(3, d)
    tf.compat.v1.disable_eager_execution()

    # Input information
    fillers = np.array([
        [7, 0, 0, 0, 0],  # A
    ])

    roles = np.array([
        [10, 0],  # r_0
        [0, 5],  # r_1
    ])
    dual_basic_roles_case_1 = np.linalg.inv(roles)
    order_case_active = ['A', ]

    MAX_NUMBER = 4
    MAX_TREE_DEPTH = get_max_tree_depth(MAX_NUMBER)
    SINGLE_ROLE_SHAPE = roles[0].shape
    SINGLE_FILLER_SHAPE = fillers[0].shape

    # TPR-Inc Network
    a = 0
    new_number_one = number_to_tree(a, MAX_TREE_DEPTH, fillers, roles)
    one_unshifted = flattenize_per_tensor_representation(new_number_one)

    keras_increment_network = build_increment_network(roles=roles,
                                                      dual_roles=dual_basic_roles_case_1,
                                                      fillers=fillers,
                                                      max_depth=MAX_TREE_DEPTH)
    print('Built increment network')

    one_unshifted = one_unshifted.reshape((1, *one_unshifted.shape, 1))