coinex-api 0.0.15__py3-none-any.whl → 0.0.17__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 (290) hide show
  1. coinex/__init__.py +7 -0
  2. coinex/ccxt/__init__.py +101 -0
  3. coinex/ccxt/abstract/coinex.py +237 -0
  4. coinex/ccxt/async_support/__init__.py +80 -0
  5. coinex/ccxt/async_support/base/__init__.py +1 -0
  6. coinex/ccxt/async_support/base/exchange.py +2100 -0
  7. coinex/ccxt/async_support/base/throttler.py +50 -0
  8. coinex/ccxt/async_support/base/ws/__init__.py +38 -0
  9. coinex/ccxt/async_support/base/ws/aiohttp_client.py +147 -0
  10. coinex/ccxt/async_support/base/ws/cache.py +213 -0
  11. coinex/ccxt/async_support/base/ws/client.py +214 -0
  12. coinex/ccxt/async_support/base/ws/fast_client.py +97 -0
  13. coinex/ccxt/async_support/base/ws/functions.py +59 -0
  14. coinex/ccxt/async_support/base/ws/future.py +69 -0
  15. coinex/ccxt/async_support/base/ws/order_book.py +78 -0
  16. coinex/ccxt/async_support/base/ws/order_book_side.py +174 -0
  17. coinex/ccxt/async_support/coinex.py +5833 -0
  18. coinex/ccxt/base/__init__.py +27 -0
  19. coinex/ccxt/base/decimal_to_precision.py +174 -0
  20. coinex/ccxt/base/errors.py +267 -0
  21. coinex/ccxt/base/exchange.py +6769 -0
  22. coinex/ccxt/base/precise.py +297 -0
  23. coinex/ccxt/base/types.py +577 -0
  24. coinex/ccxt/coinex.py +5832 -0
  25. coinex/ccxt/pro/__init__.py +21 -0
  26. coinex/ccxt/pro/coinex.py +1366 -0
  27. coinex/ccxt/static_dependencies/README.md +1 -0
  28. coinex/ccxt/static_dependencies/__init__.py +1 -0
  29. coinex/ccxt/static_dependencies/ecdsa/__init__.py +14 -0
  30. coinex/ccxt/static_dependencies/ecdsa/_version.py +520 -0
  31. coinex/ccxt/static_dependencies/ecdsa/curves.py +56 -0
  32. coinex/ccxt/static_dependencies/ecdsa/der.py +221 -0
  33. coinex/ccxt/static_dependencies/ecdsa/ecdsa.py +310 -0
  34. coinex/ccxt/static_dependencies/ecdsa/ellipticcurve.py +197 -0
  35. coinex/ccxt/static_dependencies/ecdsa/keys.py +332 -0
  36. coinex/ccxt/static_dependencies/ecdsa/numbertheory.py +531 -0
  37. coinex/ccxt/static_dependencies/ecdsa/rfc6979.py +100 -0
  38. coinex/ccxt/static_dependencies/ecdsa/util.py +266 -0
  39. coinex/ccxt/static_dependencies/ethereum/__init__.py +7 -0
  40. coinex/ccxt/static_dependencies/ethereum/abi/__init__.py +16 -0
  41. coinex/ccxt/static_dependencies/ethereum/abi/abi.py +19 -0
  42. coinex/ccxt/static_dependencies/ethereum/abi/base.py +152 -0
  43. coinex/ccxt/static_dependencies/ethereum/abi/codec.py +217 -0
  44. coinex/ccxt/static_dependencies/ethereum/abi/constants.py +3 -0
  45. coinex/ccxt/static_dependencies/ethereum/abi/decoding.py +565 -0
  46. coinex/ccxt/static_dependencies/ethereum/abi/encoding.py +720 -0
  47. coinex/ccxt/static_dependencies/ethereum/abi/exceptions.py +139 -0
  48. coinex/ccxt/static_dependencies/ethereum/abi/grammar.py +443 -0
  49. coinex/ccxt/static_dependencies/ethereum/abi/packed.py +13 -0
  50. coinex/ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
  51. coinex/ccxt/static_dependencies/ethereum/abi/registry.py +643 -0
  52. coinex/ccxt/static_dependencies/ethereum/abi/tools/__init__.py +3 -0
  53. coinex/ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +230 -0
  54. coinex/ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
  55. coinex/ccxt/static_dependencies/ethereum/abi/utils/numeric.py +83 -0
  56. coinex/ccxt/static_dependencies/ethereum/abi/utils/padding.py +27 -0
  57. coinex/ccxt/static_dependencies/ethereum/abi/utils/string.py +19 -0
  58. coinex/ccxt/static_dependencies/ethereum/account/__init__.py +3 -0
  59. coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +4 -0
  60. coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +239 -0
  61. coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +40 -0
  62. coinex/ccxt/static_dependencies/ethereum/account/messages.py +263 -0
  63. coinex/ccxt/static_dependencies/ethereum/account/py.typed +0 -0
  64. coinex/ccxt/static_dependencies/ethereum/hexbytes/__init__.py +5 -0
  65. coinex/ccxt/static_dependencies/ethereum/hexbytes/_utils.py +54 -0
  66. coinex/ccxt/static_dependencies/ethereum/hexbytes/main.py +65 -0
  67. coinex/ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
  68. coinex/ccxt/static_dependencies/ethereum/typing/__init__.py +63 -0
  69. coinex/ccxt/static_dependencies/ethereum/typing/abi.py +6 -0
  70. coinex/ccxt/static_dependencies/ethereum/typing/bls.py +7 -0
  71. coinex/ccxt/static_dependencies/ethereum/typing/discovery.py +5 -0
  72. coinex/ccxt/static_dependencies/ethereum/typing/encoding.py +7 -0
  73. coinex/ccxt/static_dependencies/ethereum/typing/enums.py +17 -0
  74. coinex/ccxt/static_dependencies/ethereum/typing/ethpm.py +9 -0
  75. coinex/ccxt/static_dependencies/ethereum/typing/evm.py +20 -0
  76. coinex/ccxt/static_dependencies/ethereum/typing/networks.py +1122 -0
  77. coinex/ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
  78. coinex/ccxt/static_dependencies/ethereum/utils/__init__.py +115 -0
  79. coinex/ccxt/static_dependencies/ethereum/utils/abi.py +72 -0
  80. coinex/ccxt/static_dependencies/ethereum/utils/address.py +171 -0
  81. coinex/ccxt/static_dependencies/ethereum/utils/applicators.py +151 -0
  82. coinex/ccxt/static_dependencies/ethereum/utils/conversions.py +190 -0
  83. coinex/ccxt/static_dependencies/ethereum/utils/currency.py +107 -0
  84. coinex/ccxt/static_dependencies/ethereum/utils/curried/__init__.py +269 -0
  85. coinex/ccxt/static_dependencies/ethereum/utils/debug.py +20 -0
  86. coinex/ccxt/static_dependencies/ethereum/utils/decorators.py +132 -0
  87. coinex/ccxt/static_dependencies/ethereum/utils/encoding.py +6 -0
  88. coinex/ccxt/static_dependencies/ethereum/utils/exceptions.py +4 -0
  89. coinex/ccxt/static_dependencies/ethereum/utils/functional.py +75 -0
  90. coinex/ccxt/static_dependencies/ethereum/utils/hexadecimal.py +74 -0
  91. coinex/ccxt/static_dependencies/ethereum/utils/humanize.py +188 -0
  92. coinex/ccxt/static_dependencies/ethereum/utils/logging.py +159 -0
  93. coinex/ccxt/static_dependencies/ethereum/utils/module_loading.py +31 -0
  94. coinex/ccxt/static_dependencies/ethereum/utils/numeric.py +43 -0
  95. coinex/ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
  96. coinex/ccxt/static_dependencies/ethereum/utils/toolz.py +76 -0
  97. coinex/ccxt/static_dependencies/ethereum/utils/types.py +54 -0
  98. coinex/ccxt/static_dependencies/ethereum/utils/typing/__init__.py +18 -0
  99. coinex/ccxt/static_dependencies/ethereum/utils/typing/misc.py +14 -0
  100. coinex/ccxt/static_dependencies/ethereum/utils/units.py +31 -0
  101. coinex/ccxt/static_dependencies/keccak/__init__.py +3 -0
  102. coinex/ccxt/static_dependencies/keccak/keccak.py +197 -0
  103. coinex/ccxt/static_dependencies/lark/__init__.py +38 -0
  104. coinex/ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  105. coinex/ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  106. coinex/ccxt/static_dependencies/lark/ast_utils.py +59 -0
  107. coinex/ccxt/static_dependencies/lark/common.py +86 -0
  108. coinex/ccxt/static_dependencies/lark/exceptions.py +292 -0
  109. coinex/ccxt/static_dependencies/lark/grammar.py +130 -0
  110. coinex/ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  111. coinex/ccxt/static_dependencies/lark/grammars/common.lark +59 -0
  112. coinex/ccxt/static_dependencies/lark/grammars/lark.lark +62 -0
  113. coinex/ccxt/static_dependencies/lark/grammars/python.lark +302 -0
  114. coinex/ccxt/static_dependencies/lark/grammars/unicode.lark +7 -0
  115. coinex/ccxt/static_dependencies/lark/indenter.py +143 -0
  116. coinex/ccxt/static_dependencies/lark/lark.py +658 -0
  117. coinex/ccxt/static_dependencies/lark/lexer.py +678 -0
  118. coinex/ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  119. coinex/ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  120. coinex/ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  121. coinex/ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  122. coinex/ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  123. coinex/ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  124. coinex/ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  125. coinex/ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  126. coinex/ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  127. coinex/ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  128. coinex/ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  129. coinex/ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  130. coinex/ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  131. coinex/ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  132. coinex/ccxt/static_dependencies/lark/py.typed +0 -0
  133. coinex/ccxt/static_dependencies/lark/reconstruct.py +107 -0
  134. coinex/ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  135. coinex/ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  136. coinex/ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  137. coinex/ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  138. coinex/ccxt/static_dependencies/lark/tree.py +267 -0
  139. coinex/ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  140. coinex/ccxt/static_dependencies/lark/tree_templates.py +180 -0
  141. coinex/ccxt/static_dependencies/lark/utils.py +343 -0
  142. coinex/ccxt/static_dependencies/lark/visitors.py +596 -0
  143. coinex/ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  144. coinex/ccxt/static_dependencies/marshmallow/base.py +65 -0
  145. coinex/ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  146. coinex/ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  147. coinex/ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  148. coinex/ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  149. coinex/ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  150. coinex/ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  151. coinex/ccxt/static_dependencies/marshmallow/py.typed +0 -0
  152. coinex/ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  153. coinex/ccxt/static_dependencies/marshmallow/types.py +12 -0
  154. coinex/ccxt/static_dependencies/marshmallow/utils.py +378 -0
  155. coinex/ccxt/static_dependencies/marshmallow/validate.py +678 -0
  156. coinex/ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  157. coinex/ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  158. coinex/ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  159. coinex/ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  160. coinex/ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  161. coinex/ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  162. coinex/ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  163. coinex/ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  164. coinex/ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  165. coinex/ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  166. coinex/ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  167. coinex/ccxt/static_dependencies/msgpack/__init__.py +55 -0
  168. coinex/ccxt/static_dependencies/msgpack/_cmsgpack.pyx +11 -0
  169. coinex/ccxt/static_dependencies/msgpack/_packer.pyx +374 -0
  170. coinex/ccxt/static_dependencies/msgpack/_unpacker.pyx +547 -0
  171. coinex/ccxt/static_dependencies/msgpack/buff_converter.h +8 -0
  172. coinex/ccxt/static_dependencies/msgpack/exceptions.py +48 -0
  173. coinex/ccxt/static_dependencies/msgpack/ext.py +168 -0
  174. coinex/ccxt/static_dependencies/msgpack/fallback.py +951 -0
  175. coinex/ccxt/static_dependencies/msgpack/pack.h +89 -0
  176. coinex/ccxt/static_dependencies/msgpack/pack_template.h +820 -0
  177. coinex/ccxt/static_dependencies/msgpack/sysdep.h +194 -0
  178. coinex/ccxt/static_dependencies/msgpack/unpack.h +391 -0
  179. coinex/ccxt/static_dependencies/msgpack/unpack_define.h +95 -0
  180. coinex/ccxt/static_dependencies/msgpack/unpack_template.h +464 -0
  181. coinex/ccxt/static_dependencies/parsimonious/__init__.py +10 -0
  182. coinex/ccxt/static_dependencies/parsimonious/exceptions.py +105 -0
  183. coinex/ccxt/static_dependencies/parsimonious/expressions.py +479 -0
  184. coinex/ccxt/static_dependencies/parsimonious/grammar.py +487 -0
  185. coinex/ccxt/static_dependencies/parsimonious/nodes.py +325 -0
  186. coinex/ccxt/static_dependencies/parsimonious/utils.py +40 -0
  187. coinex/ccxt/static_dependencies/starknet/__init__.py +0 -0
  188. coinex/ccxt/static_dependencies/starknet/abi/v0/__init__.py +2 -0
  189. coinex/ccxt/static_dependencies/starknet/abi/v0/model.py +44 -0
  190. coinex/ccxt/static_dependencies/starknet/abi/v0/parser.py +216 -0
  191. coinex/ccxt/static_dependencies/starknet/abi/v0/schemas.py +72 -0
  192. coinex/ccxt/static_dependencies/starknet/abi/v0/shape.py +63 -0
  193. coinex/ccxt/static_dependencies/starknet/abi/v1/__init__.py +2 -0
  194. coinex/ccxt/static_dependencies/starknet/abi/v1/core_structures.json +14 -0
  195. coinex/ccxt/static_dependencies/starknet/abi/v1/model.py +39 -0
  196. coinex/ccxt/static_dependencies/starknet/abi/v1/parser.py +220 -0
  197. coinex/ccxt/static_dependencies/starknet/abi/v1/parser_transformer.py +179 -0
  198. coinex/ccxt/static_dependencies/starknet/abi/v1/schemas.py +66 -0
  199. coinex/ccxt/static_dependencies/starknet/abi/v1/shape.py +47 -0
  200. coinex/ccxt/static_dependencies/starknet/abi/v2/__init__.py +2 -0
  201. coinex/ccxt/static_dependencies/starknet/abi/v2/model.py +89 -0
  202. coinex/ccxt/static_dependencies/starknet/abi/v2/parser.py +293 -0
  203. coinex/ccxt/static_dependencies/starknet/abi/v2/parser_transformer.py +192 -0
  204. coinex/ccxt/static_dependencies/starknet/abi/v2/schemas.py +132 -0
  205. coinex/ccxt/static_dependencies/starknet/abi/v2/shape.py +107 -0
  206. coinex/ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  207. coinex/ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  208. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  209. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  210. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  211. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  212. coinex/ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  213. coinex/ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  214. coinex/ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  215. coinex/ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  216. coinex/ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  217. coinex/ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  218. coinex/ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  219. coinex/ccxt/static_dependencies/starknet/common.py +15 -0
  220. coinex/ccxt/static_dependencies/starknet/constants.py +39 -0
  221. coinex/ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  222. coinex/ccxt/static_dependencies/starknet/hash/address.py +79 -0
  223. coinex/ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  224. coinex/ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  225. coinex/ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  226. coinex/ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  227. coinex/ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  228. coinex/ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  229. coinex/ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  230. coinex/ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  231. coinex/ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  232. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  233. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  234. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  235. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  236. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  237. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  238. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  239. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  240. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  241. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  242. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  243. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  244. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  245. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  246. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  247. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  248. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  249. coinex/ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  250. coinex/ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  251. coinex/ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  252. coinex/ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  253. coinex/ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  254. coinex/ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  255. coinex/ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  256. coinex/ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  257. coinex/ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  258. coinex/ccxt/static_dependencies/starkware/__init__.py +0 -0
  259. coinex/ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  260. coinex/ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  261. coinex/ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  262. coinex/ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  263. coinex/ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  264. coinex/ccxt/static_dependencies/sympy/__init__.py +0 -0
  265. coinex/ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  266. coinex/ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  267. coinex/ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  268. coinex/ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  269. coinex/ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  270. coinex/ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  271. coinex/ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  272. coinex/ccxt/static_dependencies/toolz/__init__.py +26 -0
  273. coinex/ccxt/static_dependencies/toolz/_signatures.py +784 -0
  274. coinex/ccxt/static_dependencies/toolz/_version.py +520 -0
  275. coinex/ccxt/static_dependencies/toolz/compatibility.py +30 -0
  276. coinex/ccxt/static_dependencies/toolz/curried/__init__.py +101 -0
  277. coinex/ccxt/static_dependencies/toolz/curried/exceptions.py +22 -0
  278. coinex/ccxt/static_dependencies/toolz/curried/operator.py +22 -0
  279. coinex/ccxt/static_dependencies/toolz/dicttoolz.py +339 -0
  280. coinex/ccxt/static_dependencies/toolz/functoolz.py +1049 -0
  281. coinex/ccxt/static_dependencies/toolz/itertoolz.py +1057 -0
  282. coinex/ccxt/static_dependencies/toolz/recipes.py +46 -0
  283. coinex/ccxt/static_dependencies/toolz/utils.py +9 -0
  284. coinex/ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  285. coinex/ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  286. coinex_api-0.0.17.dist-info/METADATA +425 -0
  287. coinex_api-0.0.17.dist-info/RECORD +288 -0
  288. coinex_api-0.0.15.dist-info/METADATA +0 -79
  289. coinex_api-0.0.15.dist-info/RECORD +0 -3
  290. {coinex_api-0.0.15.dist-info → coinex_api-0.0.17.dist-info}/WHEEL +0 -0
