def dev_evolve(self):
        """
        Should evolve the population by a given number of generations
        """
        pop0 = []
        for i in range(10):
            pop0.append(2. * np.random.rand(5))

        ga = Evolver(pop0, eval_one_max, crossover_probability=0.8,
                mutation_probability=0.5, degeneration=True)

        ga.evolve(ngen=100, verbose=2)
    def test__evolve(self):
        """
        Should evolve the population by one generation
        """
        pop0 = []
        for i in range(10):
            pop0.append(np.random.rand(5))

        ga = Evolver(pop0, eval_one_max, crossover_probability=0.,
                mutation_probability=0.)
        fit0 = ga.fitness.mean()

        ga._evolve()
        self.assertEqual(len(ga.generations), 2)

        fit1 = ga.fitness.mean()
        self.assertGreaterEqual(fit1, fit0)
    def test_evaluate(self):
        """
        Should register a working evaluate function 
        """
        pop0 = []
        for i in range(100):
            pop0.append(np.round(np.random.rand(5)))


        ga = Evolver(pop0, eval_one_max)

        self.assertTrue(hasattr(ga, 'generations'))
        self.assertTrue(isinstance(ga.generations[0], Population))

        self.assertTrue(ga.generations[0].individuals is ga.individuals)
       
        self.assertTrue(ga.generations[0].CROSSOVER_PROBABILITY\
                is ga.CROSSOVER_PROBABILITY)
        self.assertTrue(ga.generations[0].MUTATION_PROBABILITY\
                is ga.MUTATION_PROBABILITY)

        
        # should register the passed function 'evaluate' as a helper
        self.assertTrue(hasattr(ga, '_evaluate'))

        # should have a main evaluate function that updates fitness
        self.assertTrue(hasattr(ga, 'evaluate'))

        # calling evaluate should update fitness
        ga.evaluate()
        self.assertTrue(ga.generations[0].fitness is ga.fitness)

        # evaluate should also take fixed parameters
        # here, individuals should always be the 1st argument
        pop0 = np.ones((100, 5))

        ga = Evolver(pop0, eval_args_kwargs)
        self.assertEqual(ga.fitness.max(), 5)
        
        ga = Evolver(pop0, eval_args_kwargs, 2)
        self.assertEqual(ga.fitness.max(), 10)
        
        ga = Evolver(pop0, eval_args_kwargs, 2, 3)
        self.assertEqual(ga.fitness.max(), 30)

        ga = Evolver(pop0, eval_args_kwargs, 2, foo=10)
        self.assertEqual(ga.fitness.max(), 100)