[cctbxbb] flex.histogram giving ArgumentError when arguments correct

Tristan Croll tic20 at cam.ac.uk
Tue Aug 4 05:37:23 PDT 2020


Excellent!

On 2020-08-04 13:31, Winter, Graeme (DLSLtd,RAL,LSCI) wrote:
> Oh right, this one has legs, trying it
> 
> Right, you nailed it, + many points for Team Croll, much appreciated!
> 
> Dang
> 
> “the wrong sort of int” with no hint of this. sweet.
> 
> I have no idea about how to trap this more usefully, maybe should just
> copy the stack trace into an issue and then close with the workaround
> so $person-in-future googling has some hope of finding a solution
> 
> But… is fixed, so thanks!
> 
>> On 4 Aug 2020, at 13:25, Tristan Croll <tic20 at cam.ac.uk> wrote:
>> 
>> An out-there possibility - but in the past I ran into a similar 
>> head-scratcher when working with SWIG (thankful to not be using that 
>> any more). Numpy integer scalars are distinct from the Python int 
>> type, leading to similar error messages when you try to feed one into 
>> a SWIG-wrapped function expecting a C++ integer type. Had to be 
>> explicitly cast on the Python side first, i.e. 
>> int(numpy_array_of_ints[i]).
>> 
>> On 2020-08-04 13:19, Winter, Graeme (DLSLtd,RAL,LSCI) wrote:
>>> Hi Tristan
>>> Given that it worked for other integers as input (as shown further
>>> down) I’d hope this makes no difference however
>>>    H = flex.histogram(data=coords, data_min=0.0, data_max=float(dim),
>>> n_slots=dim)
>>> Boost.Python.ArgumentError: Please report this error to
>>> dials-support at lists.sourceforge.net: Python argument types in
>>> Nope :-(
>>> It still fails…
>>> This one is properly weird…
>>> Thanks Graeme
>>>> On 4 Aug 2020, at 13:14, Tristan Croll <tic20 at cam.ac.uk> wrote:
>>>> Not a specialist in boost.python by any stretch - but as a quick 
>>>> sanity check, have you tried data_max=float(dim) to see if it's 
>>>> failing to do the implicit conversion?
>>>> On 2020-08-04 12:56, Winter, Graeme (DLSLtd,RAL,LSCI) wrote:
>>>>> H = flex.histogram(coords, data_min=0.0, data_max=dim, n_slots=dim)
>>>>> Gives
>>>>> Boost.Python.ArgumentError: Please report this error to
>>>>> dials-support at lists.sourceforge.net: Python argument types in
>>>>>   histogram.__init__(histogram)
>>>>> did not match C++ signature:
>>>>>   __init__(_object*, double, double, double,
>>>>> scitbx::af::shared<long>, unsigned long)
>>>>>   __init__(_object*, scitbx::histogram<double, long> other,
>>>>> scitbx::af::const_ref<double, scitbx::af::trivial_accessor> data,
>>>>> double relative_tolerance=0.0001)
>>>>>   __init__(_object*, scitbx::af::const_ref<double,
>>>>> scitbx::af::trivial_accessor> data, double data_min, double 
>>>>> data_max,
>>>>> unsigned long n_slots=1000, double relative_tolerance=0.0001)
>>>>>   __init__(_object*, scitbx::af::const_ref<double,
>>>>> scitbx::af::trivial_accessor> data, unsigned long n_slots=1000)
>>>>> Despite
>>>>> coords being
>>>>> <scitbx_array_family_flex_ext.double object at 0x7fa8d671b5b0>
>>>>> with shape
>>>>> (31294944,)
>>>>> and dim being 18093576 (i.e. integer)
>>>>> and
>>>>> h = flex.histogram(a, data_min=0, data_max=100, n_slots=100)
>>>>> working fine in another context i.e. the calling convention is 
>>>>> correct
>>>>> This has so far cost a few hours, so what gives? How can this be
>>>>> holding it wrong? C++ code suggests that the bin types are long so
>>>>> this should be fine
>>>>> Any hints?
>>>>> Thanks Graeme
>>>> _______________________________________________
>>>> cctbxbb mailing list
>>>> cctbxbb at phenix-online.org
>>>> http://phenix-online.org/mailman/listinfo/cctbxbb
>> _______________________________________________
>> cctbxbb mailing list
>> cctbxbb at phenix-online.org
>> http://phenix-online.org/mailman/listinfo/cctbxbb


More information about the cctbxbb mailing list