B u `G.ã@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-n62dbgi3/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ƒ}d}| ¡}| ¡dkr.| ¡}x>|rl|ddksX|ddkrZ|ddkrZP||7}| ¡}q0Wg}| ¡}|dd…dkrú| ¡}t|ƒ}d} |d kr²|d 8}d } x*t|d ƒD]} | ¡}|t|ƒg7}qÀW| rø| ¡}|t|ƒg7}ntd ƒ‚||d } ||d} g} g}d} x.| | krT| ¡}| t|ƒ¡| d7} q(Wd} x.| | krˆ| ¡}|  t|ƒ¡| d7} q\Wddg}| ¡}|rø|dd…dkr¾td|ƒ‚| ¡}t |ƒd kràtd|ƒ‚t|dƒt|d ƒg}| ¡|j _ |j j   dd¡|j _ t j |j j ¡|j _ tj|j _tj}|ddkrz|ddkrzd}tj|j _tj|j _tj}n*|ddkr¶|ddkr¶d}tj|j _tj|j _tj}nî|ddkrò|ddkròd}tj|j _tj|j _tj}n²|ddkr.|ddkr.d}tj|j _tj|j _tj}nv|ddkrj|ddkrjd }tj|j _tj|j _tj}n:|dd!kr¤|dd"kr¤d#}tj|j _tj|j _tj}|d|j _|j jtjtjtj tj!tj"tj#tjtj$tj%tjg kr6|dkrú|j& '¡}||j&_||_(| ¡|_ |j j   dd¡|_ |j)}d} x*| D]"}d$|i|d%t*| ƒ<| d} q4W|j+}t,d&d'„|Dƒƒr¦x0tdt |ƒƒD]} d(|| i|d)t*| ƒ<q„W| ¡}x„|r4| ¡}|dkrÎq²| ¡}|dd*kr(d}| ¡}x$|r|| ¡d7}| ¡}qòW|j j |7_ Pt|dƒ}|d @}t}|d @d krRt}t|d ƒ}t|dƒ}| ¡ ¡‰t,‡fd+d'„|Dƒƒr xt|ƒD]} | ¡q˜W|dkr xPt|ƒD]D}| ¡ ¡}d%|d}||krìi||<||dƒ||ˆ<q¾Wq(|dkr€xôt|ƒD]\}| ¡ ¡}d)|d}||krLi||<ˆd -¡ˆdd…}||dƒ|||<qWnŠ|d krÎx~t|ƒD]4}| ¡ ¡}||dƒ|j. /d,|di¡ˆ<q”Wn<|d kr(xNt|ƒD]$}| ¡ ¡}||dƒ|j0ˆ<qâWnxt|ƒD]}| ¡qW| ¡}q²W|j0j1dkrL| |j0_1| |j0_2d|j0_3|S)-NÚrÚ ú ééÚOptionsFééTzno Options line foundééÚ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)r0r1)r2r3)Ú suffix_namerrr4ÏsÚo)4rÚreadlineÚstripÚintrÚfloatrÚappendÚ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)r7rr8sP $                                             *  zResultsReader_sol._load)N)Ú__name__Ú __module__Ú __qualname__Ú__doc__r rrrrrrr s r )r0Z pyutilib.miscrBZpyomo.opt.baserZpyomo.opt.base.formatsrZ pyomo.optrrrrZ six.movesrZ ReaderFactoryÚregisterrr r r rrrrÚs