Exemple #1
0
 def node_by_id(self, id_):
     """ Returns first node with given id. """
     for n in self.nodes():
         if (n.id == id_):
             return n
     logger.error('Network has no node with id %d.' % id_)
     return None
Exemple #2
0
 def node_by_id(self, id_):
     """ Returns first node with given id. """
     for n in self.nodes():
         if (n.id == id_):
             return n
     logger.error('Network has no node with id %d.' % id_)
     return None
Exemple #3
0
    def add_node(self, node=None, pos=None, ori=None, commRange=None):
        """
        Add node to network.

        Attributes:
          `node` -- node to add, default: new node is created
          `pos` -- position (x,y), default: random free position in environment
          `ori` -- orientation from 0 to 2*pi, default: random orientation

        """
        if (not node):
            node = Node(commRange=commRange)
        assert(isinstance(node, Node))
        if not node.network:
            node.network = self
        else:
            logger.warning('Node is already in another network, can\'t add.')
            return None

        pos = pos if pos is not None else self.find_random_pos(n=100)
        ori = ori if ori is not None else rand() * 2 * pi
        ori = ori % (2 * pi)

        if (self._environment.is_space(pos)):
            Graph.add_node(self, node)
            self.pos[node] = array(pos)
            self.ori[node] = ori
            self.labels[node] = str(node.id)
            logger.debug('Node %d is placed on position %s.' % (node.id, pos))
            self.recalculate_edges([node])
        else:
            logger.error('Given position is not free space.')
        return node
Exemple #4
0
    def generate_random_network(self, net=None):
        """Basic method: generates network with randomly positioned nodes."""
        #TODO: try some more advanced algorithm for situation when
        # both connected network and too small degree are needed
        # that is agnostic to actual dimensions of the environment
        steps = [0]
        while True:
            net = self._create_modify_network(net, steps[-1])
            # print "here"
            if not net:
                break
            steps.append(self._are_conditions_satisfied(net))
            if len(steps)>1000:
                break
            
            # Area was not being set earlier, resulting in a divide-by-zero.
            w, h = net.environment.im.shape
            self.area = w*h
            
            if steps[-1]==0:
                self.net_density = 1.0 * len(net)/self.area
                return net

        logger.error("Could not generate connected network with given "
                     "parameters. Try removing and/or modifying some of "
                     "them.")
Exemple #5
0
    def add_node(self, node=None, pos=None, ori=None, commRange=None):
        """
        Add node to network.

        Attributes:
          `node` -- node to add, default: new node is created
          `pos` -- position (x,y), default: random free position in environment
          `ori` -- orientation from 0 to 2*pi, default: random orientation

        """
        if (not node):
            node = Node(commRange=commRange)
        assert(isinstance(node, Node))
        if not node.network:
            node.network = self
        else:
            logger.warning('Node is already in another network, can\'t add.')
            return None

        pos = pos if pos is not None else self.find_random_pos(n=100)
        ori = ori if ori is not None else rand() * 2 * pi
        ori = ori % (2 * pi)

        if (self._environment.is_space(pos)):
            Graph.add_node(self, node)
            self.pos[node] = array(pos)
            self.ori[node] = ori
            self.labels[node] = str(node.id)
            logger.debug('Node %d is placed on position %s.' % (node.id, pos))
            self.recalculate_edges([node])
        else:
            logger.error('Given position is not free space.')
        return node
Exemple #6
0
 def remove_node(self, node):
     """ Remove node from network. """
     if node not in self.nodes():
         logger.error("Node not in network")
         return
     Graph.remove_node(self, node)
     del self.pos[node]
     del self.labels[node]
     node.network = None
     logger.info('Node with id %d is removed.' % node.id)
Exemple #7
0
 def __delattr__(self, name):
     if name == "_wrapped":
         raise TypeError("can't delete _wrapped.")
     if self._wrapped is None:
         self._setup()
         delattr(self._wrapped, name)
     else:
         logger.error('For manual settings override use '
                      'settings.configure(SETTING1=val1, SETTING2=val2) '
                      'or PYMOTE_SETTINGS_MODULE.')
Exemple #8
0
 def remove_node(self, node):
     """ Remove node from network. """
     if node not in self.nodes():
         logger.error("Node not in network")
         return
     Graph.remove_node(self, node)
     del self.pos[node]
     del self.labels[node]
     node.network = None
     logger.debug('Node with id %d is removed.' % node.id)
Exemple #9
0
 def __delattr__(self, name):
     if name == "_wrapped":
         raise TypeError("can't delete _wrapped.")
     if self._wrapped is None:
         self._setup()
         delattr(self._wrapped, name)
     else:
         logger.error('For manual settings override use '
                      'settings.configure(SETTING1=val1, SETTING2=val2) '
                      'or PYMOTE_SETTINGS_MODULE.')
