class_docstr: Implements a conditional property using the descriptor protocol based on the property decorator.
  
  The corresponding class in scikit-learn (`_AvailableIfDescriptor`) only supports callables.
  This class adopts the property decorator as described in the descriptor guide in the offical Python documentation.
  
  See also
  --------
  https://docs.python.org/3/howto/descriptor.html
      Descriptor HowTo Guide
  
  :class:`sklearn.utils.available_if._AvailableIfDescriptor`
      The original class in scikit-learn.
code: def __get__(self, obj, objtype=None):
      if obj is None:
          return self
  
      attr_err = AttributeError(
          f"This {obj!r} has no attribute {self._name!r}"
      )
      if not self.check(obj):
          raise attr_err
  
      if self.fget is None:
          raise AttributeError(f"property '{self._name}' has no getter")
      return self.fget(obj)
  
file_path: scikit-survival/sksurv/util.py
imports: import numpy
  import pandas
  from pandas.api.types import CategoricalDtype
  from sklearn.utils import check_array, check_consistent_length
label_desc: Use image node_id 3 for calling the _PropertyAvailableIfDescriptor obj's underlying member method code with example usage: obj.__get__(obj, objtype) and returns: self, self