code: def fill_binop(left, right, fill_value):
      
      # TODO: can we make a no-copy implementation?
      if fill_value is not None:
          left_mask = isna(left)
          right_mask = isna(right)
          left = left.copy()
          right = right.copy()
  
          # one but not both
          mask = left_mask ^ right_mask
          left[left_mask & mask] = fill_value
          right[right_mask & mask] = fill_value
      return left, right
docs: If a non-None fill_value is given, replace null entries in left and right
      with this value, but only in positions where _one_ of left/right is null,
      not both.
  
      Parameters
      ----------
      left : array-like
      right : array-like
      fill_value : object
  
      Returns
      -------
      left : array-like
      right : array-like
  
      Notes
      -----
      Makes copies if fill_value is not None