def search_gpsalbum(g, gpsrange, dataset):
    """search the image with the specific gps range from the albumgraph.
    Args:
        g - graph from gremlin server
        gpsrange - gps range user want [[latitude_lb,latitude_ub],[longitude_lb,longitude_ub]]
        dataset- 'l' for large dataset, 's' for small dataset
    Returns:
        gps_album - an album of images with same tag.
    """
    print "searching for: ", gpsrange
    gps_album = {}
    image_id = g.V().has('latitude', P.inside(
        gpsrange[0][0], gpsrange[0][1])).has(
            'longitude', P.inside(gpsrange[1][0],
                                  gpsrange[1][1])).values('image_id').toList()
    image_path = g.V().has('latitude', P.inside(
        gpsrange[0][0], gpsrange[0][1])).has(
            'longitude',
            P.inside(gpsrange[1][0],
                     gpsrange[1][1])).values('image_path').toList()
    for i in range(len(image_id)):
        if image_id[i] not in gps_album:
            gps_album[image_id[i]] = image_path[i]
            print image_id[i], image_path[i]
    return gps_album
def search_timealbum(g, timerange, dataset):
    """search the image with the specific timerange from the albumgraph.
    Args:
        g - graph from gremlin server
        time - time user want ('2017','2017:03','2017:03:31')
        dataset- 'l' for large dataset, 's' for small dataset
    Returns:
        time_album - an album of images with same tag.
    """
    print "searching for: ", timerange
    time_album = {}
    image_id = g.V().has('datetime',
                         P.inside(timerange[0],
                                  timerange[1])).values('image_id').toList()
    image_path = g.V().has('datetime', P.inside(
        timerange[0], timerange[1])).values('image_path').toList()
    for i in range(len(image_id)):
        if image_id[i] not in time_album:
            time_album[image_id[i]] = image_path[i]
            print image_id[i], image_path[i]
    return time_album
def entities_timeline(g, timerange, dataset):
    result = []

    person_count = g.V().has('face_id', P.gte(0)).order().by('face_id', Order.desc)\
        .values('face_id').limit(1).toList()[0]+1
    print person_count
    for i in range(person_count):
        image_id = g.V().has('face_id', i).out().hasLabel('image')\
            .has('datetime', P.inside(timerange[0], timerange[1])).order().by('datetime', Order.asc)\
            .dedup().valueMap().toList()
        if len(image_id) != 0:
            result.append(image_id)
    print 'sad', result
    tags = g.V().hasLabel('tag').values('tag_id').toList()
    for tag in tags:
        print tag
        image_id = g.V().has('tag_id', tag).out().hasLabel('bbox').out().hasLabel('image')\
            .has('datetime', P.inside(timerange[0], timerange[1])).order().by('datetime', Order.asc)\
            .dedup().valueMap().toList()
        if len(image_id) != 0:
            result.append(image_id)
    print 'sadd', {'nodes': result}
    return result