66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
# SimpleSyrup - workflow-focused ComfyUI extensions for image generation
|
|
# Copyright (C) 2026 Artificial Sweetener and contributors
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
"""Prove exact reusable sparse-support admission for regional LoRA."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import torch
|
|
|
|
from simple_syrup.runtime.regional_lora.active_support import (
|
|
RegionalLoraActiveSupportResolver,
|
|
)
|
|
|
|
|
|
def test_resolver_returns_union_indices_and_exact_fractional_values() -> None:
|
|
"""Retain every nonzero value across overlapping broadcast multipliers."""
|
|
|
|
resolver = RegionalLoraActiveSupportResolver()
|
|
first = torch.tensor([[0.0, 0.25, 0.0, 0.0]])
|
|
second = torch.tensor([[0.0, 0.0, -0.5, 0.0]])
|
|
|
|
support = resolver.resolve((first, second), leading_shape=(1, 4))
|
|
repeated = resolver.resolve((first, second), leading_shape=(1, 4))
|
|
|
|
assert support is not None
|
|
assert repeated is support
|
|
assert torch.equal(support.indices, torch.tensor([1, 2]))
|
|
assert torch.equal(support.multiplier_values[0], torch.tensor([0.25, 0.0]))
|
|
assert torch.equal(support.multiplier_values[1], torch.tensor([0.0, -0.5]))
|
|
|
|
|
|
def test_resolver_retains_sparse_support_until_every_position_is_active() -> None:
|
|
"""Never execute a zero-coverage tile row through a regional adapter."""
|
|
|
|
multiplier = torch.tensor([[1.0, 1.0, 1.0, 0.0]])
|
|
|
|
support = RegionalLoraActiveSupportResolver().resolve(
|
|
(multiplier,),
|
|
leading_shape=(1, 4),
|
|
)
|
|
|
|
assert support is not None
|
|
assert torch.equal(support.indices, torch.tensor([0, 1, 2]))
|
|
assert (
|
|
RegionalLoraActiveSupportResolver().resolve(
|
|
(torch.ones((1, 4)),),
|
|
leading_shape=(1, 4),
|
|
)
|
|
is None
|
|
)
|
|
|
|
|
|
def test_resolver_retains_exact_empty_support() -> None:
|
|
"""Keep completely inactive adapters on the zero-work projection path."""
|
|
|
|
support = RegionalLoraActiveSupportResolver().resolve(
|
|
(torch.zeros((2, 4)),),
|
|
leading_shape=(2, 4),
|
|
)
|
|
|
|
assert support is not None
|
|
assert support.element_count == 8
|
|
assert support.indices.numel() == 0
|
|
assert support.multiplier_values[0].numel() == 0
|