# 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
        if type(self.context) is int:
            return self.context == context
        else:
            return context in self.context

    def getSplitLineWithRegexp(self, regular_exp, line, index=-1, startofline=False):
        if startofline == True and not re.match(regular_exp, line):
            return None
        if startofline == False and not re.search(regular_exp, line):
            return None

        if index == -1:
            return line.split()
        else:
            return line.split()[index]

    def getName(self):
        """
        returns the name of the StatisticReader
        """
        return self.name

    def extractStatistic(self, line):
        """
        overwrite this method for own reader subclasses
        """
        try:
            if self.regular_exp.search(line):
                data = None
                try:

# 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

        if type(self.context) is int:
            return self.context == context
        else:
            return context in self.context

    def getSplitLineWithRegexp(self, regular_exp, line, index=-1, startofline=False):
        if startofline == True and not re.match(regular_exp, line):
            return None
        if startofline == False and not re.search(regular_exp, line):
            return None

        if index == -1:
            return line.split()
        else:
            return line.split()[index]

    def getName(self):
        """
        returns the name of the StatisticReader
        """
        return self.name

    def extractStatistic(self, line):
        """
        overwrite this method for own reader subclasses
        """
        try:
            if self.regular_exp.search(line):
                data = None
                try:

                    data = self.datatype(misc.getWordAtIndex(line, self.lineindex))