<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def measurement_key( val: Any, default: Any = RaiseTypeErrorIfNotProvided):
 """Get the measurement key for the given value. Args: val: The value which has the measurement key.. default: Determines the fallback behavior when `val` doesn't have a measurement key. If `default` is not set, a TypeError is raised. If default is set to a value, that value is returned if the value does not have `_measurement_key_`. Returns: If `val` has a `_measurement_key_` method and its result is not `NotImplemented`, that result is returned. Otherwise, if a default value was specified, the default value is returned. Raises: TypeError: `val` doesn't have a _measurement_key_ method (or that method returned NotImplemented) and also no default value was specified. """

    getter = getattr(val, '_measurement_key_', None)
    result = NotImplemented if getter is None else getter()
    if result is not NotImplemented:
        return result

    if default is not RaiseTypeErrorIfNotProvided:
        return default

    if getter is None:
        raise TypeError(
                "object of type '{}' has no _measurement_key_ method."
                    .format(type(val)))

    raise TypeError("object of type '{}' does have a _measurement_key_ method, "
                    "but it returned NotImplemented.".format(type(val)))