# Path: autonetkit/network_model/exceptions.py
# class NodeNotFound(Exception):
#     pass
# 
# Path: autonetkit/network_model/types.py
# class DeviceType(Enum):
#     ROUTER = "Router"
#     SWITCH = "Switch"
#     HOST = "Host"
#     VIRTUAL = "Virtual"
#     BROADCAST_DOMAIN = "Broadcast Domain"
# 
# class PortType(Enum):
#     PHYSICAL = "Physical"
#     LOGICAL = "Logical"


import typing
from typing import List
from autonetkit.network_model.exceptions import NodeNotFound
from autonetkit.network_model.types import DeviceType, PortType
    from autonetkit.network_model.port import Port
    from autonetkit.network_model.node import Node
    from autonetkit.network_model.topology import Topology
    @param topology:
    @return:
    """
    return filter_nodes(topology, type=DeviceType.ROUTER)


def switches(topology: 'Topology') -> List['Node']:
    """

    @param topology:
    @return:
    """
    return filter_nodes(topology, type=DeviceType.SWITCH)


def hosts(topology: 'Topology') -> List['Node']:
    """

    @param topology:
    @return:
    """
    return filter_nodes(topology, type=DeviceType.HOST)


def broadcast_domains(topology) -> List['Node']:
    """

    @param topology:
    @return:
    """

# Path: autonetkit/network_model/exceptions.py
# class NodeNotFound(Exception):
#     pass
# 
# Path: autonetkit/network_model/types.py
# class DeviceType(Enum):
#     ROUTER = "Router"
#     SWITCH = "Switch"
#     HOST = "Host"
#     VIRTUAL = "Virtual"
#     BROADCAST_DOMAIN = "Broadcast Domain"
# 
# class PortType(Enum):
#     PHYSICAL = "Physical"
#     LOGICAL = "Logical"


# Path: autonetkit/design/utils/filters.py
import typing
from typing import List
from autonetkit.network_model.exceptions import NodeNotFound
from autonetkit.network_model.types import DeviceType, PortType
    from autonetkit.network_model.port import Port
    from autonetkit.network_model.node import Node
    from autonetkit.network_model.topology import Topology

    @param topology:
    @return:
    """
    return filter_nodes(topology, type=DeviceType.ROUTER)


def switches(topology: 'Topology') -> List['Node']:
    """

    @param topology:
    @return:
    """
    return filter_nodes(topology, type=DeviceType.SWITCH)


def hosts(topology: 'Topology') -> List['Node']:
    """

    @param topology:
    @return:
    """
    return filter_nodes(topology, type=DeviceType.HOST)


def broadcast_domains(topology) -> List['Node']:
    """

    @param topology:
    @return:
    """

    return filter_nodes(topology, type=DeviceType.BROADCAST_DOMAIN)