code: def update_pull_request_properties(self, patch_document, repository_id, pull_request_id, project=None):
          
          route_values = {}
          if project is not None:
              route_values['project'] = self._serialize.url('project', project, 'str')
          if repository_id is not None:
              route_values['repositoryId'] = self._serialize.url('repository_id', repository_id, 'str')
          if pull_request_id is not None:
              route_values['pullRequestId'] = self._serialize.url('pull_request_id', pull_request_id, 'int')
          content = self._serialize.body(patch_document, '[JsonPatchOperation]')
          response = self._send(http_method='PATCH',
                                location_id='48a52185-5b9e-4736-9dc1-bb1e2feac80b',
                                version='5.1-preview.1',
                                route_values=route_values,
                                content=content,
                                media_type='application/json-patch+json')
          return self._deserialize('object', response)
docs: UpdatePullRequestProperties.
          [Preview API] Create or update pull request external properties. The patch operation can be `add`, `replace` or `remove`. For `add` operation, the path can be empty. If the path is empty, the value must be a list of key value pairs. For `replace` operation, the path cannot be empty. If the path does not exist, the property will be added to the collection. For `remove` operation, the path cannot be empty. If the path does not exist, no action will be performed.
          :param :class:`<[JsonPatchOperation]> <azure.devops.v5_1.git.models.[JsonPatchOperation]>` patch_document: Properties to add, replace or remove in JSON Patch format.
          :param str repository_id: The repository ID of the pull request’s target branch.
          :param int pull_request_id: ID of the pull request.
          :param str project: Project ID or project name
          :rtype: :class:`<object> <azure.devops.v5_1.git.models.object>`