Open zerberros opened 9 years ago
¡Hola Jairo! Acabo de revisar un poco los cambios que has hecho. Básicamente el código es igual que el de la clase lti, ¿cierto?
Cierto :D
Una pregunta: ¿Como puedo establecer un marco de trabajo con las bibliotecas en desarrollo? Es decir, trabajar con las bibliotecas en desarrollo cuando vaya a desarrollarlas, y trabajar con las bibliotecas estables que tengo ahora instaladas cuando quiero trabajar en modo normal.
No se si me he explicado muy bien.
On 2015-02-04 00:55, Jairo wrote:
¡Hola Jairo! Acabo de revisar un poco los cambios que has hecho. Básicamente el código es igual que el de la clase lti, ¿cierto?
Cierto :D
Una pregunta: ¿Como puedo establecer un marco de trabajo con las bibliotecas en desarrollo? Es decir, trabajar con las bibliotecas en desarrollo cuando vaya a desarrollarlas, y trabajar con las bibliotecas estables que tengo ahora instaladas cuando quiero trabajar en modo normal.
No se si me he explicado muy bien.
Perfectamente ;)
http://docs.scipy.org/doc/scipy-dev/reference/hacking.html#faq
En la FAQ hay un par de entradas al respecto.
Lo primero que te tengo que preguntar es: ¿Windows o Linux? ¿pip o
conda? Dependiendo de tus herramientas y sistema operativo la respuesta
puede variar, pero básicamente tienes que crear un entorno aparte e
instalar SciPy "in-place" para que puedas probar simultáneamente los
cambios que realices. Por ejemplo, con Linux y Anaconda puedes crear un
entorno que se llame scipy-dev
e instalar ahí tus cambios:
$ conda create -n scipy-dev python=3 numpy nose cython
$ source activate scipy-dev
(scipy-dev)$ cd scipy
(scipy-dev)$ python setup.py build_ext -i
Con el último comando recompilas las extensiones para que SciPy funcione.
Uso Linux con pip como instalador. Supongo que las diferencias entre hacerlo con pip y conda son minimas, de todas formas voy a leer lo que pueda de documentación, para ver como funciona...
Muchas gracias por la info @Juanlu001.
Edito: Ok, es muy sencillo, más de lo que parece en un principio, jajajaa
Si utilizas pip, entonces echa un vistazo a virtualenv: es lo que necesitas. Si usas Python 3, el módulo venv de la biblioteca estándar hace lo mismo. On Feb 6, 2015 6:04 PM, "Jairo" notifications@github.com wrote:
Uso Linux con pip como instalador. Supongo que las diferencias entre hacerlo con pip y conda son minimas, de todas formas voy a leer lo que pueda de documentación, para ver como funciona...
Muchas gracias por la info @Juanlu001 https://github.com/Juanlu001.
Reply to this email directly or view it on GitHub https://github.com/Pybonacci/scipy/pull/2#issuecomment-73272579.
Ok, ahora la funcion cont2discrete ya devuelve una clase dlti XD
Lo siguiente ->> adaptar los metodos dstep, dlsim, dimpulse, etc, a la nueva clase dlti
Hola de nuevo: He empezado a usar los test y me he dado cuenta de una cosa, los test estan pensados para la manera antigua de recoger los datos de las funciones de transferencia discretas. Es decir:
a,b,c,d,dt = cont2discrete (sys,dt)
mientras que ahora se tendria que hacer de la siguiente manera:
sys = cont2discrete (sys,dt)
a,b,c,d,dt = sys.A, sys.B,sys.C,sys.D,sys.dt
ya que las clases devuelven un objeto, y nos daria un error de tipo:
TypeError: 'dlti' object is not iterable
Lo que me lleva a pensar, que estas modificaciones que estoy realizando, podrian eventualmente romper el trabajo de otras personas, es decir (creo que se dice asi), crear errores de regresión. También puede que sea incompatible con otras partes de la biblioteca signal, como la de los filtros discretos (filter_design.py), pero esto de momento no lo he comprobado.
Por otra parte, tengo otro tipo de error:
======================================================================
ERROR: test_bilinear (test_cont2discrete.TestC2D)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jairo/dev/scipy/scipy/signal/tests/test_cont2discrete.py", line 128, in test_bilinear
sys = c2d((ac, bc, cc, dc), dt_requested, method='bilinear')
File "/home/jairo/dev/scipy/scipy/signal/cont2discrete.py", line 84, in cont2discrete
sys = lti(*sys)
File "/home/jairo/dev/scipy/scipy/signal/ltisys.py", line 317, in __init__
self._update(N)
File "/home/jairo/dev/scipy/scipy/signal/ltisys.py", line 428, in _update
self.C, self.D)
File "/home/jairo/dev/scipy/scipy/signal/ltisys.py", line 259, in ss2zpk
return tf2zpk(*ss2tf(A, B, C, D, input=input))
File "/home/jairo/dev/scipy/scipy/signal/filter_design.py", line 489, in tf2zpk
z = roots(b)
File "/usr/local/lib/python3.4/dist-packages/numpy/lib/polynomial.py", line 203, in roots
raise ValueError("Input must be a rank-1 array.")
ValueError: Input must be a rank-1 array.
que no estoy muy seguro a que se debe...
demomento asi está la cosa :P
Un saludo
Perdona por la respuesta tardía, Python absorbe más de lo que parece :)
Muy buena apreciación con respecto a la compatibilidad hacia atrás, especialmente tratándose de SciPy. Estas cosas se tienen muy en cuenta y en general no gustará que el código deje de funcionar. Una pista de cómo podría resolverse te la da este error:
TypeError: 'dlti' object is not iterable
Bien: ¡haz que sea iterable! Solo necesitas reimplementar los métodos __len__
y __getitem__
:
In [1]: class Foo(object):
...: a = 1
...: b = 2
...: c = 3
...: def __len__(self):
...: return 3
...: def __getitem__(self, key):
...: if key == 0:
...: return self.a
...: elif key == 1:
...: return self.b
...: elif key == 2:
...: return self.c
...: else:
...: raise IndexError
...:
In [2]: foo = Foo()
In [3]: a, b, c = foo
In [4]: a
Out[4]: 1
In [5]: b
Out[5]: 2
In [6]: c
Out[6]: 3
Más información: https://docs.python.org/3/reference/datamodel.html#emulating-container-types
Acabo de ver esta lista de tareas para scipy.signal
:
Hmm... La verdad es que llevo ya unos dias pensando en retomar el tema. Cosas que deberia ir haciendo:
Muchas cosas y poco tiempo. A ver si poco a poco...
¡Hola Jairo! Acabo de revisar un poco los cambios que has hecho. Básicamente el código es igual que el de la clase lti, ¿cierto?
He añadido algunos comentarios de cosas que faltaban por cambiar. Por otra parte, tendrás que añadir algunos tests que aseguren que esta clase funciona correctamente. Mira por ejemplo los de los sistemas continuos:
https://github.com/Pybonacci/scipy/blob/master/scipy/signal/tests/test_ltisys.py
No tienes que añadir tantos tests, pero hay que probar que más o menos se cubren todas las posibilidades de usar la clase
dlti
. Por ejemplo, cosas que se podrían probar:num, den
funciona, es decir: el objeto tiene las propiedadesnum
yden
que se le han especificado.zeros, poles, gain
.A, B, C, D
.Y además, si tienes algún libro de texto o apuntes de sistemas discretos con ejercicios puedes escribir tests sencillos que prueben que se pueden resolver con SciPy.
¿Has escrito tests unitarios alguna vez? Te recomiendo que leas estas entradas:
http://pybonacci.org/2013/06/19/desarrollo-dirigido-por-pruebas-en-python-ii-un-caso-practico-i/ http://pybonacci.org/2013/12/09/mi-primera-auditoria-de-codigo-revisando-scikit-aero/
Y si tienes dudas, aquí estamos :smile: