sgd.py: why add alpha*weights in gradient step?

Reviewing SGD implementations for my own learning, this is one of the more clear examples I've come across, but I'm not sure why it's adding alpha*weights instead of multiplying. Is this a bug?  If not, appreciate any clarification on the approach.