Description
This test ensures the correctness of the Connect agent RawCSVReader. Contributor: Michael Bussieck, February 2023
Small Model of Type : GAMS
Category : GAMS Test library
Main file : carcr.gms
$title 'Test Connect agent RawCSVReader' (CARCR,SEQ=934)
$onText
This test ensures the correctness of the Connect agent RawCSVReader.
Contributor: Michael Bussieck, February 2023
$offText
$log --- Using Python library %sysEnv.GMSPYTHONLIB%
$onEchoV > carcr.csv
TRUE,1
FALSE,2
1/1/2008,3
inf,4
-inf,5
na,6
nan,7
eps,8
Eps,9
undef,10
39448,11
short,
a23456789012345678901234567890123456789012345678901234567890123,
a234567890123456789012345678901234567890123456789012345678901234,
a234567890123456789012345678901234567890123456789012345678901~1,
a23456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678,
'test',
"test",
t"es"t,
t'es't,
t'e"s't,
This is some label that can not be represented in GAMS since it is too long
This is some label that can not be represented in GAMS since it is ALSO too long
This is ANOTHER label that can not be represented in GAMS since it is too long
This is A THIRD label that can not be represented in GAMS since it is too long
$offEcho
$onEchoV > t.gms
Set c(*) Columns / %C%1*%C%2 /;
Set r(*) Rows / %R%1*%R%25 /;
$onUNDF
Parameter vf(*,*) Cells with numerical value /
%R%1 .%C%1 1,
%R%1 .%C%2 1,
%R%2 .%C%2 2,
%R%3 .%C%2 3,
%R%4 .%C%1 +Inf,
%R%4 .%C%2 4,
%R%5 .%C%1 -Inf,
%R%5 .%C%2 5,
%R%6 .%C%1 NA,
%R%6 .%C%2 6,
%R%7 .%C%1 Undf,
%R%7 .%C%2 7,
%R%8 .%C%1 Eps,
%R%8 .%C%2 8,
%R%9 .%C%1 Eps,
%R%9 .%C%2 9,
%R%10.%C%1 Undf,
%R%10.%C%2 10,
%R%11.%C%1 39448,
%R%11.%C%2 11 /;
$offUNDF
Set vs(*,*) Cells with explanatory text /
%R%1. %C%1 'TRUE',
%R%2. %C%1 'FALSE',
%R%3. %C%1 '1/1/2008',
%R%4. %C%1 inf,
%R%5. %C%1 -inf,
%R%6. %C%1 na,
%R%7. %C%1 nan,
%R%8. %C%1 eps,
%R%9. %C%1 Eps,
%R%10.%C%1 undef,
%R%12.%C%1 short,
%R%13.%C%1 a23456789012345678901234567890123456789012345678901234567890123,
%R%14.%C%1 a234567890123456789012345678901234567890123456789012345678901234,
%R%15.%C%1 a234567890123456789012345678901234567890123456789012345678901~1,
%R%16.%C%1 a2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234
%R%17.%C%1 "'test'"
%R%18.%C%1 test
%R%19.%C%1 't"es"t'
%R%20.%C%1 "t'es't"
%R%21.%C%1 "t'e's't"
%R%22.%C%1 "This is some label that can not be represented in GAMS since it is too long"
%R%23.%C%1 "This is some label that can not be represented in GAMS since it is ALSO too long"
%R%24.%C%1 "This is ANOTHER label that can not be represented in GAMS since it is too long"
%R%25.%C%1 "This is A THIRD label that can not be represented in GAMS since it is too long"
/;
Set %vu%(*,*,*) Cells with potential GAMS label /
%R%1.%C%1.'TRUE' TRUE,
%R%2.%C%1.'FALSE' FALSE,
%R%3.%C%1.'1/1/2008' '1/1/2008',
%R%4.%C%1.'inf' inf,
%R%5.%C%1.'-inf' -inf,
%R%6.%C%1.'na' na,
$ifThen %READASSTRING%==False
%R%1.%C%2.'1.0' 1.0,
%R%2.%C%2.'2.0' 2.0,
%R%3.%C%2.'3.0' 3.0,
%R%4.%C%2.'4.0' 4.0,
%R%5.%C%2.'5.0' 5.0,
%R%6.%C%2.'6.0' 6.0,
%R%7.%C%2.'7.0' 7.0,
%R%8.%C%2.'8.0' 8.0,
%R%9.%C%2.'9.0' 9.0,
%R%10.%C%2.'10.0' 10.0,
%R%11.%C%2.'11.0' 11.0,
$else
%R%1.%C%2.'1' 1,
%R%2.%C%2.'2' 2,
%R%3.%C%2.'3' 3,
%R%4.%C%2.'4' 4,
%R%5.%C%2.'5' 5,
%R%6.%C%2.'6' 6,
%R%7.%C%2.'7' 7,
%R%8.%C%2.'8' 8,
%R%9.%C%2.'9' 9,
%R%10.%C%2.'10' 10,
%R%11.%C%2.'11' 11,
$endIf
%R%7.%C%1.'nan' nan,
%R%8.%C%1.'eps' eps,
%R%9.%C%1.'eps' Eps,
%R%10.%C%1.'undef' undef,
%R%11.%C%1.'39448' 39448,
%R%12.%C%1.'short' short,
%R%13.%C%1.'a23456789012345678901234567890123456789012345678901234567890123' a23456789012345678901234567890123456789012345678901234567890123,
%R%14.%C%1.'a234567890123456789012345678901234567890123456789012345678901~1' a234567890123456789012345678901234567890123456789012345678901234,
%R%15.%C%1.'a234567890123456789012345678901234567890123456789012345678901~2' a234567890123456789012345678901234567890123456789012345678901~1,
%R%16.%C%1.'a234567890123456789012345678901234567890123456789012345678901~3' a2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234
%R%17.%C%1."'test'" "'test'"
%R%18.%C%1.test test
%R%19.%C%1.'t"es"t' 't"es"t'
%R%20.%C%1."t'es't" "t'es't"
%R%22.%C%1.'This is some label that can not be represented in GAMS since ~1' "This is some label that can not be represented in GAMS since it is too long"
%R%23.%C%1.'This is some label that can not be represented in GAMS since ~2' "This is some label that can not be represented in GAMS since it is ALSO too long"
%R%24.%C%1.'This is ANOTHER label that can not be represented in GAMS sin~1' "This is ANOTHER label that can not be represented in GAMS since it is too long"
%R%25.%C%1.'This is A THIRD label that can not be represented in GAMS sin~1' "This is A THIRD label that can not be represented in GAMS since it is too long"
/;
$offEcho
*** test expected errors ***
$log Test raising an exception for existing symbol name
$onEmbeddedCode Connect:
- PythonCode:
code: |
connect.container.addSet("r")
- RawCSVReader:
file: carcr.csv
readAsString: False
rowLabel: rxx
columnLabel: cxx
vuName: vux
$offEmbeddedCode
$if errorFree $abort 'Expect errors'
$clearErrors
*********************************************************
$call.checkErrorLevel gams t.gms lo=%gams.lo% gdx ref.gdx --READASSTRING=True --vu=vu --S=S --R=R --C=C
$onEmbeddedCode Connect:
- RawCSVReader:
file: carcr.csv
- GDXWriter:
file: ctrcrout.gdx
$offEmbeddedCode
$call.checkErrorLevel gdxdiff ref.gdx ctrcrout.gdx > %system.NullFile%
$call.checkErrorLevel gams t.gms lo=%gams.lo% gdx ref.gdx --READASSTRING=False --vu=vu --S=S --R=R --C=C
$onEmbeddedCode Connect:
- RawCSVReader:
file: carcr.csv
readAsString: False
- GDXWriter:
file: ctrcrout.gdx
$offEmbeddedCode
$call.checkErrorLevel gdxdiff ref.gdx ctrcrout.gdx > %system.NullFile%
$call.checkErrorLevel gams t.gms lo=%gams.lo% gdx ref.gdx --READASSTRING=True --vu=vux --R=rxx --C=cxx
$onEmbeddedCode Connect:
- RawCSVReader:
file: carcr.csv
rowLabel: rxx
columnLabel: cxx
vuName: vux
- GDXWriter:
file: ctrcrout.gdx
symbols: all
$offEmbeddedCode
$call.checkErrorLevel gdxdiff ref.gdx ctrcrout.gdx > %system.NullFile%
$call.checkErrorLevel gams t.gms lo=%gams.lo% gdx ref.gdx --READASSTRING=False --vu=vux --R=rxx --C=cxx
$onEmbeddedCode Connect:
- RawCSVReader:
file: carcr.csv
readAsString: False
rowLabel: rxx
columnLabel: cxx
vuName: vux
- GDXWriter:
file: ctrcrout.gdx
$offEmbeddedCode
$call.checkErrorLevel gdxdiff ref.gdx ctrcrout.gdx > %system.NullFile%
$log Test that symbols have empty DataFrames (Not None records) when they have no content
$onechoV > carcr_empty_df.csv
a,b,c,
d,e,f,
g,h,i,
$offEcho
$onEmbeddedCode Connect:
- RawCSVReader:
file: carcr_empty_df.csv
rowLabel: rxx
columnLabel: cxx
- PythonCode:
code: |
data = connect.container['vf'].records
expected = ['r', 'c', 'value']
if data is None or not data.empty:
raise Exception(f"Symbol >vf< is expected to have an empty DataFrame!")
if (data.columns != expected).any() :
raise Exception("Unexpected columns for DataFrame")
$offEmbeddedCode