<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def create_volume(self, name=None, driver=None, driver_opts=None, labels=None):
 """ Create and register a named volume Args: name (str):
 Name of the volume driver (str):
 Name of the driver used to create the volume driver_opts (dict):
 Driver options as a key-value dictionary labels (dict):
 Labels to set on the volume Returns: (dict):
 The created volume reference object Raises: :py:class:`docker.errors.APIError` If the server returns an error. Example: driver_opts={'foo': 'bar', 'baz': 'false'}, labels={"key": "value"}) {u'Driver': u'local', u'Labels': {u'key': u'value'}, u'Mountpoint': u'/var/lib/docker/volumes/foobar/_data', u'Name': u'foobar', u'Scope': u'local'} """

        url = self._url('/volumes/create')
        if driver_opts is not None and not isinstance(driver_opts, dict):
            raise TypeError('driver_opts must be a dictionary')

        data = {
            'Name': name,
            'Driver': driver,
            'DriverOpts': driver_opts,
        }

        if labels is not None:
            if utils.compare_version('1.23', self._version) < 0:
                raise errors.InvalidVersion(
                    'volume labels were introduced in API 1.23'
                )
            if not isinstance(labels, dict):
                raise TypeError('labels must be a dictionary')
            data["Labels"] = labels

        return self._result(self._post_json(url, data=data), True)