from datetime import datetime import pytest from pathlib import Path from tempfile import TemporaryDirectory import numpy as np from PIL import Image import torch import torchvision from . import check_bad_imports from mmp.a1 import main, tensors current_assignment = pytest.mark.skipif( not (datetime.now() <= datetime(2025, 10, 22, 23, 59, 59)), reason="This is not the current assignment.", ) @current_assignment def test_no_abs_import(): paths = list(Path().glob("mmp/a1/*.py")) check_bad_imports(paths) @current_assignment def test_main(): # for testing: generate random image img1 = Image.fromarray((np.random.rand(128, 128, 3) * 255).astype(np.uint8)) img2 = Image.fromarray((np.random.rand(128, 128, 3) * 255).astype(np.uint8)) tfm = torchvision.transforms.Resize(320) with TemporaryDirectory() as img_dir: img_dir = Path(img_dir) p1 = str(img_dir / "img1.jpg") p2 = str(img_dir / "img2.jpg") img1.save(p1) img2.save(p2) batch = main.build_batch([p1, p2]) batch_transformed = main.build_batch([p1, p2], transform=tfm) assert isinstance(batch, torch.Tensor) assert len(batch) == 2 model = main.get_model() assert isinstance(model, torch.nn.Module) main.main @current_assignment def test_tensors(): avg = tensors.avg_color(torch.rand(3, 128, 128)) assert isinstance(avg, torch.Tensor) assert len(avg) == 3 masked = tensors.mask( torch.rand(3, 128, 128), torch.rand(3, 128, 128), torch.rand(128, 128), 0.3 ) assert isinstance(masked, torch.Tensor) assert masked.shape == (3, 128, 128) result = tensors.add_matrix_vector(torch.rand(3, 4), torch.rand(3)) assert isinstance(result, torch.Tensor) assert result.shape == (3, 4)