ccxt 4.2.77__py2.py3-none-any.whl → 4.4.48__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 +3104 -880
  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 +1513 -563
  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 +206 -89
  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 +557 -323
  126. ccxt/async_support/digifinex.py +340 -223
  127. ccxt/async_support/ellipx.py +1826 -0
  128. ccxt/async_support/exmo.py +259 -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 +334 -178
  133. ccxt/async_support/hollaex.py +134 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +105 -56
  136. ccxt/async_support/hyperliquid.py +1633 -268
  137. ccxt/async_support/idex.py +148 -95
  138. ccxt/async_support/independentreserve.py +236 -31
  139. ccxt/async_support/indodax.py +165 -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 +138 -106
  145. ccxt/async_support/latoken.py +135 -79
  146. ccxt/async_support/lbank.py +290 -113
  147. ccxt/async_support/luno.py +112 -62
  148. ccxt/async_support/lykke.py +104 -55
  149. ccxt/async_support/mercado.py +36 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +43 -0
  152. ccxt/async_support/ndax.py +163 -82
  153. ccxt/async_support/novadax.py +121 -75
  154. ccxt/async_support/oceanex.py +175 -59
  155. ccxt/async_support/okcoin.py +222 -163
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +132 -414
  158. ccxt/async_support/oxfun.py +2832 -0
  159. ccxt/async_support/p2b.py +79 -51
  160. ccxt/async_support/paradex.py +2017 -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 +3104 -880
  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 +1513 -563
  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 +206 -89
  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 +557 -323
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +334 -178
  241. ccxt/hollaex.py +134 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +105 -56
  244. ccxt/hyperliquid.py +1632 -268
  245. ccxt/idex.py +148 -95
  246. ccxt/independentreserve.py +235 -31
  247. ccxt/indodax.py +165 -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 +138 -106
  253. ccxt/latoken.py +135 -79
  254. ccxt/lbank.py +290 -113
  255. ccxt/luno.py +112 -62
  256. ccxt/lykke.py +104 -55
  257. ccxt/mercado.py +36 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +43 -0
  260. ccxt/ndax.py +163 -82
  261. ccxt/novadax.py +121 -75
  262. ccxt/oceanex.py +175 -59
  263. ccxt/okcoin.py +222 -163
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +132 -414
  266. ccxt/oxfun.py +2831 -0
  267. ccxt/p2b.py +79 -51
  268. ccxt/paradex.py +2017 -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 +138 -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.48.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.48.dist-info/METADATA +646 -0
  497. ccxt-4.4.48.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.48.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.48.dist-info}/top_level.txt +0 -0
