close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 10 years ago

Last modified 9 years ago

#1812 accepted task

API de acceso nativo a R

Reported by: Jorge Owned by: Jorge
Priority: highest Milestone: TOL Packages
Component: R API Version: 3.1
Severity: critical Keywords:
Cc: Pedro Gea, César Pérez Álvarez, Víctor de Buen Remiro

Description

Crear un paquete basado en RInside para facilitar la evaluación de código R desde TOL.

Se debe facilitar el pase de parámetros de manera nativa.

Se debe facilitar la recuperación de objetos y resultados de manera nativa.

Attachments (1)

test_2015_05_10_15_22.zip (762.8 KB) - added by Jorge 10 years ago.
Resultados de ejecutar tol_tests

Download all attachments as: .zip

Change History (112)

comment:1 Changed 10 years ago by Víctor de Buen Remiro

En realidad hay que hacer dos cosas, llamar a R desde TOL y viceversa, pero gran parte del trabajo sería común, pues en ambos casos hace convertir los objetos en ambos sentidos.

En principio sólo hay que tratar con los tipos de datos comunes a ambos lenguajes

  • Escalares: Real: nativo Complex: complex Text : nativo Date : Hay varios tipos y clases
  • Vectoriales:
    • Matrix: corresponde a vectores y matrices en R
    • VMatrix: No estoy seguro de si en R están los tipos de "Cholmod", pero si no algún otro tupo de matriz sparse habrá. Si el subtipo es "Blas" no hay problema.
    • Set: Habría que restringir recursivamente a conjuntos de los tipos admitidos
    • Serie: El tipo de datos ts de R es capaz de manejar series temporales en algunos fechados básicos como diario, semanal, mensual, trimestral y anual. También hay otras clases algo más completas.


comment:2 Changed 10 years ago by Jorge

(In [6390]) refs #1812, modulo cmake para configurar las opciones de compilación con RInside

comment:3 Changed 10 years ago by Jorge

(In [6391]) refs #1812, paquete para incrustar R dentro de TOL, por ahora solo hay algunas pocas funciones de prueba, se han hecho los conversores para Real, Text y Date. La compilación en Windows todavía no está muy clara. En Linux funciona bien.

comment:4 Changed 10 years ago by Jorge

(In [6392]) refs #1812, conversores para Matrix

comment:5 Changed 10 years ago by Jorge

(In [6395]) refs #1812, implementado NewEnv, RemoveEnv, Assign. Ya pasamos a R objets nativos de TOL (Real, Text, Date, Matrix). Proximos pasos: leer objetos nativos equivalentes (Get), incorporar otros tipos de objetos (Set, Complex, VMatrix)

comment:6 Changed 10 years ago by Jorge

(In [6396]) refs #1812, renombramos Assign a SetVar. Implementado GetVar para los tipos Real, Text, Date, Matrix. Corrección de errores.

comment:7 Changed 10 years ago by Jorge

En windows los binarios de Rcpp y RInside no son compatibles con VisualStudio.

Hay que explorar si el binario de R lo es. En caso positivo el camino puede ser compilar Rcpp y RInside dentro del paquete TolR (TolRInside) de esa forma ya no habria que enlazar con binarios compilados desde C++ sino el binario R.dll compilado en C estandar.

comment:8 Changed 10 years ago by Jorge

Status: newaccepted

comment:9 Changed 10 years ago by Jorge

En este enlace se decribe como usar R desde una aplicación compilada con VisualStudio

http://cos.name/wp-content/uploads/2009/12/Integrate-R-into-C.pdf

comment:10 Changed 10 years ago by Jorge

Con las siguientes instrucciones se puede generar el .lib de R, pexports es un ejecutable de mingw32

pexports R.dll > R.exp
lib /def:R.exp /out:Rdll.lib /machine:X86

comment:11 Changed 10 years ago by Jorge

Rinside necesita de gettimeofday el cual no existe en windows.

comment:12 Changed 10 years ago by Jorge

Hay que desabilitar "sugar" de Rcpp ya que usa caracteristicas avanzadas del compilador no implementadas en Visual C++ 2010

