-
Notifications
You must be signed in to change notification settings - Fork 5
Home
Josh Blum edited this page Sep 8, 2017
·
14 revisions
The Pothos Python toolkit is a component of the Pothos data-flow framework. This toolkit brings Python language support to the Pothos ecosystem, with support for:
- Calling into Python from the Pothos Proxy API
- Calling into the Pothos Proxy API from Python
- Pythonic wrappers for making Blocks in Python
- Python development environment (version 2.7 and up)
- Numpy to support array math in custom Blocks
The Python API for creating Blocks is almost identical to the C++ API.
- For more details about a particular API feature, visit the Blocks coding guide.
- For Python examples of the Block API, see this project's Test blocks module.
- The test blocks demonstrate stream buffers, signals, slots, labels, and messages.
The following example shows how to make a simple project (3 files) that builds and installs a block written in Python. The block will be accessible through the Pothos block registry and available in the graphical design tool.
A simple adder block (MyAdder.py):
import Pothos """/* |PothosDoc My Adder Add two input streams, produce an output stream. |category /Math |param dtype[Data Type] The input and output data type. |default "float32" |widget DTypeChooser(float=1,cfloat=1,int=1,cint=1,dim=1) |preview disable |factory /my_package/adder(dtype) */""" class Adder(Pothos.Block): def __init__(self, dtype): Pothos.Block.__init__(self) self.setupInput(0, dtype) self.setupInput(1, dtype) self.setupOutput(0, dtype) def work(self): #how many elements to process? n = self.workInfo().minElements #grab the input and output ports inPort0 = self.input(0) inPort1 = self.input(1) outPort = self.output(0) #grab the input and output buffers in0 = inPort0.buffer() in1 = inPort1.buffer() out = outPort.buffer() #perform arithmetic out[:n] = in0[:n] + in1[:n] #produce and consume elements inPort0.consume(n) inPort1.consume(n) outPort.produce(n)
Make this directory into a module (__init__.py):
from . MyAdder import Adder
The build script for the block (CMakeLists.txt):
######################################################################## # Project setup ######################################################################## cmake_minimum_required(VERSION 2.8.9) project(MyBlocks) enable_language(CXX) find_package(Pothos CONFIG REQUIRED) include(PothosPythonUtil) ######################################################################## ## Build and install ######################################################################## POTHOS_PYTHON_UTIL( TARGET MyAdderBlock SOURCES __init__.py MyAdder.py FACTORIES "/my_package/adder:Adder" DESTINATION MyPackage ENABLE_DOCS )
- Finally, follow the regular build and install instructions from the Coding Guide to make this new block available to the framework: https://github.com/pothosware/PothosCore/wiki/BlocksCodingGuide#building-and-installing
- Project overview
- Getting started
- FAQ
- Video screencasts
- Demo applications
- Features summary
- Versioned releases
- Miscellaneous links
- Help and support
- Pothos users' group
- Twitter @pothosware
- IRC chat #pothos
- Slack workspace
- Contract services
- Developer blog
- Contributing
- Donate
- Build guide
- GUI Tutorial
- SDR Tutorial
- Filter Tutorial
- Doxygen docs
- PothosUtil Guide
- Blocks coding guide
- Scheduler explained
- Remote control guide
- Extending serialization