capcode.gms : 테스트 Connect 에이전트 PythonCode

설명

이 테스트는 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