[cctbxbb] flex.histogram giving ArgumentError when arguments correct

Tristan Croll tic20 at cam.ac.uk
Tue Aug 4 05:25:30 PDT 2020


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


More information about the cctbxbb mailing list