def getRadius(analyzer, lat1, lon1, rad):
    """
    sacarle accidente por acc 
    """
    lista=lt.newList()
    actualizar(lista)
    iterador= it.newIterator(analyzer['accidents'])
    radius = rad # in miles
    cuantos=0
    while(it.hasNext(iterador)):
        info = it.next(iterador)
        lat2 = info['Start_Lat']
        lon2 = info['Start_Lng']
        date = info['Start_Time']
        accidentDate = datetime.datetime.strptime(date, '%Y-%m-%d %H:%M:%S')
        a = haversine(lon1, lat1, float(lon2), float(lat2))
        if a <= radius:
            cuantos += 1 
            dia= accidentDate.date().weekday()
            camb = lt.getElement(lista, dia)
            camb['veces']+=1
    veces=0
    mayor=''
    for i in range(7):
        el=lt.getElement(lista, i)
        if(el['veces']> veces):
            veces = el['veces']
            mayor = el['dia']

    print("los accidentes en ese radio fueron : "+ str(cuantos)+" , el dia de la semana con mayor \n accidentes en ese radio es: "+ str(mayor)+", con: "+ str(veces))
def cont_accidents(lst):
    iterator=it.newIterator(lst)
    sum_accidents=0
    while it.hasNext(iterator):
        date=it.next(iterator)
        sum_accidents=lt.size(date["lstaccidents"])+ sum_accidents
    return sum_accidents
def req21(Taxis, date1, date2, num):
    num = int(num)
    dates = om.values(Taxis["dateIndex"], date1, date2)
    contador = 1
    res = lt.newList('SINGLELINKED', compareDates)
    while contador <= num:
        mayor = 0
        pos = 0
        iter = 0
        iterator = it.newIterator(dates)
        while it.hasNext(iterator):
            iter += 1
            element = it.next(iterator)
            pq = element["maxpq"]
            x = imaxpq.max(pq)
            if x != None:
                if x > mayor:
                    mayor = x
                    pos = iter
        pq = lt.getElement(dates, pos)
        pq = pq["maxpq"]
        y = imaxpq.delMax(pq)
        lt.addLast(res, y)
        contador += 1
    return res
Пример #4
0
def recorridos(lista, mapa, rangoI, rangoF):
    dicc = {}
    iterador = it.newIterator(lista)
    while it.hasNext(iterador):
        fila = it.next(iterador)
        edades = m.get(mapa, fila)
        edades2 = en.getValue(edades)
        iterador2 = it.newIterator(edades2)
        while it.hasNext(iterador2):
            eda = int(it.next(iterador2))
            if eda >= rangoI and eda <= rangoF:
                if fila not in dicc:
                    dicc[fila] = 1
                else:
                    dicc[fila] += 1
    return dicc
Пример #5
0
def requerimiento_7(citibike, rangoI, rangoF):
    dicc = {}
    lista = m.keySet(citibike['suscripcion'])
    iterador = it.newIterator(lista)
    while it.hasNext(iterador):
        info = it.next(iterador)
        if info == "Customer":
            info2 = m.get(citibike['suscripcion'], info)
            listaX = en.getValue(info2)
            for i in range(0, len(listaX) - 1):
                if int(listaX[i][0]) <= int(rangoF) and int(
                        listaX[i][0]) >= int(rangoI):
                    if listaX[i][1] + "-" + listaX[i][2] not in dicc:
                        dicc[listaX[i][1] + "-" + listaX[i][2]] = 1
                    else:
                        dicc[listaX[i][1] + "-" + listaX[i][2]] += 1
    x = (max(dicc.values()))
    for i in dicc:
        if x == float(dicc[i]):
            va = i
    print("Las estaciones adyacentes más utilizadas son: " + str(va))
    print("Con un total de viajes de: " + str(x))
    print("")
    print("Las estaciones que cumplen las condiciones son las siguientes: ")
    for i in dicc:
        llave = i
        valor = dicc[i]
        print(str(i) + ": " + str(dicc[i]))
