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

struct.pack() + numpy int raises SystemError #46516

Closed
jvr mannequin opened this issue Mar 10, 2008 · 8 comments
Closed

struct.pack() + numpy int raises SystemError #46516

jvr mannequin opened this issue Mar 10, 2008 · 8 comments
Labels
docs Documentation in the Doc dir type-bug An unexpected behavior, bug, or error

Comments

@jvr
Copy link
Mannequin

jvr mannequin commented Mar 10, 2008

BPO 2263
Nosy @birkenfeld, @mdickinson, @pitrou, @vstinner
Files
  • issue2263-numpy.py: produce test report.
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = <Date 2017-03-07.19:19:43.004>
    created_at = <Date 2008-03-10.07:39:23.945>
    labels = ['type-bug', 'docs']
    title = 'struct.pack() + numpy int raises SystemError'
    updated_at = <Date 2017-03-07.19:19:43.003>
    user = 'https://bugs.python.org/jvr'

    bugs.python.org fields:

    activity = <Date 2017-03-07.19:19:43.003>
    actor = 'serhiy.storchaka'
    assignee = 'docs@python'
    closed = True
    closed_date = <Date 2017-03-07.19:19:43.004>
    closer = 'serhiy.storchaka'
    components = ['Documentation']
    creation = <Date 2008-03-10.07:39:23.945>
    creator = 'jvr'
    dependencies = []
    files = ['12888']
    hgrepos = []
    issue_num = 2263
    keywords = []
    message_count = 8.0
    messages = ['63435', '80736', '81515', '81782', '81783', '88034', '173062', '193181']
    nosy_count = 7.0
    nosy_names = ['georg.brandl', 'jvr', 'mark.dickinson', 'grubert', 'pitrou', 'vstinner', 'zaytsev']
    pr_nums = []
    priority = 'normal'
    resolution = 'third party'
    stage = 'resolved'
    status = 'closed'
    superseder = None
    type = 'behavior'
    url = 'https://bugs.python.org/issue2263'
    versions = ['Python 2.6', 'Python 3.0', 'Python 3.1', 'Python 2.7']

    @jvr
    Copy link
    Mannequin Author

    jvr mannequin commented Mar 10, 2008

    struct.pack() raises SystemError when fed a numpy integer in some cases.
    The following was run on MacOSX 10.4, little endian (I can only
    reproduce the error if I specify big endian for the struct format). Not
    sure if this could be a numpy bug.

    Python 2.5.2 (r252:60911, Feb 22 2008, 07:57:53) 
    [GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import struct
    >>> import numpy
    >>> i = numpy.int16(1)
    >>> struct.pack(">B", i)
    __main__:1: DeprecationWarning: struct integer overflow masking is 
    deprecated
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File 
    "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/struct.
    py", line 63, in pack
        return o.pack(*args)
    SystemError: /Users/ronald/r252/Objects/longobject.c:322: bad argument 
    to internal function
    >>> struct.pack(">H", i)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File 
    "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/struct.
    py", line 63, in pack
        return o.pack(*args)
    SystemError: /Users/ronald/r252/Objects/longobject.c:322: bad argument 
    to internal function
    >>> struct.pack(">h", i)
    '\x00\x01'
    >>> struct.pack(">b", i)
    '\x01'
    >>> struct.pack("B", i)
    '\x01'
    >>> struct.pack("h", i)
    '\x01\x00'
    >>> numpy.__version__
    '1.0.4'
    >>>

    @jvr jvr mannequin added stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error labels Mar 10, 2008
    @grubert
    Copy link
    Mannequin

    grubert mannequin commented Jan 29, 2009

    on ubuntu 8.04, Python 2.7a0 (trunk:69044) and numpy 1.2.1
    ("." is OK, "e" means SystemError)

    • signed always works, longlong also.
    • unsigned native works half of the time
    • unsigned little/big endian never works
    • the numpy type does seam to have any effect.

    signed char b 'int16' . <. >. 'uint32' . <. >.
    sys:1: DeprecationWarning: struct integer overflow masking is deprecated
    unsigned char B 'int16' . <e >e 'uint32' . <e >e
    signed short h 'int16' . <. >. 'uint32' . <. >.
    unsigned short H 'int16' . <e >e 'uint32' . <e >e
    signed int i 'int16' . <. >. 'uint32' . <. >.
    unsigned int I 'int16' e <e >e 'uint32' e <e >e
    signed long l 'int16' . <. >. 'uint32' . <. >.
    unsigned long L 'int16' e <e >e 'uint32' e <e >e
    signed long long q 'int16' . <. >. 'uint32' . <. >.
    unsigned long long Q 'int16' . <. >. 'uint32' . <. >.

    @grubert
    Copy link
    Mannequin

    grubert mannequin commented Feb 9, 2009

    in 2.7 svn _struct.c

    formatdef native_table[] = {
      {'B',   sizeof(char),   0,      nu_ubyte,   np_ubyte},
    formatdef bigendian_table[]
      {'B',   1,      0,      nu_ubyte,   bp_uint},
    formatdef lilendian_table[]
        {'B',   1,      0,      nu_ubyte,   lp_uint},
    
    np_ubyte calls get_long b/lp_uint call get_wrapped_ulong which calls
    #define PyInt_Check(op) \
      PyType_FastSubclass((op)->ob_type, Py_TPFLAGS_INT_SUBCLASS)

    but ob_type is set to BASE flags INT_SUBCLASS i snot set.

    @grubert
    Copy link
    Mannequin

    grubert mannequin commented Feb 12, 2009

    Including Py_TPFLAGS_INT_SUBCLASS in numpy's BASEFLAGS cures this.
    This is an external problem then.
    But I could not find any reference to Py_TPFLAGS_*_SUBCLASS in the
    documentation, that is a python problem.

    @pitrou
    Copy link
    Member

    pitrou commented Feb 12, 2009

    Ok, so Python has to improve its C-API documentation, and numpy to fix
    its int types :)

    @pitrou pitrou added docs Documentation in the Doc dir and removed stdlib Python modules in the Lib dir labels Feb 12, 2009
    @grubert
    Copy link
    Mannequin

    grubert mannequin commented May 18, 2009

    bpo-5476 has a problem with timedelta(microseconds = int32(36))

    interestingly 0 to 35 work , if the patch for this bpo-2263 is applied.

    @admin admin mannequin assigned docspython and unassigned birkenfeld Oct 29, 2010
    @serhiy-storchaka
    Copy link
    Member

    FYI Py_TPFLAGS_INT_SUBCLASS already not used in Python 3.x.

    @zaytsev
    Copy link
    Mannequin

    zaytsev mannequin commented Jul 16, 2013

    As noted in bpo-5476, I've submitted a pull request for NumPy: ttps://github.com/numpy/numpy/pull/3526 .

    I hope that this fixes this problem too: on Py2, I've added Py_TPFLAGS_INT_SUBCLASS, on Py3, NumPy doesn't inherit from int anymore, because it's not a fixed-width integer type.

    I guess it makes sense to close this bug now.

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    docs Documentation in the Doc dir type-bug An unexpected behavior, bug, or error
    Projects
    None yet
    Development

    No branches or pull requests

    3 participants