Fixed the remaining build issues, and got versions required to complete the build on the unmodified source without any errors. The recipe I ended up with was to start with debian:jessie, install the prerequisite packages besides cmake (copied these from the official NuPIC Core Dockerfile). Then add jessie-backports to the sources list, and pull in cmake from there to get a high enough version. And finally use the --upgrade flag when doing installing setuptools with pip to get a high enough version of it.
Though installation completes without any issues, there are still some test cases failing (only on armhf), so haven’t quite achieved my ultimate goal yet. I think at this point the remaining issue is just with the architecture (since the exact same recipe passes all tests on x64).
The remaining failures on armhf are similar to this one:
_____________ NetworkTest.testSimpleTwoRegionNetworkIntrospection ______________
self = <tests.network_test.NetworkTest testMethod=testSimpleTwoRegionNetworkIntrospection>
def testSimpleTwoRegionNetworkIntrospection(self):
# Create Network instance
network = engine.Network()
# Add two TestNode regions to network
network.addRegion("region1", "TestNode", "")
network.addRegion("region2", "TestNode", "")
# Set dimensions on first region
region1 = network.getRegions().getByName("region1")
> region1.setDimensions(engine.Dimensions([1, 1]))
network_test.py:89:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <nupic.bindings.engine_internal.Dimensions; >, args = ([1, 1],)
def __init__(self, *args):
"""
__init__(self) -> Dimensions
__init__(self, v) -> Dimensions
__init__(self, x) -> Dimensions
__init__(self, x, y) -> Dimensions
__init__(self, x, y, z) -> Dimensions
"""
> this = _engine_internal.new_Dimensions(*args)
E NotImplementedError: Wrong number or type of arguments for overloaded function 'new_Dimensions'.
E Possible C/C++ prototypes are:
E nupic::Dimensions::Dimensions()
E nupic::Dimensions::Dimensions(std::vector< size_t,std::allocator< size_t > >)
E nupic::Dimensions::Dimensions(size_t)
E nupic::Dimensions::Dimensions(size_t,size_t)
E nupic::Dimensions::Dimensions(size_t,size_t,size_t)
../src/nupic/bindings/engine_internal.py:613: NotImplementedError
It appears that Python is passing an array of numbers, and that pattern is not properly matching any of the native prototypes.
I’m thinking a clue is the use of “size_t” here, which on armhf is 4 bytes in length, but on x64 is 8 bytes. Will do some more digging to verify that this is the issue (one way to check would be to build on x86 architecture which also has 4 byte size_t). Anyone have some thoughts on this particular problem, and how it might be addressed?