Пример #6
0
def top3lessUsed(analyzer):
    totaltree = om.newMap(omaptype="RBT", comparefunction=compareIds)
    pqiterator = it.newIterator(vertexNames(analyzer))
    while it.hasNext(pqiterator):
        vert = int(it.next(pqiterator))
        salidas = gr.outdegree(analyzer["graph"], str(vert))
        destinos = gr.indegree(analyzer["graph"], str(vert))
        usototal = salidas + destinos
        if not om.contains(totaltree, usototal):
            om.put(totaltree, usototal, str(vert))
        else:
            A = om.get(totaltree, usototal)
            B = me.getValue(A)
            om.put(totaltree, usototal, str(B)+","+str(vert))
    estaciones = lt.newList(datastructure="ARRAY_LIST")
    while lt.size(estaciones) < 3:
        val = om.get(totaltree, om.minKey(totaltree))
        val1 = me.getValue(val)
        menortotal = val1.split(",")
        for i in menortotal:
            if lt.size(estaciones) < 3:
                K = m.get(analyzer["nameIndex"], i)
                L = me.getValue(K)
                lt.addLast(estaciones, L)
        om.deleteMin(totaltree)
    return estaciones
Пример #7
0
def requerimiento_3(citibike):
    lista = gr.vertices(citibike['grafo'])
    dicc1 = {}
    dicc2 = {}
    dicc3 = {}
    iterador = it.newIterator(lista)
    while it.hasNext(iterador):
        fila = it.next(iterador)
        out = gr.outdegree(citibike['grafo'], fila)
        ins = gr.indegree(citibike['grafo'], fila)
        dicc1[fila] = out
        dicc2[fila] = ins
        dicc3[fila] = out + ins
    salida = mayores(dicc1)
    llegada = mayores(dicc2)
    ambos = menores(dicc3)
    nombres_salida = encontrar(dicc1, salida)
    nombres_llegada = encontrar(dicc2, llegada)
    nombres_ambos = encontrar(dicc3, ambos)
    print("Las 3 mejores estaciones de salida son: ")
    nombresI(nombres_salida, citibike)
    print("\nLas 3 mejores estaciones de llegada son: ")
    nombresF(nombres_llegada, citibike)
    print("\nLas 3 peores estaciones de llegada/salida son: ")
    for i in range(0, 3):
        if mp.contains(citibike["namesI"], nombres_ambos[i]):
            z = m.get(citibike["namesI"], nombres_ambos[i])
            nombreX = en.getValue(z)
            nombreI = nombreX["nombre"]
            print(nombreI)
        else:
            z = m.get(citibike["namesF"], nombres_ambos[i])
            nombreX = en.getValue(z)
            nombreI = nombreX["nombre"]
            print(nombreI)
Пример #8
0
def R4(tag,pais,num,catalog):
    delta_time = -1.0
    delta_memory = -1.0

    tracemalloc.start()
    start_time = getTime()
    start_memory = getMemory()

    l1=model.lportyp(tag,pais,catalog['videos'])
    if l1==None:
        return 'No hay información para el país y/o tag ingresados.'
    else:
        orde=model.sortVideos(l1,lt.size(l1),model.cmpVideosbyLikes)[1]
        final=model.sacar(num,orde)
        if final==None:
            return 'El número ingresado excede la cantidad de videos que cumplen con los requisitos.'
        else:
            c=''
            i=it.newIterator(final)
            n=0
            while it.hasNext(i):
                n+=1
                v=it.next(i)
                c=c+'\nPuesto '+str(n)+'\ntitle: '+v['title']+'; channel_title: '+v['channel_title']+'; publish_time: '+str(v['publish_time'])+'; views: '+str(v['views'])+'; likes: '+str(v['likes'])+'; dislikes: '+str(v['dislikes'])+'; tags: '+v['tags']+'\n'
            stop_memory = getMemory()
            stop_time = getTime()
            tracemalloc.stop()

            delta_time = stop_time - start_time
            delta_memory = deltaMemory(start_memory, stop_memory)

            return ('Información de los '+str(num)+' videos con más views en '+pais+' con el tag de '+tag+':\n'+c,delta_time, delta_memory)
