Пример #1
0
    def create_node(self, component_id_1: Optional[int] = None, component_id_2: Optional[int] = None) -> nd.NodeBuilder:
        """
         :raise BuildWarning
        """
        if component_id_1 is not None and component_id_1 not in self.get_components().keys():
            msg = f"Component 1 with ({component_id_1} isn't in the circuit {self.get_id()} and it isn't attached to " \
                  f"the node."
            log.warning(msg)
            raise BuildWarning(msg)

        if component_id_2 is not None and component_id_2 not in self.get_components().keys():
            msg = f"Component 2 with ({component_id_2} isn't in the circuit {self.get_id()} and it isn't attached to " \
                   f"the node."
            log.warning(msg)
            raise BuildWarning(msg)

        next_id = self._id_count.next
        # NodeBuilder can raise a BuildWarning.
        new_node = nd.NodeBuilder(next_id, component_id_1, component_id_2)
        self._nodes[next_id] = new_node
        refrigerant = self._refrigerant
        if refrigerant is not None:
            new_node._set_refrigerant(refrigerant)
        ref_lib = self._ref_lib
        if ref_lib is not None:
            new_node._set_refrigerant_library(ref_lib)
        return new_node
Пример #2
0
 def remove_component(self, component_id: int) -> None:
     """
     :raise BuildWarning
     """
     try:
         self._components_id.remove(component_id)
     except ValueError:
         msg = f"The component {component_id} isn't attached to the node {self.get_id()}."
         raise BuildWarning(msg)
Пример #3
0
 def set_attribute(self, attribute_name: str, value: float) -> None:
     """
     :raise BuildWarning
     """
     if attribute_name in self._component_info.get_properties():
         cmp_property = self._component_info.get_property(attribute_name)
         if cmp_property.is_correct(value):
             self._component_data[attribute_name] = value
         else:
             component_key = self._component_info.get_component_key()
             msg = f"Component {self.get_id()}, type {component_key}, the {attribute_name} can't be {str(value)}."
             log.warning(msg)
             raise BuildWarning(msg)
     else:
         component_key = self._component_info.get_component_key()
         msg = f"Component {self.get_id()}, type {component_key} doesn't have the attribute {attribute_name}."
         log.warning(msg)
         raise BuildWarning(msg)
Пример #4
0
 def get_component(self, component_id: int) -> cmp.ComponentBuilder:
     """
     :raise BuildWarning
     """
     try:
         return self._components[component_id]
     except KeyError:
         msg = f"Node {component_id} isn't in the circuit."
         log.warning(msg)
         raise BuildWarning(msg)
Пример #5
0
 def get_node(self, node_id: int) -> nd.NodeBuilder:
     """
     :raise BuildWarning
     """
     try:
         return self._nodes[node_id]
     except KeyError:
         msg = f"Node {node_id} isn't in the circuit."
         log.warning(msg)
         raise BuildWarning(msg)
Пример #6
0
 def remove_attribute(self, attribute_name: str) -> None:
     """
     :raise BuildWarning
     """
     if attribute_name in self._component_data:
         del self._component_data[attribute_name]
     else:
         msg = f"Component {self.get_id()} doesn't have {attribute_name}."
         log.warning(msg)
         raise BuildWarning(msg)
Пример #7
0
 def add_component(self, component_id: int) -> None:
     """
     :raise BuildWarning
     """
     if component_id not in self._components_id:
         self._components_id.append(component_id)
     else:
         msg = f"Component {component_id} is already attached at the node {self.get_id()}."
         log.warning(msg)
         raise BuildWarning(msg)
Пример #8
0
 def set_refrigerant(self, refrigerant: str) -> None:
     """
     :raise BuildWarning
     """
     try:
         self._refrigerant = StrRestricted(refrigerant)
     except PropertyValueError as e:
         log.warning(e)
         raise BuildWarning(e)
     # Only for NodeInfoFactory works with NodeBuilder object.
     for node_id in self.get_nodes():
         self.get_node(node_id)._set_refrigerant(refrigerant)
Пример #9
0
    def remove_outlet_node(self, outlet_pos: int) -> None:
        """Remove node from an outlet position (first position = 0). To remove node using node_id use remove_node.

        :raise BuildWarning
        """
        try:
            self._outlet_nodes_id[outlet_pos] = None
        except IndexError:
            msg = f"Component {self.get_id()} has only {len(self._outlet_nodes_id)} outlet nodes and can remove a " \
                  f"node in the position {outlet_pos}."
            log.warning(msg)
            raise BuildWarning(msg)
