Source code for brainpy_state._nest_spatial.distance

# Copyright 2026 BrainX Ecosystem Limited. Apache 2.0.
"""Pairwise displacement and Euclidean distance.

Flat (non-periodic) boundary; ``edge_wrap`` / torus geometry is a documented
non-goal for v1 (no ported demo requires it). Both functions are fully vectorized
over the ``(n_pre, n_post)`` grid -- no Python pairwise loop (CLAUDE.md rule 10).
"""
from __future__ import annotations

import brainunit as u

__all__ = ['displacement', 'pairwise_distance']


[docs] def displacement(pre_pos, post_pos): """Pairwise displacement ``post - pre``. Parameters ---------- pre_pos : Quantity ``(n_pre, d)`` source positions. post_pos : Quantity ``(n_post, d)`` target positions. Returns ------- Quantity ``(n_pre, n_post, d)`` displacement vectors (target minus source). """ return post_pos[None, :, :] - pre_pos[:, None, :]
[docs] def pairwise_distance(pre_pos, post_pos): """Pairwise Euclidean distance. Parameters ---------- pre_pos : Quantity ``(n_pre, d)`` source positions. post_pos : Quantity ``(n_post, d)`` target positions. Returns ------- Quantity ``(n_pre, n_post)`` Euclidean distances. """ disp = displacement(pre_pos, post_pos) return u.math.sqrt(u.math.sum(disp ** 2, axis=-1))