• Kirill Smelkov's avatar
    bigarray: Explicitly reject dtypes with object inside · e44bd761
    Kirill Smelkov authored
    From time to time people keep trying to use wendelin.core with
    dtype=object arrays and get segfaults without anything in logs or
    whatever else.
    
    Wendelin.core does not support it, because in case of dtype=object elements are
    really pointers and data for each object is stored in separate place in RAM
    with different per-object size.
    
    As we are memory-mapping arrays this won't work. It also does not
    essentially work for numpy.memmap for the same reason:
    
        (z4+numpy) kirr@mini:~/src/wendelin$ dd if=/dev/zero of=zero.dat bs=128 count=1
        1+0 records in
        1+0 records out
        128 bytes copied, 0.000209873 s, 610 kB/s
        (z4+numpy) kirr@mini:~/src/wendelin$ dd if=/dev/urandom of=random.dat bs=128 count=1
        1+0 records in
        1+0 records out
        128 bytes copied, 0.000225726 s, 567 kB/s
        (z4+numpy) kirr@mini:~/src/wendelin$ ipython
        ...
    
        In [1]: import numpy as np
    
        In [2]: np.memmap('zero.dat', dtype=np.object)
        Out[2]:
        memmap([None, None, None, None, None, None, None, None, None, None, None,
               None, None, None, None, None], dtype=object)
    
        In [3]: np.memmap('random.dat', dtype=np.object)
        Out[3]: Segmentation fault
    
    So let's clarify this to users via explicitly raising exception when
    BigArray with non-appropriate dtype is trying to be created with
    descriptive explanation also logged.
    
    /reviewed-on !4
    e44bd761
Name
Last commit
Last update
3rdparty Loading commit data...
bigarray Loading commit data...
bigfile Loading commit data...
demo Loading commit data...
include/wendelin Loading commit data...
lib Loading commit data...
t Loading commit data...
.gitignore Loading commit data...
.gitmodules Loading commit data...
CHANGELOG.rst Loading commit data...
COPYING Loading commit data...
Makefile Loading commit data...
README.rst Loading commit data...
setup.py Loading commit data...
tox.ini Loading commit data...
wendelin.py Loading commit data...