docs: def weld_merge_outer_join(arrays_self, weld_types_self, arrays_other, weld_types_other,
                            how, is_on_sorted, is_on_unique, readable_text):
      """Applies merge-join on the arrays returning indices from each to keep in the resulting
  
      Parameters
      ----------
      arrays_self : list of (numpy.ndarray or WeldObject)
          Columns from the self DataFrame on which to join.
      weld_types_self : list of WeldType
          Corresponding Weld types.
      arrays_other : list of (numpy.ndarray or WeldObject)
          Columns from the other DataFrame on which to join.
      weld_types_other : list of WeldType
          Corresponding Weld types.
      how : {'outer'}
          Here it is not used but kept to maintain same method signature as weld_merge_join
      is_on_sorted : bool
          If we know that the on columns are already sorted, can employ faster algorithm.
      is_on_unique : bool
          If we know that the values are unique, can employ faster algorithm.
      readable_text : str
          Explanatory string to add in the Weld placeholder.
  
      Returns
      -------
      tuple of WeldObject
          Three objects: first 2 are indices from the input arrays, indices of the rows from self and other that should be
          available in the resulting joined DataFrame. The last object will be a tuple containing the new index with
          actual values, not indices to other rows.
  
      """
      assert is_on_unique
  
      weld_obj_vec_of_struct_self = weld_arrays_to_vec_of_struct(arrays_self, weld_types_self)
      weld_obj_vec_of_struct_other = weld_arrays_to_vec_of_struct(arrays_other, weld_types_other)
  
      weld_obj_join = _weld_merge_outer_join(weld_obj_vec_of_struct_self,
                                             weld_obj_vec_of_struct_other,
                                             weld_types_self,
                                             len(arrays_self),
                                             is_on_unique)
  
      intermediate_result = LazyStructResult(weld_obj_join, [WeldVec(WeldLong()),
                                                             WeldVec(WeldLong()),
                                                             WeldStruct([WeldVec(weld_type)
                                                                         for weld_type in weld_types_self])])
      dependency_name = Cache.cache_intermediate_result(intermediate_result, readable_text)
  
      weld_objects_indexes = extract_placeholder_weld_objects(dependency_name, 2, readable_text)
      weld_objects_new_index = extract_placeholder_weld_objects_from_index(dependency_name,
                                                                           len(weld_types_self),
                                                                           readable_text,
                                                                           2)
  
      return weld_objects_indexes + [weld_objects_new_index]