# HG changeset patch # User Markus Mützel # Date 1628686274 -7200 # Node ID 93d20ff5d6a6bac5a03f4800c731849a1366f23e # Parent 0988117f1a6e81638da9cbf0ea2e0db38ff3bb36 of-image: Don't use function dim_vector::to_jit. * src/of-image-1-no-jit.patch: Add new patch. * dist-files.mk: Add new file to list. See: https://octave.discourse.group/t/1468 diff -r 0988117f1a6e -r 93d20ff5d6a6 dist-files.mk --- a/dist-files.mk Wed Aug 11 13:34:44 2021 +0200 +++ b/dist-files.mk Wed Aug 11 14:51:14 2021 +0200 @@ -493,6 +493,7 @@ of-geometry.mk \ of-gsl-1-cross-fixes.patch \ of-gsl.mk \ + of-image-1-no-jit.patch \ of-image.mk \ of-instrument-control.mk \ of-interval-1-cross-fixes.patch \ diff -r 0988117f1a6e -r 93d20ff5d6a6 src/of-image-1-no-jit.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/of-image-1-no-jit.patch Wed Aug 11 14:51:14 2021 +0200 @@ -0,0 +1,134 @@ +Don't use function dim_vector::to_jit. It was thought to be used exclusively by +the JIT compiler and it is removed now. + +--- ./src/connectivity.h.orig 2020-02-02 14:20:08.000000000 +0100 ++++ ./src/connectivity.h 2021-08-11 14:26:19.706581028 +0200 +@@ -153,8 +153,7 @@ octave::image::connectivity::set_padding + const Array lengths = padding_lengths (size, padded_size); + const octave_idx_type* lengths_v = lengths.fortran_vec (); + +- const octave_idx_type* strides_v = size.to_jit (); +- const octave_idx_type row_stride = strides_v[0]; ++ const octave_idx_type row_stride = size.xelem (0); + + std::function fill; + fill = [&] (const octave_idx_type dim) -> void +@@ -165,7 +164,7 @@ octave::image::connectivity::set_padding + if (dim == 0) + im_v += row_stride; + else +- for (octave_idx_type i = 0; i < strides_v[dim]; i++) ++ for (octave_idx_type i = 0; i < size.xelem (dim); i++) + fill (dim -1); + + for (octave_idx_type i = 0; i < lengths_v[dim]; i++, im_v++) + +--- ./src/imreconstruct.cc.orig 2020-02-02 14:20:08.000000000 +0100 ++++ ./src/imreconstruct.cc 2021-08-11 14:31:36.450682736 +0200 +@@ -110,10 +110,6 @@ scan_raster_order (T& padded_marker, con + + const octave_idx_type n_neighbours = raster_neighbours.numel (); + +- // We probably should not be using this but converting to Array +- // just to have fortran_vec seems a bit too much. +- const octave_idx_type* s = original_size.to_jit (); +- + std::function scan; + scan = [&] (const octave_idx_type dim) -> void + { +@@ -122,7 +118,7 @@ scan_raster_order (T& padded_marker, con + + if (dim == 0) + { +- for (octave_idx_type k = 0; k < s[0]; k++, J++, I++) ++ for (octave_idx_type k = 0; k < original_size.xelem (0); k++, J++, I++) + { + for (octave_idx_type i = 0; i < n_neighbours; i++) + if (*J < J[neighbours[i]]) +@@ -133,7 +129,7 @@ scan_raster_order (T& padded_marker, con + } + } + else +- for (octave_idx_type i = 0; i < s[dim]; i++) ++ for (octave_idx_type i = 0; i < original_size.xelem (dim); i++) + scan (dim-1); + + J += pads[dim]; +@@ -161,10 +157,6 @@ scan_antiraster_order (T& padded_marker, + + const octave_idx_type n_neighbours = antiraster_neighbours.numel (); + +- // We probably should not be using this but converting to Array +- // just to have fortran_vec seems a bit too much. +- const octave_idx_type* s = original_size.to_jit (); +- + J += padded_marker.numel () -1; + I += padded_marker.numel () -1; + +@@ -178,7 +170,7 @@ scan_antiraster_order (T& padded_marker, + + if (dim == 0) + { +- for (octave_idx_type k = 0; k < s[0]; k++, J--, I--, ind--) ++ for (octave_idx_type k = 0; k < original_size.xelem (0); k++, J--, I--, ind--) + { + for (octave_idx_type i = 0; i < n_neighbours; i++) + if (*J < J[neighbours[i]]) +@@ -193,7 +185,7 @@ scan_antiraster_order (T& padded_marker, + } + } + else +- for (octave_idx_type i = 0; i < s[dim]; i++) ++ for (octave_idx_type i = 0; i < original_size.xelem (dim); i++) + scan (dim-1); + + J -= pads[dim]; + +--- ./src/bwconncomp.cc.orig 2020-02-02 14:20:08.000000000 +0100 ++++ ./src/bwconncomp.cc 2021-08-11 14:41:35.249619414 +0200 +@@ -81,13 +81,11 @@ connected_components (const boolNDArray& + + const dim_vector original_size = BW.dims (); + const dim_vector padded_size = BW_pad.dims (); +- const octave_idx_type* o = original_size.to_jit (); +- const octave_idx_type* p = padded_size.to_jit (); + const octave_idx_type ndims_m1 = BW_pad.ndims () -1; + + std::vector dim_padded (BW_pad.ndims (), true); + for (octave_idx_type i = 0; i < BW_pad.ndims (); i++) +- if (p[i] == o[i]) ++ if (padded_size.xelem (i) == original_size.xelem (i)) + dim_padded[i] = false; + + for (std::vector& conn_comp : all_components) +@@ -100,21 +98,21 @@ connected_components (const boolNDArray& + { + if (dim_padded[d]) + { +- ind += mult * (offset % p[d] - 1); +- mult *= p[d] - 2; +- offset /= p[d]; ++ ind += mult * (offset % padded_size.xelem (d) - 1); ++ mult *= padded_size.xelem (d) - 2; ++ offset /= padded_size.xelem (d); + } + else + { +- ind += mult * (offset % p[d]); +- mult *= p[d]; +- offset /= p[d]; ++ ind += mult * (offset % padded_size.xelem (d)); ++ mult *= padded_size.xelem (d); ++ offset /= padded_size.xelem (d); + } + } + if (dim_padded[ndims_m1]) +- ind += mult * (offset % p[ndims_m1] - 1); ++ ind += mult * (offset % padded_size.xelem (ndims_m1) - 1); + else +- ind += mult * (offset % p[ndims_m1]); ++ ind += mult * (offset % padded_size.xelem (ndims_m1)); + + offset = ind; + } +