<pre style='margin:0'>
Renee Otten (reneeotten) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/a77e647cc821e97f55962f8d7d155c95bed8284d">https://github.com/macports/macports-ports/commit/a77e647cc821e97f55962f8d7d155c95bed8284d</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new a77e647cc82 py-scipy: update to 1.11.4; fix build on old systems
</span>a77e647cc82 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit a77e647cc821e97f55962f8d7d155c95bed8284d
</span>Author: Sergey Fedorov <vital.had@gmail.com>
AuthorDate: Thu Dec 21 08:17:53 2023 +0800

<span style='display:block; white-space:pre;color:#404040;'>    py-scipy: update to 1.11.4; fix build on old systems
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Fixes: https://trac.macports.org/ticket/68014
</span><span style='display:block; white-space:pre;color:#404040;'>    Closes: https://trac.macports.org/ticket/68379
</span><span style='display:block; white-space:pre;color:#404040;'>    Closes: https://trac.macports.org/ticket/68380
</span><span style='display:block; white-space:pre;color:#404040;'>    Closes: https://trac.macports.org/ticket/69040
</span>---
 python/py-scipy/Portfile                           |  75 +++++-
 ...P-boost.diff => patch-allow-MP-boost-1.10.diff} |   0
 python/py-scipy/files/patch-allow-MP-boost.diff    |  12 +-
 .../files/patch-ckdtree-fix-isinf-1.10.diff        | 252 ++++++++++++++++++++
 python/py-scipy/files/patch-ckdtree-fix-isinf.diff | 253 +++++++++++++++++++++
 .../py-scipy/files/patch-macosx-version-min.diff   |  20 ++
 .../files/patch-special-fix-isnan-isinf.diff       |  66 ++++++
 7 files changed, 660 insertions(+), 18 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-scipy/Portfile b/python/py-scipy/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index d7ca830ed53..264c212e7d9 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-scipy/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-scipy/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,24 +1,25 @@
</span> # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
 
 PortSystem              1.0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-PortGroup               python 1.0
</span> PortGroup               active_variants 1.1
<span style='display:block; white-space:pre;background:#ffe0e0;'>-PortGroup               github 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup               boost 1.0
</span> PortGroup               compilers 1.0
 PortGroup               compiler_blacklist_versions 1.0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-PortGroup               boost 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup               github 1.0
