def make_shorthand(intrinsic_dict):
    """
    Converts a given intrinsics dictionary into a short-hand notation that Fn::Sub can use. Only Ref and Fn::GetAtt
    support shorthands.
    Ex:
     {"Ref": "foo"} => ${foo}
     {"Fn::GetAtt": ["bar", "Arn"]} => ${bar.Arn}

    This method assumes that the input is a valid intrinsic function dictionary. It does no validity on the input.

    :param dict intrinsic_dict: Input dictionary which is assumed to be a valid intrinsic function dictionary
    :returns string: String representing the shorthand notation
    :raises NotImplementedError: For intrinsic functions that don't support shorthands.
    """
    if 'Ref' in intrinsic_dict:
        return '${%s}' % intrinsic_dict['Ref']
    elif 'Fn::GetAtt' in intrinsic_dict:
        return '${%s}' % '.'.join(intrinsic_dict['Fn::GetAtt'])
    else:
        raise NotImplementedError(
            'Shorthanding is only supported for Ref and Fn::GetAtt')
