diff --git a/examples/mercurymesh_pipeline.py b/examples/mercurymesh_pipeline.py new file mode 100644 index 0000000..993c07f --- /dev/null +++ b/examples/mercurymesh_pipeline.py @@ -0,0 +1,38 @@ +from __future__ import annotations + +import datetime +from mercurymesh.contracts import MarketSignal, AggregatedSignal +from mercurymesh.adapters.venue_a import VenueAAdapter +from mercurymesh.adapters.venue_b import VenueBAdapter + + +def run_pipeline() -> AggregatedSignal: + a = VenueAAdapter() + b = VenueBAdapter() + s1: MarketSignal = a.extract_signal() + s2: MarketSignal = b.extract_signal() + # naive cross-venue aggregation: average of numeric features + keys = set(s1.features.keys()) | set(s2.features.keys()) + avg: dict = {} + for k in keys: + v1 = s1.features.get(k, 0.0) + v2 = s2.features.get(k, 0.0) + avg[k] = float((v1 + v2) / 2.0) + agg = AggregatedSignal( + venues=[s1.venue_id, s2.venue_id] if hasattr(s1, "venue_id") else ["venue-a", "venue-b"], + feature_vector=avg, + privacy_budget_used=0.0, + nonce="pipeline-run-" + datetime.datetime.utcnow().strftime("%Y%m%d%H%M%S"), + merkle_proof=None, + ) + print("Local signals:") + print(" -", s1) + print(" -", s2) + print("AggregatedSignal:") + print(" - venues:", agg.venues) + print(" - features:", agg.feature_vector) + return agg + + +if __name__ == "__main__": + run_pipeline()