MLRsearch: Support other than just two ratios
[csit.git] / resources / libraries / python / MLRsearch / AbstractSearchAlgorithm.py
index 08f8b7e..cca48ef 100644 (file)
@@ -1,4 +1,4 @@
-# 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:
 from abc import ABCMeta, abstractmethod
 
 
-class AbstractSearchAlgorithm(object):
+class AbstractSearchAlgorithm(metaclass=ABCMeta):
     """Abstract class defining common API for search algorithms."""
 
-    __metaclass__ = ABCMeta
-
     def __init__(self, measurer):
         """Store the rate provider.
 
         :param measurer: Object able to perform trial or composite measurements.
         :type measurer: AbstractMeasurer.AbstractMeasurer
         """
-        # TODO: Type check for AbstractMeasurer?
         self.measurer = measurer
 
     @abstractmethod
-    def narrow_down_ndr_and_pdr(
-            self, fail_rate, line_rate, packet_loss_ratio):
+    def narrow_down_intervals(
+            self, min_rate, max_rate, packet_loss_ratios):
         """Perform measurements to narrow down intervals, return them.
 
-        This will be renamed when custom loss ratio lists are supported.
-
-        :param fail_rate: Minimal target transmit rate [pps].
-        :param line_rate: Maximal target transmit rate [pps].
-        :param packet_loss_ratio: Fraction of packets lost, for PDR [1].
-        :type fail_rate: float
-        :type line_rate: float
-        :type packet_loss_ratio: float
+        :param min_rate: Minimal target transmit rate [tps].
+            Usually, tests are set to fail if search reaches this or below.
+        :param max_rate: Maximal target transmit rate [tps].
+            Usually computed from line rate and various other limits,
+            to prevent failures or duration stretching in Traffic Generator.
+        :param packet_loss_ratios: Ratios of packet loss to search for,
+            e.g. [0.0, 0.005] for NDR and PDR.
+        :type min_rate: float
+        :type max_rate: float
+        :type packet_loss_ratios: Iterable[float]
         :returns: Structure containing narrowed down intervals
             and their measurements.
-        :rtype: NdrPdrResult.NdrPdrResult
+        :rtype: List[ReceiveRateInterval.ReceiveRateInterval]
         """
-        # TODO: Do we agree on arguments related to precision or trial duration?
-        pass