MATH2PY
|
|
Producción de una app/plugin web2py para herramientas matemáticas pythónicas
Descripción del proyecto
La idea básica de math2py es la de una interfaz web completa para el uso de librerías para matemáticas creadas en Python, instalable en web2py. math2py presenta un servicio de herramientas web para aplicaciones matemáticas y puede utilizarse como base de desarrollo en Python de subaplicaciones para uso técnico-científico de fácil instalación y personalización, con acceso a los paquetes de Python estándar y contribuciones.
La aplicación fue creada inicialmente como proyecto instalable (aplicación independiente) y luego modificada de modo que permita la instalación sobre el entorno web2py como aplicación o que se pueda incluir como accesorio de otra app central, en modo plugin [1]. La ventaja de la instalación como plugin es que un desarrollador o cualquier usuario con dominio de Python y web2py puede organizar las funcionalidades de la herramienta, agregando, quitando o modificando las subaplicaciones incluidas (componente según la convención para aplicaciones web2py [2])
Para facilitar y simplificar las condiciones de la instalación de la app, los paquetes, librerías y módulos para matemáticas incorporados en el dominio de la interfaz son de tipo Python puro. El motivo de esta elección es la usual restricción de acceso del intérprete Python a código C en ciertos servidores, como Google App Engine. La instalación de módulos de matemáticas en Python para la aplicación se ha limitado en cierto modo por esta restricción, y quedan afuera paquetes como sage, que es un recurso importante para la materia. Sin embargo, math2py es una aplicación para Python y es posible su adaptación para incorporar toda herramienta de matemáticas, como implementación alternativa y extendida de la versión estándar.
La aplicación incluye subaplicaciones de matemática básicas para resolución y presentación de problemas de álgebra lineal. Además incorpora interfaces para el cálculo y expresión gráfica de funciones.
¿Otra aplicación web matemática?
Las razones para utilizar math2py:
Es instalable en cualquier servidor compatible con web2py, incluyendo el modo de ejecución en desarrollo con la aplicación rocket server (ejecución en equipo local por puerto número 8000 o similar). De este modo, el uso del programa no se restringe a la instalación en red, y permite correrlo en una máquina local, por medio de un navegador web. El navegador web es entonces la pieza de soft principal utilizar math2py, desde la perspectiva del acceso básico a las herramientas. La forma aplicación web ó plugin requiere un lapso de tiempo de instalación despreciable entre descarga y carga mediante la interfaz admin de web2py.
Importa únicamente módulos de Python puro (por defecto), luego es posible utilizar cualquier librería Python (las restricciones de importación de módulos son limitaciones externas, en especial del servidor sobre el cual funciona web2py).
Solución open source, colaborativa, libre, sobre una plataforma de desarrollo web en crecimiento.
Permite el intercambio teórico y técnico por medio de notas y rutinas almacenables en la base de datos. Personalizable y ampliable. Una de las ventajas del desarrollo de una aplicación para web2py es la posibilidad de combinación de funcionalidades específicas (por ejemplo de herramientas técnicas y la publicación de notas e intercambio de datos como solución integrada en un solo servicio. Y el intercambio no quedaría relegado a la exhibición de información estadística ya que también sería posible la publicación de componentes instalables y módulos auxiliares.
Programada íntegramente en Python sobre el framework web2py [3]
Abierta a usuarios de todos los niveles (no se limita a aplicaciones para sistemas de instrucciones y notaciones específicas o sublenguajes técnicos).
Escenario preliminar: otras aplicaciones
Esta es una reseña del software con herramientas para matemáticas que preceden a math2py. No pretendo con esta breve lista hacer un estudio pormenorizado y completo de los recursos en software existentes ni comparar math2py con proyectos realmente avanzados, y de gran escala, como el caso de Matlab y SAGE. La idea es dar un simple panorama de las opciones con que se cuenta actualmente.
Matlab, de Mathworks:
MATLAB es "... un lenguaje de alto nivel y entorno interactivo que permite realizar tareas de cálculo intensivas con mayor velocidad que los lenguajes de programación tradicional como C, C++, y FORTRAN. ..." [4]. Se trata de una herramienta clásica y de amplia difusión (Inicialmente producida en 1984 [5]). Matlab es una aplicación propietaria (aunque es posible acceder a la interfaz de programación desde otros entornos).
A diferencia de Matlab, math2py no posee un lenguaje local para el ingreso de instrucciones, aunque en algunos casos se adoptó una sintaxis específica para permitir la carga de datos de entrada de las subaplicaciones. Por otra parte, para definición de funciones u operaciones es posible el ingreso de expresiones en Python o incluso JavaScript para funciones del lado del cliente.
Webmath, de Discovery:
Se trata de una aplicación on-line que permite al usuario explorar soluciones a problemas de matemática en forma interactiva. El sitio procesa datos ingresados por el usuario asociados a un problema determinado y presenta un planteo de solución aplicando una colección de soluciones programadas del lado del servidor. El proyecto está orientado al uso escolar y pedagógico pero no como un entorno programable. Webmath es una aplicación propietaria para la web.
En math2py es posible el desarrollo de soluciones como las presentadas por Webmath, con la ventaja del uso de herramientas avanzadas (helpers, sistema de plantillas, autenticación, componentes y widgets) incluidas en web2py.
Sage y The Sage Notebook: (open source):
"...Sage es un sistema libre y open-source con licencia GPL. Combina la potencia de muchos paquetes open-source existentes en una interfaz unificada basada en el lenguaje Python. Misión: Crear una alternativa viable open-source a Magma, Maple, Mathematica y Matlab. ..." [6]
The Sage Notebook es la interfaz web para sage. Permite correr un servidor que da acceso a herramientas para la producción de hojas con operaciones matemáticas y presentación de gráficos. Es una aplicación implementada en varios servidores, con acceso al código fuente y disponible como instalación. Las aplicaciones en línea son de libre acceso, creando una cuenta de usuario. math2py, al igual que SAGE utiliza la librería mpmath para el manejo de funciones.
Sage no es una herramienta práctica para un usuario inexperto. (Requiere ingreso de instrucciones Python avanzadas y dominio de la interfaz de programación) y está diseñada para un uso profesional y de investigación. El diseño de math2py busca presentar una interfaz rápida y fácil de utilizar para las operaciones más básicas y que permita complicar el funcionamiento de la aplicación gradualmente según el problema planteado, agregando elementos a la interfaz web.
Funcionalidades desarrolladas
Álgebra lineal
Resolver sistema, matriz aleatoria, combinación de operaciones, almacenamiento en servidor de datos de funciones y ecuaciones (block de notas de E/S), CSV, render LaTex de sistemas (a través de plugin_wiki de web2py y servicios de Google API)
- Números:
Identificar
Otras herramientas
Math panel: acceso a funciones de librerías incorporadas y documentación desde el navegador. Gráficos de tablas. Render LaTex de ecuaciones. Acceso a valores ingresados por el usuario almacenados en la base de datos. Conversión y almacenamiento en el sistema como CSV. Cálculo de funciones. Envío de comandos Python del lado del cliente.
Presentación de algunas herramientas
- Resolver sistema de ecuaciones
math2py resuelve sistemas de ecuaciones lineales por medio de la librería mpmath. La carga de los datos se hace utilizando la siguiente sintaxis:
1 1/5 | 3.5 0 3 | 6
Para la solución x1 = 31/10 y x2 = 2
Ingreso de sistema
Solución
Almacenamiento en servidor de operaciones
La aplicación permite almacenar y recuperar sistemas lineales en memoria durante la sesión del navegador, a través del objeto session de web2py. Resolver el sistema almacenado: procesa un sistema de ecuaciones almacenado en memoria durante la sesión del navegador (último sistema guardado) y presenta la solución en pantalla.
Convertir y resolver sistemas de ecuaciones como valores separados por comas (csv)
math2py puede convertir a y desde csv sistemas de ecuaciones procesando datos de tablas o de ingreso de texto del usuario en el cliente web.
Otras herramientas:
Opciones/comandos para sistemas lineales. Matriz aumentada / valores aleatorios. Descomposición de Cholesky y vector aleatorio (combinación). Lista de matrices almacenadas.
Math panel
La función "=" procesa los argumentos en la caja de texto E/S para la función seleccionada. Argumentos de funciones: para el ingreso de texto (y presentación de resultados) se utiliza una caja de texo denominada I/O. La sintaxis (a, b, c, ...z) se adoptó para el ingreso de argumentos por similitud a la notación típica en lenguajes como Python o JavaScript. Ejemplo: (1,2,3), 4 es una lista compuesta de argumentos simples que contiene una secuencia (en la posición 1) seguida de un entero. La función de los paréntesis, a diferencia de su uso en Python, es diferenciar el inicio de una secuencia de argumentos de los argumentos simples de entrada.
La sintaxis para el ingreso de matrices es la siguiente (nótese la ausencia de comas):
[ [ x11 x12 ] [ x21 x22 ] ]
Esto equivale a la matriz:
| x11 x12 | | x21 x22 |
Este tipo de notación es válido sólo para funciones que aceptan matrices como argumento. En el caso de los vectores columna la notación es:
[ [ x1 ] [ x2 ] ]
Que equivale a:
| x1 | | x2 |
El segundo caso es el argumento b de matriz aumentada en mpmath y el primero el argumento A.
Se pueden embeber expresiones Python o código JavaScript en cada argumento por medio de llaves dobles {{ expresión Python }} o simples { código JavaScript } respectivamente.
Es válido el uso de n+nj para números complejos (sin paréntesis) en argumentos simples: 1-1j, (1+2j, 3.14+3.14j, 1). Estos tipos de valores son interpretados en el servidor. Como los valores numéricos de entrada son interpretados en el cliente web y procesados del lado del servidor con Python y JavaScript, la herramienta permite el uso de notación científica: 1e-10, 1.41e2+3.14j, (2.0005e-3, 0, 1)
La herramienta Math panel permite graficar funciones generadas por la función especial render, en el módulo auxiliar de math2py tools. Los parámetros de coordenadas para los gráficos son un conjunto de pares con la forma ((x1, y1), ... (xn yn)). math2py utiliza el servicio de generación de gráficos de la librería flot para jQuery. ( La función del gráfico es f(x) = x3)
Math panel: Gráficos
Funcionalidades pendientes
Agregado de librería de mpmath a la GUI web (solo se incluyó una parte mínima) Esquema de webservices para operaciones matemáticas inter-aplicación con JSON o SOAP
Recursos
El proyecto está alojado en https://sourceforge.net/projects/math2py/
Descarga de aplicación
https://sourceforge.net/projects/math2py/files/
Código fuente
http://math2py.hg.sourceforge.net/hgweb/math2py/math2py/
Licencia
Affero AGPLv3 (con especificaciones sobre uso en sistemas en red)
Requerimientos/Instrucciones de instalación:
math2py corre en cualquier equipo que soporte el framework web2py.
La instalación es simple:
- Descargar el instalador para web2py desde el sitio del proyecto
- Carga del instalador con el comando Load en la interfaz administrativa de web2py.
En el caso de instalación como plugin, se recomienda tener como referencia la sección plugins del manual de web2py: http://www.latinuxpress.com/books/drafts/web2py/caps/capz13.html#plugins
Luego de instalar como plugin la aplicación puede cargarse cada componente por medio del helper LOAD o los atajos definidos en el modelo (El único atajo disponible actualmente es plugin_math2py(), que carga la herramienta Math panel).
Dependencias
- web2py
- plugin_wiki (plugin oficial de web2py)
| [1] | http://www.latinuxpress.com/books/drafts/web2py/caps/capz13.html#plugins "...Así que ¿ por qué es llamado plugin ? Porque proporciona un mecanismo para empacar un subconjunto de una aplicación y desempacarlo encima de otra aplicación (es decir, plug-in (conectar)). Bajo esta definición, cualquier archivo en su aplicación puede ser tratado como un plugin. ..." |
| [2] | http://www.latinuxpress.com/books/drafts/web2py/caps/capz13.html#componentes "... Un componente puede estar compuesto de módulos, controladores y vistas, pero no hay ningún otro requisito estricto más que, cuando es incrustado en una página web, deba estar localizado dentro de una etiqueta html (por ejemplo un DIV, SPAN o IFRAME) y deba realizar su tarea independiente del resto de la página. ..." |
| [3] | Algunas funciones especiales fueron realizadas con jQuery/JavaScript para el desarrollo de la interfaz web. |
| [4] | Traducción del sitio web en inglés. |
| [5] | http://es.wikipedia.org/wiki/MATLAB |
| [6] | Traducción del sitio web en inglés. |
Help PET: Donate
blog comments powered by Disqus