def initialize_simulation(components: List, input_config: Mapping=None,
                          plugin_config: Mapping=None) -> InteractiveContext:
    """Construct a simulation from a list of components, component
    configuration, and a plugin configuration.

    The simulation context returned by this method still needs to be setup by
    calling its setup method. It is mostly useful for testing and debugging.

    Parameters
    ----------
    components
        A list of initialized simulation components. Corresponds to the
        components block of a model specification.
    input_config
        A nested dictionary with any additional simulation configuration
        information needed. Corresponds to the configuration block of a model
        specification.
    plugin_config
        A dictionary containing a description of any simulation plugins to
        include in the simulation. If you're using this argument, you're either
        deep in the process of simulation development or the maintainers have
        done something wrong. Corresponds to the plugins block of a model
        specification.

    Returns
    -------
        An initialized (but not set up) simulation context.
    """
    config = build_simulation_configuration()
    config.update(input_config)
    plugin_manager = PluginManager(plugin_config)

    return InteractiveContext(config, components, plugin_manager)
Construct a simulation from a list of components, component
    configuration, and a plugin configuration.

    The simulation context returned by this method still needs to be setup by
    calling its setup method. It is mostly useful for testing and debugging.

    Parameters
    ----------
    components
        A list of initialized simulation components. Corresponds to the
        components block of a model specification.
    input_config
        A nested dictionary with any additional simulation configuration
        information needed. Corresponds to the configuration block of a model
        specification.
    plugin_config
        A dictionary containing a description of any simulation plugins to
        include in the simulation. If you're using this argument, you're either
        deep in the process of simulation development or the maintainers have
        done something wrong. Corresponds to the plugins block of a model
        specification.

    Returns
    -------
        An initialized (but not set up) simulation context.