github.com/eth-easl/loader@v0.0.0-20230908084258-8a37e1d94279/pkg/metric/run_adf.py (about)

     1  #  MIT License
     2  #
     3  #  Copyright (c) 2023 EASL and the vHive community
     4  #
     5  #  Permission is hereby granted, free of charge, to any person obtaining a copy
     6  #  of this software and associated documentation files (the "Software"), to deal
     7  #  in the Software without restriction, including without limitation the rights
     8  #  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     9  #  copies of the Software, and to permit persons to whom the Software is
    10  #  furnished to do so, subject to the following conditions:
    11  #
    12  #  The above copyright notice and this permission notice shall be included in all
    13  #  copies or substantial portions of the Software.
    14  #
    15  #  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    16  #  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    17  #  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    18  #  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    19  #  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    20  #  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    21  #  SOFTWARE.
    22  
    23  import sys
    24  import json
    25  import numpy as np
    26  from statsmodels.tsa.stattools import adfuller
    27  
    28  import warnings
    29  warnings.filterwarnings("ignore")
    30  
    31  if __name__ == "__main__": 
    32      latencies = list(map(float, sys.argv[1].strip().split('@')))
    33      try:
    34          res = adfuller(latencies, autolag='AIC')
    35      except ValueError as e:
    36          print(json.dumps("{}"))
    37          exit()
    38      
    39  
    40      out = {
    41          "statistic": res[0] if not np.isinf(res[0]) else 99999,
    42          "pvalue": res[1],
    43          "usedlag": res[2],
    44          "nobs": res[3],
    45          "critical_vals": res[4],
    46          "icbest": res[5] if not np.isinf(res[5]) else -99999,
    47      }
    48  
    49      print(json.dumps(out))