CAMFR icon indicating copy to clipboard operation
CAMFR copied to clipboard

remove global imports of `numpy` etc.

Open demisjohn opened this issue 6 years ago • 3 comments

From @demisjohn on February 28, 2018 9:38

the module repeatedly calls from numpy import *, which, aside from being bad practice, actually has stomped on one of it's own functions.

The camfr function full(), as in set_mode_correct(full), has been replaced by numpy.full() (which presumably didn't exist in ~2005). This now pops an error.

    set_mode_correction(full)
Boost.Python.ArgumentError: Python argument types in
    camfr._camfr.set_mode_correction(function)
did not match C++ signature:
    set_mode_correction(Mode_correction)

Must go thru the python files and replace the import statement with import numpy as np and go through to prepend all numpy functions with np.!

Copied from original issue: demisjohn/CAMFR#5

demisjohn avatar Apr 11 '18 04:04 demisjohn

A workaround may be to use the number 3 instead of "full", as I believe this is just an enumerated enum in C or something.

See camfr_wrap.cpp, and search for full

demisjohn avatar Apr 11 '18 04:04 demisjohn

30415335d12ad3bc2ea304a3b76d37845a38a9e3 fixes the numpy * stomping on full ModeSolver option.

Still have a few more include files to remove the global numpy import from, and also must runs testsuite to confirm it didn't break anything.

demisjohn avatar Apr 11 '18 04:04 demisjohn

The last global import is in __init__.py, where it calls from pylab import *. Not sure which modules use this.

This does actually generate a full() function from numpy, but _camfr.so is loaded afterwards, so CAMFR stomps on numpy's full function, so CAMFR works as expected when run with import camfr as *.

Should remove this line, but find out where it is used first to see if it'll break anything.

demisjohn avatar Apr 11 '18 04:04 demisjohn