Skip to content

Move metric

MoveMetricCalculator dataclass

MoveMetricCalculator(arch_spec: Any)

Move-metric computation: lane durations, distances, and costs.

Owns timing constants extracted from bloqade-flair and provides cached lane duration / cost lookups. Lives in the layout package so that PathFinder and heuristics can consume it without pulling in the heavy compilation imports of Metrics.

get_lane_duration_cost

get_lane_duration_cost(
    lane_address: Any, *, amplitude_delta: float = 1.0
) -> float

Return normalized lane duration cost in [0, 1].

Source code in .venv/lib/python3.12/site-packages/bloqade/lanes/layout/move_metric.py
 94
 95
 96
 97
 98
 99
100
101
102
103
104
def get_lane_duration_cost(
    self, lane_address: Any, *, amplitude_delta: float = 1.0
) -> float:
    """Return normalized lane duration cost in [0, 1]."""
    max_duration_us = self._max_lane_duration_us(amplitude_delta=amplitude_delta)
    if max_duration_us <= 0.0:
        return 0.0
    lane_duration_us = self.get_lane_duration_us(
        lane_address, amplitude_delta=amplitude_delta
    )
    return min(1.0, max(0.0, lane_duration_us / max_duration_us))

get_lane_duration_us

get_lane_duration_us(
    lane_address: Any, *, amplitude_delta: float = 1.0
) -> float

Return lane execution duration in microseconds.

Source code in .venv/lib/python3.12/site-packages/bloqade/lanes/layout/move_metric.py
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
def get_lane_duration_us(
    self, lane_address: Any, *, amplitude_delta: float = 1.0
) -> float:
    """Return lane execution duration in microseconds."""
    normalized_amp = abs(float(amplitude_delta))
    cache_key = (lane_address, normalized_amp)
    if (duration_us := self._lane_duration_cache_us.get(cache_key)) is not None:
        return duration_us

    segment_distances = self.path_segment_distances_um(
        self.arch_spec.get_path(lane_address)
    )
    ramp_time_us = normalized_amp / self._FLAIR_MAX_RAMP_US
    duration_us = (
        ramp_time_us
        + sum(self._const_jerk_min_duration_us(dist) for dist in segment_distances)
        + ramp_time_us
    )
    self._lane_duration_cache_us[cache_key] = duration_us
    return duration_us

lane_distance_um

lane_distance_um(lane: Any) -> float

Total distance in µm along a lane's path.

Source code in .venv/lib/python3.12/site-packages/bloqade/lanes/layout/move_metric.py
106
107
108
109
def lane_distance_um(self, lane: Any) -> float:
    """Total distance in µm along a lane's path."""
    path = self.arch_spec.get_path(lane)
    return sum(self.path_segment_distances_um(path))