code: def mutate_add_connection(self, config):
          
          possible_outputs = list(iterkeys(self.nodes))
          out_node = choice(possible_outputs)
  
          possible_inputs = possible_outputs + config.input_keys
          in_node = choice(possible_inputs)
  
          # Don't duplicate connections.
          key = (in_node, out_node)
          if key in self.connections:
              # TODO: Should this be using mutation to/from rates? Hairy to configure...
              if config.check_structural_mutation_surer():
                  self.connections[key].enabled = True
              return
  
          # Don't allow connections between two output nodes
          if in_node in config.output_keys and out_node in config.output_keys:
              return
  
          # No need to check for connections between input nodes:
          # they cannot be the output end of a connection (see above).
  
          # For feed-forward networks, avoid creating cycles.
          if config.feed_forward and creates_cycle(list(iterkeys(self.connections)), key):
              return
  
          cg = self.create_connection(config, in_node, out_node)
          self.connections[cg.key] = cg
docs: Attempt to add a new connection, the only restriction being that the output
          node cannot be one of the network input pins.