'Determines if this coordinate frame can be transformed to another
given frame.
Parameters
new_frame : class or frame object
The proposed frame to transform into.
Returns
transformable : bool or str
`True` if this can be transformed to ``new_frame``, `False` if
not, or the string \'same\' if ``new_frame`` is the same system as
this object but no transformation is defined.
Notes
A return value of \'same\' means the transformation will work, but it will
just give back a copy of this object.  The intended usage is::
if coord.is_transformable_to(some_unknown_frame):
coord2 = coord.transform_to(some_unknown_frame)
This will work even if ``some_unknown_frame``  turns out to be the same
frame class as ``coord``.  This is intended for cases where the frame
is the same regardless of the frame attributes (e.g. ICRS), but be
aware that it *might* also indicate that someone forgot to define the
transformation between two objects of the same frame class but with
different attributes.'

def is_transformable_to(self, new_frame):

    new_frame_cls = (new_frame if inspect.isclass(new_frame) else new_frame.__class__)
    trans = frame_transform_graph.get_transform(self.__class__, new_frame_cls)
    if (trans is None):
        if (new_frame_cls is self.__class__):
            return u'same'
        else:
            return False
    else:
        return True
