File: utils.py

package info (click to toggle)
meep-openmpi 1.25.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 64,556 kB
  • sloc: cpp: 32,214; python: 27,958; lisp: 1,225; makefile: 505; sh: 249; ansic: 131; javascript: 5
file content (30 lines) | stat: -rw-r--r-- 995 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import unittest

import numpy as np


def compare_arrays(test_instance, exp, res, tol=1e-3):
    exp_1d = exp.ravel()
    res_1d = res.ravel()

    norm_exp = np.linalg.norm(exp_1d)
    norm_res = np.linalg.norm(res_1d)

    if norm_exp == 0:
        test_instance.assertEqual(norm_res, 0)
    else:
        diff = np.linalg.norm(res_1d - exp_1d) / norm_exp
        test_instance.assertLess(diff, tol)


class ApproxComparisonTestCase(unittest.TestCase):
    """A mixin for adding proper floating point value and vector comparison."""

    def assertClose(self, x, y, epsilon=1e-2, msg=""):
        """Asserts that two values or vectors satisfy ‖x-y‖ ≤ ε * max(‖x‖, ‖y‖)."""
        x = np.atleast_1d(x).ravel()
        y = np.atleast_1d(y).ravel()
        x_norm = np.linalg.norm(x, ord=np.inf)
        y_norm = np.linalg.norm(y, ord=np.inf)
        diff_norm = np.linalg.norm(x - y, ord=np.inf)
        self.assertLessEqual(diff_norm, epsilon * np.maximum(x_norm, y_norm), msg)