B _<@s&ddlmZddgZddlZddlZddlZddlZddlmZm Z m Z ddl m Z ddl mZddlmZdd lmZmZdd lmZmZdd lmZmZdd lmZmZmZmZm Z dd l!m"Z"ddl#m$Z$m%Z%m&Z&ddl'm(Z(m)Z)m*Z*ddl+m,Z,ddl-m.Z.ddl/Z/ddl/m0Z0ddl/m1Z1m0Z0m2Z2ddl3m4Z4m5Z5ye6Wne7Z6YnXe8dZ9e/j:Z;ddlmZmZmZddl+m,Z,mZ?dOddZ@Gd d!d!e>ZAGd"d#d#e>ZBeAaCd$d%ZDd&d'ZEd(d)ZFd*d+ZGd,d-ZHd.d/ZId0d1ZJd2d3ZKd4d5ZLd6d7ZMd8d9ZNd:d;ZOdd?ZQd@dAZRejSeDejTeFejUeEejVeHejWeIejXeJejYeKejZeLej[eLej\eMej]ePej^eQej_eQej`eQejaeRe$eNeeGeeGeeGecCsH|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)r?r@r-r-r.rAszlinear coef: zquadratic vars: cSs g|]}|dj|djfqS)r)r>)r?r@r-r-r.rAszquadratic var ids: cSs$g|]}t|dt|dfqS)rrC)rB)r?r@r-r-r.rAszquadratic coef: znonlinear expr: None znonlinear expr: znonlinear vars: cSsg|] }|jqSr-)r>)r?r@r-r-r.rAs)r!writestrr0r2listr1r4r3r5Z to_stringAttributeErrorr6getvalueclose)r8outputZret_strr-r-r.__str__s. """"   " zStandardRepn.__str__cCs2t|jdkr.t|jdkr.t|jdkr.dSdS)NrTF)lenr2r6r4)r8r-r-r.rs*zStandardRepn.is_fixedcCs6|jdk rdSt|jdkr dSt|jdkr2dSdS)NrrC)r5rLr3r1)r8r-r-r.polynomial_degrees zStandardRepn.polynomial_degreecCs&|jdko$t|jdko$t|jdkS)Nr)r5rLr3r1)r8r-r-r.r(szStandardRepn.is_constantcCs|jdkot|jdkS)Nr)r5rLr3)r8r-r-r. is_linearszStandardRepn.is_linearcCst|jdko|jdkS)Nr)rLr3r5)r8r-r-r. is_quadraticszStandardRepn.is_quadraticcCs|jdkot|jdk S)Nr)r5rLr3)r8r-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-)r?ivr-r-r.rAsz.StandardRepn.to_expression..cSs t|dS)NrC)rE)xr-r-r.z,StandardRepn.to_expression..)keyg?ggcSsg|]\}}||fqSr-r-)r?rRrSr-r-r.rAscSs t|ddt|ddfS)NrCr)rE)rTr-r-r.rUrVrrCrM) r0 enumerater2sortedr1r'rr/r4rBr3r5) r8sortexprZlvarsrRrScZqvarsZtermr-r-r. to_expressionsB               zStandardRepn.to_expressionN)T)__name__ __module__ __qualname____doc__ __slots__r9r:r<rKrrNr(rOrPrQr]r-r-r-r.rTs   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)rCrCc3s|]}|VqdS)Nr-)r?rW)idMapr-r. Psz)generate_standard_repn..c3s|]}|VqdS)Nr-)r?rW)r1r-r.rdQsc3s|]}|VqdS)Nr-)r?rW)rcr-r.rddsc3s|]}|VqdS)Nr-)r?rW)r1r-r.rdeszUnexpected expression type: )rccompute_valuesverbose quadraticrepn)ResultsWithQuadraticsResultsResultsWithoutQuadraticsisclose_defaultr r/ setdefaultrr'ris_potentially_variableEXPRZevaluate_expressionr0is_variable_typefixedrr1r2LinearExpressionr#Zis_expression_typerBrLrFkeysr7 ValueErrorrE_generate_standard_repn) r[rcrerfrgrhZC_r\rScvalid_rWrsr-)rcr1r.rs                   c@s"eZdZdZdddZddZdS) ri)constnonllinearrgrNcCs||_||_i|_i|_dS)N)r0ryrzrg)r8r0ryrzrgr-r-r.r9szResultsWithQuadratics.__init__cCs(dt|jt|jt|jt|jfS)Nz0Const: %s Linear: %s Quadratic: %s Nonlinear: %s)rEr0rzrgry)r8r-r-r.rKszResultsWithQuadratics.__str__)rrNN)r^r_r`__slot__r9rKr-r-r-r.ris ric@s"eZdZdZdddZddZdS) rk)rxryrzrNcCs||_||_i|_dS)N)r0ryrz)r8r0ryrzr-r-r.r9sz!ResultsWithoutQuadratics.__init__cCs dt|jt|jt|jfS)Nz"Const: %s Linear: %s Nonlinear: %s)rEr0rzry)r8r-r-r.rKsz ResultsWithoutQuadratics.__str__)rrN)r^r_r`r{r9rKr-r-r-r.rks rkcCst}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)NrCr)rj itertoolsislice_args_nargsr'roMonomialTermExpressionrrrqr0rBrLrzrprn_collect_standard_repnryappendgetrg SumExpression)exp multiplierrcrerfrgansryZvarkeysZe_lhsrSrwrWZres_rRr-r-r. _collect_sumsp               $ (  rcCs|jdjtkrF|jddkr$tSt|jd||jd||||S|rt|jd}|dkrftSt|jd||||||St|jd||jd||||SdS)NrrC)r~r'rrjrr)rrrcrerfrgvalr-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 dksnx.t | j D]\} } || |j | j | <qLW| j jtkr| j dksxXt |j D]H\} } | | j kr| j | || | j 7<n|| | j | j | <qW|r|j jtkr|j dks2x.t | j D]\} } || |j | j | <qW| j jtkrL| j dksxXt |j D]H\} } | | j kr| j | || | j 7<n|| | j | j | <qZWxt |j D]z\}}xnt | j D]^\}}||kr||fn||f}|| j kr| j ||||7<n|||| j |<qWqW|tfddt |j D}|tfddt | j D}|tfddt |j D}|tfddt | j D}| j||||7_| S) NrrC)ryc3s|]\}}||VqdS)Nr-)r?rWcoef)rcr-r.rdsz _collect_prod..c3s|]\}}||VqdS)Nr-)r?rWr)rcr-r.rdsc3s.|]&\}}||d|dVqdS)rrCNr-)r?rWr)rcr-r.rdsc3s.|]&\}}||d|dVqdS)rrCNr-)r?rWr)rcr-r.rds)r~r'rrjrrnrryrLrzrgr0sixrsum)rrrcrerfrgrrZ lhs_nonl_NonerhsZ rhs_nonl_NonerrWrZlkeyZlcoefZrkeyZrcoefZndxZ el_linearZ er_linearZ el_quadraticZ er_quadraticr-)rcr. _collect_prods        ,     F &   """"rc Cst}|jr<|r(|j|t|7_q|j||7_nLt|}||dkr^|d|}n t|d}||d|<|||<||j|<|S)NrC)rjrqr0rrBrLrz) rrrcrerfrgrrwrWr-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)ryrCr)r0)Z_ifr'rrnrrjrryrLrzrgr0Z_thenZ_else)rrrcrerfrgZif_valrr-r-r._collect_branching_expr1s&   6  rcCst|jdd||||}|jjtkrN|jdkrNt|jdksN|r\t|jdkr\t||dS|rxt|| |j gdSt||dSdS)NrrC)ry)r0) rr~ryr'rrLrzrgrjZ_apply_operationr0)rrrcrerfrgrr-r-r. _collect_nonlJs 6rcCst|jdd|||||S)Nr)rr~)rrrcrerfrgr-r-r._collect_negationSsrcCs(|rt|t|dSt||dSdS)N)r0)rjr)rrrcrerfrgr-r-r._collect_constYsrcCsv|jdjtkr$t||jddS|jdsb|rNt|t|jddSt||jddSt|j|||||S)Nr)r0)r~r'rrjrnrrr[)rrrcrerfrgr-r-r._collect_identity_src 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)NrC) rjrr0r#r1r2rqrBrLrz) rrrcrerfrgrr\rSrwrWr-r-r._collect_linearis.       rcCst||dS)N)ry)rj)rrrcrerfrgr-r-r._collect_comparisonsrcCs,|r|rt|t|dSt||dS)N)r0)ry)rrjr)rrrcrerfrgr-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_collectorsrr'rrrprZis_named_expression_typerrGrttyper^)rrrcrerfrgfnr-r-r.rs"   rc 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)NrCrF)Z include_fixed)r'rorrrr0rzrr(rrr7r2r1r4r3rgryr/r5r6Zidentify_variablesrBrL) r[rcrerfrgrhrrSr\rWrr@rwr-r-r.rusj                     ruc 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)rcrCz pyomo.corezCexception generating a standard representation for objective %s: %s)hasattrrrZcomponent_data_objectsrr[rtr>r Exceptionsysexc_infologging getLoggererrorrE)blockrc block_repnZobjective_datarherrr-r-r.preprocess_block_objectives}s$      rcCsFt|dst|_|j}x(|jtdddD]}t||||dq*WdS)NrTF)rr)rcr)rrrZcomponent_objectsrpreprocess_constraint)rrcr 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|||<qrrrrrrrrE) rrrcrrindexconstraint_datarhrr-r-r.rs.        rc Cst|dst|_|j}|jdkr0td|jyt|j|d}Wn@tk rt d}t d d|jt |fYnX|||<dS)NrzrrrrrrrrE)rrrcrrhrr-r-r.preprocess_constraint_datas"      r)r%r&)NTFTN)NTFTN)N)N)NN)NN)i __future__r__all__rrmathr|Zpyomo.core.baserrrZ pyutilib.miscrZpyutilib.math.utilr rlZpyomo.core.exprr roZpyomo.core.base.objectiver r r rZpyomo.core.base.expressionrrZpyomo.core.base.varrrrrrZpyomo.core.base.paramrZpyomo.core.base.numvaluerrrZpyomo.core.kernel.expressionrrrZpyomo.core.kernel.variablerZpyomo.core.kernel.objectiverrrr r!Z six.movesr"r# basestringrErloggerPY3Z using_py3r$r/objectrrrirkrjrrrrrrrrrrrrrrrrZProductExpressionrZ PowExpressionZDivisionExpressionZReciprocalExpressionZExpr_ifExpressionZUnaryFunctionExpressionZ AbsExpressionZNegationExpressionrrZInequalityExpressionZRangedExpressionZEqualityExpressionZExternalFunctionExpressionrrrurrrrr-r-r-r. s           +  K_  ! *   $