synpath 0.2.0__tar.gz → 0.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. synpath-0.3.1/Cargo.toml +19 -0
  2. {synpath-0.2.0 → synpath-0.3.1}/PKG-INFO +42 -35
  3. {synpath-0.2.0 → synpath-0.3.1}/README.md +12 -2
  4. synpath-0.3.1/bindings/python/Cargo.lock +551 -0
  5. synpath-0.3.1/bindings/python/Cargo.toml +20 -0
  6. synpath-0.3.1/bindings/python/src/kalshi.rs +175 -0
  7. synpath-0.3.1/bindings/python/src/lib.rs +403 -0
  8. synpath-0.3.1/bindings/python/src/objects.rs +158 -0
  9. synpath-0.3.1/bindings/python/src/polymarket.rs +394 -0
  10. synpath-0.3.1/bindings/python/src/pyjson.rs +41 -0
  11. synpath-0.3.1/bindings/python/src/router.rs +184 -0
  12. synpath-0.3.1/bindings/python/src/signing.rs +195 -0
  13. synpath-0.3.1/bindings/python/src/venues.rs +110 -0
  14. synpath-0.3.1/build_backend/synpath_build.py +80 -0
  15. synpath-0.3.1/crates/synpath-core/Cargo.lock +474 -0
  16. synpath-0.3.1/crates/synpath-core/Cargo.toml +16 -0
  17. synpath-0.3.1/crates/synpath-core/examples/decode_timing.rs +48 -0
  18. synpath-0.3.1/crates/synpath-core/src/book.rs +235 -0
  19. synpath-0.3.1/crates/synpath-core/src/kalshi.rs +169 -0
  20. synpath-0.3.1/crates/synpath-core/src/lib.rs +18 -0
  21. synpath-0.3.1/crates/synpath-core/src/opinion.rs +63 -0
  22. synpath-0.3.1/crates/synpath-core/src/polymarket.rs +241 -0
  23. synpath-0.3.1/crates/synpath-core/src/polymarket_us.rs +78 -0
  24. synpath-0.3.1/crates/synpath-core/src/router.rs +238 -0
  25. synpath-0.3.1/crates/synpath-core/src/signing.rs +371 -0
  26. synpath-0.3.1/crates/synpath-core/src/wire.rs +241 -0
  27. {synpath-0.2.0 → synpath-0.3.1}/pyproject.toml +18 -5
  28. {synpath-0.2.0 → synpath-0.3.1}/synpath/__init__.py +1 -1
  29. synpath-0.3.1/synpath/_native.py +32 -0
  30. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/router.py +82 -14
  31. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/opinion_signing.py +11 -0
  32. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/polymarket_signing.py +46 -1
  33. {synpath-0.2.0 → synpath-0.3.1}/synpath/ws/base.py +27 -7
  34. {synpath-0.2.0 → synpath-0.3.1}/synpath/ws/kalshi.py +34 -1
  35. {synpath-0.2.0 → synpath-0.3.1}/synpath/ws/opinion.py +28 -1
  36. {synpath-0.2.0 → synpath-0.3.1}/synpath/ws/polymarket.py +28 -1
  37. {synpath-0.2.0 → synpath-0.3.1}/synpath/ws/polymarket_us.py +22 -4
  38. synpath-0.2.0/.env.example +0 -47
  39. synpath-0.2.0/.github/workflows/publish.yml +0 -48
  40. synpath-0.2.0/.github/workflows/tests.yml +0 -21
  41. synpath-0.2.0/.gitignore +0 -12
  42. synpath-0.2.0/assets/kalshi.png +0 -0
  43. synpath-0.2.0/assets/polymarket.png +0 -0
  44. synpath-0.2.0/assets/synpath-banner.png +0 -0
  45. synpath-0.2.0/clients/typescript/.gitignore +0 -5
  46. synpath-0.2.0/clients/typescript/example.ts +0 -77
  47. synpath-0.2.0/clients/typescript/package.json +0 -20
  48. synpath-0.2.0/clients/typescript/tsconfig.json +0 -11
  49. synpath-0.2.0/docs/api.md +0 -279
  50. synpath-0.2.0/docs/capabilities.md +0 -111
  51. synpath-0.2.0/docs/engine.md +0 -358
  52. synpath-0.2.0/docs/server.md +0 -146
  53. synpath-0.2.0/docs/streaming.md +0 -247
  54. synpath-0.2.0/docs/trading.md +0 -348
  55. synpath-0.2.0/examples/track_historical_book.py +0 -222
  56. synpath-0.2.0/tests/conftest.py +0 -143
  57. synpath-0.2.0/tests/samples/kalshi_candles.json +0 -1
  58. synpath-0.2.0/tests/samples/kalshi_events.json +0 -1
  59. synpath-0.2.0/tests/samples/kalshi_orderbook.json +0 -1
  60. synpath-0.2.0/tests/samples/kalshi_series.json +0 -1
  61. synpath-0.2.0/tests/samples/kalshi_trades.json +0 -1
  62. synpath-0.2.0/tests/samples/kalshi_trading_delete_events_orders.json +0 -1
  63. synpath-0.2.0/tests/samples/kalshi_trading_delete_events_orders_batched.json +0 -14
  64. synpath-0.2.0/tests/samples/kalshi_trading_delete_events_orders_id.json +0 -5
  65. synpath-0.2.0/tests/samples/kalshi_trading_delete_order_groups_id.json +0 -1
  66. synpath-0.2.0/tests/samples/kalshi_trading_get_account_endpoint_costs.json +0 -90
  67. synpath-0.2.0/tests/samples/kalshi_trading_get_account_limits.json +0 -12
  68. synpath-0.2.0/tests/samples/kalshi_trading_get_balance.json +0 -24
  69. synpath-0.2.0/tests/samples/kalshi_trading_get_fills.json +0 -25
  70. synpath-0.2.0/tests/samples/kalshi_trading_get_markets.json +0 -11805
  71. synpath-0.2.0/tests/samples/kalshi_trading_get_order_groups_id.json +0 -6
  72. synpath-0.2.0/tests/samples/kalshi_trading_get_orders.json +0 -136
  73. synpath-0.2.0/tests/samples/kalshi_trading_get_orders_id.json +0 -28
  74. synpath-0.2.0/tests/samples/kalshi_trading_get_orders_id_queue_position.json +0 -3
  75. synpath-0.2.0/tests/samples/kalshi_trading_get_positions.json +0 -25
  76. synpath-0.2.0/tests/samples/kalshi_trading_get_series_id.json +0 -39
  77. synpath-0.2.0/tests/samples/kalshi_trading_get_settlements.json +0 -4
  78. synpath-0.2.0/tests/samples/kalshi_trading_post_events_orders.json +0 -7
  79. synpath-0.2.0/tests/samples/kalshi_trading_post_events_orders_batched.json +0 -18
  80. synpath-0.2.0/tests/samples/kalshi_trading_post_events_orders_id_amend.json +0 -5
  81. synpath-0.2.0/tests/samples/kalshi_trading_post_events_orders_id_decrease.json +0 -5
  82. synpath-0.2.0/tests/samples/kalshi_trading_post_order_groups_create.json +0 -5
  83. synpath-0.2.0/tests/samples/kalshi_trading_put_order_groups_id_reset.json +0 -1
  84. synpath-0.2.0/tests/samples/kalshi_trading_put_order_groups_id_trigger.json +0 -1
  85. synpath-0.2.0/tests/samples/opinion_book.json +0 -1
  86. synpath-0.2.0/tests/samples/opinion_book_no.json +0 -1
  87. synpath-0.2.0/tests/samples/opinion_categorical.json +0 -1
  88. synpath-0.2.0/tests/samples/opinion_child.json +0 -1
  89. synpath-0.2.0/tests/samples/opinion_fee_rate_call.json +0 -1
  90. synpath-0.2.0/tests/samples/opinion_latest_price.json +0 -1
  91. synpath-0.2.0/tests/samples/opinion_market.json +0 -1
  92. synpath-0.2.0/tests/samples/opinion_markets.json +0 -1
  93. synpath-0.2.0/tests/samples/opinion_not_found.json +0 -1
  94. synpath-0.2.0/tests/samples/opinion_prices_1d.json +0 -1
  95. synpath-0.2.0/tests/samples/opinion_prices_1h.json +0 -1
  96. synpath-0.2.0/tests/samples/opinion_resolved.json +0 -1
  97. synpath-0.2.0/tests/samples/opinion_signing_vectors.json +0 -96
  98. synpath-0.2.0/tests/samples/poly_book.json +0 -1
  99. synpath-0.2.0/tests/samples/poly_events.json +0 -1
  100. synpath-0.2.0/tests/samples/poly_market.json +0 -1
  101. synpath-0.2.0/tests/samples/poly_prices.json +0 -1
  102. synpath-0.2.0/tests/samples/poly_search.json +0 -1
  103. synpath-0.2.0/tests/samples/poly_trades.json +0 -1
  104. synpath-0.2.0/tests/samples/polymarket_signing_vectors.json +0 -9430
  105. synpath-0.2.0/tests/samples/polyus_bbo.json +0 -51
  106. synpath-0.2.0/tests/samples/polyus_book.json +0 -250
  107. synpath-0.2.0/tests/samples/polyus_closed_market.json +0 -133
  108. synpath-0.2.0/tests/samples/polyus_events.json +0 -2813
  109. synpath-0.2.0/tests/samples/polyus_market.json +0 -154
  110. synpath-0.2.0/tests/samples/polyus_prices.json +0 -29
  111. synpath-0.2.0/tests/samples/polyus_search.json +0 -364
  112. synpath-0.2.0/tests/samples/polyus_series.json +0 -26
  113. synpath-0.2.0/tests/samples/polyus_settlement.json +0 -5
  114. synpath-0.2.0/tests/samples/ws/kalshi_demo_transcript.jsonl +0 -208
  115. synpath-0.2.0/tests/samples/ws/polymarket_market_transcript.jsonl +0 -133
  116. synpath-0.2.0/tests/test_client.py +0 -171
  117. synpath-0.2.0/tests/test_contract.py +0 -867
  118. synpath-0.2.0/tests/test_engine.py +0 -685
  119. synpath-0.2.0/tests/test_engine_demo.py +0 -192
  120. synpath-0.2.0/tests/test_engine_orders.py +0 -593
  121. synpath-0.2.0/tests/test_engine_orders_demo.py +0 -258
  122. synpath-0.2.0/tests/test_feeds.py +0 -249
  123. synpath-0.2.0/tests/test_history_tracker.py +0 -86
  124. synpath-0.2.0/tests/test_history_types.py +0 -60
  125. synpath-0.2.0/tests/test_hosted.py +0 -155
  126. synpath-0.2.0/tests/test_hosted_auth.py +0 -32
  127. synpath-0.2.0/tests/test_init.py +0 -126
  128. synpath-0.2.0/tests/test_journal_v3.py +0 -166
  129. synpath-0.2.0/tests/test_kalshi.py +0 -1249
  130. synpath-0.2.0/tests/test_kalshi_demo.py +0 -285
  131. synpath-0.2.0/tests/test_kalshi_trading.py +0 -561
  132. synpath-0.2.0/tests/test_live.py +0 -536
  133. synpath-0.2.0/tests/test_opinion.py +0 -430
  134. synpath-0.2.0/tests/test_opinion_live.py +0 -103
  135. synpath-0.2.0/tests/test_opinion_trading.py +0 -414
  136. synpath-0.2.0/tests/test_opinion_ws.py +0 -324
  137. synpath-0.2.0/tests/test_opinion_ws_live.py +0 -92
  138. synpath-0.2.0/tests/test_polymarket.py +0 -639
  139. synpath-0.2.0/tests/test_polymarket_trading.py +0 -810
  140. synpath-0.2.0/tests/test_polymarket_us.py +0 -562
  141. synpath-0.2.0/tests/test_polymarket_us_trading.py +0 -624
  142. synpath-0.2.0/tests/test_remote_client.py +0 -231
  143. synpath-0.2.0/tests/test_risk_duplicates.py +0 -42
  144. synpath-0.2.0/tests/test_routed_limit.py +0 -332
  145. synpath-0.2.0/tests/test_routed_recovery.py +0 -176
  146. synpath-0.2.0/tests/test_router.py +0 -197
  147. synpath-0.2.0/tests/test_serve.py +0 -176
  148. synpath-0.2.0/tests/test_server.py +0 -430
  149. synpath-0.2.0/tests/test_server_trading.py +0 -616
  150. synpath-0.2.0/tests/test_trading_foundations.py +0 -395
  151. synpath-0.2.0/tests/test_venue_errors.py +0 -39
  152. synpath-0.2.0/tests/test_ws.py +0 -720
  153. synpath-0.2.0/tests/test_ws_grpc.py +0 -659
  154. synpath-0.2.0/tests/test_ws_live.py +0 -112
  155. {synpath-0.2.0 → synpath-0.3.1}/LICENSE +0 -0
  156. {synpath-0.2.0 → synpath-0.3.1}/synpath/__main__.py +0 -0
  157. {synpath-0.2.0 → synpath-0.3.1}/synpath/base.py +0 -0
  158. {synpath-0.2.0 → synpath-0.3.1}/synpath/bucket.py +0 -0
  159. {synpath-0.2.0 → synpath-0.3.1}/synpath/client.py +0 -0
  160. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/__init__.py +0 -0
  161. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/__main__.py +0 -0
  162. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/alerts.py +0 -0
  163. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/engine.py +0 -0
  164. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/eod.py +0 -0
  165. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/events.py +0 -0
  166. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/fair_values.py +0 -0
  167. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/feeds.py +0 -0
  168. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/journal.py +0 -0
  169. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/ledger.py +0 -0
  170. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/orders/__init__.py +0 -0
  171. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/orders/base.py +0 -0
  172. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/orders/day.py +0 -0
  173. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/orders/iceberg.py +0 -0
  174. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/orders/manager.py +0 -0
  175. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/orders/oco.py +0 -0
  176. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/orders/peg.py +0 -0
  177. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/orders/routed.py +0 -0
  178. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/orders/stop.py +0 -0
  179. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/orders/taker.py +0 -0
  180. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/orders/twap.py +0 -0
  181. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/paper.py +0 -0
  182. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/reconcile.py +0 -0
  183. {synpath-0.2.0 → synpath-0.3.1}/synpath/engine/risk.py +0 -0
  184. {synpath-0.2.0 → synpath-0.3.1}/synpath/errors.py +0 -0
  185. {synpath-0.2.0 → synpath-0.3.1}/synpath/history.py +0 -0
  186. {synpath-0.2.0 → synpath-0.3.1}/synpath/hosted.py +0 -0
  187. {synpath-0.2.0 → synpath-0.3.1}/synpath/hosted_auth.py +0 -0
  188. {synpath-0.2.0 → synpath-0.3.1}/synpath/ids.py +0 -0
  189. {synpath-0.2.0 → synpath-0.3.1}/synpath/kalshi.py +0 -0
  190. {synpath-0.2.0 → synpath-0.3.1}/synpath/matching.py +0 -0
  191. {synpath-0.2.0 → synpath-0.3.1}/synpath/opinion.py +0 -0
  192. {synpath-0.2.0 → synpath-0.3.1}/synpath/polymarket.py +0 -0
  193. {synpath-0.2.0 → synpath-0.3.1}/synpath/polymarket_us.py +0 -0
  194. {synpath-0.2.0 → synpath-0.3.1}/synpath/remote.py +0 -0
  195. {synpath-0.2.0 → synpath-0.3.1}/synpath/server/__init__.py +0 -0
  196. {synpath-0.2.0 → synpath-0.3.1}/synpath/server/__main__.py +0 -0
  197. {synpath-0.2.0 → synpath-0.3.1}/synpath/server/api.py +0 -0
  198. {synpath-0.2.0 → synpath-0.3.1}/synpath/server/errors.py +0 -0
  199. {synpath-0.2.0 → synpath-0.3.1}/synpath/server/local.py +0 -0
  200. {synpath-0.2.0 → synpath-0.3.1}/synpath/server/models.py +0 -0
  201. {synpath-0.2.0 → synpath-0.3.1}/synpath/server/serve.py +0 -0
  202. {synpath-0.2.0 → synpath-0.3.1}/synpath/server/store.py +0 -0
  203. {synpath-0.2.0 → synpath-0.3.1}/synpath/server/trading.py +0 -0
  204. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/__init__.py +0 -0
  205. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/__main__.py +0 -0
  206. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/base.py +0 -0
  207. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/credentials.py +0 -0
  208. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/errors.py +0 -0
  209. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/init.py +0 -0
  210. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/instruments.py +0 -0
  211. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/kalshi.py +0 -0
  212. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/limiter.py +0 -0
  213. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/money.py +0 -0
  214. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/opinion.py +0 -0
  215. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/polymarket.py +0 -0
  216. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/polymarket_us.py +0 -0
  217. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/polymarket_us_exchange.py +0 -0
  218. {synpath-0.2.0 → synpath-0.3.1}/synpath/trading/types.py +0 -0
  219. {synpath-0.2.0 → synpath-0.3.1}/synpath/types.py +0 -0
  220. {synpath-0.2.0 → synpath-0.3.1}/synpath/ws/__init__.py +0 -0
  221. {synpath-0.2.0 → synpath-0.3.1}/synpath/ws/grpc.py +0 -0
  222. {synpath-0.2.0 → synpath-0.3.1}/synpath/ws/polymarket_us_exchange.py +0 -0
