class_docstr: Speeds up inference calls to MatrixFactorization models by using
  `NMSLib <https://github.com/nmslib/nmslib>`_ to create approximate nearest neighbours
  indices of the latent factors.
  
  Parameters
  ----------
  model : MatrixFactorizationBase
      A matrix factorization model to use for the factors
  method : str, optional
      The NMSLib method to use
  index_params: dict, optional
      Optional params to send to the createIndex call in NMSLib
  query_params: dict, optional
      Optional query time params for the NMSLib 'setQueryTimeParams' call
  approximate_similar_items : bool, optional
      whether or not to build an NMSLIB index for computing similar_items
  approximate_recommend : bool, optional
      whether or not to build an NMSLIB index for the recommend call
  
  Attributes
  ----------
  similar_items_index : nmslib.FloatIndex
      NMSLib index for looking up similar items in the cosine space formed by the latent
      item_factors
  
  recommend_index : nmslib.FloatIndex
      NMSLib index for looking up similar items in the inner product space formed by the latent
      item_factors
class_docstr_tok: ["Speeds","up","inference","calls","to","MatrixFactorization","models","by","using","`","NMSLib","<","https",":","\/\/github.com\/nmslib\/nmslib",">","`","_","to","create","approximate","nearest","neighbours","indices","of","the","latent","factors",".","Parameters","--","--","--","--","--","model",":","MatrixFactorizationBase","A","matrix","factorization","model","to","use","for","the","factors","method",":","str",",","optional","The","NMSLib","method","to","use","index_params",":","dict",",","optional","Optional","params","to","send","to","the","createIndex","call","in","NMSLib","query_params",":","dict",",","optional","Optional","query","time","params","for","the","NMSLib","'setQueryTimeParams","'","call","approximate_similar_items",":","bool",",","optional","whether","or","not","to","build","an","NMSLIB","index","for","computing","similar_items","approximate_recommend",":","bool",",","optional","whether","or","not","to","build","an","NMSLIB","index","for","the","recommend","call","Attributes","--","--","--","--","--","similar_items_index",":","nmslib.FloatIndex","NMSLib","index","for","looking","up","similar","items","in","the","cosine","space","formed","by","the","latent","item_factors","recommend_index",":","nmslib.FloatIndex","NMSLib","index","for","looking","up","similar","items","in","the","inner","product","space","formed","by","the","latent","item_factors"]
code: def similar_items(
      self,
      itemid,
      N=10,
      recalculate_item=False,
      item_users=None,
      filter_items=None,
      items=None,
  ):
      if not self.approximate_similar_items:
          return self.model.similar_items(
              itemid,
              N,
              item_users=item_users,
              recalculate_item=recalculate_item,
              filter_items=filter_items,
              items=items,
          )
  
      if items is not None:
          raise NotImplementedError(
              "using an items filter isn't supported with ANN lookup"
          )
  
      # support recalculate_item if possible. TODO: refactor this
      if hasattr(self.model, "_item_factor"):
          factors = self.model._item_factor(
              itemid, item_users, recalculate_item
          )  # pylint: disable=protected-access
      elif recalculate_item:
          raise NotImplementedError(
              f"recalculate_item isn't supported with {self.model}"
          )
      else:
          factors = self.model.item_factors[itemid]
          if implicit.gpu.HAS_CUDA and isinstance(
              factors, implicit.gpu.Matrix
          ):
              factors = factors.to_numpy()
  
      count = N
      if filter_items is not None:
          count += len(filter_items)
  
      if np.isscalar(itemid):
          ids, scores = self.similar_items_index.knnQuery(
              factors, count
          )
      else:
          results = self.similar_items_index.knnQueryBatch(
              factors, count
          )
          ids = np.stack([result[0] for result in results])
          scores = np.stack([result[1] for result in results])
  
      scores = 1.0 - scores
      if filter_items is not None:
          ids, scores = _filter_items_from_results(
              itemid, ids, scores, filter_items, N
          )
  
      return ids, scores
  
file_path: implicit/implicit/ann/nmslib.py
imports: import logging
  import nmslib
  import numpy
  from scipy.sparse import csr_matrix
  import implicit.gpu
  from implicit.recommender_base import RecommenderBase
  from implicit.utils import _batch_call, _filter_items_from_results, augment_inner_product_matrix
label_desc: Use image node_id 3 for calling the NMSLibModel obj's underlying member method code with example usage: obj.similar_items(itemid, N, recalculate_item, item_users, filter_items, items) and returns: ids,  scores, self