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.

p.s. I don't actually suggest this as a pull request, but am not sure how best to communicate about this code. New-ish to github.  Thanks!  -Michael