docs: def arithmetic_crossover(random, mom, dad, args):
      """Return the offspring of arithmetic crossover on the candidates.
  
      This function performs arithmetic crossover (AX), which is similar to a 
      generalized weighted averaging of the candidate elements. The allele
      of each parent is weighted by the *ax_alpha* keyword argument, and
      the allele of the complement parent is weighted by 1 - *ax_alpha*.
      This averaging is only done on the alleles listed in the *ax_points*
      keyword argument. If this argument is ``None``, then all alleles
      are used. This means that if this function is used with all default
      values, then offspring are simple averages of their parents.
      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)
      - *ax_alpha* -- the weight for the averaging (default 0.5)
      - *ax_points* -- a list of points specifying the alleles to
        recombine (default None)
      
      """
      ax_alpha = args.setdefault('ax_alpha', 0.5)
      ax_points = args.setdefault('ax_points', None)
      crossover_rate = args.setdefault('crossover_rate', 1.0)
      bounder = args['_ec'].bounder
      children = []
      if random.random() < crossover_rate:
          bro = copy.copy(dad)
          sis = copy.copy(mom)
          if ax_points is None:
              ax_points = list(range(min(len(bro), len(sis))))
          for i in ax_points:
              bro[i] = ax_alpha * mom[i] + (1 - ax_alpha) * dad[i]
              sis[i] = ax_alpha * dad[i] + (1 - ax_alpha) * mom[i]
          bro = bounder(bro, args)
          sis = bounder(sis, args)
          children.append(bro)
          children.append(sis)
      else:
          children.append(mom)
          children.append(dad)
      return children