MCPcopy
hub / github.com/pytest-dev/pytest / _repr_compare

Method _repr_compare

src/_pytest/python_api.py:241–298  ·  view source on GitHub ↗
(self, other_side: Mapping[object, float])

Source from the content-addressed store, hash-verified

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 )

Callers

nothing calls this directly

Calls 3

_compare_approxFunction · 0.85
_approx_scalarMethod · 0.80
appendMethod · 0.80

Tested by

no test coverage detected