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

Last modified 10 years ago

#1843 new defect

La función Unique tira TOL

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

Description

Buenas, adjunto un código que en otras ocasiones ha funcionado, pero que esta vez al correrlo, tira TOL

Hay que tener un forecast cargado. El que falla es este:

"M:\CokSpa\Fallo\For.CokeSpainMVA__20150220.oza"

El código se cae al ejecutar la sentencia:

Set conjVarsSimulables = Unique(aux);

Lo he solventado sustituyendo esto por:

            Set auxClassified = Classify(aux, Real(NameBlock a, NameBlock b)
            {
            Real(Text a::GetName(?) < b::GetName(?))
            });
            
            Set conjVarsSimulables = EvalSet(Set auxClassified, NameBlock(Set grupo)
            {
            NameBlock grupo[1]
            });

así que no hay prisa ninguna.

Un saludo

Mi versión de tol 3.2 b020 y mi stdlib es la 0.17

Un saludo

Attachments (1)

ExtraccionVariablesI.tol (2.3 KB) - added by jmarinero 10 years ago.

Download all attachments as: .zip

Change History (3)

Changed 10 years ago by jmarinero

Attachment: ExtraccionVariablesI.tol added

comment:1 Changed 10 years ago by jmarinero

No es que sea importante para el ticket en sí, pero corrijo el código que sustituía al Unique porque tenía un fallo.

El código que sí funciona sería:

            Set auxClassified = Classify(aux, Real(NameBlock a, NameBlock b)
            {
            Real 1*(Text a::GetName(?) < Text b::GetName(?))-1*(Text a::GetName(?) > Text b::GetName(?))
            });
            
            Set conjVarsSimulables = EvalSet(Set auxClassified, NameBlock(Set grupo)
            {
            NameBlock grupo[1]
            });

Un saludo

comment:2 Changed 10 years ago by Pedro Gea

Véase #1016.

Para comparar si dos nameblocks son el mismo (es decir, apuntan a la misma entidad: si cambias una propiedad de uno, cambia la del otro) y no que tienen las mismas propiedades y métodos, puedes usar: SameNameBlock. Véase #1114.

Set conjVarsSimulables = EvalSet(Classify(aux, SameNameBlock), NameBlock (Set s) { s[1] });

Ciertamente Unique no debería fallar, pero como también le pasan a otras funciones o métodos de comparación o conversión, aparecen problemas con los nameblocks, sobre todo si éstos contienen referencias cíclicas internamente.

Note: See TracTickets for help on using tickets.