jiayuasu commented on PR #3108:
URL: https://github.com/apache/sedona/pull/3108#issuecomment-5077130212

   Confirmed against the JDK and fixed in 
https://github.com/apache/sedona/commit/642de290053000f1025626901fdb4644fa2bf7ec.
   
   [P1] MultiPixelPackedSampleModel(TYPE_INT, 3, 2, 32, 4, 0) is accepted by 
Java and reads every pixel as zero, because bitMask = (1 << 32) - 1 is 
evaluated on an int whose shift count is taken modulo 32. The mask is now 
derived as (1 << (num_bits % 32)) - 1, which reproduces that and leaves every 
other width alone (8 on byte and 16 on ushort still mask normally).
   
   [P2] Java leaves the bit offset of a zero mask at 0 and reads the band as 
zero; getBitOffsets() returns [16, 8, 0, 0] for {0xFF0000, 0xFF00, 0xFF, 0}. 
The offset is now 0 for a zero mask. Worth noting the crash was numpy-2 only: 
on numpy 1.26 the -1 shift happened to yield the right answer, so this would 
not have shown up in CI.
   
   Rather than patch just these two, I swept both packed models over 1004 
layouts recorded from java.awt.image: every num_bits that divides the sample 
size for byte, ushort and int samples, aligned and unaligned data bit offsets, 
zero and non-zero bank offsets, and mask sets covering zero masks, whole-sample 
masks and masks over the sign bit. All 1004 match on numpy 1.26 and 2.5, with 
numpy warnings raised as errors; 510 of them do not match on master. No third 
case of this kind is left.
   
   One thing the sweep turned up: Java rejects non-contiguous bit masks in the 
SinglePixelPackedSampleModel constructor (Mask 195 must be contiguous), so 
those layouts cannot reach the reader and need no handling.
   
   Two new regression tests cover P1 and P2 
(test_multi_pixel_packed_whole_sample_pixels_read_zero, 
test_single_pixel_packed_zero_mask_reads_zero), taking their expected values 
from the same JDK run.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to