comment:13 Changed 10 years ago by Jorge

(In [6403]) archivos de soporte a la compilación con cmake. refs #1812, #1818

comment:14 Changed 10 years ago by Jorge

(In [6404]) archivos CMakeLists de soporte a la compilación con cmake, falta configuración de libs externas. refs #1812, #1818

comment:15 Changed 10 years ago by Jorge

(In [6405]) archivos CMakeLists de soporte a la compilación con cmake: FindODBC.cmake. refs #1812, #1818

comment:16 Changed 10 years ago by Jorge

(In [6406]) archivos CMakeLists de soporte a la compilación con cmake: tomados desde VTK. refs #1812, #1818

comment:17 Changed 10 years ago by Jorge

(In [6407]) archivos FindXYZ.cmake de soporte a la compilación con cmake. refs #1812, #1818

comment:18 Changed 10 years ago by Jorge

(In [6408]) literal de cadena debe ir con const char*. refs #1812, #1818

comment:19 Changed 10 years ago by Jorge

(In [6409]) estandarizando el config.h segun lo que se genera con cmake para facilitar la transicion de bjam a cmake. refs #1812, #1818

comment:20 Changed 10 years ago by Jorge

(In [6410]) estandarizando segun lo que se genera con cmake para facilitar la transicion de bjam a cmake, BIntPair debe ir fuera del #ifndef HAVE_ROUND refs #1812, #1818

comment:21 Changed 10 years ago by Jorge

(In [6411]) refs #1812, #1818

comment:22 Changed 10 years ago by Jorge

(In [6412]) completando CMakeLists.txt, tol y tolcon compilan pero no encuentra stdlib, refs #1812, #1818

comment:23 Changed 10 years ago by Jorge

(In [6415]) plantilla de config.h basada en cmake, refs #1812, #1818

comment:24 Changed 10 years ago by Jorge

(In [6417]) refs #1812, #1818, macros para la conversion de path en msys. En MSYS find_path & find_library necesitan de los path nativos de WIN32.

comment:25 Changed 10 years ago by Jorge

(In [6418]) CMakeLists.txt para dbdrivers, refs #1812, #1818

comment:26 Changed 10 years ago by Jorge

(In [6421]) algunos HAVE_ adicionales, refs #1812, #1818

comment:27 Changed 10 years ago by Jorge

(In [6434]) incorporamos FindCBLAS a la compilación basada en cmake, refs #1812, #1818

comment:28 Changed 10 years ago by Jorge

(In [6435]) incorporamos FindCLAPACK a la compilación basada en cmake, refs #1812, #1818

comment:29 Changed 10 years ago by Jorge

(In [6443]) refs #1812, #1818, primera version compilable con Rtools (mingw-gcc) hay que hacer un repaso de los #ifdef _MSC_VER, documentar el proceso y crear un .bat para automatizar todo el proceso de compilacion.

comment:30 Changed 10 years ago by Jorge

(In [6444]) refs #1812, #1818, correcion de warning de compilacion con gcc "duplicated section ..." emitido al enlazar la dll de tol.

comment:31 Changed 10 years ago by Jorge

(In [6445]) refs #1812, #1818, algun efecto fantasme esta pasando en la busqueda de fftw

comment:32 Changed 10 years ago by Jorge

(In [6450]) refs #1812, #1818, las funciones inline no deberia declararse como exportables desde dll, es un warning detectado al compilar los paquetes en concreto MatQuery.

comment:33 Changed 10 years ago by Jorge

(In [6454]) refs #1812, refs #1818 se requiere kmlocal en el path de los includes para bmath/bprdist

comment:34 Changed 10 years ago by Jorge

(In [6455]) refs #1812, refs #1818 cambios requeridos desde la compilación de toltcl con CMake, DLLEXPORT extra en conflicto con DLLEXPORT de tcl, se fuerza el const de algunos argumentos

comment:35 Changed 10 years ago by Jorge

(In [6456]) refs #1812, refs #1818, compilación basada en CMake, eliminación de warnings, automatización de la regla install.

Configuración en Linux como:

