<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def join(input_layer, others, include_self=True, join_function=None):
 """Joins the provided PrettyTensors with this using the join function. Args: input_layer: The input layer for this op. others: Sequence of PrettyTensor objects. include_self: Whether or not this includes itself or if the value is only derived from others. join_function: The function to use for joining, must accept a list of tensors. Use None for concat on the final dimension. Returns: self. """

  if include_self:
    list_of_tensors = [input_layer]
    list_of_tensors.extend(others)
  else:
    list_of_tensors = others
  return prettytensor.join_pretty_tensors(list_of_tensors, input_layer,
                                          join_function)