B @`@sxddlZddlmZmZmZmZmZmZmZm Z ddl m Z m Z ddl mZedZejdddGd d d eZdS) N)TransformationFactoryTransformationBlockVarListSetSortComponents Objective Constraint)Disjunct Disjunction)generate_standard_repnz pyomo.gdpz gdp.bilinearz[Creates a disjunctive model where bilinear terms are replaced with disjunctive expressions.)doccs<eZdZfddZddZddZddZd d ZZS) Bilinear_Transformationcstt|dS)N)superr__init__)self) __class__>/tmp/pip-unpacked-wheel-bi3529v6/pyomo/gdp/plugins/bilinear.pyrsz Bilinear_Transformation.__init__c stdddkrlt_ij_tj_gj_tj_t jjddgj_ ij_ ij_ ij_ x$jdtjdD]}||q~Wfdd}tjj|dj_dS) Nbilinear_data_rT)activesortcs jj|S)N)rdisjunction_data)blocki)instancerrrule/sz/Bilinear_Transformation._apply_to..rule)r)getattrrrcachervlist vlist_booleanrIDXr disjuncts_ro_exprc_bodyZblock_data_objectsrZ deterministic_transformBlockr Z disjunction_)rrkwdsrrr)rr _apply_tos   z!Bilinear_Transformation._apply_tocCsx>|jtdddD]*}||j|}|j|jjt|<||_qWx>|jtdddD]*}||j |}|j |jj t|<||_ qRWdS)NTF)rZ descend_into) Zcomponent_objectsr_transformExpressionexprrr$idZcomponent_data_objectsr bodyr%_body)rrr componentr*rrrr&3s z'Bilinear_Transformation._transformBlockcCs4|dkrtd|dkr$|S|||}|S)Nz1Cannot transform polynomial terms with degree > 2)Zpolynomial_degree ValueError_replace_bilinear)rr*rrrrr)=s    z,Bilinear_Transformation._transformExpressioncCsji}t||d}|j}x&t|j|jD]\}}|||7}q&Wt|jdkrfxt|j|jD]\}} |dr|j j t |dt |dfd} | dkr|j j |d|j j} | |j j t |dt |df<|dj} | | d| | dt|j j} |j j| |j j| df} t|ddkd| _t| |dkd| _|j j| df}t|ddkd|_t| dkd|_|j j| df|j j| dfg|j j| <|j j| df|j j| dfg|j j| <|| | 7}q`|drJ|j j t |dt |dfd} | dkr<|j j |d|j j} | |j j t |dt |df<|dj} | | d| | dt|j j} |j j| |j j| df} t|ddkd| _t| |dkd| _|j j| df}t|ddkd|_t| dkd|_|j j| df|j j| dfg|j j| <|| | 7}q`|| |d|d7}q`W|S)N)idMaprr)r*)r ZconstantzipZ linear_varsZ linear_coefslenZquadratic_coefsZquadratic_varsZ is_binaryrrgetr+r!appendr addboundsZsetlbZsetubr"r#r Zc1c2r)rr*rr2ZtermsevarZcoefZvars_Zcoef_vr8Zid_Zd0d1rrrr1Fs` $     (($     (z)Bilinear_Transformation._replace_bilinear) __name__ __module__ __qualname__rr(r&r)r1 __classcell__rr)rrrs    r)loggingZ pyomo.corerrrrrrrr Z pyomo.gdpr r Z pyomo.repnr getLoggerloggerregisterrrrrr s (