def remove_node_presence(self,node,time): """ Remove node and its interactions over the period :param node: node to remove :param time: a period, couple (start, stop) or an interval """ if not isinstance(time,Intervals): time= Intervals(time) if self._graph.has_node(node): self._graph.nodes()[node]["t"]= self._graph.nodes()[node]["t"]-time if self._graph.nodes()[node]["t"].duration()==0: self._graph.remove_node(node) if self._start in time or self._end in time or time.end()==self._end: new_max = -math.inf new_min = math.inf for k,v in self.node_presence().items(): new_max = max(new_max,v.end()) new_min = min(new_min,v.start()) self._start = new_min self._end = new_max
def add_node_presence(self, n, time): """ Add presence for a node for a period :param n: node :param time: a period, couple (start, stop) or an interval """ if not isinstance(time, Intervals): time = Intervals(time) if not self._graph.has_node(n): self._graph.add_node(n, t=time) else: self._graph.nodes[n]["t"] += time self._start = min(self._start, time.start()) self._end = max(self._end, time.end())
def add_interaction(self, u, v, time): """ Add an interaction between nodes u and v at time time :param u: first node :param b: second node :param time: pair (start,end) or Intervals :return: """ if not isinstance(time, Intervals): time = Intervals(time) self.add_node_presence(u, time) self.add_node_presence(v, time) self._add_interaction_safe(u, v, time) start = time.start() end = time.end() self._start = min(self._start, start) self._end = max(self._end, end)