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

#482 closed enhancement (fixed)

Método para eliminar de un dataset los datos de las variables dependientes

Reported by: imendez Owned by: Pedro Gea
Priority: major Milestone: Release 0.6
Component: Variables Keywords:
Cc: atorre@…

Description

Se solicita un método para eliminar de un dataset las variables dependientes.
Al depender de otras variables, sólo es necesario que el dataset almacene los datos de las variable originales o independientes, ya que las variables dependientes se pueden calcular a partir de éstas.
Este método ayudará a aligerar la carga de memoria.

A continuación se muestra un ejemplo del código que hace esto:

Real DS_ClearDataOfDependentVariables(NameBlock ds)
{
  Text idDS = ds::GetName(?);
  WriteLn("Borrando los datos de las variables del dataset "+ idDS +
          " que tienen que tienen dependencias...\t"+ Time);

  Set sVar = ds::GetVariables(?);
  Set sClear = EvalSet(sVar, Real(NameBlock var)
  {
    Set dep = var::GetDependences(?);
    If(IsEmpty(dep), 0, var::ClearData(?))
  });
  Real numVarCleared = SetSum(sClear);
  WriteLn("Borrados los datos de las "+ FormatReal(numVarCleared, "%.0lf") +
          " variables del dataset "+ idDS +" que tienen "+
          "dependencias...\t"+ Time);
  numVarCleared
};

Gracias.

Change History (8)

comment:1 Changed 14 years ago by Pedro Gea

Status: newaccepted

Es una mejora muy deseable.
De hecho podría hacerse automáticamente si las variables dependientes fuesen "dependientes puras". Llevo un tiempo dándole vueltas.

Para imaginar una variable dependiente "no pura" podemos considerar una variable A cuya expresion fuese "Serie unaFuncion(...);" y una segunda variable B dependiente de A con la expresión "Serie otraFuncion(...) + %1;".

comment:2 Changed 14 years ago by Pedro Gea

(In [2137]) Se introduce un nuevo atributo de las variables que permite declararlas como triviales evitándose así automáticamente la caché y persistencia de sus datos.
Se introducen también métodos para chequear la trivialidad de la expresión de modo que pueda establecerse esta trivialidad automáticamente.
Se establecen tanto en la declaración de las variables así como en el mecanismo de carga comprobaciones sobre la trivialidad de las variables. En el caso de la carga, se asigna el atributo según dicte el método de chequeo.
Véase también el commit mal comentado [2135].
Refs #482

comment:3 Changed 14 years ago by Pedro Gea

Según se ha indicado, en la carga de objetos guardados, la trivialidad o no de una variable se asigna mediante un chequeo. De modo que no es necesario hacer nada al respecto para borrar esos datos.

En la creación de las variables, la trivialidad o no de una variable se puede declarar con el argumento _.isTrivial.
Si el argumento no se indica, se establecerá a False, pero se indicará que la variable podría haberse declarado como tal.
Si el argumento se indica como ? se utilizará el método de chequeo para declararla trivial o no.
Si el argumento indica explícitamente un valor de isTrivial se asignará en el caso de que sea admisible.

Los nuevos métodos de los objetos MMS::@Variable son:

  • ::GetIsTrivial(?) y ::SetIsTrivial(newIsTrivial) para obtener y asignar, respectivamente, el valor del atributo.
  • ::CheckTrivialExpression(?) devuelve el conjunto de palabras de la expresión que impiden que pueda declararse trivial.
  • ::IsTrivialExpression(?) devuelve cierto o falso según lo que devuelve el método anterior, siempre que la expresión no sea "".

comment:4 Changed 14 years ago by Pedro Gea

(In [2138]) Los métodos _IsRealWord, _IsDateWord, _IsDependenceWord y una parte del código de CheckTrivialExpression podrían y deberían declarse en un archivo de funciones generales.
Refs #482

comment:5 Changed 14 years ago by Pedro Gea

(In [2139]) Se modifica el comportamiento en la carga de objetos guardados por precaución.
De modo que para convertir en variables triviales todas aquellas que lo permitan,
utilícese:

Set EvalSet(<dataset>::GetVariables(?), Real (MMS::@Variable v) {
  If(v::IsTrivialExpression(?), v::SetIsTrivial(True), 0)
})

Refs #482

comment:6 in reply to:  2 Changed 14 years ago by Pedro Gea

Se denomina "trivial" a aquella variable "dependiente pura".

comment:7 Changed 14 years ago by Pedro Gea

Component: GeneralVariables
Milestone: Release 0.6
Resolution: fixed
Status: acceptedclosed

comment:8 Changed 14 years ago by Pedro Gea

(In [2246]) Se extraen las funciones destinadas a determinar la "trivialidad" de una variable a un bloque de funciones.
Se incorpora una primera versión de la implementación de los atributos de usuario en variables.
Refs #482, #410

Note: See TracTickets for help on using tickets.