docs: def model_definition_factory(base_model_definition, **kwargs):
      """
      Provides an iterator over passed-in
      configuration values, allowing for easy
      exploration of models.
  
      Parameters:
      ___________
  
      base_model_definition:
          The base `ModelDefinition` to augment
  
      kwargs:
          Can be any keyword accepted by `ModelDefinition`.
          Values should be iterables.
      """
      if not kwargs:
          yield config
      else:
          for param in kwargs:
              if not hasattr(base_model_definition, param):
                  raise ValueError("'%s' is not a valid configuration parameter" % param)
  
          for raw_params in itertools.product(*kwargs.values()):
              new_definition = copy.copy(base_model_definition)
              new_definition.update(dict(zip(kwargs.keys(), raw_params)))
              yield new_definition