class_docstr: A settings object configures options including verbosity, runtime controls,
  persistence, determinism, and more.
  
  Default values are picked up from the settings.default object and
  changes made there will be picked up in newly created settings.
class_docstr_tok: ["A","settings","object","configures","options","including","verbosity",",","runtime","controls",",","persistence",",","determinism",",","and","more",".","Default","values","are","picked","up","from","the","settings.default","object","and","changes","made","there","will","be","picked","up","in","newly","created","settings","."]
docstr: Add a new setting.
  
  - name is the name of the property that will be used to access the
    setting. This must be a valid python identifier.
  - description will appear in the property's docstring
  - default is the default value. This may be a zero argument
    function in which case it is evaluated and its result is stored
    the first time it is accessed on any given settings object.
code: def _define_setting(
      cls,
      name,
      description,
      *,
      default,
      options=None,
      validator=None,
      show_default=True,
  ):
      """Add a new setting.
  
      - name is the name of the property that will be used to access the
        setting. This must be a valid python identifier.
      - description will appear in the property's docstring
      - default is the default value. This may be a zero argument
        function in which case it is evaluated and its result is stored
        the first time it is accessed on any given settings object.
      """
      if settings.__definitions_are_locked:
          raise InvalidState(
              "settings have been locked and may no longer be defined."
          )
      if options is not None:
          options = tuple(options)
          assert default in options
  
          def validator(value):
              if value not in options:
                  msg = f"Invalid {name}, {value!r}. Valid options: {options!r}"
                  raise InvalidArgument(msg)
              return value
  
      else:
          assert validator is not None
  
      all_settings[name] = Setting(
          name=name,
          description=description.strip(),
          default=default,
          validator=validator,
      )
      setattr(settings, name, settingsProperty(name, show_default))
  
imports: import contextlib
  import datetime
  import inspect
  import os
  import warnings
  from enum import Enum, EnumMeta, IntEnum, unique
  from typing import TYPE_CHECKING, Any, ClassVar, Collection, Dict, List, Optional, TypeVar, Union
  import attr
  from hypothesis.errors import HypothesisDeprecationWarning, InvalidArgument, InvalidState
  from hypothesis.internal.reflection import get_pretty_function_description
  from hypothesis.internal.validation import check_type, try_convert
  from hypothesis.utils.conventions import not_set
  from hypothesis.utils.dynamicvariables import DynamicVariable
label_desc: Use image node_id 4 for calling the settings obj's underlying member method code with example usage: obj._define_setting(cls, name, description) and returns: value