Parameters
    ----------
    recording : A list of lists
        Each sublist represents a stroke
    single_clf : object
        A classifier for single symbols - it only says "True" when a stroke is
        a single symbol or "False" when a stroke is only part of a symbol.

    Returns
    -------
    list
        A list of lists. Each sub-list is at least one symbol, but might be
        more.

def get_mst_wood(recording, single_clf):
    """
    Parameters
    ----------
    recording : A list of lists
        Each sublist represents a stroke
    single_clf : object
        A classifier for single symbols - it only says "True" when a stroke is
        a single symbol or "False" when a stroke is only part of a symbol.

    Returns
    -------
    list
        A list of lists. Each sub-list is at least one symbol, but might be
        more.
    """
    points = get_points(recording)
    mst = get_mst(points)
    mst_wood = [{'mst': mst, 'strokes': list(range(len(mst)))}]
    # TODO: break mst into wood of msts wherever possible by recognizing single
    # symbols by stroke

    bbintersections = get_bb_intersections(recording)
    for i, stroke in enumerate(recording):  # TODO
        predictions = single_clf.predict({'id': 0, 'data': [stroke]})
        # TODO predictions[:20]
        prob_sum = sum([p['probability'] for p in predictions[:1]])
        # dots cannot be segmented into single symbols at this point
        if prob_sum > 0.95 and not any([el for el in bbintersections[i]]) \
           and len(stroke) > 2 \
           and predictions[0]['semantics'].split(';')[1] != '-':
            # Split mst here
            split_mst_index, split_node_i = find_split_node(mst_wood, i)
            mst_wood_tmp = break_mst(mst_wood[split_mst_index],
                                     split_node_i)
            del mst_wood[split_mst_index]
            for mst in mst_wood_tmp:
                mst_wood.append(mst)
            for mst in mst_wood:
                if i in mst['strokes']:
                    mst['pred'] = predictions[0]['semantics'].split(';')[1]

    # if any([True for mst in mst_wood if len(mst['strokes']) >= 8]):
    #     logging.debug([mst['pred'] for mst in mst_wood if 'pred' in mst])
    #     HandwrittenData(json.dumps(recording)).show()
    return mst_wood