Bug#860725: unblock: photutils/0.3-3
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
Dear release team,
please unblock photutils 0.3-3
This fixes RC bug #860658, "photutils: FTBFS on i386: Test failures"
Relevant changelog:
photutils (0.3-3) unstable; urgency=medium
* Fix aperture photometry computation for 32-bit machines. Closes: #860658
-- Ole Streicher <olebole@debian.org> Wed, 19 Apr 2017 10:47:47 +0200
The debdiff is attached. Relevant command:
unblock photutils/0.3-3
Thank you very much
Ole
diff -Nru photutils-0.3/debian/changelog photutils-0.3/debian/changelog
--- photutils-0.3/debian/changelog 2017-01-15 15:28:55.000000000 +0100
+++ photutils-0.3/debian/changelog 2017-04-19 10:47:47.000000000 +0200
@@ -1,3 +1,9 @@
+photutils (0.3-3) unstable; urgency=medium
+
+ * Fix aperture photometry computation for 32-bit machines. Closes: #860658
+
+ -- Ole Streicher <olebole@debian.org> Wed, 19 Apr 2017 10:47:47 +0200
+
photutils (0.3-2) unstable; urgency=medium
* Allow stderr in tests to ignore deprecation warnings
diff -Nru photutils-0.3/debian/patches/Fix-aperture-photometry-computation-for-32-bit-machines.patch photutils-0.3/debian/patches/Fix-aperture-photometry-computation-for-32-bit-machines.patch
--- photutils-0.3/debian/patches/Fix-aperture-photometry-computation-for-32-bit-machines.patch 1970-01-01 01:00:00.000000000 +0100
+++ photutils-0.3/debian/patches/Fix-aperture-photometry-computation-for-32-bit-machines.patch 2017-04-19 10:46:35.000000000 +0200
@@ -0,0 +1,121 @@
+From: Larry Bradley <larry.bradley@gmail.com>
+Date: Tue, 6 Dec 2016 19:33:20 -0500
+Subject: Fix aperture photometry computation for 32-bit machines
+
+URL: https://github.com/astropy/photutils/pull/475
+Closes: #860658
+---
+ photutils/geometry/circular_overlap.pyx | 27 ++++++++++++++-------------
+ photutils/geometry/core.pxd | 5 +++++
+ photutils/geometry/core.pyx | 16 ++++++++++++++++
+ 3 files changed, 35 insertions(+), 13 deletions(-)
+
+diff --git a/photutils/geometry/circular_overlap.pyx b/photutils/geometry/circular_overlap.pyx
+index c65e88d..c820d0a 100644
+--- a/photutils/geometry/circular_overlap.pyx
++++ b/photutils/geometry/circular_overlap.pyx
+@@ -27,7 +27,7 @@ ctypedef np.float64_t DTYPE_t
+ # NOTE: Here we need to make sure we use cimport to import the C functions from
+ # core (since these were defined with cdef). This also requires the core.pxd
+ # file to exist with the function signatures.
+-from .core cimport area_arc, area_triangle
++from .core cimport area_arc, area_triangle, floor_sqrt
+
+
+ def circular_overlap_grid(double xmin, double xmax, double ymin, double ymax,
+@@ -188,9 +188,10 @@ cdef double circular_overlap_single_exact(double xmin, double ymin,
+ + circular_overlap_single_exact(0., 0., xmax, ymax, r)
+
+
+-def circular_overlap_core(double xmin, double ymin, double xmax, double ymax,
++cdef double circular_overlap_core(double xmin, double ymin, double xmax, double ymax,
+ double r):
+- """Assumes that the center of the circle is <= xmin,
++ """
++ Assumes that the center of the circle is <= xmin,
+ ymin (can always modify input to conform to this).
+ """
+
+@@ -202,29 +203,29 @@ def circular_overlap_core(double xmin, double ymin, double xmax, double ymax,
+ area = (xmax - xmin) * (ymax - ymin)
+ else:
+ area = 0.
+- d1 = sqrt(xmax * xmax + ymin * ymin)
+- d2 = sqrt(xmin * xmin + ymax * ymax)
++ d1 = floor_sqrt(xmax * xmax + ymin * ymin)
++ d2 = floor_sqrt(xmin * xmin + ymax * ymax)
+ if d1 < r and d2 < r:
+- x1, y1 = sqrt(r * r - ymax * ymax), ymax
+- x2, y2 = xmax, sqrt(r * r - xmax * xmax)
++ x1, y1 = floor_sqrt(r * r - ymax * ymax), ymax
++ x2, y2 = xmax, floor_sqrt(r * r - xmax * xmax)
+ area = ((xmax - xmin) * (ymax - ymin) -
+ area_triangle(x1, y1, x2, y2, xmax, ymax) +
+ area_arc(x1, y1, x2, y2, r))
+ elif d1 < r:
+- x1, y1 = xmin, sqrt(r * r - xmin * xmin)
+- x2, y2 = xmax, sqrt(r * r - xmax * xmax)
++ x1, y1 = xmin, floor_sqrt(r * r - xmin * xmin)
++ x2, y2 = xmax, floor_sqrt(r * r - xmax * xmax)
+ area = (area_arc(x1, y1, x2, y2, r) +
+ area_triangle(x1, y1, x1, ymin, xmax, ymin) +
+ area_triangle(x1, y1, x2, ymin, x2, y2))
+ elif d2 < r:
+- x1, y1 = sqrt(r * r - ymin * ymin), ymin
+- x2, y2 = sqrt(r * r - ymax * ymax), ymax
++ x1, y1 = floor_sqrt(r * r - ymin * ymin), ymin
++ x2, y2 = floor_sqrt(r * r - ymax * ymax), ymax
+ area = (area_arc(x1, y1, x2, y2, r) +
+ area_triangle(x1, y1, xmin, y1, xmin, ymax) +
+ area_triangle(x1, y1, xmin, y2, x2, y2))
+ else:
+- x1, y1 = sqrt(r * r - ymin * ymin), ymin
+- x2, y2 = xmin, sqrt(r * r - xmin * xmin)
++ x1, y1 = floor_sqrt(r * r - ymin * ymin), ymin
++ x2, y2 = xmin, floor_sqrt(r * r - xmin * xmin)
+ area = (area_arc(x1, y1, x2, y2, r) +
+ area_triangle(x1, y1, x2, y2, xmin, ymin))
+
+diff --git a/photutils/geometry/core.pxd b/photutils/geometry/core.pxd
+index d894d08..fe5eb5d 100644
+--- a/photutils/geometry/core.pxd
++++ b/photutils/geometry/core.pxd
+@@ -1,6 +1,11 @@
++# Licensed under a 3-clause BSD style license - see LICENSE.rst
++
++# This file is needed in order to be able to cimport functions into other Cython files
++
+ cdef double distance(double x1, double y1, double x2, double y2)
+ cdef double area_arc(double x1, double y1, double x2, double y2, double R)
+ cdef double area_triangle(double x1, double y1, double x2, double y2, double x3, double y3)
+ cdef double area_arc_unit(double x1, double y1, double x2, double y2)
+ cdef int in_triangle(double x, double y, double x1, double y1, double x2, double y2, double x3, double y3)
+ cdef double overlap_area_triangle_unit_circle(double x1, double y1, double x2, double y2, double x3, double y3)
++cdef double floor_sqrt(double x)
+diff --git a/photutils/geometry/core.pyx b/photutils/geometry/core.pyx
+index 2082eff..7fc6e90 100644
+--- a/photutils/geometry/core.pyx
++++ b/photutils/geometry/core.pyx
+@@ -37,6 +37,22 @@ ctypedef struct intersections:
+ point p2
+
+
++cdef double floor_sqrt(double x):
++ """
++ In some of the geometrical functions, we have to take the sqrt of a number
++ and we know that the number should be >= 0. However, in some cases the
++ value is e.g. -1e-10, but we want to treat it as zero, which is what
++ this function does.
++
++ Note that this does **not** check whether negative values are close or not
++ to zero, so this should be used only in cases where the value is expected
++ to be positive on paper.
++ """
++ if x > 0:
++ return sqrt(x)
++ else:
++ return 0
++
+ # NOTE: The following two functions use cdef because they are not intended to be
+ # called from the Python code. Using def makes them callable from outside, but
+ # also slower. Some functions currently return multiple values, and for those we
diff -Nru photutils-0.3/debian/patches/series photutils-0.3/debian/patches/series
--- photutils-0.3/debian/patches/series 2016-11-07 17:35:56.000000000 +0100
+++ photutils-0.3/debian/patches/series 2017-04-19 10:46:35.000000000 +0200
@@ -1 +1,2 @@
Use-astropy_helpers-provided-by-the-system.patch
+Fix-aperture-photometry-computation-for-32-bit-machines.patch
Reply to: