def METHOD_NAME(obj, angles):
    f_scale = make_circular_interp(.3, 1., 5)
    f_rotation = make_circular_interp(0, np.pi / 3, 10)
    f_power = make_circular_interp(1., 1.6, 5)
    x, y, z = read_co(obj).T
    a = np.array([angles[_] for _ in range(len(x))]) + np.pi
    z += f_scale(a) * (x * x + y * y) ** f_power(a)
    rotation = f_rotation(a)
    c, s = np.cos(rotation), np.sin(rotation)
    co = np.stack([c * x - s * z, c * y - s * z, c * z + s * np.sqrt(x * x + y * y)], -1)
    write_co(obj, co)
    with butil.ViewportMode(obj, 'EDIT'):
        bm = bmesh.from_edit_mesh(obj.data)
        geom = []
        for e in bm.edges:
            if e.calc_length() > .04:
                geom.append(e)
        bmesh.ops.delete(bm, geom=geom, context='EDGES')
        bmesh.update_edit_mesh(obj.data)
    return obj