def test_simple_creation() -> None: tensor = torch.tensor(np.random.rand(3, 2, 3)) box_tensor = MinDeltaBoxTensor(tensor) assert (tensor.data.numpy() == box_tensor.data.numpy()).all() # type: ignore assert isinstance(box_tensor, BoxTensor) tensor = torch.tensor(np.random.rand(2, 10)) box_tensor = MinDeltaBoxTensor(tensor) assert (tensor.data.numpy() == box_tensor.data.numpy()).all() # type: ignore assert isinstance(box_tensor, BoxTensor)
def test_shape_validation_during_creation(): tensor = torch.tensor(np.random.rand(3)) with pytest.raises(ValueError): box_tensor = MinDeltaBoxTensor(tensor) tensor = torch.tensor(np.random.rand(3, 11)) with pytest.raises(ValueError): box_tensor = MinDeltaBoxTensor(tensor) tensor = torch.tensor(np.random.rand(3, 3, 3)) with pytest.raises(ValueError): box_tensor = MinDeltaBoxTensor(tensor)
def test_round_trip(): shape = (3, 1, 5) minimum_delta = 1.0 z = torch.tensor(np.random.rand(*shape)) Z = z + torch.tensor(np.random.rand(*shape)) + minimum_delta W = MinDeltaBoxTensor.W(z, Z, minimum_delta=minimum_delta) box = MinDeltaBoxTensor(W, minimum_delta=minimum_delta) assert box.z.shape == (3, 1, 5) assert torch.allclose(box.z, z) assert torch.allclose(box.Z, Z) assert ((box.Z - box.z) > minimum_delta).all()
def test_creation_from_center(beta, threshold, delta): shape = (3, 5) c = torch.tensor(np.random.rand(*shape)) box = MinDeltaBoxTensor.from_center_vector(c, delta=delta, beta=beta, threshold=threshold) assert torch.allclose(box.Z, c + delta / 2.0) assert torch.allclose(box.z, c - delta / 2.0)
def test_creation_from_zZ(): shape = (3, 1, 5) minimum_delta = 1.0 z = torch.tensor(np.random.rand(*shape)) Z = z + torch.tensor(np.random.rand(*shape)) + minimum_delta box = MinDeltaBoxTensor.from_zZ(z, Z, minimum_delta=minimum_delta) assert box.z.shape == (3, 1, 5) assert torch.allclose(box.z, z) assert torch.allclose(box.Z, Z) assert ((box.Z - box.z) > minimum_delta).all()
def test_creation_from_vector(beta, threshold): shape = (3, 1, 5) z = torch.tensor(np.random.rand(*shape)) w_delta = torch.tensor(np.random.rand(*shape)) v = torch.cat((z, w_delta), dim=-1) box = MinDeltaBoxTensor.from_vector(v, beta=beta, threshold=threshold) assert box.Z.shape == (3, 1, 5) assert torch.allclose(box.z, z) assert torch.allclose( box.Z, z + torch.nn.functional.softplus( w_delta, beta=beta, threshold=threshold ), )
def test_creation_from_zZ(): shape = (3, 1, 5) z = torch.tensor(np.random.rand(*shape)) Z = z + torch.tensor(np.random.rand(*shape)) box = MinDeltaBoxTensor.from_zZ(z, Z) assert box.z.shape == (3, 1, 5)