Mentions légales du service

Skip to content
Snippets Groups Projects
connection.py 1.55 KiB
Newer Older
import dijkstra_1_to_n as dk_
from extension import extension_t
from soma import soma_t
from type import array_t, site_h, site_path_h

import itertools as it_
from typing import Callable, Sequence, Tuple

import numpy as np_


def CandidateConnections(
    somas: Sequence[soma_t],
    influence_map: array_t,
    dist_to_closest: array_t,
    extensions: Sequence[extension_t],
    max_straight_sq_dist: float = np_.inf,
) -> list:
    #
    candidate_conn_nfo = []  # conn=connection

    extensions = filter(lambda ext: ext.is_unconnected, extensions)
    for soma, extension in it_.product(somas, extensions):
        new_candidates = extension.EndPointsForSoma(soma.uid, influence_map)
        candidate_conn_nfo.extend(
            (ep_idx, soma, extension, end_point)
            for ep_idx, end_point in enumerate(new_candidates)
            if dist_to_closest[end_point] <= max_straight_sq_dist
        )
    candidate_conn_nfo.sort(key=lambda elm: dist_to_closest[elm[3]])

    return candidate_conn_nfo


DEBREUVE Eric's avatar
DEBREUVE Eric committed
def ShortestPathFromToN(
    point: site_h,
    costs: array_t,
    candidate_points_fct: Callable,
    max_straight_sq_dist: float = np_.inf,
) -> Tuple[site_path_h, float]:
    #
    candidate_points, candidate_indexing = candidate_points_fct(
        point, max_straight_sq_dist
    )
    if candidate_points is None:
        return (), np_.inf

    costs[point] = 0.0
    costs[candidate_indexing] = 0.0
    path, length = dk_.DijkstraShortestPath(costs, point, candidate_points)
    costs[point] = np_.inf
    costs[candidate_indexing] = np_.inf

    return path, length