Пример #9
0
def R1(categoria,pais,num,catalog):
    delta_time = -1.0
    delta_memory = -1.0

    tracemalloc.start()
    start_time = getTime()
    start_memory = getMemory()

    ID=model.categoriaporID(categoria,catalog)
    if ID==None:
        return 'Categoría no válida'
    else:
        l=model.lporcyp(ID,pais,catalog['videos'])
        if l==None:
            return 'País no válido.'
        else:
            l2=model.sortVideos(l,lt.size(l),model.cmpVideosbyViews)[1]
            if num>lt.size(l2):
                return 'El número ingresado excede la cantidad de videos que cumplen con los requisitos. Intente con un número igual o menor a '+str(lt.size(l))
            else:
                n=0
                c=''
                final=lt.subList(l2,1,num)
                i=it.newIterator(final)
                while it.hasNext(i):
                    n+=1
                    vid=it.next(i)
                    c=c+'\nPuesto '+str(n)+'\ntrending_date: '+str(vid['trending_date'])+'; title: '+vid['title']+'; channel_title: '+vid['channel_title']+'; publish_time: '+vid['publish_time']+'; views: '+vid['views']+'; likes: '+vid['likes']+ '; dislikes: '+vid['dislikes']+'\n'
                stop_memory = getMemory()
                stop_time = getTime()
                tracemalloc.stop()

                delta_time = stop_time - start_time
                delta_memory = deltaMemory(start_memory, stop_memory)
                return ('Información de los '+str(num)+' videos con más views en '+pais+' para la categoría de '+categoria+':\n'+c,delta_time, delta_memory)
def recorrido_resistencia(analyzer, initStation, Tmax):
    newGraph = bfs.BreadhtFisrtSearch(analyzer["graph"], initStation, Tmax)
    #archivo=open("perro.txt","w")
    #archivo.write(str(newGraph))
    #print(newGraph["visited"]["table"])
    keys = m.keySet(newGraph["visited"])
    iterator = it.newIterator(keys)
    rutas = []
    while it.hasNext(iterator):
        station = it.next(iterator)
        #for el in newGraph["visited"]["table"]["elements"]:
        #if el["key"]!=None and el["value"]["final"]==True:
        if me.getValue(m.get(newGraph["visited"], station))["final"] == True:
            ruta = []
            path = bfs.pathTo(newGraph, station)
            i = 0
            while not st.isEmpty(path):
                entry = st.pop(path)
                if entry == initStation:
                    ruta = {"Estaciones": [entry], "Duraciones": []}
                else:
                    ruta["Estaciones"].append(entry)
                    edge = gr.getEdge(analyzer["graph"],
                                      ruta["Estaciones"][i - 1], entry)
                    duration = edge['weight'] / 60
                    ruta["Duraciones"].append(duration)
                i += 1
            rutas.append(ruta)
    return rutas
def getClosestStation(analyzer, coords):
    """
    Retorna el ID de la estacion mas cercana a las coordenadas dadas
    Args:
        analyzer: Estructura de datos principal
        coords: Coordenadas de donde se quiere hallar la estacion mas cercana
    """

    map = analyzer["stationinfo"]
    stations = m.keySet(
        map)  #Obtiene los id de todas las estaciones en el analizador
    ite = it.newIterator(stations)

    closestDist = -1
    closestID = ""

    while it.hasNext(ite):

        id = it.next(ite)
        station = me.getValue(m.get(map, id))
        dist = getDistance(station["Coordinates"], coords)
        if closestDist == -1:
            closestDist = dist
            closestID = station["StationID"]
        else:
            if dist < closestDist:
                closestDist = dist
                closestID = station["StationID"]

    return closestID