Exemple #10
0
    def add_node(self,
                 node=None,
                 pos=None,
                 ori=None,
                 commRange=None,
                 find_random=False):
        """
        Add node to network.

        Attributes:
          `node` -- node to add, default: new node is created
          `pos` -- position (x,y), default: random free position in environment
          `ori` -- orientation from 0 to 2*pi, default: random orientation

        """
        if (not node):
            node = Node(commRange=commRange or self.comm_range)
        if not node.commRange:
            node.commRange = commRange or self.comm_range

        assert (isinstance(node, Node))
        if not node.network:
            node.network = self
        else:
            logger.warning('Node is already in another network, can\'t add.')
            return None

        pos = pos if (pos is not None
                      and not isnan(pos[0])) else self.find_random_pos(n=100)
        ori = ori if ori is not None else rand() * 2 * pi
        ori = ori % (2 * pi)

        got_random = False
        if find_random and not self._environment.is_space(pos):
            pos = self.find_random_pos(n=100)
            got_random = True

        if (self._environment.is_space(pos)):
            Graph.add_node(self, node)
            self.pos[node] = array(pos)
            self.ori[node] = ori
            self.labels[node] = ('C' if node.type == 'C' else "") + str(
                node.id)
            logger.debug('Node %d is placed on position %s %s %s' %
                         (node.id, pos, '[energy=%5.3f]' % node.power.energy
                          if node.power.energy != EnergyModel.E_INIT else '',
                          'Random' if got_random else ''))
            self.recalculate_edges([node])
        else:
            Node.cid -= 1
            logger.error('Given position is not free space. [%s] %s' %
                         (Node.cid, pos))
            node = None
        return node
Exemple #11
0
 def __setattr__(self, name, value):
     if name == "_wrapped":
         # Assign to __dict__ to avoid infinite __setattr__ loops.
         self.__dict__["_wrapped"] = value
     else:
         if self._wrapped is None:
             self._setup()
             setattr(self._wrapped, name, value)
         else:
             logger.error('For manual settings override use'
                          ' settings.configure(SETTING1=value1,'
                          ' SETTING2=value2) or PYMOTE_SETTINGS_MODULE.')
Exemple #12
0
 def __setattr__(self, name, value):
     if name == "_wrapped":
         # Assign to __dict__ to avoid infinite __setattr__ loops.
         self.__dict__["_wrapped"] = value
     else:
         if self._wrapped is None:
             self._setup()
             setattr(self._wrapped, name, value)
         else:
             logger.error('For manual settings override use'
                          ' settings.configure(SETTING1=value1,'
                          ' SETTING2=value2) or PYMOTE_SETTINGS_MODULE.')
Exemple #13
0
    def add_node(self, node=None, pos=None, ori=None, commRange=None, find_random=False):
        """
        Add node to network.

        Attributes:
          `node` -- node to add, default: new node is created
          `pos` -- position (x,y), default: random free position in environment
          `ori` -- orientation from 0 to 2*pi, default: random orientation

        """
        if (not node):
            node = Node(commRange=commRange or self.comm_range)
        if not node.commRange:
            node.commRange = commRange or self.comm_range

        assert(isinstance(node, Node))
        if not node.network:
            node.network = self
        else:
            logger.warning('Node is already in another network, can\'t add.')
            return None

        pos = pos if (pos is not None and not isnan(pos[0])) else self.find_random_pos(n=100)
        ori = ori if ori is not None else rand() * 2 * pi
        ori = ori % (2 * pi)

        got_random = False
        if find_random and not self._environment.is_space(pos):
            pos = self.find_random_pos(n=100)
            got_random = True

        if (self._environment.is_space(pos)):
            Graph.add_node(self, node)
            self.pos[node] = array(pos)
            self.ori[node] = ori
            self.labels[node] = ('C' if node.type == 'C' else "") + str(node.id)
            logger.debug('Node %d is placed on position %s %s %s'
                         % (node.id, pos,
                            '[energy=%5.3f]' %node.power.energy
                                    if node.power.energy != EnergyModel.E_INIT  else '',
                            'Random' if got_random else ''))
            self.recalculate_edges([node])
        else:
            Node.cid -= 1
            logger.error('Given position is not free space. [%s] %s' % (Node.cid, pos))
            node = None
        return node
Exemple #14
0
    def generate_random_network(self, net=None):
        """Basic method: generates network with randomly positioned nodes."""
        #TODO: try some more advanced algorithm for situation when
        # both connected network and too small degree are needed
        # that is agnostic to actual dimensions of the environment
        steps = [0]
        while True:
            net = self._create_modify_network(net, steps[-1])
            if not net:
                break
            steps.append(self._are_conditions_satisfied(net))
            if len(steps)>1000:
                break
            if steps[-1]==0:
                return net

        logger.error("Could not generate connected network with given "
                     "parameters. Try removing and/or modifying some of "
                     "them.")
Exemple #15
0
    def generate_random_network(self, net=None):
        """Basic method: generates network with randomly positioned nodes."""
        #TODO: try some more advanced algorithm for situation when
        # both connected network and too small degree are needed
        # that is agnostic to actual dimensions of the environment
        steps = [0]
        while True:
            net = self._create_modify_network(net, steps[-1])
            if not net:
                break
            steps.append(self._are_conditions_satisfied(net))
            if len(steps) > 1000:
                break
            if steps[-1] == 0:
                return net

        logger.error("Could not generate connected network with given "
                     "parameters. Try removing and/or modifying some of "
                     "them.")
Exemple #16
0
 def statuserr(self, node, message):
     logger.error('Can\'t handle status %s.' % node.status)
Exemple #17
0
 def statuserr(self, node, message):
     logger.error('Can\'t handle status %s.' % node.status)