@@ -0,0 +1,565 @@
1
+ import abc
2
+ import decimal
3
+ import io
4
+ from typing import (
5
+ Any,
6
+ )
7
+
8
+ from ..utils import (
9
+ big_endian_to_int,
10
+ to_normalized_address,
11
+ to_tuple,
12
+ )
13
+
14
+ from .base import (
15
+ BaseCoder,
16
+ parse_tuple_type_str,
17
+ parse_type_str,
18
+ )
19
+ from .exceptions import (
20
+ DecodingError,
21
+ InsufficientDataBytes,
22
+ NonEmptyPaddingBytes,
23
+ )
24
+ from .utils.numeric import (
25
+ TEN,
26
+ abi_decimal_context,
27
+ ceil32,
28
+ )
29
+
30
+
31
+ class ContextFramesBytesIO(io.BytesIO):
32
+ """
33
+ A byte stream which can track a series of contextual frames in a stack. This
34
+ data structure is necessary to perform nested decodings using the
35
+ :py:class:``HeadTailDecoder`` since offsets present in head sections are
36
+ relative only to a particular encoded object. These offsets can only be
37
+ used to locate a position in a decoding stream if they are paired with a
38
+ contextual offset that establishes the position of the object in which they
39
+ are found.
40
+
41
+ For example, consider the encoding of a value for the following type::
42
+
43
+ type: (int,(int,int[]))
44
+ value: (1,(2,[3,3]))
45
+
46
+ There are two tuples in this type: one inner and one outer. The inner tuple
47
+ type contains a dynamic type ``int[]`` and, therefore, is itself dynamic.
48
+ This means that its value encoding will be placed in the tail section of the
49
+ outer tuple's encoding. Furthermore, the inner tuple's encoding will,
50
+ itself, contain a tail section with the encoding for ``[3,3]``. All
51
+ together, the encoded value of ``(1,(2,[3,3]))`` would look like this (the
52
+ data values are normally 32 bytes wide but have been truncated to remove the
53
+ redundant zeros at the beginnings of their encodings)::
54
+
55
+ offset data
56
+ --------------------------
57
+ ^ 0 0x01
58
+ | 32 0x40 <-- Offset of object A in global frame (64)
59
+ -----|--------------------
60
+ Global frame ^ 64 0x02 <-- Beginning of object A (64 w/offset 0 = 64)
61
+ | | 96 0x40 <-- Offset of object B in frame of object A (64)
62
+ -----|-Object A's frame---
63
+ | | 128 0x02 <-- Beginning of object B (64 w/offset 64 = 128)
64
+ | | 160 0x03
65
+ v v 192 0x03
66
+ --------------------------
67
+
68
+ Note that the offset of object B is encoded as 64 which only specifies the
69
+ beginning of its encoded value relative to the beginning of object A's
70
+ encoding. Globally, object B is located at offset 128. In order to make
71
+ sense out of object B's offset, it needs to be positioned in the context of
72
+ its enclosing object's frame (object A).
73
+ """
74
+
75
+ def __init__(self, *args, **kwargs):
76
+ super().__init__(*args, **kwargs)
77
+
78
+ self._frames = []
79
+ self._total_offset = 0
80
+
81
+ def seek_in_frame(self, pos, *args, **kwargs):
82
+ """
83
+ Seeks relative to the total offset of the current contextual frames.
84
+ """
85
+ self.seek(self._total_offset + pos, *args, **kwargs)
86
+
87
+ def push_frame(self, offset):
88
+ """
89
+ Pushes a new contextual frame onto the stack with the given offset and a
90
+ return position at the current cursor position then seeks to the new
91
+ total offset.
92
+ """
93
+ self._frames.append((offset, self.tell()))
94
+ self._total_offset += offset
95
+
96
+ self.seek_in_frame(0)
97
+
98
+ def pop_frame(self):
99
+ """
100
+ Pops the current contextual frame off of the stack and returns the
101
+ cursor to the frame's return position.
102
+ """
103
+ try:
104
+ offset, return_pos = self._frames.pop()
105
+ except IndexError:
106
+ raise IndexError("no frames to pop")
107
+ self._total_offset -= offset
108
+
109
+ self.seek(return_pos)
110
+
111
+
112
+ class BaseDecoder(BaseCoder, metaclass=abc.ABCMeta):
113
+ """
114
+ Base class for all decoder classes. Subclass this if you want to define a
115
+ custom decoder class. Subclasses must also implement
116
+ :any:`BaseCoder.from_type_str`.
117
+ """
118
+
119
+ @abc.abstractmethod
120
+ def decode(self, stream: ContextFramesBytesIO) -> Any: # pragma: no cover
121
+ """
122
+ Decodes the given stream of bytes into a python value. Should raise
123
+ :any:`exceptions.DecodingError` if a python value cannot be decoded
124
+ from the given byte stream.
125
+ """
126
+ pass
127
+
128
+ def __call__(self, stream: ContextFramesBytesIO) -> Any:
129
+ return self.decode(stream)
130
+
131
+
132
+ class HeadTailDecoder(BaseDecoder):
133
+ is_dynamic = True
134
+
135
+ tail_decoder = None
136
+
137
+ def validate(self):
138
+ super().validate()
139
+
140
+ if self.tail_decoder is None:
141
+ raise ValueError("No `tail_decoder` set")
142
+
143
+ def decode(self, stream):
144
+ start_pos = decode_uint_256(stream)
145
+
146
+ stream.push_frame(start_pos)
147
+ value = self.tail_decoder(stream)
148
+ stream.pop_frame()
149
+
150
+ return value
151
+
152
+
153
+ class TupleDecoder(BaseDecoder):
154
+ decoders = None
155
+
156
+ def __init__(self, **kwargs):
157
+ super().__init__(**kwargs)
158
+
159
+ self.decoders = tuple(
160
+ HeadTailDecoder(tail_decoder=d) if getattr(d, "is_dynamic", False) else d
161
+ for d in self.decoders
162
+ )
163
+
164
+ self.is_dynamic = any(getattr(d, "is_dynamic", False) for d in self.decoders)
165
+
166
+ def validate(self):
167
+ super().validate()
168
+
169
+ if self.decoders is None:
170
+ raise ValueError("No `decoders` set")
171
+
172
+ @to_tuple
173
+ def decode(self, stream):
174
+ for decoder in self.decoders:
175
+ yield decoder(stream)
176
+
177
+ @parse_tuple_type_str
178
+ def from_type_str(cls, abi_type, registry):
179
+ decoders = tuple(
180
+ registry.get_decoder(c.to_type_str()) for c in abi_type.components
181
+ )
182
+
183
+ return cls(decoders=decoders)
184
+
185
+
186
+ class SingleDecoder(BaseDecoder):
187
+ decoder_fn = None
188
+
189
+ def validate(self):
190
+ super().validate()
191
+
192
+ if self.decoder_fn is None:
193
+ raise ValueError("No `decoder_fn` set")
194
+
195
+ def validate_padding_bytes(self, value, padding_bytes):
196
+ raise NotImplementedError("Must be implemented by subclasses")
197
+
198
+ def decode(self, stream):
199
+ raw_data = self.read_data_from_stream(stream)
200
+ data, padding_bytes = self.split_data_and_padding(raw_data)
201
+ value = self.decoder_fn(data)
202
+ self.validate_padding_bytes(value, padding_bytes)
203
+
204
+ return value
205
+
206
+ def read_data_from_stream(self, stream):
207
+ raise NotImplementedError("Must be implemented by subclasses")
208
+
209
+ def split_data_and_padding(self, raw_data):
210
+ return raw_data, b""
211
+
212
+
213
+ class BaseArrayDecoder(BaseDecoder):
214
+ item_decoder = None
215
+
216
+ def __init__(self, **kwargs):
217
+ super().__init__(**kwargs)
218
+
219
+ # Use a head-tail decoder to decode dynamic elements
220
+ if self.item_decoder.is_dynamic:
221
+ self.item_decoder = HeadTailDecoder(
222
+ tail_decoder=self.item_decoder,
223
+ )
224
+
225
+ def validate(self):
226
+ super().validate()
227
+
228
+ if self.item_decoder is None:
229
+ raise ValueError("No `item_decoder` set")
230
+
231
+ @parse_type_str(with_arrlist=True)
232
+ def from_type_str(cls, abi_type, registry):
233
+ item_decoder = registry.get_decoder(abi_type.item_type.to_type_str())
234
+
235
+ array_spec = abi_type.arrlist[-1]
236
+ if len(array_spec) == 1:
237
+ # If array dimension is fixed
238
+ return SizedArrayDecoder(
239
+ array_size=array_spec[0],
240
+ item_decoder=item_decoder,
241
+ )
242
+ else:
243
+ # If array dimension is dynamic
244
+ return DynamicArrayDecoder(item_decoder=item_decoder)
245
+
246
+
247
+ class SizedArrayDecoder(BaseArrayDecoder):
248
+ array_size = None
249
+
250
+ def __init__(self, **kwargs):
251
+ super().__init__(**kwargs)
252
+
253
+ self.is_dynamic = self.item_decoder.is_dynamic
254
+
255
+ @to_tuple
256
+ def decode(self, stream):
257
+ for _ in range(self.array_size):
258
+ yield self.item_decoder(stream)
259
+
260
+
261
+ class DynamicArrayDecoder(BaseArrayDecoder):
262
+ # Dynamic arrays are always dynamic, regardless of their elements
263
+ is_dynamic = True
264
+
265
+ @to_tuple
266
+ def decode(self, stream):
267
+ array_size = decode_uint_256(stream)
268
+ stream.push_frame(32)
269
+ for _ in range(array_size):
270
+ yield self.item_decoder(stream)
271
+ stream.pop_frame()
272
+
273
+
274
+ class FixedByteSizeDecoder(SingleDecoder):
275
+ decoder_fn = None
276
+ value_bit_size = None
277
+ data_byte_size = None
278
+ is_big_endian = None
279
+
280
+ def validate(self):
281
+ super().validate()
282
+
283
+ if self.value_bit_size is None:
284
+ raise ValueError("`value_bit_size` may not be None")
285
+ if self.data_byte_size is None:
286
+ raise ValueError("`data_byte_size` may not be None")
287
+ if self.decoder_fn is None:
288
+ raise ValueError("`decoder_fn` may not be None")
289
+ if self.is_big_endian is None:
290
+ raise ValueError("`is_big_endian` may not be None")
291
+
292
+ if self.value_bit_size % 8 != 0:
293
+ raise ValueError(
294
+ "Invalid value bit size: {0}. Must be a multiple of 8".format(
295
+ self.value_bit_size,
296
+ )
297
+ )
298
+
299
+ if self.value_bit_size > self.data_byte_size * 8:
300
+ raise ValueError("Value byte size exceeds data size")
301
+
302
+ def read_data_from_stream(self, stream):
303
+ data = stream.read(self.data_byte_size)
304
+
305
+ if len(data) != self.data_byte_size:
306
+ raise InsufficientDataBytes(
307
+ "Tried to read {0} bytes. Only got {1} bytes".format(
308
+ self.data_byte_size,
309
+ len(data),
310
+ )
311
+ )
312
+
313
+ return data
314
+
315
+ def split_data_and_padding(self, raw_data):
316
+ value_byte_size = self._get_value_byte_size()
317
+ padding_size = self.data_byte_size - value_byte_size
318
+
319
+ if self.is_big_endian:
320
+ padding_bytes = raw_data[:padding_size]
321
+ data = raw_data[padding_size:]
322
+ else:
323
+ data = raw_data[:value_byte_size]
324
+ padding_bytes = raw_data[value_byte_size:]
325
+
326
+ return data, padding_bytes
327
+
328
+ def validate_padding_bytes(self, value, padding_bytes):
329
+ value_byte_size = self._get_value_byte_size()
330
+ padding_size = self.data_byte_size - value_byte_size
331
+
332
+ if padding_bytes != b"\x00" * padding_size:
333
+ raise NonEmptyPaddingBytes(
334
+ "Padding bytes were not empty: {0}".format(repr(padding_bytes))
335
+ )
336
+
337
+ def _get_value_byte_size(self):
338
+ value_byte_size = self.value_bit_size // 8
339
+ return value_byte_size
340
+
341
+
342
+ class Fixed32ByteSizeDecoder(FixedByteSizeDecoder):
343
+ data_byte_size = 32
344
+
345
+
346
+ class BooleanDecoder(Fixed32ByteSizeDecoder):
347
+ value_bit_size = 8
348
+ is_big_endian = True
349
+
350
+ @staticmethod
351
+ def decoder_fn(data):
352
+ if data == b"\x00":
353
+ return False
354
+ elif data == b"\x01":
355
+ return True
356
+ else:
357
+ raise NonEmptyPaddingBytes(
358
+ "Boolean must be either 0x0 or 0x1. Got: {0}".format(repr(data))
359
+ )
360
+
361
+ @parse_type_str("bool")
362
+ def from_type_str(cls, abi_type, registry):
363
+ return cls()
364
+
365
+
366
+ class AddressDecoder(Fixed32ByteSizeDecoder):
367
+ value_bit_size = 20 * 8
368
+ is_big_endian = True
369
+ decoder_fn = staticmethod(to_normalized_address)
370
+
371
+ @parse_type_str("address")
372
+ def from_type_str(cls, abi_type, registry):
373
+ return cls()
374
+
375
+
376
+ #
377
+ # Unsigned Integer Decoders
378
+ #
379
+ class UnsignedIntegerDecoder(Fixed32ByteSizeDecoder):
380
+ decoder_fn = staticmethod(big_endian_to_int)
381
+ is_big_endian = True
382
+
383
+ @parse_type_str("uint")
384
+ def from_type_str(cls, abi_type, registry):
385
+ return cls(value_bit_size=abi_type.sub)
386
+
387
+
388
+ decode_uint_256 = UnsignedIntegerDecoder(value_bit_size=256)
389
+
390
+
391
+ #
392
+ # Signed Integer Decoders
393
+ #
394
+ class SignedIntegerDecoder(Fixed32ByteSizeDecoder):
395
+ is_big_endian = True
396
+
397
+ def decoder_fn(self, data):
398
+ value = big_endian_to_int(data)
399
+ if value >= 2 ** (self.value_bit_size - 1):
400
+ return value - 2**self.value_bit_size
401
+ else:
402
+ return value
403
+
404
+ def validate_padding_bytes(self, value, padding_bytes):
405
+ value_byte_size = self._get_value_byte_size()
406
+ padding_size = self.data_byte_size - value_byte_size
407
+
408
+ if value >= 0:
409
+ expected_padding_bytes = b"\x00" * padding_size
410
+ else:
411
+ expected_padding_bytes = b"\xff" * padding_size
412
+
413
+ if padding_bytes != expected_padding_bytes:
414
+ raise NonEmptyPaddingBytes(
415
+ "Padding bytes were not empty: {0}".format(repr(padding_bytes))
416
+ )
417
+
418
+ @parse_type_str("int")
419
+ def from_type_str(cls, abi_type, registry):
420
+ return cls(value_bit_size=abi_type.sub)
421
+
422
+
423
+ #
424
+ # Bytes1..32
425
+ #
426
+ class BytesDecoder(Fixed32ByteSizeDecoder):
427
+ is_big_endian = False
428
+
429
+ @staticmethod
430
+ def decoder_fn(data):
431
+ return data
432
+
433
+ @parse_type_str("bytes")
434
+ def from_type_str(cls, abi_type, registry):
435
+ return cls(value_bit_size=abi_type.sub * 8)
436
+
437
+
438
+ class BaseFixedDecoder(Fixed32ByteSizeDecoder):
439
+ frac_places = None
440
+ is_big_endian = True
441
+
442
+ def validate(self):
443
+ super().validate()
444
+
445
+ if self.frac_places is None:
446
+ raise ValueError("must specify `frac_places`")
447
+
448
+ if self.frac_places <= 0 or self.frac_places > 80:
449
+ raise ValueError("`frac_places` must be in range (0, 80]")
450
+
451
+
452
+ class UnsignedFixedDecoder(BaseFixedDecoder):
453
+ def decoder_fn(self, data):
454
+ value = big_endian_to_int(data)
455
+
456
+ with decimal.localcontext(abi_decimal_context):
457
+ decimal_value = decimal.Decimal(value) / TEN**self.frac_places
458
+
459
+ return decimal_value
460
+
461
+ @parse_type_str("ufixed")
462
+ def from_type_str(cls, abi_type, registry):
463
+ value_bit_size, frac_places = abi_type.sub
464
+
465
+ return cls(value_bit_size=value_bit_size, frac_places=frac_places)
466
+
467
+
468
+ class SignedFixedDecoder(BaseFixedDecoder):
469
+ def decoder_fn(self, data):
470
+ value = big_endian_to_int(data)
471
+ if value >= 2 ** (self.value_bit_size - 1):
472
+ signed_value = value - 2**self.value_bit_size
473
+ else:
474
+ signed_value = value
475
+
476
+ with decimal.localcontext(abi_decimal_context):
477
+ decimal_value = decimal.Decimal(signed_value) / TEN**self.frac_places
478
+
479
+ return decimal_value
480
+
481
+ def validate_padding_bytes(self, value, padding_bytes):
482
+ value_byte_size = self._get_value_byte_size()
483
+ padding_size = self.data_byte_size - value_byte_size
484
+
485
+ if value >= 0:
486
+ expected_padding_bytes = b"\x00" * padding_size
487
+ else:
488
+ expected_padding_bytes = b"\xff" * padding_size
489
+
490
+ if padding_bytes != expected_padding_bytes:
491
+ raise NonEmptyPaddingBytes(
492
+ "Padding bytes were not empty: {0}".format(repr(padding_bytes))
493
+ )
494
+
495
+ @parse_type_str("fixed")
496
+ def from_type_str(cls, abi_type, registry):
497
+ value_bit_size, frac_places = abi_type.sub
498
+
499
+ return cls(value_bit_size=value_bit_size, frac_places=frac_places)
500
+
501
+
502
+ #
503
+ # String and Bytes
504
+ #
505
+ class ByteStringDecoder(SingleDecoder):
506
+ is_dynamic = True
507
+
508
+ @staticmethod
509
+ def decoder_fn(data):
510
+ return data
511
+
512
+ @staticmethod
513
+ def read_data_from_stream(stream):
514
+ data_length = decode_uint_256(stream)
515
+ padded_length = ceil32(data_length)
516
+
517
+ data = stream.read(padded_length)
518
+
519
+ if len(data) < padded_length:
520
+ raise InsufficientDataBytes(
521
+ "Tried to read {0} bytes. Only got {1} bytes".format(
522
+ padded_length,
523
+ len(data),
524
+ )
525
+ )
526
+
527
+ padding_bytes = data[data_length:]
528
+
529
+ if padding_bytes != b"\x00" * (padded_length - data_length):
530
+ raise NonEmptyPaddingBytes(
531
+ "Padding bytes were not empty: {0}".format(repr(padding_bytes))
532
+ )
533
+
534
+ return data[:data_length]
535
+
536
+ def validate_padding_bytes(self, value, padding_bytes):
537
+ pass
538
+
539
+ @parse_type_str("bytes")
540
+ def from_type_str(cls, abi_type, registry):
541
+ return cls()
542
+
543
+
544
+ class StringDecoder(ByteStringDecoder):
545
+ @parse_type_str("string")
546
+ def from_type_str(cls, abi_type, registry):
547
+ return cls()
548
+
549
+ @staticmethod
550
+ def decoder_fn(data):
551
+ try:
552
+ value = data.decode("utf-8")
553
+ except UnicodeDecodeError as e:
554
+ raise DecodingError(
555
+ e.encoding,
556
+ e.object,
557
+ e.start,
558
+ e.end,
559
+ "The returned type for this function is string which is "
560
+ "expected to be a UTF8 encoded string of text. The returned "
561
+ "value could not be decoded as valid UTF8. This is indicative "
562
+ "of a broken application which is using incorrect return types for "
563
+ "binary data.",
564
+ ) from e
565
+ return value