User:Ozzy: Difference between revisions

From Octave
Jump to navigation Jump to search
 
(15 intermediate revisions by the same user not shown)
Line 48: Line 48:
== O: Only out of interest ==
== O: Only out of interest ==
* Did you ever hear about Octave before?  
* Did you ever hear about Octave before?  
''Yes I did.''
''Yes I did. I started using it on my second year of studies where it was a recommended tool for signal processing on my university''
** If so, when and where? How far have you been involved already?
** If so, when and where? How far have you been involved already?
''I am using Octave in daily basis for my research work and I actually prefer it over Matlab due to relaxed syntax, easy access to additional packages and lower price ;)''
''I am using Octave in daily basis for my research work and I actually prefer it over Matlab due to relaxed syntax, easy access to additional packages and lower price ;)''
* What was the first question concerning Octave you could not find an answer to rather quickly?
* What was the first question concerning Octave you could not find an answer to rather quickly?
''Unfortunately there was a lot of them and they mostly include poorly documented packages''
''Unfortunately there was a lot of them and they mostly relate to poorly documented packages''


== P: Prerequisites ==
== P: Prerequisites ==
Line 70: Line 70:
== S: Self-assessment ==
== S: Self-assessment ==
* Please describe how useful criticism looks from your point of view as committing student.
* Please describe how useful criticism looks from your point of view as committing student.
* How autonomous are you when developing? ''If you answer both subquestions with "Yes, definitely", we are a tad confused. ;-)''
* How autonomous are you when developing?
** Do you like to discuss changes intensively and not start coding until you know what you want to do?
** Do you like to discuss changes intensively and not start coding until you know what you want to do?
''It is usually enough if we agree on the "boundary conditions" from that point I can take care of it''
** Do you like to code a proof of concept to 'see how it turns out', modifying that and taking the risk of having work thrown away if it doesn't match what the project or original proponent had in mind?
** Do you like to code a proof of concept to 'see how it turns out', modifying that and taking the risk of having work thrown away if it doesn't match what the project or original proponent had in mind?
''When writing octave scripts playing around with ideas is quite easy. I usually try out the ideas in command line and if the subsequent steeps seem to work I append them to the script''


== Y: Your task ==
== Y: Your task ==
* Did you select a task from our list of proposals and ideas?
* Did you select a task from our list of proposals and ideas?
** If yes, what task did you choose? Please describe what part of it you especially want to focus on if you can already provide this information. ''Please also wiki-link the page for your elaborated proposal here.''
** If yes, what task did you choose? Please describe what part of it you especially want to focus on if you can already provide this information. ''Please also wiki-link the page for your elaborated proposal here.''
** If you apply for a task you have added yourself instead, please describe this task, its scope and people you already talked to concerning it. What field of tasks did you miss on the list?
** If you apply for a task you have added yourself instead, please describe this task, its scope and people you already talked to concerning it. What field of tasks did you miss on the list?


