Retrieve predictions for 1+ stops or 1+ vehicles.
        
        Arguments:
            `stpid`: unique ID number for bus stop (single or comma-seperated list or iterable)
            or
            `vid`: vehicle ID number (single or comma-seperated list or iterable)
            or
            `stpid` and `rt`
            
            `maxpredictions` (optional): limit number of predictions returned

        Response:
            `prd`: (prediction container) contains list of
                `tmstp`: when prediction was generated
                `typ`: prediction type ('A' = arrival, 'D' = departure)
                `stpid`: stop ID for prediction
                `stpnm`: stop name for prediction
                `vid`: vehicle ID for prediction
                `dstp`: vehicle distance to stop (feet)
                `rt`: bus route
                `des`: bus destination
                `prdtm`: ETA/ETD
                `dly`: True if bus delayed
                `tablockid`, `tatripid`, `zone`: internal, see `self.vehicles`
                
        http://realtime.portauthority.org/bustime/apidoc/v1/main.jsp?section=predictions.jsp

def predictions(self, stpid="", rt="", vid="", maxpredictions=""):
        """
        Retrieve predictions for 1+ stops or 1+ vehicles.
        
        Arguments:
            `stpid`: unique ID number for bus stop (single or comma-seperated list or iterable)
            or
            `vid`: vehicle ID number (single or comma-seperated list or iterable)
            or
            `stpid` and `rt`
            
            `maxpredictions` (optional): limit number of predictions returned

        Response:
            `prd`: (prediction container) contains list of
                `tmstp`: when prediction was generated
                `typ`: prediction type ('A' = arrival, 'D' = departure)
                `stpid`: stop ID for prediction
                `stpnm`: stop name for prediction
                `vid`: vehicle ID for prediction
                `dstp`: vehicle distance to stop (feet)
                `rt`: bus route
                `des`: bus destination
                `prdtm`: ETA/ETD
                `dly`: True if bus delayed
                `tablockid`, `tatripid`, `zone`: internal, see `self.vehicles`
                
        http://realtime.portauthority.org/bustime/apidoc/v1/main.jsp?section=predictions.jsp    
        """
        
        if (stpid and vid) or (rt and vid):
            raise ValueError("These parameters cannot be specified simultaneously.")
        elif not (stpid or rt or vid):
            raise ValueError("You must specify a parameter.")   
        
        if listlike(stpid): stpid = ",".join(stpid)
        if listlike(rt): rt = ",".join(rt)
        if listlike(vid): vid = ",".join(vid)
                 
        if stpid or (rt and stpid) or vid:
            url = self.endpoint('PREDICTION', dict(rt=rt, stpid=stpid, vid=vid, top=maxpredictions))
            return self.response(url)