<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def directory_copy(self, source, destination, flags):
 """Recursively copies a directory from one guest location to another. in source of type str The path to the directory to copy (in the guest). Guest path style. in destination of type str The path to the target directory (in the guest). Unless the :py:attr:`DirectoryCopyFlag.copy_into_existing` flag is given, the directory shall not already exist. Guest path style. in flags of type :class:`DirectoryCopyFlag` Zero or more :py:class:`DirectoryCopyFlag` values. return progress of type :class:`IProgress` Progress object to track the operation to completion. raises :class:`OleErrorNotimpl` Not yet implemented. """

        if not isinstance(source, basestring):
            raise TypeError("source can only be an instance of type basestring")
        if not isinstance(destination, basestring):
            raise TypeError("destination can only be an instance of type basestring")
        if not isinstance(flags, list):
            raise TypeError("flags can only be an instance of type list")
        for a in flags[:10]:
            if not isinstance(a, DirectoryCopyFlag):
                raise TypeError(
                        "array can only contain objects of type DirectoryCopyFlag")
        progress = self._call("directoryCopy",
                     in_p=[source, destination, flags])
        progress = IProgress(progress)
        return progress