# 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"
# 
# class IpetNodeAttributeError(EditableAttributeError):
#     """
#     subclass to allow for richer EditableAttributeErrors
#     """
# 
#     def __init__(self, *args):
#         """
#         constructs an IpetNodeAttributeError
#         """
#         super(IpetNodeAttributeError, self).__init__(*args)
# 
# Path: ipet/evaluation/TestSets.py
# TESTSET_MIPLIB2017 = "MIPLIB2017"
# TESTSET_MIPLIB2010 = "MIPLIB2010"
# TESTSET_MIPLIB2003 = "MIPLIB2003"
# TESTSET_MIPLIB3 = "MIPLIB3"
# TESTSET_CORAL = "COR@L"
# TESTSET_MMM = "MMM"
# TESTSET_MMM_COMPL = "MMM compl"
# TESTSET_MINLP2 = "MINLP2"
# TESTSET_MINLP2_CONVEX = "MINLP2-convex"
# TESTSET_MINLP2_NONCONVEX = "MINLP2-nonconvex"
# def getTestSetByName(testset : str = TESTSET_MIPLIB2010) -> list:
# def getTestSets():


import xml.etree.ElementTree as ElementTree
import numpy as np
import logging
import pandas as pd
from ipet.concepts import IpetNode, IpetNodeAttributeError
from ipet.evaluation import TestSets
        return child.__class__ is IPETValue

    def addChild(self, child):
        self.values.append(child)
        self._updatevalueset = True

    def removeChild(self, child):
        self.values.remove(child)
        self._updatevalueset = True

    def getActiveValues(self):
        return [x for x in self.values if x.isActive()]

    def getRequiredOptionsByAttribute(self, attr):
        return self.attribute2Options.get(attr, super(IPETFilter, self).getRequiredOptionsByAttribute(attr))

    def checkAndUpdateValueSet(self, dtype = None):
        """Update the value set of this filter if necessary
        """
        if not self._updatevalueset:
            return

        self.valueset = set([x.getValue(dtype) for x in self.getActiveValues()])
        updateset = set()

        #
        # check for test set names among the values
        #
        for i in self.valueset:


# 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"
# 
# class IpetNodeAttributeError(EditableAttributeError):
#     """
#     subclass to allow for richer EditableAttributeErrors
#     """
# 
#     def __init__(self, *args):
#         """
#         constructs an IpetNodeAttributeError
#         """
#         super(IpetNodeAttributeError, self).__init__(*args)
# 
# Path: ipet/evaluation/TestSets.py
# TESTSET_MIPLIB2017 = "MIPLIB2017"
# TESTSET_MIPLIB2010 = "MIPLIB2010"
# TESTSET_MIPLIB2003 = "MIPLIB2003"
# TESTSET_MIPLIB3 = "MIPLIB3"
# TESTSET_CORAL = "COR@L"
# TESTSET_MMM = "MMM"
# TESTSET_MMM_COMPL = "MMM compl"
# TESTSET_MINLP2 = "MINLP2"
# TESTSET_MINLP2_CONVEX = "MINLP2-convex"
# TESTSET_MINLP2_NONCONVEX = "MINLP2-nonconvex"
# def getTestSetByName(testset : str = TESTSET_MIPLIB2010) -> list:
# def getTestSets():


# Path: ipet/evaluation/IPETFilter.py
import xml.etree.ElementTree as ElementTree
import numpy as np
import logging
import pandas as pd
from ipet.concepts import IpetNode, IpetNodeAttributeError
from ipet.evaluation import TestSets

        return child.__class__ is IPETValue

    def addChild(self, child):
        self.values.append(child)
        self._updatevalueset = True

    def removeChild(self, child):
        self.values.remove(child)
        self._updatevalueset = True

    def getActiveValues(self):
        return [x for x in self.values if x.isActive()]

    def getRequiredOptionsByAttribute(self, attr):
        return self.attribute2Options.get(attr, super(IPETFilter, self).getRequiredOptionsByAttribute(attr))

    def checkAndUpdateValueSet(self, dtype = None):
        """Update the value set of this filter if necessary
        """
        if not self._updatevalueset:
            return

        self.valueset = set([x.getValue(dtype) for x in self.getActiveValues()])
        updateset = set()

        #
        # check for test set names among the values
        #
        for i in self.valueset:


            if i in TestSets.getTestSets():