class_docstr: Generic multi-argument transformation.
code: def _detect_parameters(transform_callable) -> Tuple[int, int]:
      min_params = 0
      max_params = 0
  
      if hasattr(transform_callable, "min_params") and hasattr(
          transform_callable, "max_params"
      ):
          min_params = transform_callable.min_params
          max_params = transform_callable.max_params
      elif MultiParamTransformCallable._is_torchvision_transform(
          transform_callable
      ):
          min_params = 1
          max_params = 1
      else:
          t_sig = signature(transform_callable)
          for param_name in t_sig.parameters:
              param = t_sig.parameters[param_name]
              if param.kind == Parameter.KEYWORD_ONLY:
                  raise ValueError(
                      f"Invalid transformation {transform_callable}: "
                      f"keyword-only parameters (such as {param_name}) are "
                      "not supported."
                  )
              elif param.kind == Parameter.POSITIONAL_ONLY:
                  # Positional-only (not much used)
                  min_params += 1
                  max_params += 1
              elif param.kind == Parameter.POSITIONAL_OR_KEYWORD:
                  # Standard function parameter
                  if param.default == Parameter.empty:
                      # Not optional
                      min_params += 1
                      max_params += 1
                  else:
                      # Has a default value -> optional
                      max_params += 1
              elif param.kind == Parameter.VAR_POSITIONAL:  # *args
                  max_params = -1  # As for "infinite"
              # elif param.kind == Parameter.VAR_KEYWORD  # **kwargs
              # **kwargs can be safely ignored (they will be empty)
      return min_params, max_params
  
imports: from abc import ABC, abstractmethod
  import warnings
  from typing import Any, Callable, Iterable, List, Sequence, Tuple, Union
  from inspect import signature, Parameter
  from torchvision.transforms import Compose
label_desc: Use image node_id 5 for calling the MultiParamTransformCallable obj's underlying member method code with example usage: obj._detect_parameters(transform_callable) and returns: min_params,  max_params