版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Lessoncontent:
CallbackFunctionsWorkshop12(Optional):JobMonitoringCustomDataScriptingIdeasforProductivityWorkshop13:BasicScriptingStyleConsiderationsSettingAbaqusDefaultsC++insteadofPythonParameterstudiesWorkshop14(Optional):UsingtheParametricScriptingFileLesson7:MiscellaneousTopics3hoursCallbackFunctions(1/12)CallbackfunctionsPartoftheprogramthatcatcheseventsandprocessesthemWhatisanevent?DefinitionofactionsperformeduponinputfromtheuserorthesystemExamplesofuserinput:mousemovement,keystrokes,etc.Examplesofsysteminput:shutdown,applicationstate,etc.Event-drivenprogramEvent-drivenprogramsareincontrasttoabatchorientedoperation;anapproachthatcontinuouslyprocessesthenextitemfromagroup.Event-drivenprogramsstart,waitforeventsandonlystopwhentoldtodoso—byanevent.CallbackFunctions(2/12)Kernel-sideevent-drivenprogrammingwithAbaqusAbaqusanalysisproducts–JobMonitoringYoumayassociateanevent-drivenfunctionwithaparticularmessagethatisobtainedfromAbaqus/StandardorAbaqus/Explicit.Thefollowingmethodisavailableforcreatingcallbackfunctions: addMessageCallback()–amethodthatspecifiesauserdefinedcallbackfunctionthattobecalledwhenamessageisreceivedfromthesolver. Thepletion()methodcanbeusedtoavoidusingcallbacks.Ithaltstheexecutionofascriptuntiltheendofananalysisjob.Abaqus/CAE–ModuleorMethodMonitoringYoumayalsoassociateevent-drivenfunctionswithAbaqus/CAE addMethodCallback()–amethodthatspecifiesacallbackfunctiontobecalledwhenanAbaqus/CAEmethodisexecuted.CallbackFunctions(3/12)Jobmonitoring–waitingforjobstocompleteThisistheeasiestwaytowritescriptsbasedonthebehavioroftheanalysisjob.Thebehaviorislimitedtojobcompletion.Example:UsejobmonitoringtosubmitajobcalledmyJob1andwaitforittocompletebeforesubmittingasecondjobcalledmyJob2.myJob1=mdb.Job(name='Job-1',model='Model-1')myJob2=mdb.Job(name='Job-2',model='Model-2')myJob1.submit()pletion()myJob2.submit()pletion()ThemethodisanattributeofthejobobjectCallbackFunctions(4/12)Jobmonitoring–respondingtojobmessagesInsomecases,youmaywanttoprocessmessagesfromtheanalysiswhileitisrunninganddosomethingotherthanjustwait;forexample,terminatethejobwhenacriterionisreachedorplotresultsastheanalysisprogresses.ThisisplishedbywritingacallbackfunctionandregisteringitwiththemonitorManagerobject.ThefollowingistheformatofmessagecallbackdefinitiondefcallbackFuncName():<body>fromjobMessageimport*monitorManager.addMessageCallback(jobName,messageType,callBackFuncName,userData)ThemethodisanattributeofthemonitorManagerobjectCallbackFunctions(5/12)ArgumentstotheaddMessageCallback()methodjobNameStringspecifyingthenameofthejobtobemonitored.UsethesymbolicconstantobjectcalledANY_JOBtospecifythatthecallbackappliestoalljobnames.messageTypeThefollowingarethemessagetypesissuedbytheAbaqusanalysisproducts ABORTED,COMPLETED,END_STEP,ERROR,HEADING,ITERATION,JOB_SUBMITTED,MONITOR_DATA,ODB_FILE,ODB_FRAME,STEP,STARTED,STATUS,WARNINGuserDataAnyuser-definedobject(orNone)tobepassedtothecallbackfunctionCallbackFunctions(6/12)CallbackfunctionsyntaxThefollowingformatisusedtodefineanAbaquscallbackfunction:
defcallbackFuncName(jobName, messageType, data, userData)ThesegetpassedtothefunctionCallbackFunctions(7/12)ArgumentstotheaddMessageCallback()method(cont’d)dataThefollowingdescribethemembersofthedataobject:clientHost nameofhostrunningthejobclientName nameofclientthatsentthemessage
(BatchPre,Packager,Standard,Explicit,
Calculator)Phase Asymbolicconstantspecifyingthephaseoftheanalysis
(BATCHPRE_PHASE,PACKAGER_PHASE,STANDARD_PHASE, EXPLICIT_PHASE,CALCULATOR_PHASE)processId processIDofanalysisprogram
threadId threadIDoftheanalysisprogramtimeStamp timethemessagewassentCallbackFunctions(8/12)Example:AsimplecallbackfunctionTask:printinformationforanykindofsolvermessage fromabaqusimportmonitorManager
fromjobMessageimportANY_MESSAGE_TYPE,ANY_JOB defsimpleCB(jobName,mType,data,userData): print'Jobname:%s,Messagetype:%s'%(jobName,mType)
print'datamembers:' members=dir(data)
format='%-18s%s'
printformat%('member','value') formemberinmembers:
memberValue=getattr(data,member)
printformat%(member,memberValue)CallbackFunctions(9/12)Example:Asimplecallbackfunction(cont’d)defprintMessages(start=ON):"""SwitchmessageprintingONorOFF"""ifstart:monitorManager.addMessageCallback(ANY_JOB,ANY_MESSAGE_TYPE,simpleCB,None)else:monitorManager.removeMessageCallback(ANY_JOB,ANY_MESSAGE_TYPE,simpleCB,None)methodtocreatecallbackmessagesuserfunctiontoprovideconvenientmeansforturningon/offthemessagecallbackmethodtodeletecallbackmessagesCallbackFunctions(10/12)ModulemonitoringTheAbaqusenvironmentfile(abaqus_v6.env)isreadbyAbaqus/CAEwhenyoustartasession.Aswesawinanearlierworkshop,theenvironmentfilecancontaincallbackmessagingcommands.Forexample:
#VisualizationpreferencesdefsetVisPref(module,userData):importpartsession.viewport['Viewport:1'].partDisplay.setValues(renderStyle=SHADED)
addImportCallback('part',setVisPref)CallbackFunctions(11/12)IssuesrelatingtocallbackfunctionsMessagingcommandsareavailableonlyifAbaqus/CAEisruninteractivelyusingtheGUI.CallbacksareremovedwhentheAbaqus/CAEsessionisterminated.UseremoveMessageCallback()methodtoremoveitfromthesystem.Theargumentsforthismethodmustbeidenticaltotheargumentsofthecorrespondingmethodthatdefinedthecallback.Unpredictablebehaviorwillresultfromredefiningcallbackswithoutfirstremovingthem.CallbackFunctions(12/12)ThemethodCallbackAcallbackcanbeaddedforanyAbaqus/CAEcommandKnownasamethodCallback.ThecallbackcanbecalledbeforeandaftertheAbaqus/CAEcommandiscalled.TheargumentstotheAbaqus/CAEcommandarepassedtothecallback.UseaddMethodCallback(),removeMethodCallback().Example:importmethodCallbackfromjobimportModelJobTypedefmyCallback(callingObject,pargs,kwargs,userData):print'Aninputfileisabouttobewritten.'
methodCallback.addCallback(ModelJobType,'writeInput',myCallback)ThiscallbackwillonlybecalledwhenthemethodwriteInputiscalledonanobjectoftypeModelJobType.Whenyoucompletethisworkshopyouwillbeableto:writesimplecallbackfunctionsthatrespondtomessagessentbyanalysisjobsresorttolookingattheanswerfilewhenallelsefailsWorkshop12:JobMonitoring60minutesCustomData(1/6)Whatiscustomdata?CustomdataistheframeworkthatisprovidedinAbaqus/CAEforstoringspecialpersistentandnon-persistentinformation.MdbaccessAbaquscreatesthreecustomdatacontainerswhenthecustomKernelmoduleisimported.Example:>>>mdb.customDataAttributeError:'Mdb'objecthasnoattribute'customData'>>>importcustomKernel>>>mdb.customDatamdb.customData>>>session.customDatasession.customDataCustomData(2/6)OdbaccessCustomdataisavailablewithanyoutputdatabase(ODB)file.NotavailablethroughC++ODBAPIManuallyrequiredtosaveExample:>>>importcustomKernel>>>odb=session.odbs['D:\temp\viewer_tutorial']>>>odb.customData.i=1>>>odb.customData.i1>>>odb.save()CustomData(3/6)ExampleofdatapersistenceThefollowingkernelcodestoressomecustomvaluesinanMDB:IftheMDBisclosedandthenreopened,thevaluescanberetrieved:importcustomKernelmdb=Mdb()mdb.customData.myString='Version1'
mdb.customData.myNumber=612mdb.saveAs('custom-test.cae')>>>mdb=openMdb('custom-test.cae')>>>printmdb.customData.myString'Version1'
>>>printmdb.customData.myNumber612CustomData(4/6)DatapersistenceDatastoredundercustomDatawillautomaticallybesavedtotheAbaqus/CAEmodeldatabasewhenFile→Saveisselected.Foroutputdatabase,use
save()method.Note:AbaqusdoesnottrackchangesmadetothecustomDataobject;therefore,ifchangesweremadeonlytothecustomDataobject,theuserwillnotbepromptedtosavechangeswhenquittingasession.CustomData(5/6)SupportedobjectsThecustomDataobjectsupportsalmostanykindofPythondata(strings,numbers,functions,classes).TherulesaresimilarthosethatapplytothePythonpicklemodule(seeAppendix1).Abaqusobjectsarenotsupported.CustomData(6/6)customDataisalsoavailableforMdbattributessuchasModel,Part,PartInstance,Assembly,Step,Material,...Allowsmoreflexibilityinstoringattribute-specificdata>>>importcustomKernel>>>mdb.models['Model-1'].rootAssembly.CustomData()mdb.models['Model-1'].rootAssembly.customData>>>cd=mdb.models['Model-1'].rootAssembly.customData>>>#Storespotweldlocations>>>cd.spotWeldLocations=((0.,0.,0.),(1.,0.,1.),...)>>>mdb.models['Model-1'].materials['ABS'].CustomData()mdb.models['Model-1'].materials['ABS'].customData>>>cd=mdb.models['Model-1'].materials['ABS'].customData>>>#Storeexperimentaldataforfuturereference>>>cd.exptData=((0.0,0.0),(1.0,0.001),...)>>>mdb.saveAs('myModel.cae')ScriptingIdeasforProductivity(1/12)ScriptingperformanceBasicconsiderationsforcodedevelopmenttimeUsePythonfunctionalityfirst.Ifperformanceiscritical,extendAbaqusPythonwithCorC++.TheC++APItotheODBismoreefficientthanthePython-basedAPI.BasicconsiderationsforPythonperformanceCodingstylecanaffecttheefficiencyofyourPythonscripts.Ingeneral,workingwithhigh-levelobjectsismoreefficientthanworkingwithlow-levelobjects.Avoidaccessingattributesthatrequiretheuseofcomputationallyintensivemethods.Forexample:minimizethenumberofcallstogetSubset()andaddData()methods.Usearrayobjectsinsteadoftupleswhendealingwithlargeamountsofdata.Beawarethatthereissomeoverheadassociatedwithfunctioncallsacrossmodules.Makeuseofbuilt-infunctions.Theyareoftenoptimizedforperformance.Makeuseof3rd-partymodules.Theyareoftenoptimizedforperformance.ScriptingIdeasforProductivity(2/12)Scriptingperformance(cont’d)PythonsequenceunpackingGenerally,thesequenceunpackingstyleinPythonhasamoderateinfluenceonperformance.Considerthreevariationsofmakingthesamerepetitiveassignmentsfora,b,c:foriinrange(number):a=bigList[i][0]b=bigList[i][1]c=bigList[i][2]foriinrange(number):a,b,c=bigList[i]forsubListinbigList:a,b,c=subListLessefficientMoreefficientfora,b,cinbigList:...ScriptingIdeasforProductivity(3/12)Scriptingperformance(cont’d)AbaqusPythonsequenceunpackingWARNING:SequenceunpackingstylewiththeAbaqusobjectmodelcanhaveasignificantinfluenceonperformance.Considerthreevariationsofreadingthesamestressinformation:forvaluein(myStress.values):value.dataMoreefficientforiinrange(len(myStress.values))myStress.values[i].dataDonotdothis!!!tmpStressValues=myStress.valuesforiinrange(len(tmpStressValues)):tmpStressValues[i].dataLessefficientScriptingIdeasforProductivity(4/12)MaintainingscriptsacrossreleasesAPIsyntaxchangesbetweenreleases–adilemma?PROBLEM:TheAbaqusScriptingInterfacechangesfromreleasetorelease.ActualchangestotheODBformatandtheunderlyingcodethatisusedtoaccessODBdatamightbesignificantinthelongterm.Changestosyntaxareintendedbeminimized,buttheywilloccur.TheAbaqusReleaseNoteswilldocumentallAPIsyntaxchangesSIGNIFICANCE:AbaqususersareaccustomedtousingmultiplereleasesatatimeSOLUTION:Howshouldusersdealwithsyntaxchanges?Someoptions:(1)Maintainmultipleversionsofscripts(2)Createametaprogramforhandlingcross-releaseperformance(ametaprogramisonethatmanagestheperformanceofotherprograms)(3)Turnondeprecatedsyntaxusingthepatibilityobject(4)UsetheconversionutilitysuppliedwithAbaqus(moreaboutthislater).(5)Otherideas?ScriptingIdeasforProductivity(5/12)Maintainingscriptsacrossreleases(cont’d)Example:UsingthepatibilityobjectThepatibilityobjectenablestheusertocontrolaccesstodeprecatedcommandsintheAbaqusScriptingInterface.Asanaddedfeature,dataiscollectedonwhichdeprecatedcommandshavebeenused.TheincludeDeprecatedattributeprovidesON/OFFusercontrol.ThedefaultvalueisON.Forexample:>>>patibility.includeDeprecatedON>>>len(dir(odb))68>>>patibility.setValues(includeDeprecated=OFF)>>>len(dir(odb))67ScriptingIdeasforProductivity(6/12)Maintainingscriptsacrossreleases(cont’d)UsingtheAbaqusscriptconvertutilityAplug-inisavailableunderPlug-ins→Abaqus→UpgradeScripts.Theplug-incanupgradescriptstoAbaqus6.12fromanyreleaseolderthan6.2Similarscriptsforpreviousreleasesarealsoavailable.AscriptcalledupgradeScript611_612.pyisavailablewith6.12.ThisscriptisautilitytoconvertAbaqusScriptingInterfacescriptswrittenforAbaqus6.11,foruseinAbaqus6.12.Themendedstrategyistoupgradeyourscripts,andthenruntheminAbaquswithincludeDeprecatedturnedOFF,toensurethattheycomplywiththelatestscriptingAPI.ScriptingIdeasforProductivity(7/12)Maintainingscriptsacrossreleases(cont’d)ConstructorargumentsItismendedthatyouusekeywordarguments,sincetheycanbesuppliedinanyorderandtheymakeyourscriptseasiertoreadanddebug;forexample: newViewport=session.Viewport(name='myViewport', origin=(10,10),width=100,height=50)UsingkeywordsmakesthescripteasiertoupgradeusingtheupgradeScriptutility.Ifyouchoosenottousekeywords,theargumentsmustbeprovidedintheorderinwhichtheyaredocumented.: newViewport=session.Viewport('myViewport',(10,10),100,50)ScriptingIdeasforProductivity(8/12)Maintainingscriptsacrossreleases(cont’d)LimitationsoftheupgradeScriptutilityTheupgradeScriptutilityworksbestonscriptswithoutprogramcontrolItwillnotworkifanASIcommandiscalledwithoutreferencetooneoftherootobjects(mdb,session,openOdb(),Odb())defdoIt(x):x.setValues(reduceColors=ON)IfthereferenceiswithinthefunctionitwillbeOKdefdoit():x=session.printOptionsx.setValues(reduceColors=ON)Cannotconvertcertaincommands.Forexample,theSketchcommand(usedinAbaqus6.5andprior)wasreplaced(Abaqus6.6andlater)withConstrainedSketch.m=mdb.models['Model-1']<callsomeSketchcommands>m.convertAllSketches()ScriptingIdeasforProductivity(9/12)Statuscommands(writingtexttomessageandpromptarea)printmessagePestone(message,[...])Thisfunctiondisplaysastringinthepromptarea.
'testlandmark' importtime message="testoperation";object='test';total=25 foriinrange(total):
milestone(message,object,i,total) time.sleep(.2)ScriptingIdeasforProductivity(10/12)Example:AbaqusfilecleanuputilityWritescriptstohelpcleanupyourdirectories.Forexample:#scr_cleanup.pyimportosextensionList=['.log','.msg','.prt','','.abq','.dat','.mdl','.pac','.res','.sel','.stt','.pes','.pmg','.sta','.fil','.fin','.par']forextensioninextensionList:os.system('del*'+extension)RecallthatthedelstatementisusedtodeleteobjectsHowever,fordeletingsomeASIobjects(suchasviewports),delhastobeusedonlywiththefullyqualifiedidentifierdelsession.viewports['Viewport:1']vp=session.viewports['Viewport:2']delvp#doesnotdeletetheviewportvp NameError:Thereisnovariablenamed'vp'ScriptingIdeasforProductivity(11/12)Example:AutosubmitthreeAbaqusjobs,one-at-a-timeMethod#1:Runstand-alonescriptfromthesystemcommandline.#scr_auto_run1.pyimportosjobs=['auto_job1','auto_job2','auto_job3']path='C:\\Abaqus6\\Commands\\abq6121'#path=r'C:\Abaqus6\Commands\abq6121'#path='mands/abq6121'forjobinjobs:print'job:',jobcmd='%sjob=%sinter'%(path,job)os.system(cmd)SamebehaviorNote:Thepathtotheexecutabledependsontheinstallation.ScriptingIdeasforProductivity(12/12)Example:AutosubmitthreeAbaqusjobs,one-at-a-time(cont’d)Method#2:Runstand-alonescriptfromtheAbaqus/CAECLI.#scr_auto_run2.pyimportjobfromabaqusConstantsimport*jobs=['auto_job1','auto_job2','auto_job3']forjobinjobs:job=mdb.JobFromInputFile(name=job,inputFileName=job+'.inp',type=ANALYSIS)job.submit()pletion()Whenyoucompletethisworkshopyouwill:knowhowtoavoidacommonscriptingstyleperformanceissueyouwillusethefileviewer_tutorial.odbintheworkshopdirectory.Workshop13:BasicScriptingStyleConsiderations60minutesSettingAbaqusDefaults(1/6)TheAbaqusenvironmentfileThenameofthefileisabaqus_v6.envThisfileisrunwhenAbaqusstarts.UsesPython/ASIsyntax.Itcanbeusedtosetdefaultsfordisplayoptions,etc.ItmaycontainsomeoptionalPythonfunctionsthatarecalledbyAbaqus,suchas:onCaeStartup()onCaeGraphicsStartup()onJobStartup()pletion()Abaquslooksforafilenamedabaqus_v6.envinthesite_dir,home_dir,andlocal_dirandwillexecuteeachoneinsuccession.IfmorethanoneversionoftheabovePythonfunctionsisfound,eachonewillbecalled.Inthecaseofenvironmentvariables,asubsequentdefinitionwilloverwriteapreviousdefinition.SettingAbaqusDefaults(2/6)abaqus_v6.envCertainvariablesarepredefinedinpletionandonJobStartup.Theseinclude:savedir,id,scrdir,analysisType,applicationName,abaqus_version.defpletion():importosextensions=('res','stt','mdl','prt','abq','pac')restartDir=savedir+id+'_restart'+os.sepif(notos.path.exists(restartDir)):os.mkdir(restartDir)forextensioninextensions:fileName=id+'.'+extensionif(os.path.exists(savedir+fileName)):os.rename(savedir+fileName,restartDir+fileName)defonJobStartup():importos,osutilsrestartDir=savedir+id+'_restart'if(os.path.exists(restartDir)):osutils.removeTree(restartDir)SettingAbaqusDefaults(3/6)abaqus_v6.env##assignsomevariables#memory=50explicit_precision=[SINGLE_PRECISION,DOUBLE_PRECISION][0]ask_delete=ONcae_no_parts_input_file=ONauto_calculate=ONodb_output_by_default=OFFprinted_output=OFFprint_flattened_file=ONSettingAbaqusDefaults(4/6)AvailablevariablesThefollowingnamesexistwithintheonJobStartup()andpletion()functions:id Thejobidentifierspecifiedbytheuser.savedir Thepathnamefromwhichthejobwassubmitted.scrdir Thepathnametothescratchdirectory(sameasos.getcwd()).analysisType Thetypeofanalysistobeexecuted.defpletion():forglobinglobals().keys():ifglob!='__builtins__':print'%s=%s'%(glob,eval(glob))scrdir=C:\scratch\new_beam3d_1364id=new_beam3dsavedir=C:\tempanalysisType=STANDARDabaqus_v6.envSettingAbaqusDefaults(5/6)Availablevariables(cont’d)ThefollowingnamesexistoutsideoftheonJobStartup()andpletion()functionsintheenvironmentfile:abaqus_version- AstringthatcontainstheAbaqusversion.analysisType- Thetypeofanalysistobeexecuted.applicationName- Thenameoftheexecutionprocedure.Inadditiontothesetherearemanyothernamesthatexistwhentheenvironmentfileisrun.Forexample,alloftheAbaqusenvironmentvariables.forglobinglobals().keys():ifglob!='__builtins__':ifglob!=str(eval(glob)):print'%s=%s'%(glob,eval(glob))submodel=OFFcontact=OFFparval=OFFabaqus_version=6.7-1aqua=OFFadmin=[]dsa=OFFjob=new_beam3dpartsAndAssemblies=OFFpre_memory=33554432importer=OFFlmsvrdownlimit=0datacheck=NonerestartWrite=ONsymmetricModelGeneration=OFFoutputKeywords=ONdataLineCheck=ONrestart=OFFanalysisType=STANDARDrezone=OFFinput=new_beam3dstandard_memory=33554432applicationName=datacheckrunCalculator=OFFpartiallistabaqus_v6.envSettingAbaqusDefaults(6/6)ExecutionenvironmentTheabaqus_v6.envfileisnotaPythonmodule(althoughitlookslikeone).Eachofthefunctionsdefinedintheabaqus_v6.envfileareexecutedintheirownspecialnamespacewhichisdifferentfromtheouternamespaceoftheabaqus_v6.envfile(andnotthesameaseachother).Variablesthatexistintheouternamespaceoftheabaqus_v6.envfilearenotavailableinsidethefunctions:onCaeStartup()onCaeGraphicsStartup()onJobStartup()pletion()Ontheotherhand,somevariablesaresuppliedbyAbaqusbydefault.Tofindtheavailablevariables,lookinthereleasenotes,orprintouttheglobalvariablesasdescribedinthepreviousslides.C++insteadofPython(1/2)AccessingtheODBwithC++insteadofPython
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度餐飲行業(yè)冷鏈配送與質(zhì)量追溯體系合同3篇
- 鄭州科技學(xué)院《風(fēng)景人像基礎(chǔ)教程》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025版互聯(lián)網(wǎng)金融服務(wù)委托理財(cái)合同范本庫(kù)3篇
- 2025年行政合同簽訂及管理中行政優(yōu)先權(quán)的法律風(fēng)險(xiǎn)防范指南2篇
- 美容院股份轉(zhuǎn)讓服務(wù)協(xié)議(2025版)2篇
- 二零二五版美容美發(fā)行業(yè)美容院品牌推廣服務(wù)合同4篇
- 2025年度個(gè)人反擔(dān)保協(xié)議樣本:教育機(jī)構(gòu)貸款融資專用4篇
- 2025版全面升級(jí)危險(xiǎn)品物流運(yùn)輸合同范本3篇
- 西安市2025年度汽車租賃企業(yè)服務(wù)質(zhì)量評(píng)價(jià)體系3篇
- 2025年度菜鳥驛站綠色物流體系建設(shè)與推廣合同3篇
- 圓周率的認(rèn)識(shí)
- 基于SMT求解器的分支條件覆蓋測(cè)試
- 反騷擾政策程序
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第十一章運(yùn)動(dòng)技能的練習(xí)
- 射頻在疼痛治療中的應(yīng)用
- 四年級(jí)數(shù)學(xué)豎式計(jì)算100道文檔
- “新零售”模式下生鮮電商的營(yíng)銷策略研究-以盒馬鮮生為例
- 項(xiàng)痹病辨證施護(hù)
- 懷化市數(shù)字經(jīng)濟(jì)產(chǎn)業(yè)發(fā)展概況及未來(lái)投資可行性研究報(bào)告
- 07FD02 防空地下室電氣設(shè)備安裝
- 教師高中化學(xué)大單元教學(xué)培訓(xùn)心得體會(huì)
評(píng)論
0/150
提交評(píng)論