From 6e6a4480d6cb39df27f53b9afc25403490812152 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Tue, 29 Sep 2026 04:07:28 -0400 Subject: [PATCH] perf: reduce ordinary compiled-pipeline completion polling latency Use a measured 50 ms poll interval for the two ordinary completion waits, retain the generic zmqruntime default, and record full official30 parity and timing evidence. Refs #182. --- .../results/perf_fast_poll_20260929/README.md | 31 ++++++ .../fast_poll_well_throughput.csv | 31 ++++++ .../results/perf_fast_poll_20260929/plot.py | 99 ++++++++++++++++++ .../polling_total_and_slack.png | Bin 0 -> 108338 bytes .../wait_breakdown.csv | 31 ++++++ openhcs/runtime/zmq_execution_client.py | 12 ++- tests/unit/test_openhcs_adapter.py | 2 +- tests/unit/test_openhcs_measured_run.py | 4 +- tests/unit/test_zmq_compiled_pipeline_run.py | 11 +- 9 files changed, 211 insertions(+), 10 deletions(-) create mode 100644 benchmark/results/perf_fast_poll_20260929/README.md create mode 100644 benchmark/results/perf_fast_poll_20260929/fast_poll_well_throughput.csv create mode 100644 benchmark/results/perf_fast_poll_20260929/plot.py create mode 100644 benchmark/results/perf_fast_poll_20260929/polling_total_and_slack.png create mode 100644 benchmark/results/perf_fast_poll_20260929/wait_breakdown.csv diff --git a/benchmark/results/perf_fast_poll_20260929/README.md b/benchmark/results/perf_fast_poll_20260929/README.md new file mode 100644 index 0000000000..ebff583d6b --- /dev/null +++ b/benchmark/results/perf_fast_poll_20260929/README.md @@ -0,0 +1,31 @@ +# Compiled-pipeline completion polling: official30 1w_1t (2026-09-29) + +This report accompanies [OpenHCS issue #182](https://github.com/OpenHCSDev/openhcs/issues/182). It compares the [lazy-catalog fresh-server run](../perf_lazy_catalog_20260929/README.md) with the same CPU-only integration checkout and a 0.05-second polling interval for the two ordinary compile/execute completion waits. The control uses the inherited 0.5-second interval. Each observation starts and stops its own ZMQ server; `total_seconds` includes that lifecycle. The 1w_1t mode uses one well and one OpenHCS thread. + +All 30 cases succeeded. Twenty-six had a lower total, with a paired median saving of 0.354 seconds. All 110 files under the produced `results` directories were byte-identical to the control. + +| Sum over 30 observations (seconds) | 0.5-second control | 0.05-second candidate | Difference | +| --- | ---: | ---: | ---: | +| Server compilation jobs | 83.759 | 83.733 | -0.026 | +| Server execution jobs | 89.219 | 90.693 | +1.474 | +| Other measured time (`total - compile - execute`) | 101.289 | 88.948 | -12.341 | +| Per-observation total | 274.266 | 263.374 | **-10.892** | +| Client wait minus server-job time, from retained receipts | 13.827 | 1.554 | **-12.273** | + +The remaining `total_seconds` gain is consistent with faster detection of completed jobs. The +1.474-second server-execution difference could be workload variation or extra status-request contention, so it is reported separately and is not an execution-only gain. The full CLI wall time was 296.684 seconds for the control and 285.686 seconds for the candidate; this includes source preparation outside per-observation timers. The native CP total-phase reference sums to 1,319.357 seconds, and its 5× line is 263.871 seconds. The candidate per-observation sum is 0.497 seconds below that line. CP and OpenHCS total timers have different preparation boundaries, so this is an indicative reference, not a directly equivalent ratio. + +![Total time and completion-detection slack](polling_total_and_slack.png) + +The `wait_breakdown.csv` derives each case's `WAIT_OPENHCS` and server-job durations from its retained measured-run receipt. `plot.py` regenerates the figure from that CSV, the candidate CSV, and the existing control and native summary. The raw candidate run is in `/home/ts/code/projects/openhcs-benchmark-runs/perf-fast-poll-full-20260929`; the prior control run is in `/home/ts/code/projects/openhcs-benchmark-runs/perf-lazy-catalog-full-20260929`. + +Validation: 80 focused unit and integration tests passed on the patched path. The measured run used the ordinary ZMQ outcome and progress evidence path. The experiment changes only completion polling latency; it does not claim a faster pipeline execution algorithm. An event-driven completion signal in `zmqruntime` could remove residual wait slack and status requests, but the measured remaining direct payoff is only about 1.55 seconds across official30. + +Fresh benchmark command: + +```bash +OPENHCS_CPU_ONLY=true .venv/bin/python scripts/benchmark_cppipe_well_throughput.py \ + --manifest benchmark/manifests/official30_portable_axis1.json \ + --output-dir /path/to/output \ + --native-summary-csv benchmark/results/perf_lazy_catalog_20260929/native_cp_summary.csv \ + --mode 1w_1t +``` diff --git a/benchmark/results/perf_fast_poll_20260929/fast_poll_well_throughput.csv b/benchmark/results/perf_fast_poll_20260929/fast_poll_well_throughput.csv new file mode 100644 index 0000000000..8af6b00a91 --- /dev/null +++ b/benchmark/results/perf_fast_poll_20260929/fast_poll_well_throughput.csv @@ -0,0 +1,31 @@ +case_name,mode_name,worker_count,well_count,compile_seconds,prepare_seconds,execute_seconds,total_seconds,wells_per_second,successful_wells,native_single_sample_execution_seconds,projected_native_execution_seconds,projected_execution_speedup,peak_memory_mb,status,memory_limit_mb,error_message,execution_route,server_lifecycle,run_input_sha256 +ExampleColocalization,1w_1t,1,1,3.3101065158843994,0.0,3.844163656234741,10.263778779190034,0.26013460649057646,1,37.035618890076876,37.035618890076876,9.634246146105108,1315.40234375,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleCometAssay,1w_1t,1,1,3.035510778427124,0.0,2.5314300060272217,8.556119349785149,0.39503363617364284,1,13.304211451206356,13.304211451206356,5.255611025993065,1216.515625,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleFly,1w_1t,1,1,2.9934492111206055,0.0,2.1602623462677,8.249891720246524,0.4629067398817124,1,8.094948755111545,8.094948755111545,3.747206337738212,920.05078125,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleFlyURL,1w_1t,1,1,2.683825969696045,0.0,1.1354057788848877,6.841715413145721,0.8807423906034076,1,4.900778113398701,4.900778113398701,4.316323031411629,829.07421875,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleHuman,1w_1t,1,1,2.628810167312622,0.0,1.2092616558074951,6.777371522039175,0.8269508879219702,1,4.420192994643003,4.420192994643003,3.6552825217065035,798.6328125,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleIlluminationCorrection_Example1_AllMethod,1w_1t,1,1,2.5782742500305176,0.0,2.810371160507202,8.08219988225028,0.3558248867809777,1,946.6214662808925,946.6214662808925,336.83147606384165,1276.7109375,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleIlluminationCorrection_Example1_EachMethod,1w_1t,1,1,2.4493072032928467,0.0,0.16939973831176758,5.245963773224503,5.903196840597089,1,4.54475614009425,4.54475614009425,26.8285900874886,760.13671875,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleIlluminationCorrection_Example2,1w_1t,1,1,2.9007842540740967,0.0,1.7746107578277588,7.465981120243669,0.5635038532190948,1,48.04419008316472,48.04419008316472,27.073086236653943,1001.73828125,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleIlluminationCorrection_Example3,1w_1t,1,1,2.9183850288391113,0.0,0.874875545501709,6.64416542602703,1.1430197187950164,1,2.1520505752414465,2.1520505752414465,2.4598362433451313,793.23828125,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleImagingFlowCytometryObjectsInGrid,1w_1t,1,1,3.4344255924224854,0.0,21.618332862854004,28.388432712759823,0.04625703593075226,1,61.60158259188756,61.60158259188756,2.849506619344146,2424.79296875,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleNeighbors,1w_1t,1,1,2.460543394088745,0.0,1.3759188652038574,6.625465746037662,0.726787040493001,1,4.5466188420541584,4.5466188420541584,3.3044236524662574,850.32421875,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExamplePercentPositive,1w_1t,1,1,2.465564727783203,0.0,0.5546884536743164,5.9790011420845985,1.8028138018303639,1,2.5050158216618,2.5050158216618,4.516077097095322,799.81640625,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleSpeckles,1w_1t,1,1,2.3139264583587646,0.0,0.8206939697265625,5.890974103007466,1.2184809891233614,1,3.179383432958275,3.179383432958275,3.874018270193428,900.796875,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleTrackObjects,1w_1t,1,1,2.435426712036133,0.0,3.601717233657837,8.903016267344356,0.2776453383555651,1,9.587221414782107,9.587221414782107,2.6618473335968975,1580.0390625,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleTumor,1w_1t,1,1,2.2887659072875977,0.0,0.8129324913024902,5.926819425076246,1.2301144445558916,1,4.360487373080105,4.360487373080105,5.363898502929412,954.09375,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleUntangleAndStraightenWorms,1w_1t,1,1,3.0009536743164062,0.0,1.238189935684204,7.2066797418519855,0.8076305348479641,1,3.4416790287941694,3.4416790287941694,2.7796050748000565,861.53125,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleUntangleWorms,1w_1t,1,1,3.0912106037139893,0.0,2.188098192214966,8.335689563304186,0.4570178813537253,1,4.618807300925255,4.618807300925255,2.110877527049978,905.7265625,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleUntangleWormsBrightField,1w_1t,1,1,3.200813055038452,0.0,3.727550506591797,10.005470647942275,0.26827268959376965,1,7.377188352867961,7.377188352867961,1.9790981610637195,1023.86328125,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleVitra,1w_1t,1,1,2.891615390777588,0.0,1.3642120361328125,7.195859033148736,0.7330238800961915,1,4.122247557155788,4.122247557155788,3.0217058990633827,935.5390625,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleWoundHealing,1w_1t,1,1,2.0344831943511963,0.0,1.6444566249847412,6.3499644552357495,0.6081036038328338,1,4.702593941241503,4.702593941241503,2.8596643230314074,1206.03515625,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleYeastColonies,1w_1t,1,1,3.20620059967041,0.0,2.0971145629882812,8.346837885212153,0.476845670546034,1,12.096297012176365,12.096297012176365,5.768066859895226,1150.30859375,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +ExampleYeastPatches,1w_1t,1,1,3.3224527835845947,0.0,2.514336585998535,8.878206667955965,0.3977192256472947,1,5.990533472970128,5.990533472970128,2.3825503340838785,1083.046875,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +cp_tutorial_3d_monolayer,1w_1t,1,1,3.571105480194092,0.0,10.493359327316284,17.35563250305131,0.09529836621498348,1,14.058660756796598,14.058660756796598,1.339767401293419,1422.63671875,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +cp_tutorial_advanced_segmentation_final,1w_1t,1,1,4.244936466217041,0.0,10.715682983398438,18.60752471210435,0.09332116315397508,1,36.253466514870524,36.253466514870524,3.3832156635314043,1101.30859375,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +cp_tutorial_quality_control,1w_1t,1,1,2.0106170177459717,0.0,0.6097266674041748,5.53759868722409,1.640079159170385,1,4.787729676347226,4.787729676347226,7.852255661918658,809.171875,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +cp_tutorial_beginner_segmentation_final,1w_1t,1,1,3.1879985332489014,0.0,6.741356611251831,13.219823073130101,0.14833809538141401,1,16.074153264053166,16.074153264053166,2.384409280058586,967.34375,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +cp_tutorial_pixel_based_classification,1w_1t,1,1,2.392631769180298,0.0,0.8176169395446777,6.0282009481452405,1.223066636262318,1,4.208680049050599,4.208680049050599,5.147496150696644,990.828125,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +cp_tutorial_translocation_final,1w_1t,1,1,2.5957834720611572,0.0,0.8361177444458008,6.443194939754903,1.196003800472892,1,3.004684013314545,3.004684013314545,3.5936134991443374,879.9453125,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +cp4_supplement_combine_objects,1w_1t,1,1,2.006458282470703,0.0,0.15198445320129395,5.0026285741478205,6.579620342322529,1,1.8334413380362093,1.8334413380362093,12.063347924198078,776.1640625,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 +cp_tutorial_translocation_start,1w_1t,1,1,2.078247547149658,0.0,0.2592785358428955,5.020165450870991,3.8568560901081663,1,2.1760300607420504,2.1760300607420504,8.39263479203142,802.56640625,success,,,ordinary-zmq-outcomes-v1,fresh-per-observation,414b6abaecd5d65e0076adbed7fa674a45931b71fe70435f7da7fc64565752e8 diff --git a/benchmark/results/perf_fast_poll_20260929/plot.py b/benchmark/results/perf_fast_poll_20260929/plot.py new file mode 100644 index 0000000000..acb02a78eb --- /dev/null +++ b/benchmark/results/perf_fast_poll_20260929/plot.py @@ -0,0 +1,99 @@ +"""Rebuild the fresh-server completion-poll comparison figure.""" + +from __future__ import annotations + +import csv +from pathlib import Path + +import matplotlib.pyplot as plt + +HERE = Path(__file__).resolve().parent +BASELINE = HERE.parent / "perf_lazy_catalog_20260929" / "lazy_fresh.csv" +FAST = HERE / "fast_poll_well_throughput.csv" +WAITS = HERE / "wait_breakdown.csv" +NATIVE = HERE.parent / "perf_lazy_catalog_20260929" / "native_cp_summary.csv" + + +def read_rows(path: Path) -> list[dict[str, str]]: + with path.open(newline="") as file: + return list(csv.DictReader(file)) + + +def total(rows: list[dict[str, str]], column: str) -> float: + return sum(float(row[column]) for row in rows) + + +def main() -> None: + baseline = read_rows(BASELINE) + fast = read_rows(FAST) + waits = read_rows(WAITS) + native = read_rows(NATIVE) + assert {row["case_name"] for row in baseline} == {row["case_name"] for row in fast} + assert len(baseline) == len(fast) == len(waits) == 30 + + stacks = [] + for rows in (baseline, fast): + compile_time = total(rows, "compile_seconds") + execution_time = total(rows, "execute_seconds") + other = total(rows, "total_seconds") - compile_time - execution_time + stacks.append((compile_time, execution_time, other)) + + native_total = total(native, "median_native_total_phase_seconds") / 5 + fig, (ax, slack_ax) = plt.subplots( + 1, 2, figsize=(11, 5), gridspec_kw={"width_ratios": [1.35, 1]} + ) + colors = ("#6789a7", "#3a6f91", "#d19b59") + labels = ("Server compilation", "Server execution", "Other measured time") + for i, (components, title) in enumerate( + zip(stacks, ("0.5 s polling", "0.05 s polling"), strict=True) + ): + bottom = 0.0 + for component, label, color in zip(components, labels, colors, strict=True): + ax.bar( + i, + component, + bottom=bottom, + color=color, + label=label if i == 0 else None, + ) + bottom += component + ax.text(i, bottom + 2, f"{bottom:.1f}s", ha="center", fontsize=10) + ax.axhline(native_total, color="#665b83", linestyle="--", linewidth=1.5) + ax.text( + 1.48, + native_total - 13, + f"Native CP / 5: {native_total:.1f}s", + ha="right", + fontsize=8, + ) + ax.set_xticks([0, 1], ["0.5 s polling", "0.05 s polling"]) + ax.set_ylim(0, 320) + ax.set_ylabel("Sum across 30 fresh-server observations (s)") + ax.set_title("Total measured time") + ax.legend(loc="lower center", bbox_to_anchor=(0.5, -0.25), ncol=3, fontsize=8) + + slack = [ + sum( + float(row[f"{label}_wait_seconds"]) + - float(row[f"{label}_server_jobs_seconds"]) + for row in waits + ) + for label in ("baseline", "fast") + ] + bars = slack_ax.bar([0, 1], slack, color=["#d19b59", "#3a6f91"], width=0.6) + for bar, value in zip(bars, slack, strict=True): + slack_ax.text( + bar.get_x() + bar.get_width() / 2, value + 0.3, f"{value:.2f}s", ha="center" + ) + slack_ax.set_xticks([0, 1], ["0.5 s polling", "0.05 s polling"]) + slack_ax.set_ylim(0, 16) + slack_ax.set_ylabel("Client wait minus server job duration (s)") + slack_ax.set_title("Completion-detection slack") + fig.suptitle("Official30 CPU-only 1w_1t: ordinary compiled-pipeline waits") + fig.tight_layout() + fig.savefig(HERE / "polling_total_and_slack.png", dpi=180) + plt.close(fig) + + +if __name__ == "__main__": + main() diff --git a/benchmark/results/perf_fast_poll_20260929/polling_total_and_slack.png b/benchmark/results/perf_fast_poll_20260929/polling_total_and_slack.png new file mode 100644 index 0000000000000000000000000000000000000000..de26bca294287ac2e85964a95da9e5d93f5aa9e2 GIT binary patch literal 108338 zcmeFZcRbha|33UyDNTt6$wDA^+sGK!GMj!@Yo_BIJaWJQ-nK;>9vUR#-Wy}B+FPo*4lbxeDKfm>VeFdMbg9X2D@CZJHver&X*O5ZmnNI$tGGw~VOrfGs zj?2qxxkV4PxSnCC{JZA&^p_w`w%v8ZrlU+MLoGjc-fY?75u_0R?!k{hsmSu12V5#_ zhIaqRIJZWgZl{u%`274e*7>5lDRy>`M;j)7+vQ3~9Fi#1nUa<`v_*FFs?Bu&>sR-o z)pKc-|Mf?78m9%?)#U%zuh}gtTmRP|$cOU_{+}=UX9CpWanrL&cUeRK<_1(=2?z)%KDNP)o{moA(OBOXjt}<_t=YI!_ITEtZdVSR%`tu-#{OLM*{0@}784trO)4rXd4+}X=PE;fWLeR7 zbao#8q`7(3rMBW-)=fEnuU;KeRa5)b)ph-Js-DS2&qpOSwT~H#fdK(;jC>aT(hLgY zF8$1WnVs#Iks&xVG^C!OymbSMRr%+l+RFux6g||x=w{O{U_1YR*)1D9a`#wKesjsi!72R%ell-jnk?cTln^4}$?eQFO@v9iXhQuUXY%X=;@FrJK+t{7=4 z6m%ZYS{SQj-63lCxY2X8tt7M}XnTs<^hk?@YP2ZbRW>ts)?#5+Y0o27clJi4(XL%9 ztE5D;iB;(Lbh~y1??3s-7~%E&Y%ZV6XzRx9+qcIIukTKK{Fu$n&8@GHDgS8Hd?SARP*W}~ zWivhfwH4Is`t}&%y{n7y$&axs6kn_Q#9z~GJ`Ik+h@XJWP%2yeeO=14ld*AX4~5;9 z7V;JP%gV|GEkCn07dWr4iQ@Oaa%G(A;?zhB&*}^b=Yi{3ma>+XT?z{0Mpww|KYhA~ za-{QJaK`1y3*p?_+?p>P-(ICY^V0Z=aN)D;WbKrm!Z-8yoG)?5*6SBt-nx}rOa0zH zK|#7*;!eILB_-9b7Zw-46nlB-zjmXGjEwx5)`XS$oN-REx!CJ$r?s^ALO`s~660Rw z@FUMo#ANEb;9TkDTnfYjmzI|9u9@BZB{xAo-(hyd(YJV)q>OX##Y;8m_Oas}ENk#` zbKC5d9LY;QeE(ia$hK9V@5f?`Ya0nrx7qQ%h+;ZMM)F~%Q$s%yom=Zu^|II1KRc;& zzhp?V2~Vz=bSmK>bzzBWuHCPr;rvF1osWu)cmn0GI&@c?e7Gn0qu5I#&8Q^g{sGprEqyK>CQDT+@nmf2ndLvM$L`S#Yvb~YIK zY_&Daa~_OTkec`w7#Jv96M3NfYDh`LiD{jYkx~Am5m{N;Gewu3bEf_N$nC!U=HthWyChu7 zU+BKF>-)@p{rdGcRaM8^wCnS2t&DIs$*;b_QWlc(pNh!&Z#rga$w_(h<_$$9im&3H z;JL24d-v}@xjZ@W+^|SoA(+XJ&!8Yc&XoVmOUePgtRr{#sWJ4hZrw^v5jc48l-LU= z1#t=|(ueR=-=IdGor&b-KT5yE&z(E>^@T3|;fvqp@eQAItj|*3APuocC?A?Ue?nEY zd|`H?qBm$e|GQe5zr51?8gZ+7K0aI{A|kS3r|Gtj06knufw!U;pEAivZ-Ce5E_`P?>zY3&c)?Me!du1SN+LRYN!4>YH4X{ z2dSDvt5&bRX^upuV$zByeIxUCVdcq_C$&;eZwv_u5fBu-5*)lS`E=^djB}M8W1W>u z+0Xdix9&koC^9CfZq*SyL2|Vzb+6qW@hbWKE3iL7c;~lo-%_1Ff8Ng7 z`B+=Ampu|V?>GC(kX;>v!{HEp{ra`taO2_Nfn5v?dvYqm zxik-^{v9p(TRy20$xB7SAtlklc{Ya^zYx^daQsXr2fittIB{Cn5Oqh`ra3^`Ywj`r z+|I$_YElvx*&h_tTP#vcw5-xv_xW8EP%si4^K9zxzsR>H%cE zZ#n)$y{74gMPCzj_9JH@@5teFRMc8rym%2=jwMFixfF-6;$c=eO57%eTRX0dch|%t z3Iq-vx`t{m?lKgRdNz0W;ltYfIX4@*aVE?BX-T#;HZh?>eR3LZ+$v(*8s2nz^D0!O zlagx=eMCv{zP?@Cwq`A`OX69oz8Dx=@Gn@xcM>zgXmXOIFo1L)W z)y-V>@u5hRM=-W_EB*cxU){b24i)!g-F|4DRFi4epWNb{ee$RK-|Aqm6~1&F3IUVe z6FtGDLanW>rc8$p9ZDFrMaJ1u&&8y6eEVosbx7Ib{4`LTddleo_CHyD7M}dp>#Z3K z&&v~iaVBF0QkpMfj36j0tH3RLmD>wPi_4IdZXr1(d;aCX`Ks1ffzy1OB`+_JhO&xs zH8eEzdlOQ=QL{IycgMJt$5cR#EAdIRwrwjukQOWE zcs_9wNuB9i?VC48&b)TZs1r}-QPlMI_BNHyzSwa3UZO_4g6RYDLqCjuijgpFd~o>U z`Fz8)v@}!cLYLuc2kFe#5+DAa{;sa42Z!-3pqNeK}qZ4w==9m*=NajghD*o0)_!-Al;Ps6Z`wVd3fdy75o; zg>PFZG!-|uYUW7`2&kvU;Or+0w2+f7#G{k;;k&e@@xa;?%+1X|Lz9!wR9*^WR;GUV8dG2{Y2Bkz_#(lg? zbr7KKKpJv!hTYH)!MBZ#dRF ztPIs22+;w#ZS6@IS}RXpHfQ& z-hb;Vq^(SmVN4ByM-T%@zYgY)MD3576aYxA^Bo_(Q{Z;;v6|YQp!-qeky}S%e}|;o%jU5!*U=4l&-L%8ya7!9g_k(Ecw^(vazhie8Q+p$ zM1KZuq#SW`%PalDegfM*y@2E3Ha!wk?ZoJQ>b#h}4J{x7!10GH$pZ(}JezZEjhH3f z)Xm-L_o=@B-nZ4L0NJa+c`(tgJZu9nmyXz?|GrhSZ~pYxcPpIH=)tSvXv#c2WtHe` zWo3oO5bcw$w|m%=m!<$x$did1K(1j{2HH~ExLSIQc6lYCqf)$wG8Lu z>(tXCEEW6t^EQsgOjpJb3Tiy(@VB!;TjQg{OaA_Ill8 z)_wl$Kpd|@c41my$0ASeR1yGvN0z9O_xY9m95(@>HEiz3IiY>2jFE7qn2kE>Kb$r* z=);3IXYWL8Xc(6J5=7Ho0JJ)0pJ7^|{#1!Bb>jJ{gqt%nlYCoGUJzxGbn``hVq<5gdh+CnsLRlf0@qQ##8^r9%x30pUG2w5 zsO$se)~{brkQKm>oT};uNl8h&v5sR2R|0OavTxk5K|RY-Bcl7>!-u36QR-Ii%6z*= zt?CgiV8_c>uj<8VtrHRw*m-$3pz6!TD+JrMzoD`>$hB#4c)jp~EV#7K(gwDo7M$o{ zbYC3kMObCL%imsGQz7<^${0DEhK5G{fzgEv+^DlO78VvS&gO1nXJ=OeP(?^**tCfM zXlz`e#Jc4WkBle@KeTETtulSGK9UWKE;`XRpzp_E$-Mos*pwMM&R7H8Y*=7EZ{cOr7qMIaKhJ1^P zq)_|(qWFz=i-|E_Webp<1WY$UUhfblH5vz$bbBaZ`h_kV4Gj%DUiKAaS~m$JGa-|+ z>ZIw*Vin0t`}p{b-Pl7pQ|NM_qoaeNMlWjo)rz4k6)20{(wg81xI}Kvd`;5S zUfoPFZb&mwQdT~SpJm@)w^v?KF{rW_%l0xO<4RQ2c1n9=_C?aW)V=of^xTZpM%i)b z{H=Gx;|Zv0w|0u0@EjQ!xY=D3#Q|(^Dv3c*P|$7WH~S_Q$$+KB`Jhpq%n(+Y5TB)4 zMbD+h>9$VvNddQR$sawsVgwEN@w@v1<=RWU=C^Su+)~#~M?~-D;#y129AF0<;*E~( z%E~pHNQ-l1E{k`#DHl5~(ca$fi$;S@NQeRbl-t}NF7Nqak&F-MXUv&aFRJ`qn&-#4 z`jVu%U%%LsF(V^`v}oT_biNe2+6uPZKV;#s=iU?;l?;PDTh<~xLpT&e+VK(rp`nWM z@~ilaif>V^T>a(^+v5HdbR}Z-VZ(EmKUP(L%=uuWTX4bEpn7Cp$7bYicJ|>5U!PO4 zExwwmdAKf3KYw>?-kmYV=Y11PAZt2us#mlYc%O{a&M-ZO(}wI9RFkOoF!6W6{&NrF zkkHxzASiX|Ya;oLLhyf&a7U2W2VyHlxqo@-=Ru(hUzKcb?gS)>(~mgkRY}^pa8ZY@ z0MQ`>zja$P!z)qiDkN`i=T8$*d#B!*n3%{tac9>J9haG6ezixEx~k7Cl_rF(8{cny zyMvxS{+smLt0OmQ59@U6X(tF`dze`e5lBphepx}X#zCKQy zcpJ+T$DHiFxpqrD%}?|JhTn?7>KdLdjP zHJCFIZr_y~77;B+kshcirDz|z>Ojh!U{-KPS`}|$)y`_sk=@*N!{Af(ys=By*L(w{ zICfFdGgkST?!kn+DnPbhN4Xw%ENC5qOE=92j7-J&Ktnpe{IO$JF^VXo z<&r=UTu+}qO2sBk55ukpReVy z?6q=noF`$G$<3=KN2>-x%8>CZCb5v3x{;R}qvs5d5gK6q&@aLXKV6BlVLGaUY&_JQ zPfxv$;qzH9?}ahNu`vXo!;5H~BwB2FMF1T~Is4OBDxZICPG&5NACv=wVmID(+`g~% zbr;y`j!uACuHhKl^XF08h2L-Ny#L@qvQQgdhG$m>L4Bkt@_j+81BhoyQU9qT8b6(z zpP%16cqCR;RrT{r6FJHo#PaR%@I7f06BG0ve%SysLt~TXwE{m`%$Yyw=SPd@B5e4k z@)l14p@O7XMR}QS`MD3q-!VHuBpX@{7@(^BWvt5gn|3jceCx+>aGTO0ow*L+Kwqho5lzela=)J13`A6hbHJr`0w@zi7TxGZdbX z;?j^k^xCKYT&z~`_dE6*KWCb&2wnQInZW;=5>=g~Q+u=HS(5IYZJVHaQ&zSToEpW~ z*O!t%Du7LucVD|q?}rbX`LA32)2|sh9@cW=%jfv~Vf3!1Z*s94c6N5}zl;;I3B>JI zLMmUow(`Trj}`2dd$$DY&)T-Wu5xilaG+)ZF$IK#yhB1302z}p-0(v8+9N5C^NpWC zy7ct)Q0jV@zF)soaEtXv7U6@&>`&LGzu;7VOi_;D_5(UK0p9&RJ*~sUR-b!omV@g3 z#w+Pc=)6dSM(Hopl<`^8w`z<$a5nh^PiN)KE%uOX?Pn);2~x7$C(iHLv*&#(xLCSt zDkyyJ9YySN3SoNO5v73i`j5uq-2qwK2L`wkJr?HWTDh6SFSX^xh4FyWg%?r!OF)DAx*#t=YW4^mgYw_&?BnGaxuy^ ztr(EeY|ODv`4X1HC>O4ha0)$&nO>~DW>8?@T10uGu#7oS`u<`aA?rphtIua5K(PnZ zUn30UaQL3gSn#S>l*j!t5YeLOMoY|{*855p=wu}kQdlyw$=aI*x#ypZPy^-MN zR*qJFd@N`iI(E5ht2Z7@@EGq}dsI%Y!YR3LTuQ8v_rQU%-dLZbyKlF*zr6;kM*&@H zhExBk1(3uS+8hZx=&=6ZfQgQdF0cIc>zCW#rK0cd?^ho-o2cLZ(~A=TBP8N(WaJI> zdU2-`l)?Q{ks^ujRlOpk`{m0QaULTuk=51fz9nmy*_JHcXv(z>k~+VMS=9HHMeX^< zeVvN=Sy@8a6Z_s(Rt8BeuG_}T`6>T-Fn?`2z@lZ0|2}gXqYuugQP*&kOp$Z@>JozL zT74LcyeS`TS5VkQd=f6PPz3BdxkV<(8NN3+VJ@jGvA$|DdhMK}x8Xk6hT|BD|P)5;OeO$(Sfm50fooeI3!%0zzkTbN>qKd3IIgEK!Hm_2R5hpzN z8_)|^06TsGnf#nnwRd*b)*N&K@4dPHJSd}IfLuQcUHK`Gfxmth1gdV2trc@NtZIFn z5P-v_U}dhjMZ+oD+{z+d$@FhP=o=V7?BbP{ zL5V>?*l3n`d&PWJ(Q$CtF-*OF+nc7Qvl|Aijy}w4bZ~aA0Jy8@RSaRS3RiI9)Nqzd z1%aitV1F=0F03FgFF=+-cC#In9NzA`nr8lW+O8{oUjQHkhJK@t%zjd9()KD2%hVz8 zI8!zggy1FgNJlR7e?mPTNbs)KO4HYU;rfoY9gLnsQK|1A!^@0Pd57wxycc!=F|Bx9 ztjM_-n)YeQ3#dPlF1v>G{zYRIID(bP9X-cnxd5vv3A$ zh{)g2?i2fs@F69!=1Z+?+{i!6JezdCK6wW6))Xku%(P+Gxn;azNBCnvJ z1I1#8)MX)VowQqcf-Yq*a{h|{>Dc=HE`2@^B0_I*#%ZEQEua0$#8HY;PG!Q7KzTuU zbo2&WTidZ&La2cyTZXG4Aqrq^emvZJ@ZdqkfyV)t(&N#cp4a2w=@!1xlG9;n!QHRP zN+qZF19-hx(I-!Y?dn-T5n!^ud*{wo$Z~l_@^YEed{g_OrZzJx3#Z$+p9&mK_G~KGT{Ap!C zIP2ZVZU*#2Rk0sw7Nhiw3{;0yhq3d&-hZ+5>sJQnfv<1LI)l;K$!}C#jvfT1<0kr| zCq^aSms3ce?bY-z7az7!32og*a6X?c3jv0qc%JcWeJs0@pv~UN`qL!IJW)LPNHR&_ z_d^4$%l6)<=ze6rryGS5IvZLWWDf_&!~us-YR(5Qr%`V9Y7#ZR;yfrfF{nU+5!>w25M00txllP2FfZMAuvDr$uifYX!=J%(> z3brvZafclI0tWt4a~_>_W0ve#M}_0?p^ER{x1kKL{$29$H0eNBkGu=n^>FwgH$GX{! zmp_7JcxJo&8uV>)%w4MMv4()24S5y|q;D+rswUR_ao?nD4zpULlj3#HBBW#ofbSy>D#v(WTDdh|#)ST|Y@;DTI z8U)M9r3Uuh1mYE&m(m3OTGPZ3drR*j34|Gk@X<}vft2tW>ozufeJ%Y<=#arTyl&mR zSqd@+I#eKURQk=^x9LD2@k+BEz7SqLyB$n*SBM2z-An`j9P6f=p*kQD00aH{!8ehF z1GEWLHQ;2~`-1!QiyZ|n!|N!^Ql?=McL<9BT36nWi;s4i`E(&sXZ_$As$nf@X>KkT z^9^N{;S2Hnj35@Yi;CLHseZ&WnqK7Z^SDsQ!XsB!Sbly?<@+aT&AyY5UI-0C)(8QD zvPfb!sQ+_l@4kJj(FoRLTqa7zo4<*B-{-kkeEFi`8Drs(@-*Xq=iWUU=t!x(ud}nV z%5h?8*%lSTZ*wSeFG`M0PF5fxP@ejnv}!4E7QT?~fxZ9v$|8tL61rc$#_`OW=4O4* zUq}r7%^+lb-({1YN80C;uell_Ag+W7#(5=6>J@s}pKwE|u8* zS`oq`^}uR2iiE<$+I|%2b0f|97d#?rdhR~tP{ZM-Gk^cEWEKAVMdTL<06LH4#DoNs zuJ^aen-eAkzJ!0>1xUE>n)4ksK$=ENd7N(cu6ugCBlLv(ThK1$zE$XeH1ZwH7bY8w z2vM=TU2W~MP4S^1FZoI3??RPsBn(W_DN16*=X(0<< z_4i+cG#HWU)&DJJJE+MFK;z~-`<39V!juz~jvs$p=sIeLe6Na-C56c&MnY8deM@;5 z;i^Xz8$q?0fT3G{26}oN%JqOS+R-&zm1xz^>gt+bWQ8!dfAz-tx;g>#Y6cn$hg?2>4JBS)#_wEH; zzrIS+YmNchfP661;qoV{2Y7j%4(hw2c`R>NGd11)K*Tl#34bNdznp`^K^!vB!$ByQ zL5`1A_G}^2ZIk(+vVuhUyLWMCb8RSf*G^?}9O*jz>C-2oo%#N0tz@j!{u0{8So1y2 zfM;r5&H8!~%Q&~Oj*d=9TDu_>ShJNvTHO-33jaVj*X28F)SGkZx5?~yHz4Nvg@pye zGqJLUf}V*-c84IYkW>9-ua1t+y$26gP+W!^{fIIRnNdz(pBaR|{of_8h1uR%PNQPU zG{d3?=Ozia>h|IEi!)b%uBa#w(%3_~!VF3lrykBc8tm=$M<-;`T^-@JFe6AJVCT*t z5&@8?L2iZ5OI8zDJ2nPP_61}j(U1YDLCclKD~6KYfF^rvNbqOAqs5pbCx4ZwVmhcM z*AP_l?T$Sk=<3z(3CQ-EV-?RzrV)z?0)ViTtEj01+YYrBdj$b782{<}0{Bln2Vv3C zyiq3&-9LhBUhXSA4CB(hs%Jd6t)jx#t)>XsG@nUZlXFQtN$Vym36&D-x1&GbYvs>A z8bYh}efrInm7*R~ybxnbN&bU2?h8}Wz7x>_0Q((?YRH)H5RkvyeEtTe%TS1%n38fa zX8`P)eE8mf#5HPa>b2)(iOoLpYTT6pyaLkw& zHgCYn(!;Ox)cz+dTN?LHzRNeYw0xfP0h#LN?B4zRE%c!L`2-sVF(Rk3>r_IeeBPpP zwy}7dawKok!4l-Q>I8nMVWrcV*m1M!c?bjIZ8EwAjSWcH5l#Q-Ww)iav!a7dUHn{` z58>%^k%w!x`Ef|!wa6?}X4So@CmnNG3=2JoNEO#Yu2n`2m7wc(wG%7 zls~?-=#kJ5o}$7DjuI{1^EmLU;Oxkrv~A2v3Ior;#qZqvtYGpg8_h#u>n)JrPLGP9 zS*r;T{cp9a;KK9}i;qFEPydD3tgYL&MRL^wt#GTJg##ns30Yn9er{Up-NWv?K)#&xLm?bPMJc9})X#9o}6JeBT zcAN+>X(DO6QGaHJbK3-LTP0&6Qh6BV*jM%!Ihn`yY8y@U*wj4@#8&f1ZRgV$t^G*- z0=d??>&9@c^_+MvWQv=31a1RcV`GB6yOP+`qWBDMf+9^)CEf*IQUxS-g8buTRtF!YO zS_>0&de3#zS@3xTJ71+{W<%h&ZU-utpHE;;EM8sC&MuhwTDzN?iZH^zH z$r4SrW@p3oL#ius@i7=bG_Y$7Krqdr;DJp+Aj59RM$`v%4@nV!CUcL%^ zDtUjR^B^X=XXc-vEpPU0DY#c4dmAa3O;mITu`}TbG_ou;@@tVKB+g+;J0v@dpx>7R z>f1p>CFU;{78W!oSHY?=@7gt1Mk`~Cugim^i{yEqWB&1aY+@O9T)?jV2n-I)s177N z@X;BtULZ9JpA}hc8HZd=1K1B{jzmpfVPRQa-4?Q!;Jlz3WuPEl_wyqlXkDA!cpVnI#c z2~*-r&shhuneen+dGdrEbXEZDO6PvOG$9Q?L>`Ck`9r{uw|8%mo%vgpK-&C(fbrW1 z_Q$|g6kk;K9=CMQ-PO?h9(&G?)2v%}6uOr^WKb`i{*-Z2Ij`iRKGu9xJkeP7F{jI( z9JJka`b+)0kB}TG|K~3ek0B>ed|$nCe8jZxK|t0ktO&|J)saW66@LHzP?qJh84$qP z2ET3v+M+KI(3{~wJ962VS7zh1ntZ>hsp(6PX&Zvrp|kBmj;?o1{pZ^`ORDDYjx8I_ zzle;&{sUjMQerm_XX$f|_&@3#yQ`BSd>iB8??<95v#5I8 zH}*JQ1dlunNCF_Qkc;WSiO;1G&WijrIpT@;(z*K2lV>&L*`EWq&aTpgHfS5bpLp6o zUkH_a#PrR>f4=NLzmMIm`ra2FLj4YKHpspZQJf<8)ODEzv3g%qqq4C3eoP5cU%!XWzqx=l=>MVDzc@u1 zrzpI0nIo&VK>t(mM(lPZh-|)ACkJ?*y>$G^XL71MJ;mic+r2%UQ)305qZ|z57_3P0 z3JSYnwk56&3^b5B>@?cC>%@r@GZVEk5DA}-Ci~O_^6(mlE0Bc}P3h0THy)>s|w(7uoC_sz)oTT|II)%Ak z3;G45*y0pfBd$kA@_!DS(h~ptMmSS9US;E41Zt$OFTOmfY*hd@u-~4ad@Nq0|rO-kJ+$f0tm{>$cU^fhns^l%$++uc=VLU8?-J$qAGBjlt+SNz)%1PzpbyQM{^{vrKOcPj8>S3Wf0ZsIWLE> z@M%@dA@KWI6-%<9iG?~!o2kKqW{=lV6uMV?41E2m5fC&iB#864f zKg>7T*5D2Zt|QiWRK%;mqy(rz(L=F5Iz07Y1~vvj^xu`NJ^?j&oQQtsdQ_$S;cdKU z*wWV1(7X>HMHwxhWUObHnVXCAnx7(eUw}iv34f3_L_%_C@&>6$Ru1hkF$-hv<1zmC znS6)6r%s&`YUDS_l3CtZS^#DGbU^^M6#JKFHDN?6e`!+I{_EEjg4;fP*Z|_BuQ~rv zj%`~A2-Sop7BL6;1;f{neklD7*5G0|0J_#9${|(|H3l#&q&Wvv{Es3J5xp!+Dn&&_ zGA&?MbqCgSNomiS$J+PNd%lJ9Ks`==Ej(KU!DED>96gScODasJfe@JD;9}zh2T82m zcma6JI-`udWi2f&6RmBU^Qhn<18}=pLySCr4dbw@nmzz^XFm(BRqMM-L**!RgB>uv zy0uv2`&VydG9GTsW->~*>;zIe1}@bE8wWQq0f>ZF1C^HjiAN+6dl@k|VX?-_{ zfJD)bmg&l~XZz7dtS0Ml@7^06Ob{d$@Dq&9jGYUfsGrKaI0ym@4FoY_qw$2d@OJm> zfN>!*&*fD5@uM1rjj|cCc!EH1dU`tC@&^(%|5#XAabe6#sy+v*qI$l;yEeFiyK)BW zpM@$k9Y&ix10Az&5jy2f$`Lz9$C}d;Tlw_QP}sgc*N~%uzaZZTEc8)j<(q6YSAWCJ zOoP5*T|LMHl2o{Byv92G)Z-O4W)FXUBDdxjK;XKG&&SU0+q-uyTGKktSR5X+MroKx z^kv+B8%NAD)6;V#4*z`htW+qovJ*ITU8o|u)UE+y;CPFzF>i^9iSa`!;7UEKt{&Dt zGLq)x0XpFqB(9@yl~tI-0m?nCa~nL|g|FWcxp$gukZd}{eL&vKLa;ccPfVvK80=D> za6w)*EcWDr-B!|bMx8i>>$0%Jn)$H>7ko%HtCoQnSusjv{5suYe0C`!`>VH3nqGD? zrt@A1&|)}7um#7)52WRK;KFqig2KYvHtiDMLvwU4yBZ1Qah57*J@!3&G!XdXicv|qDyEZRzDcT-a_NgYNC@O^E*(%(w)38@c@ozGm-^L0=Lvjs&;T2 zWXh$~`M>s`7@Zp=vVdm9Ydp}$-&df~+yke?MkXQkpMy-46)RQ$Clh^Wb2T4E z6^GnTtDc;iQh>GV8#IOS&e^>*D@aj9Mm7_pH8`%KQU=Z9rPsVmf|bKuo(Cpzz;A=f z=QJn~BI9z%r_5YIoczY5P2t>LURg=VY16Q3Py*O8WKPaIckYn+Ln5@H9q$l^XEdVF zn0UKa$&wjHDhk-8>ufalmylZb>Eytz2odB4`efourdhvU4xx<^gHU)ii2VgkHFX$E zxD2@H6C!IU#GDA{+UkL?Nh@)*Jm>zbwYRs=bD!APm}|?Q_)x}28bJdu+Dh``K$>`Z zq_{WuHZmYfQBqQRgCxcf`3);(2F|t0ZSo8gZ`EWi&$D#MyB!*i9p z@&@K^h?NsRV9&mN9Z;=Efa4RFRYuFkEG{qy1T2AsW57!sg^i7j6@uvrnmu4ttpDrd zmj90S67K`jE>2F@k!DYfO925v(po)?f(7y$=DU_6UbgGSY*6! zacL$7m_L&C((B$>cVtej4uV}@Ymo%3tyf_`h742M*2W4%zP%mu*!p{RD#Nj(u!(S3mi<}vPviu7}X(TA&Uc+~1z^aK8t~27g;*rrf)C7N6 zZYdNphm3FR1ZE@lUmOXzr|c&Ov`GXJWDJcxn-6oAk3lID%tH*#aC)`lBN5_9a1eoX z_D#1QavwMIlgqZ~%}XKfieF{^=b+nS21gDR_}A!YCiZw!eT!x1m-*v{?xLY;g0Zw=omOFO~!Jz z)6ubS5&>X)Zby@GYuOO%y2;EOj$ROP^b`vE z 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

