版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、Author:Contact:作 Web site:Date:Revision:翻譯:Email:Blog:譯日期:者版本F2PY用戶指南和參考手冊PearuPetersonpearucens.ioc.ee:cens.ioc.ee/projects/f2py2e/2005-01-301.25cpythonercpythonergmailcpython.bloggoing2005-03-101.25-1、"r",-Ph貝獻者目錄1 引言12 三種封裝方法開始12.1 快速方法22.2 聰明方法32.3 既快且聰明的方法43 簽名文件53.1 Pythonmoduleblock
2、63.2 Fortran/C例程簽名63.2.1 類型聲明Typedeclarations73.2.2 語句Statements73.2.3Attributes103.3 擴展143.3.1 F2PY指令143.3.2 C語言表達式143.3.3 Multilineblocks154在Python中使用綁定161.1 標量參數(shù)或數(shù)值參數(shù)171.2 字符串參數(shù)181.3 數(shù)組參數(shù)191.4 回調(diào)參數(shù)221.5 monblocks251.6 Fortran90moduledata261.6.1 Allocatablearrays275 使用F2PY285.1 命令f2py285.2 Pythonm
3、odulef2py2e326 使用scipy_distutils336.1 cipy_distutils0.2.2與更高版本346.25 cipy_distutilspre0.2.2357F2PY的擴展用法357.1 向F2PY產(chǎn)生的模塊中添加自寫的函數(shù)357.2 修改F2PY生成模塊的字典36引言F2PYFortrantoPythoninterfacegenerator項目的目的是要在Python和Fortran語言之間提供一個連接。F2PY是一個Python包包含一個命令行工具f2py和一個模塊f2py2e,用來建立PythonC/API擴展模塊,從而能夠:?調(diào)用Fortran77/90/
4、95外部子程序、Fortran90/95模塊子程序以與C函數(shù);?訪問Fortran77MONblocks和Fortran90/95module數(shù)據(jù),包括allocatablearrays。2三種封裝方法開始用F2PY把Fortran或C函數(shù)封裝成Python包括下列步驟:?創(chuàng)建簽名文件,包含:對Fortran或C函數(shù)封裝器的描述,也稱為函數(shù)簽名。在Fortranroutines的情況下,F(xiàn)2PY通過掃描Fortran源碼,從而收集創(chuàng)建函數(shù)封裝器所需要的所有相關信息。?可選編輯F2PY所創(chuàng)建的簽名文件,以優(yōu)化函數(shù)封裝器,使之更“聰明、更加“Python化。?F2PY讀取簽名文件,生成一個Pyth
5、onC/API模塊,該模塊包含F(xiàn)ortran/C/Python綁定信息。?F2PY編譯所有的源文件,建立包含封裝器的擴展模塊。在建立擴展模塊時,F(xiàn)2PY使用了scipy_distutils包,它支持大量的Fortran編譯器。上述步驟可以在一條命令中執(zhí)行,也可以一步一步順序執(zhí)行,其中某些步驟可以忽略或者同其它步驟組合使用,視具體情況而定。下面介紹3種使用F2PY的典型方法。以下面的Fortran77代碼為例說明。CFILE:FIB1.FSUBROUTINEFIB(A,N)CCCALCULATEFIRSTNFIBONACCINUMBERSCINTEGERNREAL*8A(N)DOI=1,NIF(
6、I.EQ.1)THENA(I)=0.0D0ELSEIF(I.EQ.2)THENA(I)=1.0D0ELSEA(I)=A(I-1)+A(I-2)ENDIFENDDOENDCENDFILEFIB1.F2.1快速方法把Fortran子程序FIB封裝為Python函數(shù)的最快的方法是運行:F2py-cfib1.f-mfib1該命令在當前目錄下建立一個擴展模塊fib1.pydo現(xiàn)在,在Python中就可以訪問Fortran子程序FIB了:>>>importNumeric>>>importfib1>>>printfib1.fib._doc_fib-Fun
7、ctionsignature:fib(a,n)Requiredarguments:a:inputrank-1array('d')withbounds(n)Optionalarguments:n:=len(a)inputint>>>a=Numeric.zeros(8,'d')>>>fib1.fib(a)>>>printa.3.注:?F2PY發(fā)現(xiàn)第2個參數(shù)n是第一個數(shù)組參數(shù)的維數(shù),因為缺省情況下所有參數(shù)都是input-only的,因此F2PY得出結論,n是可選參數(shù),它的缺省值為len(
8、a)。?對于可選參數(shù)n,可以使用不同的值。>>>a1=Numeric.zeros(8,'d')>>>fib1.fib(a1,6)>>>printa..但當它和數(shù)組參數(shù)a不相容時,會拋出一個異常:>>>fib1.fib(a,10)fib:n=10Traceback(mostrecentcalllast):File"<stdin>",line1,in?fib.error:(len(a)>=n)failedfor1stkeywordn>&g
9、t;>這說明F2PY具有一個有用的特征,即,F(xiàn)2PY對相關參數(shù)間的相容性進行初步的檢查,以避免不可預期的崩潰。?當使用Numericarray作為輸入數(shù)組參數(shù)時,C指針會被直接傳給Fortran。否則,F(xiàn)2PY就復制輸入數(shù)組,然后將副本的C指針傳給Fortran子程序。結果,F(xiàn)ortran子程序對輸入數(shù)組的任何改變都不會影響原先的參數(shù)。示例如下:>>>a=Numeric.ones(8,'i')>>>fibl.fib(a)>>>printa11111111這顯然不是我們所期望的結果。F2PY提供了intent(inpla
10、ce)屬性,它能改變輸入數(shù)組的屬性,使得Fortran例程所作的任何改變都對輸入?yún)?shù)有效。例如,如果你指定intent(inplace)a,上面的例子就會變?yōu)椋海?gt;>>a=Numeric.ones(8,'i')>>>fib1.fib(a)>>>printa.3.然而,推薦使用intent(out)屬性,來把fortran例程所作的改變反饋給python,這個方案更有效、更清晰。?在python中使用Fib1.fib與在Fortran中使用FIB非常相似。然而,在python中使用insituout
11、put參數(shù)是不太好的風格,因為python沒有安全機制處理錯誤的參數(shù)類型。當使用Fortran和C時,編譯器在編譯期間就會發(fā)現(xiàn)類型不匹配,而python必須在運行期間才進行類型檢查。因此,在python中使用insituoutput參數(shù)會使查找bug變得困難,更不要說在進行必須的類型檢查時代碼可讀性差了。雖然前面演示的封裝方法非常簡單易懂,但它有幾個缺點,這都歸因于F2PY無法確定參數(shù)的實際目的一一它是輸入?yún)?shù)還是輸出參數(shù),還是既為輸入又為輸出,又或其它?因此,F(xiàn)2PY假定在缺省情況下所有參數(shù)都是輸入?yún)?shù)。實際上,有辦法讓F2PY知道函數(shù)參數(shù)的實際目的,然后產(chǎn)生更加Python化的封裝器。2.
12、2 聰明方法讓我們按照下面步驟封裝Fortran函數(shù)。?首先,運行命令f2pyfib1.f-mfib2-hfib1.pyf創(chuàng)建簽名文件,保存為fib1.pyf,其內(nèi)容如下:!-*-f90-*-pythonmodulefib2!ininterface!in:fib2subroutinefib(a,n)!in:fib2:fib1.freal*8dimension(n):aintegeroptional,check(len(a)>=n),depend(a):n=len(a)endsubroutinefibendinterfaceendpythonmodulefib2!Thisfilewasau
13、to-generatedwithf2py(version:2.28.198-1366).!See:cens.ioc.ee/projects/f2py2e/?接著,告訴F2PY參數(shù)n是一個輸入?yún)?shù)使用intent(in)屬性,調(diào)用Fortran函數(shù)FIB所產(chǎn)生的結果應該返回給python使用intent(out)屬性o止匕外,數(shù)組a應該根據(jù)輸入?yún)?shù)n動態(tài)創(chuàng)建使用depend(n)屬性以說明依賴關系。修改后的fib1.pyf另存為fib2.pyf內(nèi)容如下:!-*-f90-*-pythonmodulefib2interfacesubroutinefib(a,n)real*8dimension(n),
14、intent(out),depend(n):aintegerintent(in):nendsubroutinefibendinterfaceendpythonmodulefib2?最后,運行f2py-cfib2.pyffib1.f建立擴展模塊Inpython:> >>importfib2> >>printfib2.fib._doc_fib-Functionsignature:a=fib(n)Requiredarguments:n:inputintReturnobjects:a:rank-1array('d')withbounds(n)>
15、 >>printfib2.fib(8).3.注釋:?很明顯,fib2.fib更符合Fortran子程序FIB的目的,給定n,fib2.fib返回一個前n個菲波拉契數(shù)的Numericarray。新的python簽名fib2.fib也消除了簽名fib1.fib時遇到的那種令人驚訝的現(xiàn)象。?注意,在缺省情況下,單獨使用intent(out)也隱含了intent(hide)Intent(hide)屬性指定的參數(shù)不出現(xiàn)在封裝器函數(shù)的參數(shù)列表中。2.3 既快且聰明的方法聰明的方法適合封裝那些不能修改的Fortran代碼比如,第三方的代碼然而,F(xiàn)ortran代碼如果可
16、以編輯,則在多數(shù)情況下可以跳過生成中間簽名文件這一步。也就是說,可以使用F2PY指令將F2PY所特有的屬性直接插入到Fortran源代碼中。F2PY指令是一條特別的注釋行,F(xiàn)ortran編譯器忽略它,但F2PY會像普通行那樣進行處理。下面是修改后的Fortran源代碼,保存為fib3.f:CFILE:FIB3.FSUBROUTINEFIB(A,N)CCCALCULATEFIRSTNFIBONACCINUMBERSCINTEGERNREAL*8A(N)Cf2pyintent(in)nCf2pyintent(out)aCf2pydepend(n)aDOI=1,NIF(I.EQ.1)THENA(I)
17、=0.0D0ELSEIF(I.EQ.2)THENA(I)=1.0D0ELSEA(I)=A(I-1)+A(I-2)ENDIFENDDOENDCENDFILEFIB3.F現(xiàn)在,可以運行f2py-c-mfib3fib3.f創(chuàng)建擴展模塊。注意封裝器函數(shù)FIB同前面例子一樣“聰明:> >>importfib3> >>printfib3fb._doc_fib-Functionsignature:a=fib(n)Requiredarguments:n:inputintReturnobjects:a:rank-1array('d')withbounds(n)
18、> >>printfib3.fib(8)> .3.3簽名文件簽名文件.pyf文件的語法借自于Fortran90/95語言規(guī)范,它幾乎能夠理解Fortran90/95所有的標準結構,包括free和fixedformat。F2PY還對Fortran90/95語言規(guī)范作了一些擴展,以幫助設計Fortran到Python的接口,使之更Python化Pythonic。簽名文件可以包含任意Fortran代碼因此,F(xiàn)ortran代碼可以看作是簽名文件。對于那些與建立接口無關的Fortran結構,F(xiàn)2PY只是將之忽略掉,這其中也包括語法錯誤。因此,要注意不要
19、有任何的語法錯誤So,becarefulnotmakingones。簽名文件的內(nèi)容通常是大小寫敏感的,在掃描Fortran代碼生成簽名文件時,F(xiàn)2PY自動將字符轉換為小寫。在multi-lineblocks中的代碼或使用-no-lower選項時除外。3.1 Pythonmoduleblock簽名文件包含一個推薦或多個pythonmoduleblocks。Pythonmoduleblocks用來描述F2PY所生成的Python/C擴展模塊<modulename>module.c的內(nèi)容。如果<modulename>包含子字符用_user_,貝相應的pythonmoduleb
20、lock描述的是回調(diào)函數(shù)的簽名。Pythonmoduleblock結構如下:pythonmodule<modulename><erface<usercodestatement><Fortranblockdatasignatures<Fortran/Croutinesignatures>erfacemodule<F90modulename><F90moduledatatypedeclarations><F90moduleroutinesignat
21、ures>endmodule<F90modulename>endinterface.endpythonmodule<modulename>內(nèi)為可選部分,表示一個或多個前面部分3.2 Fortran/C例程簽名Fortran例程簽名的結構如下:<typespec>function|subroutine<routinename>(<arguments>)result(<entityname>)<argument/variabletypedeclarations><argument/variableatt
22、ributestatements><usestatements><monblockstatements><otherstatements>endfunction|subroutine<routinename>F2PY根據(jù)例程簽名產(chǎn)生如下的Python/C擴展函數(shù):def<routinename>(<requiredarguments>,<optionalarguments):.return<returnvariables>Fortranblockdata的簽名結構如下:blockdata<bl
23、ockdataname><variabletypedeclarations><variableattributestatements><usestatements><monblockstatements>includestatementsendblockdatablockdataname3.2.1 類型聲明Typedeclarations參數(shù)/變量的類型聲明部分定義如下:<typespec><attrspec>:<entitydecl>這里<typespec>:=byte|character&
24、lt;charselector>|plex<kindselector>|real<kindselector>|doubleplex|doubleprecision|integer<kindselector>|logical<kindselector><charselector>:=*<charlen>|(len=<len>,kind=<kind>)|(kind=<kind>,len=<len>)<kindselector>:=*<intlen>|
25、(kind=<kind>)<entitydecl>:=<name>*<charlen>(<arrayspec>)|(<arrayspec>)*<charlen>|/<init_expr>/|=<init_expr>,<entitydecl>其中?<attrspec>是用逗號分隔的屬性列表;?<arrayspec>是用逗號分隔的維數(shù)邊界列表;?<init_expr>是C表達式?對整數(shù)類型而言,<intlen>可以是負整數(shù),這時in
26、teger*<negintlen>表示unsignedCintegers.如果某個參數(shù)沒有<argumenttypedeclaration>,其類型由參數(shù)名的隱含規(guī)則決定。3.2.2 語句Statements?Attributestatements:<argument/variableattributestatement>是沒有<typespec>的<argument/variabletypedeclaration>。另外,在anattributestatement中不能useotherattributes,<entitydec
27、l>也只能是alistofnames.?Usestatements:<usestatement>部分的定義是:use<modulename>,<rename_list>|,ONLY:<only_list>這里<rename_list>:=<local_name>=><use_name>,<rename_list>目前,usestatement只用于連接回調(diào)模塊call-backmodules和外部參數(shù)(回調(diào)函數(shù)),參見Call-backarguments.?monblockstateme
28、nts:<monblockstatement部分的定義是:mon/<monname>/<shortentitydecl>其中<shortentitydecl>:=<name>(<arrayspec>),<shortentitydecl>一個pythonmoduleblock不應包含二個或二個以上的同名monblocks,否則,后面的monblocks將會被忽略。<shortentitydecl>中的變量類型用argumenttypedeclarations定義。要注意的是相應的argumenttypede
29、clarations可能包含arrayspecifications,這樣的話就不必在<shortentitydecl>指定了。?Otherstatements:<otherstatement>部分是指所有前面未提到的其它Fortran語言結構,除了以下情況外,F(xiàn)2PY都予以忽略不作處理。callstatementsandfunctioncallsofexternalarguments(moredetails?);includestatementsinclude'<filename>'include"<filename>&
30、quot;如果文件<filename>不存在,則忽略該includestatement,否貝文件<filename>isincludedtoasignaturefile.includestatements能在簽名文件的任意部分使用,在Fortran/Croutinesignatureblocks的外面也可以使用。implicitstatementsimplicitnoneimplicit<listofimplicitmaps>where<implicitmap>:=<typespec>(<listoflettersorrange
31、ofletters>)如果未用<variabletypedeclaration>聲明變量類型,則用隱含規(guī)則確定變量類型。缺省隱含規(guī)則給定如下:implicitreal(a-h,o-z,$_),integer(i-m)entrystatementsentry<entryname>(<arguments>)F2PYgenerateswrapperstoallentrynamesusingthesignatureoftheroutineblock.技巧:entrystatementcanbeusedtodescribethesignatureofanarbi
32、traryroutineallowingF2PYtogenerateanumberofwrappersfromonlyoneroutineblocksignature.Therearefewrestrictionswhiledoingthis:fortrannamecannotbeused,callstatementandcallprotoargumentcanbeusedonlyiftheyarevalidforallentryroutines,etc.止匕外,F(xiàn)2PY還引入了下列statements:threadsafeUsePy_BEGIN_ALLOW_THREADS.Py_END_AL
33、LOW_THREADSblockaroundthecalltoFortran/Cfunction.callstatement<C-expr|multi-lineblock>ReplaceF2PYgeneratedcallstatementtoFortran/Cfunctionwith<C-expr|multi-lineblock>.ThewrappedFortran/Cfunctionisavailableas(*f2py_func).Toraiseanexception,setf2py_success=0in<C-expr|multi-lineblock>
34、.callprotoargument<C-typespecs>WhencallstatementstatementisusedthenF2PYmaynotgenerateproperprototypesforFortran/Cfunctions(because<C-expr>maycontainanyfunctioncallsandF2PYhasnowaytodeterminewhatshouldbetheproperprototype).Withthisstatementyoucanexplicitelyspecifytheargumentsofthecorrespo
35、ndingprototype:extern<returntype>FUNC_F(<routinename>,<ROUTINENAME>)(<callprotoargument>);fortranname<acctualFortran/Croutinename>Youcanusearbitrary<routinename>foragivenFortran/Cfunction.Thenyouhavetospecify<acctualFortran/Croutinename>withthisstatement.Iff
36、ortrannamestatementisusedwithout<acctualFortran/Croutinename>thenadummywrapperisgenerated.usercode<multi-lineblock>Whenusedinsidepythonmoduleblock,thengivenCcodewillbeinsertedtogeneratedC/APIsourcejustbeforewrapperfunctiondefinitions.HereyoucandefinearbitraryCfunctionstobeusedininitializ
37、ationofoptionalarguments,forexample.Ifusercodeisusedtwiseinsidepythonmoduleblockthenthesecondmulti-lineblockisinsertedafterthedefinitionofexternalroutines.Whenusedinside<routinesingature>,thengivenCcodewillbeinsertedtothecorrespondingwrapperfunctionjustafterdeclaringvariablesbutbeforeanyCstate
38、ments.So,usercodefollow-upcancontainbothdeclarationsandCstatements.Whenusedinsidethefirstinterfaceblock,thengivenCcodewillbeinsertedattheendoftheinitializationfunctionoftheextensionmodule.Hereyoucanmodifyextensionmodulesdictionary.Forexample,fordefiningadditionalvariablesetc.pymethoddef<multi-lin
39、eblock>MultilineblockwillbeinsertedtothedefinitionofmodulemethodsPyMethodDef-array.Itmustbeama-separatedlistofCarrays(seeExtendingandEmbeddingPythondocumentationfordetails).pymethoddefstatementcanbeusedonlyinsidepythonmoduleblock.3.2.3 AttributesF2PY使用了下列屬性:?可選optional相應的參數(shù)被移到<optionalargument
40、s列表的末尾??蛇x參數(shù)的缺省值由<init_expr>指定,請參見entitydecl的定義。缺省值必須是有效的C語言表達式。在使用<init_expr>時,F(xiàn)2PY自動設為可選屬性??蛇x數(shù)組參數(shù)的所有維數(shù)都必須是有界的。?必須Crequired相應的參數(shù)被視為必須的參數(shù),這是缺省屬性,只有當使用了<init_expr>,而你又要禁用自動optional設置時,才需要指定required0如果PythonNoneobject被設置為requiredargument,則該參數(shù)被視為可選的。就是說,inthecaseofarrayargument,thememo
41、ryisallocated.Andif<init_expr>isgiven,thecorrespondinginitializationiscarriedout.?dimension(<arrayspec>)相應的變量視為數(shù)組,其維數(shù)由<arrayspec>指定。?intent(<intentspec>)Thisspecifiesthe"intention"ofthecorrespondingargument.<intentspec>isamaseparatedlistofthefollowingkeys:inTh
42、eargumentisconsideredasaninput-onlyargument.參數(shù)值傳給Fortran/Cfunction,該函數(shù)不能改變參數(shù)的值。inoutTheargumentisconsideredasaninput/ent(inout)argumentscanbeonly"contiguous"Numericarrayswithpropertypeandsize.Here"contiguous"canbeeitherinFortranorCsense.Thelatteron
43、ecoincideswiththecontiguousconceptusedinNumericandiseffectiveonlyifintent(c)isused.Fortran-contiguousnessisassumedbydefault.See also通常不推薦使用intent(inout),而代之以intent(in,out)。intent(inplace)attribute.inplaceTheargumentisconsideredasaninput/ent(inplace)argumentsmustbeNume
44、ricarrayswithpropersize.Ifthetypeofanarrayisnot"proper"orthearrayisnon-contiguousthenthearraywillbechangedin-placetofixthetypeandmakeitcontiguous.通常也不推薦使用intent(inplace).Forexample,whensliceshavebeentakenfromanintent(inplace)argumentthenafterin-placechanges,slicesdatapointersmaypointtounal
45、locatedmemoryarea.outTheargumentisconsideredasanreturnvariable.Itisappendedtothe<returnedvariables>list.Usingintent(out)setsintent(hide)automatically,unlessalsointent(in)orintent(inout)wereused.缺省情況下,返回的多維數(shù)組是Fortran-contiguous。如果使用了intent(c),則返回的多維數(shù)組則是C-contiguous。hideTheargumentisremovedfromt
46、helistofrequiredoroptionalarguments.Typicallyintent(hide)isusedwithintent(out)orwhen<init_expr>pletelydeterminesthevalueoftheargumentlikeinthefollowingexample:integerintent(hide),depend(a):n=len(a)realintent(in),dimension(n):aTheargumentistreatedasaCscalarorCarrayargument.Inthecaseofascalararg
47、ument,itsvalueispassedtoCfunctionasaCscalarargument(recallthatFortranscalarargumentsareactuallyCpointerarguments).Inthecaseofanarrayargument,thewrapperfunctionisassumedtotreatmulti-dimensionalarraysasC-contiguousarrays.Thereisnoneedtouseintent(c)forone-dimensionalarrays,nomatterifthewrappedfunctioni
48、seitheraFortranoraCfunction.ThisisbecausetheconceptsofFortran-andC-contiguousnessoverlapinone-dimensionalcases.Ifintent(c)isusedasanstatementbutwithoutentitydeclarationlist,thenF2PYaddsintent(c)attibutetoallarguments.Also,whenwrappingCfunctions,onemustuseintent(c)attributefor<routinename>inord
49、ertodisableFortranspecificF_FUNC(.,.)macros.cacheTheargumentistreatedasajunkofmemory.NoFortrannorCcontiguousnesschecksarecarriedout.Usingintent(cache)makessenseonlyforarrayarguments,alsoinconnectionwithintent(hide)oroptionalattributes.copyEnsurethattheoriginalcontentsofintent(in)argumentispreserved.
50、Typicallyusedinconnectionwithintent(in,out)attribute.F2PYcreatesanoptionalargumentoverwrite_<argumentname>withthedefaultvalue0.overwriteTheoriginalcontentsoftheintent(in)argumentmaybealteredbytheFortran/Cfunction.F2PYcreatesanoptionalargumentoverwrite_<argumentname>withthedefaultvalue1.o
51、ut=<newname>Replacethereturnnamewith<newname>inthe_doc_stringofawrapperfunction.callbackConstructanexternalfunctionsuitableforcallingPythonfunctionfromFent(callback)mustbespecifiedbeforethecorrespondingexternalstatement.If'argument'isnotinargumentlistthenitwillbeaddedto
52、PythonwrapperbutisnotusedwhencallingFortranfunction.Useintent(callback)insituationswhereaFortran/Ccodeassumesthatauserimplementsafunctionwithgivenprototypeandlinksittoanexecutable.auxDefineauxiliaryCvariableinF2PYgeneratedwrapperfunction.Usefultosaveparametervaluessothattheycanbeaccessedininitializa
53、tionexpressionofothervariables.Notethatintent(aux)silentlyimpliesintent(c).Thefollowingrulesapply:?Ifnointent(in|inout|out|hide)isspecified,intent(in)isassumed.?intent(in,inout)isintent(in).?intent(in,hide)orintent(inout,hide)isintent(hide).?intent(out)isintent(out,hide)unlessintent(in)orintent(inou
54、t)isspecified.?Ifintent(copy)orintent(overwrite)isused,thenanadditionaloptionalargumentisintroducedwithanameoverwrite_<argumentname>andadefaultvalue0or1,respectively.?intent(inout,inplace)isintent(inplace).?intent(in,inplace)isintent(inplace).?check(<C-booleanexpr>)Performconsistencychec
55、kofargumentsbyevaluating<C-booleanexpr;if<C-booleanexpr>returns0,anexceptionisraised.Ifcheck(.)isnotusedthenF2PYgeneratesfewstandardchecks(e.g.inacaseofanarrayargument,checkforthepropershapeandsize)automatically.Usecheck()todisablechecksgeneratedbyF2PY.?depend(卜names>)Thisdeclaresthatthe
56、correspondingargumentdependsonthevaluesofvariablesinthelist<names>.Forexample,<init_expr>mayusethevaluesofotherarguments.Usinginformationgivenbydepend(.)attributes,F2PYensuresthatargumentsareinitializedinaproperorder.Ifdepend(.)attributeisnotusedthenF2PYdeterminesdependencerelationsautom
57、atically.Usedepend()todisabledependencerelationsgeneratedbyF2PY.WhenyoueditdependencerelationsthatwereinitiallygeneratedbyF2PY,becarefulnottobreakthedependencerelationsofotherrelevantvariables.Anotherthingtowatchoutiscyclicdependencies.F2PYisabletodetectcyclicdependencieswhenconstructingwrappersandi
58、tplainsifanyarefound.?allocatableThecorrespondingvariableisFortran90allocatablearraydefinedasFortran90moduledata.?externalThecorrespondingargumentisafunctionprovidedbyuser.Thesignatureofthisso-calledcall-backfunctioncanbedefinedin_user_moduleblock,orbydemonstrative(orreal,ifthesignaturefileisarealFo
59、rtrancode)callinthe<otherstatements>block.Forexample,F2PYgeneratesfromexternalcb_sub,cb_funintegernreala(n),rcallcb_sub(a,n)r=cb_fun(4)thefollowingcall-backsignatures:subroutinecb_sub(a,n)realdimension(n):aintegeroptional,check(len(a)>=n),depend(a)二n=len(a)endsubroutinecb_subfunctioncb_fun(
60、e_4_e)result(r)integer:e_4_ereal:rendfunctioncb_funThecorrespondinguser-providedPythonfunctionarethen:defcb_sub(a,n):.returndefcb_fun(e_4_e):.returnrSeealsointent(callback)attribute.?parameterThecorrespondingvariableisaparameteranditmusthaveafixedvalue.F2PYreplacesallparameteroccurrencesbytheircorrespondingvalues.3.3 擴展3.3.1 F2PY指令F2PY指令允許在Fortran77/90源碼中使用F2PY簽名文件結構,這個特征能夠讓你完全跳過生成簽名文件這一步,直接對Fortran源碼應用F2PY。F2PY指令型式如下:<mentchar>f2py.其中,fixed格式的fortran代碼的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)學之眼模板
- 醫(yī)藥生物行業(yè)安全生產(chǎn)工作總結
- 舞蹈秘境:身心之旅
- 幼兒園環(huán)境教育的研究與實踐計劃
- 《知識產(chǎn)權法總論》課件
- 舞臺設計工程師工作總結
- 2024員工三級安全培訓考試題及參考答案【A卷】
- 2023年-2024年項目部安全管理人員安全培訓考試題及答案原創(chuàng)題
- 員工因病辭職報告-15篇
- 歷史學應用研究報告
- YS/T 1149.2-2016鋅精礦焙砂化學分析方法第2部分:酸溶鋅量的測定Na2EDTA滴定法
- GB/T 11017.1-2002額定電壓110kV交聯(lián)聚乙烯絕緣電力電纜及其附件第1部分:試驗方法和要求
- 原料藥FDA現(xiàn)場GMP符合性要求與檢查實踐課件
- 科技創(chuàng)新社團活動教案課程
- 氨堿法純堿生產(chǎn)工藝概述
- 基礎化工行業(yè)深度:電解液新型鋰鹽材料之雙氟磺酰亞胺鋰(LiFSI)市場潛力可觀新型鋰鹽LiFSI國產(chǎn)化進程加速
- 年產(chǎn)10000噸一次性自然降解環(huán)保紙漿模塑餐具自動化生產(chǎn)線技改項目環(huán)境影響報告表
- 實戰(zhàn)銷售培訓講座(共98頁).ppt
- 測控電路第7章信號細分與辨向電路
- 哈爾濱工業(yè)大學信紙模版
- 氨的飽和蒸汽壓表
評論
0/150
提交評論