cmake -DCMAKE_TOOLCHAIN_FILE=../linux-i686.toolchain.cmake -DTOL_PREFIX_PATH=/usr/local/tol32 -DCMAKE_BUILD_TYPE=Release -DTCL_LIBRARY=/usr/local/tcl8.5-i686/lib/libtcl8.5.so ..

comment:36 Changed 10 years ago by Jorge

(In [6457]) refs #1812, refs #1818, eliminamos traza inncesaria

comment:37 Changed 10 years ago by Jorge

(In [6458]) refs #1812, refs #1818, reglas install para tol

comment:38 Changed 10 years ago by Jorge

(In [6459]) refs #1812, #1818, actualizadas reglas install para windows

comment:39 Changed 10 years ago by Jorge

(In [6460]) refs #1812, #1818, deshabilitamos la interseccion de errores de gsl, esto debe hacerse desde TOL

comment:40 Changed 10 years ago by Jorge

(In [6462]) refs #1812, #1818, eliminamos dependencia binaria de gsl desde el API externa de TOL, instalamos tambien los include de sparsehash

comment:41 Changed 10 years ago by Jorge

(In [6463]) refs #1812, #1818, configuracion especifica para WIN32 donde concoemos bien donde estaran los archivos devel que tomamos de la variable TOL_PREFIX_PATH

comment:42 Changed 10 years ago by Jorge

(In [6464]) refs #1812, refs #1818 en Linux

CMake Error at generic/CMakeLists.txt:18 (install):

install TARGETS given no LIBRARY DESTINATION for shared library target
"toltcl".

comment:43 Changed 10 years ago by Jorge

(In [6465]) refs #1812, refs #1818, en windows la regla install es distinta para la dll

comment:44 Changed 10 years ago by Jorge

(In [6466]) refs #1812, refs #1818, mejora la busqueda de las librerias BLAS/LAPACK de R

comment:45 Changed 10 years ago by Jorge

(In [6467]) refs #1812, refs #1818, tolsh es parte de toltcl a partir de ahora

comment:46 Changed 10 years ago by Jorge

(In [6468]) refs #1812, refs #1818, tolsh.exe debe compilarse sin TCL_STUBS, tolsh necesita de tcl84.a

comment:47 Changed 10 years ago by Jorge

(In [6469]) refs #1812, usamos FindTOL.cmake

comment:48 Changed 10 years ago by Jorge

(In [6470]) refs #1812, usamos FindTOL.cmake

comment:49 Changed 10 years ago by Jorge

(In [6471]) refs #1812, refs #1818, modulos de soporte a la compilación de TolRInside

comment:50 Changed 10 years ago by Jorge

(In [6472]) refs #1812, refs #1818, directorio de prueba para cmake

comment:51 Changed 10 years ago by Jorge

(In [6475]) refs #1812, refs #1818, reusamos la definicion TOL_DLLEXPOR

comment:52 Changed 10 years ago by Jorge

(In [6476]) refs #1812, refs #1818, en WIN32 RInside:::LdFlags() esta retornando el camino de la lib con comillas y eso confunde al linker.

"C:/Archivos de programa/R/R-3.1.2/library/RInside/lib/i386/libRInside.a"

comment:53 Changed 10 years ago by Jorge

(In [6477]) refs #1812, refs #1818, actualizacion de compilacion de TolRInside en Win32

comment:54 Changed 10 years ago by Jorge

(In [6479]) refs #1812, refs #1818, algunas expresiones de prueba de uso

comment:55 Changed 10 years ago by Jorge

(In [6486]) refs #1812, refs #1818, pruebas para detectar el sistema

comment:56 Changed 10 years ago by Jorge

(In [6494]) refs #1818, #1812, mejoras en la busqueda de R en Windows

comment:57 Changed 10 years ago by Jorge

(In [6495]) refs #1812, refs #1818, correccion en la regla install de tol

comment:58 Changed 10 years ago by Pedro Gea

(In [6508]) Refs #1826, #1812
Se modifica la lectura/escritura de polinomios (Polyn) en OIS.

comment:59 Changed 10 years ago by Jorge