@@ -0,0 +1,19 @@
1
+ # The Rust core under the Python API.
2
+ #
3
+ # crates/synpath-core pure Rust: no I/O, no Python. The hot paths live here.
4
+ # bindings/python PyO3 wrappers, built by maturin into `synpath._core`.
5
+ #
6
+ # Every piece here has a pure-Python twin in `synpath/`, and the test suite runs
7
+ # against both, so the two cannot drift apart.
8
+ [workspace]
9
+ members = ["crates/synpath-core", "bindings/python"]
10
+ resolver = "2"
11
+
12
+ [workspace.package]
13
+ edition = "2021"
14
+ license = "MIT"
15
+ repository = "https://github.com/Synpath-ai/synpath"
16
+
17
+ [profile.release]
18
+ lto = "fat"
19
+ codegen-units = 1
@@ -1,52 +1,48 @@
1
- Metadata-Version: 2.5
1
+ Metadata-Version: 2.4
2
2
  Name: synpath
3
- Version: 0.2.0
4
- Summary: One API for prediction markets. Kalshi and Polymarket, normalized, with every price labelled by source and time.
5
- Project-URL: Homepage, https://synpath.dev
6
- Project-URL: Documentation, https://synpath.dev/docs
7
- Project-URL: Repository, https://github.com/Synpath-ai/synpath
8
- Project-URL: Issues, https://github.com/Synpath-ai/synpath/issues
9
- Project-URL: Discord, https://synpath.dev/discord
10
- Author: Synpath
11
- License: MIT
12
- License-File: LICENSE
13
- Keywords: kalshi,market-data,polymarket,prediction-markets,trading,unified-api
3
+ Version: 0.3.1
14
4
  Classifier: Development Status :: 3 - Alpha
