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
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)
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)
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)
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)
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)
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)
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)
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)
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
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)
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()
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)
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)
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)