# Path: ipet/concepts/IPETNode.py
# class IpetNode(Editable):
#     """
#     A Node is an interface to an XML-like ancestor-structure
#     """
#     active = True
#     _attributes2options = {"active":[True, False]}
#     deprecatedattrdir = {}
#     
#     def __init__(self, active = True, **kw):
#         """
#         constructs a new IpetNode
# 
#         Parameters
#         ----------
#         active : True or "True" if this element should be active, False otherwise
#         """
#         self.set_active(active)
# 
#         for d, message in self.deprecatedattrdir.items():
#             if d in kw:
#                 logger.warning("Warning : The attribute '{0}' is deprecated and will be ignored; {1}. ".format(d, message))
# 
#     def addChild(self, child):
#         """
#         append a child to this node's children
#         """
#         pass
#     
#     def getChildren(self):
#         """
#         return a list of all children of this node
#         """
#         return None
#     
#     def acceptsAsChild(self, child):
#         """
#         returns whether this node accepts node 'child' as child
#         """
#         return False
#     
#     def removeChild(self, child):
#         """
#         remove the child from this node's children.
#         """
#         pass
#     
#     def isActive(self):
#         """
#         returns True if this node is currently active, False otherwise
#         """
#         return self.active
#     
#     def set_active(self, active):
#         self.active = True if active in [True, "True"] else False
# 
#     def getEditableAttributes(self):
#         """
#         returns all editable attributes
#         """
#         return ["active"]
# 
#     def getRequiredOptionsByAttribute(self, attr):
#         return self._attributes2options.get(attr)
# 
#     @staticmethod
#     def getNodeTag():
#         return "Node"
# 
# Path: ipet/misc/misc.py
# FLOAT_INFINITY = 1e20
# FLOAT_LARGE = 1e15
# DEFAULT_MIN_GEOM_MEAN = 1.0
#     FLOAT_INFINITY = infinity
# def sortingKeyContext(context):
# def filenameGetContext(filename):
# def getWordAtIndex(line : str, index : int) -> str:
# def getNumberAtIndex(line : str, index : int) -> str:
# def getSoluFileProbName(probname):
# def floatPrint(number, digitsbef=16, digitsafter=9, dispchar='g'):
# def getTexName(name):
# def getCplexGap(value, referencevalue):
# def getGap(value : float, referencevalue : float, useCplexGap : bool=False) -> float:
# def listGetArithmeticMean(listofnumbers):
# def iqr(listofnumbers):
# def lQuart(listofnumbers):
# def uQuart(listofnumbers):
# def shmean(listofnumbers, shiftby=10.0):
# def gemean(listofnumbers, mingeommean=DEFAULT_MIN_GEOM_MEAN):
# def listGetGeomMean(listofnumbers, mingeommean=DEFAULT_MIN_GEOM_MEAN):
# def listGetShiftedGeometricMean(listofnumbers, shiftby=10.0):
# def getVariabilityScore(listofnumbers):
# def isInfinite(value : float) -> bool:
# def getInfinity() -> float:
# def setInfinity(infinity : float):
# def cutString(string, char='_', maxlength=-1):
# def listGetMinColWidth(listofitems):
# def strConcat(strings : list) -> str:
# def meanOrConcat(l : list):
# def saveAsXML(nodeobject, filename : str) -> None:
# def convertTimeStamp(timestamp : float) -> str:
# 
# Path: ipet/Key.py
# CONTEXT_LOGFILE = 1  # the log file of a solver which most readers are reading from
# CONTEXT_ERRFILE = 2  # the error file of a solver
# CONTEXT_SETFILE = 3  # the settings file used for solving
# CONTEXT_TRACEFILE = 5
# CONTEXT_METAFILE = 0  # the metadata
#     MINIMIZE = 1
#     MAXIMIZE = -1
# class SolverStatusCodes:
# class ProblemStatusCodes:
# class ObjectiveSenseCode:
#     def getBestStatus(*args):
#     def getWorstStatus(*args):
# def solverToProblemStatusCode(solverstatus : int) -> str:


import re
import logging
from ipet.concepts import IpetNode
from ipet.misc import misc
from ipet import Key
# -*- coding: utf-8 -*-
"""
The MIT License (MIT)

Copyright (c) 2018 Zuse Institute Berlin, www.zib.de

Permissions are granted as stated in the license file you have obtained
with this software. If you find the library useful for your purpose,
please refer to README.md for how to cite IPET.

@author: Gregor Hendel
"""

logger = logging.getLogger(__name__)

class StatisticReader(IpetNode):
    """
    base class for all statistic readers - readers should always inherit from this base class for minimal implementation
    effort

    readers only need to overwrite the methods extractStatistic() and perhaps execEndOfProb()
    """

    name = 'NO_NAME_DEFINED_YET'
    regular_exp = re.compile('')
    datakey = 'NO KEY'
    datatype = float
    lineindex = -1