(In [6510]) refs #1818, #1812, compilación del ejecutable de tolbase basado en CMake

comment:60 Changed 10 years ago by Jorge

(In [6511]) refs #1812, refs #1818, al enlazar tolbase.exe en windows hay que dar la opcion -mwindows para que no abra una consola del DOS

comment:61 Changed 10 years ago by Jorge

(In [6524]) refs #1812, refs #1818, correcciones en el post-build

comment:62 Changed 10 years ago by Jorge

(In [6531]) refs #1818, #1812 win_findexe.c para windows unix_findexe.c para linux

comment:63 Changed 10 years ago by Jorge

(In [6545]) compilación basada en CMake para TclCore, subimos número de versión.

refs #1812, #1818

comment:64 Changed 10 years ago by Jorge

(In [6546]) refs #1812, #1818, LTDL se requiere en TclCore y en windows se debe explicitar en el paso link de la dll

comment:65 Changed 10 years ago by Jorge

(In [6547]) refs #1812, #1818, LTDL se requiere en TclCore y en windows se debe explicitar en el paso link de la dll

comment:66 Changed 10 years ago by Jorge

(In [6548]) refs #1812, #1818, la regla install incluye los archivos de desarrollo de libltdl ya que hay paquetes binarios que lo requieren como TclCore

comment:67 Changed 10 years ago by Jorge

(In [6549]) refs #1812, #1818, actualizacion de la compilacion de Toltcl para windows, es requerido por TclCore

comment:68 Changed 10 years ago by Jorge

(In [6550]) refs #1812, #1818, actualizacion de la compilacion de Toltcl para windows, es requerido por TclCore

comment:69 Changed 10 years ago by Jorge

(In [6551]) refs #1812, #1818, actualizacion de la compilacion de Toltcl para windows, es requerido por TclCore

comment:70 Changed 10 years ago by Jorge

(In [6566]) refs #1812, 1818, los drivers de conexion nativo a BBDD debe incluir el numero de version al final del nombre, por ahora se pone fijo luego lo configuraremos, hay que prestar atencio a su definición

./config.h.in:#define DB_MODULES_SONAME 0

comment:71 Changed 10 years ago by Pedro Gea

(In [6576]) Refs #1812, #1818,
Se renombran añadiendo un 0 todos los términos.
Véase [6566]

comment:72 Changed 10 years ago by Jorge

(In [6589]) refs #1812, #1818, correccion en la inicializacion de TolAppData con el compilador mingw

comment:73 Changed 10 years ago by Jorge

(In [6591]) refs #1812, #1818, #refs 1783, el archivo donde se redireccionan los errores debe estar escapado.

comment:74 Changed 10 years ago by Jorge

(In [6595]) refs #1812, #1818, incluyo el TOL_PREFIX_PATH en el camino de busqueda de CMake

comment:75 Changed 10 years ago by Jorge

(In [6599]) refs #1831, #1812, #1818, se actualiza el codigo para el formato basado en variantes, subimos la variante mingw32

comment:76 Changed 10 years ago by Pedro Gea

(In [6604]) Refs #1812, #1842
Se crean dos paquetes para el uso de TOL desde R.

comment:77 Changed 10 years ago by Jorge

(In [6605]) refs #1831, #1812, #1818, faltaban las libs de desarrollo

comment:78 Changed 10 years ago by Jorge

(In [6608]) refs #1831, #1812, #1818, forzamos IPOPT_DIR a nuestro directorio

comment:79 Changed 10 years ago by Jorge

(In [6609]) refs #1831, #1812, #1818, correciones para encontrar bien IPOPT en windows

comment:80 Changed 10 years ago by Jorge

(In [6626]) refs #1831, #1812, #1818, corregimos la inicializacion en windows.

comment:81 Changed 10 years ago by Jorge

(In [6630]) refs #1818, #1812, se corrige la carga de Toltcl desde R

comment:82 Changed 10 years ago by Jorge

(In [6631]) refs #1839, #1812, #1818, dll para MinGW_32/toltcl.dll

comment:83 Changed 10 years ago by Jorge

(In [6664]) refs #1838, #1812, #1818 actualizacion de la compilacion con -mno-align-double

