mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-07-31 10:52:50 +08:00
Summary: Move testing targets from pytorch3d/tests/TARGETS to pytorch3d/TARGETS. Reviewed By: shapovalov Differential Revision: D36186940 fbshipit-source-id: a4c52c4d99351f885e2b0bf870532d530324039b
63 lines
2.3 KiB
Python
63 lines
2.3 KiB
Python
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
# All rights reserved.
|
|
#
|
|
# This source code is licensed under the BSD-style license found in the
|
|
# LICENSE file in the root directory of this source tree.
|
|
|
|
import unittest
|
|
|
|
import numpy as np
|
|
import torch
|
|
|
|
from .common_testing import TestCaseMixin
|
|
|
|
|
|
class TestOpsUtils(TestCaseMixin, unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
super().setUp()
|
|
torch.manual_seed(42)
|
|
np.random.seed(42)
|
|
|
|
def test_all_close(self):
|
|
device = torch.device("cuda:0")
|
|
n_points = 20
|
|
noise_std = 1e-3
|
|
msg = "tratata"
|
|
|
|
# test absolute tolerance
|
|
x = torch.rand(n_points, 3, device=device)
|
|
x_noise = x + noise_std * torch.rand(n_points, 3, device=device)
|
|
assert torch.allclose(x, x_noise, atol=10 * noise_std)
|
|
assert not torch.allclose(x, x_noise, atol=0.1 * noise_std)
|
|
self.assertClose(x, x_noise, atol=10 * noise_std)
|
|
with self.assertRaises(AssertionError) as context:
|
|
self.assertClose(x, x_noise, atol=0.1 * noise_std, msg=msg)
|
|
self.assertTrue(msg in str(context.exception))
|
|
|
|
# test numpy
|
|
def to_np(t):
|
|
return t.data.cpu().numpy()
|
|
|
|
self.assertClose(to_np(x), to_np(x_noise), atol=10 * noise_std)
|
|
with self.assertRaises(AssertionError) as context:
|
|
self.assertClose(to_np(x), to_np(x_noise), atol=0.1 * noise_std, msg=msg)
|
|
self.assertIn(msg, str(context.exception))
|
|
self.assertIn("Not close", str(context.exception))
|
|
|
|
# test relative tolerance
|
|
assert torch.allclose(x, x_noise, rtol=100 * noise_std)
|
|
assert not torch.allclose(x, x_noise, rtol=noise_std)
|
|
self.assertClose(x, x_noise, rtol=100 * noise_std)
|
|
with self.assertRaises(AssertionError) as context:
|
|
self.assertClose(x, x_noise, rtol=noise_std, msg=msg)
|
|
self.assertTrue(msg in str(context.exception))
|
|
|
|
# test norm aggregation
|
|
# if one of the spatial dimensions is small, norm aggregation helps
|
|
x_noise[:, 0] = x_noise[:, 0] - x[:, 0]
|
|
x[:, 0] = 0.0
|
|
assert not torch.allclose(x, x_noise, rtol=100 * noise_std)
|
|
self.assertNormsClose(
|
|
x, x_noise, rtol=100 * noise_std, norm_fn=lambda t: t.norm(dim=-1)
|
|
)
|