B u `@sLddlmZmZmZmZmZmZmZmZm Z m Z m Z m Z ddl mZmZmZddlmZmZddlmZmZmZddlmZd3ddZdZefd d ZGd d d eZd4ddZddZ ddZ!ddZ"ee#e$fZ%ddZ&ddZ'ddZ(ddZ)ddZ*d d!Z+d"d#Z,d5d%d&Z-d'd(Z.d)d*Z/d6d+d,Z0d-d.Z1d/d0Z2d1d2Z3d$S)7) VarBlockSet Objective ConstraintSortComponents SOSConstraint Piecewise BuildActionParamAnyBinary)preprocess_block_objectivespreprocess_block_constraintspreprocess_constraint) UndefinedData undefined) iteritems itervalues string_types)xrangeTcCsrd}|rLxB|jddD]2}x&|jtdddD]}d}t|Pq,W|rPqW|rnx|jddD] }t|q^WdS)NFT)active)r descend_into)block_data_objectscomponent_data_objectsrrr)model objective constraintsZobjective_foundblockobjr 6/tmp/pip-unpacked-wheel-n62dbgi3/pyomo/pysp/phutils.py _preprocesss r"cCs|}|}t|jdrWsz/BasicSymbolMap.updateSymbols..css|]\}}||fVqdS)Nr )r7rr8r r r!r9Xs)r'listr/updater0)r1Z data_streamZobj_symbol_tuplesr r r! updateSymbolsQs   zBasicSymbolMap.updateSymbolscCs||jt|<||j|<dS)N)r/r6r0)r1rr8r r r! createSymbolZszBasicSymbolMap.createSymbolcCs||jt|<||j|<dS)N)r/r6r0)r1rr8r r r! addSymbol^szBasicSymbolMap.addSymbolcCs|jt|S)N)r/r6)r1rr r r! getSymbolbszBasicSymbolMap.getSymbolcCs |j|S)N)r0)r1r8r r r! getObjecteszBasicSymbolMap.getObjectcKs:tdddt|jD}tdt|tddS)NzBasicSymbolMap:cSs6g|].\}}t|d|jdtt|dqS)z <-> z (id=))reprnamestrr6)r7r8rr r r! jsz)BasicSymbolMap.pprint.. )printrr0joinsorted)r1kwdslinesr r r!pprinths zBasicSymbolMap.pprintN) __name__ __module__ __qualname__r2r3r<r=r>r?r@rMr r r r!r.Ds r.Fc Cs|dkrtd|jytdd|D}Wntk rJ|f}YnXt|dd}|dk r|dkr|dkrtd|ji}|_qt|t k rtd|jt t|fn i}|_g}x&|D]}||ks|d kr| |qWx|D]}t ||<qWd}|d kr"t|j d t jd }n|f}xz|D]r}||} | j} d } x@|D]8} | t| j|dt jd | | t| | d 7} qJWt ddt| D| _q.WdS)a Inputs: - owner_block: A constructed Pyomo Block - ctypes: An iterable of ctypes (or single ctype) to include in the _PHInstanceSymbolMaps dict - recursive: Indicates whether to include ctypes contained on subblocks in the given Block's SymbolMaps - update_new: Update a possibly existing _PHInstanceSymbolMaps dict on the owner_block with new ctypes. Any ctypes given as inputs that already have existing SymbolMaps will NOT be regenerated. **See: update_all - update_all: Update a possibly existing _PHInstanceSymbolMaps dict on the owner block with new ctypes, regenerating any existing ctypes given as inputs. Outputs: A dictionary (keys are ctypes) of SymbolMaps is placed on the owner_block and is named _PHInstanceSymbolMaps Fz\Failed to create _PHInstanceSymbolMap on Block %s. This Block has not been fully construced.css|] }|VqdS)Nr )r7ctr r r!r9sz+create_block_symbol_maps.._PHInstanceSymbolMapsNzu***WARNING - Attribute with name _PHInstanceSymbolMaps already exists on Block %s. This Attribute will be overwrittenzFailed to update _PHInstanceSymbolMaps attribute on Block %s. Expected to find object with type %s but existing object is of type %s.T)rsortr)rrScss|]\}}t||fVqdS)N)r6)r7symbolZcomponent_datar r r!r9s)Zis_constructed ValueErrorrCtuple TypeErrorgetattrrHrRtypedictappendr.rrZalphabetizeComponentAndIndexr0r; enumeraterlenrr/) Z owner_blockctypes recursiveZ update_newZ update_allZphinst_sm_dictZctypes_to_generatectypeZ block_listZctype_smr0Zcntrrr r r!create_block_symbol_mapsusT             rbc Csx|jddD]p}xj|jD]`}xZt|jD]L\}}|j|}|j|}||dkr,x"|D]\}} |jsZd|_d|_qZWq,WqWqWdS)Ngh㈵>T) _stages _tree_nodesrZ_variable_datasZ _minimumsZ _maximumsZfixedvaluestale) scenario_treescenario_instancesstage tree_node variable_idZ var_datasZ min_var_valueZ max_var_valueZvar_dataZ probabilityr r r!reset_nonconverged_variabless    rmcCsPxJ|jD]@}x:|jD]0}x*|jD] \}}|dkr d|_d|_q WqWqWdS)NFT)rdreZ_cost_variable_datasZis_expression_typerfrg)rhrirjrkZ cost_var_dataZscenario_probabilityr r r!reset_stage_cost_variabless    rncCsLxFt|jtddD]0\}}|drxt|D]}d|_d|_q0WqWdS)NT)rZ PHQUADPENALTY)r component_mapr startswithrrfrg)instance variable_namevariableZ var_valuer r r!reset_linearization_variabless  rtcCsv|dkr dSt|tr&dt|dSd}x>tdt|D],}|t||7}|t|dkr:|d7}q:W|d7}|S)NrG[]rrT,)r) _nontuplerDranger^)indexresultir r r! indexToStrings  r}cCsR|d}|d}|dkr(|dkr(dS|dks8|dkrJtd|dndSdS)NrurvrTTzIllegally formed variable name=zJ; if indexed, variable names must contain matching left and right bracketsF)countrV)rrZleft_bracket_countZright_bracket_countr r r!isVariableNameIndexed's  rc Cs|d}|d}|d}d}x\|D]T}|}|d}|d}d}y t|}Wntk rp|}YnX||f}q(Wt|dkr|dS|SdS)N(rArwr 'rTr)lstriprstripsplitstripintrVr^)Z index_stringpieces return_indexZpieceZtransformed_componentr r r!tupleizeIndexString7s"         rc Cst|std|d}|d}|dd}|dddd}|d}d }xT|D]L}|}|d d }d}y t|}Wntk r|}YnX||f}q\Wt|dkr||dfS||fSdS) NzJNon-indexed variable name passed to function extractVariableNameAndIndex()rurrTrvrrwrAr rrG)rrVrrrreplacerr^)rrrrCZ full_indexindicesrrzZtransformed_indexr r r!extractVariableNameAndIndexVs*         rcCsvt|tkr|f}t|tkr$|f}t|t|kr8dSx8tdt|D]&}||dkrZqH||||krHdSqHWdS)NFr*T)rZrWr^r)rzindex_templater|r r r!indexMatchesTemplates   rc Csl|}|dkr8|dkr2|dkr2td||jfdgS|dkrNdd|DSt|tkr`|f}|t|krtd|t||j|fddt|D}t|dkrt|St||krt|d kr|d|kr|S||kr|gStd t t||jfg}xd|D]\}|d kr|f}n|}d }x&|D]}||||kr,d }Pq,W|d kr| |qW|S) NrrGrz0Index template=%r specified for scalar object=%scSsg|]}|qSr r )r7Zndxr r r!rEsz+extractComponentIndices..zUThe dimension of index template=%s (%s) does match the dimension of component=%s (%s)cSsg|]\}}|dkr|qS)rr )r7r|Z match_strr r r!rEsrTz1The index %s is not valid for component named: %sTF) Zdim RuntimeErrorrCrZrWr^r]r:rVrDr\) componentrZcomponent_index_dimensionZiterator_ranger{rzZmodified_indexZ match_foundr|r r r!extractComponentIndicessV          rcCsx|jddD]}x,t|tD]\}}||kr$||q$Wx6t|tD]$\}}t|trR||krR||qRWx,t|tD]\}}||kr||qWx,t|t D]\}}||kr||qW|j t|j t|j t|j t qWdS)NT)r) rrrorZ del_componentrr)r rr Z_suppress_ctypesadd)rZconstraints_to_retainrconstraint_name constraint action_nameactionr r r!cull_constraints_from_instances$    rNc Cs|dk r|dk rtxt|jddD]b}x\|jD]R}xL|jD]B}|j|j}x0|jD]&}|dk rj|||<qT|||9<qTWq.z;More than one active objective was found on instance %s: %sr)rrr\r^rrC)rqZ safety_checksZobjective_dataZ objectivesnamesr r r!find_active_objectives"    rc CsDddlm} t|| } |s.|s.|s.|s.|s.dS|rt|ddd| rg} x"|jtdddD]} | | qZWt| dkrtd|j nt| dkr| | d|s|r|rt|dS|s|r| r| r||} x$| D]\}}| | ||qW|rt|dddn.|r@i}x"|D]}t|t|||d q"WdS) Nr)PersistentSolverTF)rr)rrrTz5Multiple active objectives identified for scenario=%s)idMap)/pyomo.solvers.plugins.solvers.persistent_solverrr)r"rrr\r^rr set_objectiveZ has_instanceZ update_varrrrY)Zscenario_instanceZinstance_variables_fixedZinstance_variables_freedZ"instance_user_constraints_modifiedZ instance_ph_constraints_modifiedZinstance_ph_constraintsZinstance_objective_modifiedZpreprocess_fixed_variablesr(rpersistent_solver_in_useactive_objective_datasactive_objective_dataZvariables_to_changevar_nameZ var_indexrrr r r!preprocess_scenario_instancesV       rcCs|ddlm}t||}|rxg}x"|jtdddD]}||q0Wt|dkr^td|jnt|dkrx| |ddS)Nr)rT)rrrTz3Multiple active objectives identified for bundle=%s) rrr)rrr\r^rrr)Zbundle_instancer(rrrrr r r!preprocess_bundle_instance!s     rcCsx|jD]}||qWdS)N)Z _ph_pluginsreset)phZ ph_pluginr r r!reset_ph_plugins6s r)TT)TFF)NN)F)4Z pyomo.corerrrrrrrr r r r r Zpyomo.repn.standard_repnrrrZ pyomo.optrrsixrrrZ six.movesrr"Z _OLD_OUTPUTr-objectr.rbrmrnrtrr*rxr}rrrrrrrrrrrrrr r r r! s:8   3 ^ 2%O AC X