ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__py2.py3-none-any.whl

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 (546) hide show
  1. ccxt/__init__.py +36 -14
  2. ccxt/abstract/alpaca.py +4 -0
  3. ccxt/abstract/bigone.py +1 -1
  4. ccxt/abstract/binance.py +112 -48
  5. ccxt/abstract/binancecoinm.py +112 -48
  6. ccxt/abstract/binanceus.py +147 -83
  7. ccxt/abstract/binanceusdm.py +112 -48
  8. ccxt/abstract/bingx.py +133 -78
  9. ccxt/abstract/bitbank.py +5 -0
  10. ccxt/abstract/bitfinex.py +136 -65
  11. ccxt/abstract/bitfinex1.py +69 -0
  12. ccxt/abstract/bitflyer.py +1 -0
  13. ccxt/abstract/bitget.py +8 -1
  14. ccxt/abstract/bitmart.py +13 -1
  15. ccxt/abstract/bitopro.py +1 -0
  16. ccxt/abstract/bitpanda.py +0 -12
  17. ccxt/abstract/bitrue.py +3 -3
  18. ccxt/abstract/bitstamp.py +26 -3
  19. ccxt/abstract/blofin.py +24 -0
  20. ccxt/abstract/btcbox.py +1 -0
  21. ccxt/abstract/bybit.py +29 -14
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbase.py +6 -0
  24. ccxt/abstract/coinbaseadvanced.py +94 -0
  25. ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
  26. ccxt/abstract/coinbaseinternational.py +1 -1
  27. ccxt/abstract/coincatch.py +94 -0
  28. ccxt/abstract/coinex.py +233 -123
  29. ccxt/abstract/coinmetro.py +1 -0
  30. ccxt/abstract/cryptocom.py +14 -0
  31. ccxt/abstract/defx.py +69 -0
  32. ccxt/abstract/deribit.py +1 -0
  33. ccxt/abstract/digifinex.py +1 -0
  34. ccxt/abstract/ellipx.py +25 -0
  35. ccxt/abstract/gate.py +20 -0
  36. ccxt/abstract/gateio.py +20 -0
  37. ccxt/abstract/gemini.py +1 -0
  38. ccxt/abstract/hashkey.py +67 -0
  39. ccxt/abstract/hyperliquid.py +1 -1
  40. ccxt/abstract/independentreserve.py +6 -0
  41. ccxt/abstract/kraken.py +4 -3
  42. ccxt/abstract/krakenfutures.py +4 -0
  43. ccxt/abstract/kucoin.py +24 -0
  44. ccxt/abstract/kucoinfutures.py +34 -0
  45. ccxt/abstract/luno.py +2 -0
  46. ccxt/abstract/mexc.py +4 -0
  47. ccxt/abstract/myokx.py +340 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +30 -0
  50. ccxt/abstract/onetrading.py +0 -12
  51. ccxt/abstract/oxfun.py +34 -0
  52. ccxt/abstract/paradex.py +40 -0
  53. ccxt/abstract/phemex.py +1 -0
  54. ccxt/abstract/upbit.py +4 -0
  55. ccxt/abstract/vertex.py +19 -0
  56. ccxt/abstract/whitebit.py +31 -1
  57. ccxt/abstract/woo.py +6 -2
  58. ccxt/abstract/woofipro.py +119 -0
  59. ccxt/abstract/xt.py +153 -0
  60. ccxt/abstract/zonda.py +6 -0
  61. ccxt/ace.py +164 -60
  62. ccxt/alpaca.py +727 -63
  63. ccxt/ascendex.py +395 -249
  64. ccxt/async_support/__init__.py +36 -14
  65. ccxt/async_support/ace.py +164 -60
  66. ccxt/async_support/alpaca.py +727 -63
  67. ccxt/async_support/ascendex.py +396 -249
  68. ccxt/async_support/base/exchange.py +531 -155
  69. ccxt/async_support/base/ws/aiohttp_client.py +28 -5
  70. ccxt/async_support/base/ws/cache.py +3 -2
  71. ccxt/async_support/base/ws/client.py +26 -5
  72. ccxt/async_support/base/ws/fast_client.py +4 -3
  73. ccxt/async_support/base/ws/functions.py +1 -1
  74. ccxt/async_support/base/ws/future.py +40 -31
  75. ccxt/async_support/base/ws/order_book_side.py +3 -0
  76. ccxt/async_support/bequant.py +1 -1
  77. ccxt/async_support/bigone.py +329 -202
  78. ccxt/async_support/binance.py +3030 -1087
  79. ccxt/async_support/binancecoinm.py +2 -1
  80. ccxt/async_support/binanceus.py +12 -1
  81. ccxt/async_support/binanceusdm.py +3 -1
  82. ccxt/async_support/bingx.py +3205 -937
  83. ccxt/async_support/bit2c.py +119 -38
  84. ccxt/async_support/bitbank.py +215 -76
  85. ccxt/async_support/bitbns.py +124 -53
  86. ccxt/async_support/bitfinex.py +3236 -1078
  87. ccxt/async_support/bitfinex1.py +1711 -0
  88. ccxt/async_support/bitflyer.py +238 -49
  89. ccxt/async_support/bitget.py +1525 -573
  90. ccxt/async_support/bithumb.py +199 -65
  91. ccxt/async_support/bitmart.py +1320 -435
  92. ccxt/async_support/bitmex.py +308 -111
  93. ccxt/async_support/bitopro.py +256 -96
  94. ccxt/async_support/bitrue.py +365 -233
  95. ccxt/async_support/bitso.py +201 -89
  96. ccxt/async_support/bitstamp.py +438 -269
  97. ccxt/async_support/bitteam.py +179 -73
  98. ccxt/async_support/bitvavo.py +180 -70
  99. ccxt/async_support/bl3p.py +92 -25
  100. ccxt/async_support/blockchaincom.py +193 -79
  101. ccxt/async_support/blofin.py +392 -148
  102. ccxt/async_support/btcalpha.py +161 -55
  103. ccxt/async_support/btcbox.py +250 -34
  104. ccxt/async_support/btcmarkets.py +232 -85
  105. ccxt/async_support/btcturk.py +159 -60
  106. ccxt/async_support/bybit.py +2231 -1193
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1454 -287
  109. ccxt/async_support/coinbaseadvanced.py +17 -0
  110. ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
  111. ccxt/async_support/coinbaseinternational.py +428 -88
  112. ccxt/async_support/coincatch.py +5152 -0
  113. ccxt/async_support/coincheck.py +121 -38
  114. ccxt/async_support/coinex.py +4020 -3339
  115. ccxt/async_support/coinlist.py +273 -116
  116. ccxt/async_support/coinmate.py +204 -97
  117. ccxt/async_support/coinmetro.py +203 -110
  118. ccxt/async_support/coinone.py +142 -68
  119. ccxt/async_support/coinsph.py +223 -97
  120. ccxt/async_support/coinspot.py +137 -62
  121. ccxt/async_support/cryptocom.py +515 -185
  122. ccxt/async_support/currencycom.py +203 -85
  123. ccxt/async_support/defx.py +2066 -0
  124. ccxt/async_support/delta.py +404 -109
  125. ccxt/async_support/deribit.py +639 -323
  126. ccxt/async_support/digifinex.py +465 -233
  127. ccxt/async_support/ellipx.py +1887 -0
  128. ccxt/async_support/exmo.py +317 -128
  129. ccxt/async_support/gate.py +1472 -463
  130. ccxt/async_support/gemini.py +206 -84
  131. ccxt/async_support/hashkey.py +4164 -0
  132. ccxt/async_support/hitbtc.py +433 -178
  133. ccxt/async_support/hollaex.py +207 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +178 -56
  136. ccxt/async_support/hyperliquid.py +1678 -292
  137. ccxt/async_support/idex.py +219 -95
  138. ccxt/async_support/independentreserve.py +300 -31
  139. ccxt/async_support/indodax.py +226 -62
  140. ccxt/async_support/kraken.py +871 -354
  141. ccxt/async_support/krakenfutures.py +324 -100
  142. ccxt/async_support/kucoin.py +917 -357
  143. ccxt/async_support/kucoinfutures.py +1004 -149
  144. ccxt/async_support/kuna.py +198 -107
  145. ccxt/async_support/latoken.py +199 -79
  146. ccxt/async_support/lbank.py +360 -113
  147. ccxt/async_support/luno.py +185 -62
  148. ccxt/async_support/lykke.py +168 -55
  149. ccxt/async_support/mercado.py +101 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +53 -0
  152. ccxt/async_support/ndax.py +234 -82
  153. ccxt/async_support/novadax.py +195 -75
  154. ccxt/async_support/oceanex.py +244 -59
  155. ccxt/async_support/okcoin.py +301 -165
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +198 -414
  158. ccxt/async_support/oxfun.py +2898 -0
  159. ccxt/async_support/p2b.py +142 -52
  160. ccxt/async_support/paradex.py +2085 -0
  161. ccxt/async_support/paymium.py +56 -32
  162. ccxt/async_support/phemex.py +572 -196
  163. ccxt/async_support/poloniex.py +218 -95
  164. ccxt/async_support/poloniexfutures.py +260 -92
  165. ccxt/async_support/probit.py +143 -110
  166. ccxt/async_support/timex.py +123 -70
  167. ccxt/async_support/tokocrypto.py +129 -93
  168. ccxt/async_support/tradeogre.py +39 -25
  169. ccxt/async_support/upbit.py +322 -113
  170. ccxt/async_support/vertex.py +2983 -0
  171. ccxt/async_support/wavesexchange.py +227 -173
  172. ccxt/async_support/wazirx.py +145 -65
  173. ccxt/async_support/whitebit.py +533 -138
  174. ccxt/async_support/woo.py +1137 -296
  175. ccxt/async_support/woofipro.py +2716 -0
  176. ccxt/async_support/xt.py +4628 -0
  177. ccxt/async_support/yobit.py +160 -92
  178. ccxt/async_support/zaif.py +80 -33
  179. ccxt/async_support/zonda.py +140 -69
  180. ccxt/base/errors.py +51 -20
  181. ccxt/base/exchange.py +1722 -480
  182. ccxt/base/precise.py +10 -0
  183. ccxt/base/types.py +223 -4
  184. ccxt/bequant.py +1 -1
  185. ccxt/bigone.py +329 -202
  186. ccxt/binance.py +3030 -1087
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3205 -937
  191. ccxt/bit2c.py +119 -38
  192. ccxt/bitbank.py +215 -76
  193. ccxt/bitbns.py +124 -53
  194. ccxt/bitfinex.py +3235 -1078
  195. ccxt/bitfinex1.py +1710 -0
  196. ccxt/bitflyer.py +238 -49
  197. ccxt/bitget.py +1525 -573
  198. ccxt/bithumb.py +198 -65
  199. ccxt/bitmart.py +1320 -435
  200. ccxt/bitmex.py +308 -111
  201. ccxt/bitopro.py +256 -96
  202. ccxt/bitrue.py +365 -233
  203. ccxt/bitso.py +201 -89
  204. ccxt/bitstamp.py +438 -269
  205. ccxt/bitteam.py +179 -73
  206. ccxt/bitvavo.py +180 -70
  207. ccxt/bl3p.py +92 -25
  208. ccxt/blockchaincom.py +193 -79
  209. ccxt/blofin.py +392 -148
  210. ccxt/btcalpha.py +161 -55
  211. ccxt/btcbox.py +250 -34
  212. ccxt/btcmarkets.py +232 -85
  213. ccxt/btcturk.py +159 -60
  214. ccxt/bybit.py +2231 -1193
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1454 -287
  217. ccxt/coinbaseadvanced.py +17 -0
  218. ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
  219. ccxt/coinbaseinternational.py +428 -88
  220. ccxt/coincatch.py +5152 -0
  221. ccxt/coincheck.py +121 -38
  222. ccxt/coinex.py +4020 -3339
  223. ccxt/coinlist.py +273 -116
  224. ccxt/coinmate.py +204 -97
  225. ccxt/coinmetro.py +203 -110
  226. ccxt/coinone.py +142 -68
  227. ccxt/coinsph.py +223 -97
  228. ccxt/coinspot.py +137 -62
  229. ccxt/cryptocom.py +515 -185
  230. ccxt/currencycom.py +203 -85
  231. ccxt/defx.py +2065 -0
  232. ccxt/delta.py +404 -109
  233. ccxt/deribit.py +639 -323
  234. ccxt/digifinex.py +465 -233
  235. ccxt/ellipx.py +1887 -0
  236. ccxt/exmo.py +317 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +433 -178
  241. ccxt/hollaex.py +207 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +178 -56
  244. ccxt/hyperliquid.py +1677 -292
  245. ccxt/idex.py +219 -95
  246. ccxt/independentreserve.py +299 -31
  247. ccxt/indodax.py +226 -62
  248. ccxt/kraken.py +871 -354
  249. ccxt/krakenfutures.py +324 -100
  250. ccxt/kucoin.py +917 -357
  251. ccxt/kucoinfutures.py +1004 -149
  252. ccxt/kuna.py +198 -107
  253. ccxt/latoken.py +199 -79
  254. ccxt/lbank.py +360 -113
  255. ccxt/luno.py +185 -62
  256. ccxt/lykke.py +168 -55
  257. ccxt/mercado.py +101 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +53 -0
  260. ccxt/ndax.py +234 -82
  261. ccxt/novadax.py +195 -75
  262. ccxt/oceanex.py +244 -59
  263. ccxt/okcoin.py +301 -165
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +198 -414
  266. ccxt/oxfun.py +2897 -0
  267. ccxt/p2b.py +142 -52
  268. ccxt/paradex.py +2085 -0
  269. ccxt/paymium.py +56 -32
  270. ccxt/phemex.py +572 -196
  271. ccxt/poloniex.py +218 -95
  272. ccxt/poloniexfutures.py +260 -92
  273. ccxt/pro/__init__.py +29 -5
  274. ccxt/pro/alpaca.py +32 -17
  275. ccxt/pro/ascendex.py +62 -14
  276. ccxt/pro/bequant.py +4 -0
  277. ccxt/pro/binance.py +1596 -329
  278. ccxt/pro/binancecoinm.py +1 -0
  279. ccxt/pro/binanceus.py +2 -9
  280. ccxt/pro/binanceusdm.py +2 -0
  281. ccxt/pro/bingx.py +527 -134
  282. ccxt/pro/bitcoincom.py +4 -1
  283. ccxt/pro/bitfinex.py +731 -266
  284. ccxt/pro/bitfinex1.py +635 -0
  285. ccxt/pro/bitget.py +726 -357
  286. ccxt/pro/bithumb.py +380 -0
  287. ccxt/pro/bitmart.py +143 -39
  288. ccxt/pro/bitmex.py +199 -40
  289. ccxt/pro/bitopro.py +25 -13
  290. ccxt/pro/bitrue.py +31 -32
  291. ccxt/pro/bitstamp.py +7 -6
  292. ccxt/pro/bitvavo.py +203 -81
  293. ccxt/pro/blockchaincom.py +30 -17
  294. ccxt/pro/blofin.py +692 -0
  295. ccxt/pro/bybit.py +791 -82
  296. ccxt/pro/cex.py +99 -51
  297. ccxt/pro/coinbase.py +220 -30
  298. ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
  299. ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
  300. ccxt/pro/coinbaseinternational.py +193 -30
  301. ccxt/pro/coincatch.py +1464 -0
  302. ccxt/pro/coincheck.py +11 -6
  303. ccxt/pro/coinex.py +965 -665
  304. ccxt/pro/coinone.py +17 -10
  305. ccxt/pro/cryptocom.py +446 -66
  306. ccxt/pro/currencycom.py +11 -10
  307. ccxt/pro/defx.py +832 -0
  308. ccxt/pro/deribit.py +167 -31
  309. ccxt/pro/exmo.py +252 -20
  310. ccxt/pro/gate.py +729 -64
  311. ccxt/pro/gemini.py +44 -26
  312. ccxt/pro/hashkey.py +802 -0
  313. ccxt/pro/hitbtc.py +208 -103
  314. ccxt/pro/hollaex.py +25 -9
  315. ccxt/pro/htx.py +83 -39
  316. ccxt/pro/huobijp.py +17 -16
  317. ccxt/pro/hyperliquid.py +502 -31
  318. ccxt/pro/idex.py +28 -13
  319. ccxt/pro/independentreserve.py +21 -16
  320. ccxt/pro/kraken.py +298 -51
  321. ccxt/pro/krakenfutures.py +166 -75
  322. ccxt/pro/kucoin.py +395 -77
  323. ccxt/pro/kucoinfutures.py +400 -99
  324. ccxt/pro/lbank.py +52 -31
  325. ccxt/pro/luno.py +12 -10
  326. ccxt/pro/mexc.py +400 -50
  327. ccxt/pro/myokx.py +28 -0
  328. ccxt/pro/ndax.py +25 -12
  329. ccxt/pro/okcoin.py +28 -9
  330. ccxt/pro/okx.py +935 -124
  331. ccxt/pro/onetrading.py +41 -24
  332. ccxt/pro/oxfun.py +1054 -0
  333. ccxt/pro/p2b.py +100 -24
  334. ccxt/pro/paradex.py +352 -0
  335. ccxt/pro/phemex.py +92 -33
  336. ccxt/pro/poloniex.py +128 -49
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +92 -85
  339. ccxt/pro/upbit.py +401 -8
  340. ccxt/pro/vertex.py +943 -0
  341. ccxt/pro/wazirx.py +46 -28
  342. ccxt/pro/whitebit.py +65 -12
  343. ccxt/pro/woo.py +437 -65
  344. ccxt/pro/woofipro.py +1271 -0
  345. ccxt/pro/xt.py +1067 -0
  346. ccxt/probit.py +143 -110
  347. ccxt/static_dependencies/__init__.py +1 -1
  348. ccxt/static_dependencies/lark/__init__.py +38 -0
  349. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  350. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  351. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  352. ccxt/static_dependencies/lark/common.py +86 -0
  353. ccxt/static_dependencies/lark/exceptions.py +292 -0
  354. ccxt/static_dependencies/lark/grammar.py +130 -0
  355. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  356. ccxt/static_dependencies/lark/indenter.py +143 -0
  357. ccxt/static_dependencies/lark/lark.py +658 -0
  358. ccxt/static_dependencies/lark/lexer.py +678 -0
  359. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  360. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  361. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  362. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  363. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  364. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  365. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  366. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  367. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  368. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  369. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  370. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  371. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  372. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  373. ccxt/static_dependencies/lark/py.typed +0 -0
  374. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  375. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  376. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  377. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  378. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  379. ccxt/static_dependencies/lark/tree.py +267 -0
  380. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  381. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  382. ccxt/static_dependencies/lark/utils.py +343 -0
  383. ccxt/static_dependencies/lark/visitors.py +596 -0
  384. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  385. ccxt/static_dependencies/marshmallow/base.py +65 -0
  386. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  387. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  388. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  389. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  390. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  391. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  392. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  393. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  394. ccxt/static_dependencies/marshmallow/types.py +12 -0
  395. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  396. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  397. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  398. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  399. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  400. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  401. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  402. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  403. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  404. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  405. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  406. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  407. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  408. ccxt/static_dependencies/starknet/__init__.py +0 -0
  409. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  410. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  411. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  412. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  413. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  414. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  415. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  416. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  417. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  418. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  419. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  420. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  421. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  422. ccxt/static_dependencies/starknet/common.py +15 -0
  423. ccxt/static_dependencies/starknet/constants.py +39 -0
  424. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  425. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  426. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  427. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  428. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  429. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  430. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  431. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  432. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  433. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  434. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  435. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  436. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  437. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  438. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  439. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  440. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  441. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  442. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  443. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  444. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  445. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  446. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  447. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  448. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  449. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  450. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  451. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  452. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  453. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  454. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  455. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  456. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  457. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  458. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  459. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  460. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  461. ccxt/static_dependencies/starkware/__init__.py +0 -0
  462. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  463. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  464. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  465. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  466. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  467. ccxt/static_dependencies/sympy/__init__.py +0 -0
  468. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  469. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  470. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  471. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  472. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  473. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  474. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  475. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  476. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  477. ccxt/test/{test_async.py → tests_async.py} +456 -391
  478. ccxt/test/tests_helpers.py +285 -0
  479. ccxt/test/tests_init.py +39 -0
  480. ccxt/test/{test_sync.py → tests_sync.py} +456 -393
  481. ccxt/timex.py +123 -70
  482. ccxt/tokocrypto.py +129 -93
  483. ccxt/tradeogre.py +39 -25
  484. ccxt/upbit.py +322 -113
  485. ccxt/vertex.py +2983 -0
  486. ccxt/wavesexchange.py +227 -173
  487. ccxt/wazirx.py +145 -65
  488. ccxt/whitebit.py +533 -138
  489. ccxt/woo.py +1137 -296
  490. ccxt/woofipro.py +2716 -0
  491. ccxt/xt.py +4627 -0
  492. ccxt/yobit.py +159 -92
  493. ccxt/zaif.py +80 -33
  494. ccxt/zonda.py +140 -69
  495. ccxt-4.4.49.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.49.dist-info/METADATA +646 -0
  497. ccxt-4.4.49.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/WHEEL +1 -1
  499. ccxt/abstract/bitbay.py +0 -47
  500. ccxt/abstract/bitfinex2.py +0 -139
  501. ccxt/abstract/hitbtc3.py +0 -115
  502. ccxt/async_support/bitbay.py +0 -17
  503. ccxt/async_support/bitfinex2.py +0 -3496
  504. ccxt/async_support/flowbtc.py +0 -34
  505. ccxt/bitbay.py +0 -17
  506. ccxt/bitfinex2.py +0 -3496
  507. ccxt/flowbtc.py +0 -34
  508. ccxt/hitbtc3.py +0 -16
  509. ccxt/pro/bitfinex2.py +0 -1081
  510. ccxt/test/base/__init__.py +0 -28
  511. ccxt/test/base/test_account.py +0 -26
  512. ccxt/test/base/test_balance.py +0 -56
  513. ccxt/test/base/test_borrow_interest.py +0 -35
  514. ccxt/test/base/test_borrow_rate.py +0 -32
  515. ccxt/test/base/test_calculate_fee.py +0 -51
  516. ccxt/test/base/test_crypto.py +0 -127
  517. ccxt/test/base/test_currency.py +0 -76
  518. ccxt/test/base/test_datetime.py +0 -103
  519. ccxt/test/base/test_decimal_to_precision.py +0 -392
  520. ccxt/test/base/test_deep_extend.py +0 -68
  521. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  522. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  523. ccxt/test/base/test_funding_rate_history.py +0 -29
  524. ccxt/test/base/test_last_price.py +0 -32
  525. ccxt/test/base/test_ledger_entry.py +0 -45
  526. ccxt/test/base/test_ledger_item.py +0 -48
  527. ccxt/test/base/test_leverage_tier.py +0 -33
  528. ccxt/test/base/test_margin_mode.py +0 -24
  529. ccxt/test/base/test_margin_modification.py +0 -35
  530. ccxt/test/base/test_market.py +0 -190
  531. ccxt/test/base/test_number.py +0 -411
  532. ccxt/test/base/test_ohlcv.py +0 -32
  533. ccxt/test/base/test_open_interest.py +0 -32
  534. ccxt/test/base/test_order.py +0 -64
  535. ccxt/test/base/test_order_book.py +0 -63
  536. ccxt/test/base/test_position.py +0 -60
  537. ccxt/test/base/test_shared_methods.py +0 -345
  538. ccxt/test/base/test_status.py +0 -24
  539. ccxt/test/base/test_throttle.py +0 -126
  540. ccxt/test/base/test_ticker.py +0 -86
  541. ccxt/test/base/test_trade.py +0 -47
  542. ccxt/test/base/test_trading_fee.py +0 -26
  543. ccxt/test/base/test_transaction.py +0 -39
  544. ccxt-4.2.77.dist-info/METADATA +0 -626
  545. ccxt-4.2.77.dist-info/RECORD +0 -534
  546. {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
@@ -1 +1 @@
1
- __all__ = ['ecdsa', 'keccak', 'aiohttp_socks', 'ethereum', 'parsimonious', 'toolz']
1
+ __all__ = ['ecdsa', 'keccak', 'aiohttp_socks', 'ethereum', 'parsimonious', 'toolz', 'starknet', 'marshmallow', 'marshmallow_oneofschema', 'lark', 'starkware', 'sympy']
@@ -0,0 +1,38 @@
1
+ from .exceptions import (
2
+ GrammarError,
3
+ LarkError,
4
+ LexError,
5
+ ParseError,
6
+ UnexpectedCharacters,
7
+ UnexpectedEOF,
8
+ UnexpectedInput,
9
+ UnexpectedToken,
10
+ )
11
+ from .lark import Lark
12
+ from .lexer import Token
13
+ from .tree import ParseTree, Tree
14
+ from .utils import logger
15
+ from .visitors import Discard, Transformer, Transformer_NonRecursive, Visitor, v_args
16
+
17
+ __version__: str = "1.2.0"
18
+
19
+ __all__ = (
20
+ "GrammarError",
21
+ "LarkError",
22
+ "LexError",
23
+ "ParseError",
24
+ "UnexpectedCharacters",
25
+ "UnexpectedEOF",
26
+ "UnexpectedInput",
27
+ "UnexpectedToken",
28
+ "Lark",
29
+ "Token",
30
+ "ParseTree",
31
+ "Tree",
32
+ "logger",
33
+ "Discard",
34
+ "Transformer",
35
+ "Transformer_NonRecursive",
36
+ "Visitor",
37
+ "v_args",
38
+ )
@@ -0,0 +1,6 @@
1
+ # For usage of lark with PyInstaller. See https://pyinstaller-sample-hook.readthedocs.io/en/latest/index.html
2
+
3
+ import os
4
+
5
+ def get_hook_dirs():
6
+ return [os.path.dirname(__file__)]
@@ -0,0 +1,14 @@
1
+ #-----------------------------------------------------------------------------
2
+ # Copyright (c) 2017-2020, PyInstaller Development Team.
3
+ #
4
+ # Distributed under the terms of the GNU General Public License (version 2
5
+ # or later) with exception for distributing the bootloader.
6
+ #
7
+ # The full license is in the file COPYING.txt, distributed with this software.
8
+ #
9
+ # SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
10
+ #-----------------------------------------------------------------------------
11
+
12
+ from PyInstaller.utils.hooks import collect_data_files
13
+
14
+ datas = collect_data_files('lark')
@@ -0,0 +1,59 @@
1
+ """
2
+ Module of utilities for transforming a lark.Tree into a custom Abstract Syntax Tree (AST defined in classes)
3
+ """
4
+
5
+ import inspect, re
6
+ import types
7
+ from typing import Optional, Callable
8
+
9
+ from lark import Transformer, v_args
10
+
11
+ class Ast:
12
+ """Abstract class
13
+
14
+ Subclasses will be collected by `create_transformer()`
15
+ """
16
+ pass
17
+
18
+ class AsList:
19
+ """Abstract class
20
+
21
+ Subclasses will be instantiated with the parse results as a single list, instead of as arguments.
22
+ """
23
+
24
+ class WithMeta:
25
+ """Abstract class
26
+
27
+ Subclasses will be instantiated with the Meta instance of the tree. (see ``v_args`` for more detail)
28
+ """
29
+ pass
30
+
31
+ def camel_to_snake(name):
32
+ return re.sub(r'(?<!^)(?=[A-Z])', '_', name).lower()
33
+
34
+ def create_transformer(ast_module: types.ModuleType,
35
+ transformer: Optional[Transformer]=None,
36
+ decorator_factory: Callable=v_args) -> Transformer:
37
+ """Collects `Ast` subclasses from the given module, and creates a Lark transformer that builds the AST.
38
+
39
+ For each class, we create a corresponding rule in the transformer, with a matching name.
40
+ CamelCase names will be converted into snake_case. Example: "CodeBlock" -> "code_block".
41
+
42
+ Classes starting with an underscore (`_`) will be skipped.
43
+
44
+ Parameters:
45
+ ast_module: A Python module containing all the subclasses of ``ast_utils.Ast``
46
+ transformer (Optional[Transformer]): An initial transformer. Its attributes may be overwritten.
47
+ decorator_factory (Callable): An optional callable accepting two booleans, inline, and meta,
48
+ and returning a decorator for the methods of ``transformer``. (default: ``v_args``).
49
+ """
50
+ t = transformer or Transformer()
51
+
52
+ for name, obj in inspect.getmembers(ast_module):
53
+ if not name.startswith('_') and inspect.isclass(obj):
54
+ if issubclass(obj, Ast):
55
+ wrapper = decorator_factory(inline=not issubclass(obj, AsList), meta=issubclass(obj, WithMeta))
56
+ obj = wrapper(obj).__get__(t)
57
+ setattr(t, camel_to_snake(name), obj)
58
+
59
+ return t
@@ -0,0 +1,86 @@
1
+ from copy import deepcopy
2
+ import sys
3
+ from types import ModuleType
4
+ from typing import Callable, Collection, Dict, Optional, TYPE_CHECKING, List
5
+
6
+ if TYPE_CHECKING:
7
+ from .lark import PostLex
8
+ from .lexer import Lexer
9
+ from .grammar import Rule
10
+ from typing import Union, Type
11
+ from typing import Literal
12
+ if sys.version_info >= (3, 10):
13
+ from typing import TypeAlias
14
+ else:
15
+ from typing_extensions import TypeAlias
16
+
17
+ from .utils import Serialize
18
+ from .lexer import TerminalDef, Token
19
+
20
+ ###{standalone
21
+
22
+ _ParserArgType: 'TypeAlias' = 'Literal["earley", "lalr", "cyk", "auto"]'
23
+ _LexerArgType: 'TypeAlias' = 'Union[Literal["auto", "basic", "contextual", "dynamic", "dynamic_complete"], Type[Lexer]]'
24
+ _LexerCallback = Callable[[Token], Token]
25
+ ParserCallbacks = Dict[str, Callable]
26
+
27
+ class LexerConf(Serialize):
28
+ __serialize_fields__ = 'terminals', 'ignore', 'g_regex_flags', 'use_bytes', 'lexer_type'
29
+ __serialize_namespace__ = TerminalDef,
30
+
31
+ terminals: Collection[TerminalDef]
32
+ re_module: ModuleType
33
+ ignore: Collection[str]
34
+ postlex: 'Optional[PostLex]'
35
+ callbacks: Dict[str, _LexerCallback]
36
+ g_regex_flags: int
37
+ skip_validation: bool
38
+ use_bytes: bool
39
+ lexer_type: Optional[_LexerArgType]
40
+ strict: bool
41
+
42
+ def __init__(self, terminals: Collection[TerminalDef], re_module: ModuleType, ignore: Collection[str]=(), postlex: 'Optional[PostLex]'=None,
43
+ callbacks: Optional[Dict[str, _LexerCallback]]=None, g_regex_flags: int=0, skip_validation: bool=False, use_bytes: bool=False, strict: bool=False):
44
+ self.terminals = terminals
45
+ self.terminals_by_name = {t.name: t for t in self.terminals}
46
+ assert len(self.terminals) == len(self.terminals_by_name)
47
+ self.ignore = ignore
48
+ self.postlex = postlex
49
+ self.callbacks = callbacks or {}
50
+ self.g_regex_flags = g_regex_flags
51
+ self.re_module = re_module
52
+ self.skip_validation = skip_validation
53
+ self.use_bytes = use_bytes
54
+ self.strict = strict
55
+ self.lexer_type = None
56
+
57
+ def _deserialize(self):
58
+ self.terminals_by_name = {t.name: t for t in self.terminals}
59
+
60
+ def __deepcopy__(self, memo=None):
61
+ return type(self)(
62
+ deepcopy(self.terminals, memo),
63
+ self.re_module,
64
+ deepcopy(self.ignore, memo),
65
+ deepcopy(self.postlex, memo),
66
+ deepcopy(self.callbacks, memo),
67
+ deepcopy(self.g_regex_flags, memo),
68
+ deepcopy(self.skip_validation, memo),
69
+ deepcopy(self.use_bytes, memo),
70
+ )
71
+
72
+ class ParserConf(Serialize):
73
+ __serialize_fields__ = 'rules', 'start', 'parser_type'
74
+
75
+ rules: List['Rule']
76
+ callbacks: ParserCallbacks
77
+ start: List[str]
78
+ parser_type: _ParserArgType
79
+
80
+ def __init__(self, rules: List['Rule'], callbacks: ParserCallbacks, start: List[str]):
81
+ assert isinstance(start, list)
82
+ self.rules = rules
83
+ self.callbacks = callbacks
84
+ self.start = start
85
+
86
+ ###}
@@ -0,0 +1,292 @@
1
+ from .utils import logger, NO_VALUE
2
+ from typing import Mapping, Iterable, Callable, Union, TypeVar, Tuple, Any, List, Set, Optional, Collection, TYPE_CHECKING
3
+
4
+ if TYPE_CHECKING:
5
+ from .lexer import Token
6
+ from .parsers.lalr_interactive_parser import InteractiveParser
7
+ from .tree import Tree
8
+
9
+ ###{standalone
10
+
11
+ class LarkError(Exception):
12
+ pass
13
+
14
+
15
+ class ConfigurationError(LarkError, ValueError):
16
+ pass
17
+
18
+
19
+ def assert_config(value, options: Collection, msg='Got %r, expected one of %s'):
20
+ if value not in options:
21
+ raise ConfigurationError(msg % (value, options))
22
+
23
+
24
+ class GrammarError(LarkError):
25
+ pass
26
+
27
+
28
+ class ParseError(LarkError):
29
+ pass
30
+
31
+
32
+ class LexError(LarkError):
33
+ pass
34
+
35
+ T = TypeVar('T')
36
+
37
+ class UnexpectedInput(LarkError):
38
+ """UnexpectedInput Error.
39
+
40
+ Used as a base class for the following exceptions:
41
+
42
+ - ``UnexpectedCharacters``: The lexer encountered an unexpected string
43
+ - ``UnexpectedToken``: The parser received an unexpected token
44
+ - ``UnexpectedEOF``: The parser expected a token, but the input ended
45
+
46
+ After catching one of these exceptions, you may call the following helper methods to create a nicer error message.
47
+ """
48
+ line: int
49
+ column: int
50
+ pos_in_stream = None
51
+ state: Any
52
+ _terminals_by_name = None
53
+ interactive_parser: 'InteractiveParser'
54
+
55
+ def get_context(self, text: str, span: int=40) -> str:
56
+ """Returns a pretty string pinpointing the error in the text,
57
+ with span amount of context characters around it.
58
+
59
+ Note:
60
+ The parser doesn't hold a copy of the text it has to parse,
61
+ so you have to provide it again
62
+ """
63
+ assert self.pos_in_stream is not None, self
64
+ pos = self.pos_in_stream
65
+ start = max(pos - span, 0)
66
+ end = pos + span
67
+ if not isinstance(text, bytes):
68
+ before = text[start:pos].rsplit('\n', 1)[-1]
69
+ after = text[pos:end].split('\n', 1)[0]
70
+ return before + after + '\n' + ' ' * len(before.expandtabs()) + '^\n'
71
+ else:
72
+ before = text[start:pos].rsplit(b'\n', 1)[-1]
73
+ after = text[pos:end].split(b'\n', 1)[0]
74
+ return (before + after + b'\n' + b' ' * len(before.expandtabs()) + b'^\n').decode("ascii", "backslashreplace")
75
+
76
+ def match_examples(self, parse_fn: 'Callable[[str], Tree]',
77
+ examples: Union[Mapping[T, Iterable[str]], Iterable[Tuple[T, Iterable[str]]]],
78
+ token_type_match_fallback: bool=False,
79
+ use_accepts: bool=True
80
+ ) -> Optional[T]:
81
+ """Allows you to detect what's wrong in the input text by matching
82
+ against example errors.
83
+
84
+ Given a parser instance and a dictionary mapping some label with
85
+ some malformed syntax examples, it'll return the label for the
86
+ example that bests matches the current error. The function will
87
+ iterate the dictionary until it finds a matching error, and
88
+ return the corresponding value.
89
+
90
+ For an example usage, see `examples/error_reporting_lalr.py`
91
+
92
+ Parameters:
93
+ parse_fn: parse function (usually ``lark_instance.parse``)
94
+ examples: dictionary of ``{'example_string': value}``.
95
+ use_accepts: Recommended to keep this as ``use_accepts=True``.
96
+ """
97
+ assert self.state is not None, "Not supported for this exception"
98
+
99
+ if isinstance(examples, Mapping):
100
+ examples = examples.items()
101
+
102
+ candidate = (None, False)
103
+ for i, (label, example) in enumerate(examples):
104
+ assert not isinstance(example, str), "Expecting a list"
105
+
106
+ for j, malformed in enumerate(example):
107
+ try:
108
+ parse_fn(malformed)
109
+ except UnexpectedInput as ut:
110
+ if ut.state == self.state:
111
+ if (
112
+ use_accepts
113
+ and isinstance(self, UnexpectedToken)
114
+ and isinstance(ut, UnexpectedToken)
115
+ and ut.accepts != self.accepts
116
+ ):
117
+ logger.debug("Different accepts with same state[%d]: %s != %s at example [%s][%s]" %
118
+ (self.state, self.accepts, ut.accepts, i, j))
119
+ continue
120
+ if (
121
+ isinstance(self, (UnexpectedToken, UnexpectedEOF))
122
+ and isinstance(ut, (UnexpectedToken, UnexpectedEOF))
123
+ ):
124
+ if ut.token == self.token: # Try exact match first
125
+ logger.debug("Exact Match at example [%s][%s]" % (i, j))
126
+ return label
127
+
128
+ if token_type_match_fallback:
129
+ # Fallback to token types match
130
+ if (ut.token.type == self.token.type) and not candidate[-1]:
131
+ logger.debug("Token Type Fallback at example [%s][%s]" % (i, j))
132
+ candidate = label, True
133
+
134
+ if candidate[0] is None:
135
+ logger.debug("Same State match at example [%s][%s]" % (i, j))
136
+ candidate = label, False
137
+
138
+ return candidate[0]
139
+
140
+ def _format_expected(self, expected):
141
+ if self._terminals_by_name:
142
+ d = self._terminals_by_name
143
+ expected = [d[t_name].user_repr() if t_name in d else t_name for t_name in expected]
144
+ return "Expected one of: \n\t* %s\n" % '\n\t* '.join(expected)
145
+
146
+
147
+ class UnexpectedEOF(ParseError, UnexpectedInput):
148
+ """An exception that is raised by the parser, when the input ends while it still expects a token.
149
+ """
150
+ expected: 'List[Token]'
151
+
152
+ def __init__(self, expected, state=None, terminals_by_name=None):
153
+ super(UnexpectedEOF, self).__init__()
154
+
155
+ self.expected = expected
156
+ self.state = state
157
+ from .lexer import Token
158
+ self.token = Token("<EOF>", "") # , line=-1, column=-1, pos_in_stream=-1)
159
+ self.pos_in_stream = -1
160
+ self.line = -1
161
+ self.column = -1
162
+ self._terminals_by_name = terminals_by_name
163
+
164
+
165
+ def __str__(self):
166
+ message = "Unexpected end-of-input. "
167
+ message += self._format_expected(self.expected)
168
+ return message
169
+
170
+
171
+ class UnexpectedCharacters(LexError, UnexpectedInput):
172
+ """An exception that is raised by the lexer, when it cannot match the next
173
+ string of characters to any of its terminals.
174
+ """
175
+
176
+ allowed: Set[str]
177
+ considered_tokens: Set[Any]
178
+
179
+ def __init__(self, seq, lex_pos, line, column, allowed=None, considered_tokens=None, state=None, token_history=None,
180
+ terminals_by_name=None, considered_rules=None):
181
+ super(UnexpectedCharacters, self).__init__()
182
+
183
+ # TODO considered_tokens and allowed can be figured out using state
184
+ self.line = line
185
+ self.column = column
186
+ self.pos_in_stream = lex_pos
187
+ self.state = state
188
+ self._terminals_by_name = terminals_by_name
189
+
190
+ self.allowed = allowed
191
+ self.considered_tokens = considered_tokens
192
+ self.considered_rules = considered_rules
193
+ self.token_history = token_history
194
+
195
+ if isinstance(seq, bytes):
196
+ self.char = seq[lex_pos:lex_pos + 1].decode("ascii", "backslashreplace")
197
+ else:
198
+ self.char = seq[lex_pos]
199
+ self._context = self.get_context(seq)
200
+
201
+
202
+ def __str__(self):
203
+ message = "No terminal matches '%s' in the current parser context, at line %d col %d" % (self.char, self.line, self.column)
204
+ message += '\n\n' + self._context
205
+ if self.allowed:
206
+ message += self._format_expected(self.allowed)
207
+ if self.token_history:
208
+ message += '\nPrevious tokens: %s\n' % ', '.join(repr(t) for t in self.token_history)
209
+ return message
210
+
211
+
212
+ class UnexpectedToken(ParseError, UnexpectedInput):
213
+ """An exception that is raised by the parser, when the token it received
214
+ doesn't match any valid step forward.
215
+
216
+ Parameters:
217
+ token: The mismatched token
218
+ expected: The set of expected tokens
219
+ considered_rules: Which rules were considered, to deduce the expected tokens
220
+ state: A value representing the parser state. Do not rely on its value or type.
221
+ interactive_parser: An instance of ``InteractiveParser``, that is initialized to the point of failure,
222
+ and can be used for debugging and error handling.
223
+
224
+ Note: These parameters are available as attributes of the instance.
225
+ """
226
+
227
+ expected: Set[str]
228
+ considered_rules: Set[str]
229
+
230
+ def __init__(self, token, expected, considered_rules=None, state=None, interactive_parser=None, terminals_by_name=None, token_history=None):
231
+ super(UnexpectedToken, self).__init__()
232
+
233
+ # TODO considered_rules and expected can be figured out using state
234
+ self.line = getattr(token, 'line', '?')
235
+ self.column = getattr(token, 'column', '?')
236
+ self.pos_in_stream = getattr(token, 'start_pos', None)
237
+ self.state = state
238
+
239
+ self.token = token
240
+ self.expected = expected # XXX deprecate? `accepts` is better
241
+ self._accepts = NO_VALUE
242
+ self.considered_rules = considered_rules
243
+ self.interactive_parser = interactive_parser
244
+ self._terminals_by_name = terminals_by_name
245
+ self.token_history = token_history
246
+
247
+
248
+ @property
249
+ def accepts(self) -> Set[str]:
250
+ if self._accepts is NO_VALUE:
251
+ self._accepts = self.interactive_parser and self.interactive_parser.accepts()
252
+ return self._accepts
253
+
254
+ def __str__(self):
255
+ message = ("Unexpected token %r at line %s, column %s.\n%s"
256
+ % (self.token, self.line, self.column, self._format_expected(self.accepts or self.expected)))
257
+ if self.token_history:
258
+ message += "Previous tokens: %r\n" % self.token_history
259
+
260
+ return message
261
+
262
+
263
+
264
+ class VisitError(LarkError):
265
+ """VisitError is raised when visitors are interrupted by an exception
266
+
267
+ It provides the following attributes for inspection:
268
+
269
+ Parameters:
270
+ rule: the name of the visit rule that failed
271
+ obj: the tree-node or token that was being processed
272
+ orig_exc: the exception that cause it to fail
273
+
274
+ Note: These parameters are available as attributes
275
+ """
276
+
277
+ obj: 'Union[Tree, Token]'
278
+ orig_exc: Exception
279
+
280
+ def __init__(self, rule, obj, orig_exc):
281
+ message = 'Error trying to process rule "%s":\n\n%s' % (rule, orig_exc)
282
+ super(VisitError, self).__init__(message)
283
+
284
+ self.rule = rule
285
+ self.obj = obj
286
+ self.orig_exc = orig_exc
287
+
288
+
289
+ class MissingVariableError(LarkError):
290
+ pass
291
+
292
+ ###}
@@ -0,0 +1,130 @@
1
+ from typing import Optional, Tuple, ClassVar, Sequence
2
+
3
+ from .utils import Serialize
4
+
5
+ ###{standalone
6
+ TOKEN_DEFAULT_PRIORITY = 0
7
+
8
+
9
+ class Symbol(Serialize):
10
+ __slots__ = ('name',)
11
+
12
+ name: str
13
+ is_term: ClassVar[bool] = NotImplemented
14
+
15
+ def __init__(self, name: str) -> None:
16
+ self.name = name
17
+
18
+ def __eq__(self, other):
19
+ assert isinstance(other, Symbol), other
20
+ return self.is_term == other.is_term and self.name == other.name
21
+
22
+ def __ne__(self, other):
23
+ return not (self == other)
24
+
25
+ def __hash__(self):
26
+ return hash(self.name)
27
+
28
+ def __repr__(self):
29
+ return '%s(%r)' % (type(self).__name__, self.name)
30
+
31
+ fullrepr = property(__repr__)
32
+
33
+ def renamed(self, f):
34
+ return type(self)(f(self.name))
35
+
36
+
37
+ class Terminal(Symbol):
38
+ __serialize_fields__ = 'name', 'filter_out'
39
+
40
+ is_term: ClassVar[bool] = True
41
+
42
+ def __init__(self, name, filter_out=False):
43
+ self.name = name
44
+ self.filter_out = filter_out
45
+
46
+ @property
47
+ def fullrepr(self):
48
+ return '%s(%r, %r)' % (type(self).__name__, self.name, self.filter_out)
49
+
50
+ def renamed(self, f):
51
+ return type(self)(f(self.name), self.filter_out)
52
+
53
+
54
+ class NonTerminal(Symbol):
55
+ __serialize_fields__ = 'name',
56
+
57
+ is_term: ClassVar[bool] = False
58
+
59
+
60
+ class RuleOptions(Serialize):
61
+ __serialize_fields__ = 'keep_all_tokens', 'expand1', 'priority', 'template_source', 'empty_indices'
62
+
63
+ keep_all_tokens: bool
64
+ expand1: bool
65
+ priority: Optional[int]
66
+ template_source: Optional[str]
67
+ empty_indices: Tuple[bool, ...]
68
+
69
+ def __init__(self, keep_all_tokens: bool=False, expand1: bool=False, priority: Optional[int]=None, template_source: Optional[str]=None, empty_indices: Tuple[bool, ...]=()) -> None:
70
+ self.keep_all_tokens = keep_all_tokens
71
+ self.expand1 = expand1
72
+ self.priority = priority
73
+ self.template_source = template_source
74
+ self.empty_indices = empty_indices
75
+
76
+ def __repr__(self):
77
+ return 'RuleOptions(%r, %r, %r, %r)' % (
78
+ self.keep_all_tokens,
79
+ self.expand1,
80
+ self.priority,
81
+ self.template_source
82
+ )
83
+
84
+
85
+ class Rule(Serialize):
86
+ """
87
+ origin : a symbol
88
+ expansion : a list of symbols
89
+ order : index of this expansion amongst all rules of the same name
90
+ """
91
+ __slots__ = ('origin', 'expansion', 'alias', 'options', 'order', '_hash')
92
+
93
+ __serialize_fields__ = 'origin', 'expansion', 'order', 'alias', 'options'
94
+ __serialize_namespace__ = Terminal, NonTerminal, RuleOptions
95
+
96
+ origin: NonTerminal
97
+ expansion: Sequence[Symbol]
98
+ order: int
99
+ alias: Optional[str]
100
+ options: RuleOptions
101
+ _hash: int
102
+
103
+ def __init__(self, origin: NonTerminal, expansion: Sequence[Symbol],
104
+ order: int=0, alias: Optional[str]=None, options: Optional[RuleOptions]=None):
105
+ self.origin = origin
106
+ self.expansion = expansion
107
+ self.alias = alias
108
+ self.order = order
109
+ self.options = options or RuleOptions()
110
+ self._hash = hash((self.origin, tuple(self.expansion)))
111
+
112
+ def _deserialize(self):
113
+ self._hash = hash((self.origin, tuple(self.expansion)))
114
+
115
+ def __str__(self):
116
+ return '<%s : %s>' % (self.origin.name, ' '.join(x.name for x in self.expansion))
117
+
118
+ def __repr__(self):
119
+ return 'Rule(%r, %r, %r, %r)' % (self.origin, self.expansion, self.alias, self.options)
120
+
121
+ def __hash__(self):
122
+ return self._hash
123
+
124
+ def __eq__(self, other):
125
+ if not isinstance(other, Rule):
126
+ return False
127
+ return self.origin == other.origin and self.expansion == other.expansion
128
+
129
+
130
+ ###}
File without changes