assertStructuredAlmostEqual

(函数来自 pyomo.common.unittest)

pyomo.common.unittest.assertStructuredAlmostEqual(first, second, places=None, msg=None, delta=None, reltol=None, abstol=None, allow_second_superset=False, item_callback=<function _floatOrCall>, exception=<class 'ValueError'>, formatter=<function _defaultFormatter>)[source]

测试第一个和第二个在容差范围内是否相等

这使用绝对(abstol)和相对(reltol)容差来比较第一个和第二个。它将递归地深入到序列和映射容器中(允许对包括列表和字典在内的结构化数据进行相对比较)。

placesdelta 是为了与 assertAlmostEqual 兼容而支持的。如果提供了 places,则 abstol 计算为 10**-placesdeltaabstol 的别名。

如果未指定{abstol, reltol, places, delta}中的任何一个, reltol默认为1e-7。

如果 allow_second_superset 为 True,则:

  • 只有在first中的映射中找到的键/值对才会与second进行比较(允许second中的映射包含额外的键)

  • 只有在first序列中找到的值才会与second进行比较(允许second序列包含额外的值)

相对误差是针对数值计算的,公式如下:

abs(first - second) / max(abs(first), abs(second))

只有当 first != second 时(从而避免除以零的错误)。

项目(除了序列/映射容器、匹配字符串和满足first is second的项目之外的条目)在测试相等性和相对容差之前传递给item_callback

如果 firstsecond 在容差范围内不相等,则引发 exception

Parameters:
  • first – 要比较的第一个值

  • second – 要比较的第二个值

  • places (int) – 如果firstsecond的差值在places位小数之间,则认为它们是等价的;等同于abstol = 10**-places(为了与assertAlmostEqual兼容而包含)

  • msg (str) – 失败时引发的消息

  • delta (float) – abstol 的别名

  • abstol (float) – 绝对容差。如果firstsecond的绝对差小于abstol,则认为它们是等价的。

  • reltol (float) – 相对容差。如果firstsecond的绝对差除以firstsecond中较大的一个小于reltol,则认为它们是等价的。

  • allow_second_superset (bool) – 如果为True,则在第二个容器中找到的额外条目不会触发失败。

  • item_callback (function) – 除了序列/映射容器、匹配字符串和满足is条件的项之外,其他项都会传递给此回调函数,以生成用于比较的(名义上为浮点数的)值。

  • 异常 (Exception) – 当firstsecond不“几乎相等”时引发的异常。

  • formatter (function) – 用于生成最终失败消息的回调函数(为了与unittest兼容)