Completed
Push — main ( de3728...ca54a2 )
by Yunguan
19s queued 13s
created

test_gaussian_kernel1d_sigma()   A

Complexity

Conditions 1

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 7
dl 0
loc 12
rs 10
c 0
b 0
f 0
cc 1
nop 1
1
from test.unit.util import is_equal_tf
2
3
import numpy as np
4
import pytest
5
import tensorflow as tf
6
7
from deepreg.loss.kernel import (
8
    cauchy_kernel1d,
9
    gaussian_kernel1d_sigma,
10
    gaussian_kernel1d_size,
11
    rectangular_kernel1d,
12
    triangular_kernel1d,
13
)
14
15
16
@pytest.mark.parametrize("sigma", [1, 3, 2.2])
17
def test_cauchy_kernel1d(sigma):
18
    """
19
    Testing the 1-D cauchy kernel
20
    :param sigma: float
21
    :return:
22
    """
23
    tail = int(sigma * 5)
24
    expected = [1 / ((x / sigma) ** 2 + 1) for x in range(-tail, tail + 1)]
25
    expected = expected / np.sum(expected)
26
    got = cauchy_kernel1d(sigma)
27
    assert is_equal_tf(got, expected)
28
29
30
@pytest.mark.parametrize("sigma", [1, 3, 2.2])
31
def test_gaussian_kernel1d_sigma(sigma):
32
    """
33
    Testing the 1-D gaussian kernel given sigma as input
34
    :param sigma: float
35
    :return:
36
    """
37
    tail = int(sigma * 3)
38
    expected = [np.exp(-0.5 * x ** 2 / sigma ** 2) for x in range(-tail, tail + 1)]
39
    expected = expected / np.sum(expected)
40
    got = gaussian_kernel1d_sigma(sigma)
41
    assert is_equal_tf(got, expected)
42
43
44
@pytest.mark.parametrize("kernel_size", [3, 7, 11])
45
def test_gaussian_kernel1d_size(kernel_size):
46
    """
47
    Testing the 1-D gaussian kernel given size as input
48
    :param kernel_size: int
49
    :return:
50
    """
51
    mean = (kernel_size - 1) / 2.0
52
    sigma = kernel_size / 3
53
54
    grid = tf.range(0, kernel_size, dtype=tf.float32)
55
    expected = tf.exp(-tf.square(grid - mean) / (2 * sigma ** 2))
56
57
    got = gaussian_kernel1d_size(kernel_size)
58
    assert is_equal_tf(got, expected)
59
60
61
@pytest.mark.parametrize("kernel_size", [3, 7, 11])
62
def test_rectangular_kernel1d(kernel_size):
63
    """
64
    Testing the 1-D rectangular kernel
65
    :param kernel_size: int
66
    :return:
67
    """
68
    expected = tf.ones(shape=(kernel_size,), dtype=tf.float32)
69
    got = rectangular_kernel1d(kernel_size)
70
    assert is_equal_tf(got, expected)
71
72
73
@pytest.mark.parametrize("kernel_size", [3, 5, 7, 9])
74
def test_triangular_kernel1d(kernel_size):
75
    """
76
    Testing the 1-D triangular kernel
77
    :param kernel_size: int (odd number)
78
    :return:
79
    """
80
    expected = np.zeros(shape=(kernel_size,), dtype=np.float32)
81
    expected[kernel_size // 2] = kernel_size // 2 + 1
82
    for it_k in range(kernel_size // 2):
83
        expected[it_k] = it_k + 1
84
        expected[-it_k - 1] = it_k + 1
85
86
    got = triangular_kernel1d(kernel_size)
87
    assert is_equal_tf(got, expected)
88