설명
이 테스트는 Connect 에이전트 PythonCode의 정확성을 확인합니다. 기고자: Clemens Westphal, 2022년 3월
소형 모델 유형 :메가 슬롯
카테고리 : 메가 슬롯 테스트 라이브러리
메인 파일 : capcode.gms
$title '테스트 연결 에이전트 PythonCode' (CAPCODE,SEQ=894)
$onText
이 테스트는 Connect 에이전트 PythonCode의 정확성을 확인합니다.
기고자: Clemens Westphal, 2022년 3월
$offText
$log --- Python 라이브러리 %sysEnv.GMSPYTHONLIB% 사용
i / i1*i10 / 설정;
j / j1*j10 / 설정;
매개변수 p0(i);
매개변수 p1(i);
매개변수 p2(i,j);
p0(i) = 균일(0,10);
p2(i,j) = 균일(0,10);
* PythonCode를 사용하여 파일 쓰기
임베디드 코드 연결:
- 메가 슬롯리더:
기호: 모두
메가 슬롯transfer를 gt로 가져오기
locals()에서 'm'이거나 globals()에서 'm'인 경우:
raise Exception("다음 PythonCode 인스턴스에서 'm'에 액세스할 수 없을 것으로 예상됩니다.")
'm'이 connect.keep에 없거나 isinstance(connect.keep['m'], gt.Container)가 아닌 경우:
raise Exception("'m'은 'connect.keep'에서 찾을 수 없거나 gt.Container의 인스턴스가 아닙니다.")
$offEmbeddedCode |
open('pythoncode_file.txt', 'w')를 f로 사용:
f.write('PythonCode 에이전트로 작성됨')
endEmbeddedCode
임베디드 코드 Python:
open('pythoncode_file.txt')을 f로 사용:
str = f.read()
if str != 'PythonCode 에이전트로 작성됨':
raise Exception("'pythoncode_file.txt'를 읽는 데 문제가 있습니다.")
endEmbeddedCode
* 다른 기호와 동일한 레코드를 사용하여 connect.container에 새 기호를 만듭니다.
임베디드 코드 연결:
- 메가 슬롯리더:
기호:
- 이름 : p0
메가 슬롯transfer를 gt로 가져오기
locals()에서 'm'이거나 globals()에서 'm'인 경우:
raise Exception("다음 PythonCode 인스턴스에서 'm'에 액세스할 수 없을 것으로 예상됩니다.")
'm'이 connect.keep에 없거나 isinstance(connect.keep['m'], gt.Container)가 아닌 경우:
raise Exception("'m'은 'connect.keep'에서 찾을 수 없거나 gt.Container의 인스턴스가 아닙니다.")
$offEmbeddedCode |
connect.container.addParameter("p1", ["i"], records=connect.container.data["p0"].records)
- 메가 슬롯작성기:
기호:
- 이름 : p1
endEmbeddedCode
임베디드 코드 Python:
if list(메가 슬롯get('p0')) != list(메가 슬롯get('p1')):
raise Exception("p1에 예상치 못한 데이터가 있습니다")
endEmbeddedCode
* PythonCode를 사용하여 명령어 생성
임베디드 코드 연결:
- 메가 슬롯리더:
기호: 모두
메가 슬롯transfer를 gt로 가져오기
locals()에서 'm'이거나 globals()에서 'm'인 경우:
raise Exception("다음 PythonCode 인스턴스에서 'm'에 액세스할 수 없을 것으로 예상됩니다.")
'm'이 connect.keep에 없거나 isinstance(connect.keep['m'], gt.Container)가 아닌 경우:
raise Exception("'m'은 'connect.keep'에서 찾을 수 없거나 gt.Container의 인스턴스가 아닙니다.")
$offEmbeddedCode |
기호 = [ 'p0', 'p1', 'p2' ]
기호의 s에 대해:
지침.추가(
'엑셀라이터':
'파일': 'data_.xlsx'.format(s),
'symbols': ['name': s, 'columnDimension': 0, 'range': s+'!A1']
)
endEmbeddedCode
임베디드 코드 연결:
- 메가 슬롯리더:
기호:
- 이름 : p0
새 이름: g0
- 이름 : p1
새 이름: g1
- 이름 : p2
새이름: g2
- 엑셀리더:
파일: 'data_p0.xlsx'
기호:
- 이름 : p0
범위: 'p0!A1'
행차원: 1
열차원: 0
- 엑셀리더:
파일: 'data_p1.xlsx'
기호:
- 이름 : p1
범위: 'p1!A1'
행차원: 1
열차원: 0
- 엑셀리더:
파일: 'data_p2.xlsx'
기호:
- 이름 : p2
범위: 'p2!A1'
행차원: 2
열차원: 0
메가 슬롯transfer를 gt로 가져오기
locals()에서 'm'이거나 globals()에서 'm'인 경우:
raise Exception("다음 PythonCode 인스턴스에서 'm'에 액세스할 수 없을 것으로 예상됩니다.")
'm'이 connect.keep에 없거나 isinstance(connect.keep['m'], gt.Container)가 아닌 경우:
raise Exception("'m'은 'connect.keep'에서 찾을 수 없거나 gt.Container의 인스턴스가 아닙니다.")
$offEmbeddedCode |
정의 다른(a,b):
수입 사본
df_a = copy.deepcopy(a.records)
df_b = copy.deepcopy(b.records)
df_a.columns = df_b.columns
df_a['값'] = round(df_a['값'], 5)
df_b['값'] = round(df_b['값'], 5)
df_a.compare(df_b).empty가 아닌 반환
다른 경우(connect.container.data['g0'], connect.container.data['p0']):
예외 발생("g0 <> p0")
다른 경우(connect.container.data['g1'], connect.container.data['p1']):
예외 발생("g1 <> p1")
다른 경우(connect.container.data['g2'], connect.container.data['p2']):
예외 발생("g2 <> p2")
endEmbeddedCode
* PythonCode에서 예외 발생
임베디드 코드 연결:
메가 슬롯transfer를 gt로 가져오기
locals()에서 'm'이거나 globals()에서 'm'인 경우:
raise Exception("다음 PythonCode 인스턴스에서 'm'에 액세스할 수 없을 것으로 예상됩니다.")
'm'이 connect.keep에 없거나 isinstance(connect.keep['m'], gt.Container)가 아닌 경우:
raise Exception("'m'은 'connect.keep'에서 찾을 수 없거나 gt.Container의 인스턴스가 아닙니다.")
$offEmbeddedCode |
시도해 보세요:
got_Exception=거짓
raise Exception("PythonCode의 예외")
제외:
got_Exception=참
그렇지 않은 경우 got_Exception:
raise Exception("예외가 포착될 것으로 예상됩니다.")
endEmbeddedCode
* 테스트 범위 동작
$onEmbeddedCode 연결:
메가 슬롯transfer를 gt로 가져오기
locals()에서 'm'이거나 globals()에서 'm'인 경우:
raise Exception("다음 PythonCode 인스턴스에서 'm'에 액세스할 수 없을 것으로 예상됩니다.")
'm'이 connect.keep에 없거나 isinstance(connect.keep['m'], gt.Container)가 아닌 경우:
raise Exception("'m'은 'connect.keep'에서 찾을 수 없거나 gt.Container의 인스턴스가 아닙니다.")
$offEmbeddedCode |
메가 슬롯transfer를 gt로 가져오기
m = gt.Container(system_directory=r"%메가 슬롯sysdir% ".strip())
m.addParameter('p', 도메인=['*'], 레코드= [['i1', 1], ['i2', 2]])
값 = [ v for v in m['p'].records['value']]
값이 != [1.0, 2.0]인 경우:
raise Exception("PythonCode 범위 테스트에서 예외가 발생했습니다.")
'm'이 locals()에 없는 경우:
raise Exception("'m'이 locals()에 있을 것으로 예상됩니다.")
globals()에 'm'이 없으면:
raise Exception("'m'이 globals()에 있을 것으로 예상됩니다.")
데프 f():
locals()에서 'm'인 경우:
raise Exception("'m'이 f()의 locals()에 없을 것으로 예상됩니다.")
globals()에 'm'이 없으면:
raise Exception("'m'이 f()의 globals()에 있을 것으로 예상됩니다.")
에프()
connect.keep = 'm': m