From 3abfdaa254a593fa6eb82dc472ef9fbd05714516 Mon Sep 17 00:00:00 2001
From: Quentin Haenn <83473151+quentinhaenn@users.noreply.github.com>
Date: Fri, 5 Jul 2024 20:27:30 +0200
Subject: [PATCH] Fix scipy '.A' alias being deprecated (#631)

* Fix issue #628 with '.A' stuff on csr_matrix

* Modifying requirements.txt for numpy and another .A

---------

Co-authored-by: tqtg <tuantq.vnu@gmail.com>
---
 cornac/data/text.py            | 6 ++++--
 cornac/models/knn/recom_knn.py | 8 ++++----
 requirements.txt               | 2 +-
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/cornac/data/text.py b/cornac/data/text.py
index bd0178bb..8545206c 100644
--- a/cornac/data/text.py
+++ b/cornac/data/text.py
@@ -951,7 +951,7 @@ class TextModality(FeatureModality):
         if binary:
             bow_mat.data.fill(1)
 
-        return bow_mat if keep_sparse else bow_mat.A
+        return bow_mat if keep_sparse else bow_mat.toarray()
 
     def batch_tfidf(self, batch_ids, keep_sparse=False):
         """Return matrix of TF-IDF features corresponding to provided batch_ids
@@ -972,7 +972,8 @@ class TextModality(FeatureModality):
 
         """
         tfidf_mat = self.tfidf_matrix[batch_ids]
-        return tfidf_mat if keep_sparse else tfidf_mat.A
+        return tfidf_mat if keep_sparse else tfidf_mat.toarray()
+
 
 class ReviewModality(TextModality):
     """Review modality
@@ -1034,6 +1035,7 @@ class ReviewModality(TextModality):
             Apply sublinear tf scaling, i.e. replace tf with 1 + log(tf).
 
     """
+
     def __init__(self,
                  data: List[tuple] = None,
                  group_by: str = None,
diff --git a/cornac/models/knn/recom_knn.py b/cornac/models/knn/recom_knn.py
index 5db7575b..9ba17214 100644
--- a/cornac/models/knn/recom_knn.py
+++ b/cornac/models/knn/recom_knn.py
@@ -239,7 +239,7 @@ class UserKNN(Recommender):
         if item_idx is not None:
             weighted_avg = compute_score_single(
                 True,
-                self.sim_mat[user_idx].A.ravel(),
+                self.sim_mat[user_idx].toarray().ravel(),
                 self.iu_mat.indptr[item_idx],
                 self.iu_mat.indptr[item_idx + 1],
                 self.iu_mat.indices,
@@ -251,7 +251,7 @@ class UserKNN(Recommender):
         weighted_avg = np.zeros(self.num_items)
         compute_score(
             True,
-            self.sim_mat[user_idx].A.ravel(),
+            self.sim_mat[user_idx].toarray().ravel(),
             self.iu_mat.indptr,
             self.iu_mat.indices,
             self.iu_mat.data,
@@ -412,7 +412,7 @@ class ItemKNN(Recommender):
         if item_idx is not None:
             weighted_avg = compute_score_single(
                 False,
-                self.ui_mat[user_idx].A.ravel(),
+                self.ui_mat[user_idx].toarray().ravel(),
                 self.sim_mat.indptr[item_idx],
                 self.sim_mat.indptr[item_idx + 1],
                 self.sim_mat.indices,
@@ -424,7 +424,7 @@ class ItemKNN(Recommender):
         weighted_avg = np.zeros(self.num_items)
         compute_score(
             False,
-            self.ui_mat[user_idx].A.ravel(),
+            self.ui_mat[user_idx].toarray().ravel(),
             self.sim_mat.indptr,
             self.sim_mat.indices,
             self.sim_mat.data,
diff --git a/requirements.txt b/requirements.txt
index de4ae4d0..8a01f803 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,4 @@
-numpy
+numpy<2.0
 scipy
 Cython
 tqdm
-- 
GitLab