def stationsUsage(analyzer):
    indegreePQ = pq.newMinPQ(cmpfunction=compareDegreeMax)
    outdegreePQ = pq.newMinPQ(cmpfunction=compareDegreeMax)
    lessUsedPQ = pq.newMinPQ(cmpfunction=compareDegreeMin)
    vortexLst = gr.vertices(analyzer["graph"])
    ite = it.newIterator(vortexLst)

    while it.hasNext(ite):
        station = it.next(ite)
        StationName = getName(analyzer["stationinfo"], station)
        #Se obtienen los valores de las estaciones que entran, que salen y su suma

        indegree = gr.indegree(analyzer["graph"], station)
        outdegree = gr.outdegree2(analyzer["graph"], station)
        usage = outdegree + indegree
        #Se crean entradas para organizar en el PQ

        indegreeEntry = {"key": indegree, "station": StationName}
        outdegreeEntry = {"key": outdegree, "station": StationName}
        usageEntry = {"key": usage, "station": StationName}

        #Se inserta cada entrada en los PQ correspondientes
        pq.insert(indegreePQ, indegreeEntry)
        pq.insert(lessUsedPQ, usageEntry)
        pq.insert(outdegreePQ, outdegreeEntry)

    return {"In": indegreePQ, "Out": outdegreePQ, "Usage": lessUsedPQ}
def parteC(analyzer, communityAreaOrigin, communityAreaDestination, rangeTime):
    answer = {"bestTime": "No identificada", "route": None, "duration": inf}
    graph = analyzer['AreaGraph']
    rangeTime2 = rangeTime.split("-")
    ls = aboutQuarterHour(rangeTime2[0])
    totalq = allQuartersInRange(rangeTime)
    totalq.append(ls)
    endVertexes = []
    vertexes = gr.vertices(graph)
    iterator = it.newIterator(vertexes)
    while it.hasNext(iterator):
        vertex2 = it.next(iterator)
        vertex2 = vertex2.split("-")
        if communityAreaDestination == vertex2[0]:
            endVertexes.append("-".join(vertex2))
    for i in totalq:
        initialVertex = communityAreaOrigin + "-" + i
        if gr.containsVertex(graph, initialVertex):
            print("A")
            search = djk.Dijkstra(graph, initialVertex)
            print("B")
            for k in endVertexes:
                if djk.hasPathTo(search, k):
                    duration = str(djk.distTo(search, k))
                    route = djk.pathTo(search, k)
                    if float(duration) < float(answer["duration"]):
                        answer["duration"] = duration
                        answer["route"] = route
                        answer["bestTime"] = i
    return answer
Пример #14
0
def getAccidentsByRangeHour(analyzer, initialDate, fecha_final):
    lst = om.values(analyzer['hourIndex'], initialDate, fecha_final)
    lstiterator = it.newIterator(lst)
    tot_accidents = 0
    mapa = om.newMap(comparefunction=compareIds)
    mapa2 = om.newMap(comparefunction=compareIds)
    while (it.hasNext(lstiterator)):
        lstdate = it.next(lstiterator)
        accidentes_max = 0
        i = 1
        while i <= 4:
            num = getaccidentesByRangeCodeHour(analyzer, lstdate, str(i))
            tot_accidents += num
            accidentes_max += num
            i += 1
            if om.contains(mapa2, i):
                om.put(mapa2, i, int(om.get(mapa2, i)['value']) + num)
            else:
                om.put(mapa2, i, num)
        om.put(mapa, accidentes_max, str(lstdate))
    resu = om.newMap(comparefunction=compareIds)
    max_sev = 0
    sev = 0
    for i in range(1, 6):
        if om.contains(mapa2, i):
            val = om.get(mapa2, i)
            if val['value'] > max_sev:
                max_sev = val['value']
                sev = i
            om.put(resu, i, val['value'])
        else:
            om.put(resu, i, 0)
    om.put(resu, sev, max_sev)

    return tot_accidents, om.get(mapa, om.maxKey(mapa)), resu