</span> PortGroup               legacysupport 1.1
<span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup               python 1.0
</span> 
 # __sincos https://trac.macports.org/ticket/63233
 legacysupport.newest_darwin_requires_legacy 12
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-github.setup            scipy   scipy 1.10.1 v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-github.tarball_from     releases
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision                1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup            scipy scipy 1.11.4 v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision                0
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums               rmd160  a97f16d6acefbc7e52b81499d250226e0cce114d \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        sha256  2cf9dfb80a7b4589ba4c40ce7588986d6d5cebc5457cad2c2880f6bc2d42f3a5 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        size    42407997
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums               rmd160  8120272e76e1065f8f6b5aaf3fa7fd450d56e4c3 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        sha256  90a2b78e7f5733b9de748f589f09225013685f9b218275257f8a8168ededaeaa \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        size    56336202
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.tarball_from     releases
</span> 
 name                    py-scipy
 license                 BSD
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -29,6 +30,9 @@ long_description        {*}${description}
</span> homepage                https://www.scipy.org/
 
 python.versions         38 39 310 311
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# When updating to meson.build later, please do it conditionally,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# unless build is confirmed on older systems as well.
</span> python.pep517           no
 
 python.add_archflags    no
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -40,6 +44,35 @@ compilers.setup         require_fortran -clang -gcc44 -gcc45 -gcc46 \
</span> github.livecheck.regex {([0-9.-]+)}
 
 if {${name} ne ${subport}} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${python.version} == 38} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Support for Python 3.8 dropped in 1.11.x:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # https://github.com/scipy/scipy/commit/890ffe9febc7b199e84ca9444ceb7b2f9c0a33aa
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        github.setup    scipy scipy 1.10.1 v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        revision        2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        checksums       rmd160  a97f16d6acefbc7e52b81499d250226e0cce114d \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        sha256  2cf9dfb80a7b4589ba4c40ce7588986d6d5cebc5457cad2c2880f6bc2d42f3a5 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        size    42407997
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        boost.version           1.76
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patchfiles-append       patch-allow-MP-boost-1.10.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_build-append    port:py${python.version}-cython-compat
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set compat_path [string replace ${python.pkgd} 0 [string length ${python.prefix}]-1 ${prefix}/lib/py${python.version}-cython-compat]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        build.env-append    PYTHONPATH=${compat_path}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        boost.version           1.81
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        post-extract {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            move ${worksrcpath}/_setup.py ${worksrcpath}/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patchfiles-append       patch-allow-MP-boost.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_build-append    port:py${python.version}-cython
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     depends_build-append \
                     port:py${python.version}-pythran \
                     port:swig-python
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -56,13 +89,31 @@ if {${name} ne ${subport}} {
</span>     # https://build.macports.org/builders/ports-10.11_x86_64-builder/builds/136856/steps/install-port/logs/stdio
     compiler.blacklist-append {clang < 900}
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    boost.version       1.76
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    patchfiles-append   patch-allow-MP-boost.diff
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     # force disable STDC THREADS from <threads.h> and instead just use __thread
     # https://trac.macports.org/ticket/62488
     patchfiles-append   patch-use__STDC_NO_THREADS__.diff
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    # https://github.com/scipy/scipy/issues/19718
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append   patch-macosx-version-min.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # There is some conflict between legacysupport cmath and gcc on old systems, which makes isnan/isinf undefined.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${os.platform} eq "darwin" && ${os.major} < 13 && [string match *gcc* ${configure.compiler}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        patch-special-fix-isnan-isinf.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${python.version} == 38} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        patch-ckdtree-fix-isinf-1.10.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        patch-ckdtree-fix-isinf.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-patch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reinplace "s|@MACOS_V@|${macosx_deployment_target}|g" ${worksrcpath}/scipy/_build_utils/compiler_helper.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     worksrcdir              ${distname}
     build.env-append        "CCFLAGS=-I${prefix}/include -L${prefix}/lib"
     destroot.env-append     "CCFLAGS=-I${prefix}/include -L${prefix}/lib"
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-scipy/files/patch-allow-MP-boost.diff b/python/py-scipy/files/patch-allow-MP-boost-1.10.diff
</span>similarity index 100%
copy from python/py-scipy/files/patch-allow-MP-boost.diff
copy to python/py-scipy/files/patch-allow-MP-boost-1.10.diff
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-scipy/files/patch-allow-MP-boost.diff b/python/py-scipy/files/patch-allow-MP-boost.diff
</span><span style='display:block; white-space:pre;color:#808080;'>index 193953bec9c..1647219e12b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-scipy/files/patch-allow-MP-boost.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-scipy/files/patch-allow-MP-boost.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,15 +1,15 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- scipy/_lib/setup.py.orig
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ scipy/_lib/setup.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/_lib/setup.py.orig       2023-11-19 02:28:52.000000000 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/_lib/setup.py    2023-12-20 15:52:08.000000000 +0800
</span> @@ -4,9 +4,9 @@
  def check_boost_submodule():
      from scipy._lib._boost_utils import _boost_dir
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>--    if not os.path.exists(_boost_dir(ret_path=True) / 'README.rst'):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if not os.path.exists(_boost_dir(ret_path=True).parent / 'README.md'):
</span> -        raise RuntimeError("Missing the `boost` submodule! Run `git submodule "
 -                           "update --init` to fix this.")
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+    #if not os.path.exists(_boost_dir(ret_path=True) / 'README.rst'):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    #    raise RuntimeError("Missing the `boost` submodule! Run `git submodule "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    #                       "update --init` to fix this.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#     if not os.path.exists(_boost_dir(ret_path=True).parent / 'README.md'):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#         raise RuntimeError("Missing the `boost` submodule! Run `git submodule "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#                            "update --init` to fix this.")
</span>  
  
  def check_highs_submodule():
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-scipy/files/patch-ckdtree-fix-isinf-1.10.diff b/python/py-scipy/files/patch-ckdtree-fix-isinf-1.10.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..9e23501a1e9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-scipy/files/patch-ckdtree-fix-isinf-1.10.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,252 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From f2b7fee97d665364e0c2502d44874155d93bd6b8 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: barracuda156 <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Wed, 20 Dec 2023 21:44:14 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 1/2] ckdtree: fix isinf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Partly revert a breaking commit: https://github.com/scipy/scipy/commit/a77855a8a00137e06fee5f011be4b0526a20fb14
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+That does not work because _ckdtree.cxx is generated with isinf and not std::isinf. Earlier version is broken either, since it does not define isinf to std::isinf at all.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/_ckdtree.pyx                     |  4 +++-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/ckdtree_decl.h       |  1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/count_neighbors.cxx  |  4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/query.cxx            | 12 ++++++------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/query_ball_point.cxx |  4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/query_ball_tree.cxx  |  4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/query_pairs.cxx      |  4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/rectangle.h          |  6 +++---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/sparse_distances.cxx |  6 +++---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 9 files changed, 24 insertions(+), 21 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/_ckdtree.pyx scipy/spatial/_ckdtree.pyx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index bbc996574..e66c90bae 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/_ckdtree.pyx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/_ckdtree.pyx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -15,7 +15,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ from cpython.mem cimport PyMem_Malloc, PyMem_Free
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ from libcpp.vector cimport vector
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ from libcpp cimport bool
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-from libc.math cimport isinf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cimport cython
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ import os
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -39,6 +38,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ===================
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cdef extern from "ckdtree_decl.h":
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int isinf(np.float64_t x) nogil
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     struct ckdtreenode:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         np.intp_t split_dim
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         np.intp_t children
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/ckdtree_decl.h scipy/spatial/ckdtree/src/ckdtree_decl.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 3c28a49cb..b31e60b6d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/ckdtree_decl.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/ckdtree_decl.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -12,6 +12,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define CKDTREE_PREFETCH(x, rw, loc)  NPY_PREFETCH(x, rw, loc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define ckdtree_intp_t npy_intp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define isinf(x)   std::isinf(x)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define ckdtree_fmin(x, y)   fmin(x, y)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define ckdtree_fmax(x, y)   fmax(x, y)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define ckdtree_fabs(x)   fabs(x)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/count_neighbors.cxx scipy/spatial/ckdtree/src/count_neighbors.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index fd0ff5e26..598a922b9 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/count_neighbors.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/count_neighbors.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -213,13 +213,13 @@ count_neighbors(struct CNBParams *params,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (CKDTREE_LIKELY(self->raw_boxsize_data == NULL)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), MinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, MinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, MinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), BoxMinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, BoxMinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, BoxMinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/query.cxx scipy/spatial/ckdtree/src/query.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a8aeba469..c24037f38 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/query.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/query.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -133,7 +133,7 @@ struct nodeinfo {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     inline void update_side_distance(const int d, const double new_side_distance, const double p) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (CKDTREE_UNLIKELY(std::isinf(p))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (CKDTREE_UNLIKELY(isinf(p))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             min_distance = ckdtree_fmax(min_distance, new_side_distance);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             min_distance += new_side_distance - side_distances()[d];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -267,7 +267,7 @@ query_single_point(const ckdtree *self,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     else if (eps == 0.)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         epsfac = 1.;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    else if (std::isinf(p))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else if (isinf(p))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         epsfac = 1. / (1. + eps);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         epsfac = 1. / std::pow((1. + eps), p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -277,7 +277,7 @@ query_single_point(const ckdtree *self,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         double tmp = distance_upper_bound;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         distance_upper_bound = tmp*tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    else if ((!std::isinf(p)) && (!std::isinf(distance_upper_bound)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else if ((!isinf(p)) && (!isinf(distance_upper_bound)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         distance_upper_bound = std::pow(distance_upper_bound,p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for(;;) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -457,7 +457,7 @@ query_single_point(const ckdtree *self,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             result_indices[i] = neighbor.contents.intdata;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (CKDTREE_LIKELY(p == 2.0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 result_distances[i] = std::sqrt(-neighbor.priority);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            else if ((p == 1.) || (std::isinf(p)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            else if ((p == 1.) || (isinf(p)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 result_distances[i] = -neighbor.priority;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 result_distances[i] = std::pow((-neighbor.priority),(1./p));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -495,7 +495,7 @@ query_knn(const ckdtree      *self,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             const double *xx_row = xx + (i*m);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(CKDTREE_LIKELY(p == 2), MinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(p == 1, MinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            HANDLE(std::isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            HANDLE(isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(1, MinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -512,7 +512,7 @@ query_knn(const ckdtree      *self,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(CKDTREE_LIKELY(p == 2), BoxMinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(p == 1, BoxMinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            HANDLE(std::isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            HANDLE(isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(1, BoxMinkowskiDistPp) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/query_ball_point.cxx scipy/spatial/ckdtree/src/query_ball_point.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 77ed1beee..4d5dc938b 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/query_ball_point.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/query_ball_point.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -128,7 +128,7 @@ query_ball_point(const ckdtree *self, const double *x,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             Rectangle point(m, x + i * m, x + i * m);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(CKDTREE_LIKELY(p == 2), MinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(p == 1, MinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            HANDLE(std::isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            HANDLE(isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(1, MinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -139,7 +139,7 @@ query_ball_point(const ckdtree *self, const double *x,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(CKDTREE_LIKELY(p == 2), BoxMinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(p == 1, BoxMinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            HANDLE(std::isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            HANDLE(isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(1, BoxMinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/query_ball_tree.cxx scipy/spatial/ckdtree/src/query_ball_tree.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index bea17eb7e..9338618aa 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/query_ball_tree.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/query_ball_tree.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -198,13 +198,13 @@ query_ball_tree(const ckdtree *self, const ckdtree *other,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if(CKDTREE_LIKELY(self->raw_boxsize_data == NULL)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), MinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, MinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, MinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), BoxMinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, BoxMinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, BoxMinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/query_pairs.cxx scipy/spatial/ckdtree/src/query_pairs.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 5cc81594f..c4af434b6 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/query_pairs.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/query_pairs.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -218,13 +218,13 @@ query_pairs(const ckdtree *self,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if(CKDTREE_LIKELY(self->raw_boxsize_data == NULL)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), MinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, MinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, MinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), BoxMinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, BoxMinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, BoxMinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/rectangle.h scipy/spatial/ckdtree/src/rectangle.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 39e9e0591..a349f50d1 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/rectangle.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/rectangle.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -130,7 +130,7 @@ template<typename MinMaxDist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         /* internally we represent all distances as distance ** p */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (CKDTREE_LIKELY(p == 2.0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             upper_bound = _upper_bound * _upper_bound;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        else if ((!std::isinf(p)) && (!std::isinf(_upper_bound)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        else if ((!isinf(p)) && (!isinf(_upper_bound)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             upper_bound = std::pow(_upper_bound,p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             upper_bound = _upper_bound;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -142,7 +142,7 @@ template<typename MinMaxDist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         else if (eps == 0.)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             epsfac = 1.;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        else if (std::isinf(p))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        else if (isinf(p))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             epsfac = 1. / (1. + eps);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             epsfac = 1. / std::pow((1. + eps), p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -153,7 +153,7 @@ template<typename MinMaxDist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         /* Compute initial min and max distances */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         MinMaxDist::rect_rect_p(tree, rect1, rect2, p, &min_distance, &max_distance);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if(std::isinf(max_distance)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if(isinf(max_distance)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             const char *msg = "Encountering floating point overflow. "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               "The value of p too large for this dataset; "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               "For such large p, consider using the special case p=np.inf . ";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/sparse_distances.cxx scipy/spatial/ckdtree/src/sparse_distances.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 14ccf25a3..984e2c4ab 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/sparse_distances.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/sparse_distances.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -66,7 +66,7 @@ traverse(const ckdtree *self, const ckdtree *other,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     if (d <= tub) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         if (CKDTREE_LIKELY(p == 2.0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             d = std::sqrt(d);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                        else if ((p != 1) && (!std::isinf(p)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        else if ((p != 1) && (!isinf(p)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             d = std::pow(d, 1. / p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         coo_entry e = {sindices[i], oindices[j], d};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -139,13 +139,13 @@ sparse_distance_matrix(const ckdtree *self, const ckdtree *other,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if(CKDTREE_LIKELY(self->raw_boxsize_data == NULL)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), MinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, MinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, MinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), BoxMinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, BoxMinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, BoxMinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-scipy/files/patch-ckdtree-fix-isinf.diff b/python/py-scipy/files/patch-ckdtree-fix-isinf.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..68593bad65a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-scipy/files/patch-ckdtree-fix-isinf.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,253 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From f2b7fee97d665364e0c2502d44874155d93bd6b8 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: barracuda156 <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Wed, 20 Dec 2023 21:44:14 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 1/2] ckdtree: fix isinf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Partly revert a breaking commit: https://github.com/scipy/scipy/commit/a77855a8a00137e06fee5f011be4b0526a20fb14
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+That does not work because _ckdtree.cxx is generated with isinf and not std::isinf. Earlier version is broken either, since it does not define isinf to std::isinf at all.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/_ckdtree.pyx                     |  4 +++-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/ckdtree_decl.h       |  1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/count_neighbors.cxx  |  4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/query.cxx            | 12 ++++++------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/query_ball_point.cxx |  4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/query_ball_tree.cxx  |  4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/query_pairs.cxx      |  4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/rectangle.h          |  6 +++---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/spatial/ckdtree/src/sparse_distances.cxx |  6 +++---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 9 files changed, 24 insertions(+), 21 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/_ckdtree.pyx scipy/spatial/_ckdtree.pyx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index bbc996574..e66c90bae 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/_ckdtree.pyx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/_ckdtree.pyx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -16,7 +16,7 @@ cimport numpy as np
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ from cpython.mem cimport PyMem_Malloc, PyMem_Free
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ from libcpp.vector cimport vector
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ from libcpp cimport bool
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-from libc.math cimport isinf, INFINITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++from libc.math cimport INFINITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cimport cython
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ import os
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -40,6 +40,8 @@ cdef extern from *:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ===================
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cdef extern from "ckdtree_decl.h":
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int isinf(np.float64_t x) nogil
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     struct ckdtreenode:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         np.intp_t split_dim
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         np.intp_t children
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/ckdtree_decl.h scipy/spatial/ckdtree/src/ckdtree_decl.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 3c28a49cb..b31e60b6d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/ckdtree_decl.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/ckdtree_decl.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -12,6 +12,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define CKDTREE_PREFETCH(x, rw, loc)  NPY_PREFETCH(x, rw, loc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define ckdtree_intp_t npy_intp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define isinf(x)   std::isinf(x)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define ckdtree_fmin(x, y)   fmin(x, y)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define ckdtree_fmax(x, y)   fmax(x, y)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define ckdtree_fabs(x)   fabs(x)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/count_neighbors.cxx scipy/spatial/ckdtree/src/count_neighbors.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index fd0ff5e26..598a922b9 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/count_neighbors.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/count_neighbors.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -213,13 +213,13 @@ count_neighbors(struct CNBParams *params,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (CKDTREE_LIKELY(self->raw_boxsize_data == NULL)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), MinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, MinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, MinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), BoxMinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, BoxMinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, BoxMinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/query.cxx scipy/spatial/ckdtree/src/query.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a8aeba469..c24037f38 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/query.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/query.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -133,7 +133,7 @@ struct nodeinfo {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     inline void update_side_distance(const int d, const double new_side_distance, const double p) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (CKDTREE_UNLIKELY(std::isinf(p))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (CKDTREE_UNLIKELY(isinf(p))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             min_distance = ckdtree_fmax(min_distance, new_side_distance);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             min_distance += new_side_distance - side_distances()[d];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -267,7 +267,7 @@ query_single_point(const ckdtree *self,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     else if (eps == 0.)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         epsfac = 1.;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    else if (std::isinf(p))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else if (isinf(p))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         epsfac = 1. / (1. + eps);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         epsfac = 1. / std::pow((1. + eps), p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -277,7 +277,7 @@ query_single_point(const ckdtree *self,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         double tmp = distance_upper_bound;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         distance_upper_bound = tmp*tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    else if ((!std::isinf(p)) && (!std::isinf(distance_upper_bound)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else if ((!isinf(p)) && (!isinf(distance_upper_bound)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         distance_upper_bound = std::pow(distance_upper_bound,p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for(;;) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -457,7 +457,7 @@ query_single_point(const ckdtree *self,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             result_indices[i] = neighbor.contents.intdata;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (CKDTREE_LIKELY(p == 2.0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 result_distances[i] = std::sqrt(-neighbor.priority);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            else if ((p == 1.) || (std::isinf(p)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            else if ((p == 1.) || (isinf(p)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 result_distances[i] = -neighbor.priority;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 result_distances[i] = std::pow((-neighbor.priority),(1./p));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -495,7 +495,7 @@ query_knn(const ckdtree      *self,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             const double *xx_row = xx + (i*m);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(CKDTREE_LIKELY(p == 2), MinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(p == 1, MinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            HANDLE(std::isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            HANDLE(isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(1, MinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -512,7 +512,7 @@ query_knn(const ckdtree      *self,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(CKDTREE_LIKELY(p == 2), BoxMinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(p == 1, BoxMinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            HANDLE(std::isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            HANDLE(isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(1, BoxMinkowskiDistPp) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/query_ball_point.cxx scipy/spatial/ckdtree/src/query_ball_point.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 77ed1beee..4d5dc938b 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/query_ball_point.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/query_ball_point.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -128,7 +128,7 @@ query_ball_point(const ckdtree *self, const double *x,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             Rectangle point(m, x + i * m, x + i * m);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(CKDTREE_LIKELY(p == 2), MinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(p == 1, MinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            HANDLE(std::isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            HANDLE(isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(1, MinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -139,7 +139,7 @@ query_ball_point(const ckdtree *self, const double *x,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(CKDTREE_LIKELY(p == 2), BoxMinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(p == 1, BoxMinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            HANDLE(std::isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            HANDLE(isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             HANDLE(1, BoxMinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/query_ball_tree.cxx scipy/spatial/ckdtree/src/query_ball_tree.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index bea17eb7e..9338618aa 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/query_ball_tree.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/query_ball_tree.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -198,13 +198,13 @@ query_ball_tree(const ckdtree *self, const ckdtree *other,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if(CKDTREE_LIKELY(self->raw_boxsize_data == NULL)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), MinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, MinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, MinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), BoxMinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, BoxMinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, BoxMinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/query_pairs.cxx scipy/spatial/ckdtree/src/query_pairs.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 5cc81594f..c4af434b6 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/query_pairs.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/query_pairs.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -218,13 +218,13 @@ query_pairs(const ckdtree *self,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if(CKDTREE_LIKELY(self->raw_boxsize_data == NULL)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), MinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, MinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, MinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), BoxMinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, BoxMinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, BoxMinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/rectangle.h scipy/spatial/ckdtree/src/rectangle.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 39e9e0591..a349f50d1 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/rectangle.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/rectangle.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -130,7 +130,7 @@ template<typename MinMaxDist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         /* internally we represent all distances as distance ** p */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (CKDTREE_LIKELY(p == 2.0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             upper_bound = _upper_bound * _upper_bound;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        else if ((!std::isinf(p)) && (!std::isinf(_upper_bound)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        else if ((!isinf(p)) && (!isinf(_upper_bound)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             upper_bound = std::pow(_upper_bound,p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             upper_bound = _upper_bound;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -142,7 +142,7 @@ template<typename MinMaxDist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         else if (eps == 0.)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             epsfac = 1.;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        else if (std::isinf(p))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        else if (isinf(p))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             epsfac = 1. / (1. + eps);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             epsfac = 1. / std::pow((1. + eps), p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -153,7 +153,7 @@ template<typename MinMaxDist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         /* Compute initial min and max distances */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         MinMaxDist::rect_rect_p(tree, rect1, rect2, p, &min_distance, &max_distance);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if(std::isinf(max_distance)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if(isinf(max_distance)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             const char *msg = "Encountering floating point overflow. "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               "The value of p too large for this dataset; "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               "For such large p, consider using the special case p=np.inf . ";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/spatial/ckdtree/src/sparse_distances.cxx scipy/spatial/ckdtree/src/sparse_distances.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 14ccf25a3..984e2c4ab 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/spatial/ckdtree/src/sparse_distances.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/spatial/ckdtree/src/sparse_distances.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -66,7 +66,7 @@ traverse(const ckdtree *self, const ckdtree *other,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     if (d <= tub) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         if (CKDTREE_LIKELY(p == 2.0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             d = std::sqrt(d);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                        else if ((p != 1) && (!std::isinf(p)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        else if ((p != 1) && (!isinf(p)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             d = std::pow(d, 1. / p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         coo_entry e = {sindices[i], oindices[j], d};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -139,13 +139,13 @@ sparse_distance_matrix(const ckdtree *self, const ckdtree *other,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if(CKDTREE_LIKELY(self->raw_boxsize_data == NULL)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), MinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, MinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), MinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, MinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(CKDTREE_LIKELY(p == 2), BoxMinkowskiDistP2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(p == 1, BoxMinkowskiDistP1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        HANDLE(std::isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        HANDLE(isinf(p), BoxMinkowskiDistPinf)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         HANDLE(1, BoxMinkowskiDistPp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-scipy/files/patch-macosx-version-min.diff b/python/py-scipy/files/patch-macosx-version-min.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..1e19c5786f9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-scipy/files/patch-macosx-version-min.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,20 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/_build_utils/compiler_helper.py.orig     2023-11-19 02:28:52.000000000 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/_build_utils/compiler_helper.py  2023-12-20 16:53:55.000000000 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -107,7 +107,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if sys.platform == 'darwin':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         # Set min macOS version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        min_macos_flag = '-mmacosx-version-min=10.9'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        min_macos_flag = '-mmacosx-version-min=@MACOS_V@'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if has_flag(cc, min_macos_flag):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             args.append(min_macos_flag)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             ext.extra_link_args.append(min_macos_flag)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -124,7 +124,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if sys.platform == 'darwin':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         # Set min macOS version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        min_macos_flag = '-mmacosx-version-min=10.9'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        min_macos_flag = '-mmacosx-version-min=@MACOS_V@'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if has_flag(cc, min_macos_flag):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             new_args.append(min_macos_flag)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             new_link_args.append(min_macos_flag)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-scipy/files/patch-special-fix-isnan-isinf.diff b/python/py-scipy/files/patch-special-fix-isnan-isinf.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..71a4cc93e63
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-scipy/files/patch-special-fix-isnan-isinf.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,66 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 457f87b08d0040e5f3028a5aad2c08ee8ae85866 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: barracuda156 <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Thu, 21 Dec 2023 01:54:09 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] special: fix isnan/isinf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/special/Faddeeva.cc               | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/special/_round.h                  | 4 ++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/special/boost_special_functions.h | 2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scipy/special/wright.cc                 | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 4 files changed, 9 insertions(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/special/Faddeeva.cc scipy/special/Faddeeva.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 370516dc0..8148fe60b 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/special/Faddeeva.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/special/Faddeeva.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -122,6 +122,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <cmath>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define complex std::complex
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define isinf std::isinf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define isnan std::isnan
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /////////////////////////////////////////////////////////////////////////
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/special/_round.h scipy/special/_round.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e9457245b..1da578d66 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/special/_round.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/special/_round.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -8,6 +8,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <math.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "cephes/dd_idefs.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__cplusplus)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <cmath>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++using std::isnan;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ double add_round_up(double a, double b)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/special/boost_special_functions.h scipy/special/boost_special_functions.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 69ea28562..f1378558f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/special/boost_special_functions.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/special/boost_special_functions.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -190,7 +190,7 @@ Real hyp1f1_wrap(Real a, Real b, Real x)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     Real y;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (isnan(a) || isnan(b) || isnan(x)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (std::isnan(a) || std::isnan(b) || std::isnan(x)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return NAN;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (b <= 0 && std::trunc(b) == b) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git scipy/special/wright.cc scipy/special/wright.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 02161d41a..9d0614836 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- scipy/special/wright.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ scipy/special/wright.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -83,6 +83,8 @@ extern "C" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <cfloat>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ using std::complex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++using std::isinf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++using std::isnan;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define TWOITERTOL DBL_EPSILON
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span></pre><pre style='margin:0'>

</pre>