comment:84 Changed 10 years ago by Jorge

(In [6665]) refs #1838, #1812, #1818 actualizacion de la compilacion con -mno-align-double

comment:85 Changed 10 years ago by Jorge

(In [6666]) refs #1828, #1812, #1818 actualizacion de la compilacion de TolEXcel con -mno-align-double

comment:86 Changed 10 years ago by Jorge

(In [6667]) refs #1839, #1812, #1818 actualizacion de la compilacion de TclCore con -mno-align-double

comment:87 Changed 10 years ago by Jorge

(In [6668]) refs #1830, #1812, #1818 actualizacion de la compilacion de TclGsl con -mno-align-double

comment:88 Changed 10 years ago by Jorge

(In [6669]) refs #1812, #1818, #1831, recompilacion de las libs de ipopt con las opciones -mno-align-double

comment:89 Changed 10 years ago by Jorge

(In [6670]) refs #1831, #1812, #1818 actualizacion de la compilacion de TolIpopt con -mno-align-double

comment:90 Changed 10 years ago by Jorge

(In [6671]) refs #1812, #1818, fixes #1847 MememoryStatus retorna unknown (similar a Linux) para la variante mingw32

comment:91 Changed 10 years ago by Jorge

(In [6672]) refs #1812, #1818, antes de copiar la dll se ejecuta strip para reducir el "size" del paquete que se subira al repositorio

Changed 10 years ago by Jorge

Attachment: test_2015_05_10_15_22.zip added

Resultados de ejecutar tol_tests

comment:92 Changed 10 years ago by Pedro Gea

(In [6725]) Refs #1812, #1833
Se incorpora una nueva API en la línea de los paquetes de TOL para R.
Inicialmente se hacen públicos los métodos REval, RCall y RExecute.

comment:93 Changed 10 years ago by Jorge

(In [6726]) refs #1818, #1812 CPACK se manejará en un proyecto espcifico de instalacion.

comment:94 Changed 10 years ago by Pedro Gea

(In [6727]) Refs #1812, #1833
Se modifica el modo de publicar la API. Se hacen privados los métodos que no desean publicarse.

comment:95 Changed 10 years ago by Pedro Gea

(In [6738]) Refs #1812, #1833
Se evita la carga por defecto del paquete de R tolKit.
Se carga tolLink bajo demanda, allí donde aún es necesario, si está disponible o se advierte de su ausencia.
Se chequea la variable de entorno R_HOME antes de cargar la DLL.

comment:96 Changed 10 years ago by Pedro Gea

(In [6741]) Refs #1812, #1834
Se incorporan los archivos .hpp a la instalación.

comment:97 Changed 10 years ago by Jorge

(In [6744]) refs #1812, #1818, eliminamos dependencia de Rblas y Rlapack, hay que usar el nuevo contrib desde http://packages.tol-project.org/win32/development/toldevel-rtools-m32.exe

Luego hay que limpiar el cache de cmake para refrescar las nuevas libs de blas/lapack, para ello debemos ejecutar desde el directorio de compilacion la siguiente instruccion:

cmake -U BLAS -U LAPACK .

Reccompilar con:

mingw32-make

comment:98 Changed 10 years ago by Víctor de Buen Remiro

En https://www.dropbox.com/sh/gs0diwn3pthysrz/AAChNpPpZ71Z8RlC86zsQTmma?dl=0 he dejado un ejemplo de llamada a la librería de optimización NOMAD a través de R. Se trata de un ejemplo trivial de una regresión lineal que me sirve para evaluar la librería y aprender a usarla.

evaluator.tol : Evaluación de la función objetivo a minimizar
optimice.R    : Llama a la librería NOMAD para optimizar una función TOL
run.tol       : Ejecuta todo el programa desde TOL llamando a evaluator.tol y optimice.R 
run.R         : Ejecuta todo el programa desde R llamando a evaluator.tol y optimice.R 
                (Hay que cambiar el setwd!)

Si ejecuto desde R (run.R) funciona perfectamente pero cuando ejecuto desde TOL (run.tol) me está dando este error que soy incapaz de interpretar y que me impide seguir con la evaluación.