Пример #15
0
def dfsVertex(graph, search, vertex):
    """
    Genera un recorrido DFS sobre el grafo graph
    Args:
        graph:  El grafo a recorrer
        source: Vertice de inicio del recorrido.
    Returns:
        Una estructura para determinar los vertices
        conectados a source
    Raises:
        Exception
    """
    try:
        queue.enqueue(search['pre'], vertex)
        map.put(search['marked'], vertex, True)
        lstadjacents = g.adjacents(graph, vertex)
        adjiterator = it.newIterator(lstadjacents)
        while it.hasNext(adjiterator):
            adjvert = it.next(adjiterator)
            if not map.contains(search['marked'], adjvert):
                dfsVertex(
                    graph,
                    search,
                    adjvert,
                )
        queue.enqueue(search['post'], vertex)
        stack.push(search['reversepost'], vertex)
        return search

    except Exception as exp:
        error.reraise(exp, 'dfo:dfsVertex')
def bfsVertex(search, graph, source):
    """
    Funcion auxiliar para calcular un recorrido BFS
    Args:
        search: Estructura para almacenar el recorrido
        vertex: Vertice de inicio del recorrido.
    Returns:
        Una estructura para determinar los vertices
        conectados a source
    Raises:
        Exception
    """
    try:
        adjsqueue = queue.newQueue()
        queue.enqueue(adjsqueue, source)
        while not (queue.isEmpty(adjsqueue)):
            vertex = queue.dequeue(adjsqueue)
            visited_v = map.get(search['visited'], vertex)['value']
            adjslst = g.adjacents(graph, vertex)
            adjslstiter = it.newIterator(adjslst)
            while (it.hasNext(adjslstiter)):
                w = it.next(adjslstiter)
                visited_w = map.get(search['visited'], w)
                if visited_w is None:
                    dist_to_w = visited_v['distTo'] + 1
                    visited_w = {
                        'marked': True,
                        'edgeTo': vertex,
                        "distTo": dist_to_w
                    }
                    map.put(search['visited'], w, visited_w)
                    queue.enqueue(adjsqueue, w)
        return search
    except Exception as exp:
        error.reraise(exp, 'bfs:bfsVertex')
Пример #17
0
def R4_EstadoMasAcc(analyzer, fechaIni, fechaFin):
    lsta = om.values(analyzer["dateIndex"], fechaIni, fechaFin)
    ite = it.newIterator(lsta)
    entreFech = 0
    while it.hasNext(ite):
        lt_next = it.next(ite)["lstaccidents"]
        entreFech += lt.size(lt_next)
    # estado con más accidentes
    estadoMas = None
    estados = travel(lsta, ["State"])
    contEst = {}
    for i in estados:
        if i in contEst:
            contEst[i] += 1
        else:
            contEst[i] = 1
    mayorV = max(contEst.keys)
    estadoMas = mayorV.getValue
    # fecha con más accidentes
    fechaMas = None
    fech = travel(lsta, ["Start_Time"])
    contFech = {}
    for i in fech:
        if i in contFech:
            contFech[i] += 1
        else:
            contFech[i] = 1
    mayorValue = max(contFech.keys)
    fechaMas = mayorValue.getValue

    return (estadoMas, fechaMas)
Пример #18
0
def travel_map(Map, tree=False):
    lst = om.keySet(Map) if tree else m.keySet(Map)
    iter = it.newIterator(lst)
    while it.hasNext(iter):
        key = it.next(iter)
        value = om.get(Map, key) if tree else m.get(Map, key)
        yield key, (None if value is None else value["value"])
