# Survey: Features & API-Compatibility

**URL:** <https://discourse.numenta.org/t/survey-features-api-compatibility/5344>\
**Category:** NuPIC Community Fork\
**Tags:** question, community\
**Created:** [January 30, 2019, 3:31pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344 "2019-01-30T15:31:20Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![dmac](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/dmac/32/5842_2.png) [@dmac](https://discourse.numenta.org/u/dmac)\
**Post date:** [January 30, 2019, 3:31pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/1 "2019-01-30T15:31:20Z")

</div>

This survey is about the htm-community fork of Numenta’s Nupic code repository. The purpose of this survey is to determine the overall goals and direction for this project. We are trying to make plans for what to do with this code and we want to hear from all of you.

I encourage all prospective users to respond. We will leave this survey open indefinitely. Comments & feedback are welcome.

### Desired Features

We have an implementation of all of these things which originated in the Numenta repository. Currently none of these things fully work, some are outright broken. This is a work in progress, and we don’t know how long this will take. Please check as many of the features as you’d like:

_Poll ([view on site](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/1))_

### API-Compatibility:

This project started as a clone of Nupic and so it inherited Nupic’s API, which is documented at: [http://nupic.docs.numenta.org/stable/api/index.html](http://nupic.docs.numenta.org/stable/api/index.html) . Please check ONE of the following:

_Poll ([view on site](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/1))_

### Code Organization

Currently the code base is split into two repositories, and there has been some discussion around merging them into one repository. Please check ONE of the following:

_Poll ([view on site](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/1))_

Thank you for your response.

---

<div class="post-metadata">

**Author:** ![rhyolight](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/rhyolight/32/3922_2.png) [@rhyolight](https://discourse.numenta.org/u/rhyolight)\
**Post date:** [January 30, 2019, 3:45pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/2 "2019-01-30T15:45:52Z")

</div>



---

<div class="post-metadata">

**Author:** ![rhyolight](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/rhyolight/32/3922_2.png) [@rhyolight](https://discourse.numenta.org/u/rhyolight)\
**Post date:** [January 30, 2019, 3:49pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/3 "2019-01-30T15:49:53Z")

</div>

Honestly I am a potential user of this library so I voted too!

I wanted to explain some of my answers. I don’t want the OPF, and I don’t care of the python version of the algorithms. I just want a fast C++ core with a simple Network API that allows all the flexibility we have today with the NuPIC Network API. I would love to see python bindings for the Network API so we could easily build networks in Python.

---

<div class="post-metadata">

**Author:** ![breznak](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/breznak/32/1935_2.png) [@breznak](https://discourse.numenta.org/u/breznak)\
**Post date:** [January 30, 2019, 4:41pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/4 "2019-01-30T16:41:06Z")

</div>

> [@rhyolight](#):
>
> . I just want a fast C++ core with a simple Network API that allows all the flexibility we have today with the NuPIC Network API. I would love to see python bindings for the Network API so we could easily build networks in Python.

Thanks Matt!  
I like what you suggest, keeping API and providing bindings ONLY at the level of NetworkAPI would give us flexibility in development and make a stable base where HTM community can unite.

Would be really great if you have some time to poke around with the repo, for your cpp requirements the repo should already suffice.

---

<div class="post-metadata">

**Author:** ![David\_Keeney](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/david_keeney/32/1616_2.png) [@David\_Keeney](https://discourse.numenta.org/u/David_Keeney)\
**Post date:** [January 30, 2019, 4:52pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/5 "2019-01-30T16:52:48Z")

</div>

> I don’t care of the python version of the algorithms

Cool, that would make our job a LOT easier. We just keep the .py bindings for NetworkAPI and remove the algorithm bindings.

We would however need to port RegionSP and RegionTM to C++ in order for that to work since currently the SP and TM algorithms in C++ can only be accessed by NetworkAPI by calling back into python. I have most of that work done already we just need to drop it in and adjust to recent changes.

Do most other people feel the same way?

---

<div class="post-metadata">

**Author:** ![Jose\_Cueto](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/jose_cueto/32/4052_2.png) [@Jose\_Cueto](https://discourse.numenta.org/u/Jose_Cueto)\
**Post date:** [January 31, 2019, 12:39am UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/6 "2019-01-31T00:39:53Z")

</div>

I’m only a moderate user of nupic but I voted anyways. I’m a python and a c/c++ developer and I’m alright with “production-ready” c++ algorithms core code. Even without python versions of these algorithms (no c++ just py bindings) I’m ok with it as long as we don’t lose the ease of introspecting python objects in python code. This is very important for experimentation. For example, I’d like to easily introspect synapse values and work on them 90% of the time for experimentation purposes. Today this is possible in nupic but it is not straightforward and intuitive to do in python at least in my view.

---

<div class="post-metadata">

**Author:** ![marty1885](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/marty1885/32/1891_2.png) [@marty1885](https://discourse.numenta.org/u/marty1885)\
**Post date:** [February 1, 2019, 10:12am UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/7 "2019-02-01T10:12:23Z")

</div>

Some changes will make the lives of heavy C++ users a lot easier.

1. Build as shared library. Linking against nupic takes forever and uses lots of RAM.
2. Put building tests and examples into an option (Reducing build time)
3. install to system directory by default.

I don’t know why the decisions are made in NuPIC the other way. But they get into the way sometime.

---

<div class="post-metadata">

**Author:** ![breznak](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/breznak/32/1935_2.png) [@breznak](https://discourse.numenta.org/u/breznak)\
**Post date:** [February 1, 2019, 11:59am UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/8 "2019-02-01T11:59:36Z")

</div>

> [@marty1885](#):
>
> Some changes will make the lives of heavy C++ users a lot easier.

@marty1885 Thanks for the feedback! Please do open these as separate issues in our bugtracker, we’ll look into it together.  
1 - I think we tried, considered shared lib (not sure if/why it ended up as static)  
2 - easily doable  
3 - that requires admin access, and is as easily doable now

…but let’s keep the discussion of the details to the bugtracker, not in this thread.

---

<div class="post-metadata">

**Author:** ![breznak](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/breznak/32/1935_2.png) [@breznak](https://discourse.numenta.org/u/breznak)\
**Post date:** [February 1, 2019, 12:01pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/9 "2019-02-01T12:01:54Z")

</div>

Slightly OT, @rhyolight do I remember correctly that some users may consume this forum as a weekly digest by mail? When does the mail arrive (Sundays)?

---

<div class="post-metadata">

**Author:** ![rhyolight](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/rhyolight/32/3922_2.png) [@rhyolight](https://discourse.numenta.org/u/rhyolight)\
**Post date:** [February 1, 2019, 12:42pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/10 "2019-02-01T12:42:55Z")

</div>

Everyone can set their email settings differently. Many don’t get emails, some get daily emails, some get a digest. I can’t really control it much.

---

<div class="post-metadata">

**Author:** ![breznak](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/breznak/32/1935_2.png) [@breznak](https://discourse.numenta.org/u/breznak)\
**Post date:** [February 1, 2019, 1:50pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/11 "2019-02-01T13:50:35Z")

</div>

> [@breznak](#):
>
> keeping API and providing bindings ONLY at the level of NetworkAPI would give us flexibility in development and make a stable base where HTM community can unite.

I’d like to ask for some experience the biggest, non-original language fork: numenta/htm.java  
(OT: are you guys under numenta, a community, or a separate company?)

What level of API compatibility do you guys keep?

- all public method signatures (from nupic.core / nupic (py) ?)
- at NetworkAPI level? (did you have to make changes, do you have them documented?)
- else?

I guess one of the benefits of Java for you is the platform independence, would a cpp backend be useful for you for speedups in some scenarios?

Some other advice you can give us on how to balance new developement, and keep compatibility with APIs and making code usable for the community?

@cogmission Another David to the party! 😉

---

<div class="post-metadata">

**Author:** ![dmac](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/dmac/32/5842_2.png) [@dmac](https://discourse.numenta.org/u/dmac)\
**Post date:** [February 1, 2019, 8:26pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/12 "2019-02-01T20:26:36Z")

</div>

> [@David\_Keeney](#):
>
> Cool, that would make our job a LOT easier. We just keep the .py bindings for NetworkAPI and remove the algorithm bindings.

I think that @ryholight is referring to the pure python implementations, not the C++/python bindings? Removing the pure python algorithms would also make our job a alot easier too.

---

<div class="post-metadata">

**Author:** ![rhyolight](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/rhyolight/32/3922_2.png) [@rhyolight](https://discourse.numenta.org/u/rhyolight)\
**Post date:** [February 1, 2019, 10:39pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/13 "2019-02-01T22:39:38Z")

</div>

I just want python bindings to the Network API. Everything can be implemented in C++ AFAIC.

---

<div class="post-metadata">

**Author:** ![dmac](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/dmac/32/5842_2.png) [@dmac](https://discourse.numenta.org/u/dmac)\
**Post date:** [February 3, 2019, 5:03pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/14 "2019-02-03T17:03:16Z")

</div>

> [@Jose\_Cueto](#):
>
> the ease of introspecting python objects in python code. This is very important for experimentation. For example, I’d like to easily introspect synapse values and work on them 90% of the time for experimentation purposes. Today this is possible in nupic but it is not straightforward and intuitive to do in python at least in my view.

I agree. For example, I found the following incomprehensible line in the ColumnPooler code (line 635). `permanences` is a sparse matrix.

```auto
permanences.setRandomZerosOnOuter(
    activeCells, growthCandidateInput, maxNewByCell, initialPermanence, rng)

```

One of the technical goals for this project is to replace all of the matrices. We’re replacing them with the `Connections` class, which is a C++ module which deals with synapses and dendritic segments, and does them well.

- It has a well designed API. It has data-structures for cells, segments, synapses, and methods to control them all.
- It can apply inputs to the synapses and calculate the resulting overlap at each segment.
- It can do Hebbian learning.
- It is currently used for the C++ Spatial Pooler & C++ Temporal Memory
- It’s faster than the current sparse matrix implementation.

I’d like to eventually write python bindings for the connections class. However, this is a low priority. Do you think that bindings for the Connections class should be a high priority item?

---

<div class="post-metadata">

**Author:** ![Jose\_Cueto](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/jose_cueto/32/4052_2.png) [@Jose\_Cueto](https://discourse.numenta.org/u/Jose_Cueto)\
**Post date:** [February 4, 2019, 12:23pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/15 "2019-02-04T12:23:22Z")

</div>

> [@dmac](#):
>
> Do you think that bindings for the Connections class should be a high priority item?

Connections class would be very useful including its Python bindings, however I’m not sure if it should be a high priority item.

---

<div class="post-metadata">

**Author:** ![dmac](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/dmac/32/5842_2.png) [@dmac](https://discourse.numenta.org/u/dmac)\
**Post date:** [February 5, 2019, 1:29pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/16 "2019-02-05T13:29:21Z")

</div>

Thank you everyone who has voted or left a comment. We will collect the results of this survey and begin planning no sooner than Friday February 8th.

This survey will remain open for latecomers who wish to be heard. If you vote after the 8th please add a comment as well so that we are notified of your vote.

---

<div class="post-metadata">

**Author:** ![Graham\_Taylor](https://avatars.discourse-cdn.com/v4/letter/g/f4b2a3/32.png) [@Graham\_Taylor](https://discourse.numenta.org/u/Graham_Taylor)\
**Post date:** [February 7, 2019, 8:35pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/17 "2019-02-07T20:35:34Z")

</div>

I see there is a separate CUDA implementation of the SP and TM on the community Github. Has there been any thought of combining similar functionality into nupic.cpp baseline?

---

<div class="post-metadata">

**Author:** ![breznak](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/breznak/32/1935_2.png) [@breznak](https://discourse.numenta.org/u/breznak)\
**Post date:** [February 8, 2019, 4:20pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/18 "2019-02-08T16:20:19Z")

</div>

I’m aware of SP CUDA: [https://github.com/htm-community/htm.cuda](https://github.com/htm-community/htm.cuda)

And yes, we would be interested to include CUDA SP as bindings into the nupic.cpp

> <https://github.com/htm-community/nupic.cpp/issues/50>

  
If you have some experience with CUDA, please join the effort

---

<div class="post-metadata">

**Author:** ![breznak](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/breznak/32/1935_2.png) [@breznak](https://discourse.numenta.org/u/breznak)\
**Post date:** [February 9, 2019, 9:02pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/19 "2019-02-09T21:02:20Z")

</div>

@rhyolight speaking about forks, how’s the status of the community around Numenta’s nupic.core / nupic?  
I remember it was very lively, has everybody moved to separate projects? I see buzz on the forums here, but not in a centric repo or so…

---

<div class="post-metadata">

**Author:** ![rhyolight](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/rhyolight/32/3922_2.png) [@rhyolight](https://discourse.numenta.org/u/rhyolight)\
**Post date:** [February 10, 2019, 2:42pm UTC](https://discourse.numenta.org/t/survey-features-api-compatibility/5344/20 "2019-02-10T14:42:26Z")

</div>

I’m sorry, but I don’t quite understand what you are asking me, can you restate the question?

[Next page](https://discourse.numenta.org/t/survey-features-api-compatibility/5344.md?page=2)
