# Path: simphony/engine/exceptions.py
# class EngineManagerError(Exception):
#     """Any exception related to engine manager."""
#     pass


import warnings
from enum import Enum
from abc import ABCMeta, abstractmethod
from .exceptions import EngineManagerError
           'EngineMetadata',
           'EngineManager']


class EngineInterface(Enum):
    """Represents an available interface to an engine.

    An interface is either internal or fileio. Internal interfaces use
    a python package or a shared library to talk to the underlying engine.
    FileIO, on the other hand, uses input/output files to interact with
    an engine executable.
    """
    Internal = 'internal'
    FileIO = 'fileio'


class EngineFeatureMetadata(object):
    """Represents a set of engine features.

    A feature provides a set of methods to solve a physics equation.

    Parameters
    ----------
    physics_equation: PhysicsEquation
      represents a physics equation
    methods: list
      methods to solve the equation as a list of ComputationalMethod objects
    """
    def __init__(self, physics_equation, methods):
        if not physics_equation:

# Path: simphony/engine/exceptions.py
# class EngineManagerError(Exception):
#     """Any exception related to engine manager."""
#     pass


# Path: simphony/engine/extension.py
import warnings
from enum import Enum
from abc import ABCMeta, abstractmethod
from .exceptions import EngineManagerError

           'EngineMetadata',
           'EngineManager']


class EngineInterface(Enum):
    """Represents an available interface to an engine.

    An interface is either internal or fileio. Internal interfaces use
    a python package or a shared library to talk to the underlying engine.
    FileIO, on the other hand, uses input/output files to interact with
    an engine executable.
    """
    Internal = 'internal'
    FileIO = 'fileio'


class EngineFeatureMetadata(object):
    """Represents a set of engine features.

    A feature provides a set of methods to solve a physics equation.

    Parameters
    ----------
    physics_equation: PhysicsEquation
      represents a physics equation
    methods: list
      methods to solve the equation as a list of ComputationalMethod objects
    """
    def __init__(self, physics_equation, methods):
        if not physics_equation:

            raise EngineManagerError('Physics equation must have a value.')