116 lines
4.4 KiB
Python
116 lines
4.4 KiB
Python
|
|
import sys
|
|
import unittest
|
|
import array
|
|
import pickle
|
|
import operator
|
|
from test import test_support
|
|
|
|
sys.path.append("..")
|
|
|
|
import numpy
|
|
|
|
import creator
|
|
import base
|
|
import gp
|
|
import tools
|
|
|
|
def func():
|
|
return "True"
|
|
|
|
class Pickling(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
|
|
creator.create("IndList", list, fitness=creator.FitnessMax)
|
|
creator.create("IndArray", array.array, typecode='f', fitness=creator.FitnessMax)
|
|
creator.create("IndTree", gp.PrimitiveTree, fitness=creator.FitnessMax)
|
|
self.toolbox = base.Toolbox()
|
|
self.toolbox.register("func", func)
|
|
self.toolbox.register("lambda_func", lambda: "True")
|
|
|
|
def test_pickle_fitness(self):
|
|
fitness = creator.FitnessMax()
|
|
fitness.values = (1.0,)
|
|
fitness_s = pickle.dumps(fitness)
|
|
fitness_l = pickle.loads(fitness_s)
|
|
self.failUnlessEqual(fitness, fitness_l, "Unpickled fitness != pickled fitness")
|
|
|
|
def test_pickle_ind_list(self):
|
|
ind = creator.IndList([1.0, 2.0, 3.0])
|
|
ind.fitness.values = (4.0,)
|
|
ind_s = pickle.dumps(ind)
|
|
ind_l = pickle.loads(ind_s)
|
|
self.failUnlessEqual(ind, ind_l, "Unpickled individual list != pickled individual list")
|
|
self.failUnlessEqual(ind.fitness, ind_l.fitness, "Unpickled individual fitness != pickled individual fitness")
|
|
|
|
def test_pickle_ind_array(self):
|
|
ind = creator.IndArray([1.0, 2.0, 3.0])
|
|
ind.fitness.values = (4.0,)
|
|
ind_s = pickle.dumps(ind)
|
|
ind_l = pickle.loads(ind_s)
|
|
self.failUnlessEqual(ind, ind_l, "Unpickled individual array != pickled individual array")
|
|
self.failUnlessEqual(ind.fitness, ind_l.fitness, "Unpickled individual fitness != pickled individual fitness")
|
|
|
|
def test_pickle_tree(self):
|
|
ind = creator.IndTree([operator.add, 1, 2])
|
|
ind.fitness.values = (1.0,)
|
|
ind_s = pickle.dumps(ind)
|
|
ind_l = pickle.loads(ind_s)
|
|
msg = "Unpickled individual %s != pickled individual %s" % (str(ind), str(ind_l))
|
|
self.failUnlessEqual(ind, ind_l, msg)
|
|
msg = "Unpickled fitness %s != pickled fitness %s" % (str(ind.fitness), str(ind_l.fitness))
|
|
self.failUnlessEqual(ind.fitness, ind_l.fitness, msg)
|
|
|
|
def test_pickle_population(self):
|
|
ind1 = creator.IndList([1.0,2.0,3.0])
|
|
ind1.fitness.values = (1.0,)
|
|
ind2 = creator.IndList([4.0,5.0,6.0])
|
|
ind2.fitness.values = (2.0,)
|
|
ind3 = creator.IndList([7.0,8.0,9.0])
|
|
ind3.fitness.values = (3.0,)
|
|
|
|
pop = [ind1, ind2, ind3]
|
|
|
|
pop_s = pickle.dumps(pop)
|
|
pop_l = pickle.loads(pop_s)
|
|
|
|
self.failUnlessEqual(pop[0], pop_l[0], "Unpickled individual list != pickled individual list")
|
|
self.failUnlessEqual(pop[0].fitness, pop_l[0].fitness, "Unpickled individual fitness != pickled individual fitness")
|
|
self.failUnlessEqual(pop[1], pop_l[1], "Unpickled individual list != pickled individual list")
|
|
self.failUnlessEqual(pop[1].fitness, pop_l[1].fitness, "Unpickled individual fitness != pickled individual fitness")
|
|
self.failUnlessEqual(pop[2], pop_l[2], "Unpickled individual list != pickled individual list")
|
|
self.failUnlessEqual(pop[2].fitness, pop_l[2].fitness, "Unpickled individual fitness != pickled individual fitness")
|
|
|
|
def test_pickle_logbook(self):
|
|
stats = tools.Statistics()
|
|
logbook = tools.Logbook()
|
|
|
|
stats.register("mean", numpy.mean)
|
|
record = stats.compile([1,2,3,4,5,6,8,9,10])
|
|
logbook.record(**record)
|
|
|
|
stats_s = pickle.dumps(logbook)
|
|
logbook_r = pickle.loads(stats_s)
|
|
|
|
self.failUnlessEqual(logbook, logbook_r, "Unpickled logbook != pickled logbook")
|
|
|
|
|
|
if not sys.version_info < (2, 7):
|
|
def test_pickle_partial(self):
|
|
func_s = pickle.dumps(self.toolbox.func)
|
|
func_l = pickle.loads(func_s)
|
|
|
|
self.failUnlessEqual(self.toolbox.func(), func_l())
|
|
|
|
@unittest.expectedFailure
|
|
def test_pickle_lambda(self):
|
|
func_s = pickle.dumps(self.toolbox.lambda_func)
|
|
func_l = pickle.loads(func_s)
|
|
|
|
self.failUnlessEqual(self.toolbox.lambda_func(), func_l())
|
|
|
|
if __name__ == "__main__":
|
|
suite = unittest.TestLoader().loadTestsFromTestCase(Pickling)
|
|
unittest.TextTestRunner(verbosity=2).run(suite)
|