B  @`Î.ã@stddlZddlZddlmZddlmZddlmZm Z m Z m Z ddl m Z ej eejƒ¡Gdd„dejƒƒZdS)éN)Úresults)Ú ResultsFormat)Ú SolverResultsÚSolutionStatusÚ SolverStatusÚTerminationCondition)Úxrangec@s2eZdZdZd dd„Zddgfdd„Zdd„ZdS) ÚResultsReader_solz\ Class that reads in a *.sol results file and generates a SolverResults object. NcCs"tj |tj¡|dk r||_dS)N)rÚAbstractResultsReaderÚ__init__rÚsolÚname)Úselfr ©rú9/tmp/pip-unpacked-wheel-bi3529v6/pyomo/opt/plugins/sol.pyr $szResultsReader_sol.__init__c Cs‚y&t|dƒ}| ||||¡SQRXWnVtk r|}z8t|dƒ}| ¡}WdQRXtd|t|ƒ|fƒ‚Wdd}~XYnXdS)z$ Parse a *.sol file ÚrNz+Error reading '%s': %s. SOL File Output: %s)ÚopenÚ_loadÚ ValueErrorÚreadÚstr)rÚfilenameÚresÚsolnÚsuffixesÚfÚeÚfdatarrrÚ__call__)s  zResultsReader_sol.__call__c s:|dkrtƒ}g}x2| ¡}|s"P| ¡}|dkr4P|r| |¡qWd |¡}g}|dd…dkrÔ| ¡}t|ƒ}d} |dkrŒ|d8}d} x*t|dƒD]} | ¡}|t|ƒg7}qšW| rÜ| ¡}|t|ƒg7}ntdƒ‚||d } ||d } g} g}d } x.| | kr.| ¡}| t|ƒ¡| d 7} qWd } x.| | krb| ¡}|  t|ƒ¡| d 7} q6Wd d g}| ¡}|rÒ|dd …d kr˜td|ƒ‚|  ¡}t |ƒd krºtd|ƒ‚t|d ƒt|dƒg}| ¡|j _ |j j   dd¡|j _ tj |j j ¡|j _ tj|j _tj}|d d krT|d dkrTd}tj|j _tj|j _tj}n*|d dkr|d dkrd}tj|j _tj|j _tj}nî|d dkrÌ|d dkrÌd}tj|j _tj|j _tj}n²|d dkr|d dkrd}tj|j _tj|j _tj}nv|d dkrD|d dkrDd}tj|j _tj|j _tj}n:|d dkr~|d d kr~d!}tj|j _tj|j _tj}|d |j _ |j jtjtjtj!tj"tj#tj$tjtj%tj&tjg kr|dkrÔ|j' (¡}||j'_||_)| ¡|_ |j j   dd¡|_ |j*}d } x*| D]"}d"|i|d#t+| ƒ<| d } qW|j,}t-d$d%„|Dƒƒr€x0td t |ƒƒD]} d&|| i|d't+| ƒ<q^W| ¡}x„|r| ¡}|d(kr¨qŒ|  ¡}|d d)krd(}| ¡}x$|rî|| ¡d7}| ¡}qÌW|j j |7_ Pt|d ƒ}|d @}t}|d@dkr,t}t|dƒ}t|d ƒ}| ¡ ¡‰t-‡fd*d%„|Dƒƒræxt|ƒD]} | ¡qrW|d kräxPt|ƒD]D}| ¡  ¡}d#|d }||krÆi||<||d ƒ||ˆ<q˜Wq|d krZxôt|ƒD]\}| ¡  ¡}d'|d }||kr&i||<ˆd  .¡ˆd d…}||d ƒ|||<qøWnŠ|dkr¨x~t|ƒD]4}| ¡  ¡}||d ƒ|j/ 0d+|d i¡ˆ<qnWn<|d krxNt|ƒD]$}| ¡  ¡}||d ƒ|j1ˆ<q¼Wnxt|ƒD]}| ¡qðW| ¡}qŒW|j1j2d kr&| |j1_2| |j1_3d |j1_4|S),NÚOptionsÚ éFééTzno Options line foundééréÚobjnozexpected 'objno', found '%s'z2expected two numbers in objno line, but found '%s'z; éczOPTIMAL SOLUTION FOUND!édéÇz-Optimal solution indicated, but ERROR LIKELY!éÈi+z5INFEASIBLE SOLUTION: constraints cannot be satisfied!i,iz?UNBOUNDED PROBLEM: the objective can be improved without limit!iiózVEXCEEDED MAXIMUM NUMBER OF ITERATIONS: the solver was stopped by a limit that you set!iôiWzIFAILURE: the solver stopped by an error condition in the solver routines!ÚValueÚvcss|]}t |d¡VqdS)ZdualN)ÚreÚmatch)Ú.0Úsufrrrú ³sz*ResultsReader_sol._load..ZDualÚcÚÚsuffixc3s|]}t |ˆ¡VqdS)N)r.r/)r0r1)Ú suffix_namerrr2ÓsÚo)5rÚreadlineÚstripÚappendÚjoinÚintrÚfloatrÚsplitÚlenZsolverÚmessageÚreplaceÚpyutilibÚmiscZyaml_fixrÚokÚstatusrÚunknownrZoptimalZtermination_conditionÚwarningZ infeasibleZ unboundedZ maxIterationsZstoppedByLimitZinternalSolverErrorÚerrorÚidZminFunctionValueZ minStepLengthZgloballyOptimalZlocallyOptimalZmaxEvaluationsÚotherZsolutionÚaddZstatus_descriptionÚvariablerÚ constraintÚanyÚupperZ objectiveÚ setdefaultZproblemZnumber_of_constraintsZnumber_of_variablesZnumber_of_objectives) rZfinrrrÚmsgÚlineÚzZnoptsZ need_vbtolÚiÚnÚmÚxÚyr'ÚtZ soln_statusZ objno_messageZ soln_variableZ var_valueZsoln_constraintÚ remainingZ unmasked_kindÚkindZconvert_functionZnvaluesZtablineZcntZsuf_lineÚkeyZtranslated_suffix_namer)r6rr8sR                                             *  zResultsReader_sol._load)N)Ú__name__Ú __module__Ú __qualname__Ú__doc__r rrrrrrr s r )r.Z pyutilib.miscrBZpyomo.opt.baserZpyomo.opt.base.formatsrZ pyomo.optrrrrZ six.movesrZ ReaderFactoryÚregisterrr r r rrrrÚs