code: def list_groups(self, scope_descriptor=None, subject_types=None, continuation_token=None):
          
          query_parameters = {}
          if scope_descriptor is not None:
              query_parameters['scopeDescriptor'] = self._serialize.query('scope_descriptor', scope_descriptor, 'str')
          if subject_types is not None:
              subject_types = ",".join(subject_types)
              query_parameters['subjectTypes'] = self._serialize.query('subject_types', subject_types, 'str')
          if continuation_token is not None:
              query_parameters['continuationToken'] = self._serialize.query('continuation_token', continuation_token, 'str')
          response = self._send(http_method='GET',
                                location_id='ebbe6af8-0b91-4c13-8cf1-777c14858188',
                                version='5.0-preview.1',
                                query_parameters=query_parameters)
          response_object = models.PagedGraphGroups()
          response_object.graph_groups = self._deserialize('[GraphGroup]', self._unwrap_collection(response))
          response_object.continuation_token = response.headers.get('X-MS-ContinuationToken')
          return response_object
docs: ListGroups.
          [Preview API] Gets a list of all groups in the current scope (usually organization or account).
          :param str scope_descriptor: Specify a non-default scope (collection, project) to search for groups.
          :param [str] subject_types: A comma separated list of user subject subtypes to reduce the retrieved results, e.g. Microsoft.IdentityModel.Claims.ClaimsIdentity
          :param str continuation_token: An opaque data blob that allows the next page of data to resume immediately after where the previous page ended. The only reliable way to know if there is more data left is the presence of a continuation token.
          :rtype: :class:`<PagedGraphGroups> <azure.devops.v5_0.graph.models.PagedGraphGroups>`