$title 'Test Connect agent Concatenate' (CACONCAT,SEQ=918) $onText This test ensures the correctness of the Connect agent Concatenate. Contributor: Aileen Böhme, August 2022 $offText $log --- Using Python library %sysEnv.GMSPYTHONLIB% $onEcho > t.gms Set i(*) canning plants / 'seattle', 'san-diego' /; Set j(*) markets / 'new-york', 'chicago', 'topeka' /; Parameter a(i) capacity of plant i in cases / 'seattle' 350, 'san-diego' 600 /; Parameter b(j) demand at market j in cases / 'new-york' 325, 'chicago' 300, 'topeka' 275 /; Parameter d(i,j) distance in thousands of miles / 'seattle'.'new-york' 2.5, 'seattle'.'chicago' 1.7, 'seattle'.'topeka' 1.8, 'san-diego'.'new-york' 2.5, 'san-diego'.'chicago' 1.8, 'san-diego'.'topeka' 1.4 /; Scalar f freight in dollars per case per thousand miles / 90 /; Parameter c(i,j) transport cost in thousands of dollars per case / 'seattle'.'new-york' 0.225, 'seattle'.'chicago' 0.153, 'seattle'.'topeka' 0.162, 'san-diego'.'new-york' 0.225, 'san-diego'.'chicago' 0.162, 'san-diego'.'topeka' 0.126 /; positive Variable x(i,j) shipment quantities in cases / 'seattle'.'new-york'.L 50, 'seattle'.'chicago'.L 300, 'seattle'.'topeka'.M 0.036, 'san-diego'.'new-york'.L 275, 'san-diego'.'chicago'.M 0.00900000000000001, 'san-diego'.'topeka'.L 275 /; free Variable z total transportation costs in thousands of dollars /L 153.675 /; Equation cost define objective function /M 1, LO 0, UP 0 /; Equation supply(i) observe supply limit at plant i / 'seattle'.L 350, 'seattle'.M Eps, 'seattle'.LO -Inf, 'seattle'.UP 350, 'san-diego'.L 550, 'san-diego'.LO -Inf, 'san-diego'.UP 600 /; Equation demand(j) satisfy demand at market j / 'new-york'.L 325, 'new-york'.M 0.225, 'new-york'.LO 325, 'new-york'.UP +Inf, 'chicago'.L 300, 'chicago'.M 0.153, 'chicago'.LO 300, 'chicago'.UP +Inf, 'topeka'.L 275, 'topeka'.M 0.126, 'topeka'.LO 275, 'topeka'.UP +Inf /; $offEcho $call.checkErrorLevel gams t.gms lo=%gams.lo% a=c gdx=t.gdx $log test invalid number of dimensions $onEmbeddedCode Connect: - GDXReader: file: t.gdx symbols: all - Concatenate: symbols: - name: a(i,j) $offEmbeddedCode $if errorFree $abort 'Expect errors' $clearErrors $log test invalid universal dimension $onEmbeddedCode Connect: - GDXReader: file: t.gdx - Concatenate: outputDimensions: [uni_0] symbols: - name: d(i,uni_0) $offEmbeddedCode $if errorFree $abort 'Expect errors' $clearErrors $log test invalid output dimension $onEmbeddedCode Connect: - GDXReader: file: t.gdx - Concatenate: outputDimensions: [i.1,i1,i-1,j] symbols: - name: a $offEmbeddedCode $if errorFree $abort 'Expect errors' $clearErrors $log Test setName raising an exception for existing symbol name $onembeddedCode Connect: - GDXReader: file: t.gdx symbols: all - Concatenate: symbols: - name: i - name: j setName: b $offEmbeddedCode $if errorFree $abort 'Expect errors' $clearErrors $log Test invalid option in symbols scope raising an exception $onembeddedCode Connect: - GDXReader: file: t.gdx symbols: all - Concatenate: symbols: - name: i invalidOption: invalid $offEmbeddedCode $if errorFree $abort 'Expect errors' $clearErrors $log Test parameterName raising an exception for existing symbol name $onembeddedCode Connect: - GDXReader: file: t.gdx symbols: all - Concatenate: symbols: - name: a - name: b parameterName: i $offEmbeddedCode $if errorFree $abort 'Expect errors' $clearErrors $log test symbols: all and outputDimensions: [] $onEmbeddedCode Connect: - GDXReader: file: t.gdx - Projection: name: x.all(i,j) newName: xp(i,j) - Projection: name: demand.l(j) newName: demand_level(j) - Concatenate: outputDimensions: [] symbols: all - GDXWriter: file: concat.gdx symbols: - name: setOutput - name: parameterOutput $offEmbeddedCode $log test domains with spaces and empty outputDimensions $onEmbeddedCode Connect: - GDXReader: file: t.gdx - Concatenate: outputDimensions: ["", j ] symbols: - name: a() - name: d(, j ) - PythonCode: code: | data = connect.container['parameterOutput'].records expected_cols = ['symbols', '', 'j', 'value'] if (data.columns != expected_cols).any(): raise Exception("Unexpected columns for >parameterOutput<.") $offEmbeddedCode $call 'gdxdump concat.gdx > concat.txt' $call 'gdxdump concat.gdx domainInfo >> concat.txt' $onEcho > concatExpected.txt $onEmpty Set setOutput(*,*,*,*) / 'i'.'seattle'.'-'.'-', 'i'.'san-diego'.'-'.'-', 'j'.'new-york'.'-'.'-', 'j'.'chicago'.'-'.'-', 'j'.'topeka'.'-'.'-' /; Parameter parameterOutput(*,*,*,*) / 'a'.'seattle'.'-'.'-' 350, 'a'.'san-diego'.'-'.'-' 600, 'b'.'new-york'.'-'.'-' 325, 'b'.'chicago'.'-'.'-' 300, 'b'.'topeka'.'-'.'-' 275, 'd'.'seattle'.'new-york'.'-' 2.5, 'd'.'seattle'.'chicago'.'-' 1.7, 'd'.'seattle'.'topeka'.'-' 1.8, 'd'.'san-diego'.'new-york'.'-' 2.5, 'd'.'san-diego'.'chicago'.'-' 1.8, 'd'.'san-diego'.'topeka'.'-' 1.4, 'f'.'-'.'-'.'-' 90, 'c'.'seattle'.'new-york'.'-' 0.225, 'c'.'seattle'.'chicago'.'-' 0.153, 'c'.'seattle'.'topeka'.'-' 0.162, 'c'.'san-diego'.'new-york'.'-' 0.225, 'c'.'san-diego'.'chicago'.'-' 0.162, 'c'.'san-diego'.'topeka'.'-' 0.126, 'xp'.'seattle'.'new-york'.'level' 50, 'xp'.'seattle'.'new-york'.'upper' +Inf, 'xp'.'seattle'.'new-york'.'scale' 1, 'xp'.'seattle'.'chicago'.'level' 300, 'xp'.'seattle'.'chicago'.'upper' +Inf, 'xp'.'seattle'.'chicago'.'scale' 1, 'xp'.'seattle'.'topeka'.'marginal' 0.036, 'xp'.'seattle'.'topeka'.'upper' +Inf, 'xp'.'seattle'.'topeka'.'scale' 1, 'xp'.'san-diego'.'new-york'.'level' 275, 'xp'.'san-diego'.'new-york'.'upper' +Inf, 'xp'.'san-diego'.'new-york'.'scale' 1, 'xp'.'san-diego'.'chicago'.'marginal' 0.00900000000000001, 'xp'.'san-diego'.'chicago'.'upper' +Inf, 'xp'.'san-diego'.'chicago'.'scale' 1, 'xp'.'san-diego'.'topeka'.'level' 275, 'xp'.'san-diego'.'topeka'.'upper' +Inf, 'xp'.'san-diego'.'topeka'.'scale' 1, 'demand_level'.'new-york'.'-'.'-' 325, 'demand_level'.'chicago'.'-'.'-' 300, 'demand_level'.'topeka'.'-'.'-' 275 /; $offEmpty SyNr Type DomInf Symbol 2 Par Relaxed parameterOutput(symbols, uni_0, uni_1, uni_2) 1 Set Relaxed setOutput(symbols, uni_0, uni_1, uni_2) $offEcho $call.checkErrorLevel 'diff -bw concat.txt concatExpected.txt > %system.NullFile%' $log test symbols: all and outputDimensions: all $onEmbeddedCode Connect: - GDXReader: file: t.gdx symbols: all - Projection: name: x.all(i,j) newName: xp(i,j) - Projection: name: demand.l(j) newName: demand_level(j) - Concatenate: outputDimensions: all - GDXWriter: file: concat.gdx symbols: - name: setOutput - name: parameterOutput $offEmbeddedCode $call 'gdxdump concat.gdx > concat.txt' $call 'gdxdump concat.gdx domainInfo >> concat.txt' $onEcho > concatExpected.txt $onEmpty Set setOutput(*,*,*,*,*) / 'i'.'seattle'.'-'.'-'.'-', 'i'.'san-diego'.'-'.'-'.'-', 'j'.'new-york'.'-'.'-'.'-', 'j'.'chicago'.'-'.'-'.'-', 'j'.'topeka'.'-'.'-'.'-' /; Parameter parameterOutput(*,*,*,*,*) / 'a'.'-'.'seattle'.'-'.'-' 350, 'a'.'-'.'san-diego'.'-'.'-' 600, 'b'.'-'.'-'.'new-york'.'-' 325, 'b'.'-'.'-'.'chicago'.'-' 300, 'b'.'-'.'-'.'topeka'.'-' 275, 'd'.'-'.'seattle'.'new-york'.'-' 2.5, 'd'.'-'.'seattle'.'chicago'.'-' 1.7, 'd'.'-'.'seattle'.'topeka'.'-' 1.8, 'd'.'-'.'san-diego'.'new-york'.'-' 2.5, 'd'.'-'.'san-diego'.'chicago'.'-' 1.8, 'd'.'-'.'san-diego'.'topeka'.'-' 1.4, 'f'.'-'.'-'.'-'.'-' 90, 'c'.'-'.'seattle'.'new-york'.'-' 0.225, 'c'.'-'.'seattle'.'chicago'.'-' 0.153, 'c'.'-'.'seattle'.'topeka'.'-' 0.162, 'c'.'-'.'san-diego'.'new-york'.'-' 0.225, 'c'.'-'.'san-diego'.'chicago'.'-' 0.162, 'c'.'-'.'san-diego'.'topeka'.'-' 0.126, 'xp'.'-'.'seattle'.'new-york'.'level' 50, 'xp'.'-'.'seattle'.'new-york'.'upper' +Inf, 'xp'.'-'.'seattle'.'new-york'.'scale' 1, 'xp'.'-'.'seattle'.'chicago'.'level' 300, 'xp'.'-'.'seattle'.'chicago'.'upper' +Inf, 'xp'.'-'.'seattle'.'chicago'.'scale' 1, 'xp'.'-'.'seattle'.'topeka'.'marginal' 0.036, 'xp'.'-'.'seattle'.'topeka'.'upper' +Inf, 'xp'.'-'.'seattle'.'topeka'.'scale' 1, 'xp'.'-'.'san-diego'.'new-york'.'level' 275, 'xp'.'-'.'san-diego'.'new-york'.'upper' +Inf, 'xp'.'-'.'san-diego'.'new-york'.'scale' 1, 'xp'.'-'.'san-diego'.'chicago'.'marginal' 0.00900000000000001, 'xp'.'-'.'san-diego'.'chicago'.'upper' +Inf, 'xp'.'-'.'san-diego'.'chicago'.'scale' 1, 'xp'.'-'.'san-diego'.'topeka'.'level' 275, 'xp'.'-'.'san-diego'.'topeka'.'upper' +Inf, 'xp'.'-'.'san-diego'.'topeka'.'scale' 1, 'demand_level'.'-'.'-'.'new-york'.'-' 325, 'demand_level'.'-'.'-'.'chicago'.'-' 300, 'demand_level'.'-'.'-'.'topeka'.'-' 275 /; $offEmpty SyNr Type DomInf Symbol 2 Par Relaxed parameterOutput(symbols, *, i, j, attribute) 1 Set Relaxed setOutput(symbols, *, i, j, attribute) $offEcho $call.checkErrorLevel 'diff -bw concat.txt concatExpected.txt > %system.NullFile%' $log test outputDimensions $onEmbeddedCode Connect: - GDXReader: file: t.gdx - Concatenate: outputDimensions: [i,j] symbols: - name: a - name: b - name: f - name: c - name: d - GDXWriter: file: concat.gdx symbols: - name: parameterOutput $offEmbeddedCode $call 'gdxdump concat.gdx > concat.txt' $call 'gdxdump concat.gdx domainInfo >> concat.txt' $onEcho > concatExpected.txt $onEmpty Parameter parameterOutput(*,*,*) / 'a'.'seattle'.'-' 350, 'a'.'san-diego'.'-' 600, 'b'.'-'.'new-york' 325, 'b'.'-'.'chicago' 300, 'b'.'-'.'topeka' 275, 'f'.'-'.'-' 90, 'c'.'seattle'.'new-york' 0.225, 'c'.'seattle'.'chicago' 0.153, 'c'.'seattle'.'topeka' 0.162, 'c'.'san-diego'.'new-york' 0.225, 'c'.'san-diego'.'chicago' 0.162, 'c'.'san-diego'.'topeka' 0.126, 'd'.'seattle'.'new-york' 2.5, 'd'.'seattle'.'chicago' 1.7, 'd'.'seattle'.'topeka' 1.8, 'd'.'san-diego'.'new-york' 2.5, 'd'.'san-diego'.'chicago' 1.8, 'd'.'san-diego'.'topeka' 1.4 /; $offEmpty SyNr Type DomInf Symbol 1 Par Relaxed parameterOutput(symbols, i, j) $offEcho $call.checkErrorLevel 'diff -bw concat.txt concatExpected.txt > %system.NullFile%' $log test outputDimensions: all, dimensionMap and name with index space $onEmbeddedCode Connect: - GDXReader: file: t.gdx - Concatenate: outputDimensions: all dimensionMap: {i: ii, j: jj} symbols: - name: a(i1) - name: b - name: f - name: c(i3,i2) - name: d - GDXWriter: file: concat.gdx symbols: - name: parameterOutput $offEmbeddedCode $call 'gdxdump concat.gdx > concat.txt' $call 'gdxdump concat.gdx domainInfo >> concat.txt' $onEcho > concatExpected.txt $onEmpty Parameter parameterOutput(*,*,*,*,*,*) / 'a'.'seattle'.'-'.'-'.'-'.'-' 350, 'a'.'san-diego'.'-'.'-'.'-'.'-' 600, 'b'.'-'.'new-york'.'-'.'-'.'-' 325, 'b'.'-'.'chicago'.'-'.'-'.'-' 300, 'b'.'-'.'topeka'.'-'.'-'.'-' 275, 'f'.'-'.'-'.'-'.'-'.'-' 90, 'c'.'-'.'-'.'seattle'.'new-york'.'-' 0.225, 'c'.'-'.'-'.'seattle'.'chicago'.'-' 0.153, 'c'.'-'.'-'.'seattle'.'topeka'.'-' 0.162, 'c'.'-'.'-'.'san-diego'.'new-york'.'-' 0.225, 'c'.'-'.'-'.'san-diego'.'chicago'.'-' 0.162, 'c'.'-'.'-'.'san-diego'.'topeka'.'-' 0.126, 'd'.'-'.'new-york'.'-'.'-'.'seattle' 2.5, 'd'.'-'.'new-york'.'-'.'-'.'san-diego' 2.5, 'd'.'-'.'chicago'.'-'.'-'.'seattle' 1.7, 'd'.'-'.'chicago'.'-'.'-'.'san-diego' 1.8, 'd'.'-'.'topeka'.'-'.'-'.'seattle' 1.8, 'd'.'-'.'topeka'.'-'.'-'.'san-diego' 1.4 /; $offEmpty SyNr Type DomInf Symbol 1 Par Relaxed parameterOutput(symbols, i1, jj, i3, i2, ii) $offEcho $call.checkErrorLevel 'diff -bw concat.txt concatExpected.txt > %system.NullFile%' $log test outputDimensions, dimensionMap and name with index space $onEmbeddedCode Connect: - GDXReader: file: t.gdx - Concatenate: outputDimensions: [canning_plants, markets] dimensionMap: {i: canning_plants, j: markets} parameterName: pOutput symbols: - name: a - name: b(uni) - name: f - name: c - name: d - GDXWriter: file: concat.gdx symbols: - name: pOutput $offEmbeddedCode $call 'gdxdump concat.gdx > concat.txt' $call 'gdxdump concat.gdx domainInfo >> concat.txt' $onEcho > concatExpected.txt $onEmpty Parameter pOutput(*,*,*,*) / 'a'.'seattle'.'-'.'-' 350, 'a'.'san-diego'.'-'.'-' 600, 'b'.'-'.'-'.'new-york' 325, 'b'.'-'.'-'.'chicago' 300, 'b'.'-'.'-'.'topeka' 275, 'f'.'-'.'-'.'-' 90, 'c'.'seattle'.'new-york'.'-' 0.225, 'c'.'seattle'.'chicago'.'-' 0.153, 'c'.'seattle'.'topeka'.'-' 0.162, 'c'.'san-diego'.'new-york'.'-' 0.225, 'c'.'san-diego'.'chicago'.'-' 0.162, 'c'.'san-diego'.'topeka'.'-' 0.126, 'd'.'seattle'.'new-york'.'-' 2.5, 'd'.'seattle'.'chicago'.'-' 1.7, 'd'.'seattle'.'topeka'.'-' 1.8, 'd'.'san-diego'.'new-york'.'-' 2.5, 'd'.'san-diego'.'chicago'.'-' 1.8, 'd'.'san-diego'.'topeka'.'-' 1.4 /; $offEmpty SyNr Type DomInf Symbol 1 Par Relaxed pOutput(symbols, canning_plants, markets, uni_0) $offEcho $call.checkErrorLevel 'diff -bw concat.txt concatExpected.txt > %system.NullFile%' $log test concatenate symbol more than once $onEmbeddedCode Connect: - GDXReader: file: t.gdx - Concatenate: symbols: - name: a - name: d newName: d1 - name: b - name: D - name: D(i1,j1) newName: d2 - GDXWriter: file: concat.gdx symbols: - name: parameterOutput - name: d $offEmbeddedCode $call 'gdxdump concat.gdx > concat.txt' $call 'gdxdump concat.gdx domainInfo >> concat.txt' $onEcho > concatExpected.txt $onEmpty Parameter d(*,*) distance in thousands of miles / 'seattle'.'new-york' 2.5, 'seattle'.'chicago' 1.7, 'seattle'.'topeka' 1.8, 'san-diego'.'new-york' 2.5, 'san-diego'.'chicago' 1.8, 'san-diego'.'topeka' 1.4 /; Parameter parameterOutput(*,*,*,*,*) / 'a'.'seattle'.'-'.'-'.'-' 350, 'a'.'san-diego'.'-'.'-'.'-' 600, 'd1'.'seattle'.'new-york'.'-'.'-' 2.5, 'd1'.'seattle'.'chicago'.'-'.'-' 1.7, 'd1'.'seattle'.'topeka'.'-'.'-' 1.8, 'd1'.'san-diego'.'new-york'.'-'.'-' 2.5, 'd1'.'san-diego'.'chicago'.'-'.'-' 1.8, 'd1'.'san-diego'.'topeka'.'-'.'-' 1.4, 'b'.'-'.'new-york'.'-'.'-' 325, 'b'.'-'.'chicago'.'-'.'-' 300, 'b'.'-'.'topeka'.'-'.'-' 275, 'D'.'seattle'.'new-york'.'-'.'-' 2.5, 'D'.'seattle'.'chicago'.'-'.'-' 1.7, 'D'.'seattle'.'topeka'.'-'.'-' 1.8, 'D'.'san-diego'.'new-york'.'-'.'-' 2.5, 'D'.'san-diego'.'chicago'.'-'.'-' 1.8, 'D'.'san-diego'.'topeka'.'-'.'-' 1.4, 'd2'.'-'.'-'.'seattle'.'new-york' 2.5, 'd2'.'-'.'-'.'seattle'.'chicago' 1.7, 'd2'.'-'.'-'.'seattle'.'topeka' 1.8, 'd2'.'-'.'-'.'san-diego'.'new-york' 2.5, 'd2'.'-'.'-'.'san-diego'.'chicago' 1.8, 'd2'.'-'.'-'.'san-diego'.'topeka' 1.4 /; $offEmpty SyNr Type DomInf Symbol 1 Par Relaxed d(i, j) 2 Par Relaxed parameterOutput(symbols, i, j, i1, j1) $offEcho $call.checkErrorLevel 'diff -bw concat.txt concatExpected.txt > %system.NullFile%' $log test skip set $onEmbeddedCode Connect: - GDXReader: file: t.gdx - Concatenate: skip: set - GDXWriter: file: concat.gdx symbols: - name: parameterOutput $offEmbeddedCode $call 'gdxdump concat.gdx > concat.txt' $call 'gdxdump concat.gdx domainInfo >> concat.txt' $onEcho > concatExpected.txt $onEmpty Parameter parameterOutput(*,*,*) / 'a'.'seattle'.'-' 350, 'a'.'san-diego'.'-' 600, 'b'.'-'.'new-york' 325, 'b'.'-'.'chicago' 300, 'b'.'-'.'topeka' 275, 'd'.'seattle'.'new-york' 2.5, 'd'.'seattle'.'chicago' 1.7, 'd'.'seattle'.'topeka' 1.8, 'd'.'san-diego'.'new-york' 2.5, 'd'.'san-diego'.'chicago' 1.8, 'd'.'san-diego'.'topeka' 1.4, 'f'.'-'.'-' 90, 'c'.'seattle'.'new-york' 0.225, 'c'.'seattle'.'chicago' 0.153, 'c'.'seattle'.'topeka' 0.162, 'c'.'san-diego'.'new-york' 0.225, 'c'.'san-diego'.'chicago' 0.162, 'c'.'san-diego'.'topeka' 0.126 /; $offEmpty SyNr Type DomInf Symbol 1 Par Relaxed parameterOutput(symbols, i, j) $offEcho $call.checkErrorLevel 'diff -bw concat.txt concatExpected.txt > %system.NullFile%' $log test skip par $onEmbeddedCode Connect: - GDXReader: file: t.gdx - Concatenate: skip: par - GDXWriter: file: concat.gdx symbols: - name: setOutput $offEmbeddedCode $call 'gdxdump concat.gdx > concat.txt' $call 'gdxdump concat.gdx domainInfo >> concat.txt' $onEcho > concatExpected.txt $onEmpty Set setOutput(*,*) / 'i'.'seattle', 'i'.'san-diego', 'j'.'new-york', 'j'.'chicago', 'j'.'topeka' /; $offEmpty SyNr Type DomInf Symbol 1 Set Relaxed setOutput(symbols, *) $offEcho $call.checkErrorLevel 'diff -bw concat.txt concatExpected.txt > %system.NullFile%' $log test skip symbols dimension $onembeddedCode Connect: - GDXReader: file: t.gdx - Concatenate: symbolsDimension: False - PythonCode: code: | data = connect.container["setOutput"].records.values.tolist() expected = [['seattle', '-', '-', ''], ['san-diego', '-', '-', ''], ['new-york', '-', '-', ''], ['chicago', '-', '-', ''], ['topeka', '-', '-', '']] if data != expected: raise Exception("Unexpected Data") data = connect.container["parameterOutput"].records.values.tolist() expected = [['-', 'seattle', '-', 350.0], ['-', 'san-diego', '-', 600.0], ['-', '-', 'new-york', 325.0], ['-', '-', 'chicago', 300.0], ['-', '-', 'topeka', 275.0], ['-', 'seattle', 'new-york', 2.5], ['-', 'seattle', 'chicago', 1.7], ['-', 'seattle', 'topeka', 1.8], ['-', 'san-diego', 'new-york', 2.5], ['-', 'san-diego', 'chicago', 1.8], ['-', 'san-diego', 'topeka', 1.4], ['-', '-', '-', 90.0], ['-', 'seattle', 'new-york', 0.225], ['-', 'seattle', 'chicago', 0.153], ['-', 'seattle', 'topeka', 0.162], ['-', 'san-diego', 'new-york', 0.225], ['-', 'san-diego', 'chicago', 0.162], ['-', 'san-diego', 'topeka', 0.126]] if data != expected: raise Exception("Unexpected Data") $offembeddedCode $onEcho > t.gms Set ii(*) cities / 'i1', 'i2', 'i3', 'i4', 'i5', 'i6', 'i7', 'i8', 'i9', 'i10', 'i11', 'i12', 'i13', 'i14', 'i15', 'i16', 'i17' /; Set i(ii) subset of cities / 'i1', 'i2', 'i3', 'i4', 'i5', 'i6' /; Alias (j, i); Set t(*) tours / 't1', 't2', 't3', 't4', 't5', 't6', 't7', 't8', 't9', 't10', 't11', 't12', 't13', 't14', 't15', 't16', 't17' /; Set cc(*) / 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'c10', 'c11', 'c12', 'c13', 'c14', 'c15', 'c16', 'c17', 'c18', 'c19', 'c20', 'c21', 'c22', 'c23', 'c24', 'c25', 'c26', 'c27', 'c28', 'c29', 'c30', 'c31', 'c32', 'c33', 'c34', 'c35', 'c36', 'c37', 'c38', 'c39', 'c40', 'c41', 'c42', 'c43', 'c44', 'c45', 'c46', 'c47', 'c48', 'c49', 'c50', 'c51', 'c52', 'c53', 'c54', 'c55', 'c56', 'c57', 'c58', 'c59', 'c60', 'c61', 'c62', 'c63', 'c64', 'c65', 'c66', 'c67', 'c68', 'c69', 'c70', 'c71', 'c72', 'c73', 'c74', 'c75', 'c76', 'c77', 'c78', 'c79', 'c80', 'c81', 'c82', 'c83', 'c84', 'c85', 'c86', 'c87', 'c88', 'c89', 'c90', 'c91', 'c92', 'c93', 'c94', 'c95', 'c96', 'c97', 'c98', 'c99', 'c100' /; Parameter tour(i,j,t) subtours / 'i1'.'i6'.'t1' 1, 'i2'.'i3'.'t3' 1, 'i3'.'i2'.'t3' 1, 'i4'.'i5'.'t2' 1, 'i5'.'i4'.'t2' 1, 'i6'.'i1'.'t1' 1 /; Parameter cutcoeff(cc,i,j) / 'c1'.'i1'.'i6' 1, 'c1'.'i2'.'i3' 1, 'c1'.'i3'.'i2' 1, 'c1'.'i4'.'i5' 1, 'c1'.'i5'.'i4' 1, 'c1'.'i6'.'i1' 1, 'c2'.'i1'.'i3' 1, 'c2'.'i2'.'i1' 1, 'c2'.'i3'.'i2' 1, 'c2'.'i4'.'i5' 1, 'c2'.'i5'.'i6' 1, 'c2'.'i6'.'i4' 1, 'c3'.'i1'.'i3' 1, 'c3'.'i2'.'i1' 1, 'c3'.'i3'.'i2' 1, 'c3'.'i4'.'i6' 1, 'c3'.'i5'.'i4' 1, 'c3'.'i6'.'i5' 1, 'c4'.'i1'.'i2' 1, 'c4'.'i2'.'i3' 1, 'c4'.'i3'.'i1' 1, 'c4'.'i4'.'i5' 1, 'c4'.'i5'.'i6' 1, 'c4'.'i6'.'i4' 1, 'c5'.'i1'.'i2' 1, 'c5'.'i2'.'i3' 1, 'c5'.'i3'.'i1' 1, 'c5'.'i4'.'i6' 1, 'c5'.'i5'.'i4' 1, 'c5'.'i6'.'i5' 1, 'c6'.'i1'.'i6' 1, 'c6'.'i2'.'i3' 1, 'c6'.'i3'.'i1' 1, 'c6'.'i4'.'i5' 1, 'c6'.'i5'.'i4' 1, 'c6'.'i6'.'i2' 1, 'c7'.'i1'.'i3' 1, 'c7'.'i2'.'i6' 1, 'c7'.'i3'.'i2' 1, 'c7'.'i4'.'i5' 1, 'c7'.'i5'.'i4' 1, 'c7'.'i6'.'i1' 1, 'c8'.'i1'.'i3' 1, 'c8'.'i2'.'i6' 1, 'c8'.'i3'.'i1' 1, 'c8'.'i4'.'i5' 1, 'c8'.'i5'.'i4' 1, 'c8'.'i6'.'i2' 1, 'c9'.'i1'.'i2' 1, 'c9'.'i2'.'i3' 1, 'c9'.'i3'.'i6' 1, 'c9'.'i4'.'i5' 1, 'c9'.'i5'.'i4' 1, 'c9'.'i6'.'i1' 1, 'c10'.'i1'.'i3' 1, 'c10'.'i2'.'i1' 1, 'c10'.'i3'.'i6' 1, 'c10'.'i4'.'i5' 1, 'c10'.'i5'.'i4' 1, 'c10'.'i6'.'i2' 1, 'c11'.'i1'.'i6' 1, 'c11'.'i2'.'i1' 1, 'c11'.'i3'.'i2' 1, 'c11'.'i4'.'i5' 1, 'c11'.'i5'.'i4' 1, 'c11'.'i6'.'i3' 1, 'c12'.'i1'.'i2' 1, 'c12'.'i2'.'i6' 1, 'c12'.'i3'.'i1' 1, 'c12'.'i4'.'i5' 1, 'c12'.'i5'.'i4' 1, 'c12'.'i6'.'i3' 1, 'c13'.'i1'.'i5' 1, 'c13'.'i2'.'i3' 1, 'c13'.'i3'.'i2' 1, 'c13'.'i4'.'i6' 1, 'c13'.'i5'.'i4' 1, 'c13'.'i6'.'i1' 1, 'c14'.'i1'.'i6' 1, 'c14'.'i2'.'i3' 1, 'c14'.'i3'.'i2' 1, 'c14'.'i4'.'i1' 1, 'c14'.'i5'.'i4' 1, 'c14'.'i6'.'i5' 1, 'c15'.'i1'.'i4' 1, 'c15'.'i2'.'i3' 1, 'c15'.'i3'.'i2' 1, 'c15'.'i4'.'i5' 1, 'c15'.'i5'.'i6' 1, 'c15'.'i6'.'i1' 1, 'c16'.'i1'.'i6' 1, 'c16'.'i2'.'i3' 1, 'c16'.'i3'.'i2' 1, 'c16'.'i4'.'i5' 1, 'c16'.'i5'.'i1' 1, 'c16'.'i6'.'i4' 1 /; Parameter empty(i); $offEcho $call.checkErrorLevel gams t.gms lo=%gams.lo% a=c gdx=t.gdx $log test name with index space $onEmbeddedCode Connect: - GDXReader: file: t.gdx - Concatenate: outputDimensions: [i, j, j] symbols: - name: tour(i,i,t) - name: cutcoeff(cc,j,j) - GDXWriter: file: concat.gdx symbols: - name: parameterOutput $offEmbeddedCode $call 'gdxdump concat.gdx > concat.txt' $call 'gdxdump concat.gdx domainInfo >> concat.txt' $onEcho > concatExpected.txt $onEmpty Parameter parameterOutput(*,*,*,*,*,*) / 'tour'.'i1'.'-'.'-'.'i6'.'t1' 1, 'tour'.'i2'.'-'.'-'.'i3'.'t3' 1, 'tour'.'i3'.'-'.'-'.'i2'.'t3' 1, 'tour'.'i4'.'-'.'-'.'i5'.'t2' 1, 'tour'.'i5'.'-'.'-'.'i4'.'t2' 1, 'tour'.'i6'.'-'.'-'.'i1'.'t1' 1, 'cutcoeff'.'-'.'i1'.'i2'.'c4'.'-' 1, 'cutcoeff'.'-'.'i1'.'i2'.'c5'.'-' 1, 'cutcoeff'.'-'.'i1'.'i2'.'c9'.'-' 1, 'cutcoeff'.'-'.'i1'.'i2'.'c12'.'-' 1, 'cutcoeff'.'-'.'i1'.'i3'.'c2'.'-' 1, 'cutcoeff'.'-'.'i1'.'i3'.'c3'.'-' 1, 'cutcoeff'.'-'.'i1'.'i3'.'c7'.'-' 1, 'cutcoeff'.'-'.'i1'.'i3'.'c8'.'-' 1, 'cutcoeff'.'-'.'i1'.'i3'.'c10'.'-' 1, 'cutcoeff'.'-'.'i1'.'i4'.'c15'.'-' 1, 'cutcoeff'.'-'.'i1'.'i5'.'c13'.'-' 1, 'cutcoeff'.'-'.'i1'.'i6'.'c1'.'-' 1, 'cutcoeff'.'-'.'i1'.'i6'.'c6'.'-' 1, 'cutcoeff'.'-'.'i1'.'i6'.'c11'.'-' 1, 'cutcoeff'.'-'.'i1'.'i6'.'c14'.'-' 1, 'cutcoeff'.'-'.'i1'.'i6'.'c16'.'-' 1, 'cutcoeff'.'-'.'i2'.'i1'.'c2'.'-' 1, 'cutcoeff'.'-'.'i2'.'i1'.'c3'.'-' 1, 'cutcoeff'.'-'.'i2'.'i1'.'c10'.'-' 1, 'cutcoeff'.'-'.'i2'.'i1'.'c11'.'-' 1, 'cutcoeff'.'-'.'i2'.'i3'.'c1'.'-' 1, 'cutcoeff'.'-'.'i2'.'i3'.'c4'.'-' 1, 'cutcoeff'.'-'.'i2'.'i3'.'c5'.'-' 1, 'cutcoeff'.'-'.'i2'.'i3'.'c6'.'-' 1, 'cutcoeff'.'-'.'i2'.'i3'.'c9'.'-' 1, 'cutcoeff'.'-'.'i2'.'i3'.'c13'.'-' 1, 'cutcoeff'.'-'.'i2'.'i3'.'c14'.'-' 1, 'cutcoeff'.'-'.'i2'.'i3'.'c15'.'-' 1, 'cutcoeff'.'-'.'i2'.'i3'.'c16'.'-' 1, 'cutcoeff'.'-'.'i2'.'i6'.'c7'.'-' 1, 'cutcoeff'.'-'.'i2'.'i6'.'c8'.'-' 1, 'cutcoeff'.'-'.'i2'.'i6'.'c12'.'-' 1, 'cutcoeff'.'-'.'i3'.'i1'.'c4'.'-' 1, 'cutcoeff'.'-'.'i3'.'i1'.'c5'.'-' 1, 'cutcoeff'.'-'.'i3'.'i1'.'c6'.'-' 1, 'cutcoeff'.'-'.'i3'.'i1'.'c8'.'-' 1, 'cutcoeff'.'-'.'i3'.'i1'.'c12'.'-' 1, 'cutcoeff'.'-'.'i3'.'i2'.'c1'.'-' 1, 'cutcoeff'.'-'.'i3'.'i2'.'c2'.'-' 1, 'cutcoeff'.'-'.'i3'.'i2'.'c3'.'-' 1, 'cutcoeff'.'-'.'i3'.'i2'.'c7'.'-' 1, 'cutcoeff'.'-'.'i3'.'i2'.'c11'.'-' 1, 'cutcoeff'.'-'.'i3'.'i2'.'c13'.'-' 1, 'cutcoeff'.'-'.'i3'.'i2'.'c14'.'-' 1, 'cutcoeff'.'-'.'i3'.'i2'.'c15'.'-' 1, 'cutcoeff'.'-'.'i3'.'i2'.'c16'.'-' 1, 'cutcoeff'.'-'.'i3'.'i6'.'c9'.'-' 1, 'cutcoeff'.'-'.'i3'.'i6'.'c10'.'-' 1, 'cutcoeff'.'-'.'i4'.'i1'.'c14'.'-' 1, 'cutcoeff'.'-'.'i4'.'i5'.'c1'.'-' 1, 'cutcoeff'.'-'.'i4'.'i5'.'c2'.'-' 1, 'cutcoeff'.'-'.'i4'.'i5'.'c4'.'-' 1, 'cutcoeff'.'-'.'i4'.'i5'.'c6'.'-' 1, 'cutcoeff'.'-'.'i4'.'i5'.'c7'.'-' 1, 'cutcoeff'.'-'.'i4'.'i5'.'c8'.'-' 1, 'cutcoeff'.'-'.'i4'.'i5'.'c9'.'-' 1, 'cutcoeff'.'-'.'i4'.'i5'.'c10'.'-' 1, 'cutcoeff'.'-'.'i4'.'i5'.'c11'.'-' 1, 'cutcoeff'.'-'.'i4'.'i5'.'c12'.'-' 1, 'cutcoeff'.'-'.'i4'.'i5'.'c15'.'-' 1, 'cutcoeff'.'-'.'i4'.'i5'.'c16'.'-' 1, 'cutcoeff'.'-'.'i4'.'i6'.'c3'.'-' 1, 'cutcoeff'.'-'.'i4'.'i6'.'c5'.'-' 1, 'cutcoeff'.'-'.'i4'.'i6'.'c13'.'-' 1, 'cutcoeff'.'-'.'i5'.'i1'.'c16'.'-' 1, 'cutcoeff'.'-'.'i5'.'i4'.'c1'.'-' 1, 'cutcoeff'.'-'.'i5'.'i4'.'c3'.'-' 1, 'cutcoeff'.'-'.'i5'.'i4'.'c5'.'-' 1, 'cutcoeff'.'-'.'i5'.'i4'.'c6'.'-' 1, 'cutcoeff'.'-'.'i5'.'i4'.'c7'.'-' 1, 'cutcoeff'.'-'.'i5'.'i4'.'c8'.'-' 1, 'cutcoeff'.'-'.'i5'.'i4'.'c9'.'-' 1, 'cutcoeff'.'-'.'i5'.'i4'.'c10'.'-' 1, 'cutcoeff'.'-'.'i5'.'i4'.'c11'.'-' 1, 'cutcoeff'.'-'.'i5'.'i4'.'c12'.'-' 1, 'cutcoeff'.'-'.'i5'.'i4'.'c13'.'-' 1, 'cutcoeff'.'-'.'i5'.'i4'.'c14'.'-' 1, 'cutcoeff'.'-'.'i5'.'i6'.'c2'.'-' 1, 'cutcoeff'.'-'.'i5'.'i6'.'c4'.'-' 1, 'cutcoeff'.'-'.'i5'.'i6'.'c15'.'-' 1, 'cutcoeff'.'-'.'i6'.'i1'.'c1'.'-' 1, 'cutcoeff'.'-'.'i6'.'i1'.'c7'.'-' 1, 'cutcoeff'.'-'.'i6'.'i1'.'c9'.'-' 1, 'cutcoeff'.'-'.'i6'.'i1'.'c13'.'-' 1, 'cutcoeff'.'-'.'i6'.'i1'.'c15'.'-' 1, 'cutcoeff'.'-'.'i6'.'i2'.'c6'.'-' 1, 'cutcoeff'.'-'.'i6'.'i2'.'c8'.'-' 1, 'cutcoeff'.'-'.'i6'.'i2'.'c10'.'-' 1, 'cutcoeff'.'-'.'i6'.'i3'.'c11'.'-' 1, 'cutcoeff'.'-'.'i6'.'i3'.'c12'.'-' 1, 'cutcoeff'.'-'.'i6'.'i4'.'c2'.'-' 1, 'cutcoeff'.'-'.'i6'.'i4'.'c4'.'-' 1, 'cutcoeff'.'-'.'i6'.'i4'.'c16'.'-' 1, 'cutcoeff'.'-'.'i6'.'i5'.'c3'.'-' 1, 'cutcoeff'.'-'.'i6'.'i5'.'c5'.'-' 1, 'cutcoeff'.'-'.'i6'.'i5'.'c14'.'-' 1 /; $offEmpty SyNr Type DomInf Symbol 1 Par Relaxed parameterOutput(symbols, i, j, j, uni_0, uni_1) $offEcho $call.checkErrorLevel 'diff -bw concat.txt concatExpected.txt > %system.NullFile%' $log test outputDimensions: all and name with index space $onEmbeddedCode Connect: - GDXReader: file: t.gdx - Concatenate: symbols: - name: tour(i,j,t) - name: cutcoeff(cc,j,j) - GDXWriter: file: concat.gdx symbols: - name: parameterOutput $offEmbeddedCode $call 'gdxdump concat.gdx > concat.txt' $call 'gdxdump concat.gdx domainInfo >> concat.txt' $onEcho > concatExpected.txt $onEmpty Parameter parameterOutput(*,*,*,*,*,*) / 'tour'.'i1'.'i6'.'t1'.'-'.'-' 1, 'tour'.'i2'.'i3'.'t3'.'-'.'-' 1, 'tour'.'i3'.'i2'.'t3'.'-'.'-' 1, 'tour'.'i4'.'i5'.'t2'.'-'.'-' 1, 'tour'.'i5'.'i4'.'t2'.'-'.'-' 1, 'tour'.'i6'.'i1'.'t1'.'-'.'-' 1, 'cutcoeff'.'-'.'i1'.'-'.'c1'.'i6' 1, 'cutcoeff'.'-'.'i1'.'-'.'c2'.'i3' 1, 'cutcoeff'.'-'.'i1'.'-'.'c3'.'i3' 1, 'cutcoeff'.'-'.'i1'.'-'.'c4'.'i2' 1, 'cutcoeff'.'-'.'i1'.'-'.'c5'.'i2' 1, 'cutcoeff'.'-'.'i1'.'-'.'c6'.'i6' 1, 'cutcoeff'.'-'.'i1'.'-'.'c7'.'i3' 1, 'cutcoeff'.'-'.'i1'.'-'.'c8'.'i3' 1, 'cutcoeff'.'-'.'i1'.'-'.'c9'.'i2' 1, 'cutcoeff'.'-'.'i1'.'-'.'c10'.'i3' 1, 'cutcoeff'.'-'.'i1'.'-'.'c11'.'i6' 1, 'cutcoeff'.'-'.'i1'.'-'.'c12'.'i2' 1, 'cutcoeff'.'-'.'i1'.'-'.'c13'.'i5' 1, 'cutcoeff'.'-'.'i1'.'-'.'c14'.'i6' 1, 'cutcoeff'.'-'.'i1'.'-'.'c15'.'i4' 1, 'cutcoeff'.'-'.'i1'.'-'.'c16'.'i6' 1, 'cutcoeff'.'-'.'i2'.'-'.'c1'.'i3' 1, 'cutcoeff'.'-'.'i2'.'-'.'c2'.'i1' 1, 'cutcoeff'.'-'.'i2'.'-'.'c3'.'i1' 1, 'cutcoeff'.'-'.'i2'.'-'.'c4'.'i3' 1, 'cutcoeff'.'-'.'i2'.'-'.'c5'.'i3' 1, 'cutcoeff'.'-'.'i2'.'-'.'c6'.'i3' 1, 'cutcoeff'.'-'.'i2'.'-'.'c7'.'i6' 1, 'cutcoeff'.'-'.'i2'.'-'.'c8'.'i6' 1, 'cutcoeff'.'-'.'i2'.'-'.'c9'.'i3' 1, 'cutcoeff'.'-'.'i2'.'-'.'c10'.'i1' 1, 'cutcoeff'.'-'.'i2'.'-'.'c11'.'i1' 1, 'cutcoeff'.'-'.'i2'.'-'.'c12'.'i6' 1, 'cutcoeff'.'-'.'i2'.'-'.'c13'.'i3' 1, 'cutcoeff'.'-'.'i2'.'-'.'c14'.'i3' 1, 'cutcoeff'.'-'.'i2'.'-'.'c15'.'i3' 1, 'cutcoeff'.'-'.'i2'.'-'.'c16'.'i3' 1, 'cutcoeff'.'-'.'i3'.'-'.'c1'.'i2' 1, 'cutcoeff'.'-'.'i3'.'-'.'c2'.'i2' 1, 'cutcoeff'.'-'.'i3'.'-'.'c3'.'i2' 1, 'cutcoeff'.'-'.'i3'.'-'.'c4'.'i1' 1, 'cutcoeff'.'-'.'i3'.'-'.'c5'.'i1' 1, 'cutcoeff'.'-'.'i3'.'-'.'c6'.'i1' 1, 'cutcoeff'.'-'.'i3'.'-'.'c7'.'i2' 1, 'cutcoeff'.'-'.'i3'.'-'.'c8'.'i1' 1, 'cutcoeff'.'-'.'i3'.'-'.'c9'.'i6' 1, 'cutcoeff'.'-'.'i3'.'-'.'c10'.'i6' 1, 'cutcoeff'.'-'.'i3'.'-'.'c11'.'i2' 1, 'cutcoeff'.'-'.'i3'.'-'.'c12'.'i1' 1, 'cutcoeff'.'-'.'i3'.'-'.'c13'.'i2' 1, 'cutcoeff'.'-'.'i3'.'-'.'c14'.'i2' 1, 'cutcoeff'.'-'.'i3'.'-'.'c15'.'i2' 1, 'cutcoeff'.'-'.'i3'.'-'.'c16'.'i2' 1, 'cutcoeff'.'-'.'i4'.'-'.'c1'.'i5' 1, 'cutcoeff'.'-'.'i4'.'-'.'c2'.'i5' 1, 'cutcoeff'.'-'.'i4'.'-'.'c3'.'i6' 1, 'cutcoeff'.'-'.'i4'.'-'.'c4'.'i5' 1, 'cutcoeff'.'-'.'i4'.'-'.'c5'.'i6' 1, 'cutcoeff'.'-'.'i4'.'-'.'c6'.'i5' 1, 'cutcoeff'.'-'.'i4'.'-'.'c7'.'i5' 1, 'cutcoeff'.'-'.'i4'.'-'.'c8'.'i5' 1, 'cutcoeff'.'-'.'i4'.'-'.'c9'.'i5' 1, 'cutcoeff'.'-'.'i4'.'-'.'c10'.'i5' 1, 'cutcoeff'.'-'.'i4'.'-'.'c11'.'i5' 1, 'cutcoeff'.'-'.'i4'.'-'.'c12'.'i5' 1, 'cutcoeff'.'-'.'i4'.'-'.'c13'.'i6' 1, 'cutcoeff'.'-'.'i4'.'-'.'c14'.'i1' 1, 'cutcoeff'.'-'.'i4'.'-'.'c15'.'i5' 1, 'cutcoeff'.'-'.'i4'.'-'.'c16'.'i5' 1, 'cutcoeff'.'-'.'i5'.'-'.'c1'.'i4' 1, 'cutcoeff'.'-'.'i5'.'-'.'c2'.'i6' 1, 'cutcoeff'.'-'.'i5'.'-'.'c3'.'i4' 1, 'cutcoeff'.'-'.'i5'.'-'.'c4'.'i6' 1, 'cutcoeff'.'-'.'i5'.'-'.'c5'.'i4' 1, 'cutcoeff'.'-'.'i5'.'-'.'c6'.'i4' 1, 'cutcoeff'.'-'.'i5'.'-'.'c7'.'i4' 1, 'cutcoeff'.'-'.'i5'.'-'.'c8'.'i4' 1, 'cutcoeff'.'-'.'i5'.'-'.'c9'.'i4' 1, 'cutcoeff'.'-'.'i5'.'-'.'c10'.'i4' 1, 'cutcoeff'.'-'.'i5'.'-'.'c11'.'i4' 1, 'cutcoeff'.'-'.'i5'.'-'.'c12'.'i4' 1, 'cutcoeff'.'-'.'i5'.'-'.'c13'.'i4' 1, 'cutcoeff'.'-'.'i5'.'-'.'c14'.'i4' 1, 'cutcoeff'.'-'.'i5'.'-'.'c15'.'i6' 1, 'cutcoeff'.'-'.'i5'.'-'.'c16'.'i1' 1, 'cutcoeff'.'-'.'i6'.'-'.'c1'.'i1' 1, 'cutcoeff'.'-'.'i6'.'-'.'c2'.'i4' 1, 'cutcoeff'.'-'.'i6'.'-'.'c3'.'i5' 1, 'cutcoeff'.'-'.'i6'.'-'.'c4'.'i4' 1, 'cutcoeff'.'-'.'i6'.'-'.'c5'.'i5' 1, 'cutcoeff'.'-'.'i6'.'-'.'c6'.'i2' 1, 'cutcoeff'.'-'.'i6'.'-'.'c7'.'i1' 1, 'cutcoeff'.'-'.'i6'.'-'.'c8'.'i2' 1, 'cutcoeff'.'-'.'i6'.'-'.'c9'.'i1' 1, 'cutcoeff'.'-'.'i6'.'-'.'c10'.'i2' 1, 'cutcoeff'.'-'.'i6'.'-'.'c11'.'i3' 1, 'cutcoeff'.'-'.'i6'.'-'.'c12'.'i3' 1, 'cutcoeff'.'-'.'i6'.'-'.'c13'.'i1' 1, 'cutcoeff'.'-'.'i6'.'-'.'c14'.'i5' 1, 'cutcoeff'.'-'.'i6'.'-'.'c15'.'i1' 1, 'cutcoeff'.'-'.'i6'.'-'.'c16'.'i4' 1 /; $offEmpty SyNr Type DomInf Symbol 1 Par Relaxed parameterOutput(symbols, i, j, t, cc, j) $offEcho $call.checkErrorLevel 'diff -bw concat.txt concatExpected.txt > %system.NullFile%' $log test empty symbol and emptyUel $onEmbeddedCode Connect: - GDXReader: file: t.gdx - Concatenate: outputDimensions: [i, j, k] emptyUel: " " symbols: - name: tour - name: empty - GDXWriter: file: concat.gdx symbols: - name: parameterOutput $offEmbeddedCode $call 'gdxdump concat.gdx > concat.txt' $call 'gdxdump concat.gdx domainInfo >> concat.txt' $onEcho > concatExpected.txt $onEmpty Parameter parameterOutput(*,*,*,*,*) / 'tour'.'i1'.'i6'.''.'t1' 1, 'tour'.'i2'.'i3'.''.'t3' 1, 'tour'.'i3'.'i2'.''.'t3' 1, 'tour'.'i4'.'i5'.''.'t2' 1, 'tour'.'i5'.'i4'.''.'t2' 1, 'tour'.'i6'.'i1'.''.'t1' 1 /; $offEmpty SyNr Type DomInf Symbol 1 Par Relaxed parameterOutput(symbols, i, j, k, uni_0) $offEcho $call.checkErrorLevel 'diff -bw concat.txt concatExpected.txt > %system.NullFile%' $log test order of outputDimensions with outputDimensions: all $onEcho > t.gms Sets i(i) / i0*i5 "i_text" / j(j) / j0*j5 "j_text" / k(k) / k0*k5 "k_text" /; Alias (j,jj); Parameters p1(k,j) p2(j,i,j); p1(k,j)$(uniform(0,1)>0.5) = uniform(0,1); p2(j,i,j)$(uniform(0,1)>0.5) = uniform(0,1); $onUNDF Parameter special1 /'NA' NA, 'UNDF' UNDF/ special2 /'NA' NA, '1' 1/; $offEcho $call.checkErrorLevel gams t.gms lo=%gams.lo% gdx=t.gdx $onEmbeddedCode Connect: - GDXReader: file: t.gdx symbols: - name: p1 - name: p2 - Concatenate: symbols: all - GDXWriter: file: concat.gdx symbols: - name: parameterOutput $offEmbeddedCode $call 'gdxdump concat.gdx > concat.txt' $call 'gdxdump concat.gdx domainInfo >> concat.txt' $onEcho > concatExpected.txt $onEmpty Parameter parameterOutput(*,*,*,*,*) / 'p1'.'k0'.'j1'.'-'.'-' 0.550375356, 'p1'.'k1'.'j0'.'-'.'-' 0.067113723, 'p1'.'k1'.'j1'.'-'.'-' 0.998117627, 'p1'.'k1'.'j2'.'-'.'-' 0.991133039, 'p1'.'k1'.'j3'.'-'.'-' 0.130692483, 'p1'.'k1'.'j4'.'-'.'-' 0.159517864, 'p1'.'k2'.'j0'.'-'.'-' 0.435356381, 'p1'.'k2'.'j5'.'-'.'-' 0.830892812, 'p1'.'k3'.'j1'.'-'.'-' 0.775857606, 'p1'.'k3'.'j4'.'-'.'-' 0.160172762, 'p1'.'k3'.'j5'.'-'.'-' 0.265114545, 'p1'.'k4'.'j1'.'-'.'-' 0.722719071, 'p1'.'k4'.'j2'.'-'.'-' 0.463797865, 'p1'.'k5'.'j3'.'-'.'-' 0.560745547, 'p1'.'k5'.'j4'.'-'.'-' 0.297805864, 'p1'.'k5'.'j5'.'-'.'-' 0.755821674, 'p2'.'-'.'j0'.'i0'.'j0' 0.283864198, 'p2'.'-'.'j0'.'i3'.'j0' 0.545309498, 'p2'.'-'.'j0'.'i5'.'j0' 0.072766998, 'p2'.'-'.'j1'.'i1'.'j1' 0.750207669, 'p2'.'-'.'j1'.'i4'.'j1' 0.621229984, 'p2'.'-'.'j2'.'i4'.'j2' 0.379937906, 'p2'.'-'.'j2'.'i5'.'j2' 0.300034258, 'p2'.'-'.'j3'.'i1'.'j3' 0.069232463, 'p2'.'-'.'j4'.'i5'.'j4' 0.993602205, 'p2'.'-'.'j5'.'i2'.'j5' 0.396684142, 'p2'.'-'.'j5'.'i3'.'j5' 0.11957773, 'p2'.'-'.'j5'.'i4'.'j5' 0.055418475, 'p2'.'-'.'j5'.'i5'.'j5' 0.05140711 /; $offEmpty SyNr Type DomInf Symbol 1 Par Relaxed parameterOutput(symbols, k, j, i, j) $offEcho $call.checkErrorLevel 'diff -bw concat.txt concatExpected.txt > %system.NullFile%' $onEmbeddedCode Connect: - GDXReader: file: t.gdx symbols: - name: p1 - name: special1 - name: special2 - Concatenate: symbols: all - GDXWriter: file: concat.gdx symbols: - name: parameterOutput $offEmbeddedCode $call 'gdxdump concat.gdx > concat.txt' $call 'gdxdump concat.gdx domainInfo >> concat.txt' $onEcho > concatExpected.txt $onEmpty Parameter parameterOutput(*,*,*,*) / 'p1'.'k0'.'j1'.'-' 0.550375356, 'p1'.'k1'.'j0'.'-' 0.067113723, 'p1'.'k1'.'j1'.'-' 0.998117627, 'p1'.'k1'.'j2'.'-' 0.991133039, 'p1'.'k1'.'j3'.'-' 0.130692483, 'p1'.'k1'.'j4'.'-' 0.159517864, 'p1'.'k2'.'j0'.'-' 0.435356381, 'p1'.'k2'.'j5'.'-' 0.830892812, 'p1'.'k3'.'j1'.'-' 0.775857606, 'p1'.'k3'.'j4'.'-' 0.160172762, 'p1'.'k3'.'j5'.'-' 0.265114545, 'p1'.'k4'.'j1'.'-' 0.722719071, 'p1'.'k4'.'j2'.'-' 0.463797865, 'p1'.'k5'.'j3'.'-' 0.560745547, 'p1'.'k5'.'j4'.'-' 0.297805864, 'p1'.'k5'.'j5'.'-' 0.755821674, 'special1'.'-'.'-'.'NA' NA, 'special1'.'-'.'-'.'UNDF' Undf, 'special2'.'-'.'-'.'NA' NA, 'special2'.'-'.'-'.'1' 1 /; $offEmpty SyNr Type DomInf Symbol 1 Par Relaxed parameterOutput(symbols, k, j, *) $offEcho $call.checkErrorLevel 'diff -bw concat.txt concatExpected.txt > %system.NullFile%' $log test recover categories after pd.concat with and without symbols dimension Set j /j1*j3/; Alias (j,jj); Parameter p1(*,*),p2(*,*); p1(j,jj)=1; p1(j,"j2")=0; p1("j3","j2")=1; p2(j,jj)=1; p2(j,"j3")=0; execute_unload "recover_categories.gdx", p1, p2; EmbeddedCode Connect: - GDXReader: file: recover_categories.gdx - Concatenate: symbols: all - PythonCode: code: | dim3 = connect.container["parameterOutput"].getUELs(dimensions=2) if dim3 != ['j1', 'j2', 'j3', '-']: raise Exception("Unexpected categories.") EndEmbeddedCode EmbeddedCode Connect: - GDXReader: file: recover_categories.gdx - Concatenate: symbols: all symbolsDimension: False - PythonCode: code: | dim2 = connect.container["parameterOutput"].getUELs(dimensions=1) if dim2 != ['j1', 'j2', 'j3', '-']: raise Exception("Unexpected categories.") EndEmbeddedCode $log test behavior when input is None records symbol (Parameter) EmbeddedCode Connect: - PythonCode: code: | connect.container.addParameter("p", ["*", "i"]) - Concatenate: symbols: all - PythonCode: code: | data = connect.container['parameterOutput'].records expected_cols = ['symbols', 'uni', 'i', 'value'] if data is None or not data.empty: raise Exception("Expected >parameterOutput< to have an empty DataFrame.") if (data.columns != expected_cols).any(): raise Exception("Unexpected columns for >parameterOutput<.") EndEmbeddedCode $log test behavior when input is None records symbol (Set) EmbeddedCode Connect: - PythonCode: code: | connect.container.addSet("p", ["j", "*", "i"]) - Concatenate: symbols: all - PythonCode: code: | data = https://www.gams.com/latest/testlib_ml/connect.container['setOutput'].records expected_cols = ['symbols', 'j', 'uni', 'i', 'element_text'] if data is None or not data.empty: raise Exception("Expected >setOutput< to have an empty DataFrame.") if (data.columns != expected_cols).any(): raise Exception("Unexpected columns for >setOutput<.") EndEmbeddedCode