Implementation of the parent abstract method.

        In this mode, root_path should be a valid folder, and each item is a subfolder (multifile) or a file
        (singlefile):

            location/
            |-singlefile_sub_item1.<ext>
            |-singlefile_sub_item2.<ext>
            |-multifile_sub_item3/
              |- ...

        :param parent_location: the absolute file prefix of the parent item. it may be a folder (non-flat mode)
        or a folder + a file name prefix (flat mode)
        :param no_errors: a boolean used in internal recursive calls in order to catch errors. Should not be changed by
        users.
        :return: a dictionary of {item_name : item_prefix}

def find_multifile_object_children(self, parent_location, no_errors: bool = False) -> Dict[str, str]:
        """
        Implementation of the parent abstract method.

        In this mode, root_path should be a valid folder, and each item is a subfolder (multifile) or a file
        (singlefile):

            location/
            |-singlefile_sub_item1.<ext>
            |-singlefile_sub_item2.<ext>
            |-multifile_sub_item3/
              |- ...

        :param parent_location: the absolute file prefix of the parent item. it may be a folder (non-flat mode)
        or a folder + a file name prefix (flat mode)
        :param no_errors: a boolean used in internal recursive calls in order to catch errors. Should not be changed by
        users.
        :return: a dictionary of {item_name : item_prefix}
        """

        # (1) Assert that folder_path is a folder
        if not isdir(parent_location):
            if no_errors:
                return dict()
            else:
                raise ValueError('Cannot find a multifileobject at location \'' + parent_location + '\' : location is '
                                 'not a valid folder')

        else:
            # (2) List folders (multifile objects or collections)
            all_subfolders = [dir_ for dir_ in listdir(parent_location) if isdir(join(parent_location, dir_))]
            items = {item_name: join(parent_location, item_name) for item_name in all_subfolders}

            # (3) List singlefiles *without* their extension
            items.update({
                          item_name: join(parent_location, item_name)
                          for item_name in [file_name[0:file_name.rindex(EXT_SEPARATOR)]
                                            for file_name in listdir(parent_location)
                                            if isfile(join(parent_location, file_name))
                                            and EXT_SEPARATOR in file_name]
                         })
        # (4) return all
        return items