code: def list_sources(embedding_name=None):
      
  
      text_embedding_reg = registry.get_registry(TokenEmbedding)
  
      if embedding_name is not None:
          embedding_name = embedding_name.lower()
          if embedding_name not in text_embedding_reg:
              raise KeyError('Cannot find `embedding_name` {}. Use '
                             '`list_sources(embedding_name=None).keys()` to get all the valid'
                             'embedding names.'.format(embedding_name))
          return list(text_embedding_reg[embedding_name].source_file_hash.keys())
      else:
          return {embedding_name: list(embedding_cls.source_file_hash.keys())
                  for embedding_name, embedding_cls in registry.get_registry(TokenEmbedding).items()}
docs: Get valid token embedding names and their pre-trained file names.
  
  
      To load token embedding vectors from an externally hosted pre-trained token embedding file,
      such as those of GloVe and FastText, one should use
      `gluonnlp.embedding.create(embedding_name, source)`. This method returns all the
      valid names of `source` for the specified `embedding_name`. If `embedding_name` is set to
      None, this method returns all the valid names of `embedding_name` with their associated
      `source`.
  
  
      Parameters
      ----------
      embedding_name : str or None, default None
          The pre-trained token embedding name.
  
  
      Returns
      -------
      dict or list:
          A list of all the valid pre-trained token embedding file names (`source`) for the
          specified token embedding name (`embedding_name`). If the text embedding name is set to
          None, returns a dict mapping each valid token embedding name to a list of valid pre-trained
          files (`source`). They can be plugged into
          `gluonnlp.embedding.create(embedding_name, source)`.