FYPP adalah preprosesor bertenaga Python. Ini dapat digunakan untuk setiap bahasa pemrograman tetapi tujuan utamanya adalah untuk menawarkan preprocessor fortran, yang membantu memperluas Fortran dengan kemampuan kompilasi dan templat metaprogram. Alih -alih memperkenalkan sintaks ekspresinya sendiri, ia menggunakan ekspresi Python dalam arahan preprocessornya, menawarkan konsistensi dan keserbagunaan python saat merumuskan tugas metaprogramming. Ini memberi penekanan kuat pada ketahanan dan integrasi yang rapi ke dalam pengembangan toolchains.
Proyek ini di -host di GitHub.
Dokumentasi terperinci tersedia di readthedocs.org.
FYPP dirilis di bawah lisensi BSD 2-Clause .
Definisi, Evaluasi dan Penghapusan Variabel:
#: jika debug> 0 cetak *, "beberapa informasi debug" #: Endif #: atur loglevel = 2 Cetak *, "Logglevel: $ {Loglevel} $" #: Del Loglevel
Definisi makro dan panggilan makro:
#: Def Assert (cond) #: jika debug> 0 if (.not. $ {cond} $) lalu Cetak *, "Assert gagal dalam file $ {_ file _} $, baris $ {_ line _} $" kesalahan berhenti akhiri jika #: Endif #: EndDef Assert Lai Dipanggil melalui panggilan langsung (argumen tidak membutuhkan kutipan) @: Assert (size (myarray)> 0) Lai Dipanggil sebagai ekspresi Python (argumen membutuhkan kutipan) $: Assert ('size (myarray)> 0')
Output bersyarat:
tes program #: jika didefinisikan ('with_mpi') Gunakan MPI #: Elif didefinisikan ('with_openmp') Gunakan OpenMP #:kalau tidak Gunakan serial #: Endif
Output iterated (misalnya untuk menghasilkan templat fortran):
antarmuka myfunc #: untuk dtype di ['real', 'dreal', 'complex', 'dComplex'] Prosedur Modul myfunc _ $ {dType} $ #: endfor Akhir antarmuka myfunc
Arahan inline:
Logical, parameter :: hasmpi = # {jika didefinisikan ('mpi')} # .true. # {else}# .false. #{endif}#
Penyisipan ekspresi Python sewenang -wenang:
karakter (*), parameter :: comp_date = "$ {time.strftime ('%y-%m-%d')} $"
Dimasukkannya file selama preprocessing:
#: Sertakan "macrodefs.fypp"
Menggunakan garis kontinutasi gaya Fortran dalam arahan preprosesor:
#: jika var1> var2 & & atau var2> var4 Cetak *, "Melakukan sesuatu di sini" #: Endif
Melewati (tidak dikutip) Argumen string multiline ke Callable:
#! Callable hanya membutuhkan argumen string #: def debug_code (kode) #: jika debug> 0 $: kode #: Endif #: EndDef debug_code #! Lulus blok kode sebagai argumen posisi pertama #: Blokir debug_code if (size (array)> 100) lalu Cetak *, "Debug: Array besar yang sangat besar" akhiri jika #: EndBlock debug_code #! Kebutuhan yang dapat dipanggil juga tipe argumen non-string #: Def REPEIN_CODE (kode, ulangi) #: untuk IND dalam jangkauan (ulangi) $: kode #: endfor #: EndDef REPEAL_CODE #! Lulus blok kode sebagai argumen posisi dan 3 sebagai argumen kata kunci "ulangi" #: Blokir Ulangi_Code (ulangi = 3) ini akan diulang 3 kali #: EndBlock REPEAL_CODE
Komentar preprosesor:
#! Ini tidak akan muncul di output #! Juga karakter garis baru di akhir baris akan ditekan
Menekan output preprosesor di daerah yang dipilih:
#! Definisi dibaca, tetapi tidak ada output (misalnya Newline) akan diproduksi #:bisu #: Sertakan "macrodefs.fypp" #: Endmute
Permintaan eksplisit untuk menghentikan preprocessor:
#: Jika debuglevel <0 #: Berhenti 'Tingkat Debug Negatif tidak diperbolehkan!' #: Endif
Pemeriksaan Mudah untuk Sanitas Parameter Makro:
#: def mymacro (peringkat) #! Makro hanya berfungsi untuk peringkat 1 dan di atas #: Assert Rank> 0 : #: EndDef MyMacro
Arahan penomoran baris dalam output:
tes program #: jika didefinisikan ('mpi') Gunakan MPI #: Endif :
diubah menjadi
# 1 "test.fypp" 1 tes program # 3 "test.fypp" Gunakan MPI # 5 "test.fypp" :
Ketika variabel MPI
didefinisikan dan FYPP diinstruksikan untuk menghasilkan penanda garis.
Lipatan otomatis dari garis yang dihasilkan melebihi batas panjang garis
FYPP membutuhkan interpreter Python 3 yang berfungsi (Python 3.5 atau di atas).
Saat Anda menginstal FYPP, Anda mendapatkan fypp
Line Tool Command dan Modul Python fypp.py
Terakhir Anda dapat mengimpor jika Anda ingin mengakses fungsionalitas FYPP langsung dari dalam skrip Python Anda.
Rilis stabil terakhir FYPP dapat dengan mudah diinstal sebagai paket conda dengan menerbitkan
conda instal -c conda -forge fypp
Anda juga dapat menggunakan Pythons Command Line Installer pip
untuk mengunduh rilis stabil dari halaman FYPP di PYPI dan menginstalnya di sistem Anda.
Jika Anda ingin menginstal FYPP ke dalam sistem modul interpreter Python 3 aktif (biasanya kasus saat Anda menggunakan lingkungan virtual Python), masalah
Pip3 Pasang FYPP
Atau, Anda dapat menginstal FYPP ke ruang pengguna (di bawah ~/.local) dengan
Pip3 Instal -Pengguna Fypp
Pada Windows Anda dapat menggunakan MSYS2 Toolchain untuk menginstal FYPP di terminal MINGW. Untuk menginstal Penggunaan FYPP:
PACMAN -S MINGW-W64-X86_64-Python-Fypp
Pastikan arsitektur yang dipilih cocok dengan terminal MINGW Anda saat ini. Untuk semua arsitektur MINGW yang mendukung, kunjungi periksa indeks paket di sini.
Untuk instalasi manual, Anda dapat mengunduh kode sumber rilis stabil dari situs web Proyek FYPP.
Jika Anda ingin mendapatkan versi pengembangan terbaru, klon The Projects Repository:
Git Clone https://github.com/aradi/fypp.git
dan periksa cabang utama.
Alat baris perintah adalah skrip tunggal yang berdiri sendiri. Anda dapat menjalankannya langsung dari folder sumber
Fypp_source_folder/bin/fypp
atau setelah menyalinnya dari folder bin ke lokasi mana pun yang tercantum dalam variabel lingkungan jalur Anda, hanya dengan menerbitkan
fypp
Modul Python fypp.py
dapat ditemukan di FYP_SOURCE_FOLDER/src
.
Alat baris perintah FYPP membaca file, preprocessses dan menulisnya ke file lain, jadi Anda biasanya akan memohon seperti:
fypp source.fpp Source.f90
yang akan memproses sumber.fpp dan menulis hasilnya ke Source.f90. Jika file input dan output tidak ditentukan, informasi dibaca dari stdin dan ditulis ke stdout.
Perilaku FYPP dapat dipengaruhi dengan berbagai opsi baris perintah. Ringkasan semua opsi baris perintah dapat diperoleh dengan:
fypp -h