Returns a set of geographic points that make up a particular routing
        ('pattern', in API terminology) for a bus route. A bus route can have
        more than one routing.
        
        Arguments: either
            `rt`: route designator
            or
            `pid`: comma-separated list or an iterable of pattern IDs (max 10)
            
        Response:
            `ptr`: (pattern container) contains list of
                `pid`: pattern ID
                `ln`: length of pattern in feet
                `rtdir`: route direction (see `self.route_directions`)
                
                `pt`: geo points, contains list of
                    `seq`: position of point in pattern
                    `typ`: 'S' = stop, 'W' = waypoint

                    -> if `typ` is a stop, will contain:
                    `stpid`, `stpnm`, `pdist` (see `self.stops`)
                    
                    `lat`, `lon`: position of point
                    
        http://realtime.portauthority.org/bustime/apidoc/v1/main.jsp?section=patterns.jsp

def geopatterns(self, rt=None, pid=None):
        """
        Returns a set of geographic points that make up a particular routing
        ('pattern', in API terminology) for a bus route. A bus route can have
        more than one routing.
        
        Arguments: either
            `rt`: route designator
            or
            `pid`: comma-separated list or an iterable of pattern IDs (max 10)
            
        Response:
            `ptr`: (pattern container) contains list of
                `pid`: pattern ID
                `ln`: length of pattern in feet
                `rtdir`: route direction (see `self.route_directions`)
                
                `pt`: geo points, contains list of
                    `seq`: position of point in pattern
                    `typ`: 'S' = stop, 'W' = waypoint

                    -> if `typ` is a stop, will contain:
                    `stpid`, `stpnm`, `pdist` (see `self.stops`)
                    
                    `lat`, `lon`: position of point
                    
        http://realtime.portauthority.org/bustime/apidoc/v1/main.jsp?section=patterns.jsp   
        """
        if rt and pid:
            raise ValueError("The `rt` and `pid` parameters cannot be specified simultaneously.")
        if not (rt or pid):
            ValueError("You must specify either the `rt` or `pid` parameter.")

        if listlike(pid): pid = ",".join(pid)
        
        url = self.endpoint("R_GEO", dict(rt=rt, pid=pid))            
        
        return self._lru_geopatterns(url)