Truncated SVD by implicitly restarted Lanczos bidiagonalization for Python Numpy