docstr: Method to add dynamic tags capability to objects. Useful for cases
  where a tag depends on a value of an instantiated object. Dynamic tags
  will override class static tags, and can be defined with the
  _more_tags method in inheritting classes like:
  
  def _more_tags(self):
      return {'no_validation': not self.validate}
  
  Follows the same logic regarding the MRO as the static _get_tags.
  First it collects all the static tags of the reversed MRO, and then
  collects the dynamic tags and overwrites the corresponding static
  ones.
  
  Examples
  --------
  
  >>> import cuml
  >>>
  >>> estimator = cuml.DBSCAN()
  >>> estimator._get_tags()
  {'preferred_input_order': 'C', 'X_types_gpu': ['2darray'],
  'non_deterministic': False, 'requires_positive_X': False,
  'requires_positive_y': False, 'X_types': ['2darray'],
  'poor_score': False, 'no_validation': False, 'multioutput': False,
  'allow_nan': False, 'stateless': False, 'multilabel': False,
  '_skip_test': False, '_xfail_checks': False, 'multioutput_only': False,
  'binary_only': False, 'requires_fit': True, 'requires_y': False,
  'pairwise': False}
docstr_tok: ["Method","to","add","dynamic","tags","capability","to","objects",".","Useful","for","cases","where","a","tag","depends","on","a","value","of","an","instantiated","object",".","Dynamic","tags","will","override","class","static","tags",",","and","can","be","defined","with","the","_more_tags","method","in","inheritting","classes","like",":","def","_more_tags","(","self",")",":","return","{","'no_validation","'",":","not","self.validate","}","Follows","the","same","logic","regarding","the","MRO","as","the","static","_get_tags",".","First","it","collects","all","the","static","tags","of","the","reversed","MRO",",","and","then","collects","the","dynamic","tags","and","overwrites","the","corresponding","static","ones",".","Examples","--","--","--","--",">",">",">","import","cuml",">",">",">",">",">",">","estimator","=","cuml.DBSCAN","(",")",">",">",">","estimator._get_tags","(",")","{","'preferred_input_order","'",":","'","C","'",",","'X_types_gpu","'",":","[","'2darray","'","]",",","'non_deterministic","'",":","False",",","'requires_positive_X","'",":","False",",","'requires_positive_y","'",":","False",",","'X_types","'",":","[","'2darray","'","]",",","'poor_score","'",":","False",",","'no_validation","'",":","False",",","'multioutput","'",":","False",",","'allow_nan","'",":","False",",","'stateless","'",":","False",",","'multilabel","'",":","False",",","'_skip_test","'",":","False",",","'_xfail_checks","'",":","False",",","'multioutput_only","'",":","False",",","'binary_only","'",":","False",",","'requires_fit","'",":","True",",","'requires_y","'",":","False",",","'pairwise","'",":","False","}"]
code: def _get_tags(self):
      """
      Method to add dynamic tags capability to objects. Useful for cases
      where a tag depends on a value of an instantiated object. Dynamic tags
      will override class static tags, and can be defined with the
      _more_tags method in inheritting classes like:
  
      def _more_tags(self):
          return {'no_validation': not self.validate}
  
      Follows the same logic regarding the MRO as the static _get_tags.
      First it collects all the static tags of the reversed MRO, and then
      collects the dynamic tags and overwrites the corresponding static
      ones.
  
      Examples
      --------
  
      >>> import cuml
      >>>
      >>> estimator = cuml.DBSCAN()
      >>> estimator._get_tags()
      {'preferred_input_order': 'C', 'X_types_gpu': ['2darray'],
      'non_deterministic': False, 'requires_positive_X': False,
      'requires_positive_y': False, 'X_types': ['2darray'],
      'poor_score': False, 'no_validation': False, 'multioutput': False,
      'allow_nan': False, 'stateless': False, 'multilabel': False,
      '_skip_test': False, '_xfail_checks': False, 'multioutput_only': False,
      'binary_only': False, 'requires_fit': True, 'requires_y': False,
      'pairwise': False}
  
      """
      if hasattr(self, "_default_tags"):
          tags = self._default_tags()
      else:
          tags = deepcopy(_default_tags)
      dynamic_tags = {}
      for cl in reversed(inspect.getmro(self.__class__)):
          if hasattr(cl, "_more_static_tags"):
              more_tags = cl._more_static_tags()
              tags.update(more_tags)
          if hasattr(cl, "_more_tags"):
              more_tags = cl._more_tags(self)
              dynamic_tags.update(more_tags)
      tags.update(dynamic_tags)
  
      return tags
  
imports: import inspect
  from copy import deepcopy
  from cuml.common.doc_utils import generate_docstring
  from cuml.internals.api_decorators import api_base_return_any_skipall
  from cuml.internals.base_helpers import _tags_class_and_instance
  from cuml.internals.api_decorators import enable_device_interop
label_desc: Use image node_id 2 for calling the TagsMixin obj's underlying member method code with example usage: obj._get_tags() and returns: tags