Пример #19
0
def recomendarRutas(analyzer, agerange):
    ageGraph = crearGrafoEdad(analyzer, agerange)
    mayorsalida = majorStart(ageGraph["grafo"])
    mayordestino = majorDestiny(ageGraph["grafo"])
    if mayorsalida == None or mayordestino == None:
        return "No existen rutas para este rango de edad"
    else:
        pesos = lt.newList(datastructure="ARRAY_LIST")
        pathiterator = it.newIterator(ageGraph["lista"])
        while it.hasNext(pathiterator):
            viaje = it.next(pathiterator)
            if viaje["start station id"] == mayorsalida and viaje["end station id"] == mayordestino:
                lt.addLast(pesos, viaje["tripduration"])
        if lt.isEmpty(pesos):
            econ = None
        else:
            mrg.mergesort(pesos, lessfunction)
            econ = lt.firstElement(pesos)
        sal = m.get(analyzer["nameIndex"], mayorsalida)
        salnombre = me.getValue(sal)
        dest = m.get(analyzer["nameIndex"], mayordestino)
        destnombre = me.getValue(dest)
        W = {"salida":salnombre,
             "destino":destnombre,
             "tiempo":econ}
        return W
Пример #20
0
def printListContent(lst):
    """
    Imprime el contenido de una lista
    """
    iterator = it.newIterator(lst)
    while it.hasNext(iterator):
        print("- " + it.next(iterator))
Пример #21
0
def Repeticiones(citibike, rangoI, rangoF):
    stationI = citibike['StationI']
    stationF = citibike['StationF']
    edadI = mp.keySet(stationI)
    edadF = mp.keySet(stationF)
    infoI = recorridos(edadI, stationI, rangoI, rangoF)
    infoF = recorridos(edadF, stationF, rangoI, rangoF)
    sI = maximoDicc(infoI)
    sF = maximoDicc(infoF)
    print(
        "La estación de la que más personas salen, con ese rango de edad es: "
        + str(sI))
    print(
        "La estación de la que más personas llegan, con ese rango de edad es: "
        + str(sF))
    camino = bfs.BreadhtFisrtSearch(citibike['graph'], sI)
    caminofinal = bfs.hasPathTo(camino, sF)
    print("Su camino es el siguiente: ")
    if caminofinal == True:
        ultimo = bfs.pathTo(camino, sF)
        iterador = it.newIterator(ultimo)
        while it.hasNext(iterador):
            fila = it.next(iterador)
            print(fila)
    else:
        print("No hay camino para ese rango de edades")
Пример #22
0
def findStationsInRange(citibike,ageRange,lst1,lst2):
    """
    Añade a las listas pasadas por parámetro las estaciones que se encuentren dentro del rango ingresado
    """
    
    iterator = it.newIterator(citibike['stations'])  #Lugar donde se encuentra la información de todas las estaicones
    while it.hasNext(iterator):
        info = it.next(iterator)
        ocurredDate = info['starttime']
        year=int(ocurredDate[:4])
        birthYear = int(info['birth year'])
        if ageRange[0] == "0":
            initRange = int(ageRange[0])
            finalRange = int(ageRange[2]+ageRange[3])
        elif ageRange == "60+" or ageRange=="60 +":
            initRange = 60
            finalRange = 120
        else: 
            initRange = int(ageRange[0]+ageRange[1])
            finalRange = int(ageRange[3]+ageRange[4])
        if year - birthYear >= initRange and year - birthYear <= finalRange:
            start = info['start station id']
            end = info['end station id']
            lt.addLast(lst1,start)  #Se añade a la lista de salidas
            lt.addLast(lst2,end) #Se añade a la lista de llegadas
Пример #23
0
def requerimiento_6(citibike, latitudI, longitudI, latitudF, longitudF):
    lista = []
    DistanciaI = NearestStation(citibike, latitudI, longitudI)
    DistanciaF = NearestStation(citibike, latitudF, longitudF)
    stationI = minimoDicc(DistanciaI)
    stationF = minimoDicc(DistanciaF)
    camino = bfs.BreadhtFisrtSearch(citibike['graph'], stationI)
    caminofinal = bfs.hasPathTo(camino, stationF)
    if caminofinal == True:
        ultimo = bfs.pathTo(camino, stationF)
        iterador = it.newIterator(ultimo)
        while it.hasNext(iterador):
            fila = it.next(iterador)
            lista.append(fila)
    else:
        print("No hay camino entre las dos estaciones")
    tiempo = 0
    for i in range(0, len(lista) - 1):
        arco = gr.getEdge(citibike['graph'], lista[i],
                          lista[i + 1])["weight"]["duracion"]
        tiempo += arco
    print("La estación incial más cercana es: " + stationI)
    print("La estación final más cercana es: " + stationF)
    print("La duración del viaje es de: " + str(tiempo))
    print("La ruta es: " + str(lista))