15
5
  Classifier: Intended Audience :: Financial and Insurance Industry
16
6
  Classifier: License :: OSI Approved :: MIT License
17
7
  Classifier: Programming Language :: Python :: 3
18
8
  Classifier: Topic :: Office/Business :: Financial
19
- Requires-Python: >=3.10
20
- Requires-Dist: aiosqlite>=0.20
21
- Requires-Dist: cryptography>=42
22
- Requires-Dist: eth-account>=0.13
23
- Requires-Dist: fastapi>=0.110
24
9
  Requires-Dist: httpx>=0.27
25
10
  Requires-Dist: pydantic>=2.6
11
+ Requires-Dist: cryptography>=42
12
+ Requires-Dist: eth-account>=0.13
26
13
  Requires-Dist: pyjwt[crypto]>=2.8
27
- Requires-Dist: tomli>=2.0; python_version < '3.11'
28
- Requires-Dist: uvicorn[standard]>=0.27
29
14
  Requires-Dist: websockets>=13
15
+ Requires-Dist: aiosqlite>=0.20
16
+ Requires-Dist: fastapi>=0.110
17
+ Requires-Dist: uvicorn[standard]>=0.27
18
+ Requires-Dist: tomli>=2.0 ; python_full_version < '3.11'
19
+ Requires-Dist: pytest>=8 ; extra == 'dev'
20
+ Requires-Dist: respx>=0.21 ; extra == 'dev'
21
+ Requires-Dist: anyio>=4 ; extra == 'dev'
22
+ Requires-Dist: synpath[grpc] ; extra == 'dev'
23
+ Requires-Dist: grpcio>=1.60 ; extra == 'grpc'
24
+ Requires-Dist: grpcio-tools>=1.60 ; extra == 'grpc'
25
+ Requires-Dist: protobuf>=5.26 ; extra == 'grpc'
26
+ Requires-Dist: pyjwt[crypto]>=2.8 ; extra == 'grpc'
27
+ Requires-Dist: cryptography>=42 ; extra == 'grpc'
30
28
  Provides-Extra: dev
31
- Requires-Dist: anyio>=4; extra == 'dev'
32
- Requires-Dist: cryptography>=42; extra == 'dev'
33
- Requires-Dist: grpcio-tools>=1.60; extra == 'dev'
34
- Requires-Dist: grpcio>=1.60; extra == 'dev'
35
- Requires-Dist: protobuf>=5.26; extra == 'dev'
36
- Requires-Dist: pyjwt[crypto]>=2.8; extra == 'dev'
37
- Requires-Dist: pytest>=8; extra == 'dev'
38
- Requires-Dist: respx>=0.21; extra == 'dev'
39
29
  Provides-Extra: engine
40
30
  Provides-Extra: grpc
41
- Requires-Dist: cryptography>=42; extra == 'grpc'
42
- Requires-Dist: grpcio-tools>=1.60; extra == 'grpc'
43
- Requires-Dist: grpcio>=1.60; extra == 'grpc'
44
- Requires-Dist: protobuf>=5.26; extra == 'grpc'
45
- Requires-Dist: pyjwt[crypto]>=2.8; extra == 'grpc'
46
31
  Provides-Extra: server
47
32
  Provides-Extra: trading
48
33
  Provides-Extra: ws
49
- Description-Content-Type: text/markdown
34
+ License-File: LICENSE
35
+ Summary: One API for prediction markets. Kalshi and Polymarket, normalized, with every price labelled by source and time.
36
+ Keywords: prediction-markets,kalshi,polymarket,unified-api,trading,market-data
37
+ Author: Synpath
38
+ License: MIT
39
+ Requires-Python: >=3.10
40
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
41
+ Project-URL: Discord, https://synpath.dev/discord
42
+ Project-URL: Documentation, https://synpath.dev/docs
43
+ Project-URL: Homepage, https://synpath.dev
44
+ Project-URL: Issues, https://github.com/Synpath-ai/synpath/issues
45
+ Project-URL: Repository, https://github.com/Synpath-ai/synpath
50
46
 