@@ -1,411 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
-
14
- from ccxt.base.decimal_to_precision import decimal_to_precision # noqa F401
15
- from ccxt.base.decimal_to_precision import TRUNCATE # noqa F401
16
- from ccxt.base.decimal_to_precision import ROUND # noqa F401
17
- from ccxt.base.decimal_to_precision import DECIMAL_PLACES # noqa F401
18
- from ccxt.base.decimal_to_precision import SIGNIFICANT_DIGITS # noqa F401
19
- from ccxt.base.decimal_to_precision import TICK_SIZE # noqa F401
20
- from ccxt.base.decimal_to_precision import PAD_WITH_ZERO # noqa F401
21
- from ccxt.base.decimal_to_precision import NO_PADDING # noqa F401
22
- from ccxt.base.decimal_to_precision import number_to_string # noqa F401
23
- from ccxt.base.exchange import Exchange # noqa F401
24
- from ccxt.base.precise import Precise # noqa F401
25
-
26
- # eslint-disable-next-line import/newline-after-import
27
-
28
- # ----------------------------------------------------------------------------
29
- # number_to_string
30
-
31
- assert number_to_string(-7.8e-7) == '-0.00000078'
32
- assert number_to_string(7.8e-7) == '0.00000078'
33
- assert number_to_string(-17.805e-7) == '-0.0000017805'
34
- assert number_to_string(17.805e-7) == '0.0000017805'
35
- assert number_to_string(-7.0005e27) == '-7000500000000000000000000000'
36
- assert number_to_string(7.0005e27) == '7000500000000000000000000000'
37
- assert number_to_string(-7.9e27) == '-7900000000000000000000000000'
38
- assert number_to_string(7e27) == '7000000000000000000000000000'
39
- assert number_to_string(7.9e27) == '7900000000000000000000000000'
40
- assert number_to_string(-12.345) == '-12.345'
41
- assert number_to_string(12.345) == '12.345'
42
- assert number_to_string(0) == '0'
43
- assert number_to_string(7.35946e21) == '7359460000000000000000'
44
- assert number_to_string(0.00000001) == '0.00000001'
45
- assert number_to_string(1e-7) == '0.0000001'
46
- assert number_to_string(-1e-7) == '-0.0000001'
47
-
48
- # ----------------------------------------------------------------------------
49
- # testDecimalToPrecisionTruncationToNDigitsAfterDot
50
-
51
- assert decimal_to_precision('12.3456000', TRUNCATE, 100, DECIMAL_PLACES) == '12.3456'
52
- assert decimal_to_precision('12.3456', TRUNCATE, 100, DECIMAL_PLACES) == '12.3456'
53
- assert decimal_to_precision('12.3456', TRUNCATE, 4, DECIMAL_PLACES) == '12.3456'
54
- assert decimal_to_precision('12.3456', TRUNCATE, 3, DECIMAL_PLACES) == '12.345'
55
- assert decimal_to_precision('12.3456', TRUNCATE, 2, DECIMAL_PLACES) == '12.34'
56
- assert decimal_to_precision('12.3456', TRUNCATE, 1, DECIMAL_PLACES) == '12.3'
57
- assert decimal_to_precision('12.3456', TRUNCATE, 0, DECIMAL_PLACES) == '12'
58
- # ['12.3456', TRUNCATE, -1, DECIMAL_PLACES, '10'], # not yet supported
59
- # ['123.456', TRUNCATE, -2, DECIMAL_PLACES, '120'], # not yet supported
60
- # ['123.456', TRUNCATE, -3, DECIMAL_PLACES, '100'], # not yet supported
61
-
62
- assert decimal_to_precision('0.0000001', TRUNCATE, 8, DECIMAL_PLACES) == '0.0000001'
63
- assert decimal_to_precision('0.00000001', TRUNCATE, 8, DECIMAL_PLACES) == '0.00000001'
64
-
65
- assert decimal_to_precision('0.000000000', TRUNCATE, 9, DECIMAL_PLACES, PAD_WITH_ZERO) == '0.000000000'
66
- assert decimal_to_precision('0.000000001', TRUNCATE, 9, DECIMAL_PLACES, PAD_WITH_ZERO) == '0.000000001'
67
-
68
- assert decimal_to_precision('12.3456', TRUNCATE, -1, DECIMAL_PLACES) == '10'
69
- assert decimal_to_precision('123.456', TRUNCATE, -1, DECIMAL_PLACES) == '120'
70
- assert decimal_to_precision('123.456', TRUNCATE, -2, DECIMAL_PLACES) == '100'
71
- assert decimal_to_precision('9.99999', TRUNCATE, -1, DECIMAL_PLACES) == '0'
72
- assert decimal_to_precision('99.9999', TRUNCATE, -1, DECIMAL_PLACES) == '90'
73
- assert decimal_to_precision('99.9999', TRUNCATE, -2, DECIMAL_PLACES) == '0'
74
-
75
- assert decimal_to_precision('0', TRUNCATE, 0, DECIMAL_PLACES) == '0'
76
- assert decimal_to_precision('-0.9', TRUNCATE, 0, DECIMAL_PLACES) == '0'
77
-
78
- # ----------------------------------------------------------------------------
79
- # testDecimalToPrecisionTruncationToNSignificantDigits
80
-
81
- assert decimal_to_precision('0.000123456700', TRUNCATE, 100, SIGNIFICANT_DIGITS) == '0.0001234567'
82
- assert decimal_to_precision('0.0001234567', TRUNCATE, 100, SIGNIFICANT_DIGITS) == '0.0001234567'
83
- assert decimal_to_precision('0.0001234567', TRUNCATE, 7, SIGNIFICANT_DIGITS) == '0.0001234567'
84
-
85
- assert decimal_to_precision('0.000123456', TRUNCATE, 6, SIGNIFICANT_DIGITS) == '0.000123456'
86
- assert decimal_to_precision('0.000123456', TRUNCATE, 5, SIGNIFICANT_DIGITS) == '0.00012345'
87
- assert decimal_to_precision('0.000123456', TRUNCATE, 2, SIGNIFICANT_DIGITS) == '0.00012'
88
- assert decimal_to_precision('0.000123456', TRUNCATE, 1, SIGNIFICANT_DIGITS) == '0.0001'
89
-
90
- assert decimal_to_precision('123.0000987654', TRUNCATE, 10, SIGNIFICANT_DIGITS, PAD_WITH_ZERO) == '123.0000987'
91
- assert decimal_to_precision('123.0000987654', TRUNCATE, 8, SIGNIFICANT_DIGITS) == '123.00009'
92
- assert decimal_to_precision('123.0000987654', TRUNCATE, 7, SIGNIFICANT_DIGITS, PAD_WITH_ZERO) == '123.0000'
93
- assert decimal_to_precision('123.0000987654', TRUNCATE, 6, SIGNIFICANT_DIGITS) == '123'
94
- assert decimal_to_precision('123.0000987654', TRUNCATE, 5, SIGNIFICANT_DIGITS, PAD_WITH_ZERO) == '123.00'
95
- assert decimal_to_precision('123.0000987654', TRUNCATE, 4, SIGNIFICANT_DIGITS) == '123'
96
- assert decimal_to_precision('123.0000987654', TRUNCATE, 4, SIGNIFICANT_DIGITS, PAD_WITH_ZERO) == '123.0'
97
- assert decimal_to_precision('123.0000987654', TRUNCATE, 3, SIGNIFICANT_DIGITS, PAD_WITH_ZERO) == '123'
98
- assert decimal_to_precision('123.0000987654', TRUNCATE, 2, SIGNIFICANT_DIGITS) == '120'
99
- assert decimal_to_precision('123.0000987654', TRUNCATE, 1, SIGNIFICANT_DIGITS) == '100'
100
- assert decimal_to_precision('123.0000987654', TRUNCATE, 1, SIGNIFICANT_DIGITS, PAD_WITH_ZERO) == '100'
101
-
102
- assert decimal_to_precision('1234', TRUNCATE, 5, SIGNIFICANT_DIGITS) == '1234'
103
- assert decimal_to_precision('1234', TRUNCATE, 5, SIGNIFICANT_DIGITS, PAD_WITH_ZERO) == '1234.0'
104
- assert decimal_to_precision('1234', TRUNCATE, 4, SIGNIFICANT_DIGITS) == '1234'
105
- assert decimal_to_precision('1234', TRUNCATE, 4, SIGNIFICANT_DIGITS, PAD_WITH_ZERO) == '1234'
106
- assert decimal_to_precision('1234.69', TRUNCATE, 0, SIGNIFICANT_DIGITS) == '0'
107
- assert decimal_to_precision('1234.69', TRUNCATE, 0, SIGNIFICANT_DIGITS, PAD_WITH_ZERO) == '0'
108
-
109
- # ----------------------------------------------------------------------------
110
- # testDecimalToPrecisionRoundingToNDigitsAfterDot
111
-
112
- assert decimal_to_precision('12.3456000', ROUND, 100, DECIMAL_PLACES) == '12.3456'
113
- assert decimal_to_precision('12.3456', ROUND, 100, DECIMAL_PLACES) == '12.3456'
114
- assert decimal_to_precision('12.3456', ROUND, 4, DECIMAL_PLACES) == '12.3456'
115
- assert decimal_to_precision('12.3456', ROUND, 3, DECIMAL_PLACES) == '12.346'
116
- assert decimal_to_precision('12.3456', ROUND, 2, DECIMAL_PLACES) == '12.35'
117
- assert decimal_to_precision('12.3456', ROUND, 1, DECIMAL_PLACES) == '12.3'
118
- assert decimal_to_precision('12.3456', ROUND, 0, DECIMAL_PLACES) == '12'
119
-
120
- # todo:
121
- # ['9.999', ROUND, 3, DECIMAL_PLACES, NO_PADDING, '9.999'],
122
- # ['9.999', ROUND, 2, DECIMAL_PLACES, NO_PADDING, '10'],
123
- # ['9.999', ROUND, 2, DECIMAL_PLACES, PAD_WITH_ZERO, '10.00'],
124
- # ['99.999', ROUND, 2, DECIMAL_PLACES, PAD_WITH_ZERO, '100.00'],
125
- # ['-99.999', ROUND, 2, DECIMAL_PLACES, PAD_WITH_ZERO, '-100.00'],
126
-
127
- # ['12.3456', ROUND, -1, DECIMAL_PLACES, NO_PADDING, '10'], # not yet supported
128
- # ['123.456', ROUND, -1, DECIMAL_PLACES, NO_PADDING, '120'], # not yet supported
129
- # ['123.456', ROUND, -2, DECIMAL_PLACES, NO_PADDING, '100'], # not yet supported
130
-
131
- # a problematic case in PHP
132
- assert decimal_to_precision('10000', ROUND, 6, DECIMAL_PLACES) == '10000'
133
- assert decimal_to_precision('0.00003186', ROUND, 8, DECIMAL_PLACES) == '0.00003186'
134
-
135
- assert decimal_to_precision('12.3456', ROUND, -1, DECIMAL_PLACES) == '10'
136
- assert decimal_to_precision('123.456', ROUND, -1, DECIMAL_PLACES) == '120'
137
- assert decimal_to_precision('123.456', ROUND, -2, DECIMAL_PLACES) == '100'
138
- assert decimal_to_precision('9.99999', ROUND, -1, DECIMAL_PLACES) == '10'
139
- assert decimal_to_precision('99.9999', ROUND, -1, DECIMAL_PLACES) == '100'
140
- assert decimal_to_precision('99.9999', ROUND, -2, DECIMAL_PLACES) == '100'
141
-
142
- assert decimal_to_precision('9.999', ROUND, 3, DECIMAL_PLACES) == '9.999'
143
- assert decimal_to_precision('9.999', ROUND, 2, DECIMAL_PLACES) == '10'
144
- assert decimal_to_precision('9.999', ROUND, 2, DECIMAL_PLACES, PAD_WITH_ZERO) == '10.00'
145
- assert decimal_to_precision('99.999', ROUND, 2, DECIMAL_PLACES, PAD_WITH_ZERO) == '100.00'
146
- assert decimal_to_precision('-99.999', ROUND, 2, DECIMAL_PLACES, PAD_WITH_ZERO) == '-100.00'
147
-
148
- # ----------------------------------------------------------------------------
149
- # testDecimalToPrecisionRoundingToNSignificantDigits
150
-
151
- assert decimal_to_precision('0.000123456700', ROUND, 100, SIGNIFICANT_DIGITS) == '0.0001234567'
152
- assert decimal_to_precision('0.0001234567', ROUND, 100, SIGNIFICANT_DIGITS) == '0.0001234567'
153
- assert decimal_to_precision('0.0001234567', ROUND, 7, SIGNIFICANT_DIGITS) == '0.0001234567'
154
-
155
- assert decimal_to_precision('0.000123456', ROUND, 6, SIGNIFICANT_DIGITS) == '0.000123456'
156
- assert decimal_to_precision('0.000123456', ROUND, 5, SIGNIFICANT_DIGITS) == '0.00012346'
157
- assert decimal_to_precision('0.000123456', ROUND, 4, SIGNIFICANT_DIGITS) == '0.0001235'
158
- assert decimal_to_precision('0.00012', ROUND, 2, SIGNIFICANT_DIGITS) == '0.00012'
159
- assert decimal_to_precision('0.0001', ROUND, 1, SIGNIFICANT_DIGITS) == '0.0001'
160
-
161
- assert decimal_to_precision('123.0000987654', ROUND, 7, SIGNIFICANT_DIGITS) == '123.0001'
162
- assert decimal_to_precision('123.0000987654', ROUND, 6, SIGNIFICANT_DIGITS) == '123'
163
-
164
- assert decimal_to_precision('0.00098765', ROUND, 2, SIGNIFICANT_DIGITS) == '0.00099'
165
- assert decimal_to_precision('0.00098765', ROUND, 2, SIGNIFICANT_DIGITS, PAD_WITH_ZERO) == '0.00099'
166
-
167
- assert decimal_to_precision('0.00098765', ROUND, 1, SIGNIFICANT_DIGITS) == '0.001'
168
- assert decimal_to_precision('0.00098765', ROUND, 10, SIGNIFICANT_DIGITS, PAD_WITH_ZERO) == '0.0009876500000'
169
-
170
- assert decimal_to_precision('0.098765', ROUND, 1, SIGNIFICANT_DIGITS, PAD_WITH_ZERO) == '0.1'
171
-
172
- assert decimal_to_precision('0', ROUND, 0, SIGNIFICANT_DIGITS) == '0'
173
- assert decimal_to_precision('-0.123', ROUND, 0, SIGNIFICANT_DIGITS) == '0'
174
-
175
- assert decimal_to_precision('0.00000044', ROUND, 5, SIGNIFICANT_DIGITS) == '0.00000044'
176
-
177
- # ----------------------------------------------------------------------------
178
- # testDecimalToPrecisionRoundingToTickSize
179
-
180
- assert decimal_to_precision('0.000123456700', ROUND, 0.00012, TICK_SIZE) == '0.00012'
181
- assert decimal_to_precision('0.0001234567', ROUND, 0.00013, TICK_SIZE) == '0.00013'
182
- assert decimal_to_precision('0.0001234567', TRUNCATE, 0.00013, TICK_SIZE) == '0'
183
- assert decimal_to_precision('101.000123456700', ROUND, 100, TICK_SIZE) == '100'
184
- assert decimal_to_precision('0.000123456700', ROUND, 100, TICK_SIZE) == '0'
185
- assert decimal_to_precision('165', TRUNCATE, 110, TICK_SIZE) == '110'
186
- assert decimal_to_precision('3210', TRUNCATE, 1110, TICK_SIZE) == '2220'
187
- assert decimal_to_precision('165', ROUND, 110, TICK_SIZE) == '220'
188
- assert decimal_to_precision('0.000123456789', ROUND, 0.00000012, TICK_SIZE) == '0.00012348'
189
- assert decimal_to_precision('0.000123456789', TRUNCATE, 0.00000012, TICK_SIZE) == '0.00012336'
190
- assert decimal_to_precision('0.000273398', ROUND, 1e-7, TICK_SIZE) == '0.0002734'
191
-
192
- assert decimal_to_precision('0.00005714', TRUNCATE, 0.00000001, TICK_SIZE) == '0.00005714'
193
- # self line causes problems in JS, fix with Precise
194
- # assert decimal_to_precision('0.0000571495257361', TRUNCATE, 0.00000001, TICK_SIZE) == '0.00005714'
195
-
196
- assert decimal_to_precision('0.01', ROUND, 0.0001, TICK_SIZE, PAD_WITH_ZERO) == '0.0100'
197
- assert decimal_to_precision('0.01', TRUNCATE, 0.0001, TICK_SIZE, PAD_WITH_ZERO) == '0.0100'
198
-
199
- assert decimal_to_precision('-0.000123456789', ROUND, 0.00000012, TICK_SIZE) == '-0.00012348'
200
- assert decimal_to_precision('-0.000123456789', TRUNCATE, 0.00000012, TICK_SIZE) == '-0.00012336'
201
- assert decimal_to_precision('-165', TRUNCATE, 110, TICK_SIZE) == '-110'
202
- assert decimal_to_precision('-165', ROUND, 110, TICK_SIZE) == '-220'
203
- assert decimal_to_precision('-1650', TRUNCATE, 1100, TICK_SIZE) == '-1100'
204
- assert decimal_to_precision('-1650', ROUND, 1100, TICK_SIZE) == '-2200'
205
-
206
- assert decimal_to_precision('0.0006', TRUNCATE, 0.0001, TICK_SIZE) == '0.0006'
207
- assert decimal_to_precision('-0.0006', TRUNCATE, 0.0001, TICK_SIZE) == '-0.0006'
208
- assert decimal_to_precision('0.6', TRUNCATE, 0.2, TICK_SIZE) == '0.6'
209
- assert decimal_to_precision('-0.6', TRUNCATE, 0.2, TICK_SIZE) == '-0.6'
210
- assert decimal_to_precision('1.2', ROUND, 0.4, TICK_SIZE) == '1.2'
211
- assert decimal_to_precision('-1.2', ROUND, 0.4, TICK_SIZE) == '-1.2'
212
- assert decimal_to_precision('1.2', ROUND, 0.02, TICK_SIZE) == '1.2'
213
- assert decimal_to_precision('-1.2', ROUND, 0.02, TICK_SIZE) == '-1.2'
214
- assert decimal_to_precision('44', ROUND, 4.4, TICK_SIZE) == '44'
215
- assert decimal_to_precision('-44', ROUND, 4.4, TICK_SIZE) == '-44'
216
- assert decimal_to_precision('44.00000001', ROUND, 4.4, TICK_SIZE) == '44'
217
- assert decimal_to_precision('-44.00000001', ROUND, 4.4, TICK_SIZE) == '-44'
218
-
219
- # https://github.com/ccxt/ccxt/issues/6731
220
- assert decimal_to_precision('20', TRUNCATE, 0.00000001, TICK_SIZE) == '20'
221
-
222
- # ----------------------------------------------------------------------------
223
- # testDecimalToPrecisionNegativeNumbers
224
-
225
- assert decimal_to_precision('-0.123456', TRUNCATE, 5, DECIMAL_PLACES) == '-0.12345'
226
- assert decimal_to_precision('-0.123456', ROUND, 5, DECIMAL_PLACES) == '-0.12346'
227
-
228
- # ----------------------------------------------------------------------------
229
- # decimal_to_precision: without dot / trailing dot
230
-
231
- assert decimal_to_precision('123', TRUNCATE, 0) == '123'
232
-
233
- assert decimal_to_precision('123', TRUNCATE, 5, DECIMAL_PLACES) == '123'
234
- assert decimal_to_precision('123', TRUNCATE, 5, DECIMAL_PLACES, PAD_WITH_ZERO) == '123.00000'
235
-
236
- assert decimal_to_precision('123.', TRUNCATE, 0, DECIMAL_PLACES) == '123'
237
- assert decimal_to_precision('123.', TRUNCATE, 5, DECIMAL_PLACES, PAD_WITH_ZERO) == '123.00000'
238
-
239
- assert decimal_to_precision('0.', TRUNCATE, 0) == '0'
240
- assert decimal_to_precision('0.', TRUNCATE, 5, DECIMAL_PLACES, PAD_WITH_ZERO) == '0.00000'
241
-
242
- # ----------------------------------------------------------------------------
243
- # decimal_to_precision: rounding for equidistant digits
244
-
245
- assert decimal_to_precision('1.44', ROUND, 1, DECIMAL_PLACES) == '1.4'
246
- assert decimal_to_precision('1.45', ROUND, 1, DECIMAL_PLACES) == '1.5'
247
- assert decimal_to_precision('1.45', ROUND, 0, DECIMAL_PLACES) == '1' # not 2
248
-
249
- # ----------------------------------------------------------------------------
250
- # negative precision only implemented so far in python
251
- # pretty useless for decimal applications |x| < 5 == 0
252
- # NO_PADDING and PAD_WITH_ZERO are ignored
253
-
254
- assert decimal_to_precision('5', ROUND, -1, DECIMAL_PLACES) == '10'
255
- assert decimal_to_precision('4.999', ROUND, -1, DECIMAL_PLACES) == '0'
256
- assert decimal_to_precision('0.0431531423', ROUND, -1, DECIMAL_PLACES) == '0'
257
- assert decimal_to_precision('-69.3', ROUND, -1, DECIMAL_PLACES) == '-70'
258
- assert decimal_to_precision('5001', ROUND, -4, DECIMAL_PLACES) == '10000'
259
- assert decimal_to_precision('4999.999', ROUND, -4, DECIMAL_PLACES) == '0'
260
-
261
- assert decimal_to_precision('69.3', TRUNCATE, -2, DECIMAL_PLACES) == '0'
262
- assert decimal_to_precision('-69.3', TRUNCATE, -2, DECIMAL_PLACES) == '0'
263
- assert decimal_to_precision('69.3', TRUNCATE, -1, SIGNIFICANT_DIGITS) == '60'
264
- assert decimal_to_precision('-69.3', TRUNCATE, -1, SIGNIFICANT_DIGITS) == '-60'
265
- assert decimal_to_precision('69.3', TRUNCATE, -2, SIGNIFICANT_DIGITS) == '0'
266
- assert decimal_to_precision('1602000000000000000000', TRUNCATE, 3, SIGNIFICANT_DIGITS) == '1600000000000000000000'
267
-
268
- # ----------------------------------------------------------------------------
269
- # decimal_to_precision: stringified precision
270
- assert decimal_to_precision('-0.000123456789', ROUND, '0.00000012', TICK_SIZE) == '-0.00012348'
271
- assert decimal_to_precision('-0.000123456789', TRUNCATE, '0.00000012', TICK_SIZE) == '-0.00012336'
272
- assert decimal_to_precision('-165', TRUNCATE, '110', TICK_SIZE) == '-110'
273
- assert decimal_to_precision('-165', ROUND, '110', TICK_SIZE) == '-220'
274
-
275
- # ----------------------------------------------------------------------------
276
- # testDecimalToPrecisionErrorHandling(todo)
277
- #
278
- # throws(() =>
279
- # decimal_to_precision('123456.789', TRUNCATE, -2, DECIMAL_PLACES),
280
- # 'negative precision is not yet supported')
281
- #
282
- # throws(() =>
283
- # decimal_to_precision('foo'),
284
- # "invalid number(contains an illegal character 'f')")
285
- #
286
- # throws(() =>
287
- # decimal_to_precision('0.01', TRUNCATE, -1, TICK_SIZE),
288
- # "TICK_SIZE cant be used with negative numPrecisionDigits")
289
-
290
- # ----------------------------------------------------------------------------
291
-
292
- w = '-1.123e-6'
293
- x = '0.00000002'
294
- y = '69696900000'
295
- z = '0'
296
- a = '1e8'
297
-
298
- assert Precise.string_mul(x, y) == '1393.938'
299
- assert Precise.string_mul(y, x) == '1393.938'
300
- assert Precise.string_add(x, y) == '69696900000.00000002'
301
- assert Precise.string_add(y, x) == '69696900000.00000002'
302
- assert Precise.string_sub(x, y) == '-69696899999.99999998'
303
- assert Precise.string_sub(y, x) == '69696899999.99999998'
304
- assert Precise.string_div(x, y, 1) == '0'
305
- assert Precise.string_div(x, y) == '0'
306
- assert Precise.string_div(x, y, 19) == '0.0000000000000000002'
307
- assert Precise.string_div(x, y, 20) == '0.00000000000000000028'
308
- assert Precise.string_div(x, y, 21) == '0.000000000000000000286'
309
- assert Precise.string_div(x, y, 22) == '0.0000000000000000002869'
310
- assert Precise.string_div(y, x) == '3484845000000000000'
311
-
312
- assert Precise.string_mul(x, w) == '-0.00000000000002246'
313
- assert Precise.string_mul(w, x) == '-0.00000000000002246'
314
- assert Precise.string_add(x, w) == '-0.000001103'
315
- assert Precise.string_add(w, x) == '-0.000001103'
316
- assert Precise.string_sub(x, w) == '0.000001143'
317
- assert Precise.string_sub(w, x) == '-0.000001143'
318
- assert Precise.string_div(x, w) == '-0.017809439002671415'
319
- assert Precise.string_div(w, x) == '-56.15'
320
-
321
- assert Precise.string_mul(z, w) == '0'
322
- assert Precise.string_mul(z, x) == '0'
323
- assert Precise.string_mul(z, y) == '0'
324
- assert Precise.string_mul(w, z) == '0'
325
- assert Precise.string_mul(x, z) == '0'
326
- assert Precise.string_mul(y, z) == '0'
327
- assert Precise.string_add(z, w) == '-0.000001123'
328
- assert Precise.string_add(z, x) == '0.00000002'
329
- assert Precise.string_add(z, y) == '69696900000'
330
- assert Precise.string_add(w, z) == '-0.000001123'
331
- assert Precise.string_add(x, z) == '0.00000002'
332
- assert Precise.string_add(y, z) == '69696900000'
333
-
334
- assert Precise.string_mul(x, a) == '2'
335
- assert Precise.string_mul(a, x) == '2'
336
- assert Precise.string_mul(y, a) == '6969690000000000000'
337
- assert Precise.string_mul(a, y) == '6969690000000000000'
338
- assert Precise.string_div(y, a) == '696.969'
339
- assert Precise.string_div(y, a, -1) == '690'
340
- assert Precise.string_div(y, a, 0) == '696'
341
- assert Precise.string_div(y, a, 1) == '696.9'
342
- assert Precise.string_div(y, a, 2) == '696.96'
343
- assert Precise.string_div(a, y) == '0.001434784043479695'
344
-
345
- assert Precise.string_abs('0') == '0'
346
- assert Precise.string_abs('-0') == '0'
347
- assert Precise.string_abs('-500.1') == '500.1'
348
- assert Precise.string_abs('213') == '213'
349
-
350
- assert Precise.string_neg('0') == '0'
351
- assert Precise.string_neg('-0') == '0'
352
- assert Precise.string_neg('-500.1') == '500.1'
353
- assert Precise.string_neg('213') == '-213'
354
-
355
- assert Precise.string_mod('57.123', '10') == '7.123'
356
- assert Precise.string_mod('18', '6') == '0'
357
- assert Precise.string_mod('10.1', '0.5') == '0.1'
358
- assert Precise.string_mod('10000000', '5555') == '1000'
359
- assert Precise.string_mod('5550', '120') == '30'
360
-
361
- assert Precise.string_equals('1.0000', '1')
362
- assert Precise.string_equals('-0.0', '0')
363
- assert Precise.string_equals('-0.0', '0.0')
364
- assert Precise.string_equals('5.534000', '5.5340')
365
-
366
- assert Precise.string_min('1.0000', '2') == '1'
367
- assert Precise.string_min('2', '1.2345') == '1.2345'
368
- assert Precise.string_min('3.1415', '-2') == '-2'
369
- assert Precise.string_min('-3.1415', '-2') == '-3.1415'
370
- assert Precise.string_min('0.000', '-0.0') == '0'
371
-
372
- assert Precise.string_max('1.0000', '2') == '2'
373
- assert Precise.string_max('2', '1.2345') == '2'
374
- assert Precise.string_max('3.1415', '-2') == '3.1415'
375
- assert Precise.string_max('-3.1415', '-2') == '-2'
376
- assert Precise.string_max('0.000', '-0.0') == '0'
377
-
378
- assert not Precise.string_gt('1.0000', '2')
379
- assert Precise.string_gt('2', '1.2345')
380
- assert Precise.string_gt('3.1415', '-2')
381
- assert not Precise.string_gt('-3.1415', '-2')
382
- assert not Precise.string_gt('3.1415', '3.1415')
383
- assert Precise.string_gt('3.14150000000000000000001', '3.1415')
384
-
385
- assert not Precise.string_ge('1.0000', '2')
386
- assert Precise.string_ge('2', '1.2345')
387
- assert Precise.string_ge('3.1415', '-2')
388
- assert not Precise.string_ge('-3.1415', '-2')
389
- assert Precise.string_ge('3.1415', '3.1415')
390
- assert Precise.string_ge('3.14150000000000000000001', '3.1415')
391
-
392
- assert Precise.string_lt('1.0000', '2')
393
- assert not Precise.string_lt('2', '1.2345')
394
- assert not Precise.string_lt('3.1415', '-2')
395
- assert Precise.string_lt('-3.1415', '-2')
396
- assert not Precise.string_lt('3.1415', '3.1415')
397
- assert Precise.string_lt('3.1415', '3.14150000000000000000001')
398
-
399
- assert Precise.string_le('1.0000', '2')
400
- assert not Precise.string_le('2', '1.2345')
401
- assert not Precise.string_le('3.1415', '-2')
402
- assert Precise.string_le('-3.1415', '-2')
403
- assert Precise.string_le('3.1415', '3.1415')
404
- assert Precise.string_le('3.1415', '3.14150000000000000000001')
405
-
406
- # todo
407
- # $self->assertSame(0, Exchange::sum())
408
- # $self->assertSame(2, Exchange::sum(2))
409
- # $self->assertSame(432, Exchange::sum(2, 30, 400))
410
- # eslint-disable-next-line eol-last
411
- # $self->assertSame(439, Exchange::sum(2, null, [88], 30, '7', 400, null))
@@ -1,32 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_ohlcv(exchange, skipped_properties, method, entry, symbol, now):
18
- format = [1638230400000, exchange.parse_number('0.123'), exchange.parse_number('0.125'), exchange.parse_number('0.121'), exchange.parse_number('0.122'), exchange.parse_number('123.456')]
19
- empty_not_allowed_for = [0, 1, 2, 3, 4, 5]
20
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_not_allowed_for)
21
- test_shared_methods.assert_timestamp_and_datetime(exchange, skipped_properties, method, entry, now, 0)
22
- log_text = test_shared_methods.log_template(exchange, method, entry)
23
- #
24
- length = len(entry)
25
- assert length >= 6, 'ohlcv array length should be >= 6;' + log_text
26
- high = exchange.safe_string(entry, 2)
27
- low = exchange.safe_string(entry, 3)
28
- test_shared_methods.assert_less_or_equal(exchange, skipped_properties, method, entry, '1', high)
29
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, '1', low)
30
- test_shared_methods.assert_less_or_equal(exchange, skipped_properties, method, entry, '4', high)
31
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, '4', low)
32
- assert (symbol is None) or (isinstance(symbol, str)), 'symbol ' + symbol + ' is incorrect' + log_text # todo: check with standard symbol check
@@ -1,32 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_open_interest(exchange, skipped_properties, method, entry):
18
- format = {
19
- 'symbol': 'BTC/USDT',
20
- 'openInterestAmount': exchange.parse_number('3544581864.598'),
21
- 'openInterestValue': exchange.parse_number('3544581864.598'),
22
- 'timestamp': 1649373600000,
23
- 'datetime': '2022-04-07T23:20:00.000Z',
24
- 'info': {},
25
- }
26
- empty_allowed_for = ['symbol', 'timestamp', 'openInterestAmount', 'openInterestValue', 'datetime']
27
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
28
- test_shared_methods.assert_symbol(exchange, skipped_properties, method, entry, 'symbol')
29
- test_shared_methods.assert_timestamp_and_datetime(exchange, skipped_properties, method, entry)
30
- #
31
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'openInterestAmount', '0')
32
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'openInterestValue', '0')
@@ -1,64 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
- from ccxt.test.base.test_trade import test_trade # noqa E402
17
-
18
- def test_order(exchange, skipped_properties, method, entry, symbol, now):
19
- format = {
20
- 'info': {},
21
- 'id': '123',
22
- 'clientOrderId': '1234',
23
- 'timestamp': 1649373600000,
24
- 'datetime': '2022-04-07T23:20:00.000Z',
25
- 'lastTradeTimestamp': 1649373610000,
26
- 'symbol': 'XYZ/USDT',
27
- 'type': 'limit',
28
- 'timeInForce': 'GTC',
29
- 'postOnly': True,
30
- 'side': 'sell',
31
- 'price': exchange.parse_number('1.23456'),
32
- 'stopPrice': exchange.parse_number('1.1111'),
33
- 'amount': exchange.parse_number('1.23'),
34
- 'cost': exchange.parse_number('2.34'),
35
- 'average': exchange.parse_number('1.234'),
36
- 'filled': exchange.parse_number('1.23'),
37
- 'remaining': exchange.parse_number('0.123'),
38
- 'status': 'ok',
39
- 'fee': {},
40
- 'trades': [],
41
- }
42
- empty_allowed_for = ['clientOrderId', 'stopPrice', 'trades', 'timestamp', 'datetime', 'lastTradeTimestamp', 'average', 'type', 'timeInForce', 'postOnly', 'side', 'price', 'amount', 'cost', 'filled', 'remaining', 'status', 'fee'] # there are exchanges that return only order id, so we don't need to strictly requite all props to be set.
43
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
44
- test_shared_methods.assert_timestamp_and_datetime(exchange, skipped_properties, method, entry, now)
45
- #
46
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, entry, 'timeInForce', ['GTC', 'GTK', 'IOC', 'FOK', 'PO'])
47
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, entry, 'status', ['open', 'closed', 'canceled'])
48
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, entry, 'side', ['buy', 'sell'])
49
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, entry, 'postOnly', [True, False])
50
- test_shared_methods.assert_symbol(exchange, skipped_properties, method, entry, 'symbol', symbol)
51
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'price', '0')
52
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'stopPrice', '0')
53
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'cost', '0')
54
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'average', '0')
55
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'filled', '0')
56
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'remaining', '0')
57
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'amount', '0')
58
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'amount', exchange.safe_string(entry, 'remaining'))
59
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'amount', exchange.safe_string(entry, 'filled'))
60
- if not ('trades' in skipped_properties):
61
- if entry['trades'] is not None:
62
- for i in range(0, len(entry['trades'])):
63
- test_trade(exchange, skipped_properties, method, entry['trades'][i], symbol, now)
64
- test_shared_methods.assert_fee_structure(exchange, skipped_properties, method, entry, 'fee')
@@ -1,63 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.base.precise import Precise # noqa E402
16
- from ccxt.test.base import test_shared_methods # noqa E402
17
-
18
- def test_order_book(exchange, skipped_properties, method, orderbook, symbol):
19
- format = {
20
- 'symbol': 'ETH/BTC',
21
- 'asks': [[exchange.parse_number('1.24'), exchange.parse_number('0.453')], [exchange.parse_number('1.25'), exchange.parse_number('0.157')]],
22
- 'bids': [[exchange.parse_number('1.23'), exchange.parse_number('0.123')], [exchange.parse_number('1.22'), exchange.parse_number('0.543')]],
23
- 'timestamp': 1504224000000,
24
- 'datetime': '2017-09-01T00:00:00',
25
- 'nonce': 134234234,
26
- }
27
- empty_allowed_for = ['symbol', 'nonce', 'datetime', 'timestamp'] # todo: make timestamp required
28
- test_shared_methods.assert_structure(exchange, skipped_properties, method, orderbook, format, empty_allowed_for)
29
- test_shared_methods.assert_timestamp_and_datetime(exchange, skipped_properties, method, orderbook)
30
- test_shared_methods.assert_symbol(exchange, skipped_properties, method, orderbook, 'symbol', symbol)
31
- log_text = test_shared_methods.log_template(exchange, method, orderbook)
32
- #
33
- if ('bid' in skipped_properties) or ('ask' in skipped_properties):
34
- return
35
- # todo: check non-emtpy arrays for bids/asks for toptier exchanges
36
- bids = orderbook['bids']
37
- bids_length = len(bids)
38
- for i in range(0, bids_length):
39
- current_bid_string = exchange.safe_string(bids[i], 0)
40
- next_i = i + 1
41
- if bids_length > next_i:
42
- next_bid_string = exchange.safe_string(bids[next_i], 0)
43
- has_correct_order = Precise.string_gt(current_bid_string, next_bid_string)
44
- assert has_correct_order, 'current bid should be > than the next one: ' + current_bid_string + '>' + next_bid_string + log_text
45
- test_shared_methods.assert_greater(exchange, skipped_properties, method, bids[i], 0, '0')
46
- test_shared_methods.assert_greater(exchange, skipped_properties, method, bids[i], 1, '0')
47
- asks = orderbook['asks']
48
- asks_length = len(asks)
49
- for i in range(0, asks_length):
50
- current_ask_string = exchange.safe_string(asks[i], 0)
51
- next_i = i + 1
52
- if asks_length > next_i:
53
- next_ask_string = exchange.safe_string(asks[next_i], 0)
54
- has_correct_order = Precise.string_lt(current_ask_string, next_ask_string)
55
- assert has_correct_order, 'current ask should be < than the next one: ' + current_ask_string + '<' + next_ask_string + log_text
56
- test_shared_methods.assert_greater(exchange, skipped_properties, method, asks[i], 0, '0')
57
- test_shared_methods.assert_greater(exchange, skipped_properties, method, asks[i], 1, '0')
58
- if not ('spread' in skipped_properties):
59
- if bids_length and asks_length:
60
- first_bid = exchange.safe_string(bids[0], 0)
61
- first_ask = exchange.safe_string(asks[0], 0)
62
- # check bid-ask spread
63
- assert Precise.string_lt(first_bid, first_ask), 'bids[0][0] (' + first_ask + ') should be < than asks[0][0] (' + first_ask + ')' + log_text