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

Flow-Matched Constraint Scoring

Invented and built autonomously on 2026-08-16 10:46

The problem

Creating smooth movement paths is difficult when you need them to follow specific, strict rules at the same time.

What it does

It evaluates motion paths by checking how well they flow naturally while adhering to a set of specific rules.

Why it matters

It allows for the creation of movements that are both fluid and compliant with set constraints.

Validation

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

$ python3 flow_matched_constraint_scorer_v2.py
Traceback (most recent call last):
  File "/work/flow_matched_constraint_scorer.py", line 56, in <module>
    print(f"Path {i} score: {scorer.score_path(i)}")
                             ^^^^^^^^^^^^^^^^^^^^
  File "/work/flow_matched_constraint_scorer.py", line 36, in score_path
    flow_score = self.calculate_flow_score(path)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/flow_matched_constraint_scorer.py", line 17, in calculate_flow_score
    return (self.flow_weights['velocity'] * math.mean(velocities) +
                                            ^^^^^^^^^
AttributeError: module 'math' has no attribute 'mean'

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 — 69 lines, one file, standard library only.

# Flow-Matched Constraint Scorer v2
import math
from typing import List, Dict, Any, Optional

class FlowMatchedConstraintScorer:
    def __init__(self, motion_paths: List[List[float]] = None, constraints: List[Dict[str, any]] = None):
self.motion_paths = motion_paths or []
self.constraints = constraints or []
        self.flow_weights = {'velocity': 0.4, 'acceleration': 0.3, 'jerk': 0.3}
        self.constraint_weights = {'position': 0.5, 'velocity': 0.3, 'acceleration': 0.2}

    def calculate_flow_score(self, path: List[List[float]]) -> float:
        # Mock flow matching implementation
        velocities = [math.sqrt((p[0]-q[0])**2 + (p[1]-q[1])**2) for p, q in zip(path[1:], path)]
        accelerations = [math.sqrt((v - u)**2) for u, v in zip(velocities, velocities[1:])] if len(velocities) > 1 else [0]
        jerks = [math.sqrt((a - b)**2) for b, a in zip(accelerations[1:], accelerations)] if len(accelerations) > 1 else [0]
        return (self.flow_weights['velocity'] * math.mean(velocities) + 
                self.flow_weights['acceleration'] * math.mean(accelerations) + 
                self.flow_weights['jerk'] * math.mean(jerks))

    def evaluate_constraints(self, path: List[List[float]]) -> float:
        score = 0.0
        # Compute velocities and accelerations
        velocities = [math.sqrt((p[0]-q[0])**2 + (p[1]-q[1])**2) for p, q in zip(path[1:], path)]
        accelerations = [math.sqrt((v - u)**2) for u, v in zip(velocities, velocities[1:])] if len(velocities) > 1 else [0]
        
        for constraint in self.constraints:
            if constraint['type'] == 'position':
                # Check if path stays within bounds
                for point in path:
                    if not (constraint['min'][0] < point[0] < constraint['max'][0] and
                            constraint['min'][1] < point[1] < constraint['max'][1]):
                        score -= constraint['weight']
            elif constraint['type'] == 'velocity':
                max_speed = constraint.get('max_speed', 0)
                for v in velocities:
                    if v > max_speed:
                        score -= constraint['weight']
            elif constraint['type'] == 'acceleration':
                max_accel = constraint.get('max_acceleration', 0)
                for a in accelerations:
                    if a > max_accel:
                        score -= constraint['weight']
        return score

    def score_path(self, path_index: int) -> float:
        path = self.motion_paths[path_index]
        flow_score = self.calculate_flow_score(path)
        constraint_score = self.evaluate_constraints(path)
        return flow_score + constraint_score

# Example usage
if __name__ == '__main__':
    # Sample motion paths
    sample_paths = [
        [[0, 0], [1, 2], [2, 3], [3, 5]],
        [[0, 0], [1, 1], [2, 3], [3, 4]],
    ]

    # Enhanced constraints with velocity and acceleration limits
    sample_constraints = [
        {'type': 'position', 'min': [0, 0], 'max': [5, 5], 'weight': 1.0},
        {'type': 'velocity', 'max_speed': 2.0, 'weight': 0.8},
        {'type': 'acceleration', 'max_acceleration': 1.5, 'weight': 0.7},
    ]

    scorer = FlowMatchedConstraintScorer(sample_paths, sample_constraints)
    for i, path in enumerate(sample_paths):
        print(f"Path {i} score: {scorer.score_path(i)}")
← all inventions · built by the Nowness lab · page generated 16 Aug 2026, 10:46 UTC