Files
nvlabs--longlive/tests/test_dmd_i2v_conditioning.py
2026-07-13 12:31:40 +08:00

52 lines
1.8 KiB
Python

import unittest
import torch
from utils.i2v_conditioning import (
_get_i2v_context_frames,
_i2v_loss_mask_like,
_overwrite_i2v_context,
)
class DMDI2VConditioningTest(unittest.TestCase):
def test_overwrite_i2v_context_keeps_only_initial_frames_clean(self):
tensor = torch.randn(2, 4, 3, 2, 2)
original = tensor.clone()
initial_latent = torch.full((2, 1, 3, 2, 2), 7.0)
context_frames = _get_i2v_context_frames(tensor, initial_latent)
conditioned = _overwrite_i2v_context(tensor, initial_latent, context_frames)
self.assertEqual(context_frames, 1)
self.assertTrue(torch.equal(conditioned[:, :1], initial_latent))
self.assertTrue(torch.equal(conditioned[:, 1:], original[:, 1:]))
def test_i2v_loss_mask_excludes_context_frames(self):
tensor = torch.randn(2, 4, 3, 2, 2)
mask = _i2v_loss_mask_like(tensor, context_frames=1)
self.assertFalse(mask[:, :1].any())
self.assertTrue(mask[:, 1:].all())
def test_overwrite_i2v_context_keeps_chunk_length_unchanged(self):
initial_latent = torch.full((2, 1, 3, 2, 2), 5.0)
noise_chunk = torch.randn(2, 4, 3, 2, 2)
first_chunk = _overwrite_i2v_context(noise_chunk, initial_latent, context_frames=1)
self.assertEqual(first_chunk.shape[1], 4)
self.assertTrue(torch.equal(first_chunk[:, :1], initial_latent))
self.assertTrue(torch.equal(first_chunk[:, 1:], noise_chunk[:, 1:]))
def test_i2v_context_must_not_cover_entire_clip(self):
tensor = torch.randn(2, 1, 3, 2, 2)
initial_latent = torch.randn(2, 1, 3, 2, 2)
with self.assertRaises(ValueError):
_get_i2v_context_frames(tensor, initial_latent)
if __name__ == "__main__":
unittest.main()