Editing Summer of Code Project Ideas

Jump to navigation Jump to search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
The following is distilled from the [[Projects]] page for the benefit of potential [https://summerofcode.withgoogle.com Google] and [http://sophia.estec.esa.int/socis ESA] Summer of Code (SoC) students. Although students are welcome to attempt any of the projects in that page or any of their own choosing, here we offer some suggestions on what good student projects might be.
+
The following is distilled from the [[Projects]] page for the benefit of potential [https://summerofcode.withgoogle.com Google] and [http://sophia.estec.esa.int/socis2015 ESA] Summer of Code (SoC) students. Although students are welcome to attempt any of the projects in that page or any of their own choosing, here we offer some suggestions on what good student projects might be.
 
 
You can also take a look at last years [[Summer of Code]] projects for inspiration.
 
  
 
= Steps Toward a Successful Application =
 
= Steps Toward a Successful Application =
  
==  Help Us Get To Know You ==
+
* '''Help Us Get To Know You'''
 
*: If you aren't communicating with us before the application is due, your application will not be accepted.
 
*: If you aren't communicating with us before the application is due, your application will not be accepted.
 
*:* '''Join the [https://lists.gnu.org/mailman/listinfo/octave-maintainers maintainers mailing list]''' or read the archives and see what topics we discuss and how the developers interact with each other.
 
*:* '''Join the [https://lists.gnu.org/mailman/listinfo/octave-maintainers maintainers mailing list]''' or read the archives and see what topics we discuss and how the developers interact with each other.
Line 11: Line 9:
 
* '''Do not wait for us to tell you what to do'''
 
* '''Do not wait for us to tell you what to do'''
 
*: You should be doing something that interests you, and should not need us to tell you what to do.  Similarly, you shouldn't ask us what to do either.
 
*: You should be doing something that interests you, and should not need us to tell you what to do.  Similarly, you shouldn't ask us what to do either.
*:* When you email the list and mentors, do not write it to say in what project you're interested. Be specific about your questions and clear on the email subject. For example, do not write an email with the subject "GSoC student interested in the ND images projects".  Such email is likely be ignored.  Instead, show you are already working on the topic, and email "Problem implementing morphological operators with bitpacked ND images".
+
*:* When you email the list and mentors, do not write it to say on what project you're interested. Be specific about your questions and clear on the email subject. For example, do not write an email with the subject "GSoC student interested in the ND images projects".  Such email is likely be ignored.  Instead, show you are already working on the topic, and email "Problem implementing morphological operators with bitpacked ND images".
 
*:* It is good to ask advice on how to solve something you can't but you must show some work done.  Remember, we are mentors and not your boss.  Read [http://www.catb.org/esr/faqs/smart-questions.html How to ask questions the smart way]:
 
*:* It is good to ask advice on how to solve something you can't but you must show some work done.  Remember, we are mentors and not your boss.  Read [http://www.catb.org/esr/faqs/smart-questions.html How to ask questions the smart way]:
 
*:*: <blockquote cite="http://www.catb.org/esr/faqs/smart-questions.html">''Prepare your question. Think it through. Hasty-sounding questions get hasty answers, or none at all. The more you do to demonstrate that having put thought and effort into solving your problem before seeking help, the more likely you are to actually get help.''</blockquote>
 
*:*: <blockquote cite="http://www.catb.org/esr/faqs/smart-questions.html">''Prepare your question. Think it through. Hasty-sounding questions get hasty answers, or none at all. The more you do to demonstrate that having put thought and effort into solving your problem before seeking help, the more likely you are to actually get help.''</blockquote>
 
*:* It can be difficult at the beginning to think on something to do.  This is nature of free and open source software development.  You will need to break the mental barrier that prevents you from thinking on what can be done.  Once you do that, you will have no lack of ideas for what to do next.
 
*:* It can be difficult at the beginning to think on something to do.  This is nature of free and open source software development.  You will need to break the mental barrier that prevents you from thinking on what can be done.  Once you do that, you will have no lack of ideas for what to do next.
*:* Use Octave.  Eventually you will come across something that does not work the way you like.  Fix that.  Or you will come across a missing function.  Implement it.  It may be a hard problem (they usually are). While solving that problem, you may find other missing capabilities or smaller bug fixesImplement and contribute those to Octave.
+
*:* Use Octave.  Eventually you will come accross somethings that does not work the way you like.  Fix that.  Or you will come accross a missing function.  Implement it.  It may be a difficult problem (they usually are) but while solving that problem you may find other missing functions ()Implemenent and contribute those to Octave.
 
*:* Take a look at the [[Short projects]] for something that may be simple to start with.
 
*:* Take a look at the [[Short projects]] for something that may be simple to start with.
 
+
* '''Find Something That Interests You'''
==  Find Something That Interests You ==
 
 
*: It's '''critical''' that you '''find a project that excites you'''.  You'll be spending most of the summer working on it (we expect you to treat the SoC as a full-time job).
 
*: It's '''critical''' that you '''find a project that excites you'''.  You'll be spending most of the summer working on it (we expect you to treat the SoC as a full-time job).
 
*: Don't just tell us how interested you are, show us that you're willing and able to '''contribute''' to Octave. You can do that by [https://savannah.gnu.org/bugs/?group=octave fixing a few bugs] or [http://savannah.gnu.org/patch/?group=octave submitting patches] well before the deadline, in addition to regularly interacting with Octave maintainers and users on the mailing list and IRC. Our experience shows us that successful SoC students demonstrate their interest early and often.
 
*: Don't just tell us how interested you are, show us that you're willing and able to '''contribute''' to Octave. You can do that by [https://savannah.gnu.org/bugs/?group=octave fixing a few bugs] or [http://savannah.gnu.org/patch/?group=octave submitting patches] well before the deadline, in addition to regularly interacting with Octave maintainers and users on the mailing list and IRC. Our experience shows us that successful SoC students demonstrate their interest early and often.
== Prepare Your Proposal With Us ==
+
* '''Prepare Your Proposal With Us'''
 
*: By working with us to prepare your proposal, you'll be getting to know us and showing us how you approach problems. The best place for this is your Wiki user page and the [https://webchat.freenode.net/?channels=#octave IRC channel].
 
*: By working with us to prepare your proposal, you'll be getting to know us and showing us how you approach problems. The best place for this is your Wiki user page and the [https://webchat.freenode.net/?channels=#octave IRC channel].
==  Complete Your Application ==
+
* '''Complete Your Application'''
 
*: Fill out our '''''public''''' application template.
 
*: Fill out our '''''public''''' application template.
 
*:* This is best done by '''[[Special:CreateAccount|creating an account at this wiki]]''', and copying the '''[[Template:Student_application_template_public|template]]''' from its page.
 
*:* This is best done by '''[[Special:CreateAccount|creating an account at this wiki]]''', and copying the '''[[Template:Student_application_template_public|template]]''' from its page.
Line 38: Line 35:
 
*: [http://en.wikipedia.org/wiki/GNU_build_system The GNU build system] is used to build Octave.
 
*: [http://en.wikipedia.org/wiki/GNU_build_system The GNU build system] is used to build Octave.
 
*: While you generally don't need to understand too much unless you actually want to change how Octave is built, you should be able to understand enough to get a general idea of how to build Octave.
 
*: While you generally don't need to understand too much unless you actually want to change how Octave is built, you should be able to understand enough to get a general idea of how to build Octave.
*: If you've ever done a {{Codeline|./configure && make && make install}} series of commands, you have already used the GNU build system.
+
*: If you've ever done a {{Codeline|configure && make && make install}} series of commands, you have already used the GNU build system.
*: '''You must demonstrate that you are able to build the development version of Octave from sources before the application deadline.''' Linux is arguably the easiest system to work on. Instructions:
+
*: '''You must demonstrate that you are able to build the development version of Octave from sources before the application deadline.''' You will be able to find instructions how to it on this wiki, and the manual. Linux is arguably the easiest system to work on.
 +
*:* [[Building_for_Linux_systems]]
 
*:* [[Building]]
 
*:* [[Building]]
 +
*:* [https://www.gnu.org/software/octave/doc/interpreter/Building-the-Development-Sources.html Octave Manual on Building the Development Sources]
 
*:* [https://www.gnu.org/software/octave/doc/interpreter/Installation.html Octave Manual on Installing Octave]
 
*:* [https://www.gnu.org/software/octave/doc/interpreter/Installation.html Octave Manual on Installing Octave]
 
* '''The Version Control System'''
 
* '''The Version Control System'''
*: We use [https://www.mercurial-scm.org/ Mercurial] (abbreviated hg).
+
*: We use [http://mercurial.selenic.com/ Mercurial] (abbreviated hg).
 
*: Mercurial is the [http://en.wikipedia.org/wiki/Distributed_Version_Control_System distributed version control system] (DVCS) we use for managing our source code. You should have some basic understanding of how a DVCS works, but hg is pretty easy to pick up, especially if you already know a VCS like git or svn.
 
*: Mercurial is the [http://en.wikipedia.org/wiki/Distributed_Version_Control_System distributed version control system] (DVCS) we use for managing our source code. You should have some basic understanding of how a DVCS works, but hg is pretty easy to pick up, especially if you already know a VCS like git or svn.
 
* '''The Procedure for Contributing Changesets'''
 
* '''The Procedure for Contributing Changesets'''
 
*: You will be expected to follow the same procedures as other contributors and core developers.
 
*: You will be expected to follow the same procedures as other contributors and core developers.
*: You will be helping current and future Octave developers by using our standard style for changes, commit messages, and so on.  You should also read the same [[Contribution guidelines | contribution]] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING.md guidelines] we have for everyone.
+
*: You will be helping current and future Octave developers by using our standard style for changes, commit messages, and so on.  You should also read the same [https://www.gnu.org/software/octave/doc/interpreter/Contributing-Guidelines.html contribution] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING guidelines] we have for everyone.
 
*: [[Hg_instructions_for_mentors#Mercurial_Tips_for_SoC_students | This page]] describes the procedures students are expected to use to publicly display their progress in a public mercurial repo during their work.
 
*: [[Hg_instructions_for_mentors#Mercurial_Tips_for_SoC_students | This page]] describes the procedures students are expected to use to publicly display their progress in a public mercurial repo during their work.
 
* '''The Maintainers Mailing List'''
 
* '''The Maintainers Mailing List'''
Line 58: Line 57:
 
*: Unless your primary mentor has a strong preference for some other method of communication, the IRC channel will likely be your primary means of communicating with your mentor and Octave developers.
 
*: Unless your primary mentor has a strong preference for some other method of communication, the IRC channel will likely be your primary means of communicating with your mentor and Octave developers.
 
* '''The Octave Forge Project'''
 
* '''The Octave Forge Project'''
*: [https://octave.sourceforge.io/ Octave-Forge] is a collection of contributed packages that enhance the capabilities of core Octave. They are somewhat analogous to Matlab's toolboxes.
+
*: [http://octave.sf.net Octave-Forge] is a collection of contributed packages that enhance the capabilities of core Octave. They are somewhat analogous to Matlab's toolboxes.
 
* '''Related Skills'''
 
* '''Related Skills'''
 
*: In addition, you probably should know '''some''' mathematics, engineering, experimental science, or something of the sort.
 
*: In addition, you probably should know '''some''' mathematics, engineering, experimental science, or something of the sort.
Line 99: 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_Project_Ideas#Make_specfuns_special_again | Make specfuns special again]] || Marco Caliari || Colin Macdonald || Numerical || Yes  || Medium || Never
 +
|-
 +
| [[Summer_of_Code_Project_Ideas#ode15s_:_Matlab_Compatible_DAE_solver | ode15s : Matlab Compatible DAE solver]] || Carlo de Falco || 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_Project_Ideas#Improve_logm.2C_sqrtm.2C_funm | Improve logm, sqrtm, funm]] || Jordi Gutiérrez Hermoso || 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_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
Line 107: Line 108:
 
| [[Summer_of_Code_Project_Ideas#EPA_hydrology_software_suite | EPA hydrology software suite]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never
 
| [[Summer_of_Code_Project_Ideas#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_Project_Ideas#TISEAN_package | TISEAN: Nonlinear Time Series Analysis]] || [[User:KaKiLa|KaKiLa]] || ? || Octave Forge || [[TISEAN_package | No]] || Medium || GSoC 2015
 
|-
 
|-
| [[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_Project_Ideas#Mapping_or_Geometry_package:_Implement_boolean_operations_on_polygons | Geometry: Boolean operations on Polygons]] || John Swensen || [[User:KaKiLa|KaKiLa]], Philip Neuhuis || Octave Forge || [https://amrkeleg.wordpress.com/ No] || Easy || GSoC 2016
 
|-
 
|-
 
| [[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_Project_Ideas#Octave_Package_management | Octave Package management]] || Sebastian Schöps || [[User:KaKiLa|KaKiLa]], Carnë Draug, Carlo de Falco || Infrastructure || Yes  || Medium || Never
Line 115: Line 116:
 
| [[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_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_Project_Ideas#Interval_package | Interval package]] || [[User:oheim|Oliver Heimlich]] || [[User:Siko1056|Kai T. Ohlhus]] || Octave Forge, Numerical || No || Medium || [https://gsocinterval.blogspot.de/ GSoC 2017]
+
| [[Summer_of_Code_Project_Ideas#Interval_package | Interval package]] || [[User:oheim|Oliver Heimlich]] || [[User:Siko1056|Kai T. Ohlhus]] || Octave Forge, Numerical || Yes || Medium || Never
|-
 
| [[Summer_of_Code_Project_Ideas#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_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_Project_Ideas#Jupyter_Integration | Jupyter integration]] || Mike Miller || Colin B. Macdonald, Ankit Raj || Infrastructure ||  Yes || Medium || Never
+
| [[Summer_of_Code_Project_Ideas#Jupyter_Integration | Jupyter integration]] || Mike Miller || Colin B. Macdonald || Infrastructure ||  Yes || Medium || Never
|-
 
| [[Summer_of_Code_Project_Ideas#Chebfun_in_Octave | Chebfun in Octave]] || Colin B. Macdonald || [[User:KaKiLa|KaKiLa]], Ankit Raj, needs core-Octave mentor/comentor || Infrastructure, Numerical || Yes  || Hard || Never
 
|-
 
| [[Summer_of_Code_Project_Ideas#GUI Variable Editor and Property Inspector | GUI Property Inspector]] || ? ||  || GUI || Yes  || Medium || Never
 
|-
 
| [[Summer_of_Code_Project_Ideas#SPQR Interface | Write API to SPQR Library]] || ? ||  || Infrastructure || Yes  || Medium || Never
 
 
|-
 
|-
| [[Summer_of_Code_Project_Ideas#PolarAxes and Plotting Improvements | PolarAxes and Plotting Improvements ]] || ? || Rik || Graphics || Yes  || Medium || Never
+
| [[Summer_of_Code_Project_Ideas#Chebfun_in_Octave | Chebfun in Octave]] || Colin B. Macdonald || [[User:KaKiLa|KaKiLa]], needs core-Octave mentor/comentor || Infrastructure, Numerical || Yes  || Hard || Never
 
|}
 
|}
  
Line 136: Line 129:
 
These projects involve implementing certain mathematical functions, primarily in core Octave.
 
These projects involve implementing certain mathematical functions, primarily in core Octave.
  
=== ode15{i,s} : Matlab Compatible DAE solvers ===
+
=== Make specfuns special again ===
  
An initial implementation of a Matlab compatible ode15{i,s} solver,
+
Traditionally, problem solving environments like Octave provide simple interfaces to numerical linear algebra, special function evaluation, root finding, and other tools. Special functions (such as Bessel functions, exponential integrals, LambertW, etc) are expected by users to "just work". But many of Octave's special functions could be improved to improve their numerical accuracy. Generally a user might expect these to be accurate to full 15 digits. Software testing is important to Octave; this project would improve the tests of many special functions, in particular by comparing the output with slow-but-accurate symbolic computations.
based on [http://computation.llnl.gov/projects/sundials SUNDIALS],  
 
was done by Francesco Faccio during
 
GSOC 2016.
 
The blog describing the work is [http://gsoc2016ode15s.blogspot.it/ here].
 
The resulting code has been pushed into the main Octave repository in the development branch and
 
consists mainly of the following three files
 
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/libinterp/dldfcn/__ode15__.cc __ode15__.cc],
 
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15i.m ode15i.m] and
 
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15s.m ode15s.m].
 
The list of outstanding tracker tickets concerning this implementation can be found
 
[https://savannah.gnu.org/search/?Search=Search&words=ode15&type_of_search=bugs&only_group_id=1925&exact=1&max_rows=25#options here]
 
  
Possible useful improvements that could be done in a new project include:
+
State: some bugs include [https://savannah.gnu.org/bugs/?48307 #48307] (sinc), [https://savannah.gnu.org/bugs/?47738  #47738] (expint), [https://savannah.gnu.org/bugs/?47800  #47800] (gammainc), [https://savannah.gnu.org/bugs/?48036 #48036] (gammaincinv) [https://savannah.gnu.org/bugs/index.php?48316 #48316] (besselj) ''TODO: add others?''  The unmaintained specfun pkg had some poor implementations (e.g., divergence for large x, see [https://github.com/cbm755/octsympy/issues/416].).  See also the Symbolic functions in `@double`: these probably should have native double implementations.
  
* Implement a better function for selecting consistent initial conditions compatible with Matlab's decic.m. The algorithm to use is described [http://faculty.smu.edu/shampine/cic.pdf here]
+
* '''Required skills'''
 +
: Octave m-file programming, some familiarity with Approximation Theory (a branch of mathematics).
 +
* '''Difficulty'''
 +
: Medium (mathematics needed, but on the other hand, perhaps little or no C++).
 +
* '''Potential mentors'''
 +
: Marco Caliari, Colin Macdonald, others?
  
* make ode15{i,s} with datatypes other than double
+
How to get started: pick a special function, see if it has tests: contribute a patch that adds more tests, e.g., comparing its values to symbolic computations or other highly accurate solutions
  
* improve interpolation at intermediate time steps.
+
=== ode15s : Matlab Compatible DAE solver ===
  
* general code profiling and optimization
+
The goal is to implement a Matlab compatible adaptive BDF solver for Differential Algebraic Equations (DAEs).
 +
The interface would need to be compatible with ode15s while for the backend the
 +
[https://computation.llnl.gov/casc/sundials/main.html SUNDIALS] library would be used, which has both a C and a MEX interface.
 +
This function should eventually be included in Octave core together with the other [http://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ ODE solvers] that will be released with version 4.2, but could be intially developed as an addition to the [https://sourceforge.net/p/octave/odepkg/ci/default/tree/ odepkg] package.
  
Other tasks, not strictly connected to ode15{i,s} but closely related that could be added
 
to a possible project plan would be improving documentation and tests in odepkg and removing
 
overlaps with the documentation in core Octave.
 
 
 
* '''Required skills'''
 
* '''Required skills'''
 
: C++; C; familiarity with numerical methods for DAEs; Basic knowledge of makefiles and/or autotools.
 
: C++; C; familiarity with numerical methods for DAEs; Basic knowledge of makefiles and/or autotools.
Line 170: Line 156:
 
: Medium.
 
: Medium.
 
* '''Potential mentors'''
 
* '''Potential mentors'''
: Francesco Faccio, Carlo de Falco, Marco Caliari, Jacopo Corno, Sebastian Schöps
+
: Carlo de Falco, Marco Caliari, Jacopo Corno, Sebastian Schöps
  
 
=== Improve logm, sqrtm, funm ===
 
=== Improve logm, sqrtm, funm ===
Line 181: Line 167:
 
: Difficult.
 
: Difficult.
 
* '''Potential mentors'''
 
* '''Potential mentors'''
: ?
+
: Jordi Gutiérrez Hermoso
  
 
=== Improve iterative methods for sparse linear systems ===
 
=== Improve iterative methods for sparse linear systems ===
Line 188: Line 174:
 
bicgstab, cgs, gmres, and qmr (general matrices). The description of some of them (pcr, qmr) and their error messages are not aligned. Moreover, they have similar blocks of code (input check for instance) which can be written once and for all in common functions. The first step in this project could be a revision and a synchronization of the codes, starting from the project [http://planet.octave.org/#tag:blogger.com,1999:blog-1297699247151766814.post-8054019978706480250 SOCIS2016], whose latest patch, still to be included, is [https://savannah.gnu.org/patch/?9108 here].
 
bicgstab, cgs, gmres, and qmr (general matrices). The description of some of them (pcr, qmr) and their error messages are not aligned. Moreover, they have similar blocks of code (input check for instance) which can be written once and for all in common functions. The first step in this project could be a revision and a synchronization of the codes, starting from the project [http://planet.octave.org/#tag:blogger.com,1999:blog-1297699247151766814.post-8054019978706480250 SOCIS2016], whose latest patch, still to be included, is [https://savannah.gnu.org/patch/?9108 here].
  
In Matlab, some additional methods are available: minres and symmlq (symmetric matrices), bicgstabl (general matrices), lsqr (least
+
In Matlab, some additional methods are available: minres and symmlq (symmetric matrices), bicgstabl (generale matrices), lsqr (least
 
squares). The second step in this project could be the implementation of some of these missing functions.
 
squares). The second step in this project could be the implementation of some of these missing functions.
  
Line 198: Line 184:
 
: Maybe hard the mathematical part, medium the programming part.
 
: Maybe hard the mathematical part, medium the programming part.
 
* '''Mentor'''
 
* '''Mentor'''
:
+
: Marco Caliari
  
 
=== Chebfun in Octave ===
 
=== Chebfun in Octave ===
  
[http://chebfun.org Chebfun] is a mathematics and software project for "numerical computing with functions".  Basically it approximates functions to machine precision accuracy (10<sup>-15</sup>) using piecewise Chebyshev polynomial interpolants.  Operations on those functions (arithmetic, derivatives, root-finding, etc) are then overloaded and return new interpolating polynomials, which are themselves proxies for the actual solution.
+
[https://chebfun.org Chebfun] is a mathematics and software project for "numerical computing with functions".  Basically it approximates functions to machine precision accuracy (10<sup>-15</sup>) using piecewise Chebyshev polynomial interpolants.  Operations on those functions (arithmetic, derivatives, root-finding, etc) are then overloaded and return new interpolating polynomials, which are themselves proxies for the actual solution.
  
 
Chebfun makes extensive use of classdef classes, and is one of the largest Free Software projects to do so.  Unfortunately it currently only works in Matlab.  This project seeks to (1) improve Octave's classdef support and (2) tweak Chebfun to work under Octave, for example, removing undocumented classdef features.  The final goal is to have at least basic Chebfun features working on Octave.  An additional goal would be making "pkg install chebfun.zip" work in Octave.
 
Chebfun makes extensive use of classdef classes, and is one of the largest Free Software projects to do so.  Unfortunately it currently only works in Matlab.  This project seeks to (1) improve Octave's classdef support and (2) tweak Chebfun to work under Octave, for example, removing undocumented classdef features.  The final goal is to have at least basic Chebfun features working on Octave.  An additional goal would be making "pkg install chebfun.zip" work in Octave.
  
The impact of this project is improving Octave and allowing Chebfun to be used without proprietary software.
+
This project is important for both technical reasons (to improve Octave's classdef support) and ethical reasons (to allow Chebfun to run without proprietary software).
  
 
* '''Required skills'''
 
* '''Required skills'''
: Octave m-file programming, classdef programming, probably C++, some familiarity with Approximation Theory (a branch of mathematics).
+
: Octave m-file programming, C++, some familiarity with Approximation Theory (a branch of mathematics).
 
* '''Difficulty'''
 
* '''Difficulty'''
: Medium (fixing Octave classdef bugs likely harder and requires a deep dive into how Octave supports OOP).
+
: Medium to Hard (probably requires a deep dive into how Octave supports OO).
 
* '''Potential mentors'''
 
* '''Potential mentors'''
: Colin B. Macdonald, [[User:KaKiLa|KaKiLa]], Mike Miller (?), Carnë Draug (?), someone from Chebfun team (?).
+
: Colin B. Macdonald, [[User:KaKiLa|KaKiLa]], Marco Caliari (?), Mike Miller (?), Carnë Draug (?), someone from Chebfun team (?).
 
 
How to get started: learn about Chebfun, browse Octave's bug list for classdef-related bugs.
 
  
First steps: clone this Chebfun [https://github.com/cbm755/chebfun/tree/octave_dev octave_dev branch].  On that, "f = chebfun(@(x) sin(x), [-2 6])" should work with Octave 4.3.0+ and maybe even with 4.2.1.  Check that "f(pi)" and "g = f + 1" work.  A good first task would be to study [https://github.com/cbm755/chebfun/commit/e20b0ad2dc89cfe8e50ba461b864eff7d5bbef17 this commit], a workaround for "f.funs{1}" using "temp = f.funs; temp{1}".  "2*f" is failing, can you fix it, perhaps with this workaround?  Or can you make "f.funs{1}" work by changing something in "@chebfun/subsref.m"?
+
How to get started: learn about Chebfun, browse Octave's bug list for classdef-related bugs, play with other classdef projects (Pytave, https://github.com/cbm755/octsympy/issues/545)
  
 
== Adding functionality to Forge packages ==
 
== Adding functionality to Forge packages ==
 
 
 
=== EPA hydrology software suite ===
 
=== EPA hydrology software suite ===
 
Create native interfaces to the EPA software suites.
 
Create native interfaces to the EPA software suites.
Line 229: Line 211:
 
* [https://github.com/OpenWaterAnalytics/ Open Water Analytics]
 
* [https://github.com/OpenWaterAnalytics/ Open Water Analytics]
  
* '''SWMM'''
+
==== SWMM ====
 
** [https://www.epa.gov/water-research/storm-water-management-model-swmm Official page]
 
** [https://www.epa.gov/water-research/storm-water-management-model-swmm Official page]
 
** Check work done in [https://github.com/water-systems/MatSWMM MatSWMM] [http://digital.csic.es/bitstream/10261/132982/1/MatSWMM.pdf article]
 
** Check work done in [https://github.com/water-systems/MatSWMM MatSWMM] [http://digital.csic.es/bitstream/10261/132982/1/MatSWMM.pdf article]
  
* '''EPANET'''
+
====EPANET====
 
** [https://www.epa.gov/water-research/epanet Official page]
 
** [https://www.epa.gov/water-research/epanet Official page]
  
* '''Required skills'''
+
====Required skills====
: m-file scripting, C, C++, API knowledge, file I/O, classdef (optional).
 
 
 
* '''Difficulty'''
 
: easy/medium
 
 
 
* '''Mentor'''
 
: [[User:KaKiLa|KaKiLa]]
 
 
 
=== FullSWOF overland flow simulator ===
 
Create scripting tools for (optional: native interfaces).
 
 
 
Starting points
 
* [http://www.univ-orleans.fr/mapmo/soft/FullSWOF/ The FullSWOF Project].
 
* [https://arxiv.org/abs/1204.3210 FullSWOF: A software for overland flow simulation]
 
* [https://bitbucket.org/binello7/fswof2d Initial work on Bitbucket]
 
 
 
* '''Required skills'''
 
 
: m-file scripting, C, C++, API knowledge, file I/O, classdef (optional).  
 
: m-file scripting, C, C++, API knowledge, file I/O, classdef (optional).  
  
* '''Difficulty'''
+
====Difficulty====
 
: easy/medium
 
: easy/medium
  
* '''Mentor'''
+
====Mentor====
 
: [[User:KaKiLa|KaKiLa]]
 
: [[User:KaKiLa|KaKiLa]]
  
 
=== TISEAN package ===
 
=== TISEAN package ===
  
[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 has been [[TISEAN package | partially re-implemented]] as libre software. The objective is to integrate TISEAN as an Octave Forge package, as was done for the Control package.
+
[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 has been [http://wiki.octave.org/TISEAN_package partially re-implemented] as libre software. The objective is to integrate TISEAN as an Octave Forge package, as was done for the Control package.
 
[[TISEAN_package | A lot has been completed]] but [[TISEAN_package:Procedure | there is still work left to do]].
 
[[TISEAN_package | A lot has been completed]] but [[TISEAN_package:Procedure | there is still work left to do]].
  
Line 294: Line 259:
 
=== Interval package ===
 
=== Interval package ===
  
The [[Interval_package|interval package]] provides several arithmetic functions with accurate and guaranteed error bounds. Its development started in the end of 2014 and there is some fundamental functionality left to be implemented. See the [https://octave.sourceforge.io/interval/overview.html list of functions], basically any missing numeric Octave function could be implemented as an interval extension in the package. Potential projects:
+
The [[Interval_package|interval package]] provides several arithmetic functions with accurate and guaranteed error bounds. Its development started in the end of 2014 and there is some fundamental functionality left to be implemented. See the [http://octave.sourceforge.net/interval/overview.html list of functions], basically any missing numeric Octave function could be implemented as an interval extension in the package. Potential projects:
* Implement missing algorithms (as m-files)-difficulty and whether knowledge in interval analysis is required depends on the particular function. Of course, you may use papers which present such algorithms.
+
* Make the package support N-dimensional arrays, this requires less knowledge of interval arithmetic but can be a rather exhaustive job since it affects most function files in the package
 +
* Implement missing algorithms (as m-files)—difficulty and whether knowledge in interval analysis is required depends on the particular function. Of course, you may use papers which present such algorithms.
 
* Improve existing algorithms (support more options for plotting, support more options for optimizers, increase accuracy, …)
 
* Improve existing algorithms (support more options for plotting, support more options for optimizers, increase accuracy, …)
* Integrate functions from VERSOFT [http://uivtx.cs.cas.cz/~rohn/matlab/] in the package (some work has already been done and current progress is tracked in [[Interval_package#VERSOFT]]). This basically involves conversion of the documentation into Texinfo format, use [[Contribution_guidelines#Coding_style|Octave coding guidelines]] and to make sure that any called functions are available in the interval package. VERSOFT is originally based on INTLAB [http://www.ti3.tu-harburg.de/rump/intlab/], a proprietary Octave/Matlab package. Some functions may be missing. Also, the interval package doesn't support complex numbers, so it might not be possible to migrate some functions.
+
* Integrate functions from VERSOFT [http://uivtx.cs.cas.cz/~rohn/matlab/] in the package (some work has already been done and current progress is tracked in [[Interval_package#VERSOFT]]). This basically involves conversion of the documentation into Texinfo format, use Octave coding guidelines [https://www.gnu.org/software/octave/doc/v4.0.0/Octave-Sources-_0028m_002dfiles_0029.html] and to make sure that any called functions are available in the interval package. VERSOFT is originally based on INTLAB, a proprietary Octave package. Some functions may be missing. Also, the interval package doesn't support complex numbers, so it might not be possible to migrate some functions.
 
* List more interesting use cases of interval arithmetic in the package's manual [https://octave.sourceforge.io/interval/package_doc/Examples.html]
 
* List more interesting use cases of interval arithmetic in the package's manual [https://octave.sourceforge.io/interval/package_doc/Examples.html]
  
Line 307: Line 273:
 
: [[User:oheim|Oliver Heimlich]], [[User:Siko1056|Kai T. Ohlhus]]
 
: [[User:oheim|Oliver Heimlich]], [[User:Siko1056|Kai T. Ohlhus]]
  
=== OCS ===
+
=== Mapping or Geometry package: Implement boolean operations on polygons ===
  
[[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).
+
The goal is to implement a Matlab-compatible set of boolean operations and supporting function for acting on polygons. These include the standard set of potential operations such as union/OR, intersection/AND, difference/subtraction, and exclusiveor/XOR.
+
There is already an octave-forge package that implements a large part of this (the [http://octave.sourceforge.net/octclip/index.html octclip package]); however that does not do XOR; processing polygons with holes could be done better; and maintainability is hampered because all code comments etc. are in Spanish. Other than that, octclip performs fine.
* [http://octave.sourceforge.net/ocs/overview.html Package help at source forge.]  
+
 
 +
There are a variety of existing polygon libraries that implement much of the functionality and thus this would be incorporating the library into GNU Octave. The libraries with acceptable licenses are [http://www.angusj.com/delphi/clipper.php ClipperLib], [http://www.boost.org/doc/libs/1_60_0/libs/polygon/doc/index.htm Boost::Polygon], [https://github.com/boostorg/geometry Boost::Geometry], or [http://boolean.klaasholwerda.nl/bool.html kbool]. This would include implementing the following functions: polybool, ispolycw, poly2ccw, poly2cw, poly2fv, polyjoin, and polysplit. A partial implementation with ClipperLib and GPC can be found [https://sites.google.com/site/ulfgri/numerical/polybool here].
  
 
* '''Required skills'''
 
* '''Required skills'''
: m-file scripting, C, C++, and FORTRAN API knowledge.
+
: Knowledge of C++; C; familiarity with boolean logic; polygons, windings, and geometry
 
* '''Difficulty'''
 
* '''Difficulty'''
: easy/medium
+
: Easy to Medium.
* '''Mentor'''
+
* '''Potential mentor'''
: Sebastian Schöps, Carlo de Falco
+
: John Swensen
 +
: [[User:KaKiLa|KaKiLa]]
  
 
== Infrastructure ==
 
== Infrastructure ==
Line 342: Line 310:
 
=== Octave Package management ===
 
=== Octave Package management ===
  
[[Packages]] are extensions for Octave, that are mainly maintained by the [[Octave Forge]] community.
+
Octave management of installed packages is performed by a single function, {{codeline|pkg}}, which does pretty much everything. This function has a few limitations which are hard to implement with the current codebase, and will most likely require a full rewrite.
To get those extension to work with Octave, there is a single function, {{manual|pkg}}, which does pretty much everything.
 
This function has a few limitations which are hard to implement with the current codebase, and will most likely require a full rewrite.
 
A major step forward for a rewritten package manager is the [https://github.com/apjanke/octave-packajoozle/ "packajoozle" project] by Andrew Janke.
 
  
The planned improvements (see also {{bug|39479}}) are:
+
The planned improvements are:
  
 +
* install from URLs
 
* install and update from repositories (hg and git)
 
* install and update from repositories (hg and git)
 
* automatic handling of dependencies
 
* automatic handling of dependencies
Line 357: Line 323:
 
* support for multiple Octave installs
 
* support for multiple Octave installs
 
* support for system-wide and user installed packages
 
* support for system-wide and user installed packages
* testing packages (<code>pkg test <package-name></code>)
 
* improved metadata acquisition (<code>pkg list -forge</code>) from https://octave.sourceforge.io/
 
  
The main objective of this project is to make {{manual|pkg}} more user friendly and to make it a tool to foster third party participation in Octave.
+
The main objective of this project is to make {{codeline|pkg}} more user friendly and to make it a tool to foster third party participation in Octave.
However, the current {{manual|pkg}} also performs some maintenance functions which it probably should not.
+
{{codeline|pkg}} needs to be more flexible and intelligent when dealing with packages, different verisons and different sources, as well as options on how to build and install the package.
 +
There are also advance features of pkg that are useful for testing packages. However, the current {{codeline|pkg}} also performs some maintenance functions which it probably should not.
 
Instead a package for developers should be created with such tools.
 
Instead a package for developers should be created with such tools.
To do this enhancement effectively, a refactoring of the current {{codeline|pkg}} code will be needed (see [https://github.com/apjanke/octave-packajoozle/ "packajoozle" project]).
 
  
Many of these problems have been solved in other languages.
+
To do this enhacenment effectively, a refactoring of the current {{codeline|pkg}} code will be needed.
Familiarity with how other languages handle this problem will be useful to come up with elegant solutions.
+
[https://bitbucket.org/carandraug/octave/commits/branch/pkg This job was started once], but due to diverging and growing specifications, it stalled.  
In some cases, there are standards to follow.
+
In this project we will focus on the most needed features, keeping the requirements to a minimum.  
For example, there are specifications published by freedesktop.org about where files should go ([http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html base directory spec]) and Windows seems to have its own standards.
 
See bugs {{bug|36477}} and {{bug|40444}} for more details.
 
  
In addition, package names may start to collide very easily.
+
Many of these problems have been solved in other languages. Familiarity with how other languages handle this problem will be useful to come up with elegant solutions. In some cases, there are standards to follow. For example, there are specifications published by freedesktop.org about where files should go ([http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html base directory spec]) and Windows seems to have its own standards. See bugs {{bug|36477}} and {{bug|40444}} for more details.
One horrible way to workaround this by is choosing increasingly complex package names that give no hint on the package purpose.
+
 
A much better is option is providing an Authority category like Perl 6 does.
+
In addition, package names may start to collide very easily. One horrible way to workaround this by is choosing increasingly complex package names that give no hint on the package purpose. A much better is option is providing an Authority category like Perl 6 does. Nested packages is also an easy way to provide packages for specialized subjects (think {{codeline|image::morphology}}). A new {{codeline|pkg}} would think all this things now, or allow their implementation at a later time. Read the [[OEP:pkg|unfinished plan]] for more details.
Nested packages is also an easy way to provide packages for specialized subjects (think {{codeline|image::morphology}}).
 
A new {{manual|pkg}} would think all this things now, or allow their implementation at a later time.
 
Read the [[OEP:pkg|unfinished plan]] for more details.
 
  
 
* '''Minimum requirements'''
 
* '''Minimum requirements'''
 
: Ability to read and write Octave code, experience with Octave packages, and understanding of the basics of autotools. The most important skill is software design.
 
: Ability to read and write Octave code, experience with Octave packages, and understanding of the basics of autotools. The most important skill is software design.
 
* '''Difficulty'''
 
* '''Difficulty'''
: Medium.
+
: Easy to Medium.
 
* '''Mentor'''
 
* '''Mentor'''
 
: [[User:KaKiLa|KaKiLa]], Carnë Draug, Carlo de Falco, Sebastian Schöps
 
: [[User:KaKiLa|KaKiLa]], Carnë Draug, Carlo de Falco, Sebastian Schöps
  
=== SPQR Interface ===
+
=== Command line suggestion feature ===
 +
 
 +
Currently Octave has no mechanism for suggesting corrections to typographic errors on the command line. An autocomplete/suggestion function is provided (using the double-TAB shortcut), but recent discussions have indicated a desire for a more proactive measure to catch user error.  Potential applicants are referred to bug {{bug|46881}} regarding the usage of grey vs. gray.
 +
 
 +
Suggested improvements are:
 +
* provide one or more suggested corrections to the user when a command line entry produces an error.
 +
* recognition and suggested correction for apparent syntax errors
 +
* function suggestion(s) when a 'close' match is found (close remains to be defined)
 +
* multiple suggestions if more than one option seems likely, along with a user-friendly method of selecting the appropriate choice.
 +
* user selectable option to disable and/or customize the suggestion behavior
 +
* correct operation, or graceful degradation, whether Octave is run in GUI or command-line mode.
  
Octave implements QR factorization for sparse matrices, but it does so with an older library. This has caused fundamental issues, including segfaults as recorded here (https://savannah.gnu.org/bugs/?func=detailitem&item_id=51950).  The goal of this project is to program an interface to the API for the SQPR library (http://faculty.cse.tamu.edu/davis/suitesparse.html).  This is the same library that Matlab uses for this purpose.
+
As mentioned in the bug {{bug|46881}} discussion, this project has little-to-no relation to m-code compatibility. As such, emulation of the behavior of other software is not required, nor even necessarily desired. Octave is free to implement as simple or complex a solution to this feature request as is necessary to provide the best experience to the user. There may be tools, features, or code from other license-compatible projects that can be of use here, and the applicant would be encouraged to identify and leverage such resources as appropriate.  
  
 
* '''Minimum requirements'''
 
* '''Minimum requirements'''
: Ability to read and write C++ code.
+
: TBD
 
* '''Difficulty'''
 
* '''Difficulty'''
: Medium.
+
: Easy to Medium.
 
* '''Mentor'''
 
* '''Mentor'''
:  
+
: Undetermined
  
 
== Image Analysis ==
 
== Image Analysis ==
Line 404: Line 373:
 
As part of GSoC 2013, the core functions for image IO, {{codeline|imwrite}} and {{codeline|imread}}, were extended to better support this type of images. Likewise, many functions in the image package, mostly morphology operators, were expanded to deal with this type of image. Since then, many other functions have been improved, sometimes completely rewritten, to abstract from the number of dimensions. In a certain way, supporting ND images is also related to choosing good algorithms since such large images tend to be quite large.
 
As part of GSoC 2013, the core functions for image IO, {{codeline|imwrite}} and {{codeline|imread}}, were extended to better support this type of images. Likewise, many functions in the image package, mostly morphology operators, were expanded to deal with this type of image. Since then, many other functions have been improved, sometimes completely rewritten, to abstract from the number of dimensions. In a certain way, supporting ND images is also related to choosing good algorithms since such large images tend to be quite large.
  
This project will continue on the previous work, and be mentored by the previous GSoC student and current image package maintainer. Planning the project requires selection of functions lacking ND support and identifying their dependencies. For example, supporting {{codeline|imclose}} and {{codeline|imopen}} was better implemented by supporting {{codeline|imerode}} and {{codeline|imdilate}} which then propagated ND support to all of its dependencies. These dependencies need to be discovered first since often they are not being used yet, and may even be missing function. This project can also be about implementing functions that have [[Image package#Missing functions | not yet been implemented]]. Also note that while some functions in the image package will accept ND images as input, they are actually not correctly implemented and will give incorrect results.
+
This project will continue on the previous work, and be mentored by the previous GSoC student and current image package maintainer. Planning the project requires selection of functions lacking ND support and identifying their dependencies. For example, supporting {{codeline|imclose}} and {{codeline|imopen}} was better implemented by supporting {{codeline|imerode}} and {{codeline|imdilate}} which then propagated ND support to all of its dependencies. These dependencies need to be discovered first since often they are not being used yet, and may even be missing function. This project can also be about implementing functions that have [http://wiki.octave.org/Image_package#Missing_functions not yet been implemented]. Also note that while some functions in the image package will accept ND images as input, they are actually not correctly implemented and will give incorrect results.
  
 
* '''Required skills'''
 
* '''Required skills'''
Line 437: Line 406:
 
: Carnë Draug
 
: Carnë Draug
  
== GUI ==
 
 
=== GUI Variable Editor and Property Inspector ===
 
 
Octave has a preliminary implementation of a Variable Editor: a spreadsheet-like tool for quickly editing and visualizing variables.  The initial phase of the project will be learning how the implementation was done.
 
 
With the knowledge gained, the second part of the project will be to implement a Property Inspector.  This is a spreadsheet like interface to the many, many graphics properties that exist and are different on a per-object basis.  The goal would be not only the concise-display of the existing properties, but a reasonable user interface to change them.  As examples, boolean properties should be able to be toggled with a double-click; Radio properties should have a drop-down list of only the supported options; Other properties that can be modified should have the constraints built-in (for example, Linewidth must be a scalar, while Position must be a 1x4 vector).  It would also be important to have easy access to the documentation of a property.
 
 
For reference, Matlab has a similar Property Inspector (https://www.mathworks.com/help/matlab/ref/inspect.html).
 
 
* '''Minimum requirements'''
 
: Ability to read and write C++ code.  Experience with Qt toolkit and GUI programming is optional, but desirable.
 
* '''Difficulty'''
 
: Medium.
 
* '''Mentor'''
 
:
 
  
== Graphics ==
 
  
=== PolarAxes and Plotting Improvements ===
 
  
Octave currently provides supports for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listerners to get things to work.  What is needed is a first class implementation of a "polaraxes" object in C++.  This will require creating a new fundamental graphics object type, and programming in C++/OpenGL to render the object.  When "polaraxes" exist as an object type then m-files will be written to access them including polaraxes.m, polarplot.m, rticks.m, rticklabels.m, thetaticks, thetaticklabels.m, rlim.m, thetalim.m.  relates to {{bug|35565}}, {{bug|49804}}, {{bug|52643}}.
 
  
* '''Minimum requirements'''
 
: Ability to read and write C++ code.  Ability to read and write Octave code.  Experience with OpenGL programming is optional.
 
* '''Difficulty'''
 
: Medium.
 
* '''Mentor'''
 
: Rik
 
  
 
<noinclude>
 
<noinclude>

Please note that all contributions to Octave may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Octave:Copyrights for details). Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)