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 14 years ago

Closed 14 years ago

#1201 closed doubt (fixed)

Unexpected error using Ois.Load

Reported by: Pedro Gea Owned by: Víctor de Buen Remiro
Priority: normal Milestone: Mantainance
Component: Kernel Version: head
Severity: normal Keywords:
Cc:

Description

Se ha encontrado un error inesperado al cargar un archivo OZA utilizando la última versión de TOLBase que no ocurría anteriormente.

Para repoducirlo basta hacer:

Set Ois.Load(".../dataset.oza");
//> ERROR: [] set is not a valid object for type Set.

Adjunto el archivo oza.

Attachments (1)

dataset.oza (23.0 KB) - added by Pedro Gea 14 years ago.

Download all attachments as: .zip

Change History (6)

Changed 14 years ago by Pedro Gea

Attachment: dataset.oza added

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

A mí lo que me dice es

ERROR: [1] [ZipArchive] Error while .../dataset.oza archive reading: No such file or directory.

ya que no existe el path .../

poniendo ./ lo que me da es un Warning

Warning: [1] OIS: 
Cannot rebuild virtual expression of non bounded TimeSet Trimestral = (set[[k])
Only cached dates will be accessible between [y1979m10d01,y2050m01d01]
To avoid this problem save just bounded time sets or use expressions that could be evaluated at OIS loading time.

Tiene relación con el ticket #1199

Puesto que es muy peligroso utilizar fechados cuya expresión no sea reconstruible en la carga se desaconseja el uso de expresiones como esa que usan símbolos locales. En este caso concreto Trimestral es una variable del sistema y no entiendo porqué se crea otra variante pero eso es lo de menos.

Pasar no pasa nada por lo general, sólo es un warning y todo funcionará igual en la mayoría de las ocasiones, pero como no puede reconstuirse el TimeSet infinito se queda sólo como la caché y como quieras hacer algo con él fuera del intervalo almacenado te puede pasar cualquier cosa.

Imagino que te has bajado la relase 3 que sacaba los mensajes de error que podían despistar, aunque en realidad todo funcionaba sin problemas normalmente.

Prueba con la release 4 que debería funcionarte y ya me dirás. Tanto la oficial como la de desarrollo tienen una release 4 con ese cambio.

comment:2 Changed 14 years ago by Pedro Gea

Con lo de ".../dataset.oza" quería dar a entender la ruta donde sea que descargues el archivo, por ejemplo "C:/Temp/dataset.oza".

Probaré con la release 4 a ver qué ocurre.

comment:3 Changed 14 years ago by Pedro Gea

Type: defectdoubt

Ciertamente ya no da el error sino la advertencia que indicabas.

Yo no soy el autor del timeset que da esa extraña advertencia, ¿podrías explicar mejor en qué consiste la limitación en el almacenamiento de timesets? ¿disponemos de alguna función o mecanismo que nos permita identificar si un timeset (o una serie que lo contenga) es almacenable? ¿hay algún mecanismo para hacer almacenable en ois un timeset y evitar así la posterior advertencia en la carga?

comment:4 Changed 14 years ago by Víctor de Buen Remiro

Pues la verdad es que no sé qué más añadir a lo dicho en #1199.

Si se trata de un conjunto acotado no hay ningún problema pues no necesitamos la expresión para nada, con la caché almacenada es suficiente.

Si se trata de un conjunto no acotado entonces la única forma de reconstruirlo es mediante una expresión que sea evaluable en el momento de la carga.

Si se usan expresiones que sólo dependen de constantes está claro que no va a haber problemas, lo mismo que si se usan sólo variables del built-in del sistema o de la StdLib.

Si en la expresión se usan sólo variables en el ámbito global del código básico del proyecto, o bien miembros directos o indirectos de un NameBlock o un Set accesible globalmente, entonces todos los programas que se carguen ese código básico también podrán cargar el OZA.

Las variables utilizadas deben ser pues de esta forma

  Global;
  Global::Miembro;
  Global::Miembro::...::Miembro;
  Global[n];
  Global[nombre];

No sé si se me escapa alguna otra forma pero es muy simple: si se puede evaluar en el ámbito global no salta el mensaje.

La forma más segura para que todo vaya bien es que los conjuntos temporales se definan en el código del proyecto y luego usar directamente sus nombres, con o sin prefijos :: u otras formas de acceso, especialmente si se trata de expresiones muy complejas.

De esa forma no aparece el mensaje de warning en la carga, y si luego alguien intenta cargar el OZA sin haber definido el TimeSet Fulanito le dará un Warning de que no existe el TimeSet Fulanito, que es algo mucho más fácil de perseguir que una expresión. El OZA cargará sin problemas como hasta ahora, siempre y cuando no se pretenda usar ese TimeSet fuera del intervalo de la caché.

comment:5 Changed 14 years ago by Víctor de Buen Remiro

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.