-# Copyright (c) 2018 Cisco and/or its affiliates.
+# Copyright (c) 2021 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
import math
-from ReceiveRateMeasurement import ReceiveRateMeasurement
-
-class ReceiveRateInterval(object):
+class ReceiveRateInterval:
"""Structure defining two Rr measurements, and their relation."""
def __init__(self, measured_low, measured_high):
- """Store the bound measurements after checking argument types.
+ """Store the bound measurements and call sort.
:param measured_low: Measurement for the lower bound.
:param measured_high: Measurement for the upper bound.
- :type measured_low: ReceiveRateMeasurement
- :type measured_high: ReceiveRateMeasurement
+ :type measured_low: ReceiveRateMeasurement.ReceiveRateMeasurement
+ :type measured_high: ReceiveRateMeasurement.ReceiveRateMeasurement
"""
- # TODO: Type checking is not very pythonic,
- # perhaps users can fix wrong usage without it?
- if not isinstance(measured_low, ReceiveRateMeasurement):
- raise TypeError("measured_low is not a ReceiveRateMeasurement: "
- "{low!r}".format(low=measured_low))
- if not isinstance(measured_high, ReceiveRateMeasurement):
- raise TypeError("measured_high is not a ReceiveRateMeasurement: "
- "{high!r}".format(high=measured_high))
self.measured_low = measured_low
self.measured_high = measured_high
# Declare secondary quantities to appease pylint.
"""Sort bounds by target Tr, compute secondary quantities."""
if self.measured_low.target_tr > self.measured_high.target_tr:
self.measured_low, self.measured_high = (
- self.measured_high, self.measured_low)
+ self.measured_high, self.measured_low
+ )
self.abs_tr_width = (
- self.measured_high.target_tr - self.measured_low.target_tr)
+ self.measured_high.target_tr - self.measured_low.target_tr
+ )
self.rel_tr_width = self.abs_tr_width / self.measured_high.target_tr
+ def __str__(self):
+ """Return string as half-open interval."""
+ return f"[{self.measured_low!s};{self.measured_high!s})"
+
+ def __repr__(self):
+ """Return string evaluable as a constructor call."""
+ return f"ReceiveRateInterval(measured_low={self.measured_low!r}," \
+ f"measured_high={self.measured_high!r})"
+
def width_in_goals(self, relative_width_goal):
"""Return float value.
"""
return math.log(1.0 - self.rel_tr_width) / math.log(
1.0 - relative_width_goal)
-
- def __str__(self):
- """Return string as half-open interval."""
- return "[{low!s};{high!s})".format(
- low=self.measured_low, high=self.measured_high)
-
- def __repr__(self):
- """Return string evaluable as a constructor call."""
- return ("ReceiveRateInterval(measured_low={low!r}"
- ",measured_high={high!r})".format(
- low=self.measured_low, high=self.measured_high))