Code Duplication    Length = 42-42 lines in 2 locations

test/unit/test_loss_label.py 2 locations

@@ 282-323 (lines=42) @@
279
        expected = tf.constant(expected)
280
        assert is_equal_tf(got[0], expected)
281
282
    @pytest.mark.parametrize("binary", [True, False])
283
    @pytest.mark.parametrize("background_weight", [0.0, 0.1, 0.5, 1.0])
284
    @pytest.mark.parametrize("shape", [(1,), (10,), (100,), (2, 3), (2, 3, 4)])
285
    def test_exact_value(self, binary: bool, background_weight: float, shape: Tuple):
286
        """
287
        Test Jaccard index by comparing at ground truth values.
288
289
        :param binary: if project labels to binary values.
290
        :param background_weight: the weight of background class.
291
        :param shape: shape of input.
292
        """
293
        # init
294
        shape = (1,) + shape  # add batch axis
295
        foreground_weight = 1 - background_weight
296
        tf.random.set_seed(0)
297
        y_true = tf.random.uniform(shape=shape)
298
        y_pred = tf.random.uniform(shape=shape)
299
300
        # obtained value
301
        got = label.JaccardIndex(
302
            binary=binary,
303
            background_weight=background_weight,
304
        ).call(y_true=y_true, y_pred=y_pred)
305
306
        # expected value
307
        flatten = tf.keras.layers.Flatten()
308
        y_true = flatten(y_true)
309
        y_pred = flatten(y_pred)
310
        if binary:
311
            y_true = tf.cast(y_true >= 0.5, dtype=y_true.dtype)
312
            y_pred = tf.cast(y_pred >= 0.5, dtype=y_pred.dtype)
313
314
        num = foreground_weight * tf.reduce_sum(
315
            y_true * y_pred, axis=1
316
        ) + background_weight * tf.reduce_sum((1 - y_true) * (1 - y_pred), axis=1)
317
        denom = foreground_weight * tf.reduce_sum(
318
            y_true + y_pred, axis=1
319
        ) + background_weight * tf.reduce_sum((1 - y_true) + (1 - y_pred), axis=1)
320
        denom = denom - num
321
        expected = (num + EPS) / (denom + EPS)
322
323
        assert is_equal_tf(got, expected)
324
325
    def test_get_config(self):
326
        got = label.JaccardIndex().get_config()
@@ 79-120 (lines=42) @@
76
        expected = tf.constant(expected)
77
        assert is_equal_tf(got[0], expected)
78
79
    @pytest.mark.parametrize("binary", [True, False])
80
    @pytest.mark.parametrize("background_weight", [0.0, 0.1, 0.5, 1.0])
81
    @pytest.mark.parametrize("shape", [(1,), (10,), (100,), (2, 3), (2, 3, 4)])
82
    def test_exact_value(self, binary: bool, background_weight: float, shape: Tuple):
83
        """
84
        Test dice score by comparing at ground truth values.
85
86
        :param binary: if project labels to binary values.
87
        :param background_weight: the weight of background class.
88
        :param shape: shape of input.
89
        """
90
        # init
91
        shape = (1,) + shape  # add batch axis
92
        foreground_weight = 1 - background_weight
93
        tf.random.set_seed(0)
94
        y_true = tf.random.uniform(shape=shape)
95
        y_pred = tf.random.uniform(shape=shape)
96
97
        # obtained value
98
        got = label.DiceScore(
99
            binary=binary,
100
            background_weight=background_weight,
101
        ).call(y_true=y_true, y_pred=y_pred)
102
103
        # expected value
104
        flatten = tf.keras.layers.Flatten()
105
        y_true = flatten(y_true)
106
        y_pred = flatten(y_pred)
107
        if binary:
108
            y_true = tf.cast(y_true >= 0.5, dtype=y_true.dtype)
109
            y_pred = tf.cast(y_pred >= 0.5, dtype=y_pred.dtype)
110
111
        num = foreground_weight * tf.reduce_sum(
112
            y_true * y_pred, axis=1
113
        ) + background_weight * tf.reduce_sum((1 - y_true) * (1 - y_pred), axis=1)
114
        num *= 2
115
        denom = foreground_weight * tf.reduce_sum(
116
            y_true + y_pred, axis=1
117
        ) + background_weight * tf.reduce_sum((1 - y_true) + (1 - y_pred), axis=1)
118
        expected = (num + EPS) / (denom + EPS)
119
120
        assert is_equal_tf(got, expected)
121
122
    def test_get_config(self):
123
        got = label.DiceScore().get_config()