diff --git a/science/py-scipy/Makefile b/science/py-scipy/Makefile
index 28ea15e0ec..8d6a549024 100644
--- a/science/py-scipy/Makefile
+++ b/science/py-scipy/Makefile
@@ -1,7 +1,7 @@
 # Created by: ijliao
 
 PORTNAME=	scipy
-DISTVERSION=	1.7.1
+DISTVERSION=	1.8.0
 CATEGORIES=	science python
 MASTER_SITES=	https://docs.scipy.org/doc/scipy-${PORTVERSION}/:doc \
 		CHEESESHOP:source \
@@ -25,7 +25,7 @@ LIB_DEPENDS=	libblas.so:math/blas \
 		libopenblas.so:math/openblas
 RUN_DEPENDS=	${PYNUMPY}
 
-USES=		compiler:c++14-lang cpe fortran python:3.7+ shebangfix
+USES=		compiler:c++14-lang cpe fortran python:3.8-3.10 shebangfix
 USE_PYTHON=	autoplist concurrent cython distutils
 
 FFLAGS+=	-std=legacy
@@ -35,14 +35,8 @@ PYDISTUTILS_CONFIGUREARGS=	--fcompiler=gnu95
 
 PORTDOCS=	scipy-ref-${PORTVERSION}.pdf
 
-SHEBANG_FILES=	scipy/sparse/linalg/isolve/tests/test_gcrotmk.py
-
 OPTIONS_DEFINE=	DOCS
 
-post-patch:
-# This line help fix the plist error because autoplist list it as a file but it is a directory
-	@${TOUCH} ${WRKSRC}/scipy/stats/tests/data/tmp
-
 post-install:
 	${FIND} ${STAGEDIR}${PYTHON_SITELIBDIR}/scipy/ -name '*.so' | ${XARGS} ${STRIP_CMD}
 
@@ -50,4 +44,7 @@ post-install-DOCS-on:
 	@${MKDIR} ${STAGEDIR}${DOCSDIR}
 	${INSTALL_DATA} ${DISTDIR}/${PORTDOCS} ${STAGEDIR}${DOCSDIR}
 
+do-test:
+	@cd ${WRKSRC} && ${PYTHON_CMD} runtests.py
+
 .include <bsd.port.mk>
diff --git a/science/py-scipy/distinfo b/science/py-scipy/distinfo
index c098b886af..52e4b02357 100644
--- a/science/py-scipy/distinfo
+++ b/science/py-scipy/distinfo
@@ -1,5 +1,5 @@
-TIMESTAMP = 1636331176
-SHA256 (scipy-1.7.1.tar.gz) = 6b47d5fa7ea651054362561a28b1ccc8da9368a39514c1bbf6c0977a1c376764
-SIZE (scipy-1.7.1.tar.gz) = 36102628
-SHA256 (scipy-ref-1.7.1.pdf) = 6b774337060474ca74c47dfe77f88bd5f39cdc00a6649bb29df071fb720d810e
-SIZE (scipy-ref-1.7.1.pdf) = 33542025
+TIMESTAMP = 1644826087
+SHA256 (scipy-1.8.0.tar.gz) = 31d4f2d6b724bc9a98e527b5849b8a7e589bf1ea630c33aa563eda912c9ff0bd
+SIZE (scipy-1.8.0.tar.gz) = 38313602
+SHA256 (scipy-ref-1.8.0.pdf) = 17a12b348f682fd0a951e19749e7194a69fd577a6d40409c432f9740b5f48981
+SIZE (scipy-ref-1.8.0.pdf) = 34913841
diff --git a/science/py-scipy/files/patch-scipy_sparse_tests_test__base.py b/science/py-scipy/files/patch-scipy_sparse_tests_test__base.py
new file mode 100644
index 0000000000..a683fb3412
--- /dev/null
+++ b/science/py-scipy/files/patch-scipy_sparse_tests_test__base.py
@@ -0,0 +1,35 @@
+--- scipy/sparse/tests/test_base.py.orig	2022-03-02 10:42:47 UTC
++++ scipy/sparse/tests/test_base.py
+@@ -4758,19 +4758,19 @@ class TestCSCNonCanonical(_NonCanonicalCSMixin, TestCS
+     pass
+ 
+ 
+-class TestBSRNonCanonical(_NonCanonicalCompressedMixin, TestBSR):
+-    def _insert_explicit_zero(self, M, i, j):
+-        x = M.tocsr()
+-        x[i,j] = 0
+-        return x.tobsr(blocksize=M.blocksize)
+-
+-    @pytest.mark.xfail(run=False, reason='diagonal broken with non-canonical BSR')
+-    def test_diagonal(self):
+-        pass
+-
+-    @pytest.mark.xfail(run=False, reason='expm broken with non-canonical BSR')
+-    def test_expm(self):
+-        pass
++#class TestBSRNonCanonical(_NonCanonicalCompressedMixin, TestBSR):
++#    def _insert_explicit_zero(self, M, i, j):
++#        x = M.tocsr()
++#        x[i,j] = 0
++#        return x.tobsr(blocksize=M.blocksize)
++#
++#    @pytest.mark.xfail(run=False, reason='diagonal broken with non-canonical BSR')
++#    def test_diagonal(self):
++#        pass
++#
++#    @pytest.mark.xfail(run=False, reason='expm broken with non-canonical BSR')
++#    def test_expm(self):
++#        pass
+ 
+ 
+ class TestCOONonCanonical(_NonCanonicalMixin, TestCOO):