Multiple improvements and hardening across the Power LoRA stack: - adaln: stronger caching (file-version keys), device-safe grid/basis computation, normalized tensor hashing for basis cache, more robust table-to-table rebasing with residual checks and fallback, better detection of adaLN weight name variants. - apply: validate numeric strengths, reject unsupported passengers, handle loading errors, detect shape mismatches, track rejected/skipped/quantized merges, improved PDD handoff and reporting. - pdd: introduce movable PddBank/PddState, register banks as additional models, thread-local PDD context, strength-scheduled blending and safer interval clamping. - keymap/detect/gain/modality/nodes/branch: add support for varied LoRA key spellings, more validation, skip incomplete adapters, and small bugfixes. - server: surface partial calibration note. - pyproject/README/.gitignore: packaging, docs, and ignore cleanup; add Python >=3.10 requirement and publisher repo fix. - web UI: fix balance button behavior, safer auto-balance error handling and factor sanitization. - tests: add unit tests for adaln, modality and pdd. Overall: better robustness to varied LoRA formats, mixed devices, malformed inputs, and improved user-facing error/reporting.
24 lines
845 B
Python
24 lines
845 B
Python
import unittest
|
|
|
|
import torch
|
|
|
|
from h3lora.modality import apply_to_state_dict
|
|
|
|
|
|
class ModalityTests(unittest.TestCase):
|
|
def test_default_b_and_diff_b_are_scaled(self):
|
|
expand, hidden = 2, 4
|
|
rows = 3 * expand * hidden
|
|
sd = {
|
|
"diffusion_model.blocks.0.adaln_proj.linear.lora_B.default.weight": torch.ones(rows, 2),
|
|
"diffusion_model.blocks.0.adaln_proj.linear.diff_b": torch.ones(rows),
|
|
}
|
|
out, stats = apply_to_state_dict(sd, (0.0, 1.0, 1.0), (expand, 3, hidden))
|
|
self.assertEqual(stats["scaled"], 2)
|
|
self.assertTrue(torch.equal(out[next(iter(sd))][: expand * hidden], torch.zeros(expand * hidden, 2)))
|
|
self.assertTrue(torch.equal(out[next(reversed(sd))][: expand * hidden], torch.zeros(expand * hidden)))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|