FYPP는 파이썬 동력 사전 처리기입니다. 모든 프로그래밍 언어에 사용될 수 있지만 주요 목표는 Fortran Preprocessor를 제공하는 것이며, 이는 조건 컴파일 및 템플릿 메타 프로 그램 기능으로 Fortran을 확장하는 데 도움이됩니다. 자체 표현 구문을 도입하는 대신, 전처리 지침에 Python 표현식을 사용하여 메타 프로 그램 작업을 공식화 할 때 Python의 일관성과 다양성을 제공합니다. 그것은 견고성과 툴 체인 개발에 깔끔한 통합에 중점을 둡니다.
이 프로젝트는 Github에서 호스팅됩니다.
자세한 문서는 readthedocs.org에서 확인할 수 있습니다.
FYPP는 BSD 2-Clause 라이센스 에 따라 릴리스됩니다.
변수의 정의, 평가 및 제거 :
#: 디버그> 0 인 경우 인쇄 *, "일부 디버그 정보" #: endif #: loglevel = 2를 설정합니다 print *, "loglevel : $ {loglevel} $" #: del loglevel
매크로 정의 및 매크로 호출 :
#: DEF ASSERT (COND) #: 디버그> 0 인 경우 if (. 아니요 $ {cond} $) print *, "파일 $ {_ file _} $ 파일에 실패했습니다. $ {_ line _} $" 오류 중지 끝 If #: endif #: EndDef Assert ! 직접 통화를 통해 호출 (인수가 필요하지 않음) @: assert (size (myArray)> 0) ! 파이썬 표현식으로 호출 (인수 필요 인용) $ : assert ( 'size (myArray)> 0')
조건부 출력 :
프로그램 테스트 #: 정의 된 경우 ( 'with_mpi') MPI를 사용하십시오 #: elif 정의 ( 'with_openmp') OpenMP를 사용하십시오 #:또 다른 일련의 사용을 사용하십시오 #: endif
반복 출력 (예 : Fortran 템플릿 생성을위한) :
인터페이스 myfunc #: [ 'real', 'dreal', 'complex', 'dcomplex'의 dtype의 경우] 모듈 절차 myfunc _ $ {dtype} $ #: endfor 엔드 인터페이스 myfunc
인라인 지시문 :
logical, parameter :: hasmpi = # {정의 된 경우 ( 'mpi')} # .true. # {else}# .false. #{endif}#
임의의 파이썬 표현식의 삽입 :
문자 (*), 매개 변수 :: comp_date = "$ {time.strftime ( '%y-%m-%d')} $"
전처리 중 파일 포함 :
#: "macrodefs.fypp"포함
사전 처리기 지시문에서 Fortran 스타일 연속성 라인 사용 :
#: var1> var2 & 인 경우 & var2> var4 인쇄 *, "여기서 뭔가하고" #: endif
통과 (인용되지 않은) 다층 문자열 인수는 부름에 :
#! 호출 가능한 것은 문자열 인수 만 필요합니다 #: def debug_code (코드) #: 디버그> 0 인 경우 $ : 코드 #: endif #: enddef debug_code #! 코드 블록을 첫 번째 위치 인수로 전달하십시오 #: 블록 Debug_code if (size (array)> 100) Print *, "Debug : 가시적으로 큰 배열" 끝 If #: endblock debug_code #! 호출 가능한 요구 사항이 필요하지 않습니다 #: def repeat_code (코드, 반복) #: ind in range (반복) $ : 코드 #: endfor #: endDef repeat_code #! 코드 블록을 위치 인수로 전달하고 3 키워드 인수 "반복"으로 전달합니다. #: block repeat_code (반복 = 3) 이것은 3 번 반복됩니다 #: endblock repeat_code
전처리 자 댓글 :
#! 이것은 출력에 나타나지 않습니다 #! 또한 줄 끝의 Newline 캐릭터가 억제됩니다.
선택된 영역에서 사전 처리기 출력 억제 :
#! 정의는 읽히지 만 출력 (예 : Newlines)은 생성되지 않습니다. #:무음 #: "macrodefs.fypp"포함 #: EndMute
전처리 정지에 대한 명시적인 요청 :
#: Debuglevel <0 인 경우 #: '네거티브 디버그 레벨이 허용되지 않습니다!' #: endif
매크로 매개 변수 세력에 대한 쉬운 점검 :
#: def mymacro (순위) #! 매크로는 순위 1 이상에서만 작동합니다 #: Assert Rank> 0 : #: EndDef MyMacro
출력의 라인 번호 지침 :
프로그램 테스트 #: 정의 된 경우 ( 'MPI') MPI를 사용하십시오 #: endif :
변환
# 1 "test.fypp"1 프로그램 테스트 # 3 "test.fypp" MPI를 사용하십시오 # 5 "test.fypp" :
가변 MPI
정의되고 FYPP에 라인 마커를 생성하도록 지시 받았다.
선 길이 제한을 초과하는 생성 라인의 자동 접이식
FYPP는 작동하는 Python 3 통역사 (Python 3.5 이상)가 필요합니다.
FYPP를 설치하면 명령 줄 도구 fypp
및 Python 모듈 fypp.py
를 얻습니다. 후자는 파이썬 스크립트 내에서 FYPP의 기능에 직접 액세스하려면 가져올 수 있습니다.
FYPP의 마지막 안정적인 릴리스는 발행하여 콘다 패키지로 쉽게 설치할 수 있습니다.
Conda Install -C Conda -Forge fypp
Python Command Line Installer pip
사용하여 PYPI의 FYPP 페이지에서 안정적인 릴리스를 다운로드하여 시스템에 설치할 수도 있습니다.
활성 Python 3 통역사의 모듈 시스템에 FYPP를 설치하려면 (일반적으로 Python Virtual Environment를 사용할 때의 경우), 문제
PIP3 FYPP를 설치하십시오
또는 FYPP를 사용자 공간 (~/.local)에 설치할 수 있습니다.
PIP3 설치 -user fypp
Windows에서는 MSYS2 도구 체인을 사용하여 MINGW 터미널에 FYPP를 설치할 수 있습니다. FYPP 사용을 설치하려면 :
Pacman -S Mingw-W64-X86_64-Python-FYPP
선택한 아키텍처가 현재 MINGW 터미널과 일치하고 있는지 확인하십시오. 지원되는 모든 MINGW 아키텍처는 여기에 패키지 색인을 확인하십시오.
수동 설치의 경우 FYPP 프로젝트 웹 사이트에서 안정적인 릴리스의 소스 코드를 다운로드 할 수 있습니다.
최신 개발 버전을 얻으려면 프로젝트 저장소를 복제하십시오.
git 클론 https://github.com/aradi/fypp.git
그리고 마스터 지점을 확인하십시오.
명령 줄 도구는 단일 독립형 스크립트입니다. 소스 폴더에서 직접 실행할 수 있습니다
fypp_source_folder/bin/fypp
또는 BIN 폴더에서 경로 환경 변수에 나열된 위치로 복사 한 후,
fypp
Python 모듈 fypp.py
는 FYP_SOURCE_FOLDER/src
에서 찾을 수 있습니다.
FYPP Command Line 도구는 파일을 읽고 전처리하여 다른 파일에 쓸 수 있으므로 일반적으로 다음과 같이 호출합니다.
fypp source.fpp source.f90
Source.fpp를 처리하고 결과를 Source.f90에 작성합니다. 입력 및 출력 파일이 지정되지 않은 경우 정보는 stdin에서 읽고 stdout에 기록됩니다.
FYPP의 동작은 다양한 명령 줄 옵션으로 영향을받을 수 있습니다. 모든 명령 줄 옵션의 요약은 다음과 같이 얻을 수 있습니다.
fypp -h