class_docstr: Decorator for evaluation functions, it scales the objective function by
  *factor* which should be the same length as the individual size. When
  called the decorated function should take as first argument the individual
  to be evaluated. The inverse factor vector is actually applied to the
  individual and the resulting list is given to the evaluation function.
  Thus, the evaluation function shall not be expecting an individual as it
  will receive a plain list.
  
  This decorator adds a :func:`scale` method to the decorated function.
class_docstr_tok: ["Decorator","for","evaluation","functions",",","it","scales","the","objective","function","by","*","factor","*","which","should","be","the","same","length","as","the","individual","size",".","When","called","the","decorated","function","should","take","as","first","argument","the","individual","to","be","evaluated",".","The","inverse","factor","vector","is","actually","applied","to","the","individual","and","the","resulting","list","is","given","to","the","evaluation","function",".","Thus",",","the","evaluation","function","shall","not","be","expecting","an","individual","as","it","will","receive","a","plain","list",".","This","decorator","adds","a",":","func",":","`","scale","`","method","to","the","decorated","function","."]
code: def __call__(self, func):
      # wraps is used to combine stacked decorators that would add functions
      @wraps(func)
      def wrapper(individual, *args, **kargs):
          return func(
              [v * f for v, f in zip(individual, self.factor)],
              *args,
              **kargs,
          )
  
      wrapper.scale = self.scale
      return wrapper
  
imports: from math import hypot, sqrt
  from functools import wraps
  from itertools import repeat
label_desc: Use image node_id 2 for calling the scale obj's underlying member method code with example usage: obj.__call__(func) and returns: wrapper, func