class_docstr: Ensemble Latent Dirichlet Allocation (eLDA), a method of training a topic model ensemble.
  
  Extracts stable topics that are consistently learned across multiple LDA models. eLDA has the added benefit that
  the user does not need to know the exact number of topics the topic model should extract ahead of time.
class_docstr_tok: ["Ensemble","Latent","Dirichlet","Allocation","(","eLDA",")",",","a","method","of","training","a","topic","model","ensemble",".","Extracts","stable","topics","that","are","consistently","learned","across","multiple","LDA","models",".","eLDA","has","the","added","benefit","that","the","user","does","not","need","to","know","the","exact","number","of","topics","the","topic","model","should","extract","ahead","of","time","."]
docstr: Run the CBDBSCAN algorithm on all the detected topics and label them with label-indices.
  
  The final approval and generation of stable topics is done in ``_generate_stable_topics()``.
  
  Parameters
  ----------
  eps : float
      dbscan distance scale
  min_samples : int, optional
      defaults to ``int(self.num_models / 2)``, dbscan min neighbours threshold required to consider
      a topic to be a core. Should scale with the number of models, ``self.num_models``
docstr_tok: ["Run","the","CBDBSCAN","algorithm","on","all","the","detected","topics","and","label","them","with","label-indices",".","The","final","approval","and","generation","of","stable","topics","is","done","in","``","_generate_stable_topics","(",")","``",".","Parameters","--","--","--","--","--","eps",":","float","dbscan","distance","scale","min_samples",":","int",",","optional","defaults","to","``","int","(","self.num_models","\/","2",")","``",",","dbscan","min","neighbours","threshold","required","to","consider","a","topic","to","be","a","core",".","Should","scale","with","the","number","of","models",",","``","self.num_models","``"]
code: def _generate_topic_clusters(self, eps=0.1, min_samples=None):
      """Run the CBDBSCAN algorithm on all the detected topics and label them with label-indices.
  
      The final approval and generation of stable topics is done in ``_generate_stable_topics()``.
  
      Parameters
      ----------
      eps : float
          dbscan distance scale
      min_samples : int, optional
          defaults to ``int(self.num_models / 2)``, dbscan min neighbours threshold required to consider
          a topic to be a core. Should scale with the number of models, ``self.num_models``
  
      """
      if min_samples is None:
          min_samples = int(self.num_models / 2)
          logger.info(
              "fitting the clustering model, using %s for min_samples",
              min_samples,
          )
      else:
          logger.info("fitting the clustering model")
  
      self.cluster_model = CBDBSCAN(eps=eps, min_samples=min_samples)
      self.cluster_model.fit(self.asymmetric_distance_matrix)
  
imports: import logging
  import os
  from multiprocessing import Process, Pipe, ProcessError
  import importlib
  from typing import Set, Optional, List
  import numpy
  from scipy.spatial.distance import cosine
  from dataclasses import dataclass
  from gensim import utils
  from gensim.models import ldamodel, ldamulticore, basemodel
  from gensim.utils import SaveLoad
label_desc: Use image node_id 8 for calling the EnsembleLda obj's underlying member method code with example usage: obj._generate_topic_clusters(eps, min_samples) without return types