def METHOD_NAME(self, model_lambda, modifier_lambda, steps_per_epoch):
    model = model_lambda()
    modifier = modifier_lambda()
    loss = keras.losses.categorical_crossentropy
    optimizer = keras.optimizers.Adam()
    model, optimizer, callbacks = modifier.modify(model, optimizer, steps_per_epoch)
    assert len(callbacks) == 1
    step_callback = callbacks[0]
    epochs = 5
    batches = steps_per_epoch
    unused_arg = -1
    # Number of input and output neurons
    N = 100
    M = 10
    X_train = np.random.normal(size=(N, model.inputs[0].shape[1]))
    classes = np.random.randint(0, M, size=N)
    y_train = keras.utils.to_categorical(classes, num_classes=M)
    step_callback.on_train_begin()
    for epoch in range(epochs):
        for batch in range(batches):
            step_callback.on_train_batch_begin(batch=unused_arg)
            with tensorflow.GradientTape() as tape:
                logits = model(X_train, training=True)
                loss_value = loss(y_train, logits)
                grads = tape.gradient(loss_value, model.trainable_variables)
                optimizer.apply_gradients(zip(grads, model.trainable_variables))
            step_callback.on_train_batch_end(batch=unused_arg)
            if epoch < modifier.start_epoch:
                for layer in step_callback.prunable_layers:
                    assert not layer.mask_updater.update_ready
            if epoch == modifier.start_epoch and batch == 0:
                for layer in step_callback.prunable_layers:
                    assert layer.mask_updater.update_ready
                    assert len(layer.pruning_vars) == 1
                    weight, mask, sparsity = layer.pruning_vars[0]
                    assert sparsity == modifier.init_sparsity
            if (
                modifier.end_epoch > -1
                and epoch == modifier.end_epoch - 1
                and batch == batches - 1
            ):
                for layer in step_callback.prunable_layers:
                    assert layer.mask_updater.update_ready
                    assert len(layer.pruning_vars) == 1
                    weight, mask, sparsity = layer.pruning_vars[0]
                    assert sparsity == modifier.final_sparsity