B _C.@stddlZddlZddlmZddlmZddlmZm Z m Z m Z ddl m Z ejeejGdddejZdS)N)results) ResultsFormat) SolverResultsSolutionStatus SolverStatusTerminationCondition)xrangec@s2eZdZdZd ddZddgfddZddZdS) ResultsReader_solz\ Class that reads in a *.sol results file and generates a SolverResults object. NcCs"tj|tj|dk r||_dS)N)rAbstractResultsReader__init__rsolname)selfr r9/tmp/pip-unpacked-wheel-d4p3hk07/pyomo/opt/plugins/sol.pyr $szResultsReader_sol.__init__c Csy&t|d}|||||SQRXWnVtk r|}z8t|d}|}WdQRXtd|t||fWdd}~XYnXdS)z$ Parse a *.sol file rNz+Error reading '%s': %s. SOL File Output: %s)open_load ValueErrorreadstr)rfilenameressolnsuffixesfefdatarrr__call__)s  zResultsReader_sol.__call__c" sx|dkrt}d}|}|dkr.|}x>|rl|ddksX|ddkrZ|ddkrZP||7}|}q0Wg}|}|dddkr|}t|}d} |d kr|d 8}d } x*t|d D]} |}|t|g7}qW| r|}|t|g7}ntd ||d } ||d} g} g}d} x.| | krT|}|t|| d7} q(Wd} x.| | kr|}| t|| d7} q\Wddg}|}|r|dddkrtd||}t |d krtd|t|dt|d g}||j _ |j j dd|j _ t j|j j |j _ tj|j _tj}|ddkrz|ddkrzd}tj|j _tj|j _tj}n*|ddkr|ddkrd}tj|j _tj|j _tj}n|ddkr|ddkrd}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"krd#}tj|j _tj|j _tj}|d|j _|j jtjtjtj tj!tj"tj#tjtj$tj%tjg krN|dkr|j&'}||j&_||_(||_ |j j dd|_ |j)}d} x*| D]"}d$|i|d%t*| <| d} q4W|j+}t,d&d'|Drx0tdt |D]} d(|| i|d)t*| <qW|}x|rL|}|dkrΐq|}|dd*kr(d}|}x$|r||d7}|}qW|j j |7_ Pt|d}|d @}t}|d @d krRt}t|d }t|d }t|d }t|d}|t,fd+d'|Dr$xt|D]} |qW|dkr"xPt|D]D}|}d%|d} | |kri|| <||d|| <qWq@|dkrxt|D]\}|}d)|d} | |krdi|| <d-dd}!||d|| |!<q6Wn|d krx~t|D]4}|}||d|j./d,|di<qWn<|d kr@xNt|D]$}|}||d|j0<qWnxt|D]}|q.W|}qW|j0j1dkrd| |j0_1| |j0_2d|j0_3|S)-Nr  OptionsFTzno Options line foundobjnozexpected 'objno', found '%s'z2expected two numbers in objno line, but found '%s'z; czOPTIMAL SOLUTION FOUND!dz-Optimal solution indicated, but ERROR LIKELY!i+z5INFEASIBLE SOLUTION: constraints cannot be satisfied!i,iz?UNBOUNDED PROBLEM: the objective can be improved without limit!iizVEXCEEDED MAXIMUM NUMBER OF ITERATIONS: the solver was stopped by a limit that you set!iiWzIFAILURE: the solver stopped by an error condition in the solver routines!Valuevcss|]}t|dVqdS)ZdualN)rematch).0sufrrr sz*ResultsReader_sol._load..ZDualcsuffixc3s|]}t|VqdS)N)r0r1)r2r3) suffix_namerrr4so)4rreadlinestripintrfloatrappendsplitlenZsolvermessagereplacepyutilibmiscZyaml_fixrokstatusrunknownrZoptimalZtermination_conditionwarningZ infeasibleZ unboundedZ maxIterationsZstoppedByLimitZinternalSolverErrorerroridZminFunctionValueZ minStepLengthZgloballyOptimalZlocallyOptimalZmaxEvaluationsotherZsolutionaddZstatus_descriptionvariabler constraintanyupperZ objective setdefaultZproblemZnumber_of_constraintsZnumber_of_variablesZnumber_of_objectives)"rZfinrrrmsglinezZnoptsZ need_vbtolinmxyr)tZ soln_statusZ objno_messageZ soln_variableZ var_valueZsoln_constraint remainingZ unmasked_kindkindZconvert_functionZnvaluesnamelenZtablenZtablineZcntZsuf_linekeyZtranslated_suffix_namer)r7rr8sT $                                               *  zResultsReader_sol._load)N)__name__ __module__ __qualname____doc__r rrrrrrr s r )r0Z pyutilib.miscrBZpyomo.opt.baserZpyomo.opt.base.formatsrZ pyomo.optrrrrZ six.movesrZ ReaderFactoryregisterrr r r rrrrs