Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some tests fail on s390x (big endian) consistently #83

Open
penguinpee opened this issue Sep 5, 2024 · 0 comments
Open

Some tests fail on s390x (big endian) consistently #83

penguinpee opened this issue Sep 5, 2024 · 0 comments

Comments

@penguinpee
Copy link
Contributor

Whenever trx-python is build on a s390x builder (big endian), below tests fail. Tests are run without dipy being installed, which also appears to have some endianness related issues, but it's not used here.

With dipy installed I see additional tests failing. But I suppose, without having analyzed, those would be related to dipy's endianness issues and need to be fixed there.

I saw the discussion in #4 and would like to add that Fedora aims to support s390x whenever possible.

Test failures on s390x
=================================== FAILURES ===================================
_______________________________ test_seq_ops_trx _______________________________
    def test_seq_ops_trx():
        with TemporaryDirectory() as tmp_dir:
            gs_dir = os.path.join(get_home(), 'gold_standard')
            path = os.path.join(gs_dir, 'gs.trx')
    
            trx_1 = tmm.load(path)
>           tmm.save(trx_1, os.path.join(tmp_dir, 'tmp.trx'))
trx/tests/test_io.py:53: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../BUILDROOT/usr/lib/python3.13/site-packages/trx/trx_file_memmap.py:547: in save
    copy_trx.resize()
../BUILDROOT/usr/lib/python3.13/site-packages/trx/trx_file_memmap.py:1229: in resize
    trx._copy_fixed_arrays_from(self)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <trx.trx_file_memmap.TrxFile object at 0x3ff371065d0>
trx = <trx.trx_file_memmap.TrxFile object at 0x3ff37106490>, strs_start = 0
pts_start = 0, nb_strs_to_copy = None
    def _copy_fixed_arrays_from(
        self,
        trx: Type["TrxFile"],
        strs_start: int = 0,
        pts_start: int = 0,
        nb_strs_to_copy: Optional[int] = None,
    ) -> Tuple[int, int]:
        """Fill a TrxFile using another and start indexes (preallocation)
    
        Keyword arguments:
            trx -- TrxFile to copy data from
            strs_start -- The start index of the streamline
            pts_start -- The start index of the point
            nb_strs_to_copy -- The number of streamlines to copy. If not set
                                will copy all
    
        Returns
            A tuple representing the end of the copied streamlines and end of
                copied points
        """
        if nb_strs_to_copy is None:
            curr_strs_len, curr_pts_len = trx._get_real_len()
        else:
            curr_strs_len = int(nb_strs_to_copy)
            curr_pts_len = np.sum(trx.streamlines._lengths[0:curr_strs_len])
            curr_pts_len = int(curr_pts_len)
    
        strs_end = strs_start + curr_strs_len
        pts_end = pts_start + curr_pts_len
    
        if curr_pts_len == 0:
            return strs_start, pts_start
    
        # Mandatory arrays
>       self.streamlines._data[pts_start:pts_end] = \
            trx.streamlines._data[0:curr_pts_len]
E       ValueError: could not broadcast input array from shape (104,3) into shape (4294967400,3)
../BUILDROOT/usr/lib/python3.13/site-packages/trx/trx_file_memmap.py:872: ValueError
_________________________ test_concatenate[small.trx] __________________________
path = '/builddir/build/BUILD/python-trx-python-0.3-build/trx-python-0.3/tests/memmap_test_data/small.trx'
    @pytest.mark.parametrize("path", [("small.trx")])
    def test_concatenate(path):
        path = os.path.join(get_home(), 'memmap_test_data', path)
        trx1 = tmm.load(path)
        trx2 = tmm.load(path)
        concat = tmm.concatenate([trx1, trx2])
    
>       assert len(concat) == 2 * len(trx2)
E       assert 0 == (2 * 1000)
E        +  where 0 = len(<trx.trx_file_memmap.TrxFile object at 0x3ff36dbc390>)
E        +  and   1000 = len(<trx.trx_file_memmap.TrxFile object at 0x3ff371fb150>)
trx/tests/test_memmap.py:191: AssertionError
____________________________ test_resize[small.trx] ____________________________
path = '/builddir/build/BUILD/python-trx-python-0.3-build/trx-python-0.3/tests/memmap_test_data/small.trx'
    @pytest.mark.parametrize("path", [("small.trx")])
    def test_resize(path):
        path = os.path.join(get_home(), 'memmap_test_data', path)
        trx1 = tmm.load(path)
        concat = tmm.TrxFile(nb_vertices=1000000, nb_streamlines=10000,
                             init_as=trx1)
    
        tmm.concatenate([concat, trx1], preallocation=True, delete_groups=True)
        concat.resize()
    
