def METHOD_NAME(dynamic_model_list, position_mappings, transition_matrix, resampler):
    # Initialise particles
    particle1 = MultiModelParticle(
        state_vector=[1, 1, -0.5, 1, 1, -0.5],
        weight=1/3000,
        dynamic_model=0)
    particle2 = MultiModelParticle(
        state_vector=[1, 1, 0.5, 1, 1, 0.5],
        weight=1/3000,
        dynamic_model=1)
    particle3 = MultiModelParticle(
        state_vector=[1, 1, 0.5, 1, 1, 0.5],
        weight=1/3000,
        dynamic_model=2)
    particles = [particle1, particle2, particle3] * 1000
    timestamp = datetime.datetime.now()
    particle_state = MultiModelParticleState(
        None, particle_list=particles, timestamp=timestamp)
    predictor = MultiModelPredictor(
        dynamic_model_list, transition_matrix, position_mappings
    )
    timestamp += datetime.timedelta(seconds=5)
    prediction = predictor.predict(particle_state, timestamp)
    assert isinstance(prediction, MultiModelParticleStatePrediction)
    measurement_model = LinearGaussian(6, [0, 3], np.diag([1, 1]))
    updater = MultiModelParticleUpdater(measurement_model, predictor, resampler=resampler)
    # Detection close to where known turn rate model would place particles
    detection = Detection([[0.5, 7.]], timestamp)
    update = updater.update(hypothesis=SingleHypothesis(prediction, detection))
    assert isinstance(update, MultiModelParticleStateUpdate)
    # NOTE: This uses the parent particles' model, to see which model was applied
    # rather, than the new model that has been changed to.
    model_weights = [
        np.sum(update.weight[update.parent.dynamic_model == model_index])
        for model_index in range(len(dynamic_model_list))]
    assert float(np.sum(model_weights)) == pytest.approx(1)
    assert isinstance(dynamic_model_list[np.argmax(model_weights)], KnownTurnRate)