def test_wrong_number_of_required_interfaces(self):
     component = SearchSpaceComponent(description)
     instance = SearchSpaceComponentInstance(component)
     assert not instance.set_required_interfaces({})
     assert not instance.set_required_interfaces(
         {
             "estimator": ExtraTreesClassifier(),
             "additional": ExtraTreesClassifier(),
         })
 def test_pipeline_element_construction(self):
     component = SearchSpaceComponent(description)
     instance = SearchSpaceComponentInstance(component)
     assert instance.set_parameter_config({"step": 0.3})
     estimator = ExtraTreesClassifier()
     assert instance.set_required_interfaces({"estimator": estimator})
     pipeline_element = instance.construct_pipeline_element()
     assert isinstance(pipeline_element, RFE)
     assert pipeline_element.get_params(deep=False) == {
         "step": 0.3,
         "estimator": estimator,
         "n_features_to_select": None,
         "verbose": 0,
     }
def _assemble_component_instance(component_id, component_mapping,
                                 required_interfaces, parameter):
    logger.debug(f"Assembling {component_id}")
    logger.debug(f"Params for assembling: {parameter}")
    logger.debug(f"Components for assembling: {component_mapping}")
    logger.debug(f"Required interfaces for assembling: {required_interfaces}")
    params = {}
    if component_id in parameter:
        params = parameter[component_id]
    component = component_mapping[component_id]
    instance = SearchSpaceComponentInstance(component)
    # Create required interfaces
    if component.has_required_interfaces():
        # Get all interfaces for the current component
        interfaces = list(
            filter(
                lambda i: i["component_id"] == component_id,
                required_interfaces,
            ))
        # Create an instance for this component
        interface_instances = {}
        for interface in interfaces:
            required_interfaces.remove(interface)
            created_element = _assemble_component_instance(
                interface["satisfied_with"],
                component_mapping,
                required_interfaces,
                parameter,
            )
            if created_element is not None:
                interface_instances[interface["interface"]
                                    ["id"]] = created_element
            else:
                logger.warning(f"No instance of {interface} could be created")
        if not instance.set_required_interfaces(interface_instances):
            logger.error(
                f"Created interfaces were invalid for {component.get_name()}")
            return None
    # Set parameter and create element from configured instance
    if not instance.set_parameter_config(params):
        logger.error(
            f"Given parameter were invalid for f{component.get_name()}")
        return None
    else:
        return instance.construct_pipeline_element()
 def test_pipeline_element_construction_without_params(self):
     component = SearchSpaceComponent(description)
     instance = SearchSpaceComponentInstance(component)
     estimator = ExtraTreesClassifier()
     assert instance.set_required_interfaces({"estimator": estimator})
     assert instance.construct_pipeline_element() is None
 def test_wrong_required_interfaces(self):
     component = SearchSpaceComponent(description)
     instance = SearchSpaceComponentInstance(component)
     assert not instance.set_required_interfaces({})
 def test_missing_required_interfaces(self):
     component = SearchSpaceComponent(description)
     instance = SearchSpaceComponentInstance(component)
     assert not instance.set_required_interfaces(
         {"wrong": ExtraTreesClassifier()})