>       assert len(concat) == len(trx1)
E       assert 0 == 1000
E        +  where 0 = len(<trx.trx_file_memmap.TrxFile object at 0x3ff371b9860>)
E        +  and   1000 = len(<trx.trx_file_memmap.TrxFile object at 0x3ff372af950>)
trx/tests/test_memmap.py:207: AssertionError
_________________________ test_append[small.trx-10000] _________________________
path = '/builddir/build/BUILD/python-trx-python-0.3-build/trx-python-0.3/tests/memmap_test_data/small.trx'
buffer = 10000
    @pytest.mark.parametrize(
        "path, buffer",
        [
            ("small.trx", 10000),
            ("small.trx", 0)
        ]
    )
    def test_append(path, buffer):
        path = os.path.join(get_home(), 'memmap_test_data', path)
        trx1 = tmm.load(path)
        concat = tmm.TrxFile(nb_vertices=1, nb_streamlines=1,
                             init_as=trx1)
    
        concat.append(trx1, extra_buffer=buffer)
        if buffer > 0:
            concat.resize()
    
>       assert len(concat) == len(trx1)
E       assert 0 == 1000
E        +  where 0 = len(<trx.trx_file_memmap.TrxFile object at 0x3ff36e35fd0>)
E        +  and   1000 = len(<trx.trx_file_memmap.TrxFile object at 0x3ff36e30230>)
trx/tests/test_memmap.py:229: AssertionError
___________________ test_append_Tractogram[small.trx-10000] ____________________
path = '/builddir/build/BUILD/python-trx-python-0.3-build/trx-python-0.3/tests/memmap_test_data/small.trx'
buffer = 10000
    @pytest.mark.parametrize("path, buffer", [("small.trx", 10000)])
    def test_append_Tractogram(path, buffer):
        path = os.path.join(get_home(), 'memmap_test_data', path)
        trx = tmm.load(path)
        obj = trx.to_tractogram()
        concat = tmm.TrxFile(nb_vertices=1, nb_streamlines=1, init_as=trx)
    
>       concat.append(obj, extra_buffer=buffer)
trx/tests/test_memmap.py:258: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../BUILDROOT/usr/lib/python3.13/site-packages/trx/trx_file_memmap.py:1322: in append
    obj = self.from_tractogram(obj, reference=self.header,
../BUILDROOT/usr/lib/python3.13/site-packages/trx/trx_file_memmap.py:1649: in from_tractogram
    save(trx, tmp_dir.name)
../BUILDROOT/usr/lib/python3.13/site-packages/trx/trx_file_memmap.py:546: in save
    copy_trx = trx.deepcopy()
../BUILDROOT/usr/lib/python3.13/site-packages/trx/trx_file_memmap.py:762: in deepcopy
    to_dump = _append_last_offsets(self.streamlines._offsets,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
nib_offsets = memmap([                   0,  2233785415175766016,  7710162562058289152,
        10592466323575406592, 12754194144713...
        13223412930889908224, 15457198346065674240,   541557855191302144,
         2054767329987788800], dtype=uint64)
nb_vertices = 33886
    def _append_last_offsets(nib_offsets: np.ndarray, nb_vertices: int) -> np.ndarray:
        """Appends the last element of offsets from header information
    
        Keyword arguments:
            nib_offsets -- np.ndarray
                Array of offsets with the last element being the start of the last
                streamline (nibabel convention)
            nb_vertices -- int
                Total number of vertices in the streamlines
        Returns:
            Offsets -- np.ndarray (VTK convention)
        """
        def is_sorted(a): return np.all(a[:-1] <= a[1:])
        if not is_sorted(nib_offsets):
>           raise ValueError('Offsets must be sorted values.')
E           ValueError: Offsets must be sorted values.
../BUILDROOT/usr/lib/python3.13/site-packages/trx/trx_file_memmap.py:47: ValueError
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant