Archive for the ‘python-backend’ tag
LaKademy results – starting development of Python backend to Cantor

LaKademy is over and I will report about the event in several themed posts. This is about I developed during the Latin American meeting of KDE developers. More posts in LaKademy tag.
In this year I submitted a proposal to Google Summer of Code to develop a Python backend for scientific programming in Cantor. In the last year, I developed a Scilab backend. Unfortunately my proposal was not accepted.
But that’s okay, life goes on. This does not discourage me to begin the project.
During the LaKademy, I put as a goal to make communication between Cantor and Python. My first idea was to make a fork of Sage backend, which is also a technology based in Python. But in the evaluation phase of proposal for Google Summer of Code, the Cantor main developer, Alex Rieder, suggested to me take a look in Python/C API.
I began studying this API and other resources on the web (like this one, based on Elmer). I realized that send Python commands from C/C++ code would be easy, however, capture the output of the Python interpreter would be the real challenge. All this communication could be simple if Python would use standard streams by default, which would allow to use kprocess. Scilab didn’t support, but I implemented this support and it allowed the use of kprocess approach. However, in Python I could not do that – or would be harder to do it.
After searches in internet and some studies, I implemented a Python class that redirects messages from the Python interpreter, both conventional outputs and error messages, to a variable that can later be retrieved in a string type by Python/C API. Voilà!
Using this recovered variable, I can say that the core of Python backend for Cantor is working and ready to implement more features. Let see some screenshots:

Computation of a simple counter in Python

Cantor + Python + matplotlib in a external plot
Python error message in Cantor
From this implemented part, the new features that will be added: append plot figure in Cantor workspace, syntax highlighting, auto-complete pre-defined functions, and more. I intend to support in particular for libraries numpy, scipy and matplotlib, which when added to Python make it an interesting tool for scientific programming, like others we have in the free world as GNU Octave, Scilab, Maxima, Sage.
The code is avaiable in python-backend branch of Cantor repository. But remember: it is a experimental version, and the main fatures will be develop yet. Only communication between C++ <-> Python, the core of application, is working for now.
Watch this blog (or follow python-backend tag) for more informations about this project.

Python backend para Cantor nascendo no LaKademy

Aconteceu muita coisa no LaKademy e irei reportar tudo em vários posts temáticos. Este é sobre o que desenvolvi no sentido técnico, durante o encontro latino-americano dos colaboradores do KDE. Mais posts na tag LaKademy.
No Google Summer of Code deste ano submeti o projeto de desenvolvimento de um backend para programação científica em Python no Cantor, a exemplo do ano passado em que implementei um backend para o Scilab. Infelizmente a proposta não foi aceita.
Mas tudo bem, a vida continua. Isso não me desmotivaria a tocar o projeto para frente.
Durante a preparação para o LaKademy, coloquei como meta conseguir fazer funcionar a comunicação entre Cantor e Python. Minha primeira ideia foi fazer um fork do backend para Sage, que é também uma tecnologia de programação científica baseada em Python. Porém, ainda na fase de avaliação do projeto para o Google Summer of Code, o desenvolvedor principal do Cantor Alex Rieder me sugeriu a dar uma olhada na API Python/C.
Comecei a estudar esta API e outros materiais na web (como este, baseado em Elmer), ver exemplos e mais. Percebi que enviar comandos Python a partir de código C/C++ seria fácil, entretanto, a captura das saídas do interpretador seria o real desafio. Toda esta comunicação poderia ser simples se Python usásse standard streams por padrão, o que permitiria utilizar kprocess para fazer esta ponte. Scilab também não usava, o que me levou a implementar este suporte ano passado e possibilitar esta abordagem. Porém, em Python eu não poderia fazer isso – ou seria mais difícil de fazê-lo.
Com pesquisas na internet e alguns estudos, consegui implementar uma classe Python que redireciona as mensagens do interpretador, tanto de saídas convencionais quanto de de erro, para uma variável que depois pode ser recuperada em um tipo string via API Python/C. Voilà!
Com essa variável recuperada, posso dizer que o core do Python backend para Cantor está funcionando e pronto para implementação de mais funcionalidades. Vamos a alguns screenshots:

Computação de um simples contador em Python.

Cantor + Python + matplotlib realizando um plot externo
Mensagem de erro de Python no Cantor
Com esta parte implementada, as novas funcionalidades a serem adicionadas serão: adição de gráficos no ambiente de trabalho do Cantor; destaque de sintaxe; auto-complete de funções pré-definidas; e mais. Pretendo dar suporte em especial para as bibliotecas numpy, scipy e matplotlib, que quando adicionadas ao Python tornam-o uma interessante ferramenta para programação científica, a exemplo de outras que temos no mundo livre como GNU Octave, Scilab, Maxima, Sage e outras.
Quem quiser testar, o código está disponível no branch python-backend, no repositório do Cantor. Mas é sempre bom avisar: trata-se de uma versão experimental, e as principais funcionalidades ainda serão adicionadas. O que está funcionando é a comunicação de mão dupla C++ <-> Python, o core da aplicação.
Fiquem ligados para maiores informações.





