diff options
author | Vratko Polak <vrpolak@cisco.com> | 2021-03-22 17:11:21 +0100 |
---|---|---|
committer | Vratko Polak <vrpolak@cisco.com> | 2021-03-22 17:11:21 +0100 |
commit | b6fbffad32515ccf94404680cb5280c2cb561af5 (patch) | |
tree | 6f16569781e3e3627589c6fff0d7a5be0410d3f3 /resources/libraries/python/MLRsearch/ReceiveRateInterval.py | |
parent | adf5f13886e8bdd4fb224f12f10d731cadf698f3 (diff) |
MLRsearch: Support other than just two ratios
+ Change some method names and argument types:
+ Do not mention NDR and PDR, except as examples.
+ Return list of ReceiveRateInterval instead of NdrPdrResult.
+ The resulting intervals can be degenerate when hitting min/max rate.
+ Rename quantity name parts from "fraction" to "ratio".
+ Intervals are no longer tracked for each target ratio.
+ They are found dynamically from known results.
+ Add effective_loss_ratio field to avoid loss inversion effects.
+ Move some functions to separate files.
+ Bound search logic moved to MeasurementDatabase.py
+ ProgressState moved to its file.
+ WidthArithmetics.py holds small computation functions.
+ Use parameter expansion_coefficient instead of "doublings".
+ Do uneven bisect to save time when width is not power of two times goal.
+ Timeout now correctly tracked for the whole search,
not just the current phase.
+ Make logging (debug) function pluggable.
+ Added debug log messages for initial phase.
+ Do not mark as subclass if contructor signature differs.
+ Avoid re-measure on scale-limited (ASTF) profiles.
+ Remove outdated comments.
+ Bump copyright years.
Change-Id: I93f693b4f186f59030ee5ac21b78acc890109813
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
Diffstat (limited to 'resources/libraries/python/MLRsearch/ReceiveRateInterval.py')
-rw-r--r-- | resources/libraries/python/MLRsearch/ReceiveRateInterval.py | 36 |
1 files changed, 11 insertions, 25 deletions
diff --git a/resources/libraries/python/MLRsearch/ReceiveRateInterval.py b/resources/libraries/python/MLRsearch/ReceiveRateInterval.py index eff23e8bcc..993561e396 100644 --- a/resources/libraries/python/MLRsearch/ReceiveRateInterval.py +++ b/resources/libraries/python/MLRsearch/ReceiveRateInterval.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019 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: @@ -15,32 +15,18 @@ import math -from .ReceiveRateMeasurement import ReceiveRateMeasurement - 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.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( - f"measured_low is not a ReceiveRateMeasurement: " - f"{measured_low!r}" - ) - if not isinstance(measured_high, ReceiveRateMeasurement): - raise TypeError( - f"measured_high is not a ReceiveRateMeasurement: " - f"{measured_high!r}" - ) self.measured_low = measured_low self.measured_high = measured_high # Declare secondary quantities to appease pylint. @@ -61,6 +47,15 @@ class ReceiveRateInterval: ) 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. @@ -77,12 +72,3 @@ class ReceiveRateInterval: """ 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 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})" |