39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
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()
|