로드 중...
검색 중...
일치하는 항목 없음
alias.py
이 파일의 문서로 이동하세요.
1
14
15가져오기하위 프로세스
16가져오기sys
17가져오기os
18가져오기re
19from게임가져오기GamsWorkspace, GamsSet
20
21GDX_DUMP2 ="""
22$onempty
23
24설정 i(*) /
25'i1',
26'i2',
27'i3' /;
28
29매개변수 aa(i) /
30'i1' 2,
31'i2' 2,
32'i3' 2 /;
33
34$offempty
35"""
36
37GDX_DUMP1 ="""
38$oneempty
39
40설정 i(*) /
41'i1',
42'i2',
43'i3' /;
44
45j(*) 설정 /
46'j1',
47'j2',
48'j3' /;
49
50ij(*,*) 설정 /
51'i1'.'j1',
52'i2'.'j2',
53'i3'.'j3' /;
54
55별칭 (ii, i);
56
57별칭(jj, j);
58
59별칭(iijj, ij);
60
61매개변수 a(i) /
62'i1' 1,
63'i2' 1,
64'i3' 1 /;
65
66매개변수 aa(ii) /
67'i1' 2,
68'i2' 2,
69'i3' 2 /;
70
71$offempty
72"""
73
74GAMS_DATA ="""
75설정
76i / i1*i3 /
77j / j1*j3 /
78ij / #i:#j /;
79
80별칭
81(i,ii)
82(j,jj)
83(ij,iijj);
84
85매개변수
86a(i) / #i 1 /
87aa(ii) / #ii 2 /;
88"""
89
90
91defsame_gdx_dump(ws, gdxfile, 예상_결과):
92결과 =""
93cmd = [
94os.path.join(ws.system_directory,"gdxdump"),
95os.path.join(ws.working_directory, gdxfile),
96]
97p = 하위 프로세스.Popen(
98cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE
99 )
100결과, 오류 = p.communicate()
101 if오류:
102 올림예외(오류)
103결과 = 결과.디코드()
104 반환re.sub(r"\s", "", result.lower()) == re.sub(
105 r"\s", "", Expect_result.lower()
106 )
107
108
109defcheck_alias_logic(슬롯 사이트 추천, db):
110 # 기호 수 확인
111 iflen(db) != 5:
112 올림예외(
113f"GamsDatabase 'prefix'에는 5개의 기호가 있어슬롯 사이트 추천: i, j, ij, a, aa."
114 )
115
116 # 별칭 세트 검색 확인
117 ifdb["ii"].이름 !="나":
118 올림예외(f"접두사: 별칭 'ii'를 요청할 때 'i'를 설정해슬롯 사이트 추천.")
119 ifdb["jj"].이름 !="j":
120 올림예외(f"접두사: 별칭 'jj'를 요청할 때 'j'를 설정해슬롯 사이트 추천.")
121 ifdb["iijj"].이름 !="ij":
122 올림예외(
123f"접두사: 별칭 'iijj'를 요청할 때 'ij'를 설정해슬롯 사이트 추천."
124 )
125
126 # 도메인 로직 확인
127 if 아님db.check_domains():
128 올림예외(f"접두사: 확인 도메인은 true여슬롯 사이트 추천.")
129 if 아님isinstance(db["아아"].domains[0], GamsSet):
130 올림예외(f"접두사: 'aa'의 도메인[0]은 집합이어슬롯 사이트 추천.")
131 ifdb["아아"].도메인[0].이름 !="나":
132 올림예외(f"접두사: 'aa'의 도메인[0]은 'i'여슬롯 사이트 추천.")
133
134db["ii"].delete_record("i1")
135 ifdb.check_domains():
136 올림예외(
137f"접두사: 'i1' 제거 후 check_domains()는 False여슬롯 사이트 추천."
138 )
139db["ii"].add_record("i1")
140 if 아님db.check_domains():
141 올림예외(
142f"접두사: 'i1'을 다시 추가한 후 check_domains()가 True여슬롯 사이트 추천."
143 )
144
145
146if__name__ =="__main__":
147sys_dir = sys.argv[1]iflen(sys.argv) > 1그밖에 없음
148work_dir = sys.argv[2]iflen(sys.argv) > 2그밖에 없음
149ws = GamsWorkspace(system_directory=sys_dir,working_directory=work_dir)
150
151 # GAMS 별칭을 포함하는 초기 데이터 생성
152 # Control API는 별칭에 대해 알지 못하며 별칭을 세트로 검색합니다
153작업 = ws.add_job_from_string(GAMS_DATA)
154job.run()
155check_alias_logic("job.out_db ", job.out_db)
156job.out_db.export("outdb.gdx")
157 if 아님same_gdx_dump(ws,"outdb.gdx", GDX_DUMP1):
158 올림예외("gdxdump 'outdb.gdx'의 예상치 못한 결과입니다.")
159
160 # 복사 생성자는 별칭을 보존해슬롯 사이트 추천
161db = ws.add_database(source_database=job.out_db)
162check_alias_logic("db ",db)
163db.export("db.gdx")
164 if 아님same_gdx_dump(ws,"db.gdx", GDX_DUMP1):
165 올림예외("gdxdump 'db.gdx'의 예상치 못한 결과입니다.")
166db2 = ws.add_database()
167ii = db2.add_set_dc(db["ii"].이름, ["*"], DB["ii"].text)
168db["ii"].copy_symbol(ii)
169
170aa_orig = db["아아"]
171aa = db2.add_parameter_dc(db["아아"].이름, [ii], db["아아"].text)
172aa_orig.copy_symbol(aa)
173db2.export("db2.gdx")
174 if 아님same_gdx_dump(ws,"db2.gdx", GDX_DUMP2):
175 올림예외("gdxdump 'db2.gdx'의 예상치 못한 결과입니다.")
176
177 # 도메인이 별칭인 경우 도메인은 별칭 세트를 반환해슬롯 사이트 추천.
178 # 그러나 domains_as_strings는 별칭 이름을 반환해슬롯 사이트 추천
179 ifaa_orig.domains[0].name !="나":
180 올림예외("도메인 세트는 원본 세트여슬롯 사이트 추천.")
181 ifaa_orig.domains_as_strings[0] !="ii":
182 올림예외("문자열 형식의 도메인은 별칭 이름이어슬롯 사이트 추천.")