51
47
  <div align="center">
52
48
 
@@ -66,6 +62,8 @@ One open-source API across Kalshi, Polymarket, Polymarket US and Opinion: market
66
62
  **🆕 New: Smart order routing across Kalshi and Polymarket.**<br/>
67
63
  One order, both order books combined, filled from the cheapest price after fees. **[See how it works →](https://www.synpath.dev/docs/concepts/buckets)**
68
64
 
65
+ ⭐ **If Synpath saves you time, [star it on GitHub](https://github.com/Synpath-ai/synpath).** It's how other traders find it.
66
+
69
67
  ---
70
68
 
71
69
  ## Supported Exchanges
@@ -92,7 +90,7 @@ pip install synpath # market data, order entry, streams, the engine
92
90
  pip install "synpath[grpc]" # + Polymarket US exchange gRPC streams
93
91
  ```
94
92
 
95
- Python 3.10 or newer.
93
+ Python 3.10 or newer. The hot paths (order books, reading the venues' book streams, order signing and the order router) run on a Rust core that ships prebuilt inside the wheel for Linux, macOS and Windows; nothing else to install.
96
94
 
97
95
  **Hosted API.** Run `synpath login`, then `synpath keys create`. It serves tick-level Kalshi order book and trade history, and cross-venue market matching. Trading stays on your machine: Synpath never holds your keys or funds.
98
96
 
@@ -205,13 +203,21 @@ See the [API Reference](https://www.synpath.dev/docs) for detailed documentation
205
203
  ```bash
206
204
  git clone https://github.com/Synpath-ai/synpath
207
205
  cd synpath
208
- pip install -e ".[dev]"
206
+ pip install -e ".[dev]" # builds the Rust core too: needs a Rust toolchain (rustup.rs)
209
207
 
210
208
  pytest # offline, against recorded venue payloads
211
209
  pytest -m live # market data against the real venues
212
210
  pytest -m demo # order entry on a venue's demo environment
211
+ SYNPATH_PURE_PYTHON=1 pytest # the same tests on the pure-Python fallback
212
+ cargo test -p synpath-core # the Rust core on its own
213
213
  ```
214
214
 
215
+ The Rust core lives in `crates/synpath-core` (pure Rust) and
216
+ `bindings/python` (its PyO3 wrapper, built as `synpath._core`). Every class
217
+ it provides has a pure-Python twin with the same interface, and the library
218
+ uses the twin when the extension is not built. Venue adapters are plain
219
+ Python: adding a venue needs no Rust.
220
+
215
221
  The `demo` tests place and cancel real orders on a demo exchange with the
216
222
  credentials in your environment, and leave the account flat. `python -m
217
223
  synpath.trading doctor` says which venues are configured without printing a
@@ -224,3 +230,4 @@ secret.
224
230
  ## License
225
231
 
226
232
  MIT
233
+
@@ -16,6 +16,8 @@ One open-source API across Kalshi, Polymarket, Polymarket US and Opinion: market
16
16
  **🆕 New: Smart order routing across Kalshi and Polymarket.**<br/>
17
17
  One order, both order books combined, filled from the cheapest price after fees. **[See how it works →](https://www.synpath.dev/docs/concepts/buckets)**
18
18
 
19
+ ⭐ **If Synpath saves you time, [star it on GitHub](https://github.com/Synpath-ai/synpath).** It's how other traders find it.
20
+
19
21
  ---
20
22
 
21
23
  ## Supported Exchanges
@@ -42,7 +44,7 @@ pip install synpath # market data, order entry, streams, the engine
42
44
  pip install "synpath[grpc]" # + Polymarket US exchange gRPC streams
43
45
  ```
44
46
 
45
- Python 3.10 or newer.
47
+ Python 3.10 or newer. The hot paths (order books, reading the venues' book streams, order signing and the order router) run on a Rust core that ships prebuilt inside the wheel for Linux, macOS and Windows; nothing else to install.
46
48
 
47
49
  **Hosted API.** Run `synpath login`, then `synpath keys create`. It serves tick-level Kalshi order book and trade history, and cross-venue market matching. Trading stays on your machine: Synpath never holds your keys or funds.
48
50
 
@@ -155,13 +157,21 @@ See the [API Reference](https://www.synpath.dev/docs) for detailed documentation
155
157
  ```bash
156
158
  git clone https://github.com/Synpath-ai/synpath
157
159
  cd synpath
158
- pip install -e ".[dev]"
160
+ pip install -e ".[dev]" # builds the Rust core too: needs a Rust toolchain (rustup.rs)
159
161
 
160
162
  pytest # offline, against recorded venue payloads
161
163
  pytest -m live # market data against the real venues
162
164
  pytest -m demo # order entry on a venue's demo environment
165
+ SYNPATH_PURE_PYTHON=1 pytest # the same tests on the pure-Python fallback
166
+ cargo test -p synpath-core # the Rust core on its own
163
167
  ```
164
168
 
169
+ The Rust core lives in `crates/synpath-core` (pure Rust) and
170
+ `bindings/python` (its PyO3 wrapper, built as `synpath._core`). Every class
171
+ it provides has a pure-Python twin with the same interface, and the library
172
+ uses the twin when the extension is not built. Venue adapters are plain
173
+ Python: adding a venue needs no Rust.
174
+
165
175
  The `demo` tests place and cancel real orders on a demo exchange with the
166
176
  credentials in your environment, and leave the account flat. `python -m
167
177
  synpath.trading doctor` says which venues are configured without printing a