input: Write a python function to vectorize a text corpus and return the matrix of token counts along with the feature names.
  assert np.array_equal(vectorize_corpus(["This is a test.", "This test is fun."])[0], np.array([[1, 1, 1, 0], [1, 0, 1, 1]]))
  assert vectorize_corpus(["This is a test.", "This test is fun."])[1] == ["fun", "is", "test", "this"]
  assert np.array_equal(vectorize_corpus(["Hello world!", "Hello again."])[0], np.array([[1, 0], [1, 1]]))
  assert vectorize_corpus(["Hello world!", "Hello again."])[1] == ["again", "hello", "world"]
output: def vectorize_corpus(corpus):
      from sklearn.feature_extraction.text import CountVectorizer
      import numpy as np
      
      vectorizer = CountVectorizer()
      X = vectorizer.fit_transform(corpus)
      token_counts = X.toarray()
      feature_names = vectorizer.get_feature_names_out()
      
      return token_counts, feature_names