@@ -5125,7 +5125,7 @@ <h2 id="spotpython.utils.parallel.evaluate_row" class="doc doc-heading">
51255125 < div class ="highlight "> < pre > < span > </ span > < code > < span class ="gp "> >>> </ span > < span class ="kn "> from</ span > < span class ="nn "> spotpython.utils.parallel</ span > < span class ="kn "> import</ span > < span class ="n "> evaluate_row</ span >
51265126< span class ="gp "> >>> </ span > < span class ="kn "> import</ span > < span class ="nn "> numpy</ span > < span class ="k "> as</ span > < span class ="nn "> np</ span >
51275127< span class ="gp "> >>> </ span > < span class ="k "> def</ span > < span class ="nf "> sample_objective</ span > < span class ="p "> (</ span > < span class ="n "> row</ span > < span class ="p "> ,</ span > < span class ="n "> control</ span > < span class ="p "> ):</ span >
5128- < span class ="gp "> ... </ span > < span class ="k "> return</ span > < span class ="nb " > sum </ span > < span class =" p " > ( </ span > < span class =" n "> row</ span > < span class =" p " > ) </ span > < span class ="o "> +</ span > < span class ="n "> control</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s1 "> 'offset'</ span > < span class ="p "> ,</ span > < span class ="mi "> 0</ span > < span class ="p "> )</ span >
5128+ < span class ="gp "> ... </ span > < span class ="k "> return</ span > < span class ="n "> row</ span > < span class ="o "> +</ span > < span class ="n "> control</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s1 "> 'offset'</ span > < span class ="p "> ,</ span > < span class ="mi "> 0</ span > < span class ="p "> )</ span >
51295129< span class ="gp "> >>> </ span > < span class ="n "> row</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 2</ span > < span class ="p "> ,</ span > < span class ="mi "> 3</ span > < span class ="p "> ]</ span >
51305130< span class ="gp "> >>> </ span > < span class ="n "> fun_control</ span > < span class ="o "> =</ span > < span class ="p "> {</ span > < span class ="s1 "> 'offset'</ span > < span class ="p "> :</ span > < span class ="mi "> 10</ span > < span class ="p "> }</ span >
51315131< span class ="gp "> >>> </ span > < span class ="n "> evaluate_row</ span > < span class ="p "> (</ span > < span class ="n "> row</ span > < span class ="p "> ,</ span > < span class ="n "> sample_objective</ span > < span class ="p "> ,</ span > < span class ="n "> fun_control</ span > < span class ="p "> )</ span >
@@ -5134,8 +5134,7 @@ <h2 id="spotpython.utils.parallel.evaluate_row" class="doc doc-heading">
51345134
51355135 < details class ="quote ">
51365136 < summary > Source code in < code > spotpython/utils/parallel.py</ code > </ summary >
5137- < div class ="highlight "> < table class ="highlighttable "> < tr > < td class ="linenos "> < div class ="linenodiv "> < pre > < span > </ span > < span class ="normal "> 7</ span >
5138- < span class ="normal "> 8</ span >
5137+ < div class ="highlight "> < table class ="highlighttable "> < tr > < td class ="linenos "> < div class ="linenodiv "> < pre > < span > </ span > < span class ="normal "> 8</ span >
51395138< span class ="normal "> 9</ span >
51405139< span class ="normal "> 10</ span >
51415140< span class ="normal "> 11</ span >
@@ -5157,7 +5156,12 @@ <h2 id="spotpython.utils.parallel.evaluate_row" class="doc doc-heading">
51575156< span class ="normal "> 27</ span >
51585157< span class ="normal "> 28</ span >
51595158< span class ="normal "> 29</ span >
5160- < span class ="normal "> 30</ span > </ pre > </ div > </ td > < td class ="code "> < div > < pre > < span > </ span > < code > < span class ="k "> def</ span > < span class ="nf "> evaluate_row</ span > < span class ="p "> (</ span > < span class ="n "> row</ span > < span class ="p "> :</ span > < span class ="n "> Union</ span > < span class ="p "> [</ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> ndarray</ span > < span class ="p "> ,</ span > < span class ="nb "> list</ span > < span class ="p "> ],</ span > < span class ="n "> objective_function</ span > < span class ="p "> :</ span > < span class ="n "> Callable</ span > < span class ="p "> [[</ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> ndarray</ span > < span class ="p "> ,</ span > < span class ="n "> Any</ span > < span class ="p "> ],</ span > < span class ="n "> Any</ span > < span class ="p "> ],</ span > < span class ="n "> fun_control</ span > < span class ="p "> :</ span > < span class ="n "> Any</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="n "> Any</ span > < span class ="p "> :</ span >
5159+ < span class ="normal "> 30</ span >
5160+ < span class ="normal "> 31</ span >
5161+ < span class ="normal "> 32</ span >
5162+ < span class ="normal "> 33</ span >
5163+ < span class ="normal "> 34</ span >
5164+ < span class ="normal "> 35</ span > </ pre > </ div > </ td > < td class ="code "> < div > < pre > < span > </ span > < code > < span class ="k "> def</ span > < span class ="nf "> evaluate_row</ span > < span class ="p "> (</ span > < span class ="n "> row</ span > < span class ="p "> :</ span > < span class ="n "> Union</ span > < span class ="p "> [</ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> ndarray</ span > < span class ="p "> ,</ span > < span class ="nb "> list</ span > < span class ="p "> ],</ span > < span class ="n "> objective_function</ span > < span class ="p "> :</ span > < span class ="n "> Callable</ span > < span class ="p "> [[</ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> ndarray</ span > < span class ="p "> ,</ span > < span class ="n "> Any</ span > < span class ="p "> ],</ span > < span class ="n "> Any</ span > < span class ="p "> ],</ span > < span class ="n "> fun_control</ span > < span class ="p "> :</ span > < span class ="n "> Any</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="n "> Any</ span > < span class ="p "> :</ span >
51615165< span class ="w "> </ span > < span class ="sd "> """</ span >
51625166< span class ="sd "> Evaluates a single row using the provided objective function.</ span >
51635167
@@ -5174,12 +5178,16 @@ <h2 id="spotpython.utils.parallel.evaluate_row" class="doc doc-heading">
51745178< span class ="sd "> >>> from spotpython.utils.parallel import evaluate_row</ span >
51755179< span class ="sd "> >>> import numpy as np</ span >
51765180< span class ="sd "> >>> def sample_objective(row, control):</ span >
5177- < span class ="sd "> ... return sum( row) + control.get('offset', 0)</ span >
5181+ < span class ="sd "> ... return row + control.get('offset', 0)</ span >
51785182< span class ="sd "> >>> row = [1, 2, 3]</ span >
51795183< span class ="sd "> >>> fun_control = {'offset': 10}</ span >
51805184< span class ="sd "> >>> evaluate_row(row, sample_objective, fun_control)</ span >
51815185< span class ="sd "> array([11, 12, 13])</ span >
51825186< span class ="sd "> """</ span >
5187+ < span class ="k "> if</ span > < span class ="n "> fun_control</ span > < span class ="ow "> is</ span > < span class ="ow "> not</ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
5188+ < span class ="k "> if</ span > < span class ="s2 "> "seed"</ span > < span class ="ow "> in</ span > < span class ="n "> fun_control</ span > < span class ="p "> :</ span >
5189+ < span class ="n "> seed</ span > < span class ="o "> =</ span > < span class ="n "> fun_control</ span > < span class ="p "> [</ span > < span class ="s2 "> "seed"</ span > < span class ="p "> ]</ span >
5190+ < span class ="n "> set_all_seeds</ span > < span class ="p "> (</ span > < span class ="n "> seed</ span > < span class ="p "> )</ span >
51835191 < span class ="k "> return</ span > < span class ="n "> objective_function</ span > < span class ="p "> (</ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> array</ span > < span class ="p "> ([</ span > < span class ="n "> row</ span > < span class ="p "> ]),</ span > < span class ="n "> fun_control</ span > < span class ="p "> )</ span >
51845192</ code > </ pre > </ div > </ td > </ tr > </ table > </ div >
51855193 </ details >
@@ -5307,10 +5315,7 @@ <h2 id="spotpython.utils.parallel.make_parallel" class="doc doc-heading">
53075315
53085316 < details class ="quote ">
53095317 < summary > Source code in < code > spotpython/utils/parallel.py</ code > </ summary >
5310- < div class ="highlight "> < table class ="highlighttable "> < tr > < td class ="linenos "> < div class ="linenodiv "> < pre > < span > </ span > < span class ="normal "> 75</ span >
5311- < span class ="normal "> 76</ span >
5312- < span class ="normal "> 77</ span >
5313- < span class ="normal "> 78</ span >
5318+ < div class ="highlight "> < table class ="highlighttable "> < tr > < td class ="linenos "> < div class ="linenodiv "> < pre > < span > </ span > < span class ="normal "> 78</ span >
53145319< span class ="normal "> 79</ span >
53155320< span class ="normal "> 80</ span >
53165321< span class ="normal "> 81</ span >
@@ -5338,7 +5343,10 @@ <h2 id="spotpython.utils.parallel.make_parallel" class="doc doc-heading">
53385343< span class ="normal "> 103</ span >
53395344< span class ="normal "> 104</ span >
53405345< span class ="normal "> 105</ span >
5341- < span class ="normal "> 106</ span > </ pre > </ div > </ td > < td class ="code "> < div > < pre > < span > </ span > < code > < span class ="k "> def</ span > < span class ="nf "> make_parallel</ span > < span class ="p "> (</ span > < span class ="n "> obj_func</ span > < span class ="p "> ,</ span > < span class ="n "> num_cores</ span > < span class ="p "> ,</ span > < span class ="n "> method</ span > < span class ="o "> =</ span > < span class ="s2 "> "mp"</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="n "> Callable</ span > < span class ="p "> :</ span >
5346+ < span class ="normal "> 106</ span >
5347+ < span class ="normal "> 107</ span >
5348+ < span class ="normal "> 108</ span >
5349+ < span class ="normal "> 109</ span > </ pre > </ div > </ td > < td class ="code "> < div > < pre > < span > </ span > < code > < span class ="k "> def</ span > < span class ="nf "> make_parallel</ span > < span class ="p "> (</ span > < span class ="n "> obj_func</ span > < span class ="p "> ,</ span > < span class ="n "> num_cores</ span > < span class ="p "> ,</ span > < span class ="n "> method</ span > < span class ="o "> =</ span > < span class ="s2 "> "mp"</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="n "> Callable</ span > < span class ="p "> :</ span >
53425350< span class ="w "> </ span > < span class ="sd "> """</ span >
53435351< span class ="sd "> Creates a parallelized wrapper function for the given objective function.</ span >
53445352
@@ -5538,12 +5546,7 @@ <h2 id="spotpython.utils.parallel.parallel_objective_function" class="doc doc-he
55385546
55395547 < details class ="quote ">
55405548 < summary > Source code in < code > spotpython/utils/parallel.py</ code > </ summary >
5541- < div class ="highlight "> < table class ="highlighttable "> < tr > < td class ="linenos "> < div class ="linenodiv "> < pre > < span > </ span > < span class ="normal "> 33</ span >
5542- < span class ="normal "> 34</ span >
5543- < span class ="normal "> 35</ span >
5544- < span class ="normal "> 36</ span >
5545- < span class ="normal "> 37</ span >
5546- < span class ="normal "> 38</ span >
5549+ < div class ="highlight "> < table class ="highlighttable "> < tr > < td class ="linenos "> < div class ="linenodiv "> < pre > < span > </ span > < span class ="normal "> 38</ span >
55475550< span class ="normal "> 39</ span >
55485551< span class ="normal "> 40</ span >
55495552< span class ="normal "> 41</ span >
@@ -5577,7 +5580,10 @@ <h2 id="spotpython.utils.parallel.parallel_objective_function" class="doc doc-he
55775580< span class ="normal "> 69</ span >
55785581< span class ="normal "> 70</ span >
55795582< span class ="normal "> 71</ span >
5580- < span class ="normal "> 72</ span > </ pre > </ div > </ td > < td class ="code "> < div > < pre > < span > </ span > < code > < span class ="k "> def</ span > < span class ="nf "> parallel_objective_function</ span > < span class ="p "> (</ span > < span class ="n "> objective_function</ span > < span class ="p "> ,</ span > < span class ="n "> X</ span > < span class ="p "> ,</ span > < span class ="n "> num_cores</ span > < span class ="p "> ,</ span > < span class ="n "> fun_control</ span > < span class ="p "> ,</ span > < span class ="n "> method</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> ndarray</ span > < span class ="p "> :</ span >
5583+ < span class ="normal "> 72</ span >
5584+ < span class ="normal "> 73</ span >
5585+ < span class ="normal "> 74</ span >
5586+ < span class ="normal "> 75</ span > </ pre > </ div > </ td > < td class ="code "> < div > < pre > < span > </ span > < code > < span class ="k "> def</ span > < span class ="nf "> parallel_objective_function</ span > < span class ="p "> (</ span > < span class ="n "> objective_function</ span > < span class ="p "> ,</ span > < span class ="n "> X</ span > < span class ="p "> ,</ span > < span class ="n "> num_cores</ span > < span class ="p "> ,</ span > < span class ="n "> fun_control</ span > < span class ="p "> ,</ span > < span class ="n "> method</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> ndarray</ span > < span class ="p "> :</ span >
55815587< span class ="w "> </ span > < span class ="sd "> """</ span >
55825588< span class ="sd "> Executes an objective function in parallel using either multiprocessing or joblib.</ span >
55835589
@@ -5608,13 +5614,11 @@ <h2 id="spotpython.utils.parallel.parallel_objective_function" class="doc doc-he
56085614< span class ="sd "> >>> parallel_objective_function(sample_objective, X, num_cores=2, fun_control=fun_control, method='joblib')</ span >
56095615< span class ="sd "> array([16, 25, 34])</ span >
56105616< span class ="sd "> """</ span >
5611- < span class ="k "> with</ span > < span class ="n "> Manager</ span > < span class ="p "> ()</ span > < span class ="k "> as</ span > < span class ="n "> manager</ span > < span class ="p "> :</ span >
5612- < span class ="n "> shared_control</ span > < span class ="o "> =</ span > < span class ="n "> manager</ span > < span class ="o "> .</ span > < span class ="n "> dict</ span > < span class ="p "> (</ span > < span class ="n "> fun_control</ span > < span class ="p "> )</ span >
5613- < span class ="k "> if</ span > < span class ="n "> method</ span > < span class ="o "> ==</ span > < span class ="s2 "> "mp"</ span > < span class ="p "> :</ span >
5614- < span class ="k "> with</ span > < span class ="n "> Pool</ span > < span class ="p "> (</ span > < span class ="n "> processes</ span > < span class ="o "> =</ span > < span class ="n "> num_cores</ span > < span class ="p "> )</ span > < span class ="k "> as</ span > < span class ="n "> pool</ span > < span class ="p "> :</ span >
5615- < span class ="n "> results</ span > < span class ="o "> =</ span > < span class ="n "> pool</ span > < span class ="o "> .</ span > < span class ="n "> starmap</ span > < span class ="p "> (</ span > < span class ="n "> evaluate_row</ span > < span class ="p "> ,</ span > < span class ="p "> [(</ span > < span class ="n "> row</ span > < span class ="p "> ,</ span > < span class ="n "> objective_function</ span > < span class ="p "> ,</ span > < span class ="n "> shared_control</ span > < span class ="p "> )</ span > < span class ="k "> for</ span > < span class ="n "> row</ span > < span class ="ow "> in</ span > < span class ="n "> X</ span > < span class ="p "> ])</ span >
5616- < span class ="k "> elif</ span > < span class ="n "> method</ span > < span class ="o "> ==</ span > < span class ="s2 "> "joblib"</ span > < span class ="p "> :</ span >
5617- < span class ="n "> results</ span > < span class ="o "> =</ span > < span class ="n "> Parallel</ span > < span class ="p "> (</ span > < span class ="n "> n_jobs</ span > < span class ="o "> =</ span > < span class ="n "> num_cores</ span > < span class ="p "> )(</ span > < span class ="n "> delayed</ span > < span class ="p "> (</ span > < span class ="n "> evaluate_row</ span > < span class ="p "> )(</ span > < span class ="n "> row</ span > < span class ="p "> ,</ span > < span class ="n "> objective_function</ span > < span class ="p "> ,</ span > < span class ="n "> shared_control</ span > < span class ="p "> )</ span > < span class ="k "> for</ span > < span class ="n "> row</ span > < span class ="ow "> in</ span > < span class ="n "> X</ span > < span class ="p "> )</ span >
5617+ < span class ="k "> if</ span > < span class ="n "> method</ span > < span class ="o "> ==</ span > < span class ="s2 "> "mp"</ span > < span class ="p "> :</ span >
5618+ < span class ="k "> with</ span > < span class ="n "> Pool</ span > < span class ="p "> (</ span > < span class ="n "> processes</ span > < span class ="o "> =</ span > < span class ="n "> num_cores</ span > < span class ="p "> )</ span > < span class ="k "> as</ span > < span class ="n "> pool</ span > < span class ="p "> :</ span >
5619+ < span class ="n "> results</ span > < span class ="o "> =</ span > < span class ="n "> pool</ span > < span class ="o "> .</ span > < span class ="n "> starmap</ span > < span class ="p "> (</ span > < span class ="n "> evaluate_row</ span > < span class ="p "> ,</ span > < span class ="p "> [(</ span > < span class ="n "> row</ span > < span class ="p "> ,</ span > < span class ="n "> objective_function</ span > < span class ="p "> ,</ span > < span class ="n "> fun_control</ span > < span class ="p "> )</ span > < span class ="k "> for</ span > < span class ="n "> row</ span > < span class ="ow "> in</ span > < span class ="n "> X</ span > < span class ="p "> ])</ span >
5620+ < span class ="k "> elif</ span > < span class ="n "> method</ span > < span class ="o "> ==</ span > < span class ="s2 "> "joblib"</ span > < span class ="p "> :</ span >
5621+ < span class ="n "> results</ span > < span class ="o "> =</ span > < span class ="n "> Parallel</ span > < span class ="p "> (</ span > < span class ="n "> n_jobs</ span > < span class ="o "> =</ span > < span class ="n "> num_cores</ span > < span class ="p "> )(</ span > < span class ="n "> delayed</ span > < span class ="p "> (</ span > < span class ="n "> evaluate_row</ span > < span class ="p "> )(</ span > < span class ="n "> row</ span > < span class ="p "> ,</ span > < span class ="n "> objective_function</ span > < span class ="p "> ,</ span > < span class ="n "> fun_control</ span > < span class ="p "> )</ span > < span class ="k "> for</ span > < span class ="n "> row</ span > < span class ="ow "> in</ span > < span class ="n "> X</ span > < span class ="p "> )</ span >
56185622
56195623 < span class ="k "> return</ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> array</ span > < span class ="p "> (</ span > < span class ="n "> results</ span > < span class ="p "> )</ span > < span class ="o "> .</ span > < span class ="n "> flatten</ span > < span class ="p "> ()</ span >
56205624</ code > </ pre > </ div > </ td > </ tr > </ table > </ div >
0 commit comments