Heiko Strathmann edited this page Mar 16, 2016 · 22 revisions
Clone this wiki locally

A Shogun cookbook

All GSoC 2016 students will work on this project jointly, next to their main project. Cookbook link. Latest cookbook


Difficulty & Requirements

Easy. You need to

  • Write English
  • Have some experience in web-design
  • Code in Python
  • Desirable: Sphinx, CMake
  • Desirable: Shogun experience


This project is about bringing a new Shogun cookook to life. This puts together a year of work on Shogun's meta language, and our cookbook for a sphinx-based API documentation system. The goal is to have API example that cover all target languages and all algorithms, in a form that looks like this.


As you see in the screenshot above, there will be code listings for all target languages (selected through a tab), and some text explaining the interface. The project is about transforming our Python API examples into Meta-language examples, which are automatically translated into executable code listings. In a second step, we can write some English text that explains the API in a minimal way, referencing the snippets in the code.

Waypoints and initial work

To start, you can:

  • Check the README of our cookbook and try to run it locally.
  • Add an example for an existing Python example

Once all Python examples are translated to meta examples, we aim to completely remove the old ones. In a next step, all generated code listings should be embedded into our CMake build.


We also aim to remove all static interface's examples and tests. Those have to migrated to the new system too.

Why this is cool

Shogun's main strength is the support of a large number of target languages. This project is a great showcase for this killer feature. You will touch many of Shogun's ML algorithms, learn about our build system, SWIG and how to manage multiple computer languages in a project. As most of the brain work is already done, this should be a fun opportunity for students to get to know other parts of Shogun during GSoC, and to create the community feeling of working on a project together.