class_docstr: The fitness is a measure of quality of a solution. If *values* are
  provided as a tuple, the fitness is initialized using those values,
  otherwise it is empty (or invalid).
  
  :param values: The initial values of the fitness as a tuple, optional.
  
  Fitnesses may be compared using the ``>``, ``<``, ``>=``, ``<=``, ``==``,
  ``!=``. The comparison of those operators is made lexicographically.
  Maximization and minimization are taken care off by a multiplication
  between the :attr:`weights` and the fitness :attr:`values`. The comparison
  can be made between fitnesses of different size, if the fitnesses are
  equal until the extra elements, the longer fitness will be superior to the
  shorter.
  
  Different types of fitnesses are created in the :ref:`creating-types`
  tutorial.
  
  .. note::
     When comparing fitness values that are **minimized**, ``a > b`` will
     return :data:`True` if *a* is **smaller** than *b*.
code: def setValues(self, values):
      assert len(values) == len(
          self.weights
      ), "Assigned values have not the same length than fitness weights"
      try:
          self.wvalues = tuple(map(mul, values, self.weights))
      except TypeError:
          _, _, traceback = sys.exc_info()
          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)
          ).with_traceback(traceback)
  
imports: import sys
  from copy import deepcopy
  from functools import partial
  from operator import mul, truediv
label_desc: Use image node_id 3 for calling the Fitness obj's underlying member method code with example usage: obj.setValues(values) without return types