Skip to content

Commit 20a8b1b

Browse files
committed
migration guide pass 1: make code work for both spmatrix and sparray
switch from isspmatrix_csr to issparse and format='csr'
1 parent bcbe430 commit 20a8b1b

File tree

4 files changed

+13
-13
lines changed

4 files changed

+13
-13
lines changed

libpysal/weights/raster.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ def da2WSP(
270270
# then eliminate zeros from the data. This changes the
271271
# sparsity of the csr_matrix !!
272272
if k > 1 and not include_nodata:
273-
sw = sum(sw**x for x in range(1, k + 1))
273+
sw = sum(sparse.linalg.matrix_power(sw, x) for x in range(1, k + 1))
274274
sw.setdiag(0)
275275
sw.eliminate_zeros()
276276
sw.data[:] = np.ones_like(sw.data, dtype=np.int8)

libpysal/weights/set_operations.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import copy
1313

1414
from numpy import ones
15-
from scipy.sparse import isspmatrix_csr
15+
from scipy.sparse import issparse
1616

1717
from .weights import WSP, W
1818

@@ -501,9 +501,9 @@ def w_clip(w1, w2, outSP=True, **kwargs): # noqa: N803
501501
if not w1.id_order:
502502
w1.id_order = None
503503
id_order = w1.id_order
504-
if not isspmatrix_csr(w1):
504+
if not issparse(w1):
505505
w1 = w1.sparse
506-
if not isspmatrix_csr(w2):
506+
if not issparse(w2):
507507
w2 = w2.sparse
508508
w2.data = ones(w2.data.shape)
509509
wc = w1.multiply(w2)

libpysal/weights/util.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ def higher_order_sp(
511511
w = w.sparse
512512
else:
513513
raise ValueError("Weights are not binary (0,1)")
514-
elif scipy.sparse.isspmatrix_csr(w):
514+
elif scipy.sparse.issparse(w) and w.format == "csr":
515515
if not np.unique(w.data) == np.array([1.0]):
516516
raise ValueError(
517517
"Sparse weights matrix is not binary (0,1) weights matrix."
@@ -523,17 +523,17 @@ def higher_order_sp(
523523
)
524524

525525
if lower_order:
526-
wk = sum(w**x for x in range(1, k + 1))
526+
wk = sum(sparse.linalg.matrix_power(w, k) for k in range(1, k+1))
527527
shortest_path = False
528528
else:
529-
wk = w**k
529+
wk = sparse.linalg.matrix_power(w, k)
530530

531531
rk, ck = wk.nonzero()
532532
sk = set(zip(rk, ck, strict=True))
533533

534534
if shortest_path:
535535
for j in range(1, k):
536-
wj = w**j
536+
wj = sparse.linalg.matrix_power(w, j)
537537
rj, cj = wj.nonzero()
538538
sj = set(zip(rj, cj, strict=True))
539539
sk.difference_update(sj)
@@ -1225,7 +1225,7 @@ def lat2SW(nrows=3, ncols=5, criterion="rook", row_st=False):
12251225
m = sparse.dia_matrix((data, offsets), shape=(n, n), dtype=np.int8)
12261226
m = m + m.T
12271227
if row_st:
1228-
m = sparse.spdiags(1.0 / m.sum(1).T, 0, *m.shape) * m
1228+
m = sparse.dia_matrix(((1.0 / m.sum(1).T), [0]), shape=m.shape) @ m
12291229
m = m.tocsc()
12301230
m.eliminate_zeros()
12311231
return m

libpysal/weights/weights.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ def diagW2(self):
721721
trcW2
722722
"""
723723
if "diagw2" not in self._cache:
724-
self._diagW2 = (self.sparse * self.sparse).diagonal()
724+
self._diagW2 = (self.sparse @ self.sparse).diagonal()
725725
self._cache["diagW2"] = self._diagW2
726726
return self._diagW2
727727

@@ -734,7 +734,7 @@ def diagWtW(self):
734734
trcWtW
735735
"""
736736
if "diagWtW" not in self._cache:
737-
self._diagWtW = (self.sparse.transpose() * self.sparse).diagonal()
737+
self._diagWtW = (self.sparse.transpose() @ self.sparse).diagonal()
738738
self._cache["diagWtW"] = self._diagWtW
739739
return self._diagWtW
740740

@@ -757,7 +757,7 @@ def diagWtW_WW(self):
757757
if "diagWtW_WW" not in self._cache:
758758
wt = self.sparse.transpose()
759759
w = self.sparse
760-
self._diagWtW_WW = (wt * w + w * w).diagonal()
760+
self._diagWtW_WW = (wt @ w + w @ w).diagonal()
761761
self._cache["diagWtW_WW"] = self._diagWtW_WW
762762
return self._diagWtW_WW
763763

@@ -1603,7 +1603,7 @@ def diagWtW_WW(self):
16031603
if "diagWtW_WW" not in self._cache:
16041604
wt = self.sparse.transpose()
16051605
w = self.sparse
1606-
self._diagWtW_WW = (wt * w + w * w).diagonal()
1606+
self._diagWtW_WW = (wt @ w + w @ w).diagonal()
16071607
self._cache["diagWtW_WW"] = self._diagWtW_WW
16081608
return self._diagWtW_WW
16091609

0 commit comments

Comments
 (0)