Summer of Code - Getting Started: Difference between revisions

Jump to navigation Jump to search
m
→‎OCS: Add link to open bugs on Savannah.
m (→‎OCS: Add link to open bugs on Savannah.)
(6 intermediate revisions by 2 users not shown)
Line 98: Line 98:
! <br />!! !! !! !! !! !!
! <br />!! !! !! !! !! !!
|-
|-
| [[Summer_of_Code_Project_Ideas#ode15s_:_Matlab_Compatible_DAE_solver | ode15{i,s} : Matlab Compatible DAE solvers]] || Carlo de Falco || Francesco Faccio, Marco Caliari, Jacopo Corno, Sebastian Schöps || Numerical || No  || Medium || GSoC 2016
| [[Summer of Code - Getting Started#ode15.7Bi.2Cs.7D_:_Matlab_Compatible_DAE_solvers | ode15{i,s} : Matlab Compatible DAE solvers]] || Carlo de Falco || Francesco Faccio, Marco Caliari, Jacopo Corno, Sebastian Schöps || Numerical || No  || Medium || GSoC 2016
|-
|-
| [[Summer_of_Code_Project_Ideas#Improve_logm.2C_sqrtm.2C_funm | Improve logm, sqrtm, funm]] || ? || Marco Caliari, Mudit Sharma || Numerical || [https://github.com/RickOne16/matrix No]  || Hard || Independent devs 2016
| [[Summer of Code - Getting Started#Improve_logm.2C_sqrtm.2C_funm | Improve logm, sqrtm, funm]] || ? || Marco Caliari, Mudit Sharma || Numerical || [https://github.com/RickOne16/matrix No]  || Hard || Independent devs 2016
|-
|-
| [[Summer_of_Code_Project_Ideas#Improve_iterative_methods_for_sparse_linear_systems | Improve iterative methods for sparse linear systems]] || Marco Caliari || Carlo de Falco || Numerical || No  || Hard || SOCIS 2016
| [[Summer of Code - Getting Started#Improve_iterative_methods_for_sparse_linear_systems | Improve iterative methods for sparse linear systems]] || Marco Caliari || Carlo de Falco || Numerical || No  || Hard || SOCIS 2016
|-
|-
| [[Summer_of_Code_Project_Ideas#EPA_hydrology_software_suite | EPA hydrology software suite]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never
| [[Summer of Code - Getting Started#EPA_hydrology_software_suite | EPA hydrology software suite]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never
|-
|-
| [[Summer_of_Code_Project_Ideas#FullSWOF overland flow simulator | FullSWOF overland flow simulator]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never
| [[Summer of Code - Getting Started#FullSWOF overland flow simulator | FullSWOF overland flow simulator]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never
|-
|-
| [[Summer_of_Code_Project_Ideas#TISEAN_package | TISEAN: Nonlinear Time Series Analysis]] || [[User:KaKiLa|KaKiLa]] || ? || Octave Forge || [[TISEAN_package | No]] || Medium || GSoC 2015
| [[Summer of Code - Getting Started#TISEAN_package | TISEAN: Nonlinear Time Series Analysis]] || [[User:KaKiLa|KaKiLa]] || ? || Octave Forge || [[TISEAN_package | No]] || Medium || GSoC 2015
|-
|-
| [[Summer_of_Code_Project_Ideas#Octave_Package_management | Octave Package management]] || Sebastian Schöps || [[User:KaKiLa|KaKiLa]], Carnë Draug, Carlo de Falco || Infrastructure || Yes  || Medium || Never
| [[Summer of Code - Getting Started#Octave_Package_management | Octave Package management]] || Sebastian Schöps || [[User:KaKiLa|KaKiLa]], Carnë Draug, Carlo de Falco || Infrastructure || Yes  || Medium || Never
|-
|-
| [[Summer_of_Code_Project_Ideas#Symbolic_package | Symbolic package]] || Colin B. Macdonald || Mike Miller, Abhinav Tripathi || Octave Forge || [https://github.com/cbm755/octsympy Octsympy]  || Medium || GSoC 2016
| [[Summer of Code - Getting Started#Symbolic_package | Symbolic package]] || Colin B. Macdonald || Mike Miller, Abhinav Tripathi || Octave Forge || [https://github.com/cbm755/octsympy Octsympy]  || Medium || GSoC 2016
|-
|-
| [[Summer_of_Code_Project_Ideas#OCS | OCS package]] || Sebastian Schöps || Sebastian Schöps || Octave Forge, Numerical || Yes || Easy || Never
| [[Summer of Code - Getting Started#OCS | OCS package]] || Sebastian Schöps || Sebastian Schöps || Octave Forge, Numerical || Yes || Easy || Never
|-
|-
| [[Summer_of_Code_Project_Ideas#Using_Python_within_Octave | Pytave project]] || Mike Miller || Colin B. Macdonald, Abhinav Tripathi || Infrastructure || No  || Medium || some in GSoC 2016
| [[Summer of Code - Getting Started#Using_Python_within_Octave | Pythonic package]] || Mike Miller || Colin B. Macdonald, Abhinav Tripathi || Infrastructure || No  || Medium || some in GSoC 2016
|-
|-
| [[Summer_of_Code_Project_Ideas#JSON_encoding.2Fdecoding | JSON encoding/decoding]] || [[User:Siko1056|Kai T. Ohlhus]] || ? || Infrastructure || Yes  || Medium || Never
| [[Summer of Code - Getting Started#JSON_encoding.2Fdecoding | JSON encoding/decoding]] || [[User:Siko1056|Kai T. Ohlhus]] || ? || Infrastructure || Yes  || Medium || Never
|-
|-
| [[Summer_of_Code_Project_Ideas#Jupyter_Integration | Jupyter integration]] || Mike Miller || Colin B. Macdonald, [[User:Siko1056|Kai T. Ohlhus]] || Infrastructure ||  Yes || Medium || Never
| [[Summer of Code - Getting Started#Jupyter_Notebook_Integration | Jupyter Notebook Integration]] || Mike Miller || Colin B. Macdonald, [[User:Siko1056|Kai T. Ohlhus]] || Infrastructure ||  Yes || Medium || Never
|-
|-
| [[Summer_of_Code_Project_Ideas#Chebfun_in_Octave | Chebfun in Octave]] || Colin B. Macdonald || [[User:KaKiLa|KaKiLa]] || Infrastructure, Numerical || Yes  || Hard || Never
| [[Summer of Code - Getting Started#Chebfun_in_Octave | Chebfun in Octave]] || Colin B. Macdonald || [[User:KaKiLa|KaKiLa]] || Infrastructure, Numerical || Yes  || Hard || Never
|-
|-
| [[Summer_of_Code_Project_Ideas#PolarAxes and Plotting Improvements | PolarAxes and Plotting Improvements ]] || ? || Rik || Graphics || Yes  || Medium || Never
| [[Summer of Code - Getting Started#PolarAxes and Plotting Improvements | PolarAxes and Plotting Improvements ]] || ? || Rik || Graphics || Yes  || Medium || Never
|}
|}


Line 282: Line 282:
=== Symbolic package ===
=== Symbolic package ===


Octave's [https://github.com/cbm755/octsympy Symbolic package] handles symbolic computing and other CAS tools.  The main component of Symbolic is a pure m-file class "@sym" which uses the Python package [https://www.sympy.org SymPy] to do (most of) the actual computations.  The package aims to expose the full functionality of SymPy while also providing a high-level of compatibility with the Matlab Symbolic Math Toolbox.  The Symbolic package requires communication between Octave and Python.  Recently, a GSoC2016 project successfully re-implemented this communication using the new [https://bitbucket.org/mtmiller/pytave Pytave tool].
Octave's [https://github.com/cbm755/octsympy Symbolic package] handles symbolic computing and other CAS tools.  The main component of Symbolic is a pure m-file class "@sym" which uses the Python package [https://www.sympy.org SymPy] to do (most of) the actual computations.  The package aims to expose the full functionality of SymPy while also providing a high-level of compatibility with the Matlab Symbolic Math Toolbox.  The Symbolic package requires communication between Octave and Python.  Recently, a GSoC2016 project successfully re-implemented this communication using the new [[Pythonic|Pythonic package]].


This project proposes to go further: instead of using Pytave only for the communication layer, we'll use it throughout the Symbolic project.  For example, we might make "@sym" a subclass of "@pyobject".  We also could stop using the "python_cmd" interface and use Pytave directly from methods.  The main goal was already mentioned: to expose the *full functionality* of SymPy.  For example, we would allow OO-style method calls such as "f.diff(x)" instead of "diff(f, x)".
This project proposes to go further: instead of using Pythonic only for the communication layer, we'll use it throughout the Symbolic project.  For example, we might make "@sym" a subclass of "@pyobject".  We also could stop using the "python_cmd" interface and use Pythonic directly from methods.  The main goal was already mentioned: to expose the *full functionality* of SymPy.  For example, we would allow OO-style method calls such as "f.diff(x)" instead of "diff(f, x)".


* '''Required skills'''
* '''Required skills'''
: OO-programming with m-files, Python, and possibly C/C++ for improving Pytave (if needed).
: OO-programming with m-files, Python, and possibly C/C++ for improving Pythonic (if needed).
* '''Difficulty'''
* '''Difficulty'''
: easy/medium
: easy/medium
Line 295: Line 295:
=== OCS ===
=== OCS ===


[[Ocs package | OCS]] is a circuit simulator for Octave. The objective of this project is to update the code to use modern features of Octave (e.g. classdef), fix open bugs, increase compatibility with SPICE and improve compatibility with other Octave packages (odepkg, control etc).
[[Ocs package | OCS]] is a circuit simulator for Octave. The objective of this project is to update the code to use modern features of Octave (e.g. classdef), [https://savannah.gnu.org/search/?Search=Search&words=%28ocs%29&type_of_search=bugs&only_group_id=1925&exact=1&max_rows=25#options fix open bugs], increase compatibility with SPICE and improve compatibility with other Octave packages (odepkg, control etc).
   
   
* [http://octave.sourceforge.net/ocs/overview.html Package help at source forge.]  
* [http://octave.sourceforge.net/ocs/overview.html Package help at source forge.]  
Line 310: Line 310:
=== JSON encoding/decoding ===
=== JSON encoding/decoding ===


[https://en.wikipedia.org/wiki/JSON JavaScript Object Notation], in short JSON, is a very common human readable and structured data format.  Unfortunately, GNU Octave still lacks of builtin support of that data format.  Having JSON support, Octave can improve for example it's web service functions, which often exchange JSON data these days.  Another interesting applicatoin is described in another Octave GSoC project, see [[Summer_of_Code_Project_Ideas#Jupyter_Integration | Jupyter integration]].
[https://en.wikipedia.org/wiki/JSON JavaScript Object Notation], in short JSON, is a very common human readable and structured data format.  Unfortunately, GNU Octave still lacks of builtin support of that data format.  Having JSON support, Octave can improve for example it's web service functions, which often exchange JSON data these days.  Another interesting applicatoin is described in another Octave GSoC project, see [[Summer of Code - Getting Started#Jupyter_Integration | Jupyter integration]].


In bug {{bug|53100}} a vivid discussion about proper JSON support took place.  As JSON is a highly demanded feature for Octave, there are already several attempts to fill the gap:
In bug {{bug|53100}} a vivid discussion about proper JSON support took place.  As JSON is a highly demanded feature for Octave, there are already several attempts to fill the gap:


* [https://github.com/fangq/jsonlab jsonlab] (M-file implementation, probably slow for large JSON files)
* [https://github.com/fangq/jsonlab jsonlab] (M-file implementation, probably slow for large JSON files)
* [https://www.artefact.tk/software/matlab/jsonio/ JSONio] (C MEX wrapper around [https://github.com/zserge/jsmn jsmn])
* [https://github.com/gllmflndn/JSONio JSONio] (C MEX wrapper around [https://github.com/zserge/jsmn jsmn])
* [https://github.com/Andy1978/octave-rapidjson octave-rapidjson] (C++ Octave wrapper around [https://rapidjson.org/ rapidjson])
* [https://github.com/Andy1978/octave-rapidjson octave-rapidjson] (C++ Octave wrapper around [https://rapidjson.org/ RapidJSON])
* [https://github.com/apjanke/octave-jsonstuff octave-jsonstuff] (C++ Octave wrapper around [https://github.com/open-source-parsers/jsoncpp jsoncpp])
* [https://github.com/apjanke/octave-jsonstuff octave-jsonstuff] (C++ Octave wrapper around [https://rapidjson.org/ RapidJSON])


For different reasons, none of them can be directly merged into Octave core yet.  Thus there is still lots of work to do.  The goal of this project is to evaluate (and to cherry pick from) the implementations above, to create Matlab compatible [https://www.mathworks.com/help/matlab/ref/jsonencode.html jsonencode] and [https://www.mathworks.com/help/matlab/ref/jsondecode.html jsondecode] functions.  This involves proper documentation of the work and unit tests to ensure the correctness of the implementation.
For different reasons, none of them can be directly merged into Octave core yet.  Thus there is still lots of work to do.  The goal of this project is to evaluate (and to cherry pick from) the implementations above, to create Matlab compatible [https://www.mathworks.com/help/matlab/ref/jsonencode.html jsonencode] and [https://www.mathworks.com/help/matlab/ref/jsondecode.html jsondecode] functions.  This involves proper documentation of the work and unit tests to ensure the correctness of the implementation.
Line 327: Line 327:
* '''Mentor'''
* '''Mentor'''
: [[User:Siko1056|Kai T. Ohlhus]]
: [[User:Siko1056|Kai T. Ohlhus]]


=== Jupyter Notebook Integration ===
=== Jupyter Notebook Integration ===
Line 333: Line 332:
[http://jupyter.org Jupyter Notebook] is a web-based worksheet interface for computing.  There is a [https://github.com/Calysto/octave_kernel Octave kernel for Jupyter].  This project seeks in first place to improve that kernel to make Octave a first-class experience within the Jupyter Notebook.
[http://jupyter.org Jupyter Notebook] is a web-based worksheet interface for computing.  There is a [https://github.com/Calysto/octave_kernel Octave kernel for Jupyter].  This project seeks in first place to improve that kernel to make Octave a first-class experience within the Jupyter Notebook.


In general the [https://nbformat.readthedocs.io/en/latest/ Jupyter Notebook Format] is a plain JSON document.  In combination with another Octave GSoC project (see [[Summer_of_Code_Project_Ideas#JSON_encoding.2Fdecoding | JSON encoding/decoding]]), a second valuable outcome was that Octave can run (and fill) those Jupyter Notebooks on it's own.  This would enable Jupyter Notebook users to evaluate long running Octave Notebooks on a computing server without permanent browser connection, which is [https://github.com/jupyter/notebook/issues/1647 still a pending issue].
In general the [https://nbformat.readthedocs.io/en/latest/ Jupyter Notebook Format] is a plain JSON document.  In combination with another Octave GSoC project (see [[Summer of Code - Getting Started#JSON_encoding.2Fdecoding | JSON encoding/decoding]]), a second valuable outcome was that Octave can run (and fill) those Jupyter Notebooks on it's own.  This would enable Jupyter Notebook users to evaluate long running Octave Notebooks on a computing server without permanent browser connection, which is [https://github.com/jupyter/notebook/issues/1647 still a pending issue].


* '''Minimum requirements'''
* '''Minimum requirements'''
Line 344: Line 343:
=== Using Python within Octave ===
=== Using Python within Octave ===


[https://bitbucket.org/mtmiller/pytave Pytave] allows one to call Python functions and interact with Python objects from within Octave .m file code and from the Octave command line interface.  Ideally, Pytave will not be a separate project, but rather a core feature of Octave.  This project aims to improve Pytave with the goal of merging the code into the core Octave code base.
[[Pythonic]] allows one to call Python functions and interact with Python objects from within Octave .m file code and from the Octave command line interface.  Pythonic may eventually not be a separate package, but rather a core feature of Octave.  This project aims to improve Pythonic with the goal of making the package more stable, maintainable, and full-featured.


Based on a previous summer project related to Pytave, this work will consist of fast-paced collaborative software development based on tackling the [https://bitbucket.org/mtmiller/pytave/issues?status=new&status=open pytave issue list].  You would also be expected to participate in software design decisions and discussion, as well as improve documentation, doctests and unit tests.  As an example of the sorts of decision decisions being made, note that Octave indexes from 1 whereas Python typically indexes from 0; in which cases is it appropriate to make this transparent to the user?
Based on a previous summer project related to Pythonic, this work will consist of fast-paced collaborative software development based on tackling the [https://gitlab.com/mtmiller/octave-pythonic/issues Pythonic issue list].  You would also be expected to participate in software design decisions and discussion, as well as improve documentation, doctests, and unit tests.  As an example of the sorts of decisions being made, note that Octave indexes from 1 whereas Python typically indexes from 0; in which cases is it appropriate to make this transparent to the user?


* '''Mentors'''
* '''Mentors'''

Navigation menu