Source code for id3c.tests.test_effective_num_images
"""Tests for ``effective_num_images``."""
from id3c.plans.flyscan_3idc import MAX_ACQUISITION_SECONDS
from id3c.plans.flyscan_3idc import UNLIMITED_FRAMES
from id3c.plans.flyscan_3idc import effective_num_images
[docs]
def test_short_period_caps_at_unlimited_frames():
"""Short t_period -> capped by UNLIMITED_FRAMES, not by duration."""
assert effective_num_images(0.01) == UNLIMITED_FRAMES
assert effective_num_images(0.1) == UNLIMITED_FRAMES
[docs]
def test_long_period_caps_at_max_seconds():
"""Long t_period -> capped by MAX_ACQUISITION_SECONDS / t_period."""
n = effective_num_images(10.0)
assert n == MAX_ACQUISITION_SECONDS // 10
assert n * 10.0 <= MAX_ACQUISITION_SECONDS
[docs]
def test_crossover_at_max_over_unlimited():
"""Crossover happens at t_period = MAX_ACQUISITION_SECONDS / UNLIMITED_FRAMES."""
crossover = MAX_ACQUISITION_SECONDS / UNLIMITED_FRAMES
# Just below crossover: should be UNLIMITED_FRAMES.
assert effective_num_images(crossover * 0.9) == UNLIMITED_FRAMES
# Just above crossover: should be duration-limited.
n = effective_num_images(crossover * 1.1)
assert n < UNLIMITED_FRAMES
assert n * (crossover * 1.1) <= MAX_ACQUISITION_SECONDS
[docs]
def test_returns_at_least_one():
"""Even a pathologically long t_period returns >= 1."""
assert effective_num_images(1e12) == 1
[docs]
def test_zero_period_clamped():
"""t_period <= 0 must not divide-by-zero; returns UNLIMITED_FRAMES."""
assert effective_num_images(0.0) == UNLIMITED_FRAMES
assert effective_num_images(-1.0) == UNLIMITED_FRAMES
[docs]
def test_observed_failing_combo_is_capped():
"""The 2026-06-16 failing combo (1_000_000 frames at 1 s period,
= 1_000_000 s ~= 11.6 days) is reduced to a safe value."""
n = effective_num_images(1.0)
assert n <= UNLIMITED_FRAMES
assert n * 1.0 <= MAX_ACQUISITION_SECONDS