code: def uniform_crossover(random, mom, dad, args):
      
      ux_bias = args.setdefault('ux_bias', 0.5)
      crossover_rate = args.setdefault('crossover_rate', 1.0)
      children = []
      if random.random() < crossover_rate:
          bro = copy.copy(dad)
          sis = copy.copy(mom)
          for i, (m, d) in enumerate(zip(mom, dad)):
              if random.random() < ux_bias:
                  bro[i] = m
                  sis[i] = d
          children.append(bro)
          children.append(sis)
      else:
          children.append(mom)
          children.append(dad)
      return children
docs: Return the offspring of uniform crossover on the candidates.
  
      This function performs uniform crossover (UX). For each element 
      of the parents, a biased coin is flipped to determine whether 
      the first offspring gets the 'mom' or the 'dad' element. An 
      optional keyword argument in args, ``ux_bias``, determines the bias.
  
      .. 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)
      - *ux_bias* -- the bias toward the first candidate in the crossover 
        (default 0.5)