#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
Status: | new → accepted |
---|
comment:2 follow-up: 6 Changed 14 years ago by
(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
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
comment:5 Changed 14 years ago by
(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:7 Changed 14 years ago by
Component: | General → Variables |
---|---|
Milestone: | → Release 0.6 |
Resolution: | → fixed |
Status: | accepted → closed |
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 variableB
dependiente deA
con la expresión"Serie otraFuncion(...) + %1;"
.