[Cython] new patch for #255 (Py->C for integrals) in the tracker
Robert Bradshaw
robertwb at math.washington.edu
Fri Apr 3 20:44:23 CEST 2009
On Apr 3, 2009, at 10:21 AM, Lisandro Dalcin wrote:
> Rovert, I've uploaded a new version of the patch following your
> suggestions (though slightly different).
>
> Please, see also my last comments on the tracker.
Cool. I'll take a look.
> Unfortunately, I'll not be able to work further on this until Monday.
> Good weekend!
That's fine. I don't know that I'll have time to resolve the Sage
issues before then either, so I think we can still get this in 0.11.1.
- Robert
>
>
> On Thu, Apr 2, 2009 at 10:52 PM, Robert Bradshaw
> <robertwb at math.washington.edu> wrote:
>> On Apr 2, 2009, at 4:39 PM, Lisandro Dalcin wrote:
>>
>>> - The changes to ModuleNode.py and Utils.py are just quick hacks to
>>> get it working.
>>>
>>> - I've tried hard to avoid generation of unreachable code like these
>>> "if (0) {...}" blocks.
>>>
>>> - Once this is reviewed, commented and eventually accepted, I'll
>>> continue extending this to extern ctypedef integrals.
>>
>> I've taken a look at the code and it looks good to me. You took care
>> of every corner case I thought of checking. I haven't tested it under
>> Py3, but it works great under Py2. It might be worth noting that I
>> improved the utility code templating to take a type since this is
>> such a common case: http://hg.cython.org/cython-devel/file/
>> 2289ab00261d/Cython/Utils.py
>>
>> One comment I had is that in your code
>>
>> static INLINE TYPE __Pyx_PyInt_AsTYPE(PyObject* x) {
>> if (sizeof(TYPE) < sizeof(long)) {
>> long val = __Pyx_PyInt_AsLong(x);
>> if (unlikely(val == -1 && PyErr_Occurred()))
>> return (TYPE)-1;
>> if (unlikely(val < 0)) {
>> PyErr_SetString(PyExc_OverflowError,
>> "can't convert negative value to TYPE");
>> return (TYPE)-1;
>> }
>> if (unlikely(val != (long)(TYPE)val)) {
>> PyErr_SetString(PyExc_OverflowError,
>> "value too large to convert to TYPE");
>> return (TYPE)-1;
>> }
>> return (TYPE)val;
>> }
>> return (TYPE)__Pyx_PyInt_AsUnsignedLong(x);
>> }
>>
>> I believe the successful pathway could be shorted by doing
>>
>> static INLINE TYPE __Pyx_PyInt_AsTYPE(PyObject* x) {
>> if (sizeof(TYPE) < sizeof(long)) {
>> long val = __Pyx_PyInt_AsLong(x);
>> if (unlikely(val != (long)(TYPE)val)) {
>> if (unlikely(val == -1 && PyErr_Occurred()));
>> else if (val < 0) {
>> PyErr_SetString(PyExc_OverflowError,
>> "can't convert negative value to
>> TYPE");
>> }
>> else {
>> PyErr_SetString(PyExc_OverflowError,
>> "value too large to convert to
>> TYPE");
>> }
>> return (TYPE)-1;
>> }
>> return (TYPE)val;
>> }
>> return (TYPE)__Pyx_PyInt_AsUnsignedLong(x);
>> }
>>
>> as sizeof(TYPE) < sizeof(long) guarantees val != (long)(TYPE)val for
>> negative val on unsigned TYPE and the error does not need to be
>> explicitly tested for otherwise (as the calling function will check
>> PyErr_Occurred on a return value of -1).
>>
>> - Robert
>>
>> _______________________________________________
>> Cython-dev mailing list
>> Cython-dev at codespeak.net
>> http://codespeak.net/mailman/listinfo/cython-dev
>>
>
>
>
> --
> Lisandro Dalcín
> ---------------
> Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
> Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
> Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
> PTLC - Güemes 3450, (3000) Santa Fe, Argentina
> Tel/Fax: +54-(0)342-451.1594
> _______________________________________________
> Cython-dev mailing list
> Cython-dev at codespeak.net
> http://codespeak.net/mailman/listinfo/cython-dev
More information about the Cython-dev
mailing list