ERROR: [1] Exception caught: Error evaluating: assign("anything.0.1917802977841348", {library(tolLink)
library(crs)
numVar <- tolGet('n')
x0 <- tolGet('x0')
y0 = tolExecute('F::eval',x0, grammar='Real')
eval.f <- function ( x ) { 
  f = tolExecute('F::eval',matrix(x, nrow=numVar, ncol=1), grammar='Real') 
  return ( as.double(f) );
}
bbin <- rep(0,numVar)
bbout <-c(0, 2, 1)
lb <- rep(-2.0,numVar)
ub <- rep(+2.0,numVar)
opts <-list('MAX_BB_EVAL'=1000,
            'MIN_MESH_SIZE'=0.00001,
            'INITIAL_MESH_SIZE'=0.1,
            'MIN_POLL_SIZE'=0.0001)
result=snomadr(eval.f=eval.f,n=numVar,  x0=x0, bbin=bbin, bbout=bbout, lb=lb, ub=ub, opts=opts)
result[['solution']]
}, envir=tolRI)
0

[Call stack]
  [2] Anything TolRInside::API::_.RGetAnything (Text expression)
  [1] Anything TolRInside::API::REval (Text expression)

comment:99 in reply to:  98 Changed 10 years ago by Pedro Gea

Se tratará en #1850

comment:100 Changed 10 years ago by Jorge

(In [6751]) refs #1812, #1818, R_HOME solo es necesario en Windows

comment:101 Changed 9 years ago by Pedro Gea

(In [6834]) Refs #1812
Se evita la asignación de los nombres de los argumentos de TOL en R en la función RExecute. Para forzar esto, se necesita anteponer "".

comment:102 Changed 9 years ago by Pedro Gea

(In [6839]) Refs #1812
Se amplía el límite de llamadas recursivas de _.RGetAnything mientras se determina su necesidad.

comment:103 Changed 9 years ago by Pedro Gea

(In [6840]) Refs #1812
Se revisa _.RGetDate

comment:104 Changed 9 years ago by Jorge

(In [6857]) refs #1812, #1818, #1866, se corrigen errores de busqueda de R.dll y RInside, buscamos los path mediante Rscript

comment:105 Changed 9 years ago by Jorge

(In [6858]) refs #1866, #1812, en linux hay que proteger los argumentos para que no los interprete el bash, subimos el número de versión para que los usuarios actuales puedas referenciar a 1.1 como su versión estable

comment:106 Changed 9 years ago by Pedro Gea

(In [6863]) Refs #1812
Se utiliza un entero autonumérico para evitar que se repita una variable que no se pudo decompilar.

comment:107 Changed 9 years ago by Pedro Gea

(In [6865]) Refs #1866, #1812
Se trasladan las funciones de chequeo y uso de Rscript a un archivo auxiliar. Se revisan algunas que están dando problemas.

comment:108 Changed 9 years ago by Pedro Gea

(In [6867]) Refs #1866, #1812
En Windows se intenta evitar el uso de Rscript si es posible.

comment:109 Changed 9 years ago by Jorge

(In [6870]) refs #1812, deshabilitamos callback en TolRInside si RInside no lo ofrece

comment:110 Changed 9 years ago by Pedro Gea

(In [6916]) Refs #1842, #1812
tolLink:
Se incorporan llamadas especiales a TolRInside para permitir mantener los objetos compilados con tolDefine.
Se mantienen también los nameblocks obtenidos en R como referencias.
Se incorpora un nuevo método tolEval, para evaluar expresiones cualesquiera.
Se incorpora un nuevo método tolElement para acceder a elementos y miembros de conjuntos y nameblocks.
Se crea un Makevars específico para Windows.

comment:111 Changed 9 years ago by Pedro Gea

(In [6917]) Refs #1842, #1812
Se incorpora un mecanismo que permite a R mantener una variable compilada en TOL hasta que se decompile. Métodos tolDefine y tolRelease del paquete tolLink.
Se incremente al versión de TolRInside.

Note: See TracTickets for help on using tickets.