Skip to content

Commit

Permalink
Merge pull request #196 from htm-community/remove_buffer
Browse files Browse the repository at this point in the history
remove_buffer
  • Loading branch information
dkeeney authored Jan 5, 2019
2 parents 4300418 + 3d3b68f commit 9c9e130
Show file tree
Hide file tree
Showing 23 changed files with 522 additions and 3,987 deletions.
9 changes: 5 additions & 4 deletions bindings/py/cpp_src/bindings/engine/py_Engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -210,10 +210,11 @@ namespace nupic_ext
getSpecFromType
*/

py_Region.def("getSelf", [](const Region& self)
{
return self.getParameterHandle("self");
});
// TODO: do we need a function like this?
//py_Region.def("getSelf", [](const Region& self)
//{
// return self.getParameterHandle("self");
//});

py_Region.def("getInputArray", [](const Region& self, const std::string& name)
{
Expand Down
25 changes: 1 addition & 24 deletions bindings/py/cpp_src/plugin/PyBindRegion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ In this case, the C++ engine is actually calling into the Python code.
#include <nupic/engine/Region.hpp>
#include <nupic/engine/Input.hpp>
#include <nupic/engine/Output.hpp>
#include <nupic/ntypes/ObjectModel.hpp> // IWrite/ReadBuffer
#include <nupic/ntypes/Array.hpp>
#include <nupic/ntypes/ArrayRef.hpp>
#include <nupic/types/BasicType.hpp>
#include <nupic/types/Types.hpp>
#include <nupic/ntypes/BundleIO.hpp>
#include <nupic/utils/Log.hpp>
#include <nupic/os/Path.hpp>
Expand Down Expand Up @@ -374,11 +374,6 @@ namespace nupic
return getParameterT<Real64>(name, index);
}

Handle PyBindRegion::getParameterHandle(const std::string& name, Int64 index)
{
throw std::runtime_error("Not implemented");

}


void PyBindRegion::setParameterBool(const std::string& name, Int64 index, bool value)
Expand Down Expand Up @@ -421,11 +416,6 @@ namespace nupic
setParameterT(name, index, value);
}

void PyBindRegion::setParameterHandle(const std::string& name, Int64 index, Handle value)
{
throw std::runtime_error("Not implemented");
}

void PyBindRegion::getParameterArray(const std::string& name, Int64 index, Array & a)
{
auto args = py::make_tuple(name, index, create_numpy_view(a));
Expand All @@ -451,19 +441,6 @@ namespace nupic
}


void PyBindRegion::getParameterFromBuffer(const std::string& name, Int64 index, IWriteBuffer& value)
{
// we override getParameterX for every type, so this should never
// be called
NTA_THROW << "::getParameterFromBuffer should not have been called";
}

void PyBindRegion::setParameterFromBuffer(const std::string& name, Int64 index, IReadBuffer& value)
{
// we override getParameterX for every type, so this should never
// be called
NTA_THROW << "::setParameterFromBuffer should not have been called";
}

