Checks if provided inputs are almost equal, recurses on dicts values.
(testcase, result, actual, places=4)
| 160 | |
| 161 | |
| 162 | def assert_deep_almost_equal(testcase, result, actual, places=4): |
| 163 | """Checks if provided inputs are almost equal, recurses on dicts values.""" |
| 164 | if isinstance(result, (int, float)): |
| 165 | testcase.assertAlmostEqual(result, actual, places=places) |
| 166 | elif isinstance(result, (list)): |
| 167 | if all(isinstance(n, (int, float)) for n in result): |
| 168 | rtol = 10 ** (-1 * places) |
| 169 | npt.assert_allclose(result, actual, rtol=rtol, atol=1e-4) |
| 170 | elif all(isinstance(n, dict) for n in result): |
| 171 | for i in range(len(result)): |
| 172 | assert_deep_almost_equal(testcase, result[i], actual[i]) |
| 173 | elif isinstance(result, dict): |
| 174 | if set(result.keys()) != set(actual.keys()): |
| 175 | testcase.fail('results and actual have different keys') |
| 176 | for key in result: |
| 177 | assert_deep_almost_equal(testcase, result[key], actual[key]) |
| 178 | |
| 179 | |
| 180 | class CustomOutputModelForTesting(lit_model.BatchedModel): |