No SegFault when unwrapping a 3D fully masked array

The unwrap_phase function no longer causes a Segmentation fault when passed
a 3D array in which all elements are masked.

Closes #1347
This commit is contained in:
Jonathan Helmus
2015-01-21 16:45:23 -06:00
parent d3024b5c73
commit 8eebb17bac
2 changed files with 22 additions and 3 deletions
+17
View File
@@ -186,5 +186,22 @@ def test_unwrap_2d_all_masked():
assert unwrap[0, 0] == 0
def test_unwrap_3d_all_masked():
# all elements masked
image = np.ma.zeros((10, 10, 10))
image[:] = np.ma.masked
unwrap = unwrap_phase(image)
assert np.ma.isMaskedArray(unwrap)
assert np.all(unwrap.mask)
# 1 unmasked element, still zero edges
image = np.ma.zeros((10, 10, 10))
image[:] = np.ma.masked
image[0, 0, 0] = 0
unwrap = unwrap_phase(image)
assert np.ma.isMaskedArray(unwrap)
assert np.sum(unwrap.mask) == 999 # all but one masked
assert unwrap[0, 0, 0] == 0
if __name__ == "__main__":
run_module_suite()
+5 -3
View File
@@ -1136,9 +1136,11 @@ void unwrap3D(double *wrapped_volume, double *unwrapped_volume,
&params);
normalEDGEs(voxel, edge, volume_width, volume_height, volume_depth, &params);
// sort the EDGEs depending on their reiability. The VOXELs with higher
// relibility (small value) first
quicker_sort(edge, edge + params.no_of_edges - 1);
if (params.no_of_edges != 0) {
// sort the EDGEs depending on their reiability. The VOXELs with higher
// relibility (small value) first
quicker_sort(edge, edge + params.no_of_edges - 1);
}
// gather VOXELs into groups
gatherVOXELs(edge, &params);