Mayo de 2011
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a) Mayo de 2011 1 / 43
Indice
1 2 3 4 5 6
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
2 / 43
Introduccin o
Indice
1 2 3 4 5 6
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
3 / 43
Introduccin o
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
4 / 43
Introduccin o
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Introduccin o
Introduccin o
PyMODINIT_FUNC init_mymod ( void ) { Py_InitModule3 ( " mymod " , mymod_methods , " Some module " ); }
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
7 / 43
Introduccin o
SWIG Genera todo el cdigo redundante desde o una descripcin de alto nivel o
Ventajas ... Abstrae la generacin de cdigo o o Usado en proyectos serios Tambin sirve para PHP, Perl, Ruby, Lisp, Java... e
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
8 / 43
Introduccin o
SWIG Genera todo el cdigo redundante desde o una descripcin de alto nivel o
Desventajas ... Requiere aprender su lenguaje Cdigo generado por ordenador... o
Dif de leer cil Infernal para depurar
Introduccin o
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
9 / 43
Introduccin o
Y para generar...
$ swig -python example.i $ gcc -c example.c example_wrap.c \ -I/usr/local/include/python2.1
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a) Mayo de 2011 10 / 43
Introduccin o
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
11 / 43
Librerias
Indice
1 2 3 4 5 6
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
12 / 43
Librerias
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
13 / 43
Librerias
Parntesis e
Compilar bibliotecas suele requerir parmetros especiales, a en GNU/Linux esto es ... Compilar objeto de biblioteca compartida $ gcc -fPIC -c -o fichero.o fichero.c Enlazar biblioteca compartida $ ld -shared -ldl -o fichero.so fichero.o ... Ver script cclib en el cdigo adjunto... o
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
14 / 43
Librerias
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
15 / 43
Librerias
Ejemplillo
import ctypes
_cstd = ctypes . cdll [ libc . so .6 ] _cmath = getattr ( ctypes . cdll , libm . so .6 ) _cstd . printf ( " Hola mundo ! " )
Librerias
Librerias
Ejemplillo
import ctypes from ctypes . util import find_library
_cstd = ctypes . cdll [ find_library ( c )] _cmath = getattr ( ctypes . cdll , find_library ( m )) _cstd . printf ( " Hola mundo ! " )
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
18 / 43
Funciones
Indice
1 2 3 4 5 6
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
19 / 43
Funciones
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
20 / 43
Funciones
Conversin de tipos o
str, unicode, int, long, NoneType se convierten automticamente a
El ejemplo con printf()
Funciones
Ejemplo ...
from ctypes import * from ctyes . util import *
_cmath = cdll [ find_library ( m )] _fabs = _cmath . fabs print _fabs ( c_double (5.5)) _fabs . argtypes = ( c_double ,) _fabs . restype = c_double print _fabs (5.5)
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a) Mayo de 2011 22 / 43
Funciones
Tipos
Indice
1 2 3 4 5 6
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
24 / 43
Tipos
Inmutable
c char p, c wchar p, c void p create string buffer para la mutabilidad Al valor de una instancia se accede mediante value
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a) Mayo de 2011 25 / 43
Tipos
Ejemplo ...
from ctypes import * from ctypes import util
_cstd = cdll [ find_library ( c )] s = Hola mundo ! _cstr . printf ( " %s \ n " , c_char_p ( s )) # Ok _cstd . scanf ( " %s " , c_char_p ( s )) # Mal !! print s == Hola mundo ! # OMG ! s = create_string_buffer (128) _cstd . scanf ( " %s " , s ) # Mejor print s . value
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a) Mayo de 2011 26 / 43
Tipos
Punteros...
Construimos un tipo puntero con POINTER Construimos un puntero con pointer
dereferenciamos con contents y operator[]
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
27 / 43
Tipos
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
28 / 43
Tipos
Tipos
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
30 / 43
Tipos
Ejemplo ...
class c_tm ( Structure ):
_fields_ = ( ( tm_sec , ( tm_min , ( tm_hour , ( tm_day , ( tm_mon , ( tm_year , ( tm_wday , ( tm_yday , ( tm_isdst , c_int ) , c_int ) , c_int ) , c_int ) , c_int ) , c_int ) , c_int ) , c_int ) , c_int ))
Mayo de 2011 31 / 43
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Tipos
Ejemplo ...
_cstd . localtime . restype = \ POINTER ( c_tm ) t = c_int ( _cstd . time (0)) lt = _cstd . localtime ( byref ( t )) lt = lt . contents
Tipos
Indice
1 2 3 4 5 6
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
34 / 43
Compatibilidad con Numpy Los arreglos de Numpy exponen sus entraas en el atributo ctypes n
Esto a su vez contiene... data, contenido como c void p data as (ptrtype), contenido como ptrtype shape, el tamao como c long * ndim n stride, el stride como c long * ndim
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
35 / 43
Aadir dibujito! n
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
36 / 43
Comprobando tipos
Podemos imponer restricciones sobre los punteros con
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Ejemplo ...
Biblioteca en C
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
38 / 43
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
39 / 43
Metodolog a
Indice
1 2 3 4 5 6
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
40 / 43
Metodolog a
Metodolog a
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
41 / 43
Metodolog a
Recursos adicionales
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
42 / 43
Metodolog a
Juan Pedro Bol var Puente (Instituto de Astrof sica de Andaluc Tema 7 Bibliotecas externas a)
Mayo de 2011
43 / 43