docs: def validate_options(self, k, v):
          """Validate options."""
  
          args = [self.__class__.__name__, k]
          # Booleans
          if isinstance(self.config[k], bool) and not isinstance(v, bool):
              raise ValueError("{}: option '{}' must be a bool type.".format(*args))
          # Strings
          elif isinstance(self.config[k], str) and not isinstance(v, str):
              raise ValueError("{}: option '{}' must be a str type.".format(*args))
          # Integers (whole floats allowed)
          elif (
              isinstance(self.config[k], int) and
              (not isinstance(v, int) and not (isinstance(v, float) and v.is_integer()))
          ):
              raise ValueError("{}: option '{}' must be a int type.".format(*args))
          # Floats (integers allowed)
          elif isinstance(self.config[k], float) and not isinstance(v, (int, float)):
              raise ValueError("{}: option '{}' must be a float type.".format(*args))
          # Basic iterables (list, tuple, sets)
          elif isinstance(self.config[k], (list, tuple, set)) and not isinstance(v, list):
              raise ValueError("{}: option '{}' must be a float type.".format(*args))
          # Dictionaries
          elif isinstance(self.config[k], (dict, OrderedDict)) and not isinstance(v, (dict, OrderedDict)):
              raise ValueError("{}: option '{}' must be a dict type.".format(*args))