Ok, added the remark. Tf-idf features are indeed already normalized:

    Xnorm = Normalizer().fit_transform(X)
    print(((X.A - Xnorm.A) ** 2).sum())

reports

    1.77960702013e-28