Пример #10
0
    def add_outlet_node(self, outlet_pos: int, node_id: int) -> None:
        """Add outlet node to the component in the position specified (first position = 0).

        :raise BuildWarning
        """
        if outlet_pos >= len(self._outlet_nodes_id):
            msg = f"Component {self.get_id()} has only {len(self._inlet_nodes_id)} outlet nodes and can add a node in" \
                  f" the position {outlet_pos}."
            log.warning(msg)
            raise BuildWarning(msg)
        if node_id in self._inlet_nodes_id:
            self._outlet_nodes_id[outlet_pos] = node_id
            msg = f"The node {node_id} is already attached to inlet nodes of the component {self.get_id()}."
            log.warning(msg)
            raise BuildWarning(msg)
        elif node_id in self._outlet_nodes_id:
            msg = f"The node {node_id} is already attached to outlet nodes of the component {self.get_id()}."
            log.warning(msg)
            raise BuildWarning(msg)
        else:
            self._outlet_nodes_id[outlet_pos] = node_id
Пример #11
0
 def remove_node(self, node_id: int) -> None:
     """
     :raise BuildWarning
     """
     if node_id in self._inlet_nodes_id:
         index = self._inlet_nodes_id.index(node_id)
         self._inlet_nodes_id[index] = None
     elif node_id in self._outlet_nodes_id:
         index = self._outlet_nodes_id.index(node_id)
         self._outlet_nodes_id[index] = None
     else:
         msg = f"The node {node_id} is not attached to component {self.get_id()}."
         log.warning(msg)
         raise BuildWarning(msg)
Пример #12
0
 def __init__(self, id_: int, component_type: str) -> None:
     """
     :raise BuildWaring: if component_type is not a string.
     """
     self._id = id_
     try:
         self._component_type = StrRestricted(component_type)
     except PropertyValueError as e:
         log.warning(e)
         raise BuildWarning(e)
     self._component_data = {}
     self._component_info = ComponentInfoFactory().get(
         self.get_component_type())
     self._inlet_nodes_id = [None] * self._component_info.get_inlet_nodes()
     self._outlet_nodes_id = [None
                              ] * self._component_info.get_outlet_nodes()
Пример #13
0
 def remove_component(self, rm_component: cmp.ComponentBuilder) -> None:
     """
     :raise BuildWarning
     """
     rm_component_id = rm_component.get_id()
     if rm_component_id in self.get_components().keys():
         # Check that the component is not use in nodes
         attached_nodes = rm_component.get_attached_nodes()
         for node_id in attached_nodes:
             node = self.get_node(node_id)
             node.remove_component(rm_component_id)
         # Delete ComponentBuilder object
         del self._components[rm_component_id]
     else:
         msg = f"The component {rm_component_id} can't be deleted, isn't in the circuit."
         log.warning(msg)
         raise BuildWarning(msg)
Пример #14
0
 def remove_node(self, rm_node: nd.NodeBuilder) -> None:
     """
     :raise BuildWarning
     """
     rm_node_id = rm_node.get_id()
     if rm_node_id in self.get_nodes().keys():
         # Check the node is not use in components
         attached_components = rm_node.get_components()
         for component_id in attached_components:
             component = self.get_component(component_id)
             component.remove_node(rm_node_id)
         # Delete NodeBuilder object
         del self._components[rm_node_id]
     else:
         msg = f"The node {rm_node_id} can't be deleted, isn't in the circuit."
         log.warning(msg)
         raise BuildWarning(msg)
Пример #15
0
 def create_node(self, new_node: nd.NodeBuilder) -> nd.NodeBuilder:
     """
      :raise BuildWarning
     """
     if isinstance(new_node, nd.NodeBuilder):
         self._id_count.add_used_id(new_node.get_id())
         self._nodes[new_node.get_id()] = new_node
         refrigerant = self._refrigerant
         if refrigerant is not None:
             new_node._set_refrigerant(refrigerant)
         ref_lib = self._ref_lib
         if ref_lib is not None:
             new_node._set_refrigerant_library(ref_lib)
         return new_node
     else:
         msg = "New node can't be added, isn't a NodeBuilder"
         log.warning(msg)
         raise BuildWarning(msg)