r3&+3WUFyUK<%HVBKYoGC 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 C3yd!S literal 0 HcmV?d00001 diff --git a/benchmark/results/perf_fast_poll_20260929/wait_breakdown.csv b/benchmark/results/perf_fast_poll_20260929/wait_breakdown.csv new file mode 100644 index 0000000000..2ee174855e --- /dev/null +++ b/benchmark/results/perf_fast_poll_20260929/wait_breakdown.csv @@ -0,0 +1,31 @@ +case_name,baseline_wait_seconds,baseline_server_jobs_seconds,fast_wait_seconds,fast_server_jobs_seconds +ExampleColocalization,7.458973863627762,6.971804141998291,7.183346257079393,7.154270172119141 +ExampleCometAssay,5.775292431004345,5.588053226470947,5.628505366388708,5.566940784454346 +ExampleFly,5.800650177989155,5.160991430282593,5.209190128836781,5.153711557388306 +ExampleFlyURL,4.10841123200953,3.727818727493286,3.872411630116403,3.8192317485809326 +ExampleHuman,4.568803396075964,3.8546557426452637,3.8820209708064795,3.838071823120117 +ExampleIlluminationCorrection_Example1_AllMethod,5.6383416866883636,5.277345180511475,5.416271521244198,5.38864541053772 +ExampleIlluminationCorrection_Example1_EachMethod,3.0766169033013284,2.621954917907715,2.6584986713714898,2.6187069416046143 +ExampleIlluminationCorrection_Example2,5.088365746196359,4.675433874130249,4.688320747110993,4.6753950119018555 +ExampleIlluminationCorrection_Example3,4.1549204853363335,3.799920082092285,3.8466997016221285,3.7932605743408203 +ExampleImagingFlowCytometryObjectsInGrid,24.878548303619027,24.631866693496704,25.122180372010916,25.05275845527649 +ExampleNeighbors,4.077288782224059,3.7803969383239746,3.8659362476319075,3.8364622592926025 +ExamplePercentPositive,3.2204895354807377,2.8722169399261475,3.1132358335889876,3.0202531814575195 +ExampleSpeckles,3.6545920688658953,3.145731210708618,3.2000916688703,3.134620428085327 +ExampleTrackObjects,6.086732611991465,5.652193069458008,6.109515583142638,6.03714394569397 +ExampleTumor,3.5489941192790866,3.1012332439422607,3.159094935748726,3.101698398590088 +ExampleUntangleAndStraightenWorms,4.637174046598375,4.248164653778076,4.2648476851172745,4.23914361000061 +ExampleUntangleWorms,5.870146865956485,5.406447410583496,5.343424811493605,5.279308795928955 +ExampleUntangleWormsBrightField,7.731790717225522,7.032237768173218,6.983187755569816,6.928363561630249 +ExampleVitra,4.6149715930223465,4.151696681976318,4.287284792866558,4.2558274269104 +ExampleWoundHealing,3.6667584315873682,3.48883056640625,3.7486501671373844,3.6789398193359375 +ExampleYeastColonies,6.276017351541668,5.319963693618774,5.3627080311998725,5.303315162658691 +ExampleYeastPatches,6.674209529999644,5.8515942096710205,5.877112004905939,5.83678936958313 +cp4_supplement_combine_objects,2.586142251268029,2.160597324371338,2.2017467822879553,2.158442735671997 +cp_tutorial_3d_monolayer,13.77482473757118,13.714367389678955,14.104768510442227,14.064464807510376 +cp_tutorial_advanced_segmentation_final,16.04488993808627,15.206478595733643,14.99068406643346,14.960619449615479 +cp_tutorial_beginner_segmentation_final,10.774854160379618,9.940781831741333,9.997978130821139,9.929355144500732 +cp_tutorial_pixel_based_classification,3.5643112482503057,3.1968584060668945,3.2659096368588507,3.2102487087249756 +cp_tutorial_quality_control,3.1354477154091,2.5399677753448486,2.6483420259319246,2.6203436851501465 +cp_tutorial_translocation_final,3.715478392317891,3.5193140506744385,3.52000420819968,3.431901216506958 +cp_tutorial_translocation_start,2.6000353237614036,2.338603973388672,2.4278075890615582,2.3375260829925537 diff --git a/openhcs/runtime/zmq_execution_client.py b/openhcs/runtime/zmq_execution_client.py index 52b8db5b0f..3f671f197e 100644 --- a/openhcs/runtime/zmq_execution_client.py +++ b/openhcs/runtime/zmq_execution_client.py @@ -83,6 +83,8 @@ logger = logging.getLogger(__name__) +_COMPILED_PIPELINE_POLL_INTERVAL_SECONDS = 0.05 + ZMQScalar: TypeAlias = str | int | float | bool | None ZMQValue: TypeAlias = ZMQScalar | Mapping[str, "ZMQValue"] | Sequence["ZMQValue"] @@ -332,7 +334,10 @@ def phase_scope(phase: ZMQPipelineRunPhase) -> AbstractContextManager[None]: "OpenHCS ZMQ compile submission" ) with phase_scope(ZMQPipelineRunPhase.WAIT_COMPILE): - compile_wait_response = client.wait_for_completion(compile_artifact_id) + compile_wait_response = client.wait_for_completion( + compile_artifact_id, + poll_interval=_COMPILED_PIPELINE_POLL_INTERVAL_SECONDS, + ) ExecutionWaitResult.from_wire(compile_wait_response).require_complete( "OpenHCS ZMQ compilation failed" ) @@ -350,7 +355,10 @@ def phase_scope(phase: ZMQPipelineRunPhase) -> AbstractContextManager[None]: "OpenHCS ZMQ execution submission" ) with phase_scope(ZMQPipelineRunPhase.WAIT_EXECUTION): - completion_response = client.wait_for_completion(execution_id) + completion_response = client.wait_for_completion( + execution_id, + poll_interval=_COMPILED_PIPELINE_POLL_INTERVAL_SECONDS, + ) completion_observed_at = time.time() ExecutionWaitResult.from_wire(completion_response).require_complete( "OpenHCS ZMQ execution failed" diff --git a/tests/unit/test_openhcs_adapter.py b/tests/unit/test_openhcs_adapter.py index 3219354f5b..383c8d8fbe 100644 --- a/tests/unit/test_openhcs_adapter.py +++ b/tests/unit/test_openhcs_adapter.py @@ -286,7 +286,7 @@ def submit_pipeline(self, submission): assert submission.compile_artifact_id == "compile-1" return {"status": "accepted", "execution_id": "exec-1"} - def wait_for_completion(self, execution_id): + def wait_for_completion(self, execution_id, poll_interval=0.5): self.waits.append(execution_id) if execution_id == "compile-1": return { diff --git a/tests/unit/test_openhcs_measured_run.py b/tests/unit/test_openhcs_measured_run.py index b4ec0e0779..d01a215d92 100644 --- a/tests/unit/test_openhcs_measured_run.py +++ b/tests/unit/test_openhcs_measured_run.py @@ -86,7 +86,7 @@ def submit_pipeline(self, submitted): ) return {"status": "accepted", "execution_id": "execute-1"} - def wait_for_completion(self, execution_id): + def wait_for_completion(self, execution_id, poll_interval=0.5): if execution_id == "execute-1": observation_path.touch() return { @@ -235,7 +235,7 @@ def submit_pipeline(self, submission): "execution_id": f"execute-{self.run_number}", } - def wait_for_completion(self, execution_id): + def wait_for_completion(self, execution_id, poll_interval=0.5): if execution_id.startswith("compile-"): observer({"phase": "compile", "status": "success", "timestamp": 10.5}) else: diff --git a/tests/unit/test_zmq_compiled_pipeline_run.py b/tests/unit/test_zmq_compiled_pipeline_run.py index dc5122d352..3aa8b2f3ea 100644 --- a/tests/unit/test_zmq_compiled_pipeline_run.py +++ b/tests/unit/test_zmq_compiled_pipeline_run.py @@ -37,7 +37,8 @@ def submit_pipeline(self, submission): self.execution_submission = submission return {"status": "accepted", "execution_id": "execute-1"} - def wait_for_completion(self, execution_id): + def wait_for_completion(self, execution_id, poll_interval=0.5): + assert poll_interval == 0.05 self.events.append(f"wait:{execution_id}") return { "status": ( @@ -99,8 +100,8 @@ def observe(phase): def test_compiled_pipeline_run_owns_completion_result_projection(): class ClientWithResults(FakeExecutionClient): - def wait_for_completion(self, execution_id): - response = super().wait_for_completion(execution_id) + def wait_for_completion(self, execution_id, poll_interval=0.5): + response = super().wait_for_completion(execution_id, poll_interval) if execution_id == "execute-1": response["results"] = {"output_plate_root": "/output/plate"} return response @@ -113,8 +114,8 @@ def wait_for_completion(self, execution_id): def test_compiled_pipeline_run_accepts_legacy_result_summary_field(): class ClientWithLegacyResults(FakeExecutionClient): - def wait_for_completion(self, execution_id): - response = super().wait_for_completion(execution_id) + def wait_for_completion(self, execution_id, poll_interval=0.5): + response = super().wait_for_completion(execution_id, poll_interval) if execution_id == "execute-1": response["results_summary"] = {"output_plate_root": "/legacy/plate"} return response