Description
Contributor: Lutz Westermann, September 2017
Small Model of Type : GAMS
Category : GAMS Test library
Main file : embpy03.gms
$title 'Test projection operator when loading data from embedded code' (EMBPY03,SEQ=739)
$onText
Contributor: Lutz Westermann, September 2017
$offText
$log --- Using Python library %sysEnv.GMSPYTHONLIB%
Parameter ud1dataUniverse;
Set d1Want / i1 /
d2Want / j1, j2 /
d3Want / k1, k3 /
ud1d1, ud1d2, ud1d3;
$macro checkIfAinB(a,b,Error) Set Error; Error(a) = not b(a); abort$card(Error) Error;
* Get set elements from specified dim of the parameter but not the parameter itself
$offECImplicitLoad
$onEmbeddedCode Python:
data = [('i1', 'j1', 'k1', 11.9), ('i1', 'j2', 'k3', 9.11)]
gams.set('ud1dataUniverse', data)
$offEmbeddedCode ud1d1<ud1dataUniverse.dim1 ud1d2<ud1dataUniverse.dim2 ud1d3<ud1dataUniverse.dim3
checkIfAinB(ud1d1,d1Want,ud1Error1a)
checkIfAinB(ud1d2,d2Want,ud1Error2a)
checkIfAinB(ud1d3,d3Want,ud1Error3a)
checkIfAinB(d1Want,ud1d1,ud1Error1b)
checkIfAinB(d2Want,ud1d2,ud1Error2b)
checkIfAinB(d3Want,ud1d3,ud1Error3b)
$if defined ud1dataUniverse $abort Expect data from ud1dataUniverse not to be loaded
$if not errorFree $abort previous compilation errors
$if dimension 20 ud1dataUniverse $log we should not be able to access dimension of ud1dataUniverse so this line triggers a compilation error
$if errorFree $abort We should not be able to access dimension of ud1dataUniverse
$if not errorFree $clearErrors
$onECImplicitLoad
Parameter ud2dataUniverse;
Set ud2d1, ud2d2, ud2d3;
* Get set elements from specified dim of the parameter and the parameter itself by implicit loading
$onEmbeddedCode Python:
data = [('i1', 'j1', 'k1', 11.9), ('i1', 'j2', 'k3', 9.11)]
gams.set('ud2dataUniverse', data)
$offEmbeddedCode ud2d1<ud2dataUniverse.dim1 ud2d2<ud2dataUniverse.dim2 ud2d3<ud2dataUniverse.dim3
checkIfAinB(ud2d1,d1Want,ud2Error1a)
checkIfAinB(ud2d2,d2Want,ud2Error2a)
checkIfAinB(ud2d3,d3Want,ud2Error3a)
checkIfAinB(d1Want,ud2d1,ud2Error1b)
checkIfAinB(d2Want,ud2d2,ud2Error2b)
checkIfAinB(d3Want,ud2d3,ud2Error3b)
$if not defined ud2dataUniverse $abort Expect data from ud2dataUniverse to be loaded
$if not dimension 3 ud2dataUniverse $abort we expect the dimension of ud2dataUniverse to be 3
Parameter dataUniverse(*,*,*);
Set d1(*), d2(*), d3(*);
* Get set elements from specified dim of the parameter but not the parameter itself
$offECImplicitLoad
$onEmbeddedCode Python:
data = [('i1', 'j1', 'k1', 11.9), ('i1', 'j2', 'k3', 9.11)]
gams.set('dataUniverse', data)
$offEmbeddedCode d1<dataUniverse.dim1 d2<dataUniverse.dim2 d3<dataUniverse.dim3
checkIfAinB(d1,d1Want,Error1a)
checkIfAinB(d2,d2Want,Error2a)
checkIfAinB(d3,d3Want,Error3a)
checkIfAinB(d1Want,d1,Error1b)
checkIfAinB(d2Want,d2,Error2b)
checkIfAinB(d3Want,d3,Error3b)
$if defined dataUniverse $abort Expect data from dataUniverse not to be loaded
$onECImplicitLoad
$kill d1 d2 d3
$onEmbeddedCode Python:
data = [('i1', 'j1', 'k1', 11.9), ('i1', 'j2', 'k3', 9.11)]
gams.set('dataUniverse', data)
$offEmbeddedCode d1<dataUniverse.dim1 d2<dataUniverse.dim2 d3<dataUniverse.dim3
checkIfAinB(d1,d1Want,Error1a)
checkIfAinB(d2,d2Want,Error2a)
checkIfAinB(d3,d3Want,Error3a)
checkIfAinB(d1Want,d1,Error1b)
checkIfAinB(d2Want,d2,Error2b)
checkIfAinB(d3Want,d3,Error3b)
$if not defined dataUniverse $abort Expect data from dataUniverse to be loaded
Set e1(*), e2(*), e3(*);
Parameter dataDomain(e1,e2,e3);
* Get set elements by domain matching of the parameter
$onEmbeddedCode Python:
data = [('i1', 'j1', 'k1', 11.9), ('i1', 'j2', 'k3', 9.11)]
gams.set('dataDomain', data)
$offEmbeddedCode e1<dataDomain e2<dataDomain e3<dataDomain
checkIfAinB(e1,d1Want,Error1c)
checkIfAinB(e2,d2Want,Error2c)
checkIfAinB(e3,d3Want,Error3c)
checkIfAinB(d1Want,e1,Error1d)
checkIfAinB(d2Want,e2,Error2d)
checkIfAinB(d3Want,e3,Error3d)
Set f1(*);
Parameter dataDomainF1(f1,f1,f1);
* Get set elements by domain matching of the parameter, start searching from the left
$onEmbeddedCode Python:
data = [('i1', 'j1', 'k1', 11.9), ('i1', 'j2', 'k3', 9.11)]
gams.set('dataDomainF1', data)
$offEmbeddedCode f1<=dataDomainF1
checkIfAinB(f1,d1Want,Error1e)
checkIfAinB(d1Want,f1,Error1f)
Set f2(*);
Parameter dataDomainF2(f2,f2,f2);
* Get set elements by domain matching of the parameter, start searching from the right
$onEmbeddedCode Python:
data = [('i1', 'j1', 'k1', 11.9), ('i1', 'j2', 'k3', 9.11)]
gams.set('dataDomainF2', data)
$offEmbeddedCode f2<dataDomainF2
checkIfAinB(f2,d3Want,Error3e)
checkIfAinB(d3Want,f2,Error3f)
* Load filtered data - This example lead to an error at some stage because of out-of-order UELs when writing to GDX, see #5016
Set code, labId, rr(code,labId);
parameter raw(*,*,*);
$onEmbeddedCode Python:
gams.wsWorkingDir = '.'
cdb = gams.ws.add_database_from_gdx('getdata.gdx')
cdb['raw'].copy_symbol(gams.db['raw'])
cdb['rr'].copy_symbol(gams.db['rr'])
$offEmbeddedCode code<raw.dim1 labId<raw.dim2 rr
execute_unload 'dd.gdx' rr;
$if not errorFree $abort Expected no errors up to this point
* For the following operations we expect failures
$onEcho > noDomMatch.gms
Parameter dataUniverse(*,*,*);
Set d1(*), d2(*), d3(*);
$onEmbeddedCode Python:
data = [('i1', 'j1', 'k1', 11.9), ('i1', 'j2', 'k3', 9.11)]
gams.set('dataUniverse', data)
$offEmbeddedCode d1<dataUniverse d2<dataUniverse d3<dataUniverse
$offEcho
$call gams noDomMatch.gms lo=%GAMS.lo%
$if not errorlevel 1 $abort Expected error from noDomMatch.gms
$onEcho > noParameter.gms
Parameter dataUniverse(*,*,*);
Parameter d1(*), d2(*), d3(*);
$onEmbeddedCode Python:
data = [('i1', 'j1', 'k1', 11.9), ('i1', 'j2', 'k3', 9.11)]
gams.set('dataUniverse', data)
$offEmbeddedCode d1<dataUniverse.dim1 d2<dataUniverse.dim2 d3<dataUniverse.dim3
$offEcho
$call gams noParameter.gms lo=%GAMS.lo%
$if not errorlevel 1 $abort Expected error from noParameter.gms
$onEcho > wrongDim.gms
Parameter dataUniverse(*,*,*);
Set d1(*,*), d2(*,*,*), d3(*,*,*);
$onEmbeddedCode Python:
data = [('i1', 'j1', 'k1', 11.9), ('i1', 'j2', 'k3', 9.11)]
gams.set('dataUniverse', data)
$offEmbeddedCode d1<dataUniverse.dim1 d2<dataUniverse.dim2 d3<dataUniverse.dim3
$offEcho
$call gams wrongDim.gms lo=%GAMS.lo%
$if not errorlevel 1 $abort Expected error from wrongDim.gms
$clearErrors
$onEcho > wrongDim.gms
Parameter dataUniverse;
Set d1, d2, d3;
$offECImplicitLoad
$onEmbeddedCode Python:
data = [('i1', 'j1', 'k1', 11.9), ('i1', 'j2', 'k3', 9.11)]
gams.set('dataUniverse', data)
$offEmbeddedCode d1<dataUniverse.dim1 d2<dataUniverse.dim2 d3<dataUniverse.dim7
$offEcho
$call gams wrongDim.gms lo=%GAMS.lo%
$if not errorlevel 1 $abort Expected error from wrongDim.gms