I would like to work on solving the problem described [[Summer_of_Code_Project_Ideas#Symbolic_package|here]]. Because the recent discussion on the octave-maintainers mailing list suggests it would be better to prepare a general method for liking Octave to Python and than apply this to this specific issue I would follow this way.


As already mentioned in the discussion there already exist a library intended for this purpose, namely Pytave. The library was intended to be used to calling Octave code from Python code, but as suggested its code base can potentially serve for two-way communication, especially because it already contains all the required conversions between Python and Octave types.


I would like to implement a general algorithm for maximum entropy reconstruction. This is an algorithm for estimating distributions and have applications in various inverse or ill-posed problems. It is used for deblurring/deconvolution of images, power spectrum estimation, smoothing, measurement data processing in biology, physics and more.
My project would consist of three main parts:
 
* Cleaning up the Pytave library. This would include extracting the conversion functions between octave types and Python types (numpy arrays + primitive types), possibly leaving out legacy Python numeric types. This part would have to also include some C interface for both Octave and Python functions with proper exception mapping.
The algorithm would find its place in one of the existing packages (where ''optim'' or ''signal'' sound appropriate) or as a separate package. I plan to prepare two versions of the general algorithm, (temporal name {{codeline|maxent}})
* Writing an Octave module which would allow to call Python functions from Octave. This part would be realized as oct-files linking to the code prepared in the previous step (probably as a part of Pytave). This part would also have to include some Python session management. As a stand alone package it could be become a useful thing by itself.
* a version for problems defined by matrix. The function's declaration should be something like this
* Substituting present way of communication between Octave and Python in Symbolic Package. Since now everything is said to be done on strings, substituting current pipe approach to the one resulting from the previous step shouldn't cause much too trouble.
{{Code|Matrix problem declaration|<syntaxhighlight lang="octave" style="font-size:13px">function [x,info,...]=maxent(y,D,sigma,alpha=0.95, model=1, optset)
 
</syntaxhighlight>}}
 
 
where {{codeline|y} is the data vector, and {{codeline|D}} is the transformation matrix. {{codeline|sigma}} should be a vector or scalar which describes standard deviation of values of {{codeline|y}}. The optional parameter {{codeline|alpha}} and {{codeline|model}} describe confidence and a priori distribution of {{codeline|x}} (defaults to flat) respectively. The last parameter {{codeline|optset}} would allow to pass additional parameters to function, similar to the ones in {{codeline|optim}} package.
 
The returned value {{codeline|x}} is such that
 
<math> y \approx Dx</math>
 
where each of the coordinates of {{codeline|y}} lies within {{codeline|alpha}} confidence interval (normal distributed error assumed). Out of all possible {{codeline|x}} the one with the highest entropy is chosen. {{codeline|info}} describes the convergence of the algorthm. The other returned parameters will describe final gradients, Hessians and Lagrange's coefficient.
 
* another version would be defined for a non-linear function. The declaration would very similar
{{Code|Functional problem declaration|<syntaxhighlight lang="octave" style="font-size:13px">function [x,info,...]=maxent(y,fun,sigma,alpha=0.95, model=1, optset)
 
 
</syntaxhighlight>}}
 
All the parameters have the similar meaning here, and the new parameter {{codeline|fun}} is the handle to a function which accepts vector argument, which describes the problem to be inverted. This time the returned value should obey
 
<math> y \approx f(x)</math>
 
It is convienient to have this version of the algorithm for problem where obtaining the transformation matrix is difficult to compute or affects performance (think fft). The algorithm is expected to give good results for linear functions. For not-too-complicated non-linear cases the chances are still there.
 
Additional  work will be put to provide some wrapper functions to allow the user quickly use MEM in their problem. This includes function for 1D and image deconvolutions, time series components analysis, power spectral estimation and other applications I will be able to find in Matlab or other computational software.


Another sub-task is to analyze the speed and numerical precision of the implemented algorithms.
Timeline (brief):
* Getting involved -- two weeks
* Cleaning Pytave -- four weeks
* Octave module for Python -- two weeks
* Symbolics -- two weeks
(since in June-August period there are 13 weeks there still is some reserve for holidays and possible delays)


* Please provide a rough estimated timeline for your work on the task. ''This should include the GSoC midterms and personal commitments like exams or vacation ("non-coding time"). Optionally include two or three milestones you expect.''
[[Category: Summer of Code]]
[[Category: Summer of Code]]

Latest revision as of 22:32, 26 April 2015

A: An introduction[edit]

  • Please describe yourself in three sentences, one of them regarding your current studies.

I am doing my PhD in computer science. I am also a bit concerned about my privacy here and would like not to disclose too much personal information here.

    • Which languages do you speak?

I prefer to communicate in English

    • What's your overall background?

computer science

  • Why do you want to participate in the Google Summer of Code? What do you hope to gain by doing so?

I want to add some functionality to Octave. I believe it is a good occasion to get to know Octave's internals and get some extra money from Google

    • Please also describe your previous experience with the GSoC, if any.

This is my first time

  • Why are you choosing Octave?

If there is possibility to improve the tool I'm using almost every day why should I choose anything else?

C: Contact[edit]

  • Please state the (unique and identical where possible) nick you use on IRC and any other communication channel related to Octave.

I am using ozzy

  • Which time zone do you live in? Will that change over GSoC duration?

UTC+2

  • Please state the timeframe (in UTC+0) when you feel most comfortable working during GSoC. Where are your time buffers?

I usually start at 7:00 and try not to spend more than 8 hours in front of the computer. I can also sometimes shift it into the eventing

E: Coding experience[edit]

This part is one of the more important ones in your application. You are allowed to be as verbose as you want, as long as you stay on topic ;-)

  • Please describe your experience with C++, Octave or Matlab m-scripts, OpenGL and Qt.

I do a lot of scripting in Octave for my research and sometimes I have to port them to Matlab. I have quite good experience in C++. I know basics of Qt and have some minor experience in OpenGL.

  • Please describe your experience with other programming languages.

I often use Python for scripting. I also believe I have good experience in developing algorithms for GPGPU.

  • Please describe your experience with being in a development team.

I am a leader of a medium-sized simulation software which I do with my colleagues for our research work. It it written in C++ and heavily depends on templates. Simulation results are further processed in Octave. The development of the project progresses slowly. We have rather friendly atmosphere in our group. If there are any differences between us, we usually resolve them on a meetings which tend to be very long sometimes

  • Please describe the biggest project you have written code for and what you learned by doing so. Also describe your role in that project over time.

The biggest project I have written code for was an medical image processing platform for a big company. I was one of the developers who worked on the actual data processing being done inside the application. This is were I've really learned how to use basic development tools like version control, unit testing, debugger and how to document the code.

  • Please state the commits and patches you already contributed to Octave.

I didn't commit anything to Octave so far

F: Feeling fine[edit]

  • Please describe (in short) your experience with the following tools: We only use this question to determine where you need guidance, not for rating! We by no means expect you to be familiar with all of these and you'll won't necessarily need them while working with us.
    • IRC and mailing lists

I don't have any problem using them

    • Mercurial or other source code management systems

I have some experience with SVN and GIT, I believe Hg is not much different

    • Mediawiki or other wiki software

They do not seem to be difficult either.

    • make, gcc, gdb or other development tools

I'm fine with them

  • What will make you actively stay in our community after this GSoC is over?

O: Only out of interest[edit]

  • Did you ever hear about Octave before?

Yes I did. I started using it on my second year of studies where it was a recommended tool for signal processing on my university

    • If so, when and where? How far have you been involved already?

I am using Octave in daily basis for my research work and I actually prefer it over Matlab due to relaxed syntax, easy access to additional packages and lower price ;)

  • What was the first question concerning Octave you could not find an answer to rather quickly?

Unfortunately there was a lot of them and they mostly relate to poorly documented packages

P: Prerequisites[edit]

  • Please state the operating system you work with.
    • If you have access to more than one, please state them and the conditions under which you are granted this access.

I have one computer with Debian Linux (it's in some state between Wheezy and Jesse) and Windows 7 -- as an alternative boot configuration. I also have an access the OSX 10.10 on my other computer

  • Please estimate an average time per day you will be able to (if separated) access
    • an internet connection

16 hours -- I need to sleep sometimes

    • a computer

8 hours -- I' trying to not spend more time in front of a computer than that

    • a computer with your progressing work on

8 hours

  • Please describe the degree up to which you can install new software on computers you have access to.

I can install anything as long as I know what it does

S: Self-assessment[edit]

  • Please describe how useful criticism looks from your point of view as committing student.
  • How autonomous are you when developing?
    • Do you like to discuss changes intensively and not start coding until you know what you want to do?

It is usually enough if we agree on the "boundary conditions" from that point I can take care of it

    • Do you like to code a proof of concept to 'see how it turns out', modifying that and taking the risk of having work thrown away if it doesn't match what the project or original proponent had in mind?

When writing octave scripts playing around with ideas is quite easy. I usually try out the ideas in command line and if the subsequent steeps seem to work I append them to the script

Y: Your task[edit]

  • Did you select a task from our list of proposals and ideas?
    • If yes, what task did you choose? Please describe what part of it you especially want to focus on if you can already provide this information. Please also wiki-link the page for your elaborated proposal here.
    • If you apply for a task you have added yourself instead, please describe this task, its scope and people you already talked to concerning it. What field of tasks did you miss on the list?

I would like to work on solving the problem described here. Because the recent discussion on the octave-maintainers mailing list suggests it would be better to prepare a general method for liking Octave to Python and than apply this to this specific issue I would follow this way.

As already mentioned in the discussion there already exist a library intended for this purpose, namely Pytave. The library was intended to be used to calling Octave code from Python code, but as suggested its code base can potentially serve for two-way communication, especially because it already contains all the required conversions between Python and Octave types.

My project would consist of three main parts:

  • Cleaning up the Pytave library. This would include extracting the conversion functions between octave types and Python types (numpy arrays + primitive types), possibly leaving out legacy Python numeric types. This part would have to also include some C interface for both Octave and Python functions with proper exception mapping.
  • Writing an Octave module which would allow to call Python functions from Octave. This part would be realized as oct-files linking to the code prepared in the previous step (probably as a part of Pytave). This part would also have to include some Python session management. As a stand alone package it could be become a useful thing by itself.
  • Substituting present way of communication between Octave and Python in Symbolic Package. Since now everything is said to be done on strings, substituting current pipe approach to the one resulting from the previous step shouldn't cause much too trouble.

Timeline (brief):

  • Getting involved -- two weeks
  • Cleaning Pytave -- four weeks
  • Octave module for Python -- two weeks
  • Symbolics -- two weeks

(since in June-August period there are 13 weeks there still is some reserve for holidays and possible delays)