I think there is some confusion here. We are in the “Course 3” category, but I guess your question is related to course 4 “Convolutional Neural Networks”, is that right? I would suggest to move your post to the right category, so that the appropriate mentor can support you.
The conv_single_step() function should be passed parameters of a_slice_prev, weights, and biases.
In conv_single_step(), you should use np.multiply() with parameters of W and a_slice_prev.
What are you using for the ranges of h, w, and c?
Does your code for horizontal and vertical starts and ends give values that are in the correct ranges?