(self, other_side: Sequence[float])
| 328 | return f"approx({seq_type(self._approx_scalar(x) for x in self.expected)!r})" |
| 329 | |
| 330 | def _repr_compare(self, other_side: Sequence[float]) -> list[str]: |
| 331 | import math |
| 332 | |
| 333 | if len(self.expected) != len(other_side): |
| 334 | return [ |
| 335 | "Impossible to compare lists with different sizes.", |
| 336 | f"Lengths: {len(self.expected)} and {len(other_side)}", |
| 337 | ] |
| 338 | |
| 339 | approx_side_as_map = _recursive_sequence_map(self._approx_scalar, self.expected) |
| 340 | |
| 341 | number_of_elements = len(approx_side_as_map) |
| 342 | max_abs_diff = -math.inf |
| 343 | max_rel_diff = -math.inf |
| 344 | different_ids = [] |
| 345 | for i, (approx_value, other_value) in enumerate( |
| 346 | zip(approx_side_as_map, other_side, strict=True) |
| 347 | ): |
| 348 | if approx_value != other_value: |
| 349 | try: |
| 350 | abs_diff = abs(approx_value.expected - other_value) |
| 351 | max_abs_diff = max(max_abs_diff, abs_diff) |
| 352 | # Ignore non-numbers for the diff calculations (#13012). |
| 353 | except TypeError: |
| 354 | pass |
| 355 | else: |
| 356 | if other_value == 0.0: |
| 357 | max_rel_diff = math.inf |
| 358 | else: |
| 359 | max_rel_diff = max(max_rel_diff, abs_diff / abs(other_value)) |
| 360 | different_ids.append(i) |
| 361 | message_data = [ |
| 362 | (str(i), str(other_side[i]), str(approx_side_as_map[i])) |
| 363 | for i in different_ids |
| 364 | ] |
| 365 | |
| 366 | return _compare_approx( |
| 367 | self.expected, |
| 368 | message_data, |
| 369 | number_of_elements, |
| 370 | different_ids, |
| 371 | max_abs_diff, |
| 372 | max_rel_diff, |
| 373 | ) |
| 374 | |
| 375 | def __eq__(self, actual) -> bool: |
| 376 | try: |
nothing calls this directly
no test coverage detected