def linear_forward(current_set, parameter_w, parameter_b):
    """
    linear step for forward propagation
    :param current_set: current A, numpy arrays
    :param parameter_w: current parameter W, numpy arrays
    :param parameter_b: current parameter b, numpy arrays
    :return: current z, and caches for following calculations, numpy arrays and dictionaries
    """

    current_z = parameter_w.dot(current_set) + parameter_b

    assert (current_z.shape == (parameter_w.shape[0], current_set.shape[1]))
    cache = (current_set, parameter_w, parameter_b)

    return current_z, cache