'Generates and returns the `CompositeTransform` for a transformation
between two coordinate systems.
Parameters
fromsys : class
The coordinate frame class to start from.
tosys : class
The coordinate frame class to transform into.
Returns
trans : `CompositeTransform` or `None`
If there is a path from ``fromsys`` to ``tosys``, this is a
transform object for that path.   If no path could be found, this is
`None`.
Notes
This function always returns a `CompositeTransform`, because
`CompositeTransform` is slightly more adaptable in the way it can be
called than other transform classes. Specifically, it takes care of
intermediate steps of transformations in a way that is consistent with
1-hop transformations.'

def get_transform(self, fromsys, tosys):

    if (not inspect.isclass(fromsys)):
        raise TypeError(u'fromsys    is    not    a    class')
    if (not inspect.isclass(tosys)):
        raise TypeError(u'tosys    is    not    a    class')
    (path, distance) = self.find_shortest_path(fromsys, tosys)
    if (path is None):
        return None
    transforms = []
    currsys = fromsys
    for p in path[1:]:
        transforms.append(self._graph[currsys][p])
        currsys = p
    fttuple = (fromsys, tosys)
    if (fttuple not in self._composite_cache):
        comptrans = CompositeTransform(transforms, fromsys, tosys, register_graph=False)
        self._composite_cache[fttuple] = comptrans
    return self._composite_cache[fttuple]
