docstr: Method that collects all the static tags associated to any
  inheritting class. The Base class for cuML's estimators already
  uses this mixin, so most estimators don't need to use this Mixin
  directly.
  
  - Tags usage:
  
  In general, inheriting classes can use the appropriate Mixins defined
  in this file. Additional static tags can be defined by the
  `_get_static_tags` method like:
  
  ```
  @staticmethod
  def _more_static_tags():
     return {
          "requires_y": True
     }
  ```
  
  The method traverses the MRO in reverse
  order, i.e. the closer the parent to the final class will be
  explored later, so that children classes can overwrite their
  parent tags.
  
  - Mixin Usage
  
  If your class is not inheritting from cuml's Base
  then your class can use composition from this Mixin to get the tags
  behavior. If you want your class to have default tags different than
  the ones defined in this file, then implement the `_default_tags`
  method that returns a dictionary, like:
  
  class BaseClassWithTags(TagMixin)
      @staticmethod
      def _default_tags():
          return {'tag1': True, 'tag2': False}
  
  Method and code based on scikit-learn 0.21 _get_tags functionality:
  https://scikit-learn.org/stable/developers/develop.html#estimator-tags
  
  Examples
  --------
  
  >>> import cuml
  >>>
  >>> cuml.DBSCAN._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","that","collects","all","the","static","tags","associated","to","any","inheritting","class",".","The","Base","class","for","cuML","'s","estimators","already","uses","this","mixin",",","so","most","estimators","do","n't","need","to","use","this","Mixin","directly",".","-","Tags","usage",":","In","general",",","inheriting","classes","can","use","the","appropriate","Mixins","defined","in","this","file",".","Additional","static","tags","can","be","defined","by","the","`","_get_static_tags","`","method","like",":","``","`","@","staticmethod","def","_more_static_tags","(",")",":","return","{","``","requires_y","''",":","True","}","``","`","The","method","traverses","the","MRO","in","reverse","order",",","i.e",".","the","closer","the","parent","to","the","final","class","will","be","explored","later",",","so","that","children","classes","can","overwrite","their","parent","tags",".","-","Mixin","Usage","If","your","class","is","not","inheritting","from","cuml","'s","Base","then","your","class","can","use","composition","from","this","Mixin","to","get","the","tags","behavior",".","If","you","want","your","class","to","have","default","tags","different","than","the","ones","defined","in","this","file",",","then","implement","the","`","_default_tags","`","method","that","returns","a","dictionary",",","like",":","class","BaseClassWithTags","(","TagMixin",")","@","staticmethod","def","_default_tags","(",")",":","return","{","'tag1","'",":","True",",","'tag2","'",":","False","}","Method","and","code","based","on","scikit-learn","0.21","_get_tags","functionality",":","https",":","\/\/scikit-learn.org\/stable\/developers\/develop.html","#","estimator-tags","Examples","--","--","--","--",">",">",">","import","cuml",">",">",">",">",">",">","cuml.DBSCAN._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(cls):
      """
      Method that collects all the static tags associated to any
      inheritting class. The Base class for cuML's estimators already
      uses this mixin, so most estimators don't need to use this Mixin
      directly.
  
      - Tags usage:
  
      In general, inheriting classes can use the appropriate Mixins defined
      in this file. Additional static tags can be defined by the
      `_get_static_tags` method like:
  
      ```
      @staticmethod
      def _more_static_tags():
         return {
              "requires_y": True
         }
      ```
  
      The method traverses the MRO in reverse
      order, i.e. the closer the parent to the final class will be
      explored later, so that children classes can overwrite their
      parent tags.
  
      - Mixin Usage
  
      If your class is not inheritting from cuml's Base
      then your class can use composition from this Mixin to get the tags
      behavior. If you want your class to have default tags different than
      the ones defined in this file, then implement the `_default_tags`
      method that returns a dictionary, like:
  
      class BaseClassWithTags(TagMixin)
          @staticmethod
          def _default_tags():
              return {'tag1': True, 'tag2': False}
  
      Method and code based on scikit-learn 0.21 _get_tags functionality:
      https://scikit-learn.org/stable/developers/develop.html#estimator-tags
  
      Examples
      --------
  
      >>> import cuml
      >>>
      >>> cuml.DBSCAN._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(cls, "_default_tags"):
          tags = cls._default_tags()
      else:
          tags = deepcopy(_default_tags)
      for cl in reversed(inspect.getmro(cls)):
          if hasattr(cl, "_more_static_tags"):
              more_tags = cl._more_static_tags()
              tags.update(more_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 1 for calling the TagsMixin obj's underlying member method code with example usage: obj._get_tags(cls) and returns: tags