B @`<@sddlmZddgZddlZddlZddlZddlmZmZm Z ddl m Z ddl mZddlmZmZdd lmZmZdd lmZmZdd lmZmZmZmZdd lmZmZdd l m!Z!m"Z"ddl#m$Z$m%Z%ddl&m'Z'ddl(m)Z)m*Z*m+Z+ddl,m-Z-ye.Wne/Z.YnXe0dZ1e+Z2dIddZ3e a Gddde4Z5dJddZ6Gddde4Z7Gddde4Z8e7a9dd Z:d!d"Z;d#d$Zd)d*Z?d+d,Z@d-d.ZAd/d0ZBd1d2ZCd3d4ZDd5d6ZEd7d8ZFd9d:ZGd;d<ZHejIe:ejJeejMe?ejNe@ejOeAejPeBejQeBejReCejSeFejTeGejUeGejVeGejWeHeeDee=ee=ee=e%e=e$e=eeEeeEe!eEe"eEeeEeeEeeEeeEe'eEiZXd=d>ZYdKd?d@ZZdLdAdBZ[dMdCdDZ\dNdEdFZ]dOdGdHZ^dS)P)division StandardRepngenerate_standard_repnN) Constraint Objective ComponentMap)isclose)current)_GeneralObjectiveDataSimpleObjective)_ExpressionData Expression)SimpleExpression_GeneralExpressionData) SimpleVarVar_GeneralVarDatavalue)NumericConstantnative_numeric_types) expressionnoclone) IVariablevariable) objective) iteritemsStringIOPY3)zipz pyomo.core& .>cCsH|jtkr |rt|}ndSt||t|tt|t||kS)NF) __class__r is_constantrabsmax)abZrel_tolZabs_tolr'sz(StandardRepn.__str__..zlinear var ids: cSsg|] }t|qSr')id)r9r:r'r'r(r;szlinear coef: zquadratic vars: cSs g|]}|dj|djfqS)r)r8)r9r:r'r'r(r;szquadratic var ids: cSs$g|]}t|dt|dfqS)rr=)r<)r9r:r'r'r(r;szquadratic coef: znonlinear expr: None znonlinear expr: znonlinear vars: cSsg|] }|jqSr')r8)r9r:r'r'r(r;s)rwritestrr*r,listr+r.r-r/Z to_stringAttributeErrorr0getvalueclose)r2outputZret_strr'r'r(__str__s. """"   " zStandardRepn.__str__cCs2t|jdkr.t|jdkr.t|jdkr.dSdS)NrTF)lenr,r0r.)r2r'r'r(is_fixeds*zStandardRepn.is_fixedcCs6|jdk rdSt|jdkr dSt|jdkr2dSdS)Nrr=)r/rFr-r+)r2r'r'r(polynomial_degrees zStandardRepn.polynomial_degreecCs&|jdko$t|jdko$t|jdkS)Nr)r/rFr-r+)r2r'r'r(r"szStandardRepn.is_constantcCs|jdkot|jdkS)Nr)r/rFr-)r2r'r'r( is_linearszStandardRepn.is_linearcCst|jdko|jdkS)Nr)rFr-r/)r2r'r'r( is_quadraticszStandardRepn.is_quadraticcCs|jdkot|jdk S)Nr)r/rFr-)r2r'r'r( is_nonlinearszStandardRepn.is_nonlinearTc Cs|j}ddt|jD}|r.t|ddd}x~|D]v\}}|j|}|jtkrt|drd||7}qt|drx||8}q|dkr|| |8}q|||7}q4|||7}q4Wd dt|jD}|rt|d dd}x|D]\}}t |d t |d kr |d d }n|d |d }|j |}|jtkrlt|drH||7}n"t|dr^||8}n |||7}q|||7}qW|j dk r||j 7}|S)NcSsg|]\}}||fqSr'r')r9ivr'r'r(r;sz.StandardRepn.to_expression..cSs t|dS)Nr=)r?)xr'r'r(z,StandardRepn.to_expression..)keyg?ggcSsg|]\}}||fqSr'r')r9rMrNr'r'r(r;scSs t|ddt|ddfS)Nr=r)r?)rOr'r'r(rPrQrr=rH) r* enumerater,sortedr+r!rr)r.r<r-r/) r2sortexprZlvarsrMrNcZqvarsZtermr'r'r( to_expressionsB               zStandardRepn.to_expressionN)T)__name__ __module__ __qualname____doc__ __slots__r3r4r6rErGrIr"rJrKrLrXr'r'r'r(rKs   TFc s|r tanta|rtantadkr(idi|dkrBt}|jt ksT| sp|rft ||_ n||_ |S|r|jr|rt||_ n||_ |Sd|_|f|_|S|jt jkr|rt |j }n|j }|rixt|j|jD]\}}|jt kr|} n|rt |} nt|} |jr:|| |j7}qt|} | dkrrtd} | d| <|| <n d| } | kr| | 7<q| | <qWt} tfdd| D|_tfdd| D|_nixt|j|jD]\}}|jr|||7}nht|} | dkrNtd} | d| <|| <n d| } | krv| |7<n|| <qWt} tfdd| D|_tfdd| D|_||_ |S|stdt|t|||||d S) N)r=r=c3s|]}|VqdS)Nr')r9rR)idMapr'r( Gsz)generate_standard_repn..c3s|]}|VqdS)Nr')r9rR)r+r'r(r_Hsc3s|]}|VqdS)Nr')r9rR)r^r'r(r_[sc3s|]}|VqdS)Nr')r9rR)r+r'r(r_\szUnexpected expression type: )r^compute_valuesverbose quadraticrepn)ResultsWithQuadraticsResultsResultsWithoutQuadraticsisclose_defaultrr) setdefaultrr!ris_potentially_variableEXPRZevaluate_expressionr*is_variable_typefixedrr+r,LinearExpressionrZis_expression_typer<rFr@keysr1 ValueErrorr?_generate_standard_repn) rVr^r`rarbrcZC_rWrNcvalid_rRrnr')r^r+r(rs                   c@s"eZdZdZdddZddZdS) rd)constnonllinearrbrNcCs||_||_i|_i|_dS)N)r*rtrurb)r2r*rtrurbr'r'r(r3szResultsWithQuadratics.__init__cCs(dt|jt|jt|jt|jfS)Nz0Const: %s Linear: %s Quadratic: %s Nonlinear: %s)r?r*rurbrt)r2r'r'r(rEszResultsWithQuadratics.__str__)rrNN)rYrZr[__slot__r3rEr'r'r'r(rds rdc@s"eZdZdZdddZddZdS) rf)rsrtrurNcCs||_||_i|_dS)N)r*rtru)r2r*rtrur'r'r(r3sz!ResultsWithoutQuadratics.__init__cCs dt|jt|jt|jfS)Nz"Const: %s Linear: %s Nonlinear: %s)r?r*rurt)r2r'r'r(rEsz ResultsWithoutQuadratics.__str__)rrN)rYrZr[rvr3rEr'r'r'r(rfs rfcCst}g}|d}xt|j|D]} | jtjkr| j\} } |r\| jtkr\t | } | j r|r|j || t | 7_ n|j || | 7_ nft | } | |kr|| } nt |d} | || <| || <| |jkr|j| || 7<n|| |j| <q(| jtkr"|j || 7_ q(| r| j rd|rP|j || j 7_ n|j || 7_ nbt | } | |kr|| } nt |d} | || <| || <| |jkr|j| |7<n ||j| <q(| s|r|j |t | 7_ n|j || 7_ q(t| |||||}|j |j 7_ |jjtkr@|jdksL||jx.|jD]$}|j|d|j||j|<qTW|r(x.|jD]$}|j|d|j||j|<qWq(Wt |dkrt |dkr|d|_n t||_|S)Nr=r)re itertoolsislice_args_nargsr!rjMonomialTermExpressionrrrlr*r<rFrurkri_collect_standard_repnrtappendgetrb SumExpression)exp multiplierr^r`rarbansrtZvarkeysZe_lhsrNrrrRZres_rMr'r'r( _collect_sumsp               $ (  rcCs|jdjtkrF|jddkr$tSt|jd||jd||||S|rt|jd}|dkrftSt|jd||||||St|jd||jd||||SdS)Nrr=)ryr!rrer|r)rrr^r`rarbvalr'r'r( _collect_terms  rcs|jdjtkrF|jddkr$tSt|jd||jd|||S|jdjtkr|jddkrjtSt|jd||jd|||S|jds|rt|jd}|dkrtSt|jd|||||St|jd||jd|||Snr|jdsl|rJt|jd}|dkr.tSt|jd|||||St|jd||jd|||St|jdd|||}|jjtko|jdk}|rBt|j dkrB|rt|j dkrB|j jtkr|j dkrtS|r$t|j }|dkrtSt|jd|||||St|jd||j |||St|jdd|||} | jjtkop| jdk} | rt| j dkr|rt| j dkr| j jtkr| j dkrtS|r| st||dS|s t|j dkr t| j dkr t||dSt} ||j | j | _ |j jtkr>|j dkslx,t | j D]\} } || |j | j | <qJW| j jtkr| j dksxVt |j D]H\} } | | j kr| j | || | j 7<n|| | j | j | <qW|r|j jtkr|j dks,x,t | j D]\} } || |j | j | <q W| j jtkrF| j dksxVt |j D]H\} } | | j kr| j | || | j 7<n|| | j | j | <qRWxt |j D]x\}}xlt | j D]^\}}||kr||fn||f}|| j kr| j ||||7<n|||| j |<qWqW|t fddt |j D}|t fddt | j D}|t fddt |j D}|t fddt | j D}| j||||7_| S) Nrr=)rtc3s|]\}}||VqdS)Nr')r9rRcoef)r^r'r(r_sz _collect_prod..c3s|]\}}||VqdS)Nr')r9rRr)r^r'r(r_sc3s.|]&\}}||d|dVqdS)rr=Nr')r9rRr)r^r'r(r_sc3s.|]&\}}||d|dVqdS)rr=Nr')r9rRr)r^r'r(r_s)ryr!rrer|rirrtrFrurbr*rsum)rrr^r`rarbrrZ lhs_nonl_NonerhsZ rhs_nonl_NonerrRrZlkeyZlcoefZrkeyZrcoefZndxZ el_linearZ er_linearZ el_quadraticZ er_quadraticr')r^r( _collect_prod s        ,     F &       rc Cst}|jr<|r(|j|t|7_q|j||7_nLt|}||dkr^|d|}n t|d}||d|<|||<||j|<|S)Nr=)rerlr*rr<rFru) rrr^r`rarbrrrrRr'r'r( _collect_vars    rcCs|jdjtkr|jd}n|jdsJ|r>t|jd}q|jd}nbt|jdd||||}|jjtkr|jdkrt|jdks|rt|j dkrt ||dS|j }|jtkrP|dkrt |dS|dkrt|jd|||||S|dkrP|rPt|jdd||||}|jjtkr<|jdkr|r.t|j}qt||dSnzt|jd||||}|jjtkr|jdkrt|j dks|rt|j dkrt||dS|j jtkr|j }nt||dS|r|j jtkrt||j dSt|j |||||S|j jtkr t||j dSt|j |||||SdS)N)rtr=r)r*)Z_ifr!rrirrer|rtrFrurbr*Z_thenZ_else)rrr^r`rarbZif_valrr'r'r(_collect_branching_expr(s&   6  rcCst|jdd||||}|jjtkrN|jdkrNt|jdksN|r\t|jdkr\t||dS|rxt|| |j gdSt||dSdS)Nrr=)rt)r*) r|ryrtr!rrFrurbreZ_apply_operationr*)rrr^r`rarbrr'r'r( _collect_nonlAs 6rcCst|jdd|||||S)Nr)r|ry)rrr^r`rarbr'r'r(_collect_negationJsrcCs(|rt|t|dSt||dSdS)N)r*)rer)rrr^r`rarbr'r'r(_collect_constPsrcCsv|jdjtkr$t||jddS|jdsb|rNt|t|jddSt||jddSt|j|||||S)Nr)r*)ryr!rrerirr|rV)rrr^r`rarbr'r'r(_collect_identityVsrc Cs@t}|r|t|j|_n ||j|_xt|j|jD]\}}|jr|rl|j|t|t|7_n|j|||7_q:t|} | |dkr|d| } n t|d} | |d| <||| <|r| |j kr|j | |t|7<n|t||j | <q:| |j kr*|j | ||7<q:|||j | <q:W|S)Nr=) rerr*rr+r,rlr<rFru) rrr^r`rarbrrWrNrrrRr'r'r(_collect_linear`s.       rcCst||dS)N)rt)re)rrr^r`rarbr'r'r(_collect_comparisonsrcCs,|r|rt|t|dSt||dS)N)r*)rt)rGrer)rrr^r`rarbr'r'r(_collect_external_fns rcCst|jd}|dk r(|||||||S|jtkrDt||||||Sy|rRt}|r^t}Wnt k rtYnX|dk r|t|j<|||||||St dt |j dS)NzUnexpected expression (type %s)) _repn_collectorsr~r!rrrkrZis_named_expression_typerrArotyperY)rrr^r`rarbfnr'r'r(r|s"   r|c CsZ|jtjkr t|d||||}nt|d||||}|j|_g}g}xb|jD]X} |j| } | jtkrn| dkrqJn| rt | dkrqJ| || | |j| qJWt ||_ t ||_ |rg|_g|_xt|jD]j} |j| } | jtkr| dkrqn| rt | dkrq|j || d|| df|j | qWt |j|_t |j|_g}g}x>|jD]4} | || d|| df| |j| qjWt ||_t ||_|jdk rVt|jdsV|j|_g|_xjtj|jddD]V} |j | t| } | |dkr$|d| } n t|d} | |d| <| || <qWt |j|_|S)Nr=rF)Z include_fixed)r!rjrrr|r*rurr"rr}r1r,r+r.r-rbrtr)r/r0Zidentify_variablesr<rF) rVr^r`rarbrcrrNrWrRrr:rrr'r'r(rpsj                     rpc Cst|dst|_|j}x|jtdddD]x}|jdkrFtd|jyt|j|d}Wn@t k rt d}t dd |jt|fYnX|||<q*WdS) N_repnTF)active descend_intoz/No expression has been defined for objective %s)r^r=z pyomo.corezCexception generating a standard representation for objective %s: %s)hasattrrrZcomponent_data_objectsrrVror8r Exceptionsysexc_infologging getLoggererrorr?)blockr^ block_repnZobjective_datarcerrr'r'r(preprocess_block_objectivests$      rcCsFt|dst|_|j}x(|jtdddD]}t||||dq*WdS)NrTF)rr)r^r)rrrZcomponent_objectsrpreprocess_constraint)rr^r constraintr'r'r(preprocess_block_constraintss  rc Csddlm}t||rdSt|ds,t|_|j}xt|D]\}}|jsLq<|jdkrdt d|j yt |j|d}Wn@t k rt d}tdd|j t|fYnX|||<q s        +  K_  ! *   $