def getEdge(graph, vertexa, vertexb):
    """
    Retorna el arco asociado a los vertices vertexa ---- vertexb
    Args:
        graph: El grafo sobre el que se ejecuta la operacion
        vertexa: Vertice de inicio
        vertexb: Vertice destino
    Returns:
        El arco que une los verices vertexa y vertexb
    Raises:
        Exception
    """
    try:
        element = map.get(graph['vertices'], vertexa)
        lst = element['value']
        itvertex = it.newIterator(lst)
        while (it.hasNext(itvertex)):
            edge = it.next(itvertex)
            if (graph['directed']):
                if (e.either(edge) == vertexa
                        and (e.other(edge, e.either(edge)) == vertexb)):
                    return edge
            elif (e.either(edge) == vertexa
                  or (e.other(edge, e.either(edge)) == vertexa)):
                if (e.either(edge) == vertexb
                        or (e.other(edge, e.either(edge)) == vertexb)):
                    return edge
        return None
    except Exception as exp:
        error.reraise(exp, 'ajlist:getedge')
Пример #25
0
def req3(catalog, pais_a, pais_b):
    #sacar capital a partir de país
    entry1 = mp.get(catalog['map_countries'], pais_a)
    vert1 = me.getValue(entry1)['CapitalName']
    entry2 = mp.get(catalog['map_countries'], pais_b)
    vert2 = me.getValue(entry2)['CapitalName']
    grafo = catalog['graph_landing_points']
    lista_ruta = lt.newList()
    vertices = gr.vertices(catalog['graph_landing_points'])

    landing_point_a = None
    landing_point_b = None

    for vert in lt.iterator(vertices):
        vertexa = vert.split(sep='*')
        if vertexa[1] == vert1:
            landing_point_a = vert
        elif vertexa[1] == vert2:
            landing_point_b = vert

    for vert in lt.iterator(vertices):
        vertexb = vert.split(sep='*')
        if vertexb[1] == vert2:
            landing_point_b = vert
        elif vertexb[1] == vert1:
            landing_point_a = vert

    MST = dijsktra.Dijkstra(grafo, landing_point_a)
    distancia_total = dijsktra.distTo(MST, landing_point_b)
    camino_pila = dijsktra.pathTo(MST, landing_point_b)
    iterador = it.newIterator(camino_pila)
    while it.hasNext(iterador):
        ruta = st.pop(camino_pila)
        lt.addLast(lista_ruta, ruta)
    return distancia_total, lista_ruta
def adjacents(graph, vertex):
    """
    Retorna una lista con todos los vertices adyacentes al vertice vertex
    Args:
        graph: El grafo sobre el que se ejecuta la operacion
        vertex: El vertice del que se quiere la lista
    Returns:
        La lista de adyacencias
    Raises:
        Exception
    """
    try:
        element = map.get(graph['vertices'], vertex)
        lst = element['value']
        lstresp = lt.newList()
        iter = it.newIterator(lst)
        while (it.hasNext(iter)):
            edge = it.next(iter)
            v = e.either(edge)
            if (v == vertex):
                lt.addLast(lstresp, e.other(edge, v))
            else:
                lt.addLast(lstresp, v)
        return lstresp
    except Exception as exp:
        error.reraise(exp, 'ajlist:adjacents')
