AeroPython / aeropy

aeropy - Python tools for Aeronautical calculations
BSD 2-Clause "Simplified" License
10 stars 5 forks source link

Implementar ISA en C++ #3

Closed astrojuanlu closed 9 years ago

astrojuanlu commented 9 years ago
newlawrence commented 9 years ago

Me estoy volviendo un poco loco con esto de que se le pueda pasar un vector de alturas, para que se te devuelva un vector de cada una de las propiedades.

Que C++ se trague vectores de numpy como argumentos de sus funciones es algo que ya he conseguido con SWIG. El problema que tengo es con el valor de retorno de las funciones; de momento sólo se me ocurre:

En fin, la conclusión es, que necesito más tiempo para encontrar una solución que no sea tan chapucera. Pero con el final de estructuras este miércoles no llego al lunes ni de coña...

astrojuanlu commented 9 years ago

Descuida Alberto! Para el siguiente milestone lo vemos, aprueba estructuras primero! On Dec 12, 2014 10:34 PM, "Alberto Lorenzo Márquez" < notifications@github.com> wrote:

Me estoy volviendo un poco loco con esto de que se le pueda pasar un vector de alturas, para que se te devuelva un vector de cada una de las propiedades.

Que C++ se trague vectores de numpy como argumentos de sus funciones es algo que ya he conseguido con SWIG. El problema que tengo es con el valor de retorno de las funciones; de momento sólo se me ocurre:

  • Averiguar cómo diablos manjear mediante los punteros que devuelve SWIG los arrays estándar de C++ desde Python, y cargar un array de numpy con ellos (bucle en Python = lento).
  • Devolver un vector de la STL de C++, que SWIG convierte a una tupla de Python (hay que convertir luego la tupla en un numpy.array, lo que es lento, y encima tengo que crear ese vector desde C++ lo que añade más sobrecarga).
  • Alimentar la función C++ con una tupla de Python, y hacer con la salida lo del punto anterios. Es lo que más fácil, y más consistente en cuanto a interfaz, que puedo hacer con los conocimientos que tengo ahora, pero es feo; los suyo es trabajar directamente con los arrays de numpy.

En fin, la conclusión es, que necesito más tiempo para encontrar una solución que no sea tan chapucera. Pero con el final de estructuras este miércoles no llego al lunes ni de coña...

Reply to this email directly or view it on GitHub https://github.com/AeroPython/ISA/issues/3#issuecomment-66838719.

newlawrence commented 9 years ago

Actualizada la rama del C++.

Le he añadido la interfaz que se acordó (T, p, rho = std(h, dT = 0)). Para probarla el lunes, es sencillo:

  1. Clonad el repositorio (git clone https://github.com/AeroPython/ISA.git).
  2. Descompridlo y situaos en la raíz del mismo (dentro de la carpeta ISA).
  3. Activad mi rama (git checkout cpp-implementation)
  4. Compilad los fuentes utilizando el fichero setup.py con el siguiente comando (necesitaréis tener correctamente instalado g++ si utilizáis la versión de Anaconda para Linux):
python setup.py build_ext --inplace

Ya podéis utilizar la biblioteca iniciando Python desde el citado directorio:

from isa import std
std(0)

Siguen faltando muchas cosas por pulir que ya no puedo acabar para esta milestone. Entre ellas que las presiones y las densidades se joden para altura superiores a 43000 y pico metros, por lo que imagino que es un problema de conversión entre números de distinta precisión.

Al menos, la interfaz común está adoptada y he aprendido una forma buena de poder distribuir e integrar nuestros códigos (aún incluso con extensiones de otros lenguajes) utilizando disutils.

Agradecería todo el feedback que podáis, sobre todo las dificultades que tengáis intentando poner el tinglado en funcionamiento.

Muchas Gracias.

newlawrence commented 9 years ago

Bueno, a fatal de comentar (cosa que haré nada más acabar el examen, I promise). He dejado todo listo. La función cumple con los test y (ahora) es rápida como el rayo. Doy por cerrada mi parte.

astrojuanlu commented 9 years ago

¡Gracias @newlawrence! Si tienes un momento, no has fusionado los cambios más recientes de la rama master (falta el commit 7dd373b).

$ git checkout master
$ git fetch origin  # Actualizar los cambios
$ git merge master --ff-only  # Adelantar la rama master
$ git checkout alberto-cpp
$ git merge master

Por lo demás, ¡todo correcto!

newlawrence commented 9 years ago

Done!