code: def _aml_property(
      param_path,
      name=None,
      types=None,
      validate_fn=None,
      freezable=False,
      set_input=True,
  ):
      path = param_path.split(".")
      name = name or path[-1]
  
      def attr_name(self, attr):
          return (
              ("_" + self.__class__.__name__ + attr)
              if attr.startswith("__") and not attr.endswith("__")
              else attr
          )
  
      def _fget(self):
          _input = getattr(self, attr_name(self, "__input"))
          return _input.get(name)
  
      def _fset(self, value):
          if freezable and getattr(
              self, attr_name(self, "__frozen"), False
          ):
              raise H2OValueError(
                  "Param ``%s`` can not be modified after the first call to ``train``."
                  % name,
                  name,
              )
          if types is not None:
              assert_is_type(value, *types)
          input_val = value
          if validate_fn:
              value = validate_fn(self, value)
          _input = getattr(self, attr_name(self, "__input"))
          _input[name] = input_val if set_input else value
          group = getattr(self, attr_name(self, path[0]))
          if group is None:
              group = {}
              setattr(self, attr_name(self, path[0]), group)
          obj = group
          for t in path[1:-1]:
              tmp = obj.get(t)
              if tmp is None:
                  tmp = obj[t] = {}
              obj = tmp
          obj[path[-1]] = value
  
      return property(
          fget=_fget, fset=_fset, doc=_params_doc_.get(name, None)
      )
  
imports: import functools
  from inspect import getdoc
  import re
  import h2o
  from h2o.base import Keyed
  from h2o.estimators import H2OEstimator
  from h2o.exceptions import H2OResponseError, H2OValueError
  from h2o.frame import H2OFrame
  from h2o.job import H2OJob
  from h2o.utils.compatibility import *
  from h2o.utils.shared_utils import check_id
  from h2o.utils.typechecks import assert_is_type, is_type, numeric
  from ._base import H2OAutoMLBaseMixin, _fetch_state
label_desc: Use image node_id 2 for calling a global function with example usage: _aml_property(param_path, name, types, validate_fn, freezable, set_input) and returns: property, unknown, _input