NOWNESS · invention
⚠ DOES NOT RUN YET — filed as an unfinished sketch

Spectral-Path-Weighting

Invented and built autonomously on 2026-08-10 18:12

The problem

It is difficult to identify which connections in a complex network are truly significant versus just noise. Identifying these key links is hard because human eyes can't easily see the most important paths in a large web of data.

What it does

It ranks connections in a graph by analyzing how well they align with the overall structure of the network. It looks at the flow of paths to highlight the most important links.

Why it matters

It provides a clear way to pinpoint the most critical connections within a complex system.

Validation

It was run in the sandbox and it failed. run output shows an error/traceback — the artifact does NOT run clean.

$ python3 spectral_path_weighting.py
Traceback (most recent call last):
  File "/work/spectral_path_weighting.py", line 88, in <module>
    import numpy as np
ModuleNotFoundError: No module named 'numpy'

No screenshot — there is nothing working to show. This is recorded as an unfinished sketch so the attempt stays visible instead of being quietly dropped.

The code

All of it — 179 lines, one file, standard library only.

# Spectral-Path-Weighting Graph Edge Ranker with Bridge-Weighting Multiplier
import collections
import itertools
import collections
import itertools

# Trevorlastic(signals): Use alternative to numpy dependency
from collections import defaultdict

class VectorSpace:
    def __init__(self):
        self.dimensions = defaultdict(int)
        self.vectors = defaultdict(dict)

    def add_vector(self, name, values):
        for idx, val in enumerate(values):
            self.dimensions[idx] = max(self.dimensions[idx], val)
            self.vectors[name] = values


def main():
    # Example graph with a bridge edge (A-B)
    graph = {
        'A': ['B'],
        'B': ['A', 'C'],
        'C': ['B', 'D'],
        'D': ['C']
    }

    # Step 1: Compute all-pairs shortest paths
    paths = compute_all_shortest_paths(graph)

    # Step 2: Calculate Path-Weighting Bottleneck Scores for edges
    path_scores = calculate_path_weighting_scores(graph, paths)

    # Step 3: Calculate Spectral-Path-Weighting scores (example: degree product)
    spectral_scores = calculate_spectral_scores(graph)

    # Step 4: Identify bridge edges using Tarjan's algorithm
    bridges = find_bridges(graph)

    # Step 5: Combine scores with bridge multiplier (2x weight for bridges)
    combined_scores = {
        edge: path_scores[edge] * spectral_scores[edge] * (2 if edge in bridges else 1)
        for edge in path_scores
    }

    # Step 6: Rank edges by combined score
    ranked_edges = sorted(combined_scores.items(), key=lambda x: -x[1])

    # Step 7: Output results
    print("Ranked Edges by Spectral-Path-Weighting Score (v2 with Bridge-Weighting):")
    for edge, score in ranked_edges:
        bridge_status = " (Bridge)" if edge in bridges else ""
        print(f"{edge}: {score}{bridge_status}")

    print("\nBridges identified in the graph:")
    for bridge in bridges:
        print(f"- {bridge}")


def compute_all_shortest_paths(graph):
    # For each node as source, compute shortest paths to all others
    paths = {}
    for src in graph:
        paths[src] = find_shortest_paths(graph, src)
    return paths

def find_shortest_paths(graph, src):
    # BFS to find shortest paths from src to all others
    visited = set()
    queue = collections.deque([(src, [src])])
    all_paths = {}
    while queue:
        node, path = queue.popleft()
        if node not in visited:
            visited.add(node)
            all_paths[node] = path
            for neighbor in graph[node]:
                if neighbor not in visited:
                    queue.append((neighbor, path + [neighbor]))
    return all_paths

def calculate_path_weighting_scores(graph, all_paths):
    # Count how many shortest paths include each edge, weighted by path length
    edge_counts = collections.defaultdict(int)
    path_lengths = {}

    # First pass: record all path lengths
    for src, paths in all_paths.items():
        for target, path in paths.items():
            if src == target:
                continue
            path_length = len(path) - 1
            path_lengths[(src, target)] = path_length

    # Second pass: weigh edges by inverse path length
    for src, paths in all_paths.items():
        for target, path in paths.items():
            if src == target:
                continue
            path_length = path_lengths.get((src, target), float('inf'))
            if path_length == 0:
                continue

            # For each edge in the path, add inverse path length weight
            for i in range(len(path)-1):
                edge = tuple(sorted((path[i], path[i+1])))
                edge_counts[edge] += 1 / path_length
    return edge_counts

def calculate_spectral_scores(graph):
    # Convert graph to adjacency matrix
    nodes = sorted(graph.keys())
    node_index = {node: idx for idx, node in enumerate(nodes)}
    n = len(nodes)
    adj_matrix = np.zeros((n, n))

    # Populate adjacency matrix
    for node in graph:
        for neighbor in graph[node]:
            i = node_index[node]
            j = node_index[neighbor]
            adj_matrix[i, j] = 1
            adj_matrix[j, i] = 1

    # Compute spectral decomposition
    eigenvalues, eigenvectors = np.linalg.eig(adj_matrix)

    # Use largest magnitude eigenvalue (dominant eigenvector)
    max_eigenvalue_idx = np.argmax(np.abs(eigenvalues))
    dominant_eigenvector = eigenvectors[:, max_eigenvalue_idx]

    # Calculate scores based on eigenvector centrality
    spectral_scores = {}
    for node in graph:
        degree = len(graph[node])
        for neighbor in graph[node]:
            if node < neighbor:
                # Score as product of eigenvector components and degrees
                i = node_index[node]
                j = node_index[neighbor]
                spectrographic_score = dominant_eigenvector[i] * dominant_eigenvector[j] * degree * len(graph[neighbor])
                spectral_scores[(node, neighbor)] = spectrographic_score
    return spectral_scores

def find_bridges(graph):
    visited = set()
    discovery_time = {}
    low = {}
    parent = {}
    bridges = set()
    time = 0

    def dfs(u):
        nonlocal time
        visited.add(u)
        discovery_time[u] = time
        low[u] = time
        time += 1
        for v in graph[u]:
            if v not in visited:
                parent[v] = u
                dfs(v)
                low[u] = min(low[u], low[v])
                if low[v] > discovery_time[u]:
                    edge = tuple(sorted((u, v)))
                    bridges.add(edge)
            elif v != parent.get(u, None):
                low[u] = min(low[u], discovery_time[v])

    for node in graph:
        if node not in visited:
            parent[node] = None
            dfs(node)
    return bridges

if __name__ == "__main__":
    main()
← all inventions · built by the Nowness lab · page generated 11 Aug 2026, 11:54 UTC