class_docstr: Mixin class to endow scikit-learn classes with Step capabilities.
  
  Steps are defined by combining any class we would like to make a step from
  with this mixin class. This mixin, among other things, endows the class of
  interest with a ``__call__`` method, making the class callable on the outputs
  (``DataPlaceholder`` objects) of previous steps and optional targets (also
  ``DataPlaceholder`` objects). You can make a step from any class you like,
  so long that class implements the scikit-learn API.
  
  Instructions:
      1. Define a class that inherits from both this mixin and the class you
         wish to make a step of (in that order!).
      2. In the class ``__init__``, call ``super().__init__(...)`` and pass the
         appropriate step parameters.
  
  The base class may implement a predict/transform method (the compute function)
  that take multiple inputs and returns multiple outputs, and a fit method that
  takes multiple inputs and targets. In this case, the input/target arguments are
  expected to be a list of (typically) array-like objects, and the compute function
  is expected to return a list of array-like objects.
  
  Parameters
  ----------
  name
      Name of the step (optional). If no name is passed, a name will be
      automatically generated.
  
  n_outputs
      The number of outputs of the step's function (predict, transform, or
      any other callable passed in the ``compute_func`` argument).
  
  Examples
  --------
  ::
  
      import sklearn.linear_model
      # The order of inheritance is important!
      class LogisticRegression(Step, sklearn.linear_model.LogisticRegression):
          def __init__(self, *args, name=None, **kwargs):
              super().__init__(*args, name=name, **kwargs)
  
      logreg = LogisticRegression(C=2.0)
class_docstr_tok: ["Mixin","class","to","endow","scikit-learn","classes","with","Step","capabilities",".","Steps","are","defined","by","combining","any","class","we","would","like","to","make","a","step","from","with","this","mixin","class",".","This","mixin",",","among","other","things",",","endows","the","class","of","interest","with","a","``","__call__","``","method",",","making","the","class","callable","on","the","outputs","(","``","DataPlaceholder","``","objects",")","of","previous","steps","and","optional","targets","(","also","``","DataPlaceholder","``","objects",")",".","You","can","make","a","step","from","any","class","you","like",",","so","long","that","class","implements","the","scikit-learn","API",".","Instructions",":","1",".","Define","a","class","that","inherits","from","both","this","mixin","and","the","class","you","wish","to","make","a","step","of","(","in","that","order","!",")",".","2",".","In","the","class","``","__init__","``",",","call","``","super","(",")",".__init__","(","...",")","``","and","pass","the","appropriate","step","parameters",".","The","base","class","may","implement","a","predict\/transform","method","(","the","compute","function",")","that","take","multiple","inputs","and","returns","multiple","outputs",",","and","a","fit","method","that","takes","multiple","inputs","and","targets",".","In","this","case",",","the","input\/target","arguments","are","expected","to","be","a","list","of","(","typically",")","array-like","objects",",","and","the","compute","function","is","expected","to","return","a","list","of","array-like","objects",".","Parameters","--","--","--","--","--","name","Name","of","the","step","(","optional",")",".","If","no","name","is","passed",",","a","name","will","be","automatically","generated",".","n_outputs","The","number","of","outputs","of","the","step","'s","function","(","predict",",","transform",",","or","any","other","callable","passed","in","the","``","compute_func","``","argument",")",".","Examples","--","--","--","--",":",":","import","sklearn.linear_model","#","The","order","of","inheritance","is","important","!","class","LogisticRegression","(","Step",",","sklearn.linear_model.LogisticRegression",")",":","def","__init__","(","self",",","*","args",",","name=None",",","*","*","kwargs",")",":","super","(",")",".__init__","(","*","args",",","name=name",",","*","*","kwargs",")","logreg","=","LogisticRegression","(","C=2.0",")"]
code: def _check_fit_compute_func(self, fit_compute_func):
      if fit_compute_func == "auto":
          if hasattr(self, "fit_predict"):
              fit_compute_func = self.fit_predict
          elif hasattr(self, "fit_transform"):
              fit_compute_func = self.fit_transform
          else:
              fit_compute_func = None
      else:
          if isinstance(fit_compute_func, str):
              fit_compute_func = getattr(self, fit_compute_func)
          elif callable(fit_compute_func):
              pass
          elif fit_compute_func is None:
              pass
          else:
              raise ValueError(
                  "If specified, `fit_compute_func` must be either None, a string or"
                  " a callable."
              )
      return fit_compute_func
  
imports: import inspect
  import warnings
  from typing import Any, Callable, Dict, List, Optional, Union, TYPE_CHECKING
  from baikal._core.data_placeholder import DataPlaceholder, is_data_placeholder_list
  from baikal._core.utils import listify, make_name, make_repr
label_desc: Use image node_id 3 for calling the Step obj's underlying member method code with example usage: obj._check_fit_compute_func(fit_compute_func) and returns: fit_compute_func