Summer of Code - Getting Started: Difference between revisions

Jump to navigation Jump to search
mark projects as needing review and mentor
(removing the Octave Forge section. Instead, split them across theme (Image analysis, numerial, etc..))
(mark projects as needing review and mentor)
Line 84: Line 84:


=== General purpose Finite Element library ===
=== General purpose Finite Element library ===
{{Warning|requires review and mentor}}


Octave-Forge already has a set of packages for discretizing Partial Differential operators by Finite Elements and/or Finite Volumes,
Octave-Forge already has a set of packages for discretizing Partial Differential operators by Finite Elements and/or Finite Volumes,
Line 98: Line 100:


=== Improve logm, sqrtm, funm ===
=== Improve logm, sqrtm, funm ===
{{Warning|requires review and mentor}}


The goal here is to implement some missing Matlab functions related to matrix functions like the [http://en.wikipedia.org/wiki/Matrix_exponential matrix exponential]. There is [http://octave.1599824.n4.nabble.com/matrix-functions-td3137935.html a general discussion] of the problem.
The goal here is to implement some missing Matlab functions related to matrix functions like the [http://en.wikipedia.org/wiki/Matrix_exponential matrix exponential]. There is [http://octave.1599824.n4.nabble.com/matrix-functions-td3137935.html a general discussion] of the problem.


=== Generalised eigenvalue problem ===
=== Generalised eigenvalue problem ===
{{Warning|requires review and mentor}}


[http://www.mathworks.com/help/techdoc/ref/eig.html Certain calling forms] of the <tt>eig</tt> function are missing. The problem is to understand what those missing forms are and implement them.
[http://www.mathworks.com/help/techdoc/ref/eig.html Certain calling forms] of the <tt>eig</tt> function are missing. The problem is to understand what those missing forms are and implement them.


=== Various sparse matrix improvements ===
=== Various sparse matrix improvements ===
{{Warning|requires review and mentor}}


The implementation of sparse matrices in Octave needs several improvements. Any of [[Projects#Sparse Matrices|these]] would be good. The paper by [http://arxiv.org/abs/cs.MS/0604006 Bateman & Adler] is good reading for understanding the sparse matrix implementation.
The implementation of sparse matrices in Octave needs several improvements. Any of [[Projects#Sparse Matrices|these]] would be good. The paper by [http://arxiv.org/abs/cs.MS/0604006 Bateman & Adler] is good reading for understanding the sparse matrix implementation.


=== Implement solver for initial-boundary value problems for parabolic-elliptic PDEs in 1D ===
=== Implement solver for initial-boundary value problems for parabolic-elliptic PDEs in 1D ===
{{Warning|requires review and mentor}}


The project will deliver a solver for initial-boundary value problems for parabolic-elliptic PDEs in 1D similar to Matlab's function <tt>pdepe</tt>. A good starting point is the [http://en.wikipedia.org/wiki/Method_of_lines method of lines] for which you can find more details [http://en.wikibooks.org/wiki/Partial_Differential_Equations/Method_of_Lines here] and [http://www.scholarpedia.org/article/Method_of_lines here], whereas an example implementation can be found [http://www.scholarpedia.org/article/Method_of_Lines/Example_Implementation here]. In addition, [http://www.pdecomp.net/ this page] provides some useful material.
The project will deliver a solver for initial-boundary value problems for parabolic-elliptic PDEs in 1D similar to Matlab's function <tt>pdepe</tt>. A good starting point is the [http://en.wikipedia.org/wiki/Method_of_lines method of lines] for which you can find more details [http://en.wikibooks.org/wiki/Partial_Differential_Equations/Method_of_Lines here] and [http://www.scholarpedia.org/article/Method_of_lines here], whereas an example implementation can be found [http://www.scholarpedia.org/article/Method_of_Lines/Example_Implementation here]. In addition, [http://www.pdecomp.net/ this page] provides some useful material.


=== Implement solver for 1D nonlinear boundary value problems ===
=== Implement solver for 1D nonlinear boundary value problems ===
{{Warning|requires review and mentor}}


The project will complete the implementation of the bvp4c solver that is already available in an initial version in the odepkg package
The project will complete the implementation of the bvp4c solver that is already available in an initial version in the odepkg package
Line 120: Line 132:


=== Geometric integrators for Hamiltonian Systems ===
=== Geometric integrators for Hamiltonian Systems ===
{{Warning|requires review and mentor}}


[http://openlibrary.org/books/OL9056139M/Geometric_Numerical_Integration Geometric (AKA Symplectic) integrators] are useful for  
[http://openlibrary.org/books/OL9056139M/Geometric_Numerical_Integration Geometric (AKA Symplectic) integrators] are useful for  
Line 144: Line 158:


=== Matlab-compatible ODE solvers in core-Octave ===
=== Matlab-compatible ODE solvers in core-Octave ===
{{Warning|requires review and mentor}}


* Adapt "odeset" and "odeget" from the odepkg package so that the list of supported options is more Matlab-compatible, in the sense that all option names that are supported by Matlab should be available. On the other hand, Matlab returns an error if an option which is not in the list of known options is passed to "odeset", but we would rather make this a warning in order to allow for special extensions, for example for symplectic integrators.
* Adapt "odeset" and "odeget" from the odepkg package so that the list of supported options is more Matlab-compatible, in the sense that all option names that are supported by Matlab should be available. On the other hand, Matlab returns an error if an option which is not in the list of known options is passed to "odeset", but we would rather make this a warning in order to allow for special extensions, for example for symplectic integrators.
Line 153: Line 169:


=== Nonlinear and constrained least squares ===
=== Nonlinear and constrained least squares ===
{{Warning|requires review and mentor}}


The [[Optimization package]] is missing the functions <tt>lsqcurvefit</tt>, <tt>lsqlin</tt>, <tt>lsqnonlin</tt> to conveniently solve least-squares problems that are nonlinear and/or constrained. There are free implementations of the needed algorithms in other languages, such as [http://www.netlib.org/minpack/ minpack] in Fortran and [http://users.ics.forth.gr/~lourakis/levmar/ levmar] in C. This project would link to or port these implementations and develop Matlab-compatible Octave wrappers.
The [[Optimization package]] is missing the functions <tt>lsqcurvefit</tt>, <tt>lsqlin</tt>, <tt>lsqnonlin</tt> to conveniently solve least-squares problems that are nonlinear and/or constrained. There are free implementations of the needed algorithms in other languages, such as [http://www.netlib.org/minpack/ minpack] in Fortran and [http://users.ics.forth.gr/~lourakis/levmar/ levmar] in C. This project would link to or port these implementations and develop Matlab-compatible Octave wrappers.
Line 159: Line 177:


=== TISEAN package ===
=== TISEAN package ===
{{Warning|requires review and mentor}}
[http://www.mpipks-dresden.mpg.de/~tisean/Tisean_3.0.1/index.html TISEAN] is a suite of code for nonlinear time series analysis. It is old but there are many algorithms there that haven't been re-implemented as libre software. The objective is to integrate TISEAN as a
[http://www.mpipks-dresden.mpg.de/~tisean/Tisean_3.0.1/index.html TISEAN] is a suite of code for nonlinear time series analysis. It is old but there are many algorithms there that haven't been re-implemented as libre software. The objective is to integrate TISEAN as a
octave package as it was done for the Control package.
octave package as it was done for the Control package.
Line 169: Line 190:


=== High Precision Arithmetic Computation ===
=== High Precision Arithmetic Computation ===
{{Warning|requires review and mentor}}
The Linear Algebra Fortran libraries used by Octave make use of of single (32 bits) and double (64 bits) precision floating point numbers. Many operations are stopped when matrices condition number goes below 1e-16: such matrices are considered as ill-conditioned. There are cases where this is not enough, for instance simulations implying chemical concentrations covering the range 10^4 up to 10^34. There are a number of ways to increase the numerical resolution, like f.i. make use of 128 bits quadruple precision numbers available in GFortran. A simpler option is to build an interface over Gnu MPL arbitrary precision library, which is used internally by gcc and should be available on any platform where gcc runs. Such approach has been made available for MatLab under the name mptoolbox and is licensed under a BSD license. The author kindly provided a copy of the latest version and agreed to have it ported under Octave and re-distributed under GPL v3.0
The Linear Algebra Fortran libraries used by Octave make use of of single (32 bits) and double (64 bits) precision floating point numbers. Many operations are stopped when matrices condition number goes below 1e-16: such matrices are considered as ill-conditioned. There are cases where this is not enough, for instance simulations implying chemical concentrations covering the range 10^4 up to 10^34. There are a number of ways to increase the numerical resolution, like f.i. make use of 128 bits quadruple precision numbers available in GFortran. A simpler option is to build an interface over Gnu MPL arbitrary precision library, which is used internally by gcc and should be available on any platform where gcc runs. Such approach has been made available for MatLab under the name mptoolbox and is licensed under a BSD license. The author kindly provided a copy of the latest version and agreed to have it ported under Octave and re-distributed under GPL v3.0


Line 191: Line 215:


=== Finish the Octave GUI ===
=== Finish the Octave GUI ===
{{Warning|requires review and mentor}}
<strike>
<strike>
The GUI is currently on its own branch in hg. It is not stable enough and its design is still in flux. It is in a very alpha stage and needs to be turned into a real usable product. At the moment, it consists of the basic building blocks (terminal window, editor, variable browser, history, file browser) that are put together into a main interface. The GUI uses the Qt library. Among the things to improve are:
The GUI is currently on its own branch in hg. It is not stable enough and its design is still in flux. It is in a very alpha stage and needs to be turned into a real usable product. At the moment, it consists of the basic building blocks (terminal window, editor, variable browser, history, file browser) that are put together into a main interface. The GUI uses the Qt library. Among the things to improve are:
Line 200: Line 227:


=== Implement a Qt widget for manipulating plots ===
=== Implement a Qt widget for manipulating plots ===
{{Warning|requires review and mentor}}


Octave has had for some time a native OpenGL plotter. The plotter requires some user interaction for manipulating the plots, and it's been using fltk for quite some time. We want to replace this with Qt, so it fits better with the overall GUI look-and-feel and is easier to extend in the future.
Octave has had for some time a native OpenGL plotter. The plotter requires some user interaction for manipulating the plots, and it's been using fltk for quite some time. We want to replace this with Qt, so it fits better with the overall GUI look-and-feel and is easier to extend in the future.
Line 206: Line 235:


=== Create a better (G)UI for the profiler ===
=== Create a better (G)UI for the profiler ===
{{Warning|requires review and mentor}}


During GSoC 2011, Daniel Kraft successfully implemented a profiler for Octave. It needs a better interface and a way to generate reports. This may be done with Qt, but not necessarily, and HTML reports might also be good.
During GSoC 2011, Daniel Kraft successfully implemented a profiler for Octave. It needs a better interface and a way to generate reports. This may be done with Qt, but not necessarily, and HTML reports might also be good.


=== Sisotool. Create a graphical design tool for tuning closed loop control system (control pkg) ===
=== Sisotool. Create a graphical design tool for tuning closed loop control system (control pkg) ===
{{Warning|requires review and mentor}}


When tuning a SISO feedback system it is very helpful to be able to grab a pole or a zero and move them by dragging them with the mouse. As they are moving the software must update all the plotted lines. There should be the ability to display various graphs rlocuse, bode, step, impulse etc. and have them all change dynamically as the mouse is moving. The parameters of the compensator must be displayed and updated.
When tuning a SISO feedback system it is very helpful to be able to grab a pole or a zero and move them by dragging them with the mouse. As they are moving the software must update all the plotted lines. There should be the ability to display various graphs rlocuse, bode, step, impulse etc. and have them all change dynamically as the mouse is moving. The parameters of the compensator must be displayed and updated.
Line 215: Line 248:


=== Interface to Electronic Circuit Simulator ===
=== Interface to Electronic Circuit Simulator ===
{{Warning|requires review and mentor}}


[http://sourceforge.net/projects/qucs/ Qucs] is a C++ based circuit simulation package. This project aims to improve the interface to the Qucs algorithms to allow the transient, i.e. time series, simulation of circuits in Octave within a larger ODE system simulation driven by Octave. Other possible goals would be to make other analysis types available directly from Octave. There is an existing C++ interface which is based on handle class syntax available in the development version of Octave. The Qucs interface is intended to have two modes, synchronous and asynchronous. The asynchronous mode uses qucs to solve a circuit between two given time steps (internally taking as many smaller time steps as required), returning only the final result. This method is well developed. The alternative synchronous mode is intended to give full control of the time steps to Octave, and it is this mode which requires more work. A simple synchronous interface exists which can be built upon.
[http://sourceforge.net/projects/qucs/ Qucs] is a C++ based circuit simulation package. This project aims to improve the interface to the Qucs algorithms to allow the transient, i.e. time series, simulation of circuits in Octave within a larger ODE system simulation driven by Octave. Other possible goals would be to make other analysis types available directly from Octave. There is an existing C++ interface which is based on handle class syntax available in the development version of Octave. The Qucs interface is intended to have two modes, synchronous and asynchronous. The asynchronous mode uses qucs to solve a circuit between two given time steps (internally taking as many smaller time steps as required), returning only the final result. This method is well developed. The alternative synchronous mode is intended to give full control of the time steps to Octave, and it is this mode which requires more work. A simple synchronous interface exists which can be built upon.
Line 240: Line 275:


=== Lighting ===
=== Lighting ===
{{Warning|requires review and mentor}}


Implement transparency and lighting in OpenGL backend(s). A basic implementation is available in [http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/extra/jhandles/ JHandles]. This needs to be ported/re-implement/re-engineered/optimized in the C++ OpenGL renderer of Octave.
Implement transparency and lighting in OpenGL backend(s). A basic implementation is available in [http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/extra/jhandles/ JHandles]. This needs to be ported/re-implement/re-engineered/optimized in the C++ OpenGL renderer of Octave.


=== Object selection in OpenGL renderer ===
=== Object selection in OpenGL renderer ===
{{Warning|requires review and mentor}}


This project is about the implementation of a selection method of graphics elements within the OpenGL renderer [http://glprogramming.com/red/chapter13.html]
This project is about the implementation of a selection method of graphics elements within the OpenGL renderer [http://glprogramming.com/red/chapter13.html]


=== Non-OpenGL renderer ===
=== Non-OpenGL renderer ===
{{Warning|requires review and mentor}}


Besides the original gnuplot backend, Octave also contains an OpenGL-based renderer for advanced and more powerful 3D plots. However, OpenGL is not perfectly suited for 2D-only plots where other methods could result in better graphics. The purpose of this project is to implement an alternate graphics renderer for 2D only plots (although 3D is definitely not the focus, extending the new graphics renderer to support basic 3D features should also be taken into account). There is no particular toolkit/library that must be used, but natural candidates are:
Besides the original gnuplot backend, Octave also contains an OpenGL-based renderer for advanced and more powerful 3D plots. However, OpenGL is not perfectly suited for 2D-only plots where other methods could result in better graphics. The purpose of this project is to implement an alternate graphics renderer for 2D only plots (although 3D is definitely not the focus, extending the new graphics renderer to support basic 3D features should also be taken into account). There is no particular toolkit/library that must be used, but natural candidates are:
Line 254: Line 295:


=== TeX/LaTeX markup ===
=== TeX/LaTeX markup ===
{{Warning|requires review and mentor}}


Text objects in plots (like titles, labels, texts...) in the OpenGL renderer only support plain text mode without any formatting possibility. Support for TeX and/or LaTeX formatting needs to be added.
Text objects in plots (like titles, labels, texts...) in the OpenGL renderer only support plain text mode without any formatting possibility. Support for TeX and/or LaTeX formatting needs to be added.
Line 286: Line 329:


=== Improve JIT compiling ===
=== Improve JIT compiling ===
{{Warning|requires review and mentor}}


Octave's interpreter is ''very'' slow on some loops. Recently, thanks to Max Brister's work, an initial implement of a just-in-time compiler (JITC) in [http://llvm.org LLVM] for GSoC 2012. This project consists in understanding Max's current implementation and extending it so that functions and exponents  (e.g. 2^z) compile with the JITC. This requires knowledge of compilers, C++, LLVM, and the Octave or Matlab languages. A capable student who demonstrates the ability to acquire this knowledge quickly may also be considered. Max himself will mentor this project. [http://planet.octave.org/octconf2012/jit.pdf Here] is Max's OctConf 2012 presentation about his current implementation. See also [[JIT]].
Octave's interpreter is ''very'' slow on some loops. Recently, thanks to Max Brister's work, an initial implement of a just-in-time compiler (JITC) in [http://llvm.org LLVM] for GSoC 2012. This project consists in understanding Max's current implementation and extending it so that functions and exponents  (e.g. 2^z) compile with the JITC. This requires knowledge of compilers, C++, LLVM, and the Octave or Matlab languages. A capable student who demonstrates the ability to acquire this knowledge quickly may also be considered. Max himself will mentor this project. [http://planet.octave.org/octconf2012/jit.pdf Here] is Max's OctConf 2012 presentation about his current implementation. See also [[JIT]].


=== Improve memory management ===
=== Improve memory management ===
{{Warning|requires review and mentor}}


From profiling the interpreter, it appears that a lot of time is spending allocating and deallocating memory. A better memory management algorithm might provide some improvement.
From profiling the interpreter, it appears that a lot of time is spending allocating and deallocating memory. A better memory management algorithm might provide some improvement.


=== Implement classdef classes ===
=== Implement classdef classes ===
{{Warning|requires review and mentor}}


Matlab has two kinds of classes: old style @classes and new style classdef. Octave has only fully implemented the old style. There is partial support for new classes in [http://hg.savannah.gnu.org/hgweb/octave/shortlog/classdef our classdef branch]. There is irregular work here, and classdef is [http://www.mathworks.com/help/matlab/matlab_oop/method-attributes.html a very] [http://www.mathworks.com/help/matlab/events-sending-and-responding-to-messages.html complicated] [http://www.mathworks.com/help/matlab/enumeration-classes.html thing] to fully implement. A successful project would be to implement enough of classdef for most basic usages. Familiarity with Matlab's current classdef support would be a huge plus. Michael Goffioul and jwe can mentor this.
Matlab has two kinds of classes: old style @classes and new style classdef. Octave has only fully implemented the old style. There is partial support for new classes in [http://hg.savannah.gnu.org/hgweb/octave/shortlog/classdef our classdef branch]. There is irregular work here, and classdef is [http://www.mathworks.com/help/matlab/matlab_oop/method-attributes.html a very] [http://www.mathworks.com/help/matlab/events-sending-and-responding-to-messages.html complicated] [http://www.mathworks.com/help/matlab/enumeration-classes.html thing] to fully implement. A successful project would be to implement enough of classdef for most basic usages. Familiarity with Matlab's current classdef support would be a huge plus. Michael Goffioul and jwe can mentor this.
Line 306: Line 355:


=== Improve MPI package ===
=== Improve MPI package ===
{{Warning|requires review and mentor}}
Octave Forge's [http://octave.sourceforge.net/mpi/index.html MPI package]  
Octave Forge's [http://octave.sourceforge.net/mpi/index.html MPI package]  
is a wrapper for basic MPI functions for parallel computing. It is implemented  
is a wrapper for basic MPI functions for parallel computing. It is implemented  
Line 333: Line 385:


=== Finish the Agora website ===
=== Finish the Agora website ===
{{Warning|requires review and mentor}}


In 2009, the Mathworks decided to restrict the terms of use Matlab Central, a place dedicated to Matlab collaboration. The Mathworks forbade copyleft licenses and using the "free" code found in Matlab central on anything other than Mathworks products (e.g. forbidding from using it on Octave, even if the authors of the code wanted to allow this). Thus Octave users have no place to centrally, quickly, and conveniently share Octave code. See the [[FAQ#Why_can.27t_I_use_code_from_File_Exchange_in_Octave.3F_It.27s_released_under_a_BSD_license.21|FAQ]] for more details.
In 2009, the Mathworks decided to restrict the terms of use Matlab Central, a place dedicated to Matlab collaboration. The Mathworks forbade copyleft licenses and using the "free" code found in Matlab central on anything other than Mathworks products (e.g. forbidding from using it on Octave, even if the authors of the code wanted to allow this). Thus Octave users have no place to centrally, quickly, and conveniently share Octave code. See the [[FAQ#Why_can.27t_I_use_code_from_File_Exchange_in_Octave.3F_It.27s_released_under_a_BSD_license.21|FAQ]] for more details.
Line 348: Line 402:


=== Improve binary packaging ===
=== Improve binary packaging ===
{{Warning|requires review and mentor}}


We would like to be able to easily generate binary packages for Windows and Mac OS X. Right now, it's difficult and tedious to do so. Any way to help us do this in a faster way would be appreciated. Required knowledge is understanding how building binaries in Windows and Mac OS X works. Our current approach to fixing this is to cross-compile from a GNU system using [http://mxe.cc/ MXE] or [http://lilypond.org/gub/ GUB].
We would like to be able to easily generate binary packages for Windows and Mac OS X. Right now, it's difficult and tedious to do so. Any way to help us do this in a faster way would be appreciated. Required knowledge is understanding how building binaries in Windows and Mac OS X works. Our current approach to fixing this is to cross-compile from a GNU system using [http://mxe.cc/ MXE] or [http://lilypond.org/gub/ GUB].
Line 358: Line 414:


=== Installation of packages ===
=== Installation of packages ===
{{Warning|requires review and mentor}}
We would like to enhance the management of Octave-forge packages from within Octave environment. Currently there is a working (but rather monolithic) function that is used to do the job. The work would be to improve the way Octave interacts with the package server. Since the functionality is already sketched by the current function, the most important skill is software design.
We would like to enhance the management of Octave-forge packages from within Octave environment. Currently there is a working (but rather monolithic) function that is used to do the job. The work would be to improve the way Octave interacts with the package server. Since the functionality is already sketched by the current function, the most important skill is software design.


Line 367: Line 426:


=== Improvements to N-dimensional image processing ===
=== Improvements to N-dimensional image processing ===
{{Warning|requires review and mentor}}


The image package has partial functionality for N-dimensional images. These images exist for example in medical imaging where slices from scans are assembled to form anatomical 3D images, or even exposures taken over time at different wavelengths can result in 5D images. As part of GSoC 2013, the core functions {{codeline|imwrite}} and {{codeline|imread}} were extended to better support this type of image. Likewise, many functions in the image package, mostly morphology operators, were expanded to deal with this type of image. Still, many are left, specially image transformation and analysis of ROIs.
The image package has partial functionality for N-dimensional images. These images exist for example in medical imaging where slices from scans are assembled to form anatomical 3D images, or even exposures taken over time at different wavelengths can result in 5D images. As part of GSoC 2013, the core functions {{codeline|imwrite}} and {{codeline|imread}} were extended to better support this type of image. Likewise, many functions in the image package, mostly morphology operators, were expanded to deal with this type of image. Still, many are left, specially image transformation and analysis of ROIs.
Line 380: Line 441:


=== Color management functions in image package ===
=== Color management functions in image package ===
{{Warning|requires review and mentor}}


The goal is to implement these functions:
The goal is to implement these functions:

Navigation menu