<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def add_file_dependency(self, path, location):
 """ Add a file or directory dependency into an Streams application bundle. Ensures that the file or directory at `path` on the local system will be available at runtime. The file will be copied and made available relative to the application directory. Location determines where the file is relative to the application directory. Two values for location are supported `etc` and `opt`. The runtime path relative to application directory is returned. The copy is made during the submit call thus the contents of the file or directory must remain availble until submit returns. For example calling ``add_file_dependency('/tmp/conf.properties', 'etc')`` will result in contents of the local file `conf.properties` being available at runtime at the path `application directory`/etc/conf.properties. This call returns ``etc/conf.properties``. Python callables can determine the application directory at runtime with :py:func:`~streamsx.ec.get_application_directory`. For example the path above at runtime is ``os.path.join(streamsx.ec.get_application_directory(), 'etc', 'conf.properties')`` Args: path(str):
 Path of the file on the local system. location(str):
 Location of the file in the bundle relative to the application directory. Returns: str: Path relative to application directory that can be joined at runtime with ``get_application_directory``. .. versionadded:: 1.7 """

        if location not in {'etc', 'opt'}:
            raise ValueError(location)

        if not os.path.isfile(path) and not os.path.isdir(path):
            raise ValueError(path)

        path = os.path.abspath(path)

        if location not in self._files:
             self._files[location] = [path]
        else:
             self._files[location].append(path)
        return location + '/' + os.path.basename(path)