# Path: ipet/concepts/IPETNode.py
# class IpetNode(Editable):
#     """
#     A Node is an interface to an XML-like ancestor-structure
#     """
#     active = True
#     _attributes2options = {"active":[True, False]}
#     deprecatedattrdir = {}
#     
#     def __init__(self, active = True, **kw):
#         """
#         constructs a new IpetNode
# 
#         Parameters
#         ----------
#         active : True or "True" if this element should be active, False otherwise
#         """
#         self.set_active(active)
# 
#         for d, message in self.deprecatedattrdir.items():
#             if d in kw:
#                 logger.warning("Warning : The attribute '{0}' is deprecated and will be ignored; {1}. ".format(d, message))
# 
#     def addChild(self, child):
#         """
#         append a child to this node's children
#         """
#         pass
#     
#     def getChildren(self):
#         """
#         return a list of all children of this node
#         """
#         return None
#     
#     def acceptsAsChild(self, child):
#         """
#         returns whether this node accepts node 'child' as child
#         """
#         return False
#     
#     def removeChild(self, child):
#         """
#         remove the child from this node's children.
#         """
#         pass
#     
#     def isActive(self):
#         """
#         returns True if this node is currently active, False otherwise
#         """
#         return self.active
#     
#     def set_active(self, active):
#         self.active = True if active in [True, "True"] else False
# 
#     def getEditableAttributes(self):
#         """
#         returns all editable attributes
#         """
#         return ["active"]
# 
#     def getRequiredOptionsByAttribute(self, attr):
#         return self._attributes2options.get(attr)
# 
#     @staticmethod
#     def getNodeTag():
#         return "Node"
# 
# Path: ipet/misc/misc.py
# FLOAT_INFINITY = 1e20
# FLOAT_LARGE = 1e15
# DEFAULT_MIN_GEOM_MEAN = 1.0
#     FLOAT_INFINITY = infinity
# def sortingKeyContext(context):
# def filenameGetContext(filename):
# def getWordAtIndex(line : str, index : int) -> str:
# def getNumberAtIndex(line : str, index : int) -> str:
# def getSoluFileProbName(probname):
# def floatPrint(number, digitsbef=16, digitsafter=9, dispchar='g'):
# def getTexName(name):
# def getCplexGap(value, referencevalue):
# def getGap(value : float, referencevalue : float, useCplexGap : bool=False) -> float:
# def listGetArithmeticMean(listofnumbers):
# def iqr(listofnumbers):
# def lQuart(listofnumbers):
# def uQuart(listofnumbers):
# def shmean(listofnumbers, shiftby=10.0):
# def gemean(listofnumbers, mingeommean=DEFAULT_MIN_GEOM_MEAN):
# def listGetGeomMean(listofnumbers, mingeommean=DEFAULT_MIN_GEOM_MEAN):
# def listGetShiftedGeometricMean(listofnumbers, shiftby=10.0):
# def getVariabilityScore(listofnumbers):
# def isInfinite(value : float) -> bool:
# def getInfinity() -> float:
# def setInfinity(infinity : float):
# def cutString(string, char='_', maxlength=-1):
# def listGetMinColWidth(listofitems):
# def strConcat(strings : list) -> str:
# def meanOrConcat(l : list):
# def saveAsXML(nodeobject, filename : str) -> None:
# def convertTimeStamp(timestamp : float) -> str:
# 
# Path: ipet/Key.py
# CONTEXT_LOGFILE = 1  # the log file of a solver which most readers are reading from
# CONTEXT_ERRFILE = 2  # the error file of a solver
# CONTEXT_SETFILE = 3  # the settings file used for solving
# CONTEXT_TRACEFILE = 5
# CONTEXT_METAFILE = 0  # the metadata
#     MINIMIZE = 1
#     MAXIMIZE = -1
# class SolverStatusCodes:
# class ProblemStatusCodes:
# class ObjectiveSenseCode:
#     def getBestStatus(*args):
#     def getWorstStatus(*args):
# def solverToProblemStatusCode(solverstatus : int) -> str:


# Path: ipet/parsing/StatisticReader.py
import re
import logging
from ipet.concepts import IpetNode
from ipet.misc import misc
from ipet import Key

# -*- coding: utf-8 -*-
"""
The MIT License (MIT)

Copyright (c) 2018 Zuse Institute Berlin, www.zib.de

Permissions are granted as stated in the license file you have obtained
with this software. If you find the library useful for your purpose,
please refer to README.md for how to cite IPET.

@author: Gregor Hendel
"""

logger = logging.getLogger(__name__)

class StatisticReader(IpetNode):
    """
    base class for all statistic readers - readers should always inherit from this base class for minimal implementation
    effort

    readers only need to overwrite the methods extractStatistic() and perhaps execEndOfProb()
    """

    name = 'NO_NAME_DEFINED_YET'
    regular_exp = re.compile('')
    datakey = 'NO KEY'
    datatype = float
    lineindex = -1


    context = Key.CONTEXT_LOGFILE