(self, other_side: Mapping[object, float])
| 239 | return f"approx({ ({k: self._approx_scalar(v) for k, v in self.expected.items()})!r})" |
| 240 | |
| 241 | def _repr_compare(self, other_side: Mapping[object, float]) -> list[str]: |
| 242 | import math |
| 243 | |
| 244 | if len(self.expected) != len(other_side): |
| 245 | return [ |
| 246 | "Impossible to compare mappings with different sizes.", |
| 247 | f"Lengths: {len(self.expected)} and {len(other_side)}", |
| 248 | ] |
| 249 | |
| 250 | if self.expected.keys() != other_side.keys(): |
| 251 | return [ |
| 252 | "comparison failed.", |
| 253 | f"Mappings has different keys: expected {self.expected.keys()} but got {other_side.keys()}", |
| 254 | ] |
| 255 | |
| 256 | approx_side_as_map = { |
| 257 | k: self._approx_scalar(v) for k, v in self.expected.items() |
| 258 | } |
| 259 | |
| 260 | number_of_elements = len(approx_side_as_map) |
| 261 | max_abs_diff = -math.inf |
| 262 | max_rel_diff = -math.inf |
| 263 | different_ids = [] |
| 264 | for approx_key, approx_value in approx_side_as_map.items(): |
| 265 | other_value = other_side[approx_key] |
| 266 | if approx_value != other_value: |
| 267 | if approx_value.expected is not None and other_value is not None: |
| 268 | try: |
| 269 | max_abs_diff = max( |
| 270 | max_abs_diff, abs(approx_value.expected - other_value) |
| 271 | ) |
| 272 | if approx_value.expected == 0.0: |
| 273 | max_rel_diff = math.inf |
| 274 | else: |
| 275 | max_rel_diff = max( |
| 276 | max_rel_diff, |
| 277 | abs( |
| 278 | (approx_value.expected - other_value) |
| 279 | / approx_value.expected |
| 280 | ), |
| 281 | ) |
| 282 | except ZeroDivisionError: |
| 283 | pass |
| 284 | different_ids.append(approx_key) |
| 285 | |
| 286 | message_data = [ |
| 287 | (str(key), str(other_side[key]), str(approx_side_as_map[key])) |
| 288 | for key in different_ids |
| 289 | ] |
| 290 | |
| 291 | return _compare_approx( |
| 292 | self.expected, |
| 293 | message_data, |
| 294 | number_of_elements, |
| 295 | different_ids, |
| 296 | max_abs_diff, |
| 297 | max_rel_diff, |
| 298 | ) |
nothing calls this directly
no test coverage detected