git: 105668f4b0dc - main - math/py-deap: Update 1.3.1 -> 1.3.2

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Mon, 08 Aug 2022 22:32:50 UTC
The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=105668f4b0dc3217101fb63af8802e9546fc8d3a

commit 105668f4b0dc3217101fb63af8802e9546fc8d3a
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2022-08-08 22:32:12 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2022-08-08 22:32:46 +0000

    math/py-deap: Update 1.3.1 -> 1.3.2
    
    Reported by:    portscout
---
 math/py-deap/Makefile         |    2 +-
 math/py-deap/distinfo         |    6 +-
 math/py-deap/files/patch-2to3 | 1148 -----------------------------------------
 3 files changed, 4 insertions(+), 1152 deletions(-)

diff --git a/math/py-deap/Makefile b/math/py-deap/Makefile
index 6aa324484fd3..940eb1f17973 100644
--- a/math/py-deap/Makefile
+++ b/math/py-deap/Makefile
@@ -1,5 +1,5 @@
 PORTNAME=	deap
-DISTVERSION=	1.3.1
+DISTVERSION=	1.3.2
 CATEGORIES=	math biology science devel python
 MASTER_SITES=	CHEESESHOP
 PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
diff --git a/math/py-deap/distinfo b/math/py-deap/distinfo
index ae66e1d8359d..7929b7ec9eb3 100644
--- a/math/py-deap/distinfo
+++ b/math/py-deap/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1579669505
-SHA256 (deap-1.3.1.tar.gz) = 11f54493ceb54aae10dde676577ef59fc52d52f82729d5a12c90b0813c857a2f
-SIZE (deap-1.3.1.tar.gz) = 1068273
+TIMESTAMP = 1659997777
+SHA256 (deap-1.3.2.tar.gz) = 359f9441af0ce3e59a4688ae90cace0a1a4861f0b901545bf850a6fa571a90fd
+SIZE (deap-1.3.2.tar.gz) = 1063647
diff --git a/math/py-deap/files/patch-2to3 b/math/py-deap/files/patch-2to3
deleted file mode 100644
index fe8e7b516557..000000000000
--- a/math/py-deap/files/patch-2to3
+++ /dev/null
@@ -1,1148 +0,0 @@
---- deap/algorithms.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/algorithms.py
-@@ -27,7 +27,7 @@ you really want them to do.
- 
- import random
- 
--import tools
-+from . import tools
- 
- 
- def varAnd(population, toolbox, cxpb, mutpb):
-@@ -157,7 +157,7 @@ def eaSimple(population, toolbox, cxpb, mutpb, ngen, s
-     record = stats.compile(population) if stats else {}
-     logbook.record(gen=0, nevals=len(invalid_ind), **record)
-     if verbose:
--        print logbook.stream
-+        print(logbook.stream)
- 
-     # Begin the generational process
-     for gen in range(1, ngen + 1):
-@@ -184,7 +184,7 @@ def eaSimple(population, toolbox, cxpb, mutpb, ngen, s
-         record = stats.compile(population) if stats else {}
-         logbook.record(gen=gen, nevals=len(invalid_ind), **record)
-         if verbose:
--            print logbook.stream
-+            print(logbook.stream)
- 
-     return population, logbook
- 
-@@ -227,10 +227,10 @@ def varOr(population, toolbox, lambda_, cxpb, mutpb):
-         "or equal to 1.0.")
- 
-     offspring = []
--    for _ in xrange(lambda_):
-+    for _ in range(lambda_):
-         op_choice = random.random()
-         if op_choice < cxpb:            # Apply crossover
--            ind1, ind2 = map(toolbox.clone, random.sample(population, 2))
-+            ind1, ind2 = list(map(toolbox.clone, random.sample(population, 2)))
-             ind1, ind2 = toolbox.mate(ind1, ind2)
-             del ind1.fitness.values
-             offspring.append(ind1)
-@@ -308,7 +308,7 @@ def eaMuPlusLambda(population, toolbox, mu, lambda_, c
-     record = stats.compile(population) if stats is not None else {}
-     logbook.record(gen=0, nevals=len(invalid_ind), **record)
-     if verbose:
--        print logbook.stream
-+        print(logbook.stream)
- 
-     # Begin the generational process
-     for gen in range(1, ngen + 1):
-@@ -332,7 +332,7 @@ def eaMuPlusLambda(population, toolbox, mu, lambda_, c
-         record = stats.compile(population) if stats is not None else {}
-         logbook.record(gen=gen, nevals=len(invalid_ind), **record)
-         if verbose:
--            print logbook.stream
-+            print(logbook.stream)
- 
-     return population, logbook
- 
-@@ -409,7 +409,7 @@ def eaMuCommaLambda(population, toolbox, mu, lambda_, 
-     record = stats.compile(population) if stats is not None else {}
-     logbook.record(gen=0, nevals=len(invalid_ind), **record)
-     if verbose:
--        print logbook.stream
-+        print(logbook.stream)
- 
-     # Begin the generational process
-     for gen in range(1, ngen + 1):
-@@ -433,7 +433,7 @@ def eaMuCommaLambda(population, toolbox, mu, lambda_, 
-         record = stats.compile(population) if stats is not None else {}
-         logbook.record(gen=gen, nevals=len(invalid_ind), **record)
-         if verbose:
--            print logbook.stream
-+            print(logbook.stream)
-     return population, logbook
- 
- 
-@@ -477,7 +477,7 @@ def eaGenerateUpdate(toolbox, ngen, halloffame=None, s
-     logbook = tools.Logbook()
-     logbook.header = ['gen', 'nevals'] + (stats.fields if stats else [])
- 
--    for gen in xrange(ngen):
-+    for gen in range(ngen):
-         # Generate a new population
-         population = toolbox.generate()
-         # Evaluate the individuals
-@@ -494,6 +494,6 @@ def eaGenerateUpdate(toolbox, ngen, halloffame=None, s
-         record = stats.compile(population) if stats is not None else {}
-         logbook.record(gen=gen, nevals=len(population), **record)
-         if verbose:
--            print logbook.stream
-+            print(logbook.stream)
- 
-     return population, logbook
---- deap/base.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/base.py
-@@ -189,12 +189,12 @@ class Fitness(object):
-             self.wvalues = tuple(map(mul, values, self.weights))
-         except TypeError:
-             _, _, traceback = sys.exc_info()
--            raise TypeError, ("Both weights and assigned values must be a "
-+            raise TypeError("Both weights and assigned values must be a "
-                               "sequence of numbers when assigning to values of "
-                               "%r. Currently assigning value(s) %r of %r to a "
-                               "fitness with weights %s."
-                               % (self.__class__, values, type(values),
--                                 self.weights)), traceback
-+                                 self.weights)).with_traceback(traceback)
- 
-     def delValues(self):
-         self.wvalues = ()
---- deap/benchmarks/__init__.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/benchmarks/__init__.py
-@@ -489,7 +489,7 @@ def dtlz1(individual, obj):
-     """
-     g = 100 * (len(individual[obj-1:]) + sum((xi-0.5)**2 - cos(20*pi*(xi-0.5)) for xi in individual[obj-1:]))
-     f = [0.5 * reduce(mul, individual[:obj-1], 1) * (1 + g)]
--    f.extend(0.5 * reduce(mul, individual[:m], 1) * (1 - individual[m]) * (1 + g) for m in reversed(xrange(obj-1)))
-+    f.extend(0.5 * reduce(mul, individual[:m], 1) * (1 - individual[m]) * (1 + g) for m in reversed(range(obj-1)))
-     return f
- 
- def dtlz2(individual, obj):
-@@ -588,7 +588,7 @@ def dtlz5(ind, n_objs):
-     theta = lambda x: pi / (4.0 * (1 + gval)) * (1 + 2 * gval * x)
-     fit = [(1 + gval) * cos(pi / 2.0 * ind[0]) * reduce(lambda x,y: x*y, [cos(theta(a)) for a in ind[1:]])]
-            
--    for m in reversed(range(1, n_objs)):
-+    for m in reversed(list(range(1, n_objs))):
-         if m == 1:
-             fit.append((1 + gval) * sin(pi / 2.0 * ind[0]))
-         else:
-@@ -608,7 +608,7 @@ def dtlz6(ind, n_objs):
-     fit = [(1 + gval) * cos(pi / 2.0 * ind[0]) *
-            reduce(lambda x,y: x*y, [cos(theta(a)) for a in ind[1:]])]
- 
--    for m in reversed(range(1, n_objs)):
-+    for m in reversed(list(range(1, n_objs))):
-         if m == 1:
-             fit.append((1 + gval) * sin(pi / 2.0 * ind[0]))
-         else:
---- deap/benchmarks/binary.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/benchmarks/binary.py
-@@ -13,7 +13,7 @@
- #    You should have received a copy of the GNU Lesser General Public
- #    License along with DEAP. If not, see <http://www.gnu.org/licenses/>.
- 
--from __future__ import division
-+
- from functools import wraps
- import math
- 
-@@ -29,7 +29,7 @@ def bin2float(min_, max_, nbits):
-             # User must take care to make nelem an integer.
-             nelem = len(individual)//nbits
-             decoded = [0] * nelem
--            for i in xrange(nelem):
-+            for i in range(nelem):
-                 gene = int("".join(map(str,
-                                        individual[i*nbits:i*nbits+nbits])),
-                            2)
-@@ -68,10 +68,10 @@ def chuang_f1(individual):
-     """
-     total = 0
-     if individual[-1] == 0:
--        for i in xrange(0, len(individual)-1, 4):
-+        for i in range(0, len(individual)-1, 4):
-             total += inv_trap(individual[i:i+4])
-     else:
--        for i in xrange(0, len(individual)-1, 4):
-+        for i in range(0, len(individual)-1, 4):
-             total += trap(individual[i:i+4])
-     return total,
- 
-@@ -85,16 +85,16 @@ def chuang_f2(individual):
-     """
-     total = 0
-     if individual[-2] == 0 and individual[-1] == 0:
--        for i in xrange(0, len(individual)-2, 8):
-+        for i in range(0, len(individual)-2, 8):
-             total += inv_trap(individual[i:i+4]) + inv_trap(individual[i+4:i+8])
-     elif individual[-2] == 0 and individual[-1] == 1:
--        for i in xrange(0, len(individual)-2, 8):
-+        for i in range(0, len(individual)-2, 8):
-             total += inv_trap(individual[i:i+4]) + trap(individual[i+4:i+8])
-     elif individual[-2] == 1 and individual[-1] == 0:
--        for i in xrange(0, len(individual)-2, 8):
-+        for i in range(0, len(individual)-2, 8):
-             total += trap(individual[i:i+4]) + inv_trap(individual[i+4:i+8])
-     else:
--        for i in xrange(0, len(individual)-2, 8):
-+        for i in range(0, len(individual)-2, 8):
-             total += trap(individual[i:i+4]) + trap(individual[i+4:i+8])
-     return total,
- 
-@@ -108,10 +108,10 @@ def chuang_f3(individual):
-     """
-     total = 0
-     if individual[-1] == 0:
--        for i in xrange(0, len(individual)-1, 4):
-+        for i in range(0, len(individual)-1, 4):
-             total += inv_trap(individual[i:i+4])
-     else:
--        for i in xrange(2, len(individual)-3, 4):
-+        for i in range(2, len(individual)-3, 4):
-             total += inv_trap(individual[i:i+4])
-         total += trap(individual[-2:]+individual[:2])
-     return total,
-@@ -125,7 +125,7 @@ def royal_road1(individual, order):
-     nelem = len(individual) // order
-     max_value = int(2**order - 1)
-     total = 0
--    for i in xrange(nelem):
-+    for i in range(nelem):
-         value = int("".join(map(str, individual[i*order:i*order+order])), 2)
-         total += int(order) * int(value/max_value)
-     return total,
---- deap/benchmarks/movingpeaks.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/benchmarks/movingpeaks.py
-@@ -393,6 +393,6 @@ def diversity(population):
- 
- if __name__ == "__main__":
-     mpb = MovingPeaks(dim=2, npeaks=[1,1,10], number_severity=0.1)
--    print mpb.maximums()
-+    print(mpb.maximums())
-     mpb.changePeaks()
--    print mpb.maximums()
-+    print(mpb.maximums())
---- deap/benchmarks/tools.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/benchmarks/tools.py
-@@ -285,7 +285,7 @@ def convergence(first_front, optimal_front):
-         distances.append(float("inf"))
-         for opt_ind in optimal_front:
-             dist = 0.
--            for i in xrange(len(opt_ind)):
-+            for i in range(len(opt_ind)):
-                 dist += (ind.fitness.values[i] - opt_ind[i])**2
-             if dist < distances[-1]:
-                 distances[-1] = dist
---- deap/cma.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/cma.py
-@@ -24,7 +24,7 @@ import copy
- from math import sqrt, log, exp
- import numpy
- 
--import tools
-+from . import tools
- 
- 
- class Strategy(object):
-@@ -118,7 +118,7 @@ class Strategy(object):
-         """
-         arz = numpy.random.standard_normal((self.lambda_, self.dim))
-         arz = self.centroid + self.sigma * numpy.dot(arz, self.BD.T)
--        return map(ind_init, arz)
-+        return list(map(ind_init, arz))
- 
-     def update(self, population):
-         """Update the current covariance matrix strategy from the
-@@ -286,7 +286,7 @@ class StrategyOnePlusLambda(object):
-         # self.y = numpy.dot(self.A, numpy.random.standard_normal(self.dim))
-         arz = numpy.random.standard_normal((self.lambda_, self.dim))
-         arz = self.parent + self.sigma * numpy.dot(arz, self.A.T)
--        return map(ind_init, arz)
-+        return list(map(ind_init, arz))
- 
-     def update(self, population):
-         """Update the current covariance matrix strategy from the
---- deap/creator.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/creator.py
-@@ -142,7 +142,7 @@ def create(name, base, **kargs):
- 
-     dict_inst = {}
-     dict_cls = {}
--    for obj_name, obj in kargs.iteritems():
-+    for obj_name, obj in kargs.items():
-         if isinstance(obj, type):
-             dict_inst[obj_name] = obj
-         else:
-@@ -161,7 +161,7 @@ def create(name, base, **kargs):
-         """Replace the __init__ function of the new type, in order to
-         add attributes that were defined with **kargs to the instance.
-         """
--        for obj_name, obj in dict_inst.iteritems():
-+        for obj_name, obj in dict_inst.items():
-             setattr(self, obj_name, obj())
-         if base.__init__ is not object.__init__:
-             base.__init__(self, *args, **kargs)
---- deap/gp.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/gp.py
-@@ -31,7 +31,7 @@ from functools import partial, wraps
- from inspect import isclass
- from operator import eq, lt
- 
--import tools  # Needed by HARM-GP
-+from . import tools  # Needed by HARM-GP
- 
- ######################################
- # GP Data structure                  #
-@@ -197,7 +197,7 @@ class Primitive(object):
-         self.arity = len(args)
-         self.args = args
-         self.ret = ret
--        args = ", ".join(map("{{{0}}}".format, range(self.arity)))
-+        args = ", ".join(map("{{{0}}}".format, list(range(self.arity))))
-         self.seq = "{name}({args})".format(name=self.name, args=args)
- 
-     def format(self, *args):
-@@ -298,7 +298,7 @@ class PrimitiveSetTyped(object):
-         def addType(dict_, ret_type):
-             if ret_type not in dict_:
-                 new_list = []
--                for type_, list_ in dict_.items():
-+                for type_, list_ in list(dict_.items()):
-                     if issubclass(type_, ret_type):
-                         for item in list_:
-                             if item not in new_list:
-@@ -478,11 +478,11 @@ def compile(expr, pset):
-         return eval(code, pset.context, {})
-     except MemoryError:
-         _, _, traceback = sys.exc_info()
--        raise MemoryError, ("DEAP : Error in tree evaluation :"
-+        raise MemoryError("DEAP : Error in tree evaluation :"
-                             " Python cannot evaluate a tree higher than 90. "
-                             "To avoid this problem, you should use bloat control on your "
-                             "operators. See the DEAP documentation for more information. "
--                            "DEAP will now abort."), traceback
-+                            "DEAP will now abort.").with_traceback(traceback)
- 
- 
- def compileADF(expr, psets):
-@@ -504,7 +504,7 @@ def compileADF(expr, psets):
-     """
-     adfdict = {}
-     func = None
--    for pset, subexpr in reversed(zip(psets, expr)):
-+    for pset, subexpr in reversed(list(zip(psets, expr))):
-         pset.context.update(adfdict)
-         func = compile(subexpr, pset)
-         adfdict.update({pset.name: func})
-@@ -613,9 +613,9 @@ def generate(pset, min_, max_, condition, type_=None):
-                 term = random.choice(pset.terminals[type_])
-             except IndexError:
-                 _, _, traceback = sys.exc_info()
--                raise IndexError, "The gp.generate function tried to add " \
-+                raise IndexError("The gp.generate function tried to add " \
-                                   "a terminal of type '%s', but there is " \
--                                  "none available." % (type_,), traceback
-+                                  "none available." % (type_,)).with_traceback(traceback)
-             if isclass(term):
-                 term = term()
-             expr.append(term)
-@@ -624,9 +624,9 @@ def generate(pset, min_, max_, condition, type_=None):
-                 prim = random.choice(pset.primitives[type_])
-             except IndexError:
-                 _, _, traceback = sys.exc_info()
--                raise IndexError, "The gp.generate function tried to add " \
-+                raise IndexError("The gp.generate function tried to add " \
-                                   "a primitive of type '%s', but there is " \
--                                  "none available." % (type_,), traceback
-+                                  "none available." % (type_,)).with_traceback(traceback)
-             expr.append(prim)
-             for arg in reversed(prim.args):
-                 stack.append((depth + 1, arg))
-@@ -654,8 +654,8 @@ def cxOnePoint(ind1, ind2):
-     types2 = defaultdict(list)
-     if ind1.root.ret == __type__:
-         # Not STGP optimization
--        types1[__type__] = xrange(1, len(ind1))
--        types2[__type__] = xrange(1, len(ind2))
-+        types1[__type__] = range(1, len(ind1))
-+        types2[__type__] = range(1, len(ind2))
-         common_types = [__type__]
-     else:
-         for idx, node in enumerate(ind1[1:], 1):
-@@ -1009,8 +1009,8 @@ def harm(population, toolbox, cxpb, mutpb, ngen,
-                 opRandom = random.random()
-                 if opRandom < cxpb:
-                     # Crossover
--                    aspirant1, aspirant2 = toolbox.mate(*map(toolbox.clone,
--                                                             toolbox.select(population, 2)))
-+                    aspirant1, aspirant2 = toolbox.mate(*list(map(toolbox.clone,
-+                                                             toolbox.select(population, 2))))
-                     del aspirant1.fitness.values, aspirant2.fitness.values
-                     if acceptfunc(len(aspirant1)):
-                         producedpop.append(aspirant1)
-@@ -1058,7 +1058,7 @@ def harm(population, toolbox, cxpb, mutpb, ngen,
-     record = stats.compile(population) if stats else {}
-     logbook.record(gen=0, nevals=len(invalid_ind), **record)
-     if verbose:
--        print logbook.stream
-+        print(logbook.stream)
- 
-     # Begin the generational process
-     for gen in range(1, ngen + 1):
-@@ -1125,7 +1125,7 @@ def harm(population, toolbox, cxpb, mutpb, ngen,
-         record = stats.compile(population) if stats else {}
-         logbook.record(gen=gen, nevals=len(invalid_ind), **record)
-         if verbose:
--            print logbook.stream
-+            print(logbook.stream)
- 
-     return population, logbook
- 
-@@ -1186,7 +1186,7 @@ def graph(expr):
-        <http://networkx.lanl.gov/pygraphviz/>`_ as the nodes might be plotted
-        out of order when using `NetworX <http://networkx.github.com/>`_.
-     """
--    nodes = range(len(expr))
-+    nodes = list(range(len(expr)))
-     edges = list()
-     labels = dict()
- 
---- deap/tests/test_benchmarks.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/tests/test_benchmarks.py
-@@ -34,7 +34,7 @@ class BenchmarkTest(unittest.TestCase):
-         full_individual = creator.Individual([1] * 10)
-         two_individiual = creator.Individual(8*[0] + [1, 0])
-         population = [zero_individual, full_individual, two_individiual]
--        fitnesses = map(self.toolbox.evaluate, population)
-+        fitnesses = list(map(self.toolbox.evaluate, population))
-         for ind, fit in zip(population, fitnesses):
-             ind.fitness.values = fit
-         assert population[0].fitness.values == (0.0, )
-@@ -46,7 +46,7 @@ class BenchmarkTest(unittest.TestCase):
-         wrong_population = [wrong_size_individual]
-         # It is up the user to make sure that bin2float gets an individual with
-         # an adequate length; no exceptions are raised.
--        fitnesses = map(self.toolbox.evaluate, wrong_population)
-+        fitnesses = list(map(self.toolbox.evaluate, wrong_population))
-         for ind, fit in zip(wrong_population, fitnesses):
-             # In python 2.7 operator.mul works in a different way than in
-             # python3. Thus an error occurs in python2.7 but an assignment is
---- deap/tests/test_init.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/tests/test_init.py
-@@ -8,6 +8,6 @@ from deap import tools
- class LogbookTest(unittest.TestCase):
-     def test_statistics_compile(self):
-         l = 10
--        gen_idx = partial(random.sample, range(l), l)
-+        gen_idx = partial(random.sample, list(range(l)), l)
-         i = tools.initIterate(list, gen_idx)
-         self.assertSetEqual(set(i), set(range(l)))
---- deap/tests/test_logbook.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/tests/test_logbook.py
-@@ -7,7 +7,7 @@ class LogbookTest(unittest.TestCase):
- 
-     def setUp(self):
-         self.logbook = tools.Logbook()
--        print
-+        print()
- 
-     def test_multi_chapters(self):
-         self.logbook.record(gen=0, evals=100, fitness={'obj 1' : {'avg' : 1.0, 'max' : 10},
-@@ -18,23 +18,23 @@ class LogbookTest(unittest.TestCase):
-                                           'obj 2' : {'avg' : 1.0, 'max' : 10}},
-                             length={'avg' : 1.0, 'max' : 30},
-                             test={'avg' : 1.0, 'max' : 20})
--        print(self.logbook.stream)
-+        print((self.logbook.stream))
- 
- 
-     def test_one_chapter(self):
-         self.logbook.record(gen=0, evals=100, fitness={'avg' : 1.0, 'max' : 10})
-         self.logbook.record(gen=0, evals=100, fitness={'avg' : 1.0, 'max' : 10})
--        print(self.logbook.stream)
-+        print((self.logbook.stream))
- 
-     def test_one_big_chapter(self):
-         self.logbook.record(gen=0, evals=100, fitness={'obj 1' : {'avg' : 1.0, 'max' : 10}, 'obj 2' : {'avg' : 1.0, 'max' : 10}})
-         self.logbook.record(gen=0, evals=100, fitness={'obj 1' : {'avg' : 1.0, 'max' : 10}, 'obj 2' : {'avg' : 1.0, 'max' : 10}})
--        print(self.logbook.stream)
-+        print((self.logbook.stream))
- 
-     def test_no_chapters(self):
-         self.logbook.record(gen=0, evals=100, **{'avg' : 1.0, 'max' : 10})
-         self.logbook.record(gen=0, evals=100, **{'avg' : 1.0, 'max' : 10})
--        print(self.logbook.stream)
-+        print((self.logbook.stream))
- 
- 
- 
---- deap/tools/_hypervolume/pyhv.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/tools/_hypervolume/pyhv.py
-@@ -64,7 +64,7 @@ class _HyperVolume:
-         """
- 
-         def weaklyDominates(point, other):
--            for i in xrange(len(point)):
-+            for i in range(len(point)):
-                 if point[i] > other[i]:
-                     return False
-             return True
-@@ -152,7 +152,7 @@ class _HyperVolume:
-                 hvol = qPrevDimIndex.volume[dimIndex] + qPrevDimIndex.area[dimIndex] * (qCargo[dimIndex] - qPrevDimIndex.cargo[dimIndex])
-             else:
-                 qArea[0] = 1
--                qArea[1:dimIndex+1] = [qArea[i] * -qCargo[i] for i in xrange(dimIndex)]
-+                qArea[1:dimIndex+1] = [qArea[i] * -qCargo[i] for i in range(dimIndex)]
-             q.volume[dimIndex] = hvol
-             if q.ignore >= dimIndex:
-                 qArea[dimIndex] = qPrevDimIndex.area[dimIndex]
-@@ -184,7 +184,7 @@ class _HyperVolume:
-         dimensions = len(self.referencePoint)
-         nodeList = _MultiList(dimensions)
-         nodes = [_MultiList.Node(dimensions, point) for point in front]
--        for i in xrange(dimensions):
-+        for i in range(dimensions):
-             self.sortByDimension(nodes, i)
-             nodeList.extend(nodes, i)
-         self.list = nodeList
-@@ -239,7 +239,7 @@ class _MultiList: 
-         
-     def __str__(self):
-         strings = []
--        for i in xrange(self.numberLists):
-+        for i in range(self.numberLists):
-             currentList = []
-             node = self.sentinel.next[i]
-             while node != self.sentinel:
-@@ -292,7 +292,7 @@ class _MultiList: 
-         
-     def remove(self, node, index, bounds): 
-         """Removes and returns 'node' from all lists in [0, 'index'[."""
--        for i in xrange(index): 
-+        for i in range(index): 
-             predecessor = node.prev[i]
-             successor = node.next[i]
-             predecessor.next[i] = successor
-@@ -309,7 +309,7 @@ class _MultiList: 
-         nodes of the node that is reinserted are in the list.
- 
-         """
--        for i in xrange(index):
-+        for i in range(index):
-             node.prev[i].next[i] = node
-             node.next[i].prev[i] = node
-             if bounds[i] > node.cargo[i]:
-@@ -329,8 +329,8 @@ if __name__ == "__main__":
-     pointset = [(a, a) for a in numpy.arange(1, 0, -0.01)]
-     ref = numpy.array([2, 2])
- 
--    print("Python version: %f" % hypervolume(pointset, ref))
-+    print(("Python version: %f" % hypervolume(pointset, ref)))
-     if hv:
--        print("C version: %f" % hv.hypervolume(pointset, ref))
--    print("Approximated: %f" % hypervolume_approximation(pointset, ref))
-+        print(("C version: %f" % hv.hypervolume(pointset, ref)))
-+    print(("Approximated: %f" % hypervolume_approximation(pointset, ref)))
- 
---- deap/tools/constraint.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/tools/constraint.py
-@@ -172,6 +172,6 @@ if __name__ == "__main__":
-     toolbox.decorate("evaluate", ClosestValidPenalty(valid, closest_feasible, 1.0e-6, distance))
- 
-     ind1 = creator.Individual((-5.6468535666e-01,2.2483050478e+00,-1.1087909644e+00,-1.2710112861e-01,1.1682438733e+00,-1.3642007438e+00,-2.1916417835e-01,-5.9137308999e-01,-1.0870160336e+00,6.0515070232e-01,2.1532075914e+00,-2.6164718271e-01,1.5244071578e+00,-1.0324305612e+00,1.2858152343e+00,-1.2584683962e+00,1.2054392372e+00,-1.7429571973e+00,-1.3517256013e-01,-2.6493429355e+00,-1.3051320798e-01,2.2641961090e+00,-2.5027232340e+00,-1.2844874148e+00,1.9955852925e+00,-1.2942218834e+00,3.1340109155e+00,1.6440111097e+00,-1.7750105857e+00,7.7610242710e-01))
--    print(toolbox.evaluate(ind1))
--    print("Individuals is valid: %s" % ("True" if valid(ind1) else "False"))
-+    print((toolbox.evaluate(ind1)))
-+    print(("Individuals is valid: %s" % ("True" if valid(ind1) else "False")))
- 
---- deap/tools/crossover.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/tools/crossover.py
-@@ -1,4 +1,4 @@
--from __future__ import division
-+
- import random
- import warnings
- 
-@@ -84,7 +84,7 @@ def cxUniform(ind1, ind2, indpb):
-     :mod:`random` module.
-     """
-     size = min(len(ind1), len(ind2))
--    for i in xrange(size):
-+    for i in range(size):
-         if random.random() < indpb:
-             ind1[i], ind2[i] = ind2[i], ind1[i]
- 
-@@ -115,7 +115,7 @@ def cxPartialyMatched(ind1, ind2):
-     p1, p2 = [0] * size, [0] * size
- 
-     # Initialize the position of each indices in the individuals
--    for i in xrange(size):
-+    for i in range(size):
-         p1[ind1[i]] = i
-         p2[ind2[i]] = i
-     # Choose crossover points
-@@ -127,7 +127,7 @@ def cxPartialyMatched(ind1, ind2):
-         cxpoint1, cxpoint2 = cxpoint2, cxpoint1
- 
-     # Apply crossover between cx points
--    for i in xrange(cxpoint1, cxpoint2):
-+    for i in range(cxpoint1, cxpoint2):
-         # Keep track of the selected values
-         temp1 = ind1[i]
-         temp2 = ind2[i]
-@@ -166,11 +166,11 @@ def cxUniformPartialyMatched(ind1, ind2, indpb):
-     p1, p2 = [0] * size, [0] * size
- 
-     # Initialize the position of each indices in the individuals
--    for i in xrange(size):
-+    for i in range(size):
-         p1[ind1[i]] = i
-         p2[ind2[i]] = i
- 
--    for i in xrange(size):
-+    for i in range(size):
-         if random.random() < indpb:
-             # Keep track of the selected values
-             temp1 = ind1[i]
-@@ -209,7 +209,7 @@ def cxOrdered(ind1, ind2):
-        optimization and machine learning. Addison Wesley, 1989
-     """
-     size = min(len(ind1), len(ind2))
--    a, b = random.sample(xrange(size), 2)
-+    a, b = random.sample(range(size), 2)
-     if a > b:
-         a, b = b, a
- 
-@@ -321,7 +321,7 @@ def cxSimulatedBinaryBounded(ind1, ind2, eta, low, up)
-     elif len(up) < size:
-         raise IndexError("up must be at least the size of the shorter individual: %d < %d" % (len(up), size))
- 
--    for i, xl, xu in zip(xrange(size), low, up):
-+    for i, xl, xu in zip(range(size), low, up):
-         if random.random() <= 0.5:
-             # This epsilon should probably be changed for 0 since
-             # floating point arithmetic in Python is safer
---- deap/tools/emo.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/tools/emo.py
-@@ -1,4 +1,4 @@
--from __future__ import division
-+
- import bisect
- from collections import defaultdict, namedtuple
- from itertools import chain
-@@ -74,7 +74,7 @@ def sortNondominated(individuals, k, first_front_only=
-     map_fit_ind = defaultdict(list)
-     for ind in individuals:
-         map_fit_ind[ind.fitness].append(ind)
--    fits = map_fit_ind.keys()
-+    fits = list(map_fit_ind.keys())
- 
-     current_front = []
-     next_front = []
-@@ -129,7 +129,7 @@ def assignCrowdingDist(individuals):
- 
-     nobj = len(individuals[0].fitness.values)
- 
--    for i in xrange(nobj):
-+    for i in range(nobj):
-         crowd.sort(key=lambda element: element[0][i])
-         distances[crowd[0][1]] = float("inf")
-         distances[crowd[-1][1]] = float("inf")
-@@ -184,7 +184,7 @@ def selTournamentDCD(individuals, k):
-     individuals_2 = random.sample(individuals, len(individuals))
- 
-     chosen = []
--    for i in xrange(0, k, 4):
-+    for i in range(0, k, 4):
-         chosen.append(tourn(individuals_1[i],   individuals_1[i+1]))
-         chosen.append(tourn(individuals_1[i+2], individuals_1[i+3]))
-         chosen.append(tourn(individuals_2[i],   individuals_2[i+1]))
-@@ -248,7 +248,7 @@ def sortLogNondominated(individuals, k, first_front_on
- 
-     #Launch the sorting algorithm
-     obj = len(individuals[0].fitness.wvalues)-1
--    fitnesses = unique_fits.keys()
-+    fitnesses = list(unique_fits.keys())
-     front = dict.fromkeys(fitnesses, 0)
- 
-     # Sort the fitnesses lexicographically.
-@@ -284,7 +284,7 @@ def sortNDHelperA(fitnesses, obj, front):
-             front[s2] = max(front[s2], front[s1] + 1)
-     elif obj == 1:
-         sweepA(fitnesses, front)
--    elif len(frozenset(map(itemgetter(obj), fitnesses))) == 1:
-+    elif len(frozenset(list(map(itemgetter(obj), fitnesses)))) == 1:
-         #All individuals for objective M are equal: go to objective M-1
-         sortNDHelperA(fitnesses, obj-1, front)
-     else:
-@@ -615,7 +615,7 @@ def associate_to_niche(fitnesses, reference_points, be
- 
-     # Retrieve min distance niche index
-     niches = numpy.argmin(distances, axis=1)
--    distances = distances[range(niches.shape[0]), niches]
-+    distances = distances[list(range(niches.shape[0])), niches]
-     return niches, distances
- 
- 
-@@ -705,7 +705,7 @@ def selSPEA2(individuals, k):
-     K = math.sqrt(N)
-     strength_fits = [0] * N
-     fits = [0] * N
--    dominating_inds = [list() for i in xrange(N)]
-+    dominating_inds = [list() for i in range(N)]
- 
-     for i, ind_i in enumerate(individuals):
-         for j, ind_j in enumerate(individuals[i+1:], i+1):
-@@ -716,19 +716,19 @@ def selSPEA2(individuals, k):
-                 strength_fits[j] += 1
-                 dominating_inds[i].append(j)
- 
--    for i in xrange(N):
-+    for i in range(N):
-         for j in dominating_inds[i]:
-             fits[i] += strength_fits[j]
- 
-     # Choose all non-dominated individuals
--    chosen_indices = [i for i in xrange(N) if fits[i] < 1]
-+    chosen_indices = [i for i in range(N) if fits[i] < 1]
- 
-     if len(chosen_indices) < k:     # The archive is too small
--        for i in xrange(N):
-+        for i in range(N):
-             distances = [0.0] * N
--            for j in xrange(i + 1, N):
-+            for j in range(i + 1, N):
-                 dist = 0.0
--                for l in xrange(L):
-+                for l in range(L):
-                     val = individuals[i].fitness.values[l] - \
-                           individuals[j].fitness.values[l]
-                     dist += val * val
-@@ -737,7 +737,7 @@ def selSPEA2(individuals, k):
-             density = 1.0 / (kth_dist + 2.0)
-             fits[i] += density
- 
--        next_indices = [(fits[i], i) for i in xrange(N)
-+        next_indices = [(fits[i], i) for i in range(N)
-                         if not i in chosen_indices]
-         next_indices.sort()
-         #print next_indices
-@@ -745,12 +745,12 @@ def selSPEA2(individuals, k):
- 
-     elif len(chosen_indices) > k:   # The archive is too large
-         N = len(chosen_indices)
--        distances = [[0.0] * N for i in xrange(N)]
--        sorted_indices = [[0] * N for i in xrange(N)]
--        for i in xrange(N):
--            for j in xrange(i + 1, N):
-+        distances = [[0.0] * N for i in range(N)]
-+        sorted_indices = [[0] * N for i in range(N)]
-+        for i in range(N):
-+            for j in range(i + 1, N):
-                 dist = 0.0
--                for l in xrange(L):
-+                for l in range(L):
-                     val = individuals[chosen_indices[i]].fitness.values[l] - \
-                           individuals[chosen_indices[j]].fitness.values[l]
-                     dist += val * val
-@@ -759,8 +759,8 @@ def selSPEA2(individuals, k):
-             distances[i][i] = -1
- 
-         # Insert sort is faster than quick sort for short arrays
--        for i in xrange(N):
--            for j in xrange(1, N):
-+        for i in range(N):
-+            for j in range(1, N):
-                 l = j
-                 while l > 0 and distances[i][j] < distances[i][sorted_indices[i][l - 1]]:
-                     sorted_indices[i][l] = sorted_indices[i][l - 1]
-@@ -772,8 +772,8 @@ def selSPEA2(individuals, k):
-         while size > k:
-             # Search for minimal distance
-             min_pos = 0
--            for i in xrange(1, N):
--                for j in xrange(1, size):
-+            for i in range(1, N):
-+                for j in range(1, size):
-                     dist_i_sorted_j = distances[i][sorted_indices[i][j]]
-                     dist_min_sorted_j = distances[min_pos][sorted_indices[min_pos][j]]
- 
-@@ -784,11 +784,11 @@ def selSPEA2(individuals, k):
-                         break
- 
-             # Remove minimal distance from sorted_indices
--            for i in xrange(N):
-+            for i in range(N):
-                 distances[i][min_pos] = float("inf")
-                 distances[min_pos][i] = float("inf")
- 
--                for j in xrange(1, size - 1):
-+                for j in range(1, size - 1):
-                     if sorted_indices[i][j] == min_pos:
-                         sorted_indices[i][j] = sorted_indices[i][j + 1]
-                         sorted_indices[i][j + 1] = min_pos
---- deap/tools/indicator.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/tools/indicator.py
-@@ -41,7 +41,7 @@ def hypervolume(front, **kargs):
-         return hv.hypervolume(numpy.concatenate((wobj[:i], wobj[i+1:])), ref)
- 
-     # Parallelization note: Cannot pickle local function
--    contrib_values = map(contribution, range(len(front)))
-+    contrib_values = list(map(contribution, list(range(len(front)))))
- 
-     # Select the maximum hypervolume value (correspond to the minimum difference)
-     return numpy.argmax(contrib_values)
-@@ -62,7 +62,7 @@ def additive_epsilon(front, **kargs):
-         mwobj[i] = numpy.ma.masked
-         return numpy.min(numpy.max(wobj[i] - mwobj, axis=1))
- 
--    contrib_values = map(contribution, range(len(front)))
-+    contrib_values = list(map(contribution, list(range(len(front)))))
- 
-     # Select the minimum contribution value
-     return numpy.argmin(contrib_values)
-@@ -84,7 +84,7 @@ def multiplicative_epsilon(front, **kargs):
-         mwobj[i] = numpy.ma.masked
-         return numpy.min(numpy.max(wobj[i] / mwobj, axis=1))
- 
--    contrib_values = map(contribution, range(len(front)))
-+    contrib_values = list(map(contribution, list(range(len(front)))))
- 
-     # Select the minimum contribution value
-     return numpy.argmin(contrib_values)
---- deap/tools/init.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/tools/init.py
-@@ -1,5 +1,5 @@
--from __future__ import division
- 
-+
- def initRepeat(container, func, n):
-     """Call the function *container* with a generator function corresponding
-     to the calling *n* times the function *func*.
-@@ -22,7 +22,7 @@ def initRepeat(container, func, n):
- 
-     See the :ref:`list-of-floats` and :ref:`population` tutorials for more examples.
-     """
--    return container(func() for _ in xrange(n))
-+    return container(func() for _ in range(n))
- 
- def initIterate(container, generator):
-     """Call the function *container* with an iterable as
-@@ -72,7 +72,7 @@ def initCycle(container, seq_func, n=1):
- 
-     See the :ref:`funky` tutorial for an example.
-     """
--    return container(func() for _ in xrange(n) for func in seq_func)
-+    return container(func() for _ in range(n) for func in seq_func)
- 
- __all__ = ['initRepeat', 'initIterate', 'initCycle']
- 
---- deap/tools/migration.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/tools/migration.py
-@@ -1,6 +1,6 @@
--from __future__ import division
- 
- 
-+
- def migRing(populations, k, selection, replacement=None, migarray=None):
-     """Perform a ring migration between the *populations*. The migration first
-     select *k* emigrants from each population using the specified *selection*
-@@ -31,12 +31,12 @@ def migRing(populations, k, selection, replacement=Non
-     """
-     nbr_demes = len(populations)
-     if migarray is None:
--        migarray = range(1, nbr_demes) + [0]
-+        migarray = list(range(1, nbr_demes)) + [0]
- 
--    immigrants = [[] for i in xrange(nbr_demes)]
--    emigrants = [[] for i in xrange(nbr_demes)]
-+    immigrants = [[] for i in range(nbr_demes)]
-+    emigrants = [[] for i in range(nbr_demes)]
- 
--    for from_deme in xrange(nbr_demes):
-+    for from_deme in range(nbr_demes):
-         emigrants[from_deme].extend(selection(populations[from_deme], k))
-         if replacement is None:
-             # If no replacement strategy is selected, replace those who migrate
---- deap/tools/mutation.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/tools/mutation.py
-@@ -1,4 +1,4 @@
--from __future__ import division
-+
- import math
- import random
- 
-@@ -41,7 +41,7 @@ def mutGaussian(individual, mu, sigma, indpb):
-     elif len(sigma) < size:
-         raise IndexError("sigma must be at least the size of individual: %d < %d" % (len(sigma), size))
- 
--    for i, m, s in zip(xrange(size), mu, sigma):
-+    for i, m, s in zip(range(size), mu, sigma):
-         if random.random() < indpb:
-             individual[i] += random.gauss(m, s)
- 
-@@ -72,7 +72,7 @@ def mutPolynomialBounded(individual, eta, low, up, ind
-     elif len(up) < size:
-         raise IndexError("up must be at least the size of individual: %d < %d" % (len(up), size))
- 
--    for i, xl, xu in zip(xrange(size), low, up):
-+    for i, xl, xu in zip(range(size), low, up):
-         if random.random() <= indpb:
-             x = individual[i]
-             delta_1 = (x - xl) / (xu - xl)
-@@ -110,7 +110,7 @@ def mutShuffleIndexes(individual, indpb):
-     functions from the python base :mod:`random` module.
-     """
-     size = len(individual)
--    for i in xrange(size):
-+    for i in range(size):
-         if random.random() < indpb:
-             swap_indx = random.randint(0, size - 2)
-             if swap_indx >= i:
-@@ -135,7 +135,7 @@ def mutFlipBit(individual, indpb):
-     This function uses the :func:`~random.random` function from the python base
-     :mod:`random` module.
-     """
--    for i in xrange(len(individual)):
-+    for i in range(len(individual)):
-         if random.random() < indpb:
-             individual[i] = type(individual[i])(not individual[i])
- 
-@@ -166,7 +166,7 @@ def mutUniformInt(individual, low, up, indpb):
-     elif len(up) < size:
-         raise IndexError("up must be at least the size of individual: %d < %d" % (len(up), size))
- 
--    for i, xl, xu in zip(xrange(size), low, up):
-+    for i, xl, xu in zip(range(size), low, up):
-         if random.random() < indpb:
-             individual[i] = random.randint(xl, xu)
- 
-@@ -207,7 +207,7 @@ def mutESLogNormal(individual, c, indpb):
-     n = random.gauss(0, 1)
-     t0_n = t0 * n
- 
--    for indx in xrange(size):
-+    for indx in range(size):
-         if random.random() < indpb:
-             individual.strategy[indx] *= math.exp(t0_n + t * random.gauss(0, 1))
-             individual[indx] += individual.strategy[indx] * random.gauss(0, 1)
---- deap/tools/selection.py.orig	2020-01-21 01:17:45 UTC
-+++ deap/tools/selection.py
-@@ -1,4 +1,4 @@
--from __future__ import division
-+
- import random
- import numpy as np
- 
*** 208 LINES SKIPPED ***