Here are some resources on the TP (or ‘Union Pooler’ as they’re now calling it).
Pseudo Code: https://github.com/numenta/nupic.research/wiki/Union-Pooler-Psuedocode
Code Repo: https://github.com/numenta/nupic.research/tree/master/htmresearch/algorithms
Recent Discussion Post: New TP pseudocode?
As I understand it basically performs spatial pooling on the active and active predicted cells from TM instead of on an encoding vector as usual. So there’s another SP layer operating on the TM. In this layer each column has a ‘pooling activation’, which is incremented each time the column is activated by the SP and decremented otherwise. The columns with the highest pooling activations at each time step (as accumulated over the prior x-timesteps) at are activate in TP (/Union Pooler).
The purpose is to have set of active columns that learn to represent entire sequences from the TM, so one TP activation can remain for many timesteps of TM, the duration of the known sequence. Therefor a TP working well on a TM that has learned the sequences well will change its activations much more slowly than the TM.
I think this is basically right from a high level, but if someone would jump in and correct it please do!