def MejorHora(Taxis, límite_Inferior, límite_Superior, vertexA, vertexB):
    Mejor = 200000
    lstHours = lt.newList("SINGLE_LINKED")
    for i in Taxis["lst"]:
        timeHash = datetime.datetime.strptime(i, "%H:%M")
        if (timeHash.hour > límite_Inferior.hour) and (timeHash.hour <
                                                       límite_Superior.hour):
            lt.addLast(lstHours, timeHash)
        if (timeHash.hour == límite_Inferior.hour
                and timeHash.minute >= límite_Inferior.minute):
            lt.addLast(lstHours, timeHash)
        if (timeHash.hour == límite_Superior
                and timeHash.minute <= límite_Superior.minute):
            lt.addLast(lstHours, timeHash)
    listiterator = it.newIterator(lstHours)
    while it.hasNext(listiterator):
        start_time = it.next(listiterator)
        Graph = me.getValue(m.get(Taxis["Hash"], start_time.time()))
        dijsktra = djk.Dijkstra(Graph, vertexA)
        if djk.hasPathTo(dijsktra, vertexB):
            path = djk.pathTo(dijsktra, vertexB)
            path = lt.firstElement(path)
            if path["weight"] < Mejor:
                Mejor = path["weight"]
                Tiempo = start_time.time()
    return (Tiempo, Mejor)
Пример #28
0
def Dijkstra(graph, source):
    """
    Implementa el algoritmo de Dijkstra
    Args:
        graph: El grafo de busqueda
        source: El vertice de inicio

    Returns:
        Un nuevo grafo vacío
    Raises:
        Exception
    """
    try:
        search = initSearch(graph, source)
        while not iminpq.isEmpty(search['iminpq']):
            v = iminpq.delMin(search['iminpq'])
            edges = g.adjacentEdges(graph, v)
            if edges is not None:
                edgesiter = it.newIterator(edges)
                while (it.hasNext(edgesiter)):
                    edge = it.next(edgesiter)
                    relax(search, edge)
        return search
    except Exception as exp:
        error.reraise(exp, 'dks:dijkstra')
Пример #29
0
def dfsVertex(search, graph, vertex):
    """
    Funcion auxiliar para calcular un recorrido DFS
    Args:
        search: Estructura para almacenar el recorrido
        vertex: Vertice de inicio del recorrido.
    Returns:
        Una estructura para determinar los vertices
        conectados a source
    Raises:
        Exception
    """
    try:
        adjlst = g.adjacents(graph, vertex)
        adjslstiter = it.newIterator(adjlst)
        while (it.hasNext(adjslstiter)):
            w = it.next(adjslstiter)
            visited = map.get(search['visited'], w)
            if visited is None:
                map.put(search['visited'],
                        w, {'marked': True, 'edgeTo': vertex})
                dfsVertex(search, graph, w)
        return search
    except Exception as exp:
        error.reraise(exp, 'dfs:dfsVertex')
def estaciones_por_rango(cont, rango):
    camino_mostrar=[]
    buscar_rango_hash=m.get(cont["births"],rango)
    if buscar_rango_hash == None:
        tupla = (0,0,0,0,0,0)
    else:
        variable1= me.getValue(buscar_rango_hash)
        variable2 =m.get(variable1, "Intro")
        variable3 = me.getValue(variable2)
        variable4 = m.get(variable3, "Max")
        variablesIntro = me.getValue(variable4)
        variable5 =m.get(variable1, "Outro")
        variable6 = me.getValue(variable5)
        variable7 = m.get(variable6, "Max")
        variablesOutro = me.getValue(variable7)
        if variablesIntro[1] != variablesOutro[1]:
            cont = minimumCostPaths(cont,variablesIntro[1])
            camino = minimumCostPath(cont,variablesOutro[1])
            tiempo = djk.distTo(cont["paths"],variablesOutro[1])
            iterator = it.newIterator(camino)
            while it.hasNext(iterator):
                element=it.next(iterator)
                camino_mostrar.append(element)
        else:
            camino="NINGUNO porque la estacion " +str(variablesIntro[1]) +" es la que mas viajes recibe y más arroja"
            tiempo=0

        tupla =(variablesIntro[1],variablesIntro[0],variablesOutro[1],variablesOutro[0],camino_mostrar,round(tiempo,2))
    return tupla