size_t PyBindRegion::getParameterArrayCount(const std::string& name, Int64 index)
{
Expand Down
5 changes: 1 addition & 4 deletions bindings/py/cpp_src/plugin/PyBindRegion.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ Definition of the PyBindRegion class. The base class for all Python Region impl
#include <bindings/suppress_register.hpp> //include before pybind11.h
#include <pybind11/pybind11.h>

#include <nupic/types/Types.hpp>
#include <nupic/engine/RegionImpl.hpp>
#include <nupic/engine/Spec.hpp>
#include <nupic/ntypes/Value.hpp>
Expand Down Expand Up @@ -76,8 +77,6 @@ namespace nupic
////////////////////////////

size_t getNodeOutputElementCount(const std::string& outputName) override;
void getParameterFromBuffer(const std::string& name, Int64 index, IWriteBuffer& value) override;
void setParameterFromBuffer(const std::string& name, Int64 index, IReadBuffer& value) override;

void initialize() override;
void compute() override;
Expand All @@ -92,7 +91,6 @@ namespace nupic
virtual UInt64 getParameterUInt64(const std::string& name, Int64 index) override;
virtual Real32 getParameterReal32(const std::string& name, Int64 index) override;
virtual Real64 getParameterReal64(const std::string& name, Int64 index) override;
virtual Handle getParameterHandle(const std::string& name, Int64 index) override;
virtual bool getParameterBool(const std::string& name, Int64 index) override;
virtual std::string getParameterString(const std::string& name, Int64 index) override;

Expand All @@ -103,7 +101,6 @@ namespace nupic
virtual void setParameterUInt64(const std::string& name, Int64 index, UInt64 value) override;
virtual void setParameterReal32(const std::string& name, Int64 index, Real32 value) override;
virtual void setParameterReal64(const std::string& name, Int64 index, Real64 value) override;
virtual void setParameterHandle(const std::string& name, Int64 index, Handle value) override;
virtual void setParameterBool(const std::string& name, Int64 index, bool value) override;
virtual void setParameterString(const std::string& name, Int64 index, const std::string& value) override;

Expand Down
4 changes: 0 additions & 4 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,6 @@ set(ntypes_files
nupic/ntypes/ArrayBase.cpp
nupic/ntypes/ArrayBase.hpp
nupic/ntypes/ArrayRef.hpp
nupic/ntypes/Buffer.cpp
nupic/ntypes/Buffer.hpp
nupic/ntypes/BundleIO.hpp
#nupic/ntypes/Collection.cpp Included directly into Collections.cpp
nupic/ntypes/Collection.hpp
Expand All @@ -183,8 +181,6 @@ set(ntypes_files
nupic/ntypes/MemParser.hpp
nupic/ntypes/MemStream.hpp
nupic/ntypes/NodeSet.hpp
nupic/ntypes/ObjectModel.h
nupic/ntypes/ObjectModel.hpp
nupic/ntypes/Scalar.cpp
nupic/ntypes/Scalar.hpp
nupic/ntypes/Value.cpp
Expand Down
205 changes: 70 additions & 135 deletions src/nupic/engine/RegionImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
#include <nupic/engine/RegionImpl.hpp>
#include <nupic/engine/Spec.hpp>
#include <nupic/ntypes/Array.hpp>
#include <nupic/ntypes/Buffer.hpp>
#include <nupic/ntypes/BundleIO.hpp>
#include <nupic/ntypes/Dimensions.hpp>
#include <nupic/types/BasicType.hpp>
Expand Down Expand Up @@ -59,23 +58,17 @@ const NodeSet &RegionImpl::getEnabledNodes() const {
Type RegionImpl::getParameter##MethodT(const std::string &name, \
Int64 index) { \
if (!region_->getSpec()->parameters.contains(name)) \
NTA_THROW << "getParameter" #Type ": parameter " << name \
<< " does not exist in nodespec"; \
NTA_THROW << "getParameter" #Type ": Region type " << getType() \
<< ", parameter " << name \
<< " does not exist in region spec"; \
ParameterSpec p = region_->getSpec()->parameters.getByName(name); \
if (p.dataType != NTA_BasicType_##MethodT) \
NTA_THROW << "getParameter" #Type ": parameter " << name \
NTA_THROW << "getParameter" #Type ": Region type " << getType() \
<< ", parameter " << name \
<< " is of type " << BasicType::getName(p.dataType) \
<< " not " #Type; \
WriteBuffer wb; \
getParameterFromBuffer(name, index, wb); \
ReadBuffer rb(wb.getData(), wb.getSize(), false /* copy */); \
Type val; \
int rc = rb.read(val); \
if (rc != 0) { \
NTA_THROW << "getParameter" #Type " -- failure to get parameter '" \
<< name << "' on node of type " << getType(); \
} \
return val; \
NTA_THROW << "getParameter" #Type " -- parameter '" \
<< name << "' on region of type " << getType() << " not implemented"; \
}

#define getParameterT(Type) getParameterInternalT(Type, Type)
Expand All @@ -90,138 +83,91 @@ getParameterInternalT(Bool, bool);
#define setParameterInternalT(MethodT, Type) \
void RegionImpl::setParameter##MethodT(const std::string &name, Int64 index, \
Type value) { \
WriteBuffer wb; \
wb.write((Type)value); \
ReadBuffer rb(wb.getData(), wb.getSize(), false /* copy */); \
setParameterFromBuffer(name, index, rb); \
if (!region_->getSpec()->parameters.contains(name)) \
NTA_THROW << "setParameter" #Type ": Region type " << getType() \
<< ", parameter " << name \
<< " does not exist in Spec"; \
ParameterSpec p = region_->getSpec()->parameters.getByName(name); \
if (p.dataType != NTA_BasicType_##MethodT) \
NTA_THROW << "setParameter" #Type ": Region type " << getType() \
<< ", parameter " << name \
<< " is of type " << BasicType::getName(p.dataType) \
<< " not " #Type; \
if (p.accessMode != ParameterSpec::ReadWriteAccess) \
NTA_THROW << "setParameter" #Type " -- parameter '" << name << " is Readonly"; \
NTA_THROW << "setParameter" #Type " -- Region type " << getType() \
<< ", parameter '" << name << "' not implemented"; \
}

#define setParameterT(Type) setParameterInternalT(Type, Type)

setParameterT(Int32);
setParameterT(UInt32);
setParameterT(Int64);
setParameterT(UInt64) setParameterT(Real32);
setParameterT(UInt64);
setParameterT(Real32);
setParameterT(Real64);
setParameterInternalT(Bool, bool);

// buffer mechanism can't handle Handles. RegionImpl must override these
// methods.
Handle RegionImpl::getParameterHandle(const std::string &name, Int64 index) {
NTA_THROW << "Unknown parameter '" << name << "' of type Handle.";
}

void RegionImpl::setParameterHandle(const std::string &name, Int64 index,
Handle h) {
NTA_THROW << "Unknown parameter '" << name << "' of type Handle.";
}

void RegionImpl::getParameterArray(const std::string &name, Int64 index,
Array &array) {
WriteBuffer wb;
getParameterFromBuffer(name, index, wb);
ReadBuffer rb(wb.getData(), wb.getSize(), false /* copy */);
size_t count = array.getCount();
void *buffer = array.getBuffer();

for (size_t i = 0; i < count; i++) {
int rc;
switch (array.getType()) {

case NTA_BasicType_Byte:
rc = rb.read(((Byte *)buffer)[i]);
break;
case NTA_BasicType_Int32:
rc = rb.read(((Int32 *)buffer)[i]);
break;
case NTA_BasicType_UInt32:
rc = rb.read(((UInt32 *)buffer)[i]);
break;
case NTA_BasicType_Int64:
rc = rb.read(((Int64 *)buffer)[i]);
break;
case NTA_BasicType_UInt64:
rc = rb.read(((UInt64 *)buffer)[i]);
break;
case NTA_BasicType_Real32:
rc = rb.read(((Real32 *)buffer)[i]);
break;
case NTA_BasicType_Real64:
rc = rb.read(((Real64 *)buffer)[i]);
break;
default:
NTA_THROW << "Unsupported basic type "
<< BasicType::getName(array.getType())
<< " in getParameterArray for parameter " << name;
break;
}

if (rc != 0) {
NTA_THROW << "getParameterArray -- failure to get parameter '" << name
<< "' on node of type " << getType();
}
void RegionImpl::getParameterArray(const std::string &name, Int64 index, Array &array) {
if (!region_->getSpec()->parameters.contains(name))
NTA_THROW << "setParameterArray: parameter " << name
<< " does not exist in Spec";
ParameterSpec p = region_->getSpec()->parameters.getByName(name);
if (p.dataType != array.getType()) {
NTA_THROW << "setParameterArray: parameter " << name
<< " is of type " << BasicType::getName(p.dataType)
<< " not " << BasicType::getName(array.getType());
}
return;
NTA_THROW << "getParameterArray: parameter '" << name
<< "' an array with a type of "
<< BasicType::getName(p.dataType)
<< " is found in the region spec but is not implemented.";
}

void RegionImpl::setParameterArray(const std::string &name, Int64 index,
const Array &array) {
WriteBuffer wb;
size_t count = array.getCount();
void *buffer = array.getBuffer();
for (size_t i = 0; i < count; i++) {
int rc;
switch (array.getType()) {

case NTA_BasicType_Byte:
rc = wb.write(((Byte *)buffer)[i]);
break;
case NTA_BasicType_Int32:
rc = wb.write(((Int32 *)buffer)[i]);
break;
case NTA_BasicType_UInt32:
rc = wb.write(((UInt32 *)buffer)[i]);
break;
case NTA_BasicType_Int64:
rc = wb.write(((Int64 *)buffer)[i]);
break;
case NTA_BasicType_UInt64:
rc = wb.write(((UInt64 *)buffer)[i]);
break;
case NTA_BasicType_Real32:
rc = wb.write(((Real32 *)buffer)[i]);
break;
case NTA_BasicType_Real64:
rc = wb.write(((Real64 *)buffer)[i]);
break;
default:
NTA_THROW << "Unsupported basic type "
<< BasicType::getName(array.getType())
<< " in setParameterArray for parameter " << name;
break;
}

if (rc != 0) {
NTA_THROW << "setParameterArray - failure to set parameter '" << name
<< "' on node of type " << getType();
}
void RegionImpl::setParameterArray(const std::string &name, Int64 index, const Array &array) {
if (!region_->getSpec()->parameters.contains(name))
NTA_THROW << "setParameterArray: parameter " << name
<< " does not exist in Spec for this region.";
ParameterSpec p = region_->getSpec()->parameters.getByName(name);
if (p.dataType != array.getType()) {
NTA_THROW << "setParameterArray: parameter " << name
<< " is of type " << BasicType::getName(p.dataType)
<< " not " << BasicType::getName(array.getType());
}

ReadBuffer rb(wb.getData(), wb.getSize(), false);
setParameterFromBuffer(name, index, rb);
NTA_THROW << "setParameterArray: parameter '" << name
<< " is found in the spec for " << getType() <<" but is not implemented.";
}

void RegionImpl::setParameterString(const std::string &name, Int64 index,
const std::string &s) {
ReadBuffer rb(s.c_str(), s.size(), false);
setParameterFromBuffer(name, index, rb);
if (!region_->getSpec()->parameters.contains(name))
NTA_THROW << "setParameterString: parameter " << name
<< " does not exist in Spec";
ParameterSpec p = region_->getSpec()->parameters.getByName(name);
if (p.dataType != NTA_BasicType_Byte) {
NTA_THROW << "setParameterString: parameter " << name
<< " is of type " << BasicType::getName(p.dataType)
<< " not Byte (string)";
}
NTA_THROW << "setParameterString: parameter '" << name
<< " is found in the spec for " << getType() <<" but is not implemented.";
}

std::string RegionImpl::getParameterString(const std::string &name,
Int64 index) {
WriteBuffer wb;
getParameterFromBuffer(name, index, wb);
return std::string(wb.getData(), wb.getSize());
if (!region_->getSpec()->parameters.contains(name))
NTA_THROW << "getParameterString: parameter " << name
<< " does not exist in Spec";
ParameterSpec p = region_->getSpec()->parameters.getByName(name);
if (p.dataType != NTA_BasicType_Byte) {
NTA_THROW << "getParameterString: parameter " << name
<< " is of type " << BasicType::getName(p.dataType)
<< " not Byte (string)";
}
NTA_THROW << "getParameterString: parameter '" << name
<< " is found in the spec for " << getType() <<" but is not implemented.";
return "";
}

// Must be overridden by subclasses
Expand All @@ -230,17 +176,6 @@ bool RegionImpl::isParameterShared(const std::string &name) {
<< getType();
}

void RegionImpl::getParameterFromBuffer(const std::string &name, Int64 index,
IWriteBuffer &value) {
NTA_THROW
<< "RegionImpl::getParameterFromBuffer must be overridden by subclasses";
}

void RegionImpl::setParameterFromBuffer(const std::string &name, Int64 index,
IReadBuffer &value) {
NTA_THROW
<< "RegionImpl::setParameterFromBuffer must be overridden by subclasses";
}

size_t RegionImpl::getParameterArrayCount(const std::string &name,
Int64 index) {
Expand Down
Loading

0 comments on commit 9c9e130

Please sign in to comment.