B u `[¨ã@sddlZddlZddlZddlmZddlmZmZGdd„deej ƒZ Gdd„de ƒZ dd „Z d d „Zd d „Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Ze jd$ddfd%d&„Ze jd$ddfd'd(„Zd)d*„Zd+d,„Zd-d.„Z d/d0„Z!dS)1éN)ÚVar)Ú iteritemsÚ itervaluesc@s(eZdZdZdZdZdZdZdZdZ dS) ÚInvocationTypeÚSingleInvocationÚPerBundleInvocationÚPerBundleChainedInvocationÚPerScenarioInvocationÚPerScenarioChainedInvocationÚPerNodeInvocationÚPerNodeChainedInvocationN) Ú__name__Ú __module__Ú __qualname__rrrr r r r ©rrúB/tmp/pip-unpacked-wheel-n62dbgi3/pyomo/pysp/phsolverserverutils.pyrsrc@s`eZdZdZdZdZdZedd„ƒZedd„ƒZ ed d „ƒZ d Z d Z ed d„ƒZ edd„ƒZdS)Ú TransmitTypeéééécCs||j@|jkS)N)Ústale)ÚclsÚflagrrrÚ TransmitStale+szTransmitType.TransmitStalecCs||j@|jkS)N)Úfixed)rrrrrÚ TransmitFixed.szTransmitType.TransmitFixedcCs||j@|jkS)N)Úderived)rrrrrÚTransmitDerived1szTransmitType.TransmitDerivedéé0cCs||j@|jkS)N)Únonleaf_stages)rrrrrÚTransmitNonLeafStages9sz"TransmitType.TransmitNonLeafStagescCs||j@|jkS)N)Ú all_stages)rrrrrÚTransmitAllStages<szTransmitType.TransmitAllStagesN)r rrrrrZblendedÚ classmethodrrrr!r#r"r$rrrrr s    rcCsÀt ¡}|jrtdƒi}i}|j ¡xB|jjD]6}|jjd|j|j |j |d}|||j <|j ||<q2W|j  ¡|jr„tdƒd}x|t |jjƒkrš|j  ¡}y ||} Wnft k r||jkrî|j |¡td|jƒwŒn(tdd„|Dƒƒ} td |jt| ƒfƒ‚YnX|j |¡} |j | ¡rfxDt| ƒD] \} } |jj| }| | ¡q@Wn|jj| }| | ¡|jrtd | ƒ|d 7}qŒWt ¡}|jr¼td ||ƒdS) Nz)Collecting results from PH solver serversZcollect_results)ÚactionÚ queue_nameÚnameÚ var_configzWaiting for results extractionrzdWARNING: Discarding uncollected solve action handle with id=%d encountered during results collectioncss|] }|jVqdS)N)Úid)Ú.0Úahrrrú lsz'collect_full_results..z`PH client received an unknown action handle=%d from the dispatcher; known action handles are: %sz,Successfully loaded solution for subproblem=rz$Results collection time=%.2f seconds)ÚtimeÚ_verboseÚprintÚ_solver_managerÚ begin_bulkÚ_scenario_treeÚ subproblemsÚqueueÚ_phpyro_job_worker_mapr(Úend_bulkÚlenÚwait_anyÚKeyErrorÚ_queued_solve_action_handlesÚdiscardr*ÚsortedÚ RuntimeErrorÚstrÚ get_resultsZ is_bundlerÚ _scenario_mapZ set_solutionÚ _output_times)Úphr)Ú start_timeZsubproblem_action_handle_mapZaction_handle_subproblem_mapZsubproblem_to_solveÚnew_action_handleÚnum_results_so_farÚ action_handleZsubproblem_nameÚknown_action_handlesZsubproblem_resultÚ scenario_nameÚscenario_resultsÚscenarioÚend_timerrrÚcollect_full_results@sZ               rMcCst ¡}|jrtdƒi}i}|j ¡|j ¡r„x–|jjD]B}x<|jD]2}|jj d|j |j |j |d}|||<|||<qHWq.z`PH client received an unknown action handle=%d from the dispatcher; known action handles are: %sz+Successfully loaded warmstart for scenario=rz&Warmstart collection time=%.2f seconds) r.r/r0r1r2r3Úcontains_bundlesÚ_scenario_bundlesÚ_scenario_namesr5r6r(Ú _scenariosr7r8r9r:r;r<r*r=r>r?r@rAZ _instanceZ_PHInstanceSymbolMapsrZbySymbolrÚvaluerB)rCrDÚscenario_action_handle_mapÚaction_handle_scenario_mapÚbundlerIrErKrFrGrHrJZvar_sm_bySymbolÚsymbolÚvalrLrrrÚwarmstart_scenario_instances‹sj                 rXc Cst ¡}|jrtdƒg}|j}|j ¡|j ¡ržx¢|jjD]Z}i}x*|jj D]}|j }|jj |j ||j <qPW|  |jjd|j|j ||j |d¡q>Wn:x8|jj D],}|  |jjd|j|j ||j |j d¡q¨W|j ¡|rò|j |¡t ¡}|jrtd||ƒdS)Nz2Transmitting instance weights to PH solver serversZ load_weights)r&r'ÚgenerateResponser(Z new_weightsz%Weight transmission time=%.2f seconds)r.r/r0Ú_handshake_with_phpyror1r2r3rNrOrQr(rAÚ_wÚappendr5r6r7Úwait_allrB) rCrDÚaction_handlesÚgenerate_responsesrUZweights_to_transmitrKrIrLrrrÚtransmit_weightsßs>        r`c CsNt ¡}|jrtdƒg}|j}|j ¡|j ¡r¶xØ|jjD]r}i}xB|jj dd…D].}x(|j D]}|jj |j }|j ||j <qdWqXW| |jjd|j|j ||j |d¡q>WnXxV|jjD]J} i}tdd„| jdd…Dƒƒ}| |jjd|j| j || j |d¡qÀW|j ¡|r*|j |¡t ¡} |jrJtd| |ƒdS)Nz0Transmitting instance xbars to PH solver serverséÿÿÿÿZ load_xbars)r&r'rYr(Z new_xbarscss|]}|j|jfVqdS)N)r(Ú_xbars)r+Ú tree_noderrrr-Hsz!transmit_xbars..z#Xbar transmission time=%.2f seconds)r.r/r0rZr1r2r3rNrOÚ_stagesÚ _tree_nodesÚ_tree_node_mapr(rbr\r5r6rQÚdictÚ _node_listr7r]rB) rCrDr^r_rUZxbars_to_transmitÚstageÚbundle_tree_nodeÚprimary_tree_noderKrLrrrÚtransmit_xbarssF         rlcCsb|jjd|||jjj|jjj|j||j|j|j |j |j |j |j |j|j|j|j|j|jjd}|S)NZ initialize)r&r'r(Zmodel_locationZ data_locationZobjective_senseÚ object_nameZ solver_typeZ solver_ioZscenario_bundle_specificationZcreate_random_bundlesZscenario_tree_random_seedZ default_rhoZ!linearize_nonbinary_penalty_termsZretain_quadratic_binary_termsZbreakpoint_strategyZinteger_toleranceZoutput_solver_resultsÚverboseÚcompile_scenario_instances)r1r5r3Z_scenario_instance_factoryZ_model_filenameZ_scenario_tree_filenameZ_objective_sense_optionZ _solver_typeZ _solver_ioZ_scenario_bundle_specificationZ_create_random_bundlesZ_scenario_tree_random_seedÚ_rhoZ"_linearize_nonbinary_penalty_termsZ_retain_quadratic_binary_termsZ_breakpoint_strategyZ_integer_toleranceZ_output_solver_resultsr/Ú_optionsro)rCÚ worker_namermr,rrrÚ_transmit_init]s, rscCsf|jrtdƒ|j ¡x2t|jƒD]$\}}|jjd|j|||ddq$W|j ¡i|_i|_dS)Nz%Revoking PHPyroWorker job assignmentsÚreleaseF)r&r'r(rmrY) r/r0r1r2rr6r5r7Ú_phpyro_worker_jobs_map)rCZjobZworkerrrrÚrelease_phsolverservers|s   rvcCsît ¡}|jrtdƒt|jjƒdkr.tdƒ‚|j ¡rLdd„|jj Dƒ}ndd„|jj Dƒ}g}i|_ i|_ x\t  |jj¡D]J}t|ƒdkrP| ¡}| t|||ƒ¡|j  |g¡ |¡||j |<q~Wt ¡}|jrêtd||ƒ|S)Nzšsz0initialize_ph_solver_servers..cSsg|] }|j‘qSr)r()r+rKrrrrwœsz-Initialization transmission time=%.2f seconds)r.r/r0r8r1Z server_poolr>r3rNrOrQrur6Ú itertoolsÚcycleÚpopr\rsÚ setdefaultrB)rCrDZ worker_jobsr^rrZjob_namerLrrrÚinitialize_ph_solver_serverss.   r|c Cst ¡}|jrtdƒg}|j}|j ¡|j ¡ršx¨|jjD]V}i}x&|jj D]}|jj |j j ||j <qPW|  |jjd|j|j |j ||d¡q>WnDxB|jj D]6}|  |jjd|j|j |j ||j d¡|j ¡q¤W|rî|j |¡t ¡}|jrtd||ƒdS)Nz/Transmitting instance rhos to PH solver serversZ load_rhos)r&r'r(rYZnew_rhosz"Rho transmission time=%.2f seconds)r.r/r0rZr1r2r3rNrOrQrAr(rpr\r5r6r7r]rB)rCrDr^r_rUZrhos_to_transmitrKrLrrrÚ transmit_rhos¶s<        r}c Cszt ¡}|jrtdƒg}|j}|j ¡|j ¡rÈx|jjD]„}i}i}xN|jj dd…D]:}x4|j D]*}|jj |j } | j || j <| j|| j <qhWq\W| |jjd|j|j |j |||d¡q>Wnrxp|jjD]d} i}i}x.| jdd…D]} | j || j <| j|| j <qîW| |jjd|j| j | j |||d¡qÒW|j ¡|rV|j |¡t ¡} |jrvtd| |ƒdS)Nz6Transmitting tree node statistics to PH solver serversraZload_tree_node_stats)r&r'r(rYZnew_minsZnew_maxsz3Tree node statistics transmission time=%.2f seconds)r.r/r0rZr1r2r3rNrOrdrerfr(Ú _minimumsÚ _maximumsr\r5r6rQrhr7r]rB) rCrDr^r_rUZtree_node_minimumsZtree_node_maximumsrirjrkrKrcrLrrrÚtransmit_tree_node_statisticsôsT           r€c Csv|jrtdƒg}|j}|j ¡x4|jjD](}| |jjd|j |j ||j d¡q,W|j  ¡|rr|j  |¡dS)NzOTransmitting request to activate PH objective weight terms to PH solver serversÚ"activate_ph_objective_weight_terms)r&r'rYr() r/r0rZr1r2r3r4r\r5r6r(r7r])rCr^r_Ú subproblemrrrr@s    rc Csv|jrtdƒg}|j}|j ¡x>|jjD]2}| |jjd|j |j ||j d¡|j  ¡q,W|rr|j  |¡dS)NzQTransmitting request to deactivate PH objective weight terms to PH solver serversÚ$deactivate_ph_objective_weight_terms)r&r'rYr() r/r0rZr1r2r3r4r\r5r6r(r7r])rCr^r_r‚rrrrƒ]s    rƒc Csv|jrtdƒg}|j}|j ¡x4|jjD](}| |jjd|j |j ||j d¡q,W|j  ¡|rr|j  |¡dS)NzQTransmitting request to activate PH objective proximal terms to PH solver serversÚ$activate_ph_objective_proximal_terms)r&r'rYr() r/r0rZr1r2r3r4r\r5r6r(r7r])rCr^r_r‚rrrr„{s    r„c Csv|jrtdƒg}|j}|j ¡x4|jjD](}| |jjd|j |j ||j d¡q,W|j  ¡|rr|j  |¡dS)NzSTransmitting request to deactivate PH objective proximal terms to PH solver serversÚ&deactivate_ph_objective_proximal_terms)r&r'rYr() r/r0rZr1r2r3r4r\r5r6r(r7r])rCr^r_r‚rrrr…˜s    r…c Cs¼t ¡}|jrtdƒg}|j}|j ¡|j ¡rìx´|jjD]¨}d}x.|jj D]"}|jj |j }t |j ƒrPd}PqPW|rÒi}x*|jj D]}|jj |j }|j ||j <qˆW| |jjd|j|j |j ||d¡q>|jr>td|j ƒq>WnxŽ|jjD]‚} d}x"| jD]} t | j ƒrd}PqW|rdtdd„| jDƒƒ}| |jjd|j| j | j ||d¡qö|jrötd | j ƒqöW|j ¡|r˜|j |¡t ¡} |jr¸td | |ƒdS) Nz:Synchronizing fixed variable status with PH solver serversFTZupdate_fixed_variables)r&r'r(rYZfixed_variablesz+No synchronization was needed for bundle %scss|]}|j|jfVqdS)N)r(Ú _fix_queue)r+rcrrrr-îsz+transmit_fixed_variables..z-No synchronization was needed for scenario %sz0Fixed variable synchronization time=%.2f seconds)r.r/r0rZr1r2r3rNrOrerfr(r8r†r\r5r6rQrhrgr7r]rB) rCrDr^r_rUZtransmit_variablesrjrkZfixed_variables_to_transmitrKrcrLrrrÚtransmit_fixed_variables±sj              r‡Fc Cs |jrtd|ƒ|jp|}|j ¡r@||jjkrXtd|ƒ‚n||jjkrXtd|ƒ‚|jj d|j |||j |||||d } |r”|s”|j  | g¡|rœ| SdS)NzRTransmitting external function invocation request to PH solver server with name %sz,PH solver server with name %s does not existÚinvoke_external_function) r&r'r(Úinvocation_typerYÚ module_nameÚ function_nameÚ function_kwdsÚ function_args) r/r0rZr3rNZ_scenario_bundle_mapÚ ValueErrorrAr1r5r6rRr]) rCrrrŠr‹r‰Zreturn_action_handlerrŒZgenerate_responserGrrrÚ/transmit_external_function_invocation_to_workers.      rc Cst ¡}|jrtdƒg}|jp"|} |j ¡|j ¡r|x„|jjD]4} |  |jj d|j | j | j |j | ||||d ¡qBWnBx@|jjD]4} |  |jj d|j | j | j |j | ||||d ¡q†W|j ¡| rÜ|sÜ|j |¡t ¡} |jrútd| |ƒ|r|SdS)NzFTransmitting external function invocation request to PH solver serversrˆ) r&r'r(r‰rYrŠr‹rŒrzCExternal function invocation request transmission time=%.2f seconds)r.r/r0rZr1r2r3rNrOr\r5r6r(rRrQr7r]rB) rCrŠr‹r‰Zreturn_action_handlesrrŒrDr^r_rUrKrLrrrÚ%transmit_external_function_invocation.sN         rc Cs||jrtd|ƒg}|j}|j ¡x6|jjD]*}| |jjd|j |j ||j |d¡q0W|j  ¡|rx|j  |¡dS)Nz=Transmitting request to define suffix=%s to PH solver serversÚdefine_import_suffix)r&r'rYr(Ú suffix_name) r/r0rZr1r2r3r4r\r5r6r(r7r])rCr’r^r_r‚rrrr‘ss     r‘c Csz|jrtdƒg}|j}|j ¡x8|jjD],}| |jjd|j |j ||||j d¡q,W|j  ¡|rv|j  |¡dS)NzNTransmitting request to restore cached scenario solutions to PH solver serversÚ!restore_cached_scenario_solutions)r&r'Úcache_idÚ release_cacherYr() r/r0rZr1r2r3r4r\r5r6r(r7r])rCr”r•r^r_r‚rrrr“‘s     r“c Csx|jrtdƒg}|j}|j ¡x6|jjD]*}| |jjd|j |j |||j d¡q,W|j  ¡|rt|j  |¡dS)NzETransmitting request to cache scenario solutions to PH solver serversÚcache_scenario_solutions)r&r'r”rYr() r/r0rZr1r2r3r4r\r5r6r(r7r])rCr”r^r_r‚rrrr–°s    r–csèt ¡}|jrtdƒi}i}i}i}tdd„|jjDƒƒ‰tdd„|jjDƒƒ}|j ¡|j  ¡rx¨|jj D]œ}i} ‡fdd„|jjDƒ| d<dd„|j Dƒ| d <|jj d |j |j|j| d } | ||j<|j|| <x| dD] } d ˆ| <qäWx| d D] } d || <qþWqrWn¦x¤|jjD]˜} i} ‡fd d„| jDƒ| d<| jg| d <|jj d |j | j| j| d } | || j<| j|| <x| dD]} d ˆ| <q†Wx| d D]} d || <q¢WqW|j ¡tdd„tˆƒDƒƒsàt‚tdd„t|ƒDƒƒsüt‚tdd„|jjDƒƒ}tdd„|jjDƒƒ}|jr8tdƒ|j  ¡rúd}x`|t|jj ƒkrô|j ¡}||krŒ| |¡|j |¡qL|j |¡}||}xÌt|dƒD]¼\}}||d ksÈt‚d||<|j |¡}|j |d¡|j |d¡|j |d¡|j |d¡|j |d¡|j  |d¡t!|jƒ|j|_"tdd„t|jƒDƒƒ|_#q®Wxdt|d ƒD]T\} }|| d ks–t‚d|| <|j $| ¡} |d| _%|d| _&| j' |d¡q|W|jrètd|ƒ|d 7}qLWn²d}xª|t|jjƒkrª|j ¡}||krB| |¡|j |¡q|j |¡}||} xÌt|dƒD]¼\}}||d ks~t‚d||<|j |¡}|j |d¡|j |d¡|j |d¡|j |d¡|j |d¡|j  |d¡t!|jƒ|j|_"td!d„t|jƒDƒƒ|_#qdWxdt|d ƒD]T\} }|| d ksLt‚d|| <|j $| ¡} |d| _%|d| _&| j' |d¡q2W|jržtd"| ƒ|d 7}qWt|ƒsºt‚t|ƒsÈt‚xº|jjD]®}t (|jd¡|_)t (|jd¡|_*t (|jd¡|_+t (|jd#¡|_,t (|jd ¡|_-t (|jd¡|_.xF|jD]<} t (|jd¡| j/|j<| 0¡s>t (|jd#¡| j1|j<q>WqÒWt|ƒrÄ|jržtd$ƒ|j 2|¡xt|ƒrÂ| 3¡q¬Wt ¡}|j4rätd%||ƒdS)&Nz4Collecting scenario tree data from PH solver serverscss|]}|jdfVqdS)TN)r()r+rcrrrr-Ûsz,gather_scenario_tree_data..css|]}|jdfVqdS)TN)r()r+rKrrrr-Þscs(g|] }|jD]}ˆ|jr|j‘qqSr)rhr()r+rKrc)Úneed_node_datarrrwès z-gather_scenario_tree_data..ZnodescSsg|]}|‘qSrr)r+rIrrrrwísZ scenariosZcollect_scenario_tree_data)r&r'r(Ztree_object_namesFcsg|]}ˆ|jr|j‘qSr)r()r+rc)r—rrrwscss|] }| VqdS)Nr)r+rWrrrr-scss|] }| VqdS)Nr)r+rWrrrr-scss|]}|jdfVqdS)FN)r()r+rcrrrr-scss|]}|jdfVqdS)FN)r()r+rKrrrr-sz)Waiting for scenario tree data extractionrTÚ _variable_idsÚ_standard_variable_idsÚ_variable_indicesÚ_integerÚ_binaryÚ_semicontinuouscss|]\}}||fVqdS)Nr)r+ÚkeyrWrrrr-BsÚ_objective_nameÚ_objective_senserpz2Successfully loaded scenario tree data for bundle=rcss|]\}}||fVqdS)Nr)r+ržrWrrrr-rsz4Successfully loaded scenario tree data for scenario=gz3Waiting on remaining PHSolverServer initializationsz/Scenario tree data collection time=%.2f seconds)5r.r/r0rgr3rerQr1r2rNrOrPr5r6r(rhr7ÚallrÚAssertionErrorr8r9Úremover@rZget_noder˜Úupdater™ršr›rœrÚsetZ_derived_variable_idsZ_name_index_to_idZ get_scenariorŸr rpÚfromkeysr~rZ _averagesrbZ_blendZ_wbarsÚ_xZ is_leaf_noder[r]rzrB)rCZinitialization_action_handlesrDrSrTZbundle_action_handle_mapZaction_handle_bundle_mapZneed_scenario_datarUZ object_namesrEZ node_namerIrKZhave_node_dataZhave_scenario_datarFrGZbundle_resultsZ bundle_nameZtree_node_nameZ node_datarcZ scenario_datarJrLr)r—rÚgather_scenario_tree_dataÉs                                    "   r¨)"r.rxÚenumZ pyomo.corerÚsixrrr?ÚEnumrÚobjectrrMrXr`rlrsrvr|r}r€rrƒr„r…r‡rrrr‘r“r–r¨rrrrÚs@   KT??'>LZ $ >