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

Opened 14 years ago

Closed 14 years ago

Last modified 14 years ago

#635 closed doubt (fixed)

Método de almacenamiento DataSets

Reported by: Ines Miranda Owned by: Pedro Gea
Priority: major Milestone: Release 0.6
Component: Variables Keywords: almacenamiento, método, dataset, variables originales
Cc:

Description

Hola,

en estos momentos, si queremos almacenar variables en DataSets, tenemos las opciones de almacenado:

"Heavy" -> con datos
"Light" -> sólo definición (sin datos)
"Default" -> estado en que se encuentre

Se podría implementar un método de almacenamiento con datos sólo para variables originales (sin dependencias)?

Gracias

Change History (4)

comment:1 Changed 14 years ago by Ines Miranda

Hola,

he visto en el ticket #482 que, definiendo el atributo Real _.IsTrivial = 0 para variables originales y Real _.IsTrivial = 1, para las variables dependientes, cuando almacenamos con opción "Heavy" obtenemos precisamente mi petición de arriba.

Sólo comentar dos cosas:

  1. Como dice en el ticket #482, Se denomina "trivial" a aquella variable "dependiente pura". La palabra Trivial, en este cas,o me parece un poco confusa. De hecho, Real_.isTrivial = 1, pensaría que se trata de variables originales (triviales), no de variables dependientes.

2.Si ejecuto Real _.IsTrivial = ?, para chequear y declarar si la variable es trivial o no, siempre me declara Real _.IsTrivial = 1. Y en este caso, tengo tanto variables originales como dependientes. Parece que no está funcionando, no?

Gracias

comment:2 Changed 14 years ago by Pedro Gea

Como comentas, las variables triviales o declaradas como trivial no hacen caché de sus datos ni los almacenan. Quizá lo interesante es distinguir cuándo una variable es trivial.

Habitualmente se confunden dos aspectos: variable trivial y variable dependiente, pero puede darse el caso de trivial e independiente y el caso de dependiente y no trivial. Veamos:

  • No trivial e independiente: Es el caso más común y el más elemental, la expresión obtiene los datos usando métodos específicos de tu proyecto o acceciendo a fuentes de datos:
    ...::CreateVariable([[
      Text _.name = "Variable1";
      Text _.expression = "Serie ObtenerDatos(1, 2)";
      ...
    ]]);
    
  • Trivial e independiente: Este caso quizá no se utiliza mucho pero puede ser también bastante común. Puede usarse cuando la expresión puede ser evaluada sin problemas en cualquier contexto:
    ...::CreateVariable([[
      Text _.name = "Variable2";
      Text _.expression = "Serie SubSer(Pulse(y2000, C), y1990, y2020)";
      Real _.isTrivial = True;
      ...
    ]]);
    
  • Trivial y dependiente: Este caso es el más común y el más sensato al declarar variables dependientes:
    ...::CreateVariable([[
      Text _.name = "Variable3";
      Text _.expression = "Serie %1 + %2";
      Real _.isTrivial = True;
      Set _.dependences = [["Variable1", "Variable2"]]
      ...
    ]]);
    
  • No trivial y dependiente: Este caso podría considerarse nada recomendable, pero nada te impide definirlo:
    ...::CreateVariable([[
      Text _.name = "Variable4";
      Text _.expression = "Serie ObtenerDatos(1, 2) + %1";
      Set _.dependences = [["Variable2"]]
      ...
    ]]);
    
    Sin embargo ésto puede ser más sutil de lo que parece, por ejemplo si usamos una función de ámbito local de nuestro proyecto:
    ...::CreateVariable([[
      Text _.name = "Variable5";
      Text _.expression = "Serie OperacionParticular(%1)";
      Set _.dependences = [["Variable1"]]
      ...
    ]]);
    

comment:3 Changed 14 years ago by Pedro Gea

Resolution: fixed
Status: newclosed
Type: enhancementdoubt

La cuestión sobre cuándo una expresión puede o no ser trivial es algo delicado, ya que desde TOL no disponemos de un mecanismo sencillo para saber si una expresión podrá ser evaluada en un contexto estándar.

MMS hace un análisis de la expressión e intenta determinar si las variables y funciones utilizadas son estándares o no.
A raíz de este tique se detectan dos errores:

  • Los comentarios en la expresión se tratan como parte de la expresión.
  • Algunas funciones como SetOfSerie se están impidiendo la declaración de trivialidad.

Creo un nuevo tique (#639) para estas tareas y dejo éste como un tique de tipo duda.

comment:4 Changed 14 years ago by Pedro Gea

Respecto a tus comentarios, quizá la palabra trivial puede ser confusa o ambigua, cuando se indica trivial se está pensando en la acepción de que no incorpora información nueva o que para su evaluación no se necesita información adicional, es sencilla y puede evaluarse en no importa cualquier momento, de modo que no hace falta cachear los datos ni almacenarlos.

Respecto a si funciona el uso de Real _.isTrivial = ? yo creo que en general sí va bien. Si encuentras alguna dificultad coméntalo en el tique #639 (o crea uno nuevo) indicando la expresión en la que falla.

Note: See TracTickets for help on using tickets.