def METHOD_NAME(
    a, b, a_bvh: BVHTree, b_bvh: BVHTree, 
    width: float, segments=9,
    close_caps=True, intersection_curve=None,
):
    inter = intersection_curve or compute_intersection_curve(a, b, a_bvh, b_bvh)
    verts = np.empty((len(inter.data.vertices), 3))   
    edges = np.empty((len(inter.data.edges), 2), dtype=int)
    inter.data.vertices.foreach_get("co", verts.ravel())
    inter.data.edges.foreach_get('vertices', edges.ravel())
    if intersection_curve is None:
        # only delete it if we made it ourselvse
        butil.delete(inter)
    if len(verts) < 3:
        raise ValueError(f'create_bevel_connection({a=}, {b=}) had only {len(verts)=} intersecting points')
    a_offset = normal_offset_verts(verts, a_bvh, b_bvh, width)
    b_offset = normal_offset_verts(verts, b_bvh, a_bvh, width)
    final_vert_parts = [a_offset, verts, b_offset ]
    if close_caps:
        close = lambda vs: np.ones_like(vs) * vs.mean(axis=0, keepdims=True)
        final_vert_parts = [close(a_offset)] + final_vert_parts + [close(b_offset)]
    final_verts = np.concatenate(final_vert_parts, axis=0)
    final_edges, final_faces = compute_cylinder_topology(len(final_vert_parts), len(verts), cyclic=True, h_neighbors=edges)
    final = blender_mesh_from_pydata(final_verts, final_edges.reshape(-1, 2), final_faces)
    def select_loop(li):
        in_loop = lambda vi: (li * len(verts) <= vi) and (vi < (li + 1) * len(verts))
        for vi, v in enumerate(final.data.vertices):
            v.select = in_loop(vi)
        for e in final.data.edges:
            e.select = in_loop(e.vertices[0]) and in_loop(e.vertices[1])
    with butil.ViewportMode(final, 'EDIT'):
        if close_caps:
            select_loop(0)
            bpy.ops.mesh.mark_sharp()
            select_loop(len(final_vert_parts) - 1)
            bpy.ops.mesh.mark_sharp()
        center_part_idx = next(i for i, v in enumerate(final_vert_parts) if v is verts)
        select_loop(center_part_idx)   
        bpy.ops.mesh.bevel(offset_type='PERCENT', offset_pct=98, segments=segments)
        bpy.ops.mesh.select_all(action='SELECT')
        bpy.ops.mesh.quads_convert_to_tris(quad_method='BEAUTY', ngon_method='BEAUTY')
        bpy.ops.mesh.normals_make_consistent(inside=False)
    return final