def METHOD_NAME(nw: NodeWrangler, strength, scale, radius, metric_fn):
    geometry = nw.new_node(Nodes.GroupInput, expose_input=[('NodeSocketGeometry', 'Geometry', None)])
    x, y, z = nw.separate(nw.new_node(Nodes.InputPosition))
    selection = nw.compare('LESS_THAN', nw.scalar_add(nw.power(x, 2), nw.power(y, 2)), 1)
    offset = nw.scalar_multiply(nw.new_node(Nodes.Clamp, [nw.new_node(Nodes.NoiseTexture, input_kwargs={
        'Vector': nw.new_node(Nodes.InputPosition),
        'Scale': scale}), .3, .7]), strength)
    offset = nw.scalar_multiply(offset, nw.build_float_curve(x, [(-radius, 1), (radius, 0)]))
    anchors = (-1, 0), (-.5, 0), (0, -1), (.5, 0), (1, 0)
    offset = nw.scalar_multiply(offset, nw.build_float_curve(surface.eval_argument(nw, metric_fn), anchors))
    geometry = nw.new_node(Nodes.SetPosition, [geometry, selection, None, nw.combine(0, 0, offset)])
    nw.new_node(Nodes.GroupOutput, input_kwargs={'Geometry': geometry})