docs: def laplace_crossover(random, mom, dad, args):
      """Return the offspring of Laplace crossover on the candidates.
      
      This function performs Laplace crosssover (LX), following the 
      implementation specified in (Deep and Thakur, "A new crossover 
      operator for real coded genetic algorithms," Applied Mathematics 
      and Computation, Volume 188, Issue 1, May 2007, pp. 895--911).
      This function also makes use of the bounder function as specified 
      in the EC's ``evolve`` method.    
   
      .. Arguments:
         random -- the random number generator object
         mom -- the first parent candidate
         dad -- the second parent candidate
         args -- a dictionary of keyword arguments
  
      Optional keyword arguments in args:
      
      - *crossover_rate* -- the rate at which crossover is performed 
        (default 1.0)
      - *lx_location* -- the location parameter (default 0)
      - *lx_scale* -- the scale parameter (default 0.5)
      
      In some sense, the *lx_location* and *lx_scale* parameters can be thought 
      of as analogs in a Laplace distribution to the mean and standard 
      deviation of a Gaussian distribution. If *lx_scale* is near zero, offspring 
      will be produced near the parents. If *lx_scale* is farther from zero, 
      offspring will be produced far from the parents.
      
      """
      crossover_rate = args.setdefault('crossover_rate', 1.0)
      if random.random() < crossover_rate:
          bounder = args['_ec'].bounder
          a = args.setdefault('lx_location', 0)
          b = args.setdefault('lx_scale', 0.5)
          bro = copy.copy(dad)
          sis = copy.copy(mom)
          for i, (m, d) in enumerate(zip(mom, dad)):
              u = random.random()
              if random.random() <= 0.5:
                  beta = a - b * math.log(u)
              else:
                  beta = a + b * math.log(u)
              bro[i] = m + beta * abs(m - d)
              sis[i] = d + beta * abs(m - d)
          bro = bounder(bro, args)
          sis = bounder(sis, args)
          return [bro, sis]
      else:
          return [mom, dad]